From 0c7f461c6dc085b38edbfe5ca1ed989da86c8a66 Mon Sep 17 00:00:00 2001 From: Maksymilian Wilczynski Date: Mon, 11 May 2026 10:08:41 +0200 Subject: [PATCH] add doom, disable warnings as errors, massive speedups in the fat32 driver, HAL_KEYBOARD Poll now returns the key and added IsKeyDown used by GetAsyncKeyState, slight upgrade in hal_main drain and pray, more accurate QueryTicks and by that GetTickCount, add GetTickCount64, boot.ini now dictates what executable should init launch, not the kernel, LaunchUserProcess in kmain.c now takes an argument, rearrange syscall numbers, add SysKbIsKeyDown syscall, use include windows.h over manual definitions, add fictional win32 api ClearConsoleScreenBuffer and real FlushConsoleInputBuffer and a clear command to the shell, print exit codes as signed int, StretchDIBits now can stretch, runa.bat now gives 256 MB. --- OVMF/OVMF_VARS_4M_d.fd | Bin 540672 -> 540672 bytes build.bat | 22 +- code/boot.ini | 2 +- code/doom/PureDOOM.h | 48605 ++++++++++++++++++++++++++++ code/doom/doom.c | 329 + code/doom/doom1.wad | Bin 0 -> 4196020 bytes code/drivers/fat32/fat32.c | 1103 +- code/hal/hal_api.h | 3 +- code/hal/hal_keyboard.c | 285 +- code/hal/hal_main.c | 5 +- code/hal/hal_timer.c | 24 +- code/init/init.c | 12 +- code/kernel/ke_syscall.c | 146 +- code/kernel/kmain.c | 11 +- code/kernel/syscall_nr.h | 98 +- code/shell/shell.c | 124 +- code/syscall/syscall_nr.inc | 174 +- code/syscall/syscall_stubs.asm | 127 +- video.bk2 => code/video/video.bk2 | Bin code/video/video.c | 73 +- code/win32/gdi32.c | 119 +- code/win32/kernel32.c | 155 +- readme.md | 127 +- runa.bat | 2 +- 24 files changed, 50236 insertions(+), 1310 deletions(-) create mode 100644 code/doom/PureDOOM.h create mode 100644 code/doom/doom.c create mode 100644 code/doom/doom1.wad rename video.bk2 => code/video/video.bk2 (100%) diff --git a/OVMF/OVMF_VARS_4M_d.fd b/OVMF/OVMF_VARS_4M_d.fd index 1449dbaf9a018cf32c359d5397a5ac543e5bbe22..4616f9687dea3f98577020f9924f2721f47a78f9 100644 GIT binary patch delta 140 zcmZo@P;6*W+%Q3pv3K)Cz2{7feVZo+bqg@|L#PQ5Y9fT11feEFs3{O?DukK_q&x*C zr>QDUF3?k8oDSq(DN)-5SOS=~39)S8ZBt-rQ($dV NU~5xgU#7sJ008Q*G0^}3 delta 286 zcmXBIISRr+7>40Y92XQZc!EC{NSPCOfMDfr+~Tfrw;T|ru`%QVR@Oqmv{v?MJb~af z41U$a`wF28q2DhCs|23$RarIg%4dz$Kpiwd6SQJ-1>ZG@wQ+3F0bS4oeJ}tH7=jTP zg9(^|8JL3wSOOQUz#4487VNAoh&i8!#w|6x7P+1GpKnVN Nmz0#0l9awthJF+UXY~L8 diff --git a/build.bat b/build.bat index 2b05089..a77a28d 100644 --- a/build.bat +++ b/build.bat @@ -22,10 +22,11 @@ mkdir "obj\posix" 2>nul mkdir "obj\drivers" 2>nul mkdir "obj\init" 2>nul mkdir "obj\shell" 2>nul +mkdir "obj\doom" 2>nul mkdir "obj\video" 2>nul mkdir "bin" 2>nul -set CFLAGS=/nologo /W4 /WX /Od /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi /Zi /std:c17 /D_CRT_SECURE_NO_WARNINGS /I"%SRC%\kernel" /I"%SRC%\hal" +set CFLAGS=/nologo /W3 /Od /GS- /Gs999999 /Gz /Gy /EHsc- /GR- /Oi /Zi /std:c17 /D_CRT_SECURE_NO_WARNINGS /I"%SRC%\kernel" /I"%SRC%\hal" set LFLAGS=/nologo /NODEFAULTLIB /DEBUG :: ---- Assemble ASM files ---- @@ -115,8 +116,8 @@ link /nologo /SUBSYSTEM:NATIVE /NODEFAULTLIB /DLL /OUT:"bin\usb.sys" /ENTRY:Driv :: ---- Compile init ---- echo Compiling init... -for %%f in (%SRC%\shell\*.c) do ( - cl %CFLAGS% /c /Fo"obj\shell\%%~nf.obj" "%%f" || exit /b 1 +for %%f in (%SRC%\init\*.c) do ( + cl %CFLAGS% /c /Fo"obj\init\%%~nf.obj" "%%f" || exit /b 1 ) :: ---- Link init.exe ---- @@ -134,6 +135,17 @@ echo Linking shell.exe... link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^ /OUT:"bin\shell.exe" /PDB:"bin\shell.pdb" bin\win32.lib obj\libc.obj obj\shell\*.obj || exit /b 1 +:: ---- Compile doom ---- +echo Compiling doom... +for %%f in (%SRC%\doom\*.c) do ( + cl %CFLAGS% /c /Fo"obj\doom\%%~nf.obj" "%%f" || exit /b 1 +) + +:: ---- Link doom.exe ---- +echo Linking doom.exe... +link %LFLAGS% /SUBSYSTEM:NATIVE /ENTRY:main ^ + /OUT:"bin\doom.exe" /PDB:"bin\doom.pdb" bin\win32.lib obj\libc.obj obj\doom\*.obj || exit /b 1 + :: ---- Compile video player ---- echo Compiling video... for %%f in (%SRC%\video\*.c) do ( @@ -181,11 +193,13 @@ copy /y "bin\fat32.sys" "%DEST%\drivers\" copy /y "bin\usb.sys" "%DEST%\drivers\" copy /y "bin\init.exe" "%DEST%\" copy /y "bin\shell.exe" "%DEST%\" +copy /y "bin\doom.exe" "%DEST%\" copy /y "bin\video.exe" "%DEST%\" copy /y "%SRC%\boot.ini" "%DEST%\" copy /y "%SRC%\drivers\drivers.ini" "%DEST%\drivers\" if exist "%SRC%\video\bink2w64.dll" copy /y "%SRC%\video\bink2w64.dll" "%DEST%\" -if exist "video.bk2" copy /y "video.bk2" "%DEST%\" +if exist "%SRC%\video\video.bk2" copy /y "%SRC%\video\video.bk2" "%DEST%\" +if exist "%SRC%\doom\doom1.wad" copy /y "%SRC%\doom\doom1.wad" "%DEST%\" :: ---- Unmount disk image ---- echo Unmounting disk.vhd... diff --git a/code/boot.ini b/code/boot.ini index c9d8d68..7c91c2e 100644 --- a/code/boot.ini +++ b/code/boot.ini @@ -1,4 +1,4 @@ [kernel] debug = 1 [init] -commandline = init.exe +commandline = shell.exe diff --git a/code/doom/PureDOOM.h b/code/doom/PureDOOM.h new file mode 100644 index 0000000..4d49eb4 --- /dev/null +++ b/code/doom/PureDOOM.h @@ -0,0 +1,48605 @@ +//----------------------------------------------------------------------------- +// +// Copyright (C) 1993-1996 by id Software, Inc. +// +// This source is available for distribution and/or modification +// only under the terms of the DOOM Source Code License as +// published by id Software. All rights reserved. +// +// The source is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License +// for more details. +// +//----------------------------------------------------------------------------- +/* Pure DOOM usage + + Do this: + #define DOOM_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define DOOM_IMPLEMENTATION + #include "PureDOOM.h" + +*/ +//----------------------------------------------------------------------------- + + +#ifndef __DOOM_H__ +#define __DOOM_H__ + + +// Sample rate of sound samples from doom +#define DOOM_SAMPLERATE 11025 + +// MIDI tick needs to be called 140 times per seconds +#define DOOM_MIDI_RATE 140 + +// Hide menu options. If for say your platform doesn't support mouse or +// MIDI playback, you can hide these settings from the menu. +#define DOOM_FLAG_HIDE_MOUSE_OPTIONS 1 // Remove mouse options from menu +#define DOOM_FLAG_HIDE_SOUND_OPTIONS 2 // Remove sound options from menu +#define DOOM_FLAG_HIDE_MUSIC_OPTIONS 4 // Remove music options from menu + +// Darken background when menu is open, making it more readable. This +// uses a bit more CPU and redraws the HUD every frame +#define DOOM_FLAG_MENU_DARKEN_BG 8 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + DOOM_SEEK_CUR = 1, + DOOM_SEEK_END = 2, + DOOM_SEEK_SET = 0 +} doom_seek_t; + + +typedef void(*doom_print_fn)(const char* str); +typedef void*(*doom_malloc_fn)(int size); +typedef void(*doom_free_fn)(void* ptr); +typedef void*(*doom_open_fn)(const char* filename, const char* mode); +typedef void(*doom_close_fn)(void* handle); +typedef int(*doom_read_fn)(void* handle, void *buf, int count); +typedef int(*doom_write_fn)(void* handle, const void *buf, int count); +typedef int(*doom_seek_fn)(void* handle, int offset, doom_seek_t origin); +typedef int(*doom_tell_fn)(void* handle); +typedef int(*doom_eof_fn)(void* handle); +typedef void(*doom_gettime_fn)(int* sec, int* usec); +typedef void(*doom_exit_fn)(int code); +typedef char*(*doom_getenv_fn)(const char* var); + + +// Doom key mapping +typedef enum +{ + DOOM_KEY_UNKNOWN = -1, + DOOM_KEY_TAB = 9, + DOOM_KEY_ENTER = 13, + DOOM_KEY_ESCAPE = 27, + DOOM_KEY_SPACE = 32, + DOOM_KEY_APOSTROPHE = '\'', + DOOM_KEY_MULTIPLY = '*', + DOOM_KEY_COMMA = ',', + DOOM_KEY_MINUS = 0x2d, + DOOM_KEY_PERIOD = '.', + DOOM_KEY_SLASH = '/', + DOOM_KEY_0 = '0', + DOOM_KEY_1 = '1', + DOOM_KEY_2 = '2', + DOOM_KEY_3 = '3', + DOOM_KEY_4 = '4', + DOOM_KEY_5 = '5', + DOOM_KEY_6 = '6', + DOOM_KEY_7 = '7', + DOOM_KEY_8 = '8', + DOOM_KEY_9 = '9', + DOOM_KEY_SEMICOLON = ';', + DOOM_KEY_EQUALS = 0x3d, + DOOM_KEY_LEFT_BRACKET = '[', + DOOM_KEY_RIGHT_BRACKET = ']', + DOOM_KEY_A = 'a', + DOOM_KEY_B = 'b', + DOOM_KEY_C = 'c', + DOOM_KEY_D = 'd', + DOOM_KEY_E = 'e', + DOOM_KEY_F = 'f', + DOOM_KEY_G = 'g', + DOOM_KEY_H = 'h', + DOOM_KEY_I = 'i', + DOOM_KEY_J = 'j', + DOOM_KEY_K = 'k', + DOOM_KEY_L = 'l', + DOOM_KEY_M = 'm', + DOOM_KEY_N = 'n', + DOOM_KEY_O = 'o', + DOOM_KEY_P = 'p', + DOOM_KEY_Q = 'q', + DOOM_KEY_R = 'r', + DOOM_KEY_S = 's', + DOOM_KEY_T = 't', + DOOM_KEY_U = 'u', + DOOM_KEY_V = 'v', + DOOM_KEY_W = 'w', + DOOM_KEY_X = 'x', + DOOM_KEY_Y = 'y', + DOOM_KEY_Z = 'z', + DOOM_KEY_BACKSPACE = 127, + DOOM_KEY_CTRL = (0x80 + 0x1d), // Both left and right + DOOM_KEY_LEFT_ARROW = 0xac, + DOOM_KEY_UP_ARROW = 0xad, + DOOM_KEY_RIGHT_ARROW = 0xae, + DOOM_KEY_DOWN_ARROW = 0xaf, + DOOM_KEY_SHIFT = (0x80 + 0x36), // Both left and right + DOOM_KEY_ALT = (0x80 + 0x38), // Both left and right + DOOM_KEY_F1 = (0x80 + 0x3b), + DOOM_KEY_F2 = (0x80 + 0x3c), + DOOM_KEY_F3 = (0x80 + 0x3d), + DOOM_KEY_F4 = (0x80 + 0x3e), + DOOM_KEY_F5 = (0x80 + 0x3f), + DOOM_KEY_F6 = (0x80 + 0x40), + DOOM_KEY_F7 = (0x80 + 0x41), + DOOM_KEY_F8 = (0x80 + 0x42), + DOOM_KEY_F9 = (0x80 + 0x43), + DOOM_KEY_F10 = (0x80 + 0x44), + DOOM_KEY_F11 = (0x80 + 0x57), + DOOM_KEY_F12 = (0x80 + 0x58), + DOOM_KEY_PAUSE = 0xff +} doom_key_t; + + +// Mouse button mapping +typedef enum +{ + DOOM_LEFT_BUTTON = 0, + DOOM_RIGHT_BUTTON = 1, + DOOM_MIDDLE_BUTTON = 2 +} doom_button_t; + + +// For the software renderer. Default is 320x200 +void doom_set_resolution(int width, int height); + +// Set default configurations. Lets say, changing arrows to WASD as default controls +void doom_set_default_int(const char* name, int value); +void doom_set_default_string(const char* name, const char* value); + +// set callbacks +void doom_set_print(doom_print_fn print_fn); +void doom_set_malloc(doom_malloc_fn malloc_fn, doom_free_fn free_fn); +void doom_set_file_io(doom_open_fn open_fn, + doom_close_fn close_fn, + doom_read_fn read_fn, + doom_write_fn write_fn, + doom_seek_fn seek_fn, + doom_tell_fn tell_fn, + doom_eof_fn eof_fn); +void doom_set_gettime(doom_gettime_fn gettime_fn); +void doom_set_exit(doom_exit_fn exit_fn); +void doom_set_getenv(doom_getenv_fn getenv_fn); + +// Initializes DOOM and start things up. Call only call one +void doom_init(int argc, const char** argv, int flags); + +// Call this every frame +void doom_update(); // This will update at 35 FPS +void doom_force_update(); // This will run a frame everytime it's called, regardless of FPS. + +// Channels: 1 = indexed, 3 = RGB, 4 = RGBA +const unsigned char* doom_get_framebuffer(int channels); + +// It is always 2048 bytes in size +short* doom_get_sound_buffer(); + +// Call this 140 times per second. Or about every 7ms. +// Returns midi message. Keep calling it until it returns 0. +unsigned long doom_tick_midi(); + +// Events +void doom_key_down(doom_key_t key); +void doom_key_up(doom_key_t key); +void doom_button_down(doom_button_t button); +void doom_button_up(doom_button_t button); +void doom_mouse_move(int delta_x, int delta_y); + + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif +#ifndef __D_ENGLSH__ +#define __D_ENGLSH__ + + +// +// Printed strings for translation +// + +// +// D_Main.C +// +#define D_DEVSTR "Development mode ON.\n" +#define D_CDROM "CD-ROM Version: default.cfg from c:\\doomdata\n" + +// +// M_Menu.C +// +#define PRESSKEY "press a key." +#define PRESSYN "press y or n." +#define QUITMSG "are you sure you want to\nquit this great game?" +#define LOADNET "you can't do load while in a net game!\n\n" PRESSKEY +#define QLOADNET "you can't quickload during a netgame!\n\n" PRESSKEY +#define QSAVESPOT "you haven't picked a quicksave slot yet!\n\n" PRESSKEY +#define SAVEDEAD "you can't save if you aren't playing!\n\n" PRESSKEY +#define QSPROMPT "quicksave over your game named\n\n'%s'?\n\n" PRESSYN +#define QLPROMPT "do you want to quickload the game named\n\n'%s'?\n\n" PRESSYN + +#define QSPROMPT_1 "quicksave over your game named\n\n'" +#define QSPROMPT_2 "'?\n\n" PRESSYN +#define QLPROMPT_1 "do you want to quickload the game named\n\n'%s" +#define QLPROMPT_2 "'?\n\n" PRESSYN + +#define NEWGAME \ +"you can't start a new game\n"\ +"while in a network game.\n\n" PRESSKEY + +#define NIGHTMARE \ +"are you sure? this skill level\n"\ +"isn't even remotely fair.\n\n" PRESSYN + +#define SWSTRING \ +"this is the shareware version of doom.\n\n"\ +"you need to order the entire trilogy.\n\n" PRESSKEY + +#define MSGOFF "Messages OFF" +#define MSGON "Messages ON" +#define CROSSOFF "Crosshair OFF" +#define CROSSON "Crosshair ON" +#define ALWAYSRUNOFF "Always run OFF" +#define ALWAYSRUNON "Always run ON" +#define NETEND "you can't end a netgame!\n\n" PRESSKEY +#define ENDGAME "are you sure you want to end the game?\n\n" PRESSYN + +#define DOSY "(press y to quit)" + +#define DETAILHI "High detail" +#define DETAILLO "Low detail" +#define GAMMALVL0 "Gamma correction OFF" +#define GAMMALVL1 "Gamma correction level 1" +#define GAMMALVL2 "Gamma correction level 2" +#define GAMMALVL3 "Gamma correction level 3" +#define GAMMALVL4 "Gamma correction level 4" +#define EMPTYSTRING "empty slot" + +// +// P_inter.C +// +#define GOTARMOR "Picked up the armor." +#define GOTMEGA "Picked up the MegaArmor!" +#define GOTHTHBONUS "Picked up a health bonus." +#define GOTARMBONUS "Picked up an armor bonus." +#define GOTSTIM "Picked up a stimpack." +#define GOTMEDINEED "Picked up a medikit that you REALLY need!" +#define GOTMEDIKIT "Picked up a medikit." +#define GOTSUPER "Supercharge!" + +#define GOTBLUECARD "Picked up a blue keycard." +#define GOTYELWCARD "Picked up a yellow keycard." +#define GOTREDCARD "Picked up a red keycard." +#define GOTBLUESKUL "Picked up a blue skull key." +#define GOTYELWSKUL "Picked up a yellow skull key." +#define GOTREDSKULL "Picked up a red skull key." + +#define GOTINVUL "Invulnerability!" +#define GOTBERSERK "Berserk!" +#define GOTINVIS "Partial Invisibility" +#define GOTSUIT "Radiation Shielding Suit" +#define GOTMAP "Computer Area Map" +#define GOTVISOR "Light Amplification Visor" +#define GOTMSPHERE "MegaSphere!" + +#define GOTCLIP "Picked up a clip." +#define GOTCLIPBOX "Picked up a box of bullets." +#define GOTROCKET "Picked up a rocket." +#define GOTROCKBOX "Picked up a box of rockets." +#define GOTCELL "Picked up an energy cell." +#define GOTCELLBOX "Picked up an energy cell pack." +#define GOTSHELLS "Picked up 4 shotgun shells." +#define GOTSHELLBOX "Picked up a box of shotgun shells." +#define GOTBACKPACK "Picked up a backpack full of ammo!" + +#define GOTBFG9000 "You got the BFG9000! Oh, yes." +#define GOTCHAINGUN "You got the chaingun!" +#define GOTCHAINSAW "A chainsaw! Find some meat!" +#define GOTLAUNCHER "You got the rocket launcher!" +#define GOTPLASMA "You got the plasma gun!" +#define GOTSHOTGUN "You got the shotgun!" +#define GOTSHOTGUN2 "You got the super shotgun!" + +// +// P_Doors.C +// +#define PD_BLUEO "You need a blue key to activate this object" +#define PD_REDO "You need a red key to activate this object" +#define PD_YELLOWO "You need a yellow key to activate this object" +#define PD_BLUEK "You need a blue key to open this door" +#define PD_REDK "You need a red key to open this door" +#define PD_YELLOWK "You need a yellow key to open this door" + +// +// G_game.C +// +#define GGSAVED "game saved." + +// +// HU_stuff.C +// +#define HUSTR_MSGU "[Message unsent]" + +#define HUSTR_E1M1 "E1M1: Hangar" +#define HUSTR_E1M2 "E1M2: Nuclear Plant" +#define HUSTR_E1M3 "E1M3: Toxin Refinery" +#define HUSTR_E1M4 "E1M4: Command Control" +#define HUSTR_E1M5 "E1M5: Phobos Lab" +#define HUSTR_E1M6 "E1M6: Central Processing" +#define HUSTR_E1M7 "E1M7: Computer Station" +#define HUSTR_E1M8 "E1M8: Phobos Anomaly" +#define HUSTR_E1M9 "E1M9: Military Base" + +#define HUSTR_E2M1 "E2M1: Deimos Anomaly" +#define HUSTR_E2M2 "E2M2: Containment Area" +#define HUSTR_E2M3 "E2M3: Refinery" +#define HUSTR_E2M4 "E2M4: Deimos Lab" +#define HUSTR_E2M5 "E2M5: Command Center" +#define HUSTR_E2M6 "E2M6: Halls of the Damned" +#define HUSTR_E2M7 "E2M7: Spawning Vats" +#define HUSTR_E2M8 "E2M8: Tower of Babel" +#define HUSTR_E2M9 "E2M9: Fortress of Mystery" + +#define HUSTR_E3M1 "E3M1: Hell Keep" +#define HUSTR_E3M2 "E3M2: Slough of Despair" +#define HUSTR_E3M3 "E3M3: Pandemonium" +#define HUSTR_E3M4 "E3M4: House of Pain" +#define HUSTR_E3M5 "E3M5: Unholy Cathedral" +#define HUSTR_E3M6 "E3M6: Mt. Erebus" +#define HUSTR_E3M7 "E3M7: Limbo" +#define HUSTR_E3M8 "E3M8: Dis" +#define HUSTR_E3M9 "E3M9: Warrens" + +#define HUSTR_E4M1 "E4M1: Hell Beneath" +#define HUSTR_E4M2 "E4M2: Perfect Hatred" +#define HUSTR_E4M3 "E4M3: Sever The Wicked" +#define HUSTR_E4M4 "E4M4: Unruly Evil" +#define HUSTR_E4M5 "E4M5: They Will Repent" +#define HUSTR_E4M6 "E4M6: Against Thee Wickedly" +#define HUSTR_E4M7 "E4M7: And Hell Followed" +#define HUSTR_E4M8 "E4M8: Unto The Cruel" +#define HUSTR_E4M9 "E4M9: Fear" + +#define HUSTR_1 "level 1: entryway" +#define HUSTR_2 "level 2: underhalls" +#define HUSTR_3 "level 3: the gantlet" +#define HUSTR_4 "level 4: the focus" +#define HUSTR_5 "level 5: the waste tunnels" +#define HUSTR_6 "level 6: the crusher" +#define HUSTR_7 "level 7: dead simple" +#define HUSTR_8 "level 8: tricks and traps" +#define HUSTR_9 "level 9: the pit" +#define HUSTR_10 "level 10: refueling base" +#define HUSTR_11 "level 11: 'o' of destruction!" + +#define HUSTR_12 "level 12: the factory" +#define HUSTR_13 "level 13: downtown" +#define HUSTR_14 "level 14: the inmost dens" +#define HUSTR_15 "level 15: industrial zone" +#define HUSTR_16 "level 16: suburbs" +#define HUSTR_17 "level 17: tenements" +#define HUSTR_18 "level 18: the courtyard" +#define HUSTR_19 "level 19: the citadel" +#define HUSTR_20 "level 20: gotcha!" + +#define HUSTR_21 "level 21: nirvana" +#define HUSTR_22 "level 22: the catacombs" +#define HUSTR_23 "level 23: barrels o' fun" +#define HUSTR_24 "level 24: the chasm" +#define HUSTR_25 "level 25: bloodfalls" +#define HUSTR_26 "level 26: the abandoned mines" +#define HUSTR_27 "level 27: monster condo" +#define HUSTR_28 "level 28: the spirit world" +#define HUSTR_29 "level 29: the living end" +#define HUSTR_30 "level 30: icon of sin" + +#define HUSTR_31 "level 31: wolfenstein" +#define HUSTR_32 "level 32: grosse" + +#define PHUSTR_1 "level 1: congo" +#define PHUSTR_2 "level 2: well of souls" +#define PHUSTR_3 "level 3: aztec" +#define PHUSTR_4 "level 4: caged" +#define PHUSTR_5 "level 5: ghost town" +#define PHUSTR_6 "level 6: baron's lair" +#define PHUSTR_7 "level 7: caughtyard" +#define PHUSTR_8 "level 8: realm" +#define PHUSTR_9 "level 9: abattoire" +#define PHUSTR_10 "level 10: onslaught" +#define PHUSTR_11 "level 11: hunted" + +#define PHUSTR_12 "level 12: speed" +#define PHUSTR_13 "level 13: the crypt" +#define PHUSTR_14 "level 14: genesis" +#define PHUSTR_15 "level 15: the twilight" +#define PHUSTR_16 "level 16: the omen" +#define PHUSTR_17 "level 17: compound" +#define PHUSTR_18 "level 18: neurosphere" +#define PHUSTR_19 "level 19: nme" +#define PHUSTR_20 "level 20: the death domain" + +#define PHUSTR_21 "level 21: slayer" +#define PHUSTR_22 "level 22: impossible mission" +#define PHUSTR_23 "level 23: tombstone" +#define PHUSTR_24 "level 24: the final frontier" +#define PHUSTR_25 "level 25: the temple of darkness" +#define PHUSTR_26 "level 26: bunker" +#define PHUSTR_27 "level 27: anti-christ" +#define PHUSTR_28 "level 28: the sewers" +#define PHUSTR_29 "level 29: odyssey of noises" +#define PHUSTR_30 "level 30: the gateway of hell" + +#define PHUSTR_31 "level 31: cyberden" +#define PHUSTR_32 "level 32: go 2 it" + +#define THUSTR_1 "level 1: system control" +#define THUSTR_2 "level 2: human bbq" +#define THUSTR_3 "level 3: power control" +#define THUSTR_4 "level 4: wormhole" +#define THUSTR_5 "level 5: hanger" +#define THUSTR_6 "level 6: open season" +#define THUSTR_7 "level 7: prison" +#define THUSTR_8 "level 8: metal" +#define THUSTR_9 "level 9: stronghold" +#define THUSTR_10 "level 10: redemption" +#define THUSTR_11 "level 11: storage facility" + +#define THUSTR_12 "level 12: crater" +#define THUSTR_13 "level 13: nukage processing" +#define THUSTR_14 "level 14: steel works" +#define THUSTR_15 "level 15: dead zone" +#define THUSTR_16 "level 16: deepest reaches" +#define THUSTR_17 "level 17: processing area" +#define THUSTR_18 "level 18: mill" +#define THUSTR_19 "level 19: shipping/respawning" +#define THUSTR_20 "level 20: central processing" + +#define THUSTR_21 "level 21: administration center" +#define THUSTR_22 "level 22: habitat" +#define THUSTR_23 "level 23: lunar mining project" +#define THUSTR_24 "level 24: quarry" +#define THUSTR_25 "level 25: baron's den" +#define THUSTR_26 "level 26: ballistyx" +#define THUSTR_27 "level 27: mount pain" +#define THUSTR_28 "level 28: heck" +#define THUSTR_29 "level 29: river styx" +#define THUSTR_30 "level 30: last call" + +#define THUSTR_31 "level 31: pharaoh" +#define THUSTR_32 "level 32: caribbean" + +#define HUSTR_CHATMACRO1 "I'm ready to kick butt!" +#define HUSTR_CHATMACRO2 "I'm OK." +#define HUSTR_CHATMACRO3 "I'm not looking too good!" +#define HUSTR_CHATMACRO4 "Help!" +#define HUSTR_CHATMACRO5 "You suck!" +#define HUSTR_CHATMACRO6 "Next time, scumbag..." +#define HUSTR_CHATMACRO7 "Come here!" +#define HUSTR_CHATMACRO8 "I'll take care of it." +#define HUSTR_CHATMACRO9 "Yes" +#define HUSTR_CHATMACRO0 "No" + +#define HUSTR_TALKTOSELF1 "You mumble to yourself" +#define HUSTR_TALKTOSELF2 "Who's there?" +#define HUSTR_TALKTOSELF3 "You scare yourself" +#define HUSTR_TALKTOSELF4 "You start to rave" +#define HUSTR_TALKTOSELF5 "You've lost it..." + +#define HUSTR_MESSAGESENT "[Message Sent]" + +// The following should NOT be changed unless it seems +// just AWFULLY necessary + +#define HUSTR_PLRGREEN "Green: " +#define HUSTR_PLRINDIGO "Indigo: " +#define HUSTR_PLRBROWN "Brown: " +#define HUSTR_PLRRED "Red: " + +#define HUSTR_KEYGREEN 'g' +#define HUSTR_KEYINDIGO 'i' +#define HUSTR_KEYBROWN 'b' +#define HUSTR_KEYRED 'r' + +// +// AM_map.C +// + +#define AMSTR_FOLLOWON "Follow Mode ON" +#define AMSTR_FOLLOWOFF "Follow Mode OFF" + +#define AMSTR_GRIDON "Grid ON" +#define AMSTR_GRIDOFF "Grid OFF" + +#define AMSTR_MARKEDSPOT "Marked Spot" +#define AMSTR_MARKSCLEARED "All Marks Cleared" + +// +// ST_stuff.C +// + +#define STSTR_MUS "Music Change" +#define STSTR_NOMUS "IMPOSSIBLE SELECTION" +#define STSTR_DQDON "Degreelessness Mode On" +#define STSTR_DQDOFF "Degreelessness Mode Off" + +#define STSTR_KFAADDED "Very Happy Ammo Added" +#define STSTR_FAADDED "Ammo (no keys) Added" + +#define STSTR_NCON "No Clipping Mode ON" +#define STSTR_NCOFF "No Clipping Mode OFF" + +#define STSTR_BEHOLD "inVuln, Str, Inviso, Rad, Allmap, or Lite-amp" +#define STSTR_BEHOLDX "Power-up Toggled" + +#define STSTR_CHOPPERS "... doesn't suck - GM" +#define STSTR_CLEV "Changing Level..." + +// +// F_Finale.C +// +#define E1TEXT \ +"Once you beat the big badasses and\n"\ +"clean out the moon base you're supposed\n"\ +"to win, aren't you? Aren't you? Where's\n"\ +"your fat reward and ticket home? What\n"\ +"the hell is this? It's not supposed to\n"\ +"end this way!\n"\ +"\n" \ +"It stinks like rotten meat, but looks\n"\ +"like the lost Deimos base. Looks like\n"\ +"you're stuck on The Shores of Hell.\n"\ +"The only way out is through.\n"\ +"\n"\ +"To continue the DOOM experience, play\n"\ +"The Shores of Hell and its amazing\n"\ +"sequel, Inferno!\n" + + +#define E2TEXT \ +"You've done it! The hideous cyber-\n"\ +"demon lord that ruled the lost Deimos\n"\ +"moon base has been slain and you\n"\ +"are triumphant! But ... where are\n"\ +"you? You clamber to the edge of the\n"\ +"moon and look down to see the awful\n"\ +"truth.\n" \ +"\n"\ +"Deimos floats above Hell itself!\n"\ +"You've never heard of anyone escaping\n"\ +"from Hell, but you'll make the bastards\n"\ +"sorry they ever heard of you! Quickly,\n"\ +"you rappel down to the surface of\n"\ +"Hell.\n"\ +"\n" \ +"Now, it's on to the final chapter of\n"\ +"DOOM! -- Inferno." + + +#define E3TEXT \ +"The loathsome spiderdemon that\n"\ +"masterminded the invasion of the moon\n"\ +"bases and caused so much death has had\n"\ +"its ass kicked for all time.\n"\ +"\n"\ +"A hidden doorway opens and you enter.\n"\ +"You've proven too tough for Hell to\n"\ +"contain, and now Hell at last plays\n"\ +"fair -- for you emerge from the door\n"\ +"to see the green fields of Earth!\n"\ +"Home at last.\n" \ +"\n"\ +"You wonder what's been happening on\n"\ +"Earth while you were battling evil\n"\ +"unleashed. It's good that no Hell-\n"\ +"spawn could have come through that\n"\ +"door with you ..." + + +#define E4TEXT \ +"the spider mastermind must have sent forth\n"\ +"its legions of hellspawn before your\n"\ +"final confrontation with that terrible\n"\ +"beast from hell. but you stepped forward\n"\ +"and brought forth eternal damnation and\n"\ +"suffering upon the horde as a doom_true hero\n"\ +"would in the face of something so evil.\n"\ +"\n"\ +"besides, someone was gonna pay for what\n"\ +"happened to daisy, your pet rabbit.\n"\ +"\n"\ +"but now, you see spread before you more\n"\ +"potential pain and gibbitude as a nation\n"\ +"of demons run amok among our cities.\n"\ +"\n"\ +"next stop, hell on earth!" + + +// after level 6, put this: +#define C1TEXT \ +"YOU HAVE ENTERED DEEPLY INTO THE INFESTED\n" \ +"STARPORT. BUT SOMETHING IS WRONG. THE\n" \ +"MONSTERS HAVE BROUGHT THEIR OWN REALITY\n" \ +"WITH THEM, AND THE STARPORT'S TECHNOLOGY\n" \ +"IS BEING SUBVERTED BY THEIR PRESENCE.\n" \ +"\n"\ +"AHEAD, YOU SEE AN OUTPOST OF HELL, A\n" \ +"FORTIFIED ZONE. IF YOU CAN GET PAST IT,\n" \ +"YOU CAN PENETRATE INTO THE HAUNTED HEART\n" \ +"OF THE STARBASE AND FIND THE CONTROLLING\n" \ +"SWITCH WHICH HOLDS EARTH'S POPULATION\n" \ +"HOSTAGE." + +// After level 11, put this: +#define C2TEXT \ +"YOU HAVE WON! YOUR VICTORY HAS ENABLED\n" \ +"HUMANKIND TO EVACUATE EARTH AND ESCAPE\n"\ +"THE NIGHTMARE. NOW YOU ARE THE ONLY\n"\ +"HUMAN LEFT ON THE FACE OF THE PLANET.\n"\ +"CANNIBAL MUTATIONS, CARNIVOROUS ALIENS,\n"\ +"AND EVIL SPIRITS ARE YOUR ONLY NEIGHBORS.\n"\ +"YOU SIT BACK AND WAIT FOR DEATH, CONTENT\n"\ +"THAT YOU HAVE SAVED YOUR SPECIES.\n"\ +"\n"\ +"BUT THEN, EARTH CONTROL BEAMS DOWN A\n"\ +"MESSAGE FROM SPACE: \"SENSORS HAVE LOCATED\n"\ +"THE SOURCE OF THE ALIEN INVASION. IF YOU\n"\ +"GO THERE, YOU MAY BE ABLE TO BLOCK THEIR\n"\ +"ENTRY. THE ALIEN BASE IS IN THE HEART OF\n"\ +"YOUR OWN HOME CITY, NOT FAR FROM THE\n"\ +"STARPORT.\" SLOWLY AND PAINFULLY YOU GET\n"\ +"UP AND RETURN TO THE FRAY." + + +// After level 20, put this: +#define C3TEXT \ +"YOU ARE AT THE CORRUPT HEART OF THE CITY,\n"\ +"SURROUNDED BY THE CORPSES OF YOUR ENEMIES.\n"\ +"YOU SEE NO WAY TO DESTROY THE CREATURES'\n"\ +"ENTRYWAY ON THIS SIDE, SO YOU CLENCH YOUR\n"\ +"TEETH AND PLUNGE THROUGH IT.\n"\ +"\n"\ +"THERE MUST BE A WAY TO CLOSE IT ON THE\n"\ +"OTHER SIDE. WHAT DO YOU CARE IF YOU'VE\n"\ +"GOT TO GO THROUGH HELL TO GET TO IT?" + + +// After level 29, put this: +#define C4TEXT \ +"THE HORRENDOUS VISAGE OF THE BIGGEST\n"\ +"DEMON YOU'VE EVER SEEN CRUMBLES BEFORE\n"\ +"YOU, AFTER YOU PUMP YOUR ROCKETS INTO\n"\ +"HIS EXPOSED BRAIN. THE MONSTER SHRIVELS\n"\ +"UP AND DIES, ITS THRASHING LIMBS\n"\ +"DEVASTATING UNTOLD MILES OF HELL'S\n"\ +"SURFACE.\n"\ +"\n"\ +"YOU'VE DONE IT. THE INVASION IS OVER.\n"\ +"EARTH IS SAVED. HELL IS A WRECK. YOU\n"\ +"WONDER WHERE BAD FOLKS WILL GO WHEN THEY\n"\ +"DIE, NOW. WIPING THE SWEAT FROM YOUR\n"\ +"FOREHEAD YOU BEGIN THE LONG TREK BACK\n"\ +"HOME. REBUILDING EARTH OUGHT TO BE A\n"\ +"LOT MORE FUN THAN RUINING IT WAS.\n" + + + +// Before level 31, put this: +#define C5TEXT \ +"CONGRATULATIONS, YOU'VE FOUND THE SECRET\n"\ +"LEVEL! LOOKS LIKE IT'S BEEN BUILT BY\n"\ +"HUMANS, RATHER THAN DEMONS. YOU WONDER\n"\ +"WHO THE INMATES OF THIS CORNER OF HELL\n"\ +"WILL BE." + + +// Before level 32, put this: +#define C6TEXT \ +"CONGRATULATIONS, YOU'VE FOUND THE\n"\ +"SUPER SECRET LEVEL! YOU'D BETTER\n"\ +"BLAZE THROUGH THIS ONE!\n" + + +// after map 06 +#define P1TEXT \ +"You gloat over the steaming carcass of the\n"\ +"Guardian. With its death, you've wrested\n"\ +"the Accelerator from the stinking claws\n"\ +"of Hell. You relax and glance around the\n"\ +"room. Damn! There was supposed to be at\n"\ +"least one working prototype, but you can't\n"\ +"see it. The demons must have taken it.\n"\ +"\n"\ +"You must find the prototype, or all your\n"\ +"struggles will have been wasted. Keep\n"\ +"moving, keep fighting, keep killing.\n"\ +"Oh yes, keep living, too." + + +// after map 11 +#define P2TEXT \ +"Even the deadly Arch-Vile labyrinth could\n"\ +"not stop you, and you've gotten to the\n"\ +"prototype Accelerator which is soon\n"\ +"efficiently and permanently deactivated.\n"\ +"\n"\ +"You're good at that kind of thing." + + +// after map 20 +#define P3TEXT \ +"You've bashed and battered your way into\n"\ +"the heart of the devil-hive. Time for a\n"\ +"Search-and-Destroy mission, aimed at the\n"\ +"Gatekeeper, whose foul offspring is\n"\ +"cascading to Earth. Yeah, he's bad. But\n"\ +"you know who's worse!\n"\ +"\n"\ +"Grinning evilly, you check your gear, and\n"\ +"get ready to give the bastard a little Hell\n"\ +"of your own making!" + +// after map 30 +#define P4TEXT \ +"The Gatekeeper's evil face is splattered\n"\ +"all over the place. As its tattered corpse\n"\ +"collapses, an inverted Gate forms and\n"\ +"sucks down the shards of the last\n"\ +"prototype Accelerator, not to mention the\n"\ +"few remaining demons. You're done. Hell\n"\ +"has gone back to pounding bad dead folks \n"\ +"instead of good live ones. Remember to\n"\ +"tell your grandkids to put a rocket\n"\ +"launcher in your coffin. If you go to Hell\n"\ +"when you die, you'll need it for some\n"\ +"final cleaning-up ..." + +// before map 31 +#define P5TEXT \ +"You've found the second-hardest level we\n"\ +"got. Hope you have a saved game a level or\n"\ +"two previous. If not, be prepared to die\n"\ +"aplenty. For master marines only." + +// before map 32 +#define P6TEXT \ +"Betcha wondered just what WAS the hardest\n"\ +"level we had ready for ya? Now you know.\n"\ +"No one gets out alive." + + +#define T1TEXT \ +"You've fought your way out of the infested\n"\ +"experimental labs. It seems that UAC has\n"\ +"once again gulped it down. With their\n"\ +"high turnover, it must be hard for poor\n"\ +"old UAC to buy corporate health insurance\n"\ +"nowadays..\n"\ +"\n"\ +"Ahead lies the military complex, now\n"\ +"swarming with diseased horrors hot to get\n"\ +"their teeth into you. With luck, the\n"\ +"complex still has some warlike ordnance\n"\ +"laying around." + + +#define T2TEXT \ +"You hear the grinding of heavy machinery\n"\ +"ahead. You sure hope they're not stamping\n"\ +"out new hellspawn, but you're ready to\n"\ +"ream out a whole herd if you have to.\n"\ +"They might be planning a blood feast, but\n"\ +"you feel about as mean as two thousand\n"\ +"maniacs packed into one mad killer.\n"\ +"\n"\ +"You don't plan to go down easy." + + +#define T3TEXT \ +"The vista opening ahead looks real damn\n"\ +"familiar. Smells familiar, too -- like\n"\ +"fried excrement. You didn't like this\n"\ +"place before, and you sure as hell ain't\n"\ +"planning to like it now. The more you\n"\ +"brood on it, the madder you get.\n"\ +"Hefting your gun, an evil grin trickles\n"\ +"onto your face. Time to take some names." + +#define T4TEXT \ +"Suddenly, all is silent, from one horizon\n"\ +"to the other. The agonizing echo of Hell\n"\ +"fades away, the nightmare sky turns to\n"\ +"blue, the heaps of monster corpses start \n"\ +"to evaporate along with the evil stench \n"\ +"that filled the air. Jeeze, maybe you've\n"\ +"done it. Have you really won?\n"\ +"\n"\ +"Something rumbles in the distance.\n"\ +"A blue light begins to glow inside the\n"\ +"ruined skull of the demon-spitter." + + +#define T5TEXT \ +"What now? Looks totally different. Kind\n"\ +"of like King Tut's condo. Well,\n"\ +"whatever's here can't be any worse\n"\ +"than usual. Can it? Or maybe it's best\n"\ +"to let sleeping gods lie.." + + +#define T6TEXT \ +"Time for a vacation. You've burst the\n"\ +"bowels of hell and by golly you're ready\n"\ +"for a break. You mutter to yourself,\n"\ +"Maybe someone else can kick Hell's ass\n"\ +"next time around. Ahead lies a quiet town,\n"\ +"with peaceful flowing water, quaint\n"\ +"buildings, and presumably no Hellspawn.\n"\ +"\n"\ +"As you step off the transport, you hear\n"\ +"the stomp of a cyberdemon's iron shoe." + + +// +// Character cast strings F_FINALE.C +// +#define CC_ZOMBIE "ZOMBIEMAN" +#define CC_SHOTGUN "SHOTGUN GUY" +#define CC_HEAVY "HEAVY WEAPON DUDE" +#define CC_IMP "IMP" +#define CC_DEMON "DEMON" +#define CC_LOST "LOST SOUL" +#define CC_CACO "CACODEMON" +#define CC_HELL "HELL KNIGHT" +#define CC_BARON "BARON OF HELL" +#define CC_ARACH "ARACHNOTRON" +#define CC_PAIN "PAIN ELEMENTAL" +#define CC_REVEN "REVENANT" +#define CC_MANCU "MANCUBUS" +#define CC_ARCH "ARCH-VILE" +#define CC_SPIDER "THE SPIDER MASTERMIND" +#define CC_CYBER "THE CYBERDEMON" +#define CC_HERO "OUR HERO" + + +#endif + + +#ifndef __D_THINK__ +#define __D_THINK__ + + +// +// Experimental stuff. +// To compile this as "ANSI C with classes" +// we will need to handle the various +// action functions cleanly. +// +typedef void (*actionf_v)(); +typedef void (*actionf_p1)(void*); +typedef void (*actionf_p2)(void*, void*); + +typedef union +{ + actionf_p1 acp1; + actionf_v acv; + actionf_p2 acp2; +} actionf_t; + + +// Historically, "think_t" is yet another +// function pointer to a routine to handle +// an actor. +typedef actionf_t think_t; + + +// Doubly linked list of actors. +typedef struct thinker_s +{ + struct thinker_s* prev; + struct thinker_s* next; + think_t function; +} thinker_t; + + +#endif + + +#ifndef __DOOM_CONFIG_H__ +#define __DOOM_CONFIG_H__ + + +#if defined(WIN32) +#define DOOM_WIN32 +#elif defined(__APPLE__) +#define DOOM_APPLE +#else +#define DOOM_LINUX +#endif + + +//#include "DOOM.h" + + +#define doom_abs(x) ((x) < 0 ? -(x) : (x)) + + +extern char error_buf[260]; +extern int doom_flags; +extern doom_print_fn doom_print; +extern doom_malloc_fn doom_malloc; +extern doom_free_fn doom_free; +extern doom_open_fn doom_open; +extern doom_close_fn doom_close; +extern doom_read_fn doom_read; +extern doom_write_fn doom_write; +extern doom_seek_fn doom_seek; +extern doom_tell_fn doom_tell; +extern doom_eof_fn doom_eof; +extern doom_gettime_fn doom_gettime; +extern doom_exit_fn doom_exit; +extern doom_getenv_fn doom_getenv; + + +const char* doom_itoa(int i, int radix); +const char* doom_ctoa(char c); +const char* doom_ptoa(void* p); +void doom_memset(void* ptr, int value, int num); +void* doom_memcpy(void* destination, const void* source, int num); +int doom_fprint(void* handle, const char* str); +int doom_strlen(const char* str); +char* doom_concat(char* dst, const char* src); +char* doom_strcpy(char* destination, const char* source); +char* doom_strncpy(char* destination, const char* source, int num); +int doom_strcmp(const char* str1, const char* str2); +int doom_strncmp(const char* str1, const char* str2, int n); +int doom_strcasecmp(const char* str1, const char* str2); +int doom_strncasecmp(const char* str1, const char* str2, int n); +int doom_atoi(const char* str); +int doom_atox(const char* str); +int doom_toupper(int c); + + +#endif +#ifndef __DOOMDEF__ +#define __DOOMDEF__ + + + + + + +// +// Global parameters/defines. +// +// DOOM version +enum +{ + VERSION = 110 +}; + + +// Game mode handling - identify IWAD version +// to handle IWAD dependend animations etc. +typedef enum +{ + shareware, // DOOM 1 shareware, E1, M9 + registered, // DOOM 1 registered, E3, M27 + commercial, // DOOM 2 retail, E1 M34 + // DOOM 2 german edition not handled + retail, // DOOM 1 retail, E4, M36 + indetermined // Well, no IWAD found. +} GameMode_t; + + +// Mission packs - might be useful for TC stuff? +typedef enum +{ + doom, // DOOM 1 + doom2, // DOOM 2 + pack_tnt, // TNT mission pack + pack_plut, // Plutonia pack + none +} GameMission_t; + + +// Identify language to use, software localization. +typedef enum +{ + english, + french, + german, + unknown +} Language_t; + + +// If rangecheck is undefined, +// most parameter validation debugging code will not be compiled +#define RANGECHECK + +// +// For resize of screen, at start of game. +// It will not work dynamically, see visplanes. +// +#define BASE_WIDTH 320 + +// It is educational but futile to change this +// scaling e.g. to 2. Drawing of status bar, +// menues etc. is tied to the scale implied +// by the graphics. +#define SCREEN_MUL 1 +#define INV_ASPECT_RATIO 0.625 // 0.75, ideally + +// Defines suck. C sucks. +// C++ might sucks for OOP, but it sure is a better C. +// So there. +// extern int SCREENWIDTH; +#define SCREENWIDTH 320 +#define SCREENHEIGHT 200 + +// The maximum number of players, multiplayer/networking. +#define MAXPLAYERS 4 + +// State updates, number of tics / second. +#if defined(DOOM_FAST_TICK) +#define TICKMUL 2 +#else +#define TICKMUL 1 +#endif +#define TICRATE (35 * TICKMUL) + + +// The current state of the game: whether we are +// playing, gazing at the intermission screen, +// the game final animation, or a demo. +typedef enum +{ + GS_LEVEL, + GS_INTERMISSION, + GS_FINALE, + GS_DEMOSCREEN +} gamestate_t; + + +// +// Difficulty/skill settings/filters. +// + +// Skill flags. +#define MTF_EASY 1 +#define MTF_NORMAL 2 +#define MTF_HARD 4 + +// Deaf monsters/do not react to sound. +#define MTF_AMBUSH 8 + + +typedef enum +{ + sk_baby, + sk_easy, + sk_medium, + sk_hard, + sk_nightmare +} skill_t; + + +// +// Key cards. +// +typedef enum +{ + it_bluecard, + it_yellowcard, + it_redcard, + it_blueskull, + it_yellowskull, + it_redskull, + NUMCARDS +} card_t; + + +// The defined weapons, +// including a marker indicating +// user has not changed weapon. +typedef enum +{ + wp_fist, + wp_pistol, + wp_shotgun, + wp_chaingun, + wp_missile, + wp_plasma, + wp_bfg, + wp_chainsaw, + wp_supershotgun, + NUMWEAPONS, + // No pending weapon change. + wp_nochange +} weapontype_t; + + +// Ammunition types defined. +typedef enum +{ + am_clip, // Pistol / chaingun ammo. + am_shell, // Shotgun / double barreled shotgun. + am_cell, // Plasma rifle, BFG. + am_misl, // Missile launcher. + NUMAMMO, + am_noammo // Unlimited for chainsaw / fist. +} ammotype_t; + + +// Power up artifacts. +typedef enum +{ + pw_invulnerability, + pw_strength, + pw_invisibility, + pw_ironfeet, + pw_allmap, + pw_infrared, + NUMPOWERS +} powertype_t; + + +// +// Power up durations, +// how many seconds till expiration, +// assuming TICRATE is 35 ticks/second. +// +typedef enum +{ + INVULNTICS = (30 * TICRATE), + INVISTICS = (60 * TICRATE), + INFRATICS = (120 * TICRATE), + IRONTICS = (60 * TICRATE) +} powerduration_t; + + +// +// DOOM keyboard definition. +// This is the stuff configured by Setup.Exe. +// Most key data are simple ascii (uppercased). +// +#define KEY_RIGHTARROW 0xae +#define KEY_LEFTARROW 0xac +#define KEY_UPARROW 0xad +#define KEY_DOWNARROW 0xaf +#define KEY_ESCAPE 27 +#define KEY_ENTER 13 +#define KEY_TAB 9 +#define KEY_F1 (0x80+0x3b) +#define KEY_F2 (0x80+0x3c) +#define KEY_F3 (0x80+0x3d) +#define KEY_F4 (0x80+0x3e) +#define KEY_F5 (0x80+0x3f) +#define KEY_F6 (0x80+0x40) +#define KEY_F7 (0x80+0x41) +#define KEY_F8 (0x80+0x42) +#define KEY_F9 (0x80+0x43) +#define KEY_F10 (0x80+0x44) +#define KEY_F11 (0x80+0x57) +#define KEY_F12 (0x80+0x58) + +#define KEY_BACKSPACE 127 +#define KEY_PAUSE 0xff + +#define KEY_EQUALS 0x3d +#define KEY_MINUS 0x2d + +#define KEY_RSHIFT (0x80+0x36) +#define KEY_RCTRL (0x80+0x1d) +#define KEY_RALT (0x80+0x38) + +#define KEY_LALT KEY_RALT + + +#endif // __DOOMDEF__ + + +#ifndef __D_ITEMS__ +#define __D_ITEMS__ + + +//#include "doomdef.h" + + +// Weapon info: sprite frames, ammunition use. +typedef struct +{ + ammotype_t ammo; + int upstate; + int downstate; + int readystate; + int atkstate; + int flashstate; +} weaponinfo_t; + + +extern weaponinfo_t weaponinfo[NUMWEAPONS]; + + +#endif + + +#ifndef __DOOMTYPE__ +#define __DOOMTYPE__ + + +#if !defined(__cplusplus) && !defined(doom_false) && !defined(doom_true) +typedef enum +{ + doom_false, doom_true +} doom_boolean; +#else +typedef int doom_boolean; +#define doom_true 1 +#define doom_false 0 +#endif + + +typedef unsigned char byte; + + +#define DOOM_MAXCHAR ((char)0x7f) +#define DOOM_MAXSHORT ((short)0x7fff) + +// Max pos 32-bit int. +#define DOOM_MAXINT ((int)0x7fffffff) +#define DOOM_MAXLONG ((long)0x7fffffff) +#define DOOM_MINCHAR ((char)0x80) +#define DOOM_MINSHORT ((short)0x8000) + +// Max negative 32-bit integer. +#define DOOM_MININT ((int)0x80000000) +#define DOOM_MINLONG ((long)0x80000000) + + +#endif + + +#ifndef __D_EVENT__ +#define __D_EVENT__ + + +//#include "doomtype.h" + + +// +// Event handling. +// + +// Input event types. +typedef enum +{ + ev_keydown, + ev_keyup, + ev_mouse, + ev_joystick +} evtype_t; + + +// Event structure. +typedef struct +{ + evtype_t type; + int data1; // keys / mouse/joystick buttons + int data2; // mouse/joystick x move + int data3; // mouse/joystick y move +} event_t; + + +typedef enum +{ + ga_nothing, + ga_loadlevel, + ga_newgame, + ga_loadgame, + ga_savegame, + ga_playdemo, + ga_completed, + ga_victory, + ga_worlddone, + ga_screenshot +} gameaction_t; + + +// +// Button/action code definitions. +// +typedef enum +{ + // Press "Fire". + BT_ATTACK = 1, + // Use button, to open doors, activate switches. + BT_USE = 2, + + // Flag: game events, not really buttons. + BT_SPECIAL = 128, + BT_SPECIALMASK = 3, + + // Flag, weapon change pending. + // If doom_true, the next 3 bits hold weapon num. + BT_CHANGE = 4, + // The 3bit weapon mask and shift, convenience. + BT_WEAPONMASK = (8 + 16 + 32), + BT_WEAPONSHIFT = 3, + + // Pause the game. + BTS_PAUSE = 1, + // Save the game at each console. + BTS_SAVEGAME = 2, + + // Savegame slot numbers + // occupy the second byte of buttons. + BTS_SAVEMASK = (4 + 8 + 16), + BTS_SAVESHIFT = 2, +} buttoncode_t; + + +// +// GLOBAL VARIABLES +// +#define MAXEVENTS (64 * 64) // [pd] Crank up the number because we pump them faster + +extern event_t events[MAXEVENTS]; +extern int eventhead; +extern int eventtail; + +extern gameaction_t gameaction; + + +#endif + + +#ifndef __AMMAP_H__ +#define __AMMAP_H__ + + +//#include "d_event.h" + + +// Used by ST StatusBar stuff. +#define AM_MSGHEADER (('a'<<24)+('m'<<16)) +#define AM_MSGENTERED (AM_MSGHEADER | ('e'<<8)) +#define AM_MSGEXITED (AM_MSGHEADER | ('x'<<8)) + + +// Called by main loop. +doom_boolean AM_Responder(event_t* ev); + +// Called by main loop. +void AM_Ticker(void); + +// Called by main loop, +// called instead of view drawer if automap active. +void AM_Drawer(void); + +// Called to force the automap to quit +// if the level is completed while it is up. +void AM_Stop(void); + + +#endif + + +#ifndef __D_MAIN__ +#define __D_MAIN__ + + +//#include "d_event.h" + + +#define MAXWADFILES 20 + + +extern char* wadfiles[MAXWADFILES]; + + +void D_AddFile(char* file); + +// +// D_DoomMain() +// Not a globally visible function, just included for source reference, +// calls all startup code, parses command line options. +// If not overrided by user input, calls N_AdvanceDemo. +// +void D_DoomMain(void); + +// Called by IO functions when input is detected. +void D_PostEvent(event_t* ev); + +// +// BASE LEVEL +// +void D_PageTicker(void); +void D_PageDrawer(void); +void D_AdvanceDemo(void); +void D_StartTitle(void); + + +#endif +#ifndef __D_TEXTUR__ +#define __D_TEXTUR__ + + +//#include "doomtype.h" + + +// +// Flats? +// +// a pic is an unmasked block of pixels +typedef struct +{ + byte width; + byte height; + byte data; +} pic_t; + + +#endif + + +#ifndef __D_TICCMD__ +#define __D_TICCMD__ + + +//#include "doomtype.h" + + +// The data sampled per tick (single player) +// and transmitted to other peers (multiplayer). +// Mainly movements/button commands per game tick, +// plus a checksum for internal state consistency. +typedef struct +{ + char forwardmove; // *2048 for move + char sidemove; // *2048 for move + short angleturn; // <<16 for angle delta + short consistancy; // checks for net game + byte chatchar; + byte buttons; +} ticcmd_t; + + +#endif + + +#ifndef __DOOMDATA__ +#define __DOOMDATA__ + + +// The most basic types we use, portability. +//#include "doomtype.h" + +// Some global defines, that configure the game. +//#include "doomdef.h" + + +// +// Map level types. +// The following data structures define the persistent format +// used in the lumps of the WAD files. +// + +// Lump order in a map WAD: each map needs a couple of lumps +// to provide a complete scene geometry description. +enum +{ + ML_LABEL, // A separator, name, ExMx or MAPxx + ML_THINGS, // Monsters, items.. + ML_LINEDEFS, // LineDefs, from editing + ML_SIDEDEFS, // SideDefs, from editing + ML_VERTEXES, // Vertices, edited and BSP splits generated + ML_SEGS, // LineSegs, from LineDefs split by BSP + ML_SSECTORS, // SubSectors, list of LineSegs + ML_NODES, // BSP nodes + ML_SECTORS, // Sectors, from editing + ML_REJECT, // LUT, sector-sector visibility + ML_BLOCKMAP // LUT, motion clipping, walls/grid element +}; + + +// A single Vertex. +typedef struct +{ + short x; + short y; +} mapvertex_t; + + +// A SideDef, defining the visual appearance of a wall, +// by setting textures and offsets. +typedef struct +{ + short textureoffset; + short rowoffset; + char toptexture[8]; + char bottomtexture[8]; + char midtexture[8]; + // Front sector, towards viewer. + short sector; +} mapsidedef_t; + + +// A LineDef, as used for editing, and as input +// to the BSP builder. +typedef struct +{ + short v1; + short v2; + short flags; + short special; + short tag; + // sidenum[1] will be -1 if one sided + short sidenum[2]; +} maplinedef_t; + + +// +// LineDef attributes. +// + +// Solid, is an obstacle. +#define ML_BLOCKING 1 + +// Blocks monsters only. +#define ML_BLOCKMONSTERS 2 + +// Backside will not be present at all +// if not two sided. +#define ML_TWOSIDED 4 + +// If a texture is pegged, the texture will have +// the end exposed to air held constant at the +// top or bottom of the texture (stairs or pulled +// down things) and will move with a height change +// of one of the neighbor sectors. +// Unpegged textures allways have the first row of +// the texture at the top pixel of the line for both +// top and bottom textures (use next to windows). + +// upper texture unpegged +#define ML_DONTPEGTOP 8 + +// lower texture unpegged +#define ML_DONTPEGBOTTOM 16 + +// In AutoMap: don't map as two sided: IT'S A SECRET! +#define ML_SECRET 32 + +// Sound rendering: don't let sound cross two of these. +#define ML_SOUNDBLOCK 64 + +// Don't draw on the automap at all. +#define ML_DONTDRAW 128 + +// Set if already seen, thus drawn in automap. +#define ML_MAPPED 256 + + +// Sector definition, from editing. +typedef struct +{ + short floorheight; + short ceilingheight; + char floorpic[8]; + char ceilingpic[8]; + short lightlevel; + short special; + short tag; +} mapsector_t; + + +// SubSector, as generated by BSP. +typedef struct +{ + short numsegs; + // Index of first one, segs are stored sequentially. + short firstseg; +} mapsubsector_t; + + +// LineSeg, generated by splitting LineDefs +// using partition lines selected by BSP builder. +typedef struct +{ + short v1; + short v2; + short angle; + short linedef; + short side; + short offset; +} mapseg_t; + + +// +// BSP node structure. +// + +// Indicate a leaf. +#define NF_SUBSECTOR 0x8000 + +typedef struct +{ + // Partition line from (x,y) to x+dx,y+dy) + short x; + short y; + short dx; + short dy; + + // Bounding box for each child, + // clip against view frustum. + short bbox[2][4]; + + // If NF_SUBSECTOR its a subsector, + // else it's a node of another subtree. + unsigned short children[2]; +} mapnode_t; + + +// Thing definition, position, orientation and type, +// plus skill/visibility flags and attributes. +typedef struct +{ + short x; + short y; + short angle; + short type; + short options; +} mapthing_t; + + +#endif // __DOOMDATA__ + + +#ifndef __DSTRINGS__ +#define __DSTRINGS__ + + +// All important printed strings. +// Language selection (message strings). +// Use -DFRENCH etc. + +#ifdef FRENCH +//#include "d_french.h" // Leave the extra space there, to throw off regex in PureDOOM.h creation +#else +//#include "d_englsh.h" +#endif + + +// Misc. other strings. +#define SAVEGAMENAME "doomsav" + +// +// File locations, +// relative to current position. +// Path names are OS-sensitive. +// +#define DEVMAPS "devmaps" +#define DEVDATA "devdata" + +// Not done in french? + +// QuitDOOM messages +#define NUM_QUITMESSAGES 22 + + +extern char* endmsg[]; + + +#endif + + +#ifndef __F_FINALE__ +#define __F_FINALE__ + + +//#include "doomtype.h" +//#include "d_event.h" + + +// +// FINALE +// + +// Called by main loop. +doom_boolean F_Responder(event_t* ev); + +// Called by main loop. +void F_Ticker(void); + +// Called by main loop. +void F_Drawer(void); + +void F_StartFinale(void); + + +#endif + + +#ifndef __F_WIPE_H__ +#define __F_WIPE_H__ + + +// +// SCREEN WIPE PACKAGE +// + +enum +{ + // simple gradual pixel change for 8-bit only + wipe_ColorXForm, + + // weird screen melt + wipe_Melt, + + wipe_NUMWIPES +}; + + +int wipe_StartScreen(int x, int y, int width, int height); +int wipe_EndScreen(int x, int y, int width, int height); +int wipe_ScreenWipe(int wipeno, int x, int y, int width, int height, int ticks); + + +#endif + + +#ifndef __G_GAME__ +#define __G_GAME__ + + +//#include "doomdef.h" +//#include "d_event.h" + + +// +// GAME +// +void G_DeathMatchSpawnPlayer(int playernum); + +void G_InitNew(skill_t skill, int episode, int map); + +// Can be called by the startup code or M_Responder. +// A normal game starts at map 1, +// but a warp test can start elsewhere +void G_DeferedInitNew(skill_t skill, int episode, int map); + +void G_DeferedPlayDemo(char* demo); + +// Can be called by the startup code or M_Responder, +// calls P_SetupLevel or W_EnterWorld. +void G_LoadGame(char* name); + +void G_DoLoadGame(void); + +// Called by M_Responder. +void G_SaveGame(int slot, char* description); + +// Only called by startup code. +void G_RecordDemo(char* name); + +void G_BeginRecording(void); + +void G_TimeDemo(char* name); +doom_boolean G_CheckDemoStatus(void); + +void G_ExitLevel(void); +void G_SecretExitLevel(void); + +void G_WorldDone(void); + +void G_Ticker(void); +doom_boolean G_Responder(event_t* ev); + +void G_ScreenShot(void); + + +#endif + + +#ifndef __HU_STUFF_H__ +#define __HU_STUFF_H__ + + +//#include "d_event.h" + + +// +// Globally visible constants. +// +#define HU_FONTSTART '!' // the first font characters +#define HU_FONTEND '_' // the last font characters + +// Calculate # of glyphs in font. +#define HU_FONTSIZE (HU_FONTEND - HU_FONTSTART + 1) + +#define HU_BROADCAST 5 + +#define HU_MSGREFRESH KEY_ENTER +#define HU_MSGX 0 +#define HU_MSGY 0 +#define HU_MSGWIDTH 64 // in characters +#define HU_MSGHEIGHT 1 // in lines + +#define HU_MSGTIMEOUT (4*TICRATE) + + +// +// HEADS UP TEXT +// + +void HU_Init(void); +void HU_Start(void); +doom_boolean HU_Responder(event_t* ev); +void HU_Ticker(void); +void HU_Drawer(void); +char HU_dequeueChatChar(void); +void HU_Erase(void); + + +#endif + + +#ifndef __I_NET__ +#define __I_NET__ + + +// Called by D_DoomMain. + +void I_InitNetwork (void); +void I_NetCmd (void); + + +#endif + + +#ifndef __I_SYSTEM__ +#define __I_SYSTEM__ + + +//#include "d_ticcmd.h" +//#include "d_event.h" + + +// Called by DoomMain. +void I_Init(void); + +// Called by startup code +// to get the ammount of memory to malloc +// for the zone management. +byte* I_ZoneBase(int* size); + +// Called by D_DoomLoop, +// returns current time in tics. +int I_GetTime(void); + +// Called by D_DoomLoop, +// called before processing any tics in a frame +// (just after displaying a frame). +// Time consuming syncronous operations +// are performed here (joystick reading). +// Can call D_PostEvent. +void I_StartFrame(void); + +// Called by D_DoomLoop, +// called before processing each tic in a frame. +// Quick syncronous operations are performed here. +// Can call D_PostEvent. +void I_StartTic(void); + +// Asynchronous interrupt functions should maintain private queues +// that are read by the synchronous functions +// to be converted into events. + +// Either returns a null ticcmd, +// or calls a loadable driver to build it. +// This ticcmd will then be modified by the gameloop +// for normal input. +ticcmd_t* I_BaseTiccmd(void); + +// Called by M_Responder when quit is selected. +// Clean exit, displays sell blurb. +void I_Quit(void); + +// Allocates from low memory under dos, +// just mallocs under unix +byte* I_AllocLow(int length); + +void I_Tactile(int on, int off, int total); + +void I_Error(char* error); + + +#endif + + +#ifndef __I_VIDEO__ +#define __I_VIDEO__ + + +//#include "doomtype.h" + + +// Called by D_DoomMain, +// determines the hardware configuration +// and sets up the video mode +void I_InitGraphics(void); + +void I_ShutdownGraphics(void); + +// Takes full 8 bit values. +void I_SetPalette(byte* palette); + +void I_UpdateNoBlit(void); +void I_FinishUpdate(void); + +// Wait for vertical retrace or pause a bit. +void I_WaitVBL(int count); + +void I_ReadScreen(byte* scr); + +void I_BeginRead(void); +void I_EndRead(void); + + +#endif + + +#ifndef __INFO__ +#define __INFO__ + + +// Needed for action function pointer handling. +//#include "d_think.h" + + +typedef enum +{ + SPR_TROO, + SPR_SHTG, + SPR_PUNG, + SPR_PISG, + SPR_PISF, + SPR_SHTF, + SPR_SHT2, + SPR_CHGG, + SPR_CHGF, + SPR_MISG, + SPR_MISF, + SPR_SAWG, + SPR_PLSG, + SPR_PLSF, + SPR_BFGG, + SPR_BFGF, + SPR_BLUD, + SPR_PUFF, + SPR_BAL1, + SPR_BAL2, + SPR_PLSS, + SPR_PLSE, + SPR_MISL, + SPR_BFS1, + SPR_BFE1, + SPR_BFE2, + SPR_TFOG, + SPR_IFOG, + SPR_PLAY, + SPR_POSS, + SPR_SPOS, + SPR_VILE, + SPR_FIRE, + SPR_FATB, + SPR_FBXP, + SPR_SKEL, + SPR_MANF, + SPR_FATT, + SPR_CPOS, + SPR_SARG, + SPR_HEAD, + SPR_BAL7, + SPR_BOSS, + SPR_BOS2, + SPR_SKUL, + SPR_SPID, + SPR_BSPI, + SPR_APLS, + SPR_APBX, + SPR_CYBR, + SPR_PAIN, + SPR_SSWV, + SPR_KEEN, + SPR_BBRN, + SPR_BOSF, + SPR_ARM1, + SPR_ARM2, + SPR_BAR1, + SPR_BEXP, + SPR_FCAN, + SPR_BON1, + SPR_BON2, + SPR_BKEY, + SPR_RKEY, + SPR_YKEY, + SPR_BSKU, + SPR_RSKU, + SPR_YSKU, + SPR_STIM, + SPR_MEDI, + SPR_SOUL, + SPR_PINV, + SPR_PSTR, + SPR_PINS, + SPR_MEGA, + SPR_SUIT, + SPR_PMAP, + SPR_PVIS, + SPR_CLIP, + SPR_AMMO, + SPR_ROCK, + SPR_BROK, + SPR_CELL, + SPR_CELP, + SPR_SHEL, + SPR_SBOX, + SPR_BPAK, + SPR_BFUG, + SPR_MGUN, + SPR_CSAW, + SPR_LAUN, + SPR_PLAS, + SPR_SHOT, + SPR_SGN2, + SPR_COLU, + SPR_SMT2, + SPR_GOR1, + SPR_POL2, + SPR_POL5, + SPR_POL4, + SPR_POL3, + SPR_POL1, + SPR_POL6, + SPR_GOR2, + SPR_GOR3, + SPR_GOR4, + SPR_GOR5, + SPR_SMIT, + SPR_COL1, + SPR_COL2, + SPR_COL3, + SPR_COL4, + SPR_CAND, + SPR_CBRA, + SPR_COL6, + SPR_TRE1, + SPR_TRE2, + SPR_ELEC, + SPR_CEYE, + SPR_FSKU, + SPR_COL5, + SPR_TBLU, + SPR_TGRN, + SPR_TRED, + SPR_SMBT, + SPR_SMGT, + SPR_SMRT, + SPR_HDB1, + SPR_HDB2, + SPR_HDB3, + SPR_HDB4, + SPR_HDB5, + SPR_HDB6, + SPR_POB1, + SPR_POB2, + SPR_BRS1, + SPR_TLMP, + SPR_TLP2, + NUMSPRITES +} spritenum_t; + + +typedef enum +{ + S_NULL, + S_LIGHTDONE, + S_PUNCH, + S_PUNCHDOWN, + S_PUNCHUP, + S_PUNCH1, + S_PUNCH2, + S_PUNCH3, + S_PUNCH4, + S_PUNCH5, + S_PISTOL, + S_PISTOLDOWN, + S_PISTOLUP, + S_PISTOL1, + S_PISTOL2, + S_PISTOL3, + S_PISTOL4, + S_PISTOLFLASH, + S_SGUN, + S_SGUNDOWN, + S_SGUNUP, + S_SGUN1, + S_SGUN2, + S_SGUN3, + S_SGUN4, + S_SGUN5, + S_SGUN6, + S_SGUN7, + S_SGUN8, + S_SGUN9, + S_SGUNFLASH1, + S_SGUNFLASH2, + S_DSGUN, + S_DSGUNDOWN, + S_DSGUNUP, + S_DSGUN1, + S_DSGUN2, + S_DSGUN3, + S_DSGUN4, + S_DSGUN5, + S_DSGUN6, + S_DSGUN7, + S_DSGUN8, + S_DSGUN9, + S_DSGUN10, + S_DSNR1, + S_DSNR2, + S_DSGUNFLASH1, + S_DSGUNFLASH2, + S_CHAIN, + S_CHAINDOWN, + S_CHAINUP, + S_CHAIN1, + S_CHAIN2, + S_CHAIN3, + S_CHAINFLASH1, + S_CHAINFLASH2, + S_MISSILE, + S_MISSILEDOWN, + S_MISSILEUP, + S_MISSILE1, + S_MISSILE2, + S_MISSILE3, + S_MISSILEFLASH1, + S_MISSILEFLASH2, + S_MISSILEFLASH3, + S_MISSILEFLASH4, + S_SAW, + S_SAWB, + S_SAWDOWN, + S_SAWUP, + S_SAW1, + S_SAW2, + S_SAW3, + S_PLASMA, + S_PLASMADOWN, + S_PLASMAUP, + S_PLASMA1, + S_PLASMA2, + S_PLASMAFLASH1, + S_PLASMAFLASH2, + S_BFG, + S_BFGDOWN, + S_BFGUP, + S_BFG1, + S_BFG2, + S_BFG3, + S_BFG4, + S_BFGFLASH1, + S_BFGFLASH2, + S_BLOOD1, + S_BLOOD2, + S_BLOOD3, + S_PUFF1, + S_PUFF2, + S_PUFF3, + S_PUFF4, + S_TBALL1, + S_TBALL2, + S_TBALLX1, + S_TBALLX2, + S_TBALLX3, + S_RBALL1, + S_RBALL2, + S_RBALLX1, + S_RBALLX2, + S_RBALLX3, + S_PLASBALL, + S_PLASBALL2, + S_PLASEXP, + S_PLASEXP2, + S_PLASEXP3, + S_PLASEXP4, + S_PLASEXP5, + S_ROCKET, + S_BFGSHOT, + S_BFGSHOT2, + S_BFGLAND, + S_BFGLAND2, + S_BFGLAND3, + S_BFGLAND4, + S_BFGLAND5, + S_BFGLAND6, + S_BFGEXP, + S_BFGEXP2, + S_BFGEXP3, + S_BFGEXP4, + S_EXPLODE1, + S_EXPLODE2, + S_EXPLODE3, + S_TFOG, + S_TFOG01, + S_TFOG02, + S_TFOG2, + S_TFOG3, + S_TFOG4, + S_TFOG5, + S_TFOG6, + S_TFOG7, + S_TFOG8, + S_TFOG9, + S_TFOG10, + S_IFOG, + S_IFOG01, + S_IFOG02, + S_IFOG2, + S_IFOG3, + S_IFOG4, + S_IFOG5, + S_PLAY, + S_PLAY_RUN1, + S_PLAY_RUN2, + S_PLAY_RUN3, + S_PLAY_RUN4, + S_PLAY_ATK1, + S_PLAY_ATK2, + S_PLAY_PAIN, + S_PLAY_PAIN2, + S_PLAY_DIE1, + S_PLAY_DIE2, + S_PLAY_DIE3, + S_PLAY_DIE4, + S_PLAY_DIE5, + S_PLAY_DIE6, + S_PLAY_DIE7, + S_PLAY_XDIE1, + S_PLAY_XDIE2, + S_PLAY_XDIE3, + S_PLAY_XDIE4, + S_PLAY_XDIE5, + S_PLAY_XDIE6, + S_PLAY_XDIE7, + S_PLAY_XDIE8, + S_PLAY_XDIE9, + S_POSS_STND, + S_POSS_STND2, + S_POSS_RUN1, + S_POSS_RUN2, + S_POSS_RUN3, + S_POSS_RUN4, + S_POSS_RUN5, + S_POSS_RUN6, + S_POSS_RUN7, + S_POSS_RUN8, + S_POSS_ATK1, + S_POSS_ATK2, + S_POSS_ATK3, + S_POSS_PAIN, + S_POSS_PAIN2, + S_POSS_DIE1, + S_POSS_DIE2, + S_POSS_DIE3, + S_POSS_DIE4, + S_POSS_DIE5, + S_POSS_XDIE1, + S_POSS_XDIE2, + S_POSS_XDIE3, + S_POSS_XDIE4, + S_POSS_XDIE5, + S_POSS_XDIE6, + S_POSS_XDIE7, + S_POSS_XDIE8, + S_POSS_XDIE9, + S_POSS_RAISE1, + S_POSS_RAISE2, + S_POSS_RAISE3, + S_POSS_RAISE4, + S_SPOS_STND, + S_SPOS_STND2, + S_SPOS_RUN1, + S_SPOS_RUN2, + S_SPOS_RUN3, + S_SPOS_RUN4, + S_SPOS_RUN5, + S_SPOS_RUN6, + S_SPOS_RUN7, + S_SPOS_RUN8, + S_SPOS_ATK1, + S_SPOS_ATK2, + S_SPOS_ATK3, + S_SPOS_PAIN, + S_SPOS_PAIN2, + S_SPOS_DIE1, + S_SPOS_DIE2, + S_SPOS_DIE3, + S_SPOS_DIE4, + S_SPOS_DIE5, + S_SPOS_XDIE1, + S_SPOS_XDIE2, + S_SPOS_XDIE3, + S_SPOS_XDIE4, + S_SPOS_XDIE5, + S_SPOS_XDIE6, + S_SPOS_XDIE7, + S_SPOS_XDIE8, + S_SPOS_XDIE9, + S_SPOS_RAISE1, + S_SPOS_RAISE2, + S_SPOS_RAISE3, + S_SPOS_RAISE4, + S_SPOS_RAISE5, + S_VILE_STND, + S_VILE_STND2, + S_VILE_RUN1, + S_VILE_RUN2, + S_VILE_RUN3, + S_VILE_RUN4, + S_VILE_RUN5, + S_VILE_RUN6, + S_VILE_RUN7, + S_VILE_RUN8, + S_VILE_RUN9, + S_VILE_RUN10, + S_VILE_RUN11, + S_VILE_RUN12, + S_VILE_ATK1, + S_VILE_ATK2, + S_VILE_ATK3, + S_VILE_ATK4, + S_VILE_ATK5, + S_VILE_ATK6, + S_VILE_ATK7, + S_VILE_ATK8, + S_VILE_ATK9, + S_VILE_ATK10, + S_VILE_ATK11, + S_VILE_HEAL1, + S_VILE_HEAL2, + S_VILE_HEAL3, + S_VILE_PAIN, + S_VILE_PAIN2, + S_VILE_DIE1, + S_VILE_DIE2, + S_VILE_DIE3, + S_VILE_DIE4, + S_VILE_DIE5, + S_VILE_DIE6, + S_VILE_DIE7, + S_VILE_DIE8, + S_VILE_DIE9, + S_VILE_DIE10, + S_FIRE1, + S_FIRE2, + S_FIRE3, + S_FIRE4, + S_FIRE5, + S_FIRE6, + S_FIRE7, + S_FIRE8, + S_FIRE9, + S_FIRE10, + S_FIRE11, + S_FIRE12, + S_FIRE13, + S_FIRE14, + S_FIRE15, + S_FIRE16, + S_FIRE17, + S_FIRE18, + S_FIRE19, + S_FIRE20, + S_FIRE21, + S_FIRE22, + S_FIRE23, + S_FIRE24, + S_FIRE25, + S_FIRE26, + S_FIRE27, + S_FIRE28, + S_FIRE29, + S_FIRE30, + S_SMOKE1, + S_SMOKE2, + S_SMOKE3, + S_SMOKE4, + S_SMOKE5, + S_TRACER, + S_TRACER2, + S_TRACEEXP1, + S_TRACEEXP2, + S_TRACEEXP3, + S_SKEL_STND, + S_SKEL_STND2, + S_SKEL_RUN1, + S_SKEL_RUN2, + S_SKEL_RUN3, + S_SKEL_RUN4, + S_SKEL_RUN5, + S_SKEL_RUN6, + S_SKEL_RUN7, + S_SKEL_RUN8, + S_SKEL_RUN9, + S_SKEL_RUN10, + S_SKEL_RUN11, + S_SKEL_RUN12, + S_SKEL_FIST1, + S_SKEL_FIST2, + S_SKEL_FIST3, + S_SKEL_FIST4, + S_SKEL_MISS1, + S_SKEL_MISS2, + S_SKEL_MISS3, + S_SKEL_MISS4, + S_SKEL_PAIN, + S_SKEL_PAIN2, + S_SKEL_DIE1, + S_SKEL_DIE2, + S_SKEL_DIE3, + S_SKEL_DIE4, + S_SKEL_DIE5, + S_SKEL_DIE6, + S_SKEL_RAISE1, + S_SKEL_RAISE2, + S_SKEL_RAISE3, + S_SKEL_RAISE4, + S_SKEL_RAISE5, + S_SKEL_RAISE6, + S_FATSHOT1, + S_FATSHOT2, + S_FATSHOTX1, + S_FATSHOTX2, + S_FATSHOTX3, + S_FATT_STND, + S_FATT_STND2, + S_FATT_RUN1, + S_FATT_RUN2, + S_FATT_RUN3, + S_FATT_RUN4, + S_FATT_RUN5, + S_FATT_RUN6, + S_FATT_RUN7, + S_FATT_RUN8, + S_FATT_RUN9, + S_FATT_RUN10, + S_FATT_RUN11, + S_FATT_RUN12, + S_FATT_ATK1, + S_FATT_ATK2, + S_FATT_ATK3, + S_FATT_ATK4, + S_FATT_ATK5, + S_FATT_ATK6, + S_FATT_ATK7, + S_FATT_ATK8, + S_FATT_ATK9, + S_FATT_ATK10, + S_FATT_PAIN, + S_FATT_PAIN2, + S_FATT_DIE1, + S_FATT_DIE2, + S_FATT_DIE3, + S_FATT_DIE4, + S_FATT_DIE5, + S_FATT_DIE6, + S_FATT_DIE7, + S_FATT_DIE8, + S_FATT_DIE9, + S_FATT_DIE10, + S_FATT_RAISE1, + S_FATT_RAISE2, + S_FATT_RAISE3, + S_FATT_RAISE4, + S_FATT_RAISE5, + S_FATT_RAISE6, + S_FATT_RAISE7, + S_FATT_RAISE8, + S_CPOS_STND, + S_CPOS_STND2, + S_CPOS_RUN1, + S_CPOS_RUN2, + S_CPOS_RUN3, + S_CPOS_RUN4, + S_CPOS_RUN5, + S_CPOS_RUN6, + S_CPOS_RUN7, + S_CPOS_RUN8, + S_CPOS_ATK1, + S_CPOS_ATK2, + S_CPOS_ATK3, + S_CPOS_ATK4, + S_CPOS_PAIN, + S_CPOS_PAIN2, + S_CPOS_DIE1, + S_CPOS_DIE2, + S_CPOS_DIE3, + S_CPOS_DIE4, + S_CPOS_DIE5, + S_CPOS_DIE6, + S_CPOS_DIE7, + S_CPOS_XDIE1, + S_CPOS_XDIE2, + S_CPOS_XDIE3, + S_CPOS_XDIE4, + S_CPOS_XDIE5, + S_CPOS_XDIE6, + S_CPOS_RAISE1, + S_CPOS_RAISE2, + S_CPOS_RAISE3, + S_CPOS_RAISE4, + S_CPOS_RAISE5, + S_CPOS_RAISE6, + S_CPOS_RAISE7, + S_TROO_STND, + S_TROO_STND2, + S_TROO_RUN1, + S_TROO_RUN2, + S_TROO_RUN3, + S_TROO_RUN4, + S_TROO_RUN5, + S_TROO_RUN6, + S_TROO_RUN7, + S_TROO_RUN8, + S_TROO_ATK1, + S_TROO_ATK2, + S_TROO_ATK3, + S_TROO_PAIN, + S_TROO_PAIN2, + S_TROO_DIE1, + S_TROO_DIE2, + S_TROO_DIE3, + S_TROO_DIE4, + S_TROO_DIE5, + S_TROO_XDIE1, + S_TROO_XDIE2, + S_TROO_XDIE3, + S_TROO_XDIE4, + S_TROO_XDIE5, + S_TROO_XDIE6, + S_TROO_XDIE7, + S_TROO_XDIE8, + S_TROO_RAISE1, + S_TROO_RAISE2, + S_TROO_RAISE3, + S_TROO_RAISE4, + S_TROO_RAISE5, + S_SARG_STND, + S_SARG_STND2, + S_SARG_RUN1, + S_SARG_RUN2, + S_SARG_RUN3, + S_SARG_RUN4, + S_SARG_RUN5, + S_SARG_RUN6, + S_SARG_RUN7, + S_SARG_RUN8, + S_SARG_ATK1, + S_SARG_ATK2, + S_SARG_ATK3, + S_SARG_PAIN, + S_SARG_PAIN2, + S_SARG_DIE1, + S_SARG_DIE2, + S_SARG_DIE3, + S_SARG_DIE4, + S_SARG_DIE5, + S_SARG_DIE6, + S_SARG_RAISE1, + S_SARG_RAISE2, + S_SARG_RAISE3, + S_SARG_RAISE4, + S_SARG_RAISE5, + S_SARG_RAISE6, + S_HEAD_STND, + S_HEAD_RUN1, + S_HEAD_ATK1, + S_HEAD_ATK2, + S_HEAD_ATK3, + S_HEAD_PAIN, + S_HEAD_PAIN2, + S_HEAD_PAIN3, + S_HEAD_DIE1, + S_HEAD_DIE2, + S_HEAD_DIE3, + S_HEAD_DIE4, + S_HEAD_DIE5, + S_HEAD_DIE6, + S_HEAD_RAISE1, + S_HEAD_RAISE2, + S_HEAD_RAISE3, + S_HEAD_RAISE4, + S_HEAD_RAISE5, + S_HEAD_RAISE6, + S_BRBALL1, + S_BRBALL2, + S_BRBALLX1, + S_BRBALLX2, + S_BRBALLX3, + S_BOSS_STND, + S_BOSS_STND2, + S_BOSS_RUN1, + S_BOSS_RUN2, + S_BOSS_RUN3, + S_BOSS_RUN4, + S_BOSS_RUN5, + S_BOSS_RUN6, + S_BOSS_RUN7, + S_BOSS_RUN8, + S_BOSS_ATK1, + S_BOSS_ATK2, + S_BOSS_ATK3, + S_BOSS_PAIN, + S_BOSS_PAIN2, + S_BOSS_DIE1, + S_BOSS_DIE2, + S_BOSS_DIE3, + S_BOSS_DIE4, + S_BOSS_DIE5, + S_BOSS_DIE6, + S_BOSS_DIE7, + S_BOSS_RAISE1, + S_BOSS_RAISE2, + S_BOSS_RAISE3, + S_BOSS_RAISE4, + S_BOSS_RAISE5, + S_BOSS_RAISE6, + S_BOSS_RAISE7, + S_BOS2_STND, + S_BOS2_STND2, + S_BOS2_RUN1, + S_BOS2_RUN2, + S_BOS2_RUN3, + S_BOS2_RUN4, + S_BOS2_RUN5, + S_BOS2_RUN6, + S_BOS2_RUN7, + S_BOS2_RUN8, + S_BOS2_ATK1, + S_BOS2_ATK2, + S_BOS2_ATK3, + S_BOS2_PAIN, + S_BOS2_PAIN2, + S_BOS2_DIE1, + S_BOS2_DIE2, + S_BOS2_DIE3, + S_BOS2_DIE4, + S_BOS2_DIE5, + S_BOS2_DIE6, + S_BOS2_DIE7, + S_BOS2_RAISE1, + S_BOS2_RAISE2, + S_BOS2_RAISE3, + S_BOS2_RAISE4, + S_BOS2_RAISE5, + S_BOS2_RAISE6, + S_BOS2_RAISE7, + S_SKULL_STND, + S_SKULL_STND2, + S_SKULL_RUN1, + S_SKULL_RUN2, + S_SKULL_ATK1, + S_SKULL_ATK2, + S_SKULL_ATK3, + S_SKULL_ATK4, + S_SKULL_PAIN, + S_SKULL_PAIN2, + S_SKULL_DIE1, + S_SKULL_DIE2, + S_SKULL_DIE3, + S_SKULL_DIE4, + S_SKULL_DIE5, + S_SKULL_DIE6, + S_SPID_STND, + S_SPID_STND2, + S_SPID_RUN1, + S_SPID_RUN2, + S_SPID_RUN3, + S_SPID_RUN4, + S_SPID_RUN5, + S_SPID_RUN6, + S_SPID_RUN7, + S_SPID_RUN8, + S_SPID_RUN9, + S_SPID_RUN10, + S_SPID_RUN11, + S_SPID_RUN12, + S_SPID_ATK1, + S_SPID_ATK2, + S_SPID_ATK3, + S_SPID_ATK4, + S_SPID_PAIN, + S_SPID_PAIN2, + S_SPID_DIE1, + S_SPID_DIE2, + S_SPID_DIE3, + S_SPID_DIE4, + S_SPID_DIE5, + S_SPID_DIE6, + S_SPID_DIE7, + S_SPID_DIE8, + S_SPID_DIE9, + S_SPID_DIE10, + S_SPID_DIE11, + S_BSPI_STND, + S_BSPI_STND2, + S_BSPI_SIGHT, + S_BSPI_RUN1, + S_BSPI_RUN2, + S_BSPI_RUN3, + S_BSPI_RUN4, + S_BSPI_RUN5, + S_BSPI_RUN6, + S_BSPI_RUN7, + S_BSPI_RUN8, + S_BSPI_RUN9, + S_BSPI_RUN10, + S_BSPI_RUN11, + S_BSPI_RUN12, + S_BSPI_ATK1, + S_BSPI_ATK2, + S_BSPI_ATK3, + S_BSPI_ATK4, + S_BSPI_PAIN, + S_BSPI_PAIN2, + S_BSPI_DIE1, + S_BSPI_DIE2, + S_BSPI_DIE3, + S_BSPI_DIE4, + S_BSPI_DIE5, + S_BSPI_DIE6, + S_BSPI_DIE7, + S_BSPI_RAISE1, + S_BSPI_RAISE2, + S_BSPI_RAISE3, + S_BSPI_RAISE4, + S_BSPI_RAISE5, + S_BSPI_RAISE6, + S_BSPI_RAISE7, + S_ARACH_PLAZ, + S_ARACH_PLAZ2, + S_ARACH_PLEX, + S_ARACH_PLEX2, + S_ARACH_PLEX3, + S_ARACH_PLEX4, + S_ARACH_PLEX5, + S_CYBER_STND, + S_CYBER_STND2, + S_CYBER_RUN1, + S_CYBER_RUN2, + S_CYBER_RUN3, + S_CYBER_RUN4, + S_CYBER_RUN5, + S_CYBER_RUN6, + S_CYBER_RUN7, + S_CYBER_RUN8, + S_CYBER_ATK1, + S_CYBER_ATK2, + S_CYBER_ATK3, + S_CYBER_ATK4, + S_CYBER_ATK5, + S_CYBER_ATK6, + S_CYBER_PAIN, + S_CYBER_DIE1, + S_CYBER_DIE2, + S_CYBER_DIE3, + S_CYBER_DIE4, + S_CYBER_DIE5, + S_CYBER_DIE6, + S_CYBER_DIE7, + S_CYBER_DIE8, + S_CYBER_DIE9, + S_CYBER_DIE10, + S_PAIN_STND, + S_PAIN_RUN1, + S_PAIN_RUN2, + S_PAIN_RUN3, + S_PAIN_RUN4, + S_PAIN_RUN5, + S_PAIN_RUN6, + S_PAIN_ATK1, + S_PAIN_ATK2, + S_PAIN_ATK3, + S_PAIN_ATK4, + S_PAIN_PAIN, + S_PAIN_PAIN2, + S_PAIN_DIE1, + S_PAIN_DIE2, + S_PAIN_DIE3, + S_PAIN_DIE4, + S_PAIN_DIE5, + S_PAIN_DIE6, + S_PAIN_RAISE1, + S_PAIN_RAISE2, + S_PAIN_RAISE3, + S_PAIN_RAISE4, + S_PAIN_RAISE5, + S_PAIN_RAISE6, + S_SSWV_STND, + S_SSWV_STND2, + S_SSWV_RUN1, + S_SSWV_RUN2, + S_SSWV_RUN3, + S_SSWV_RUN4, + S_SSWV_RUN5, + S_SSWV_RUN6, + S_SSWV_RUN7, + S_SSWV_RUN8, + S_SSWV_ATK1, + S_SSWV_ATK2, + S_SSWV_ATK3, + S_SSWV_ATK4, + S_SSWV_ATK5, + S_SSWV_ATK6, + S_SSWV_PAIN, + S_SSWV_PAIN2, + S_SSWV_DIE1, + S_SSWV_DIE2, + S_SSWV_DIE3, + S_SSWV_DIE4, + S_SSWV_DIE5, + S_SSWV_XDIE1, + S_SSWV_XDIE2, + S_SSWV_XDIE3, + S_SSWV_XDIE4, + S_SSWV_XDIE5, + S_SSWV_XDIE6, + S_SSWV_XDIE7, + S_SSWV_XDIE8, + S_SSWV_XDIE9, + S_SSWV_RAISE1, + S_SSWV_RAISE2, + S_SSWV_RAISE3, + S_SSWV_RAISE4, + S_SSWV_RAISE5, + S_KEENSTND, + S_COMMKEEN, + S_COMMKEEN2, + S_COMMKEEN3, + S_COMMKEEN4, + S_COMMKEEN5, + S_COMMKEEN6, + S_COMMKEEN7, + S_COMMKEEN8, + S_COMMKEEN9, + S_COMMKEEN10, + S_COMMKEEN11, + S_COMMKEEN12, + S_KEENPAIN, + S_KEENPAIN2, + S_BRAIN, + S_BRAIN_PAIN, + S_BRAIN_DIE1, + S_BRAIN_DIE2, + S_BRAIN_DIE3, + S_BRAIN_DIE4, + S_BRAINEYE, + S_BRAINEYESEE, + S_BRAINEYE1, + S_SPAWN1, + S_SPAWN2, + S_SPAWN3, + S_SPAWN4, + S_SPAWNFIRE1, + S_SPAWNFIRE2, + S_SPAWNFIRE3, + S_SPAWNFIRE4, + S_SPAWNFIRE5, + S_SPAWNFIRE6, + S_SPAWNFIRE7, + S_SPAWNFIRE8, + S_BRAINEXPLODE1, + S_BRAINEXPLODE2, + S_BRAINEXPLODE3, + S_ARM1, + S_ARM1A, + S_ARM2, + S_ARM2A, + S_BAR1, + S_BAR2, + S_BEXP, + S_BEXP2, + S_BEXP3, + S_BEXP4, + S_BEXP5, + S_BBAR1, + S_BBAR2, + S_BBAR3, + S_BON1, + S_BON1A, + S_BON1B, + S_BON1C, + S_BON1D, + S_BON1E, + S_BON2, + S_BON2A, + S_BON2B, + S_BON2C, + S_BON2D, + S_BON2E, + S_BKEY, + S_BKEY2, + S_RKEY, + S_RKEY2, + S_YKEY, + S_YKEY2, + S_BSKULL, + S_BSKULL2, + S_RSKULL, + S_RSKULL2, + S_YSKULL, + S_YSKULL2, + S_STIM, + S_MEDI, + S_SOUL, + S_SOUL2, + S_SOUL3, + S_SOUL4, + S_SOUL5, + S_SOUL6, + S_PINV, + S_PINV2, + S_PINV3, + S_PINV4, + S_PSTR, + S_PINS, + S_PINS2, + S_PINS3, + S_PINS4, + S_MEGA, + S_MEGA2, + S_MEGA3, + S_MEGA4, + S_SUIT, + S_PMAP, + S_PMAP2, + S_PMAP3, + S_PMAP4, + S_PMAP5, + S_PMAP6, + S_PVIS, + S_PVIS2, + S_CLIP, + S_AMMO, + S_ROCK, + S_BROK, + S_CELL, + S_CELP, + S_SHEL, + S_SBOX, + S_BPAK, + S_BFUG, + S_MGUN, + S_CSAW, + S_LAUN, + S_PLAS, + S_SHOT, + S_SHOT2, + S_COLU, + S_STALAG, + S_BLOODYTWITCH, + S_BLOODYTWITCH2, + S_BLOODYTWITCH3, + S_BLOODYTWITCH4, + S_DEADTORSO, + S_DEADBOTTOM, + S_HEADSONSTICK, + S_GIBS, + S_HEADONASTICK, + S_HEADCANDLES, + S_HEADCANDLES2, + S_DEADSTICK, + S_LIVESTICK, + S_LIVESTICK2, + S_MEAT2, + S_MEAT3, + S_MEAT4, + S_MEAT5, + S_STALAGTITE, + S_TALLGRNCOL, + S_SHRTGRNCOL, + S_TALLREDCOL, + S_SHRTREDCOL, + S_CANDLESTIK, + S_CANDELABRA, + S_SKULLCOL, + S_TORCHTREE, + S_BIGTREE, + S_TECHPILLAR, + S_EVILEYE, + S_EVILEYE2, + S_EVILEYE3, + S_EVILEYE4, + S_FLOATSKULL, + S_FLOATSKULL2, + S_FLOATSKULL3, + S_HEARTCOL, + S_HEARTCOL2, + S_BLUETORCH, + S_BLUETORCH2, + S_BLUETORCH3, + S_BLUETORCH4, + S_GREENTORCH, + S_GREENTORCH2, + S_GREENTORCH3, + S_GREENTORCH4, + S_REDTORCH, + S_REDTORCH2, + S_REDTORCH3, + S_REDTORCH4, + S_BTORCHSHRT, + S_BTORCHSHRT2, + S_BTORCHSHRT3, + S_BTORCHSHRT4, + S_GTORCHSHRT, + S_GTORCHSHRT2, + S_GTORCHSHRT3, + S_GTORCHSHRT4, + S_RTORCHSHRT, + S_RTORCHSHRT2, + S_RTORCHSHRT3, + S_RTORCHSHRT4, + S_HANGNOGUTS, + S_HANGBNOBRAIN, + S_HANGTLOOKDN, + S_HANGTSKULL, + S_HANGTLOOKUP, + S_HANGTNOBRAIN, + S_COLONGIBS, + S_SMALLPOOL, + S_BRAINSTEM, + S_TECHLAMP, + S_TECHLAMP2, + S_TECHLAMP3, + S_TECHLAMP4, + S_TECH2LAMP, + S_TECH2LAMP2, + S_TECH2LAMP3, + S_TECH2LAMP4, + NUMSTATES +} statenum_t; + + +typedef struct +{ + spritenum_t sprite; + long frame; + long tics; + actionf_t action; + statenum_t nextstate; + long misc1, misc2; +} state_t; + + +extern state_t states[NUMSTATES]; +extern char* sprnames[NUMSPRITES + 1]; + + +typedef enum +{ + MT_PLAYER, + MT_POSSESSED, + MT_SHOTGUY, + MT_VILE, + MT_FIRE, + MT_UNDEAD, + MT_TRACER, + MT_SMOKE, + MT_FATSO, + MT_FATSHOT, + MT_CHAINGUY, + MT_TROOP, + MT_SERGEANT, + MT_SHADOWS, + MT_HEAD, + MT_BRUISER, + MT_BRUISERSHOT, + MT_KNIGHT, + MT_SKULL, + MT_SPIDER, + MT_BABY, + MT_CYBORG, + MT_PAIN, + MT_WOLFSS, + MT_KEEN, + MT_BOSSBRAIN, + MT_BOSSSPIT, + MT_BOSSTARGET, + MT_SPAWNSHOT, + MT_SPAWNFIRE, + MT_BARREL, + MT_TROOPSHOT, + MT_HEADSHOT, + MT_ROCKET, + MT_PLASMA, + MT_BFG, + MT_ARACHPLAZ, + MT_PUFF, + MT_BLOOD, + MT_TFOG, + MT_IFOG, + MT_TELEPORTMAN, + MT_EXTRABFG, + MT_MISC0, + MT_MISC1, + MT_MISC2, + MT_MISC3, + MT_MISC4, + MT_MISC5, + MT_MISC6, + MT_MISC7, + MT_MISC8, + MT_MISC9, + MT_MISC10, + MT_MISC11, + MT_MISC12, + MT_INV, + MT_MISC13, + MT_INS, + MT_MISC14, + MT_MISC15, + MT_MISC16, + MT_MEGA, + MT_CLIP, + MT_MISC17, + MT_MISC18, + MT_MISC19, + MT_MISC20, + MT_MISC21, + MT_MISC22, + MT_MISC23, + MT_MISC24, + MT_MISC25, + MT_CHAINGUN, + MT_MISC26, + MT_MISC27, + MT_MISC28, + MT_SHOTGUN, + MT_SUPERSHOTGUN, + MT_MISC29, + MT_MISC30, + MT_MISC31, + MT_MISC32, + MT_MISC33, + MT_MISC34, + MT_MISC35, + MT_MISC36, + MT_MISC37, + MT_MISC38, + MT_MISC39, + MT_MISC40, + MT_MISC41, + MT_MISC42, + MT_MISC43, + MT_MISC44, + MT_MISC45, + MT_MISC46, + MT_MISC47, + MT_MISC48, + MT_MISC49, + MT_MISC50, + MT_MISC51, + MT_MISC52, + MT_MISC53, + MT_MISC54, + MT_MISC55, + MT_MISC56, + MT_MISC57, + MT_MISC58, + MT_MISC59, + MT_MISC60, + MT_MISC61, + MT_MISC62, + MT_MISC63, + MT_MISC64, + MT_MISC65, + MT_MISC66, + MT_MISC67, + MT_MISC68, + MT_MISC69, + MT_MISC70, + MT_MISC71, + MT_MISC72, + MT_MISC73, + MT_MISC74, + MT_MISC75, + MT_MISC76, + MT_MISC77, + MT_MISC78, + MT_MISC79, + MT_MISC80, + MT_MISC81, + MT_MISC82, + MT_MISC83, + MT_MISC84, + MT_MISC85, + MT_MISC86, + NUMMOBJTYPES +} mobjtype_t; + + +typedef struct +{ + int doomednum; + int spawnstate; + int spawnhealth; + int seestate; + int seesound; + int reactiontime; + int attacksound; + int painstate; + int painchance; + int painsound; + int meleestate; + int missilestate; + int deathstate; + int xdeathstate; + int deathsound; + int speed; + int radius; + int height; + int mass; + int damage; + int activesound; + int flags; + int raisestate; +} mobjinfo_t; + + +extern mobjinfo_t mobjinfo[NUMMOBJTYPES]; + + +#endif + + +#ifndef __M_ARGV__ +#define __M_ARGV__ + + +// +// MISC +// +extern int myargc; +extern char** myargv; + +// Returns the position of the given parameter +// in the arg list (0 if not found). +int M_CheckParm(char* check); + + +#endif + + +#ifndef __M_CHEAT__ +#define __M_CHEAT__ + + +// +// CHEAT SEQUENCE PACKAGE +// + +#define SCRAMBLE(a) \ +((((a)&1)<<7) + (((a)&2)<<5) + ((a)&4) + (((a)&8)<<1) \ + + (((a)&16)>>1) + ((a)&32) + (((a)&64)>>5) + (((a)&128)>>7)) + + +typedef struct +{ + unsigned char* sequence; + unsigned char* p; +} cheatseq_t; + + +int cht_CheckCheat(cheatseq_t* cht, char key); +void cht_GetParam(cheatseq_t* cht, char* buffer); + + +#endif + + +#ifndef __M_FIXED__ +#define __M_FIXED__ + + +// +// Fixed point, 32bit as 16.16. +// +#define FRACBITS 16 +#define FRACUNIT (1< +// using from sounds.h +// +void S_StartSound(void* origin, int sound_id); + +// Will start a sound at a given volume. +void S_StartSoundAtVolume(void* origin, int sound_id, int volume); + +// Stop sound for thing at +void S_StopSound(void* origin); + +// Start music using from sounds.h +void S_StartMusic(int music_id); + +// Start music using from sounds.h, +// and set whether looping +void S_ChangeMusic(int music_id, int looping); + +// Stops the music fer sure. +void S_StopMusic(void); + +// Stop and resume music, during game PAUSE. +void S_PauseSound(void); +void S_ResumeSound(void); + +// +// Updates music & sounds +// +void S_UpdateSounds(void* listener); + +void S_SetMusicVolume(int volume); +void S_SetSfxVolume(int volume); + + +#endif + + +#ifndef __SOUNDS__ +#define __SOUNDS__ + + +// +// SoundFX struct. +// +typedef struct sfxinfo_struct sfxinfo_t; + +struct sfxinfo_struct +{ + // up to 6-character name + char* name; + + // Sfx singularity (only one at a time) + int singularity; + + // Sfx priority + int priority; + + // referenced sound if a link + sfxinfo_t* link; + + // pitch if a link + int pitch; + + // volume if a link + int volume; + + // sound data + void* data; + + // this is checked every second to see if sound + // can be thrown out (if 0, then decrement, if -1, + // then throw out, if > 0, then it is in use) + int usefulness; + + // lump number of sfx + int lumpnum; +}; + + +// +// MusicInfo struct. +// +typedef struct +{ + // up to 6-character name + char* name; + + // lump number of music + int lumpnum; + + // music data + void* data; + + // music handle once registered + int handle; +} musicinfo_t; + + +// the complete set of sound effects +extern sfxinfo_t S_sfx[]; + +// the complete set of music +extern musicinfo_t S_music[]; + +// +// Identifiers for all music in game. +// +typedef enum +{ + mus_None, + mus_e1m1, + mus_e1m2, + mus_e1m3, + mus_e1m4, + mus_e1m5, + mus_e1m6, + mus_e1m7, + mus_e1m8, + mus_e1m9, + mus_e2m1, + mus_e2m2, + mus_e2m3, + mus_e2m4, + mus_e2m5, + mus_e2m6, + mus_e2m7, + mus_e2m8, + mus_e2m9, + mus_e3m1, + mus_e3m2, + mus_e3m3, + mus_e3m4, + mus_e3m5, + mus_e3m6, + mus_e3m7, + mus_e3m8, + mus_e3m9, + mus_inter, + mus_intro, + mus_bunny, + mus_victor, + mus_introa, + mus_runnin, + mus_stalks, + mus_countd, + mus_betwee, + mus_doom, + mus_the_da, + mus_shawn, + mus_ddtblu, + mus_in_cit, + mus_dead, + mus_stlks2, + mus_theda2, + mus_doom2, + mus_ddtbl2, + mus_runni2, + mus_dead2, + mus_stlks3, + mus_romero, + mus_shawn2, + mus_messag, + mus_count2, + mus_ddtbl3, + mus_ampie, + mus_theda3, + mus_adrian, + mus_messg2, + mus_romer2, + mus_tense, + mus_shawn3, + mus_openin, + mus_evil, + mus_ultima, + mus_read_m, + mus_dm2ttl, + mus_dm2int, + NUMMUSIC +} musicenum_t; + + +// +// Identifiers for all sfx in game. +// +typedef enum +{ + sfx_None, + sfx_pistol, + sfx_shotgn, + sfx_sgcock, + sfx_dshtgn, + sfx_dbopn, + sfx_dbcls, + sfx_dbload, + sfx_plasma, + sfx_bfg, + sfx_sawup, + sfx_sawidl, + sfx_sawful, + sfx_sawhit, + sfx_rlaunc, + sfx_rxplod, + sfx_firsht, + sfx_firxpl, + sfx_pstart, + sfx_pstop, + sfx_doropn, + sfx_dorcls, + sfx_stnmov, + sfx_swtchn, + sfx_swtchx, + sfx_plpain, + sfx_dmpain, + sfx_popain, + sfx_vipain, + sfx_mnpain, + sfx_pepain, + sfx_slop, + sfx_itemup, + sfx_wpnup, + sfx_oof, + sfx_telept, + sfx_posit1, + sfx_posit2, + sfx_posit3, + sfx_bgsit1, + sfx_bgsit2, + sfx_sgtsit, + sfx_cacsit, + sfx_brssit, + sfx_cybsit, + sfx_spisit, + sfx_bspsit, + sfx_kntsit, + sfx_vilsit, + sfx_mansit, + sfx_pesit, + sfx_sklatk, + sfx_sgtatk, + sfx_skepch, + sfx_vilatk, + sfx_claw, + sfx_skeswg, + sfx_pldeth, + sfx_pdiehi, + sfx_podth1, + sfx_podth2, + sfx_podth3, + sfx_bgdth1, + sfx_bgdth2, + sfx_sgtdth, + sfx_cacdth, + sfx_skldth, + sfx_brsdth, + sfx_cybdth, + sfx_spidth, + sfx_bspdth, + sfx_vildth, + sfx_kntdth, + sfx_pedth, + sfx_skedth, + sfx_posact, + sfx_bgact, + sfx_dmact, + sfx_bspact, + sfx_bspwlk, + sfx_vilact, + sfx_noway, + sfx_barexp, + sfx_punch, + sfx_hoof, + sfx_metal, + sfx_chgun, + sfx_tink, + sfx_bdopn, + sfx_bdcls, + sfx_itmbk, + sfx_flame, + sfx_flamst, + sfx_getpow, + sfx_bospit, + sfx_boscub, + sfx_bossit, + sfx_bospn, + sfx_bosdth, + sfx_manatk, + sfx_mandth, + sfx_sssit, + sfx_ssdth, + sfx_keenpn, + sfx_keendt, + sfx_skeact, + sfx_skesit, + sfx_skeatk, + sfx_radio, + NUMSFX +} sfxenum_t; + +#endif + + +#ifndef __STSTUFF_H__ +#define __STSTUFF_H__ + +//#include "doomtype.h" +//#include "d_event.h" + +// Size of statusbar. +// Now sensitive for scaling. +#define ST_HEIGHT (32 * SCREEN_MUL) +#define ST_WIDTH SCREENWIDTH +#define ST_Y (SCREENHEIGHT - ST_HEIGHT) + + +// +// STATUS BAR +// + +// Called by main loop. +doom_boolean ST_Responder(event_t* ev); + +// Called by main loop. +void ST_Ticker(void); + +// Called by main loop. +void ST_Drawer(doom_boolean fullscreen, doom_boolean refresh); + +// Called when the console player is spawned on each level. +void ST_Start(void); + +// Called by startup code. +void ST_Init(void); + + +// States for status bar code. +typedef enum +{ + AutomapState, + FirstPersonState +} st_stateenum_t; + + +// States for the chat code. +typedef enum +{ + StartChatState, + WaitDestState, + GetChatState +} st_chatstateenum_t; + + +doom_boolean ST_Responder(event_t* ev); + +#endif + + +#ifndef __TABLES__ +#define __TABLES__ + + +#ifdef LINUX + +#else +#define PI 3.141592657 +#endif + +//#include "m_fixed.h" + +#define FINEANGLES 8192 +#define FINEMASK (FINEANGLES-1) + +// 0x100000000 to 0x2000 +#define ANGLETOFINESHIFT 19 + +// Effective size is 10240. +extern fixed_t finesine[5 * FINEANGLES / 4]; + +// Re-use data, is just PI/2 pahse shift. +extern fixed_t* finecosine; + + +// Effective size is 4096. +extern fixed_t finetangent[FINEANGLES / 2]; + +// Binary Angle Measument, BAM. +#define ANG45 0x20000000 +#define ANG90 0x40000000 +#define ANG180 0x80000000 +#define ANG270 0xc0000000 + +#define SLOPERANGE 2048 +#define SLOPEBITS 11 +#define DBITS (FRACBITS - SLOPEBITS) + +typedef unsigned angle_t; + +// Effective size is 2049; +// The +1 size is to handle the case when x==y +// without additional checking. +extern angle_t tantoangle[SLOPERANGE + 1]; + + +// Utility function, +// called by R_PointToAngle. +int SlopeDiv(unsigned num, unsigned den); + + +#endif + + +#ifndef __P_MOBJ__ +#define __P_MOBJ__ + + +// Basics. +//#include "tables.h" +//#include "m_fixed.h" + +// We need the thinker_t stuff. +//#include "d_think.h" + +// We need the WAD data structure for Map things, +// from the THINGS lump. +//#include "doomdata.h" + +// States are tied to finite states are +// tied to animation frames. +// Needs precompiled tables/data structures. +//#include "info.h" + + +// +// NOTES: mobj_t +// +// mobj_ts are used to tell the refresh where to draw an image, +// tell the world simulation when objects are contacted, +// and tell the sound driver how to position a sound. +// +// The refresh uses the next and prev links to follow +// lists of things in sectors as they are being drawn. +// The sprite, frame, and angle elements determine which patch_t +// is used to draw the sprite if it is visible. +// The sprite and frame values are allmost allways set +// from state_t structures. +// The statescr.exe utility generates the states.h and states.c +// files that contain the sprite/frame numbers from the +// statescr.txt source file. +// The xyz origin point represents a point at the bottom middle +// of the sprite (between the feet of a biped). +// This is the default origin position for patch_ts grabbed +// with lumpy.exe. +// A walking creature will have its z equal to the floor +// it is standing on. +// +// The sound code uses the x,y, and subsector fields +// to do stereo positioning of any sound effited by the mobj_t. +// +// The play simulation uses the blocklinks, x,y,z, radius, height +// to determine when mobj_ts are touching each other, +// touching lines in the map, or hit by trace lines (gunshots, +// lines of sight, etc). +// The mobj_t->flags element has various bit flags +// used by the simulation. +// +// Every mobj_t is linked into a single sector +// based on its origin coordinates. +// The subsector_t is found with R_PointInSubsector(x,y), +// and the sector_t can be found with subsector->sector. +// The sector links are only used by the rendering code, +// the play simulation does not care about them at all. +// +// Any mobj_t that needs to be acted upon by something else +// in the play world (block movement, be shot, etc) will also +// need to be linked into the blockmap. +// If the thing has the MF_NOBLOCK flag set, it will not use +// the block links. It can still interact with other things, +// but only as the instigator (missiles will run into other +// things, but nothing can run into a missile). +// Each block in the grid is 128*128 units, and knows about +// every line_t that it contains a piece of, and every +// interactable mobj_t that has its origin contained. +// +// A valid mobj_t is a mobj_t that has the proper subsector_t +// filled in for its xy coordinates and is linked into the +// sector from which the subsector was made, or has the +// MF_NOSECTOR flag set (the subsector_t needs to be valid +// even if MF_NOSECTOR is set), and is linked into a blockmap +// block or has the MF_NOBLOCKMAP flag set. +// Links should only be modified by the P_[Un]SetThingPosition() +// functions. +// Do not change the MF_NO? flags while a thing is valid. +// +// Any questions? +// + +// +// Misc. mobj flags +// +typedef enum +{ + // Call P_SpecialThing when touched. + MF_SPECIAL = 1, + // Blocks. + MF_SOLID = 2, + // Can be hit. + MF_SHOOTABLE = 4, + // Don't use the sector links (invisible but touchable). + MF_NOSECTOR = 8, + // Don't use the blocklinks (inert but displayable) + MF_NOBLOCKMAP = 16, + + // Not to be activated by sound, deaf monster. + MF_AMBUSH = 32, + // Will try to attack right back. + MF_JUSTHIT = 64, + // Will take at least one step before attacking. + MF_JUSTATTACKED = 128, + // On level spawning (initial position), + // hang from ceiling instead of stand on floor. + MF_SPAWNCEILING = 256, + // Don't apply gravity (every tic), + // that is, object will float, keeping current height + // or changing it actively. + MF_NOGRAVITY = 512, + + // Movement flags. + // This allows jumps from high places. + MF_DROPOFF = 0x400, + // For players, will pick up items. + MF_PICKUP = 0x800, + // Player cheat. ??? + MF_NOCLIP = 0x1000, + // Player: keep info about sliding along walls. + MF_SLIDE = 0x2000, + // Allow moves to any height, no gravity. + // For active floaters, e.g. cacodemons, pain elementals. + MF_FLOAT = 0x4000, + // Don't cross lines + // ??? or look at heights on teleport. + MF_TELEPORT = 0x8000, + // Don't hit same species, explode on block. + // Player missiles as well as fireballs of various kinds. + MF_MISSILE = 0x10000, + // Dropped by a demon, not level spawned. + // E.g. ammo clips dropped by dying former humans. + MF_DROPPED = 0x20000, + // Use fuzzy draw (shadow demons or spectres), + // temporary player invisibility powerup. + MF_SHADOW = 0x40000, + // Flag: don't bleed when shot (use puff), + // barrels and shootable furniture shall not bleed. + MF_NOBLOOD = 0x80000, + // Don't stop moving halfway off a step, + // that is, have dead bodies slide down all the way. + MF_CORPSE = 0x100000, + // Floating to a height for a move, ??? + // don't auto float to target's height. + MF_INFLOAT = 0x200000, + + // On kill, count this enemy object + // towards intermission kill total. + // Happy gathering. + MF_COUNTKILL = 0x400000, + + // On picking up, count this item object + // towards intermission item total. + MF_COUNTITEM = 0x800000, + + // Special handling: skull in flight. + // Neither a cacodemon nor a missile. + MF_SKULLFLY = 0x1000000, + + // Don't spawn this object + // in death match mode (e.g. key cards). + MF_NOTDMATCH = 0x2000000, + + // Player sprites in multiplayer modes are modified + // using an internal color lookup table for re-indexing. + // If 0x4 0x8 or 0xc, + // use a translation table for player colormaps + MF_TRANSLATION = 0xc000000, + // Hmm ???. + MF_TRANSSHIFT = 26 +} mobjflag_t; + + +// Map Object definition. +typedef struct mobj_s +{ + // List: thinker links. + thinker_t thinker; + + // Info for drawing: position. + fixed_t x; + fixed_t y; + fixed_t z; + + // More list: links in sector (if needed) + struct mobj_s* snext; + struct mobj_s* sprev; + + //More drawing info: to determine current sprite. + angle_t angle; // orientation + spritenum_t sprite; // used to find patch_t and flip value + int frame; // might be ORed with FF_FULLBRIGHT + + // Interaction info, by BLOCKMAP. + // Links in blocks (if needed). + struct mobj_s* bnext; + struct mobj_s* bprev; + + struct subsector_s* subsector; + + // The closest interval over all contacted Sectors. + fixed_t floorz; + fixed_t ceilingz; + + // For movement checking. + fixed_t radius; + fixed_t height; + + // Momentums, used to update position. + fixed_t momx; + fixed_t momy; + fixed_t momz; + + // If == validcount, already checked. + int validcount; + + mobjtype_t type; + mobjinfo_t* info; // &mobjinfo[mobj->type] + + int tics; // state tic counter + state_t* state; + int flags; + int health; + + // Movement direction, movement generation (zig-zagging). + int movedir; // 0-7 + int movecount; // when 0, select a new dir + + // Thing being chased/attacked (or 0), + // also the originator for missiles. + struct mobj_s* target; + + // Reaction time: if non 0, don't attack yet. + // Used by player to freeze a bit after teleporting. + int reactiontime; + + // If >0, the target will be chased + // no matter what (even if shot) + int threshold; + + // Additional info record for player avatars only. + // Only valid if type == MT_PLAYER + struct player_s* player; + + // Player number last looked for. + int lastlook; + + // For nightmare respawn. + mapthing_t spawnpoint; + + // Thing being chased/attacked for tracers. + struct mobj_s* tracer; +} mobj_t; + + +#endif + + +#ifndef __P_PSPR__ +#define __P_PSPR__ + +// Basic data types. +// Needs fixed point, and BAM angles. +//#include "m_fixed.h" +//#include "tables.h" + +// Needs to include the precompiled +// sprite animation tables. +// Header generated by multigen utility. +// This includes all the data for thing animation, +// i.e. the Thing Atrributes table +// and the Frame Sequence table. +//#include "info.h" + +// +// Frame flags: +// handles maximum brightness (torches, muzzle flare, light sources) +// +#define FF_FULLBRIGHT 0x8000 // flag in thing->frame +#define FF_FRAMEMASK 0x7fff + + +// +// Overlay psprites are scaled shapes +// drawn directly on the view screen, +// coordinates are given for a 320*200 view screen. +// +typedef enum +{ + ps_weapon, + ps_flash, + NUMPSPRITES +} psprnum_t; + + +typedef struct +{ + state_t* state; // a 0 state means not active + int tics; + fixed_t sx; + fixed_t sy; +} pspdef_t; + + +#endif + + +#ifndef __D_PLAYER__ +#define __D_PLAYER__ + + +// The player data structure depends on a number +// of other structs: items (internal inventory), +// animation states (closely tied to the sprites +// used to represent them, unfortunately). +//#include "d_items.h" +//#include "p_pspr.h" + +// In addition, the player is just a special +// case of the generic moving object/actor. +//#include "p_mobj.h" + +// Finally, for odd reasons, the player input +// is buffered within the player data struct, +// as commands per game tick. +//#include "d_ticcmd.h" + + +// +// Player states. +// +typedef enum +{ + // Playing or camping. + PST_LIVE, + // Dead on the ground, view follows killer. + PST_DEAD, + // Ready to restart/respawn??? + PST_REBORN +} playerstate_t; + + +// +// Player internal flags, for cheats and debug. +// +typedef enum +{ + // No clipping, walk through barriers. + CF_NOCLIP = 1, + // No damage, no health loss. + CF_GODMODE = 2, + // Not really a cheat, just a debug aid. + CF_NOMOMENTUM = 4 +} cheat_t; + + +// +// Extended player object info: player_t +// +typedef struct player_s +{ + mobj_t* mo; + playerstate_t playerstate; + ticcmd_t cmd; + + // Determine POV, + // including viewpoint bobbing during movement. + // Focal origin above r.z + fixed_t viewz; + // Base height above floor for viewz. + fixed_t viewheight; + // Bob/squat speed. + fixed_t deltaviewheight; + // bounded/scaled total momentum. + fixed_t bob; + + // This is only used between levels, + // mo->health is used during levels. + int health; + int armorpoints; + // Armor type is 0-2. + int armortype; + + // Power ups. invinc and invis are tic counters. + int powers[NUMPOWERS]; + doom_boolean cards[NUMCARDS]; + doom_boolean backpack; + + // Frags, kills of other players. + int frags[MAXPLAYERS]; + weapontype_t readyweapon; + + // Is wp_nochange if not changing. + weapontype_t pendingweapon; + + doom_boolean weaponowned[NUMWEAPONS]; + int ammo[NUMAMMO]; + int maxammo[NUMAMMO]; + + // doom_true if button down last tic. + int attackdown; + int usedown; + + // Bit flags, for cheats and debug. + // See cheat_t, above. + int cheats; + + // Refired shots are less accurate. + int refire; + + // For intermission stats. + int killcount; + int itemcount; + int secretcount; + + // Hint messages. + char* message; + + // For screen flashing (red or bright). + int damagecount; + int bonuscount; + + // Who did damage (0 for floors/ceilings). + mobj_t* attacker; + + // So gun flashes light up areas. + int extralight; + + // Current PLAYPAL, ??? + // can be set to REDCOLORMAP for pain, etc. + int fixedcolormap; + + // Player skin colorshift, + // 0-3 for which color to draw player. + int colormap; + + // Overlay view sprites (gun, etc). + pspdef_t psprites[NUMPSPRITES]; + + // doom_true if secret level has been done. + doom_boolean didsecret; +} player_t; + + +// +// INTERMISSION +// Structure passed e.g. to WI_Start(wb) +// +typedef struct +{ + doom_boolean in; // whether the player is in game + + // Player stats, kills, collected items etc. + int skills; + int sitems; + int ssecret; + int stime; + int frags[4]; + int score; // current score on entry, modified on return +} wbplayerstruct_t; + + +typedef struct +{ + int epsd; // episode # (0-2) + + // if doom_true, splash the secret level + doom_boolean didsecret; + + // previous and next levels, origin 0 + int last; + int next; + + int maxkills; + int maxitems; + int maxsecret; + int maxfrags; + + // the par time + int partime; + + // index of this player in game + int pnum; + + wbplayerstruct_t plyr[MAXPLAYERS]; +} wbstartstruct_t; + + +#endif + + +#ifndef __D_NET__ +#define __D_NET__ + + +//#include "d_player.h" + + +// +// Network play related stuff. +// There is a data struct that stores network +// communication related stuff, and another +// one that defines the actual packets to +// be transmitted. +// + +#define DOOMCOM_ID 0x12345678l + +// Max computers/players in a game. +#define MAXNETNODES 8 + +// Networking and tick handling related. +#define BACKUPTICS 12 + + +typedef enum +{ + CMD_SEND = 1, + CMD_GET = 2 +} command_t; + + +// +// Network packet data. +// +typedef struct +{ + // High bit is retransmit request. + unsigned checksum; + // Only valid if NCMD_RETRANSMIT. + byte retransmitfrom; + + byte starttic; + byte player; + byte numtics; + ticcmd_t cmds[BACKUPTICS]; +} doomdata_t; + + +typedef struct +{ + // Supposed to be DOOMCOM_ID? + long id; + + // DOOM executes an int to execute commands. + short intnum; + // Communication between DOOM and the driver. + // Is CMD_SEND or CMD_GET. + short command; + // Is dest for send, set by get (-1 = no packet). + short remotenode; + + // Number of bytes in doomdata to be sent + short datalength; + + // Info common to all nodes. + // Console is allways node 0. + short numnodes; + // Flag: 1 = no duplication, 2-5 = dup for slow nets. + short ticdup; + // Flag: 1 = send a backup tic in every packet. + short extratics; + // Flag: 1 = deathmatch. + short deathmatch; + // Flag: -1 = new game, 0-5 = load savegame + short savegame; + short episode; // 1-3 + short map; // 1-9 + short skill; // 1-5 + + // Info specific to this node. + short consoleplayer; + short numplayers; + + // These are related to the 3-display mode, + // in which two drones looking left and right + // were used to render two additional views + // on two additional computers. + // Probably not operational anymore. + // 1 = left, 0 = center, -1 = right + short angleoffset; + // 1 = drone + short drone; + + // The packet data to be sent. + doomdata_t data; +} doomcom_t; + + +// Create any new ticcmds and broadcast to other players. +void NetUpdate(void); + +// Broadcasts special packets to other players +// to notify of game exit +void D_QuitNetGame(void); + +//? how many ticks to run? +void TryRunTics(void); + + +#endif + + +#ifndef __D_STATE__ +#define __D_STATE__ + + +// We need globally shared data structures, +// for defining the global state variables. +//#include "doomdata.h" +//#include "d_net.h" + +// We need the playr data structure as well. +//#include "d_player.h" + + +// ------------------------ +// Command line parameters. +// +extern doom_boolean nomonsters; // checkparm of -nomonsters +extern doom_boolean respawnparm; // checkparm of -respawn +extern doom_boolean fastparm; // checkparm of -fast +extern doom_boolean devparm; // DEBUG: launched with -devparm + + +// ----------------------------------------------------- +// Game Mode - identify IWAD as shareware, retail etc. +// +extern GameMode_t gamemode; +extern GameMission_t gamemission; + +// Set if homebrew PWAD stuff has been added. +extern doom_boolean modifiedgame; + + +// ------------------------------------------- +// Language. +extern Language_t language; + + +// ------------------------------------------- +// Selected skill type, map etc. +// + +// Defaults for menu, methinks. +extern skill_t startskill; +extern int startepisode; +extern int startmap; + +extern doom_boolean autostart; + +// Selected by user. +extern skill_t gameskill; +extern int gameepisode; +extern int gamemap; + +// Nightmare mode flag, single player. +extern doom_boolean respawnmonsters; + +// Netgame? Only doom_true if >1 player. +extern doom_boolean netgame; + +// Flag: doom_true only if started as net deathmatch. +// An enum might handle altdeath/cooperative better. +extern doom_boolean deathmatch; + +// ------------------------- +// Internal parameters for sound rendering. +// These have been taken from the DOS version, +// but are not (yet) supported with Linux +// (e.g. no sound volume adjustment with menu. + +// These are not used, but should be (menu). +// From m_menu.c: +// Sound FX volume has default, 0 - 15 +// Music volume has default, 0 - 15 +// These are multiplied by 8. +extern int snd_SfxVolume; // maximum volume for sound +extern int snd_MusicVolume; // maximum volume for music + +// Current music/sfx card - index useless +// w/o a reference LUT in a sound module. +// Ideally, this would use indices found +// in: /usr/include/linux/soundcard.h +extern int snd_MusicDevice; +extern int snd_SfxDevice; + +// Config file? Same disclaimer as above. +extern int snd_DesiredMusicDevice; +extern int snd_DesiredSfxDevice; + + +// ------------------------- +// Status flags for refresh. +// + +// Depending on view size - no status bar? +// Note that there is no way to disable the +// status bar explicitely. +extern doom_boolean statusbaractive; + +extern doom_boolean automapactive; // In AutoMap mode? +extern doom_boolean menuactive; // Menu overlayed? +extern doom_boolean paused; // Game Pause? + +extern doom_boolean viewactive; + +extern doom_boolean nodrawers; +extern doom_boolean noblit; + +extern int viewwindowx; +extern int viewwindowy; +extern int viewheight; +extern int viewwidth; +extern int scaledviewwidth; + + +// This one is related to the 3-screen display mode. +// ANG90 = left side, ANG270 = right +extern int viewangleoffset; + +// Player taking events, and displaying. +extern int consoleplayer; +extern int displayplayer; + + +// ------------------------------------- +// Scores, rating. +// Statistics on a given map, for intermission. +// +extern int totalkills; +extern int totalitems; +extern int totalsecret; + +// Timer, for scores. +extern int levelstarttic; // gametic at level start +extern int leveltime; // tics in game play for par + + +// -------------------------------------- +// DEMO playback/recording related stuff. +// No demo, there is a human player in charge? +// Disable save/end game? +extern doom_boolean usergame; + +//? +extern doom_boolean demoplayback; +extern doom_boolean demorecording; + +// Quit after playing a demo from cmdline. +extern doom_boolean singledemo; + +//? +extern gamestate_t gamestate; + + +//----------------------------- +// Internal parameters, fixed. +// These are set by the engine, and not changed +// according to user inputs. Partly load from +// WAD, partly set at startup time. + +extern int gametic; + + +// Bookkeeping on players - state. +extern player_t players[MAXPLAYERS]; + +// Alive? Disconnected? +extern doom_boolean playeringame[MAXPLAYERS]; + + +// Player spawn spots for deathmatch. +#define MAX_DM_STARTS 10 +extern mapthing_t deathmatchstarts[MAX_DM_STARTS]; +extern mapthing_t* deathmatch_p; + +// Player spawn spots. +extern mapthing_t playerstarts[MAXPLAYERS]; + +// Intermission stats. +// Parameters for world map / intermission. +extern wbstartstruct_t wminfo; + + +// LUT of ammunition limits for each kind. +// This doubles with BackPack powerup item. +extern int maxammo[NUMAMMO]; + + +//----------------------------------------- +// Internal parameters, used for engine. +// + +// File handling stuff. +extern char basedefault[1024]; +extern void* debugfile; + +// if doom_true, load all graphics at level load +extern doom_boolean precache; + +// wipegamestate can be set to -1 +// to force a wipe on the next draw +extern gamestate_t wipegamestate; + +extern int mouseSensitivity; +//? +// debug flag to cancel adaptiveness +extern doom_boolean singletics; + +extern int bodyqueslot; + + +// Needed to store the number of the dummy sky flat. +// Used for rendering, +// as well as tracking projectiles etc. +extern int skyflatnum; + + +// Netgame stuff (buffers and pointers, i.e. indices). + +// This is ??? +extern doomcom_t* doomcom; + +// This points inside doomcom. +extern doomdata_t* netbuffer; + + +extern ticcmd_t localcmds[BACKUPTICS]; +extern int rndindex; + +extern int maketic; +extern int nettics[MAXNETNODES]; + +extern ticcmd_t netcmds[MAXPLAYERS][BACKUPTICS]; +extern int ticdup; + + +#endif + + +#ifndef __I_SOUND__ +#define __I_SOUND__ + + +//#include "doomdef.h" + + + +//#include "doomstat.h" +//#include "sounds.h" + + +// Init at program start... +void I_InitSound(); + +// ... update sound buffer and audio device at runtime... +void I_UpdateSound(void); +void I_SubmitSound(void); + +// ... shut down and relase at program termination. +void I_ShutdownSound(void); + + +// +// SFX I/O +// + +// Initialize channels? +void I_SetChannels(); + +// Get raw data lump index for sound descriptor. +int I_GetSfxLumpNum(sfxinfo_t* sfxinfo); + +// Starts a sound in a particular sound channel. +int I_StartSound(int id, int vol, int sep, int pitch, int priority); + +// Stops a sound channel. +void I_StopSound(int handle); + +// Called by S_*() functions +// to see if a channel is still playing. +// Returns 0 if no longer playing, 1 if playing. +int I_SoundIsPlaying(int handle); + +// Updates the volume, separation, +// and pitch of a sound channel. +void I_UpdateSoundParams(int handle, int vol, int sep, int pitch); + + +// +// MUSIC I/O +// +void I_InitMusic(void); +void I_ShutdownMusic(void); + +// Volume. +void I_SetMusicVolume(int volume); + +// PAUSE game handling. +void I_PauseSong(int handle); +void I_ResumeSong(int handle); + +// Registers a song handle to song data. +int I_RegisterSong(void* data); + +// Called by anything that wishes to start music. +// plays a song, and when the song is done, +// starts playing it again in an endless loop. +// Horrible thing to do, considering. +void I_PlaySong(int handle, int looping); + +// Stops a song over 3 seconds. +void I_StopSong(int handle); + +// See above (register), then think backwards +void I_UnRegisterSong(int handle); + +// Get next MIDI message +unsigned long I_TickSong(); + + +#endif + + +#ifndef __P_INTER__ +#define __P_INTER__ + + +//#include "d_player.h" + + +doom_boolean P_GivePower(player_t*, int); + + +#endif + + +#ifndef __R_DEFS__ +#define __R_DEFS__ + + +// Screenwidth. +//#include "doomdef.h" + +// Some more or less basic data types +// we depend on. +//#include "m_fixed.h" + +// We rely on the thinker data struct +// to handle sound origins in sectors. +//#include "d_think.h" +// SECTORS do store MObjs anyway. +//#include "p_mobj.h" + + +// Silhouette, needed for clipping Segs (mainly) +// and sprites representing things. +#define SIL_NONE 0 +#define SIL_BOTTOM 1 +#define SIL_TOP 2 +#define SIL_BOTH 3 + +#define MAXDRAWSEGS 256 + + +// +// INTERNAL MAP TYPES +// used by play and refresh +// + +// +// Your plain vanilla vertex. +// Note: transformed values not buffered locally, +// like some DOOM-alikes ("wt", "WebView") did. +// +typedef struct +{ + fixed_t x; + fixed_t y; +} vertex_t; + + +// Forward of LineDefs, for Sectors. +struct line_s; + +// Each sector has a degenmobj_t in its center +// for sound origin purposes. +// I suppose this does not handle sound from +// moving objects (doppler), because +// position is prolly just buffered, not +// updated. +typedef struct +{ + thinker_t thinker; // not used for anything + fixed_t x; + fixed_t y; + fixed_t z; +} degenmobj_t; + +// +// The SECTORS record, at runtime. +// Stores things/mobjs. +// +typedef struct +{ + fixed_t floorheight; + fixed_t ceilingheight; + short floorpic; + short ceilingpic; + short lightlevel; + short special; + short tag; + + // 0 = untraversed, 1,2 = sndlines -1 + int soundtraversed; + + // thing that made a sound (or null) + mobj_t* soundtarget; + + // mapblock bounding box for height changes + int blockbox[4]; + + // origin for any sounds played by the sector + degenmobj_t soundorg; + + // if == validcount, already checked + int validcount; + + // list of mobjs in sector + mobj_t* thinglist; + + // thinker_t for reversable actions + void* specialdata; + + int linecount; + struct line_s** lines; // [linecount] size +} sector_t; + + +// +// The SideDef. +// +typedef struct +{ + // add this to the calculated texture column + fixed_t textureoffset; + + // add this to the calculated texture top + fixed_t rowoffset; + + // Texture indices. + // We do not maintain names here. + short toptexture; + short bottomtexture; + short midtexture; + + // Sector the SideDef is facing. + sector_t* sector; +} side_t; + + +// +// Move clipping aid for LineDefs. +// +typedef enum +{ + ST_HORIZONTAL, + ST_VERTICAL, + ST_POSITIVE, + ST_NEGATIVE +} slopetype_t; + + +typedef struct line_s +{ + // Vertices, from v1 to v2. + vertex_t* v1; + vertex_t* v2; + + // Precalculated v2 - v1 for side checking. + fixed_t dx; + fixed_t dy; + + // Animation related. + short flags; + short special; + short tag; + + // Visual appearance: SideDefs. + // sidenum[1] will be -1 if one sided + short sidenum[2]; + + // Neat. Another bounding box, for the extent + // of the LineDef. + fixed_t bbox[4]; + + // To aid move clipping. + slopetype_t slopetype; + + // Front and back sector. + // Note: redundant? Can be retrieved from SideDefs. + sector_t* frontsector; + sector_t* backsector; + + // if == validcount, already checked + int validcount; + + // thinker_t for reversable actions + void* specialdata; +} line_t; + + +// +// A SubSector. +// References a Sector. +// Basically, this is a list of LineSegs, +// indicating the visible walls that define +// (all or some) sides of a convex BSP leaf. +// +typedef struct subsector_s +{ + sector_t* sector; + short numlines; + short firstline; +} subsector_t; + + +// +// The LineSeg. +// +typedef struct +{ + vertex_t* v1; + vertex_t* v2; + + fixed_t offset; + + angle_t angle; + + side_t* sidedef; + line_t* linedef; + + // Sector references. + // Could be retrieved from linedef, too. + // backsector is 0 for one sided lines + sector_t* frontsector; + sector_t* backsector; +} seg_t; + + +// +// BSP node. +// +typedef struct +{ + // Partition line. + fixed_t x; + fixed_t y; + fixed_t dx; + fixed_t dy; + + // Bounding box for each child. + fixed_t bbox[2][4]; + + // If NF_SUBSECTOR its a subsector. + unsigned short children[2]; +} node_t; + + +// posts are runs of non masked source pixels +typedef struct +{ + byte topdelta; // -1 is the last post in a column + byte length; // length data bytes follows +} post_t; + +// column_t is a list of 0 or more post_t, (byte)-1 terminated +typedef post_t column_t; + + +// +// OTHER TYPES +// + +// This could be wider for >8 bit display. +// Indeed, doom_true color support is posibble +// precalculating 24bpp lightmap/colormap LUT. +// from darkening PLAYPAL to all black. +// Could even us emore than 32 levels. +typedef byte lighttable_t; + + +// +// ? +// +typedef struct drawseg_s +{ + seg_t* curline; + int x1; + int x2; + + fixed_t scale1; + fixed_t scale2; + fixed_t scalestep; + + // 0=none, 1=bottom, 2=top, 3=both + int silhouette; + + // do not clip sprites above this + fixed_t bsilheight; + + // do not clip sprites below this + fixed_t tsilheight; + + // Pointers to lists for sprite clipping, + // all three adjusted so [x1] is first value. + short* sprtopclip; + short* sprbottomclip; + short* maskedtexturecol; +} drawseg_t; + + +// Patches. +// A patch holds one or more columns. +// Patches are used for sprites and all masked pictures, +// and we compose textures from the TEXTURE1/2 lists +// of patches. +typedef struct +{ + short width; // bounding box size + short height; + short leftoffset; // pixels to the left of origin + short topoffset; // pixels below the origin + int columnofs[8]; // only [width] used + // the [0] is &columnofs[width] +} patch_t; + + +// A vissprite_t is a thing +// that will be drawn during a refresh. +// I.e. a sprite object that is partly visible. +typedef struct vissprite_s +{ + // Doubly linked list. + struct vissprite_s* prev; + struct vissprite_s* next; + + int x1; + int x2; + + // for line side calculation + fixed_t gx; + fixed_t gy; + + // global bottom / top for silhouette clipping + fixed_t gz; + fixed_t gzt; + + // horizontal position of x1 + fixed_t startfrac; + + fixed_t scale; + + // negative if flipped + fixed_t xiscale; + + fixed_t texturemid; + int patch; + + // for color translation and shadow draw, + // maxbright frames as well + lighttable_t* colormap; + + int mobjflags; +} vissprite_t; + + +// +// Sprites are patches with a special naming convention +// so they can be recognized by R_InitSprites. +// The base name is NNNNFx or NNNNFxFx, with +// x indicating the rotation, x = 0, 1-7. +// The sprite and frame specified by a thing_t +// is range checked at run time. +// A sprite is a patch_t that is assumed to represent +// a three dimensional object and may have multiple +// rotations pre drawn. +// Horizontal flipping is used to save space, +// thus NNNNF2F5 defines a mirrored patch. +// Some sprites will only have one picture used +// for all views: NNNNF0 +// +typedef struct +{ + // If doom_false use 0 for any position. + // Note: as eight entries are available, + // we might as well insert the same name eight times. + doom_boolean rotate; + + // Lump to use for view angles 0-7. + short lump[8]; + + // Flip bit (1 = flip) to use for view angles 0-7. + byte flip[8]; +} spriteframe_t; + + +// +// A sprite definition: +// a number of animation frames. +// +typedef struct +{ + int numframes; + spriteframe_t* spriteframes; +} spritedef_t; + + +// +// Now what is a visplane, anyway? +// +typedef struct +{ + fixed_t height; + int picnum; + int lightlevel; + int minx; + int maxx; + + // leave pads for [minx-1]/[maxx+1] + + byte pad1; + // Here lies the rub for all + // dynamic resize/change of resolution. + byte top[SCREENWIDTH]; + byte pad2; + byte pad3; + // See above. + byte bottom[SCREENWIDTH]; + byte pad4; +} visplane_t; + + +#endif + + +#ifndef __HULIB__ +#define __HULIB__ + + +// We are referring to patches. +//#include "r_defs.h" + + +// background and foreground screen numbers +// different from other modules. +#define BG 1 +#define FG 0 + +// font stuff +#define HU_CHARERASE KEY_BACKSPACE + +#define HU_MAXLINES 4 +#define HU_MAXLINELENGTH 80 + + +// +// Typedefs of widgets +// + +// Text Line widget +// (parent of Scrolling Text and Input Text widgets) +typedef struct +{ + // left-justified position of scrolling text window + int x; + int y; + + patch_t** f; // font + int sc; // start character + char l[HU_MAXLINELENGTH + 1]; // line of text + int len; // current line length + + // whether this line needs to be udpated + int needsupdate; +} hu_textline_t; + + +// Scrolling Text window widget +// (child of Text Line widget) +typedef struct +{ + hu_textline_t l[HU_MAXLINES]; // text lines to draw + int h; // height in lines + int cl; // current line number + + // pointer to doom_boolean stating whether to update window + doom_boolean* on; + doom_boolean laston; // last value of *->on. +} hu_stext_t; + + +// Input Text Line widget +// (child of Text Line widget) +typedef struct +{ + hu_textline_t l; // text line to input on + + // left margin past which I am not to delete characters + int lm; + + // pointer to doom_boolean stating whether to update window + doom_boolean* on; + doom_boolean laston; // last value of *->on; +} hu_itext_t; + + +// +// Widget creation, access, and update routines +// + +// initializes heads-up widget library +void HUlib_init(void); + +// +// textline code +// + +// clear a line of text +void HUlib_clearTextLine(hu_textline_t* t); + +void HUlib_initTextLine(hu_textline_t* t, int x, int y, patch_t** f, int sc); + +// returns success +doom_boolean HUlib_addCharToTextLine(hu_textline_t* t, char ch); + +// returns success +doom_boolean HUlib_delCharFromTextLine(hu_textline_t* t); + +// draws tline +void HUlib_drawTextLine(hu_textline_t* l, doom_boolean drawcursor); + +// erases text line +void HUlib_eraseTextLine(hu_textline_t* l); + + +// +// Scrolling Text window widget routines +// + +// ? +void HUlib_initSText(hu_stext_t* s, + int x, + int y, + int h, + patch_t** font, + int startchar, + doom_boolean* on); + +// add a new line +void HUlib_addLineToSText(hu_stext_t* s); + +// ? +void HUlib_addMessageToSText(hu_stext_t* s, char* prefix, char* msg); + +// draws stext +void HUlib_drawSText(hu_stext_t* s); + +// erases all stext lines +void HUlib_eraseSText(hu_stext_t* s); + +// Input Text Line widget routines +void HUlib_initIText(hu_itext_t* it, + int x, + int y, + patch_t** font, + int startchar, + doom_boolean* on); + +// enforces left margin +void HUlib_delCharFromIText(hu_itext_t* it); + +// enforces left margin +void HUlib_eraseLineFromIText(hu_itext_t* it); + +// resets line and left margin +void HUlib_resetIText(hu_itext_t* it); + +// left of left-margin +void HUlib_addPrefixToIText(hu_itext_t* it, char* str); + +// whether eaten +doom_boolean HUlib_keyInIText(hu_itext_t* it, unsigned char ch); + +void HUlib_drawIText(hu_itext_t* it); + +// erases all itext lines +void HUlib_eraseIText(hu_itext_t* it); + + +#endif + + +#ifndef __P_SPEC__ +#define __P_SPEC__ + + +//#include "p_mobj.h" +//#include "r_defs.h" + + +// +// End-level timer (-TIMER option) +// +extern doom_boolean levelTimer; +extern int levelTimeCount; + + +// Define values for map objects +#define MO_TELEPORTMAN 14 + + +// at game start +void P_InitPicAnims(void); + +// at map load +void P_SpawnSpecials(void); + +// every tic +void P_UpdateSpecials(void); + +// when needed +doom_boolean P_UseSpecialLine(mobj_t* thing, line_t* line, int side); + +void P_ShootSpecialLine(mobj_t* thing, line_t* line); +void P_CrossSpecialLine(int linenum, int side, mobj_t* thing); +void P_PlayerInSpecialSector(player_t* player); +int twoSided(int sector, int line); +sector_t* getSector(int currentSector, int line, int side); +side_t* getSide(int currentSector, int line, int side); +fixed_t P_FindLowestFloorSurrounding(sector_t* sec); +fixed_t P_FindHighestFloorSurrounding(sector_t* sec); +fixed_t P_FindNextHighestFloor(sector_t* sec, int currentheight); +fixed_t P_FindLowestCeilingSurrounding(sector_t* sec); +fixed_t P_FindHighestCeilingSurrounding(sector_t* sec); +int P_FindSectorFromLineTag(line_t* line, int start); +int P_FindMinSurroundingLight(sector_t* sector, int max); +sector_t* getNextSector(line_t* line, sector_t* sec); + +// +// SPECIAL +// +int EV_DoDonut(line_t* line); + + +// +// P_LIGHTS +// +typedef struct +{ + thinker_t thinker; + sector_t* sector; + int count; + int maxlight; + int minlight; +} fireflicker_t; + + +typedef struct +{ + thinker_t thinker; + sector_t* sector; + int count; + int maxlight; + int minlight; + int maxtime; + int mintime; +} lightflash_t; + + +typedef struct +{ + thinker_t thinker; + sector_t* sector; + int count; + int minlight; + int maxlight; + int darktime; + int brighttime; +} strobe_t; + + +typedef struct +{ + thinker_t thinker; + sector_t* sector; + int minlight; + int maxlight; + int direction; +} glow_t; + + +#define GLOWSPEED 8 +#define STROBEBRIGHT 5 +#define FASTDARK 15 +#define SLOWDARK 35 + +void P_SpawnFireFlicker(sector_t* sector); +void T_LightFlash(lightflash_t* flash); +void P_SpawnLightFlash(sector_t* sector); +void T_StrobeFlash(strobe_t* flash); + +void P_SpawnStrobeFlash(sector_t* sector, int fastOrSlow, int inSync); +void EV_StartLightStrobing(line_t* line); +void EV_TurnTagLightsOff(line_t* line); + +void EV_LightTurnOn(line_t* line, int bright); + +void T_Glow(glow_t* g); +void P_SpawnGlowingLight(sector_t* sector); + + +// +// P_SWITCH +// +typedef struct +{ + char name1[9]; + char name2[9]; + short episode; +} switchlist_t; + + +typedef enum +{ + top, + middle, + bottom +} bwhere_e; + + +typedef struct +{ + line_t* line; + bwhere_e where; + int btexture; + int btimer; + mobj_t* soundorg; +} button_t; + + +// max # of wall switches in a level +#define MAXSWITCHES 50 + +// 4 players, 4 buttons each at once, max. +#define MAXBUTTONS 16 + +// 1 second, in ticks. +#define BUTTONTIME 35 + + +extern button_t buttonlist[MAXBUTTONS]; + + +void P_ChangeSwitchTexture(line_t* line, int useAgain); +void P_InitSwitchList(void); + + +// +// P_PLATS +// +typedef enum +{ + up, + down, + waiting, + in_stasis +} plat_e; + + +typedef enum +{ + perpetualRaise, + downWaitUpStay, + raiseAndChange, + raiseToNearestAndChange, + blazeDWUS +} plattype_e; + + +typedef struct +{ + thinker_t thinker; + sector_t* sector; + fixed_t speed; + fixed_t low; + fixed_t high; + int wait; + int count; + plat_e status; + plat_e oldstatus; + doom_boolean crush; + int tag; + plattype_e type; +} plat_t; + + +#define PLATWAIT 3 +#define PLATSPEED FRACUNIT +#define MAXPLATS 30 + + +extern plat_t* activeplats[MAXPLATS]; + + +void T_PlatRaise(plat_t* plat); +int EV_DoPlat(line_t* line, plattype_e type, int amount); +void P_AddActivePlat(plat_t* plat); +void P_RemoveActivePlat(plat_t* plat); +void EV_StopPlat(line_t* line); +void P_ActivateInStasis(int tag); + + +// +// P_DOORS +// +typedef enum +{ + door_normal, + close30ThenOpen, + door_close, + door_open, + raiseIn5Mins, + blazeRaise, + blazeOpen, + blazeClose +} vldoor_e; + + +typedef struct +{ + thinker_t thinker; + vldoor_e type; + sector_t* sector; + fixed_t topheight; + fixed_t speed; + + // 1 = up, 0 = waiting at top, -1 = down + int direction; + + // tics to wait at the top + int topwait; + + // (keep in case a door going down is reset) + // when it reaches 0, start going down + int topcountdown; +} vldoor_t; + + +#define VDOORSPEED FRACUNIT*2 +#define VDOORWAIT 150 + + +void EV_VerticalDoor(line_t* line, mobj_t* thing); +int EV_DoDoor(line_t* line, vldoor_e type); +int EV_DoLockedDoor(line_t* line, vldoor_e type, mobj_t* thing); +void T_VerticalDoor(vldoor_t* door); +void P_SpawnDoorCloseIn30(sector_t* sec); +void P_SpawnDoorRaiseIn5Mins(sector_t* sec, int secnum); + + +// +// P_CEILNG +// +typedef enum +{ + lowerToFloor, + raiseToHighest, + lowerAndCrush, + crushAndRaise, + fastCrushAndRaise, + silentCrushAndRaise +} ceiling_e; + + +typedef struct +{ + thinker_t thinker; + ceiling_e type; + sector_t* sector; + fixed_t bottomheight; + fixed_t topheight; + fixed_t speed; + doom_boolean crush; + + // 1 = up, 0 = waiting, -1 = down + int direction; + + // ID + int tag; + int olddirection; +} ceiling_t; + + +#define CEILSPEED FRACUNIT +#define CEILWAIT 150 +#define MAXCEILINGS 30 + + +extern ceiling_t* activeceilings[MAXCEILINGS]; + + +int EV_DoCeiling(line_t* line, ceiling_e type); +void T_MoveCeiling(ceiling_t* ceiling); +void P_AddActiveCeiling(ceiling_t* c); +void P_RemoveActiveCeiling(ceiling_t* c); +int EV_CeilingCrushStop(line_t* line); +void P_ActivateInStasisCeiling(line_t* line); + + +// +// P_FLOOR +// +typedef enum +{ + // lower floor to highest surrounding floor + lowerFloor, + + // lower floor to lowest surrounding floor + lowerFloorToLowest, + + // lower floor to highest surrounding floor VERY FAST + turboLower, + + // raise floor to lowest surrounding CEILING + raiseFloor, + + // raise floor to next highest surrounding floor + raiseFloorToNearest, + + // raise floor to shortest height texture around it + raiseToTexture, + + // lower floor to lowest surrounding floor + // and change floorpic + lowerAndChange, + + raiseFloor24, + raiseFloor24AndChange, + raiseFloorCrush, + + // raise to next highest floor, turbo-speed + raiseFloorTurbo, + donutRaise, + raiseFloor512 +} floor_e; + + +typedef enum +{ + build8, // slowly build by 8 + turbo16 // quickly build by 16 +} stair_e; + + +typedef struct +{ + thinker_t thinker; + floor_e type; + doom_boolean crush; + sector_t* sector; + int direction; + int newspecial; + short texture; + fixed_t floordestheight; + fixed_t speed; +} floormove_t; + + +#define FLOORSPEED FRACUNIT + + +typedef enum +{ + ok, + crushed, + pastdest +} result_e; + + +result_e T_MovePlane(sector_t* sector, fixed_t speed, fixed_t dest, doom_boolean crush, int floorOrCeiling, int direction); +int EV_BuildStairs(line_t* line, stair_e type); +int EV_DoFloor(line_t* line, floor_e floortype); +void T_MoveFloor(floormove_t* floor); + +// +// P_TELEPT +// +int EV_Teleport(line_t* line, int side, mobj_t* thing); + + +#endif + + +#ifndef __R_BSP__ +#define __R_BSP__ + + +//#include "r_defs.h" + + +extern seg_t* curline; +extern side_t* sidedef; +extern line_t* linedef; +extern sector_t* frontsector; +extern sector_t* backsector; + +extern int rw_x; +extern int rw_stopx; + +extern doom_boolean segtextured; + +// doom_false if the back side is the same plane +extern doom_boolean markfloor; +extern doom_boolean markceiling; + +extern doom_boolean skymap; + +extern drawseg_t drawsegs[MAXDRAWSEGS]; +extern drawseg_t* ds_p; + +extern lighttable_t** hscalelight; +extern lighttable_t** vscalelight; +extern lighttable_t** dscalelight; + + +typedef void (*drawfunc_t) (int start, int stop); + + +// BSP? +void R_ClearClipSegs(void); +void R_ClearDrawSegs(void); +void R_RenderBSPNode(int bspnum); + + +#endif + + +#ifndef __R_DRAW__ +#define __R_DRAW__ + + +//#include "r_defs.h" + + +extern lighttable_t* dc_colormap; +extern int dc_x; +extern int dc_yl; +extern int dc_yh; +extern fixed_t dc_iscale; +extern fixed_t dc_texturemid; + +// first pixel in a column +extern byte* dc_source; + + +// The span blitting interface. +// Hook in assembler or system specific BLT +// here. +void R_DrawColumn(void); +void R_DrawColumnLow(void); + +// The Spectre/Invisibility effect. +void R_DrawFuzzColumn(void); +void R_DrawFuzzColumnLow(void); + +// Draw with color translation tables, +// for player sprite rendering, +// Green/Red/Blue/Indigo shirts. +void R_DrawTranslatedColumn(void); +void R_DrawTranslatedColumnLow(void); + +void R_VideoErase(unsigned ofs, int count); + +extern int ds_y; +extern int ds_x1; +extern int ds_x2; + +extern lighttable_t* ds_colormap; + +extern fixed_t ds_xfrac; +extern fixed_t ds_yfrac; +extern fixed_t ds_xstep; +extern fixed_t ds_ystep; + +// start of a 64*64 tile image +extern byte* ds_source; + +extern byte* translationtables; +extern byte* dc_translation; + + +// Span blitting for rows, floor/ceiling. +// No Sepctre effect needed. +void R_DrawSpan(void); + +// Low resolution mode, 160x200? +void R_DrawSpanLow(void); + +void R_InitBuffer(int width, int height); + + +// Initialize color translation tables, +// for player rendering etc. +void R_InitTranslationTables(void); + +// Rendering function. +void R_FillBackScreen(void); + +// If the view size is not full screen, draws a border around it. +void R_DrawViewBorder(void); + + +#endif + + +#ifndef __R_SEGS__ +#define __R_SEGS__ + + +//#include "r_defs.h" + + +void R_RenderMaskedSegRange(drawseg_t* ds, int x1, int x2); + + +#endif + + +#ifndef __R_STATE__ +#define __R_STATE__ + + +//#include "d_player.h" // Need data structure definitions. +//#include "r_defs.h" + + +// +// Refresh internal data structures, +// for rendering. +// + +// needed for texture pegging +extern fixed_t* textureheight; + +// needed for pre rendering (fracs) +extern fixed_t* spritewidth; + +extern fixed_t* spriteoffset; +extern fixed_t* spritetopoffset; + +extern lighttable_t* colormaps; + +extern int viewwidth; +extern int scaledviewwidth; +extern int viewheight; + +extern int firstflat; + +// for global animation +extern int* flattranslation; +extern int* texturetranslation; + +// Sprite.... +extern int firstspritelump; +extern int lastspritelump; +extern int numspritelumps; + +// +// Lookup tables for map data. +// +extern int numsprites; +extern spritedef_t* sprites; + +extern int numvertexes; +extern vertex_t* vertexes; + +extern int numsegs; +extern seg_t* segs; + +extern int numsectors; +extern sector_t* sectors; + +extern int numsubsectors; +extern subsector_t* subsectors; + +extern int numnodes; +extern node_t* nodes; + +extern int numlines; +extern line_t* lines; + +extern int numsides; +extern side_t* sides; + +// +// POV data. +// +extern fixed_t viewx; +extern fixed_t viewy; +extern fixed_t viewz; + +extern angle_t viewangle; +extern player_t* viewplayer; + +// ? +extern angle_t clipangle; + +extern int viewangletox[FINEANGLES / 2]; +extern angle_t xtoviewangle[SCREENWIDTH + 1]; + +extern fixed_t rw_distance; +extern angle_t rw_normalangle; + +// angle to line origin +extern int rw_angle1; + +// Segs count? +extern int sscount; + +extern visplane_t* floorplane; +extern visplane_t* ceilingplane; + + +#endif + + +#ifndef __R_DATA__ +#define __R_DATA__ + + +//#include "r_defs.h" +//#include "r_state.h" + + +// Retrieve column data for span blitting. +byte* R_GetColumn(int tex, int col); + +// I/O, setting up the stuff. +void R_InitData(void); +void R_PrecacheLevel(void); + +// Retrieval. +// Floor/ceiling opaque texture tiles, +// lookup by name. For animation? +int R_FlatNumForName(char* name); + +// Called by P_Ticker for switches and animations, +// returns the texture number for the texture name. +int R_TextureNumForName(char* name); +int R_CheckTextureNumForName(char* name); + +#endif + + +#ifndef __R_MAIN__ +#define __R_MAIN__ + +//#include "d_player.h" +//#include "r_data.h" + + +// +// POV related. +// +extern fixed_t viewcos; +extern fixed_t viewsin; + +extern int viewwidth; +extern int viewheight; +extern int viewwindowx; +extern int viewwindowy; + +extern int centerx; +extern int centery; + +extern fixed_t centerxfrac; +extern fixed_t centeryfrac; +extern fixed_t projection; + +extern int validcount; + +extern int linecount; +extern int loopcount; + + +// +// Lighting LUT. +// Used for z-depth cuing per column/row, +// and other lighting effects (sector ambient, flash). +// + +// Lighting constants. +// Now why not 32 levels here? +#define LIGHTLEVELS 16 +#define LIGHTSEGSHIFT 4 + +#define MAXLIGHTSCALE 48 +#define LIGHTSCALESHIFT 12 +#define MAXLIGHTZ 128 +#define LIGHTZSHIFT 20 + +extern lighttable_t* scalelight[LIGHTLEVELS][MAXLIGHTSCALE]; +extern lighttable_t* scalelightfixed[MAXLIGHTSCALE]; +extern lighttable_t* zlight[LIGHTLEVELS][MAXLIGHTZ]; + +extern int extralight; +extern lighttable_t* fixedcolormap; + + +// Number of diminishing brightness levels. +// There a 0-31, i.e. 32 LUT in the COLORMAP lump. +#define NUMCOLORMAPS 32 + + +// Blocky/low detail mode. +//B remove this? +// 0 = high, 1 = low +extern int detailshift; + + +// +// Function pointers to switch refresh/drawing functions. +// Used to select shadow mode etc. +// +extern void (*colfunc) (void); +extern void (*basecolfunc) (void); +extern void (*fuzzcolfunc) (void); +// No shadow effects on floors. +extern void (*spanfunc) (void); + + +// +// Utility functions. +int R_PointOnSide(fixed_t x, fixed_t y, node_t* node); +int R_PointOnSegSide(fixed_t x, fixed_t y, seg_t* line); +angle_t R_PointToAngle(fixed_t x, fixed_t y); +angle_t R_PointToAngle2(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2); +fixed_t R_PointToDist(fixed_t x, fixed_t y); +fixed_t R_ScaleFromGlobalAngle(angle_t visangle); +subsector_t* R_PointInSubsector(fixed_t x, fixed_t y); +void R_AddPointToBox(int x, int y, fixed_t* box); + + +// +// REFRESH - the actual rendering functions. +// + +// Called by G_Drawer. +void R_RenderPlayerView(player_t* player); + +// Called by startup code. +void R_Init(void); + +// Called by M_Responder. +void R_SetViewSize(int blocks, int detail); + +#endif + + +#ifndef __R_PLANE__ +#define __R_PLANE__ + + +//#include "r_data.h" + + +// Visplane related. +extern short* lastopening; + +typedef void (*planefunction_t) (int top, int bottom); + +extern planefunction_t floorfunc; +extern planefunction_t ceilingfunc_t; + +extern short floorclip[SCREENWIDTH]; +extern short ceilingclip[SCREENWIDTH]; + +extern fixed_t yslope[SCREENHEIGHT]; +extern fixed_t distscale[SCREENWIDTH]; + +void R_InitPlanes(void); +void R_ClearPlanes(void); +void R_MapPlane(int y, int x1, int x2); +void R_MakeSpans(int x, int t1, int b1, int t2, int b2); +void R_DrawPlanes(void); +visplane_t* R_FindPlane(fixed_t height, int picnum, int lightlevel); +visplane_t* R_CheckPlane(visplane_t* pl, int start, int stop); + + +#endif + + +#ifndef __R_THINGS__ +#define __R_THINGS__ + + +//#include "r_defs.h" + + +#define MAXVISSPRITES 128 + + +extern vissprite_t vissprites[MAXVISSPRITES]; +extern vissprite_t* vissprite_p; +extern vissprite_t vsprsortedhead; + +// Constant arrays used for psprite clipping +// and initializing clipping. +extern short negonearray[SCREENWIDTH]; +extern short screenheightarray[SCREENWIDTH]; + +// vars for R_DrawMaskedColumn +extern short* mfloorclip; +extern short* mceilingclip; +extern fixed_t spryscale; +extern fixed_t sprtopscreen; + +extern fixed_t pspritescale; +extern fixed_t pspriteiscale; + + +void R_DrawMaskedColumn(column_t* column); +void R_SortVisSprites(void); +void R_AddSprites(sector_t* sec); +void R_InitSprites(char** namelist); +void R_ClearSprites(void); +void R_DrawMasked(void); + + +#endif + + +#ifndef __R_LOCAL__ +#define __R_LOCAL__ + +// Binary Angles, sine/cosine/atan lookups. +//#include "tables.h" + +// Screen size related parameters. +//#include "doomdef.h" + +// Include the refresh/render data structs. +//#include "r_data.h" + +// +// Separate header file for each module. +// +//#include "r_main.h" +//#include "r_bsp.h" +//#include "r_segs.h" +//#include "r_plane.h" +//#include "r_data.h" +//#include "r_things.h" +//#include "r_draw.h" + +#endif // __R_LOCAL__ + + +#ifndef __P_LOCAL__ +#define __P_LOCAL__ + + +#ifndef __R_LOCAL__ +//#include "r_local.h" +#endif + + +#define FLOATSPEED (FRACUNIT*4) + +#define MAXHEALTH 100 +#define VIEWHEIGHT (41*FRACUNIT) + +// mapblocks are used to check movement +// against lines and things +#define MAPBLOCKUNITS 128 +#define MAPBLOCKSIZE (MAPBLOCKUNITS*FRACUNIT) +#define MAPBLOCKSHIFT (FRACBITS+7) +#define MAPBMASK (MAPBLOCKSIZE-1) +#define MAPBTOFRAC (MAPBLOCKSHIFT-FRACBITS) + + +// player radius for movement checking +#define PLAYERRADIUS 16*FRACUNIT + +// MAXRADIUS is for precalculated sector block boxes +// the spider demon is larger, +// but we do not have any moving sectors nearby +#define MAXRADIUS 32*FRACUNIT + +#define GRAVITY FRACUNIT +#define MAXMOVE (30*FRACUNIT) + +#define USERANGE (64*FRACUNIT) +#define MELEERANGE (64*FRACUNIT) +#define MISSILERANGE (32*64*FRACUNIT) + +// follow a player exlusively for 3 seconds +#define BASETHRESHOLD 100 + + +// +// P_TICK +// + +// both the head and tail of the thinker list +extern thinker_t thinkercap; + + +void P_InitThinkers(void); +void P_AddThinker(thinker_t* thinker); +void P_RemoveThinker(thinker_t* thinker); + + +// +// P_PSPR +// +void P_SetupPsprites(player_t* curplayer); +void P_MovePsprites(player_t* curplayer); +void P_DropWeapon(player_t* player); + + +// +// P_USER +// +void P_PlayerThink(player_t* player); + + +// +// P_MOBJ +// +#define ONFLOORZ DOOM_MININT +#define ONCEILINGZ DOOM_MAXINT + +// Time interval for item respawning. +#define ITEMQUESIZE 128 + + +extern mapthing_t itemrespawnque[ITEMQUESIZE]; +extern int itemrespawntime[ITEMQUESIZE]; +extern int iquehead; +extern int iquetail; + + +void P_RespawnSpecials(void); +mobj_t* P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type); +void P_RemoveMobj(mobj_t* th); +doom_boolean P_SetMobjState(mobj_t* mobj, statenum_t state); +void P_MobjThinker(mobj_t* mobj); +void P_SpawnPuff(fixed_t x, fixed_t y, fixed_t z); +void P_SpawnBlood(fixed_t x, fixed_t y, fixed_t z, int damage); +mobj_t* P_SpawnMissile(mobj_t* source, mobj_t* dest, mobjtype_t type); +void P_SpawnPlayerMissile(mobj_t* source, mobjtype_t type); + + +// +// P_ENEMY +// +void P_NoiseAlert(mobj_t* target, mobj_t* emmiter); + + +// +// P_MAPUTL +// +typedef struct +{ + fixed_t x; + fixed_t y; + fixed_t dx; + fixed_t dy; +} divline_t; + + +typedef struct +{ + fixed_t frac; // along trace line + doom_boolean isaline; + union + { + mobj_t* thing; + line_t* line; + } d; +} intercept_t; + + +#define MAXINTERCEPTS 128 +extern intercept_t intercepts[MAXINTERCEPTS]; +extern intercept_t* intercept_p; + + +typedef doom_boolean(*traverser_t) (intercept_t* in); + + +fixed_t P_AproxDistance(fixed_t dx, fixed_t dy); +int P_PointOnLineSide(fixed_t x, fixed_t y, line_t* line); +int P_PointOnDivlineSide(fixed_t x, fixed_t y, divline_t* line); +void P_MakeDivline(line_t* li, divline_t* dl); +fixed_t P_InterceptVector(divline_t* v2, divline_t* v1); +int P_BoxOnLineSide(fixed_t* tmbox, line_t* ld); + + +extern fixed_t opentop; +extern fixed_t openbottom; +extern fixed_t openrange; +extern fixed_t lowfloor; + + +void P_LineOpening(line_t* linedef); + + +doom_boolean P_BlockLinesIterator(int x, int y, doom_boolean(*func)(line_t*)); +doom_boolean P_BlockThingsIterator(int x, int y, doom_boolean(*func)(mobj_t*)); + + +#define PT_ADDLINES 1 +#define PT_ADDTHINGS 2 +#define PT_EARLYOUT 4 + + +extern divline_t trace; + + +doom_boolean P_PathTraverse(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2, int flags, doom_boolean(*trav) (intercept_t*)); +void P_UnsetThingPosition(mobj_t* thing); +void P_SetThingPosition(mobj_t* thing); + + +// +// P_MAP +// + +// If "floatok" doom_true, move would be ok +// if within "tmfloorz - tmceilingz". +extern doom_boolean floatok; +extern fixed_t tmfloorz; +extern fixed_t tmceilingz; + +extern line_t* ceilingline; + + +doom_boolean P_CheckPosition(mobj_t* thing, fixed_t x, fixed_t y); +doom_boolean P_TryMove(mobj_t* thing, fixed_t x, fixed_t y); +doom_boolean P_TeleportMove(mobj_t* thing, fixed_t x, fixed_t y); +void P_SlideMove(mobj_t* mo); +doom_boolean P_CheckSight(mobj_t* t1, mobj_t* t2); +void P_UseLines(player_t* player); +doom_boolean P_ChangeSector(sector_t* sector, doom_boolean crunch); + + +extern mobj_t* linetarget; // who got hit (or 0) + + +fixed_t P_AimLineAttack(mobj_t* t1, angle_t angle, fixed_t distance); +void P_LineAttack(mobj_t* t1, angle_t angle, fixed_t distance, fixed_t slope, int damage); +void P_RadiusAttack(mobj_t* spot, mobj_t* source, int damage); + + +// +// P_SETUP +// +extern byte* rejectmatrix; // for fast sight rejection +extern short* blockmaplump; // offsets in blockmap are from here +extern short* blockmap; +extern int bmapwidth; +extern int bmapheight; // in mapblocks +extern fixed_t bmaporgx; +extern fixed_t bmaporgy; // origin of block map +extern mobj_t** blocklinks; // for thing chains + + +// +// P_INTER +// +extern int maxammo[NUMAMMO]; +extern int clipammo[NUMAMMO]; + + +void P_TouchSpecialThing(mobj_t* special, mobj_t* toucher); +void P_DamageMobj(mobj_t* target, mobj_t* inflictor, mobj_t* source, int damage); + + +// +// P_SPEC +// +//#include "p_spec.h" + + +#endif // __P_LOCAL__ + + +#ifndef __STLIB__ +#define __STLIB__ + + +// We are referring to patches. +//#include "r_defs.h" + + +// +// Background and foreground screen numbers +// +#define STLIB_BG 4 +#define STLIB_FG 0 + + +// +// Typedefs of widgets +// + +// Number widget +typedef struct +{ + // upper right-hand corner + // of the number (right-justified) + int x; + int y; + + // max # of digits in number + int width; + + // last number value + int oldnum; + + // pointer to current value + int* num; + + // pointer to doom_boolean stating + // whether to update number + doom_boolean* on; + + // list of patches for 0-9 + patch_t** p; + + // user data + int data; +} st_number_t; + + +// Percent widget ("child" of number widget, +// or, more precisely, contains a number widget.) +typedef struct +{ + // number information + st_number_t n; + + // percent sign graphic + patch_t* p; +} st_percent_t; + + +// Multiple Icon widget +typedef struct +{ + // center-justified location of icons + int x; + int y; + + // last icon number + int oldinum; + + // pointer to current icon + int* inum; + + // pointer to doom_boolean stating + // whether to update icon + doom_boolean* on; + + // list of icons + patch_t** p; + + // user data + int data; +} st_multicon_t; + + +// Binary Icon widget +typedef struct +{ + // center-justified location of icon + int x; + int y; + + // last icon value + int oldval; + + // pointer to current icon status + doom_boolean* val; + + // pointer to doom_boolean + // stating whether to update icon + doom_boolean* on; + + + patch_t* p; // icon + int data; // user data + +} st_binicon_t; + + +// +// Widget creation, access, and update routines +// + +// Initializes widget library. +// More precisely, initialize STMINUS, +// everything else is done somewhere else. +// +void STlib_init(void); + +// Number widget routines +void STlib_initNum(st_number_t* n, + int x, + int y, + patch_t** pl, + int* num, + doom_boolean* on, + int width); + +void STlib_updateNum(st_number_t* n, doom_boolean refresh); + +// Percent widget routines +void STlib_initPercent(st_percent_t* p, + int x, + int y, + patch_t** pl, + int* num, + doom_boolean* on, + patch_t* percent); + +void STlib_updatePercent(st_percent_t* per, int refresh); + +// Multiple Icon widget routines +void STlib_initMultIcon(st_multicon_t* mi, + int x, + int y, + patch_t** il, + int* inum, + doom_boolean* on); + +void STlib_updateMultIcon(st_multicon_t* mi, doom_boolean refresh); + +// Binary Icon widget routines +void STlib_initBinIcon(st_binicon_t* b, + int x, + int y, + patch_t* i, + doom_boolean* val, + doom_boolean* on); + +void STlib_updateBinIcon(st_binicon_t* bi, doom_boolean refresh); + +#endif + + +#ifndef __V_VIDEO__ +#define __V_VIDEO__ + +//#include "doomtype.h" +//#include "doomdef.h" +//#include "r_data.h" // Needed because we are refering to patches. + +// +// VIDEO +// + +#define CENTERY (SCREENHEIGHT / 2) + + +// Screen 0 is the screen updated by I_Update screen. +// Screen 1 is an extra buffer. +extern byte* screens[5]; +extern int dirtybox[4]; +extern byte gammatable[5][256]; +extern int usegamma; + + +// Allocates buffer screens, call before R_Init. +void V_Init(void); + +void V_CopyRect(int srcx, + int srcy, + int srcscrn, + int width, + int height, + int destx, + int desty, + int destscrn); + +void V_DrawPatch(int x, + int y, + int scrn, + patch_t* patch); + +void V_DrawPatchDirect(int x, + int y, + int scrn, + patch_t* patch); + +void V_DrawPatchRectDirect(int x, int y, int scrn, patch_t* patch, int src_x, int src_w); + +// Draw a linear block of pixels into the view buffer. +void V_DrawBlock(int x, + int y, + int scrn, + int width, + int height, + byte* src); + +// Reads a linear block of pixels into the view buffer. +void V_GetBlock(int x, + int y, + int scrn, + int width, + int height, + byte* dest); + +void V_MarkRect(int x, + int y, + int width, + int height); + +#endif + + +#ifndef __W_WAD__ +#define __W_WAD__ + + +// +// TYPES +// +typedef struct +{ + // Should be "IWAD" or "PWAD". + char identification[4]; + int numlumps; + int infotableofs; +} wadinfo_t; + + +typedef struct +{ + int filepos; + int size; + char name[8]; +} filelump_t; + + +// +// WADFILE I/O related stuff. +// +typedef struct +{ + char name[8]; + void* handle; + int position; + int size; +} lumpinfo_t; + + +extern void** lumpcache; +extern lumpinfo_t* lumpinfo; +extern int numlumps; + +void W_InitMultipleFiles(char** filenames); +void W_Reload(void); + +int W_CheckNumForName(char* name); +int W_GetNumForName(char* name); + +int W_LumpLength(int lump); +void W_ReadLump(int lump, void* dest); + +void* W_CacheLumpNum(int lump, int tag); +void* W_CacheLumpName(char* name, int tag); + + +#endif + + +#ifndef __WI_STUFF__ +#define __WI_STUFF__ + +//#include "doomdef.h" + +// States for the intermission +typedef enum +{ + NoState = -1, + StatCount, + ShowNextLoc +} stateenum_t; + +// Called by main loop, animate the intermission. +void WI_Ticker(void); + +// Called by main loop, +// draws the intermission directly into the screen buffer. +void WI_Drawer(void); + +// Setup for an intermission screen. +void WI_Start(wbstartstruct_t* wbstartstruct); + +#endif + + +#ifndef __Z_ZONE__ +#define __Z_ZONE__ + + + + +// +// ZONE MEMORY +// PU - purge tags. +// Tags < 100 are not overwritten until freed. +#define PU_STATIC 1 // static entire execution time +#define PU_SOUND 2 // static while playing +#define PU_MUSIC 3 // static while playing +#define PU_DAVE 4 // anything else Dave wants static +#define PU_LEVEL 50 // static until level exited +#define PU_LEVSPEC 51 // a special thinker in a level +// Tags >= 100 are purgable whenever needed. +#define PU_PURGELEVEL 100 +#define PU_CACHE 101 + + +void Z_Init(void); +void* Z_Malloc(int size, int tag, void* ptr); +void Z_Free(void* ptr); +void Z_FreeTags(int lowtag, int hightag); +void Z_DumpHeap(int lowtag, int hightag); +void Z_FileDumpHeap(void* f); +void Z_CheckHeap(void); +void Z_ChangeTag2(void* ptr, int tag); +int Z_FreeMemory(void); + + +typedef struct memblock_s +{ + int size; // including the header and possibly tiny fragments + void** user; // 0 if a free block + int tag; // purgelevel + int id; // should be ZONEID + struct memblock_s* next; + struct memblock_s* prev; +} memblock_t; + +// +// This is used to get the local FILE:LINE info from CPP +// prior to really call the function in question. +// +#define Z_ChangeTag(p,t) \ +{ \ + if (( (memblock_t *)( (byte *)(p) - sizeof(memblock_t)))->id!=0x1d4a11) \ + { \ + /*I_Error("Error: Z_CT at "__FILE__":%i",__LINE__);*/ \ + char buf[260]; \ + doom_strcpy(buf, "Error: Z_CT at " __FILE__ ":"); \ + doom_concat(buf, doom_itoa(__LINE__, 10)); \ + I_Error(buf); \ + } \ + Z_ChangeTag2(p,t); \ +}; + + +#endif + + + +#if defined(DOOM_IMPLEMENTATION) +#if defined(WIN32) +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS +#endif +#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS +#define _WINSOCK_DEPRECATED_NO_WARNINGS +#endif +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE +#endif +#ifndef _SCL_SECURE_NO_WARNINGS +#define _SCL_SECURE_NO_WARNINGS +#endif +#endif + +//#include "DOOM.h" + +//#include "d_main.h" +//#include "doomdef.h" +//#include "doomtype.h" +//#include "i_system.h" +//#include "m_argv.h" +//#include "m_misc.h" + + +extern byte* screens[5]; +extern unsigned char screen_palette[256 * 3]; +extern doom_boolean is_wiping_screen; +extern default_t defaults[]; +extern int numdefaults; +extern signed short mixbuffer[2048]; + + +static unsigned char* screen_buffer = 0; +static unsigned char* final_screen_buffer = 0; +static int last_update_time = 0; +static int button_states[3] = { 0 }; +static char itoa_buf[20]; + + +char error_buf[260]; +int doom_flags = 0; +doom_print_fn doom_print = 0; +doom_malloc_fn doom_malloc = 0; +doom_free_fn doom_free = 0; +doom_open_fn doom_open = 0; +doom_close_fn doom_close = 0; +doom_read_fn doom_read = 0; +doom_write_fn doom_write = 0; +doom_seek_fn doom_seek = 0; +doom_tell_fn doom_tell = 0; +doom_eof_fn doom_eof = 0; +doom_gettime_fn doom_gettime = 0; +doom_exit_fn doom_exit = 0; +doom_getenv_fn doom_getenv = 0; + + +void D_DoomLoop(void); +void D_UpdateWipe(void); +void I_UpdateSound(); +unsigned long I_TickSong(); + + +#if defined(DOOM_IMPLEMENT_PRINT) +#include +static void doom_print_impl(const char* str) +{ + printf("%s", str); +} +#else +static void doom_print_impl(const char* str) {} +#endif + +#if defined(DOOM_IMPLEMENT_MALLOC) +#include +static void* doom_malloc_impl(int size) +{ + return malloc((size_t)size); +} +static void doom_free_impl(void* ptr) +{ + free(ptr); +} +#else +static void* doom_malloc_impl(int size) { return 0; } +static void doom_free_impl(void* ptr) {} +#endif + + +#if defined(DOOM_IMPLEMENT_FILE_IO) +#include +void* doom_open_impl(const char* filename, const char* mode) +{ + return fopen(filename, mode); +} +void doom_close_impl(void* handle) +{ + fclose((FILE*)handle); +} +int doom_read_impl(void* handle, void *buf, int count) +{ + return (int)fread(buf, 1, count, (FILE*)handle); +} +int doom_write_impl(void* handle, const void *buf, int count) +{ + return (int)fwrite(buf, 1, count, (FILE*)handle); +} +int doom_seek_impl(void* handle, int offset, doom_seek_t origin) +{ + return fseek((FILE*)handle, offset, origin); +} +int doom_tell_impl(void* handle) +{ + return (int)ftell((FILE*)handle); +} +int doom_eof_impl(void* handle) +{ + return feof((FILE*)handle); +} +#else +void* doom_open_impl(const char* filename, const char* mode) +{ + return 0; +} +void doom_close_impl(void* handle) {} +int doom_read_impl(void* handle, void *buf, int count) +{ + return -1; +} +int doom_write_impl(void* handle, const void *buf, int count) +{ + return -1; +} +int doom_seek_impl(void* handle, int offset, doom_seek_t origin) +{ + return -1; +} +int doom_tell_impl(void* handle) +{ + return -1; +} +int doom_eof_impl(void* handle) +{ + return 1; +} +#endif + + +#if defined(DOOM_IMPLEMENT_GETTIME) +#if defined(WIN32) +#include +#else +#include +#endif +void doom_gettime_impl(int* sec, int* usec) +{ +#if defined(WIN32) + static const unsigned long long EPOCH = ((unsigned long long)116444736000000000ULL); + SYSTEMTIME system_time; + FILETIME file_time; + unsigned long long time; + GetSystemTime(&system_time); + SystemTimeToFileTime(&system_time, &file_time); + time = ((unsigned long long)file_time.dwLowDateTime); + time += ((unsigned long long)file_time.dwHighDateTime) << 32; + *sec = (int)((time - EPOCH) / 10000000L); + *usec = (int)(system_time.wMilliseconds * 1000); +#else + struct timeval tp; + +#ifdef __linux__ + gettimeofday(&tp, NULL); +#else + struct timezone tzp; + gettimeofday(&tp, &tzp); +#endif + + *sec = tp.tv_sec; + *usec = tp.tv_usec; +#endif +} +#else +void doom_gettime_impl(int* sec, int* usec) +{ + *sec = 0; + *usec = 0; +} +#endif + + +#if defined(DOOM_IMPLEMENT_EXIT) +#include +void doom_exit_impl(int code) +{ + exit(code); +} +#else +void doom_exit_impl(int code) {} +#endif + + +#if defined(DOOM_IMPLEMENT_GETENV) +#include +char* doom_getenv_impl(const char* var) +{ + return getenv(var); +} +#else +char* doom_getenv_impl(const char* var) { return 0; } +#endif + + +void doom_memset(void* ptr, int value, int num) +{ + unsigned char* p = (unsigned char*)ptr; + for (int i = 0; i < num; ++i, ++p) + { + *p = (unsigned char)value; + } +} + + +void* doom_memcpy(void* destination, const void* source, int num) +{ + unsigned char* dst = (unsigned char*)destination; + const unsigned char* src = (const unsigned char*)source; + + for (int i = 0; i < num; ++i, ++dst, ++src) + { + *dst = *src; + } + + return destination; +} + + +int doom_strlen(const char* str) +{ + int len = 0; + while (*str++) ++len; + return len; +} + + +char* doom_concat(char* dst, const char* src) +{ + char* ret = dst; + dst += doom_strlen(dst); + + while (*src) *dst++ = *src++; + *dst = *src; // \0 + + return ret; +} + + +char* doom_strcpy(char* dst, const char* src) +{ + char* ret = dst; + + while (*src) *dst++ = *src++; + *dst = *src; // \0 + + return ret; +} + + +char* doom_strncpy(char* dst, const char* src, int num) +{ + int i = 0; + + for (; i < num; ++i) + { + if (!src[i]) break; + dst[i] = src[i]; + } + + while (i < num) dst[i++] = '\0'; + + return dst; +} + + +int doom_strcmp(const char* str1, const char* str2) +{ + int ret = 0; + + while (!(ret = *(unsigned char*)str1 - *(unsigned char*) str2) && *str1) + ++str1, ++str2; + + if (ret < 0) + ret = -1; + else if (ret > 0) + ret = 1; + + return (ret); +} + + +int doom_strncmp(const char* str1, const char* str2, int n) +{ + int ret = 0; + int count = 1; + + while (!(ret = *(unsigned char*)str1 - *(unsigned char*) str2) && *str1 && count++ < n) + ++str1, ++str2; + + if (ret < 0) + ret = -1; + else if (ret > 0) + ret = 1; + + return (ret); +} + + +int doom_toupper(int c) +{ + if (c >= 'a' && c <= 'z') return c - 'a' + 'A'; + return c; +} + + +int doom_strcasecmp(const char* str1, const char* str2) +{ + int ret = 0; + + while (!(ret = doom_toupper(*(unsigned char*)str1) - doom_toupper(*(unsigned char*)str2)) && *str1) + ++str1, ++str2; + + if (ret < 0) + ret = -1; + else if (ret > 0) + ret = 1; + + return (ret); +} + + +int doom_strncasecmp(const char* str1, const char* str2, int n) +{ + int ret = 0; + int count = 1; + + while (!(ret = doom_toupper(*(unsigned char*)str1) - doom_toupper(*(unsigned char*)str2)) && *str1 && count++ < n) + ++str1, ++str2; + + if (ret < 0) + ret = -1; + else if (ret > 0) + ret = 1; + + return (ret); +} + + +int doom_atoi(const char* str) +{ + int i = 0; + int c; + + while ((c = *str++) != 0) + { + i *= 10; + i += c - '0'; + } + + return i; +} + + +int doom_atox(const char* str) +{ + int i = 0; + int c; + + while ((c = *str++) != 0) + { + i *= 16; + if (c >= '0' && c <= '9') + i += c - '0'; + else + i += c - 'A' + 10; + } + + return i; +} + + +const char* doom_itoa(int k, int radix) +{ + int i = k < 0 ? -k : k; + if (i == 0) + { + itoa_buf[0] = '0'; + itoa_buf[1] = '\0'; + return itoa_buf; + } + + int idx = k < 0 ? 1 : 0; + int j = i; + while (j) + { + j /= radix; + idx++; + } + itoa_buf[idx] = '\0'; + + if (radix == 10) + { + while (i) + { + itoa_buf[--idx] = '0' + (i % 10); + i /= 10; + } + } + else + { + while (i) + { + int k = (i & 0xF); + if (k >= 10) + itoa_buf[--idx] = 'A' + ((i & 0xF) - 10); + else + itoa_buf[--idx] = '0' + (i & 0xF); + i >>= 4; + } + } + + if (k < 0) itoa_buf[0] = '-'; + + return itoa_buf; +} + + +const char* doom_ctoa(char c) +{ + itoa_buf[0] = c; + itoa_buf[1] = '\0'; + return itoa_buf; +} + + +const char* doom_ptoa(void* p) +{ + int idx = 0; + unsigned long long i = (unsigned long long)p; + + itoa_buf[idx++] = '0'; + itoa_buf[idx++] = 'x'; + + while (i) + { + int k = (i & 0xF); + if (k >= 10) + itoa_buf[idx++] = 'A' + ((i & 0xF) - 10); + else + itoa_buf[idx++] = '0' + (i & 0xF); + i >>= 4; + } + + itoa_buf[idx] = '\0'; + return itoa_buf; +} + + +int doom_fprint(void* handle, const char* str) +{ + return doom_write(handle, str, doom_strlen(str)); +} + + +static default_t* get_default(const char* name) +{ + for (int i = 0; i < numdefaults; ++i) + { + if (doom_strcmp(defaults[i].name, name) == 0) return &defaults[i]; + } + return 0; +} + + +void doom_set_resolution(int width, int height) +{ + if (width <= 0 || height <= 0) return; + // SCREENWIDTH = width; + // SCREENHEIGHT = height; +} + + +void doom_set_default_int(const char* name, int value) +{ + default_t* def = get_default(name); + if (!def) return; + def->defaultvalue = value; +} + + +void doom_set_default_string(const char* name, const char* value) +{ + default_t* def = get_default(name); + if (!def) return; + def->default_text_value = (char*)value; +} + + +void doom_set_print(doom_print_fn print_fn) +{ + doom_print = print_fn; +} + + +void doom_set_malloc(doom_malloc_fn malloc_fn, doom_free_fn free_fn) +{ + doom_malloc = malloc_fn; + doom_free = free_fn; +} + + +void doom_set_file_io(doom_open_fn open_fn, + doom_close_fn close_fn, + doom_read_fn read_fn, + doom_write_fn write_fn, + doom_seek_fn seek_fn, + doom_tell_fn tell_fn, + doom_eof_fn eof_fn) +{ + doom_open = open_fn; + doom_close = close_fn; + doom_read = read_fn; + doom_write = write_fn; + doom_seek = seek_fn; + doom_tell = tell_fn; + doom_eof = eof_fn; +} + + +void doom_set_gettime(doom_gettime_fn gettime_fn) +{ + doom_gettime = gettime_fn; +} + + +void doom_set_exit(doom_exit_fn exit_fn) +{ + doom_exit = exit_fn; +} + + +void doom_set_getenv(doom_getenv_fn getenv_fn) +{ + doom_getenv = getenv_fn; +} + + +void doom_init(int argc, const char** argv, int flags) +{ + if (!doom_print) doom_print = doom_print_impl; + if (!doom_malloc) doom_malloc = doom_malloc_impl; + if (!doom_free) doom_free = doom_free_impl; + if (!doom_open) doom_open = doom_open_impl; + if (!doom_close) doom_close = doom_close_impl; + if (!doom_read) doom_read = doom_read_impl; + if (!doom_write) doom_write = doom_write_impl; + if (!doom_seek) doom_seek = doom_seek_impl; + if (!doom_tell) doom_tell = doom_tell_impl; + if (!doom_eof) doom_eof = doom_eof_impl; + if (!doom_gettime) doom_gettime = doom_gettime_impl; + if (!doom_exit) doom_exit = doom_exit_impl; + if (!doom_getenv) doom_getenv = doom_getenv_impl; + + screen_buffer = (unsigned char*)doom_malloc(SCREENWIDTH * SCREENHEIGHT); + final_screen_buffer = (unsigned char*)doom_malloc(SCREENWIDTH * SCREENHEIGHT * 4); + last_update_time = I_GetTime(); + + myargc = argc; + myargv = (char**)argv; // unsafe my ass + doom_flags = flags; + + D_DoomMain(); +} + + +void doom_update() +{ + int now = I_GetTime(); + int delta_time = now - last_update_time; + + while (delta_time-- > 0) + { + if (is_wiping_screen) + D_UpdateWipe(); + else + D_DoomLoop(); + } + + last_update_time = now; +} + + +void doom_force_update() +{ + if (is_wiping_screen) + D_UpdateWipe(); + else + D_DoomLoop(); +} + + +const unsigned char* doom_get_framebuffer(int channels) +{ + int i, len; + + doom_memcpy(screen_buffer, screens[0], SCREENWIDTH * SCREENHEIGHT); + + extern doom_boolean menuactive; + extern gamestate_t gamestate; + extern doom_boolean automapactive; + extern int crosshair; + + // Draw crosshair + if (crosshair && + !menuactive && + gamestate == GS_LEVEL && + !automapactive) + { + int y; + extern int setblocks; + if (setblocks == 11) y = SCREENHEIGHT / 2 + 8; + else y = SCREENHEIGHT / 2 - 8; + for (i = 0; i < 2; ++i) + { + screen_buffer[SCREENWIDTH / 2 - 2 - i + y * SCREENWIDTH] = 4; + screen_buffer[SCREENWIDTH / 2 + 2 + i + y * SCREENWIDTH] = 4; + } + for (i = 0; i < 2; ++i) + { + screen_buffer[SCREENWIDTH / 2 + (y - 2 - i) * SCREENWIDTH] = 4; + screen_buffer[SCREENWIDTH / 2 + (y + 2 + i) * SCREENWIDTH] = 4; + } + } + + if (channels == 1) + { + return screen_buffer; + } + else if (channels == 3) + { + for (i = 0, len = SCREENWIDTH * SCREENHEIGHT; i < len; ++i) + { + int k = i * 3; + int kpal = screen_buffer[i] * 3; + final_screen_buffer[k + 0] = screen_palette[kpal + 0]; + final_screen_buffer[k + 1] = screen_palette[kpal + 1]; + final_screen_buffer[k + 2] = screen_palette[kpal + 2]; + } + return final_screen_buffer; + } + else if (channels == 4) + { + for (i = 0, len = SCREENWIDTH * SCREENHEIGHT; i < len; ++i) + { + int k = i * 4; + int kpal = screen_buffer[i] * 3; + final_screen_buffer[k + 0] = screen_palette[kpal + 0]; + final_screen_buffer[k + 1] = screen_palette[kpal + 1]; + final_screen_buffer[k + 2] = screen_palette[kpal + 2]; + final_screen_buffer[k + 3] = 255; + } + return final_screen_buffer; + } + else + { + return 0; + } +} + + +unsigned long doom_tick_midi() +{ + return I_TickSong(); +} + + +short* doom_get_sound_buffer() +{ + I_UpdateSound(); + return mixbuffer; +} + + +void doom_key_down(doom_key_t key) +{ + event_t event; + event.type = ev_keydown; + event.data1 = (int)key; + D_PostEvent(&event); +} + + +void doom_key_up(doom_key_t key) +{ + event_t event; + event.type = ev_keyup; + event.data1 = (int)key; + D_PostEvent(&event); +} + + +void doom_button_down(doom_button_t button) +{ + button_states[button] = 1; + + event_t event; + event.type = ev_mouse; + event.data1 = + (button_states[0]) | + (button_states[1] ? 2 : 0) | + (button_states[2] ? 4 : 0); + event.data2 = event.data3 = 0; + D_PostEvent(&event); +} + + +void doom_button_up(doom_button_t button) +{ + button_states[button] = 0; + + event_t event; + event.type = ev_mouse; + event.data1 = + (button_states[0]) | + (button_states[1] ? 2 : 0) | + (button_states[2] ? 4 : 0); + + event.data1 = + event.data1 + ^ (button_states[0] ? 1 : 0) + ^ (button_states[1] ? 2 : 0) + ^ (button_states[2] ? 4 : 0); + + event.data2 = event.data3 = 0; + D_PostEvent(&event); +} + + +void doom_mouse_move(int delta_x, int delta_y) +{ + event_t event; + + event.type = ev_mouse; + event.data1 = + (button_states[0]) | + (button_states[1] ? 2 : 0) | + (button_states[2] ? 4 : 0); + event.data2 = delta_x; + event.data3 = -delta_y; + + if (event.data2 || event.data3) + { + D_PostEvent(&event); + } +} +#define REDS (256-5*16) +#define REDRANGE 16 +#define BLUES (256-4*16+8) +#define BLUERANGE 8 +#define GREENS (7*16) +#define GREENRANGE 16 +#define GRAYS (6*16) +#define GRAYSRANGE 16 +#define BROWNS (4*16) +#define BROWNRANGE 16 +#define YELLOWS (256-32+7) +#define YELLOWRANGE 1 +#define BLACK 0 +#define WHITE (256-47) + +// Automap colors +#define BACKGROUND BLACK +#define YOURCOLORS WHITE +#define YOURRANGE 0 +#define WALLCOLORS REDS +#define WALLRANGE REDRANGE +#define TSWALLCOLORS GRAYS +#define TSWALLRANGE GRAYSRANGE +#define FDWALLCOLORS BROWNS +#define FDWALLRANGE BROWNRANGE +#define CDWALLCOLORS YELLOWS +#define CDWALLRANGE YELLOWRANGE +#define THINGCOLORS GREENS +#define THINGRANGE GREENRANGE +#define SECRETWALLCOLORS WALLCOLORS +#define SECRETWALLRANGE WALLRANGE +#define GRIDCOLORS (GRAYS + GRAYSRANGE/2) +#define GRIDRANGE 0 +#define XHAIRCOLORS GRAYS + +// drawing stuff +#define FB 0 + +#define AM_PANDOWNKEY KEY_DOWNARROW +#define AM_PANUPKEY KEY_UPARROW +#define AM_PANRIGHTKEY KEY_RIGHTARROW +#define AM_PANLEFTKEY KEY_LEFTARROW +#define AM_ZOOMINKEY '=' +#define AM_ZOOMOUTKEY '-' +#define AM_STARTKEY KEY_TAB +#define AM_ENDKEY KEY_TAB +#define AM_GOBIGKEY '0' +#define AM_FOLLOWKEY 'f' +#define AM_GRIDKEY 'g' +#define AM_MARKKEY 'm' +#define AM_CLEARMARKKEY 'c' + +#define AM_NUMMARKPOINTS 10 + +// scale on entry +#define INITSCALEMTOF (.2*FRACUNIT) +// how much the automap moves window per tic in frame-buffer coordinates +// moves 140 pixels in 1 second +#define F_PANINC 4 +// how much zoom-in per tic +// goes to 2x in 1 second +#define M_ZOOMIN ((int) (1.02*FRACUNIT)) +// how much zoom-out per tic +// pulls out to 0.5x in 1 second +#define M_ZOOMOUT ((int) (FRACUNIT/1.02)) + +// translates between frame-buffer and map distances +#define FTOM(x) FixedMul(((x)<<16),scale_ftom) +#define MTOF(x) (FixedMul((x),scale_mtof)>>16) +// translates between frame-buffer and map coordinates +#define CXMTOF(x) (f_x + MTOF((x)-m_x)) +#define CYMTOF(y) (f_y + (f_h - MTOF((y)-m_y))) + +// the following is crap +#define LINE_NEVERSEE ML_DONTDRAW + + +typedef struct +{ + int x, y; +} fpoint_t; + + +typedef struct +{ + fpoint_t a, b; +} fline_t; + + +typedef struct +{ + fixed_t x, y; +} mpoint_t; + + +typedef struct +{ + mpoint_t a, b; +} mline_t; + + +typedef struct +{ + fixed_t slp, islp; +} islope_t; + + +// +// The vector graphics for the automap. +// A line drawing of the player pointing right, +// starting from the middle. +// +#define R ((8*PLAYERRADIUS)/7) +mline_t player_arrow[] = { + { { -R + R / 8, 0 }, { R, 0 } }, // ----- + { { R, 0 }, { R - R / 2, R / 4 } }, // -----> + { { R, 0 }, { R - R / 2, -R / 4 } }, + { { -R + R / 8, 0 }, { -R - R / 8, R / 4 } }, // >----> + { { -R + R / 8, 0 }, { -R - R / 8, -R / 4 } }, + { { -R + 3 * R / 8, 0 }, { -R + R / 8, R / 4 } }, // >>---> + { { -R + 3 * R / 8, 0 }, { -R + R / 8, -R / 4 } } +}; +#undef R +#define NUMPLYRLINES (sizeof(player_arrow)/sizeof(mline_t)) + +#define R ((8*PLAYERRADIUS)/7) +mline_t cheat_player_arrow[] = { + { { -R + R / 8, 0 }, { R, 0 } }, // ----- + { { R, 0 }, { R - R / 2, R / 6 } }, // -----> + { { R, 0 }, { R - R / 2, -R / 6 } }, + { { -R + R / 8, 0 }, { -R - R / 8, R / 6 } }, // >-----> + { { -R + R / 8, 0 }, { -R - R / 8, -R / 6 } }, + { { -R + 3 * R / 8, 0 }, { -R + R / 8, R / 6 } }, // >>-----> + { { -R + 3 * R / 8, 0 }, { -R + R / 8, -R / 6 } }, + { { -R / 2, 0 }, { -R / 2, -R / 6 } }, // >>-d---> + { { -R / 2, -R / 6 }, { -R / 2 + R / 6, -R / 6 } }, + { { -R / 2 + R / 6, -R / 6 }, { -R / 2 + R / 6, R / 4 } }, + { { -R / 6, 0 }, { -R / 6, -R / 6 } }, // >>-dd--> + { { -R / 6, -R / 6 }, { 0, -R / 6 } }, + { { 0, -R / 6 }, { 0, R / 4 } }, + { { R / 6, R / 4 }, { R / 6, -R / 7 } }, // >>-ddt-> + { { R / 6, -R / 7 }, { R / 6 + R / 32, -R / 7 - R / 32 } }, + { { R / 6 + R / 32, -R / 7 - R / 32 }, { R / 6 + R / 10, -R / 7 } } +}; +#undef R +#define NUMCHEATPLYRLINES (sizeof(cheat_player_arrow)/sizeof(mline_t)) + +#define R (FRACUNIT) +mline_t triangle_guy[] = { + { { (fixed_t)(-.867 * R), (fixed_t)(-.5 * R) }, { (fixed_t)(.867 * R), (fixed_t)(-.5 * R) } }, + { { (fixed_t)(.867 * R), (fixed_t)(-.5 * R) } , { 0, R } }, + { { 0, R }, { (fixed_t)(-.867 * R), (fixed_t)(-.5 * R) } } +}; +#undef R +#define NUMTRIANGLEGUYLINES (sizeof(triangle_guy)/sizeof(mline_t)) + +#define R (FRACUNIT) +mline_t thintriangle_guy[] = { + { { (fixed_t)(-.5 * R), (fixed_t)(-.7 * R) }, { R, 0 } }, + { { R, 0 }, { (fixed_t)(-.5 * R), (fixed_t)(.7 * R) } }, + { { (fixed_t)(-.5 * R), (fixed_t)(.7 * R) }, { (fixed_t)(-.5 * R), (fixed_t)(-.7 * R) } } +}; +#undef R +#define NUMTHINTRIANGLEGUYLINES (sizeof(thintriangle_guy)/sizeof(mline_t)) + + +static int cheating = 0; +static int grid = 0; + +static int leveljuststarted = 1; // kluge until AM_LevelInit() is called + +static int finit_width = SCREENWIDTH; +static int finit_height = SCREENHEIGHT - 32; + +// location of window on screen +static int f_x; +static int f_y; + +// size of window on screen +static int f_w; +static int f_h; + +static int lightlev; // used for funky strobing effect +static byte* fb; // pseudo-frame buffer +static int amclock; + +static mpoint_t m_paninc; // how far the window pans each tic (map coords) +static fixed_t mtof_zoommul; // how far the window zooms in each tic (map coords) +static fixed_t ftom_zoommul; // how far the window zooms in each tic (fb coords) + +static fixed_t m_x, m_y; // LL x,y where the window is on the map (map coords) +static fixed_t m_x2, m_y2; // UR x,y where the window is on the map (map coords) + +// +// width/height of window on map (map coords) +// +static fixed_t m_w; +static fixed_t m_h; + +// based on level size +static fixed_t min_x; +static fixed_t min_y; +static fixed_t max_x; +static fixed_t max_y; + +static fixed_t max_w; // max_x-min_x, +static fixed_t max_h; // max_y-min_y + +// based on player size +static fixed_t min_w; +static fixed_t min_h; + +static fixed_t min_scale_mtof; // used to tell when to stop zooming out +static fixed_t max_scale_mtof; // used to tell when to stop zooming in + +// old stuff for recovery later +static fixed_t old_m_w, old_m_h; +static fixed_t old_m_x, old_m_y; + +// old location used by the Follower routine +static mpoint_t f_oldloc; + +// used by MTOF to scale from map-to-frame-buffer coords +static fixed_t scale_mtof = (fixed_t)INITSCALEMTOF; +// used by FTOM to scale from frame-buffer-to-map coords (=1/scale_mtof) +static fixed_t scale_ftom; + +static player_t* plr; // the player represented by an arrow + +static patch_t* marknums[10]; // numbers used for marking by the automap +static mpoint_t markpoints[AM_NUMMARKPOINTS]; // where the points are +static int markpointnum = 0; // next point to be assigned + +static int followplayer = 1; // specifies whether to follow the player around + +static unsigned char cheat_amap_seq[] = { 0xb2, 0x26, 0x26, 0x2e, 0xff }; +static cheatseq_t cheat_amap = { cheat_amap_seq, 0 }; + +static doom_boolean stopped = doom_true; + + +doom_boolean automapactive = doom_false; + + +extern doom_boolean viewactive; + + +void V_MarkRect(int x, int y, int width, int height); + + +// Calculates the slope and slope according to the x-axis of a line +// segment in map coordinates (with the upright y-axis n' all) so +// that it can be used with the brain-dead drawing stuff. +void AM_getIslope(mline_t* ml, islope_t* is) +{ + int dx, dy; + + dy = ml->a.y - ml->b.y; + dx = ml->b.x - ml->a.x; + if (!dy) is->islp = (dx < 0 ? -DOOM_MAXINT : DOOM_MAXINT); + else is->islp = FixedDiv(dx, dy); + if (!dx) is->slp = (dy < 0 ? -DOOM_MAXINT : DOOM_MAXINT); + else is->slp = FixedDiv(dy, dx); +} + + +// +// +// +void AM_activateNewScale(void) +{ + m_x += m_w / 2; + m_y += m_h / 2; + m_w = FTOM(f_w); + m_h = FTOM(f_h); + m_x -= m_w / 2; + m_y -= m_h / 2; + m_x2 = m_x + m_w; + m_y2 = m_y + m_h; +} + + +// +// +// +void AM_saveScaleAndLoc(void) +{ + old_m_x = m_x; + old_m_y = m_y; + old_m_w = m_w; + old_m_h = m_h; +} + + +// +// +// +void AM_restoreScaleAndLoc(void) +{ + m_w = old_m_w; + m_h = old_m_h; + if (!followplayer) + { + m_x = old_m_x; + m_y = old_m_y; + } + else + { + m_x = plr->mo->x - m_w / 2; + m_y = plr->mo->y - m_h / 2; + } + m_x2 = m_x + m_w; + m_y2 = m_y + m_h; + + // Change the scaling multipliers + scale_mtof = FixedDiv(f_w << FRACBITS, m_w); + scale_ftom = FixedDiv(FRACUNIT, scale_mtof); +} + + +// +// adds a marker at the current location +// +void AM_addMark(void) +{ + markpoints[markpointnum].x = m_x + m_w / 2; + markpoints[markpointnum].y = m_y + m_h / 2; + markpointnum = (markpointnum + 1) % AM_NUMMARKPOINTS; +} + + +// +// Determines bounding box of all vertices, +// sets global variables controlling zoom range. +// +void AM_findMinMaxBoundaries(void) +{ + int i; + fixed_t a; + fixed_t b; + + min_x = min_y = DOOM_MAXINT; + max_x = max_y = -DOOM_MAXINT; + + for (i = 0; i < numvertexes; i++) + { + if (vertexes[i].x < min_x) + min_x = vertexes[i].x; + else if (vertexes[i].x > max_x) + max_x = vertexes[i].x; + + if (vertexes[i].y < min_y) + min_y = vertexes[i].y; + else if (vertexes[i].y > max_y) + max_y = vertexes[i].y; + } + + max_w = max_x - min_x; + max_h = max_y - min_y; + + min_w = 2 * PLAYERRADIUS; // const? never changed? + min_h = 2 * PLAYERRADIUS; + + a = FixedDiv(f_w << FRACBITS, max_w); + b = FixedDiv(f_h << FRACBITS, max_h); + + min_scale_mtof = a < b ? a : b; + max_scale_mtof = FixedDiv(f_h << FRACBITS, 2 * PLAYERRADIUS); +} + + +// +// +// +void AM_changeWindowLoc(void) +{ + if (m_paninc.x || m_paninc.y) + { + followplayer = 0; + f_oldloc.x = DOOM_MAXINT; + } + + m_x += m_paninc.x; + m_y += m_paninc.y; + + if (m_x + m_w / 2 > max_x) + m_x = max_x - m_w / 2; + else if (m_x + m_w / 2 < min_x) + m_x = min_x - m_w / 2; + + if (m_y + m_h / 2 > max_y) + m_y = max_y - m_h / 2; + else if (m_y + m_h / 2 < min_y) + m_y = min_y - m_h / 2; + + m_x2 = m_x + m_w; + m_y2 = m_y + m_h; +} + + +// +// +// +void AM_initVariables(void) +{ + int pnum; + static event_t st_notify = { ev_keyup, AM_MSGENTERED }; + + automapactive = doom_true; + fb = screens[0]; + + f_oldloc.x = DOOM_MAXINT; + amclock = 0; + lightlev = 0; + + m_paninc.x = m_paninc.y = 0; + ftom_zoommul = FRACUNIT; + mtof_zoommul = FRACUNIT; + + m_w = FTOM(f_w); + m_h = FTOM(f_h); + + // find player to center on initially + if (!playeringame[pnum = consoleplayer]) + for (pnum = 0; pnum < MAXPLAYERS; pnum++) + if (playeringame[pnum]) + break; + + plr = &players[pnum]; + m_x = plr->mo->x - m_w / 2; + m_y = plr->mo->y - m_h / 2; + AM_changeWindowLoc(); + + // for saving & restoring + old_m_x = m_x; + old_m_y = m_y; + old_m_w = m_w; + old_m_h = m_h; + + // inform the status bar of the change + ST_Responder(&st_notify); +} + + +// +// +// +void AM_loadPics(void) +{ + int i; + char namebuf[9]; + + for (i = 0; i < 10; i++) + { + doom_concat(doom_strcpy(namebuf, "AMMNUM"), doom_itoa(i, 10)); + marknums[i] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + } +} + + +void AM_unloadPics(void) +{ + int i; + + for (i = 0; i < 10; i++) + Z_ChangeTag(marknums[i], PU_CACHE); +} + + +void AM_clearMarks(void) +{ + int i; + + for (i = 0; i < AM_NUMMARKPOINTS; i++) + markpoints[i].x = -1; // means empty + markpointnum = 0; +} + + +// +// should be called at the start of every level +// right now, i figure it out myself +// +void AM_LevelInit(void) +{ + leveljuststarted = 0; + + f_x = f_y = 0; + f_w = finit_width; + f_h = finit_height; + + AM_clearMarks(); + + AM_findMinMaxBoundaries(); + scale_mtof = FixedDiv(min_scale_mtof, (int)(0.7 * FRACUNIT)); + if (scale_mtof > max_scale_mtof) + scale_mtof = min_scale_mtof; + scale_ftom = FixedDiv(FRACUNIT, scale_mtof); +} + + +// +// +// +void AM_Stop(void) +{ + static event_t st_notify = { (evtype_t)0, ev_keyup, AM_MSGEXITED }; + + AM_unloadPics(); + automapactive = doom_false; + ST_Responder(&st_notify); + stopped = doom_true; +} + + +// +// +// +void AM_Start(void) +{ + static int lastlevel = -1, lastepisode = -1; + + if (!stopped) AM_Stop(); + stopped = doom_false; + if (lastlevel != gamemap || lastepisode != gameepisode) + { + AM_LevelInit(); + lastlevel = gamemap; + lastepisode = gameepisode; + } + AM_initVariables(); + AM_loadPics(); +} + + +// +// set the window scale to the maximum size +// +void AM_minOutWindowScale(void) +{ + scale_mtof = min_scale_mtof; + scale_ftom = FixedDiv(FRACUNIT, scale_mtof); + AM_activateNewScale(); +} + + +// +// set the window scale to the minimum size +// +void AM_maxOutWindowScale(void) +{ + scale_mtof = max_scale_mtof; + scale_ftom = FixedDiv(FRACUNIT, scale_mtof); + AM_activateNewScale(); +} + + +// +// Handle events (user inputs) in automap mode +// +doom_boolean AM_Responder(event_t* ev) +{ + int rc; + static int cheatstate = 0; + static int bigstate = 0; + static char buffer[20]; + + rc = doom_false; + + if (!automapactive) + { + if (ev->type == ev_keydown && ev->data1 == AM_STARTKEY) + { + AM_Start(); + viewactive = doom_false; + rc = doom_true; + } + } + + else if (ev->type == ev_keydown) + { + + rc = doom_true; + switch (ev->data1) + { + case AM_PANRIGHTKEY: // pan right + if (!followplayer) m_paninc.x = FTOM(F_PANINC); + else rc = doom_false; + break; + case AM_PANLEFTKEY: // pan left + if (!followplayer) m_paninc.x = -FTOM(F_PANINC); + else rc = doom_false; + break; + case AM_PANUPKEY: // pan up + if (!followplayer) m_paninc.y = FTOM(F_PANINC); + else rc = doom_false; + break; + case AM_PANDOWNKEY: // pan down + if (!followplayer) m_paninc.y = -FTOM(F_PANINC); + else rc = doom_false; + break; + case AM_ZOOMOUTKEY: // zoom out + mtof_zoommul = M_ZOOMOUT; + ftom_zoommul = M_ZOOMIN; + break; + case AM_ZOOMINKEY: // zoom in + mtof_zoommul = M_ZOOMIN; + ftom_zoommul = M_ZOOMOUT; + break; + case AM_ENDKEY: + bigstate = 0; + viewactive = doom_true; + AM_Stop(); + break; + case AM_GOBIGKEY: + bigstate = !bigstate; + if (bigstate) + { + AM_saveScaleAndLoc(); + AM_minOutWindowScale(); + } + else AM_restoreScaleAndLoc(); + break; + case AM_FOLLOWKEY: + followplayer = !followplayer; + f_oldloc.x = DOOM_MAXINT; + plr->message = followplayer ? (char*)AMSTR_FOLLOWON : (char*)AMSTR_FOLLOWOFF; + break; + case AM_GRIDKEY: + grid = !grid; + plr->message = grid ? (char*)AMSTR_GRIDON : (char*)AMSTR_GRIDOFF; + break; + case AM_MARKKEY: + doom_strcpy(buffer, AMSTR_MARKEDSPOT); + doom_concat(buffer, " "); + doom_concat(buffer, doom_itoa(markpointnum, 10)); + //doom_sprintf(buffer, "%s %d", AMSTR_MARKEDSPOT, markpointnum); + plr->message = buffer; + AM_addMark(); + break; + case AM_CLEARMARKKEY: + AM_clearMarks(); + plr->message = (char*)AMSTR_MARKSCLEARED; + break; + default: + cheatstate = 0; + rc = doom_false; + } + if (!deathmatch && cht_CheckCheat(&cheat_amap, ev->data1)) + { + rc = doom_false; + cheating = (cheating + 1) % 3; + } + } + + else if (ev->type == ev_keyup) + { + rc = doom_false; + switch (ev->data1) + { + case AM_PANRIGHTKEY: + if (!followplayer) m_paninc.x = 0; + break; + case AM_PANLEFTKEY: + if (!followplayer) m_paninc.x = 0; + break; + case AM_PANUPKEY: + if (!followplayer) m_paninc.y = 0; + break; + case AM_PANDOWNKEY: + if (!followplayer) m_paninc.y = 0; + break; + case AM_ZOOMOUTKEY: + case AM_ZOOMINKEY: + mtof_zoommul = FRACUNIT; + ftom_zoommul = FRACUNIT; + break; + } + } + + return rc; +} + + +// +// Zooming +// +void AM_changeWindowScale(void) +{ + + // Change the scaling multipliers + scale_mtof = FixedMul(scale_mtof, mtof_zoommul); + scale_ftom = FixedDiv(FRACUNIT, scale_mtof); + + if (scale_mtof < min_scale_mtof) + AM_minOutWindowScale(); + else if (scale_mtof > max_scale_mtof) + AM_maxOutWindowScale(); + else + AM_activateNewScale(); +} + + +// +// +// +void AM_doFollowPlayer(void) +{ + if (f_oldloc.x != plr->mo->x || f_oldloc.y != plr->mo->y) + { + m_x = FTOM(MTOF(plr->mo->x)) - m_w / 2; + m_y = FTOM(MTOF(plr->mo->y)) - m_h / 2; + m_x2 = m_x + m_w; + m_y2 = m_y + m_h; + f_oldloc.x = plr->mo->x; + f_oldloc.y = plr->mo->y; + } +} + + +// +// +// +void AM_updateLightLev(void) +{ + static int nexttic = 0; + //static int litelevels[] = { 0, 3, 5, 6, 6, 7, 7, 7 }; + static int litelevels[] = { 0, 4, 7, 10, 12, 14, 15, 15 }; + static int litelevelscnt = 0; + + // Change light level + if (amclock > nexttic) + { + lightlev = litelevels[litelevelscnt++]; + if (litelevelscnt == sizeof(litelevels) / sizeof(int)) litelevelscnt = 0; + nexttic = amclock + 6 - (amclock % 6); + } +} + + +// +// Updates on Game Tick +// +void AM_Ticker(void) +{ + if (!automapactive) + return; + + amclock++; + + if (followplayer) + AM_doFollowPlayer(); + + // Change the zoom if necessary + if (ftom_zoommul != FRACUNIT) + AM_changeWindowScale(); + + // Change x,y location + if (m_paninc.x || m_paninc.y) + AM_changeWindowLoc(); + + // Update light level + // AM_updateLightLev(); +} + + +// +// Clear automap frame buffer. +// +void AM_clearFB(int color) +{ + doom_memset(fb, color, f_w * f_h); +} + + +// +// Automap clipping of lines. +// +// Based on Cohen-Sutherland clipping algorithm but with a slightly +// faster reject and precalculated slopes. If the speed is needed, +// use a hash algorithm to handle the common cases. +// +doom_boolean AM_clipMline(mline_t* ml, fline_t* fl) +{ + enum + { + LEFT = 1, + RIGHT = 2, + BOTTOM = 4, + TOP = 8 + }; + + int outcode1 = 0; + int outcode2 = 0; + int outside; + + fpoint_t tmp; + int dx; + int dy; + + +#define DOOUTCODE(oc, mx, my) \ + (oc) = 0; \ + if ((my) < 0) (oc) |= TOP; \ + else if ((my) >= f_h) (oc) |= BOTTOM; \ + if ((mx) < 0) (oc) |= LEFT; \ + else if ((mx) >= f_w) (oc) |= RIGHT; + + + // do trivial rejects and outcodes + if (ml->a.y > m_y2) + outcode1 = TOP; + else if (ml->a.y < m_y) + outcode1 = BOTTOM; + + if (ml->b.y > m_y2) + outcode2 = TOP; + else if (ml->b.y < m_y) + outcode2 = BOTTOM; + + if (outcode1 & outcode2) + return doom_false; // trivially outside + + if (ml->a.x < m_x) + outcode1 |= LEFT; + else if (ml->a.x > m_x2) + outcode1 |= RIGHT; + + if (ml->b.x < m_x) + outcode2 |= LEFT; + else if (ml->b.x > m_x2) + outcode2 |= RIGHT; + + if (outcode1 & outcode2) + return doom_false; // trivially outside + + // transform to frame-buffer coordinates. + fl->a.x = CXMTOF(ml->a.x); + fl->a.y = CYMTOF(ml->a.y); + fl->b.x = CXMTOF(ml->b.x); + fl->b.y = CYMTOF(ml->b.y); + + DOOUTCODE(outcode1, fl->a.x, fl->a.y); + DOOUTCODE(outcode2, fl->b.x, fl->b.y); + + if (outcode1 & outcode2) + return doom_false; + + while (outcode1 | outcode2) + { + // may be partially inside box + // find an outside point + if (outcode1) + outside = outcode1; + else + outside = outcode2; + + // clip to each side + if (outside & TOP) + { + dy = fl->a.y - fl->b.y; + dx = fl->b.x - fl->a.x; + tmp.x = fl->a.x + (dx * (fl->a.y)) / dy; + tmp.y = 0; + } + else if (outside & BOTTOM) + { + dy = fl->a.y - fl->b.y; + dx = fl->b.x - fl->a.x; + tmp.x = fl->a.x + (dx * (fl->a.y - f_h)) / dy; + tmp.y = f_h - 1; + } + else if (outside & RIGHT) + { + dy = fl->b.y - fl->a.y; + dx = fl->b.x - fl->a.x; + tmp.y = fl->a.y + (dy * (f_w - 1 - fl->a.x)) / dx; + tmp.x = f_w - 1; + } + else if (outside & LEFT) + { + dy = fl->b.y - fl->a.y; + dx = fl->b.x - fl->a.x; + tmp.y = fl->a.y + (dy * (-fl->a.x)) / dx; + tmp.x = 0; + } + + if (outside == outcode1) + { + fl->a = tmp; + DOOUTCODE(outcode1, fl->a.x, fl->a.y); + } + else + { + fl->b = tmp; + DOOUTCODE(outcode2, fl->b.x, fl->b.y); + } + + if (outcode1 & outcode2) + return doom_false; // trivially outside + } + + return doom_true; +} +#undef DOOUTCODE + + +// +// Classic Bresenham w/ whatever optimizations needed for speed +// +void AM_drawFline(fline_t* fl, int color) +{ + int x; + int y; + int dx; + int dy; + int sx; + int sy; + int ax; + int ay; + int d; + + static int fuck = 0; + + // For debugging only +#if 0 // [pd] Don't waste CPU cycles testing this then + if (fl->a.x < 0 || fl->a.x >= f_w + || fl->a.y < 0 || fl->a.y >= f_h + || fl->b.x < 0 || fl->b.x >= f_w + || fl->b.y < 0 || fl->b.y >= f_h) + { + doom_print("fuck "); + doom_print(doom_itoa(fuck++, 10)); + doom_print("\r"); + return; + } +#endif + +#define PUTDOT(xx,yy,cc) fb[(yy)*f_w+(xx)]=(cc) + + dx = fl->b.x - fl->a.x; + ax = 2 * (dx < 0 ? -dx : dx); + sx = dx < 0 ? -1 : 1; + + dy = fl->b.y - fl->a.y; + ay = 2 * (dy < 0 ? -dy : dy); + sy = dy < 0 ? -1 : 1; + + x = fl->a.x; + y = fl->a.y; + + if (ax > ay) + { + d = ay - ax / 2; + while (1) + { + PUTDOT(x, y, color); + if (x == fl->b.x) return; + if (d >= 0) + { + y += sy; + d -= ax; + } + x += sx; + d += ay; + } + } + else + { + d = ax - ay / 2; + while (1) + { + PUTDOT(x, y, color); + if (y == fl->b.y) return; + if (d >= 0) + { + x += sx; + d -= ay; + } + y += sy; + d += ax; + } + } +} + + +// +// Clip lines, draw visible part sof lines. +// +void AM_drawMline(mline_t* ml, int color) +{ + static fline_t fl; + + if (AM_clipMline(ml, &fl)) + AM_drawFline(&fl, color); // draws it on frame buffer using fb coords +} + + +// +// Draws flat (floor/ceiling tile) aligned grid lines. +// +void AM_drawGrid(int color) +{ + fixed_t x, y; + fixed_t start, end; + mline_t ml; + + // Figure out start of vertical gridlines + start = m_x; + if ((start - bmaporgx) % (MAPBLOCKUNITS << FRACBITS)) + start += (MAPBLOCKUNITS << FRACBITS) + - ((start - bmaporgx) % (MAPBLOCKUNITS << FRACBITS)); + end = m_x + m_w; + + // draw vertical gridlines + ml.a.y = m_y; + ml.b.y = m_y + m_h; + for (x = start; x < end; x += (MAPBLOCKUNITS << FRACBITS)) + { + ml.a.x = x; + ml.b.x = x; + AM_drawMline(&ml, color); + } + + // Figure out start of horizontal gridlines + start = m_y; + if ((start - bmaporgy) % (MAPBLOCKUNITS << FRACBITS)) + start += (MAPBLOCKUNITS << FRACBITS) + - ((start - bmaporgy) % (MAPBLOCKUNITS << FRACBITS)); + end = m_y + m_h; + + // draw horizontal gridlines + ml.a.x = m_x; + ml.b.x = m_x + m_w; + for (y = start; y < end; y += (MAPBLOCKUNITS << FRACBITS)) + { + ml.a.y = y; + ml.b.y = y; + AM_drawMline(&ml, color); + } +} + + +// +// Determines visible lines, draws them. +// This is LineDef based, not LineSeg based. +// +void AM_drawWalls(void) +{ + int i; + static mline_t l; + + for (i = 0; i < numlines; i++) + { + l.a.x = lines[i].v1->x; + l.a.y = lines[i].v1->y; + l.b.x = lines[i].v2->x; + l.b.y = lines[i].v2->y; + if (cheating || (lines[i].flags & ML_MAPPED)) + { + if ((lines[i].flags & LINE_NEVERSEE) && !cheating) + continue; + if (!lines[i].backsector) + { + AM_drawMline(&l, WALLCOLORS + lightlev); + } + else + { + if (lines[i].special == 39) + { // teleporters + AM_drawMline(&l, WALLCOLORS + WALLRANGE / 2); + } + else if (lines[i].flags & ML_SECRET) // secret door + { + if (cheating) AM_drawMline(&l, SECRETWALLCOLORS + lightlev); + else AM_drawMline(&l, WALLCOLORS + lightlev); + } + else if (lines[i].backsector->floorheight + != lines[i].frontsector->floorheight) + { + AM_drawMline(&l, FDWALLCOLORS + lightlev); // floor level change + } + else if (lines[i].backsector->ceilingheight + != lines[i].frontsector->ceilingheight) + { + AM_drawMline(&l, CDWALLCOLORS + lightlev); // ceiling level change + } + else if (cheating) + { + AM_drawMline(&l, TSWALLCOLORS + lightlev); + } + } + } + else if (plr->powers[pw_allmap]) + { + if (!(lines[i].flags & LINE_NEVERSEE)) AM_drawMline(&l, GRAYS + 3); + } + } +} + + +// +// Rotation in 2D. +// Used to rotate player arrow line character. +// +void AM_rotate(fixed_t* x, fixed_t* y, angle_t a) +{ + fixed_t tmpx; + + tmpx = + FixedMul(*x, finecosine[a >> ANGLETOFINESHIFT]) + - FixedMul(*y, finesine[a >> ANGLETOFINESHIFT]); + + *y = + FixedMul(*x, finesine[a >> ANGLETOFINESHIFT]) + + FixedMul(*y, finecosine[a >> ANGLETOFINESHIFT]); + + *x = tmpx; +} + + +void AM_drawLineCharacter(mline_t* lineguy, + int lineguylines, + fixed_t scale, + angle_t angle, + int color, + fixed_t x, + fixed_t y) +{ + int i; + mline_t l; + + for (i = 0; i < lineguylines; i++) + { + l.a.x = lineguy[i].a.x; + l.a.y = lineguy[i].a.y; + + if (scale) + { + l.a.x = FixedMul(scale, l.a.x); + l.a.y = FixedMul(scale, l.a.y); + } + + if (angle) + AM_rotate(&l.a.x, &l.a.y, angle); + + l.a.x += x; + l.a.y += y; + + l.b.x = lineguy[i].b.x; + l.b.y = lineguy[i].b.y; + + if (scale) + { + l.b.x = FixedMul(scale, l.b.x); + l.b.y = FixedMul(scale, l.b.y); + } + + if (angle) + AM_rotate(&l.b.x, &l.b.y, angle); + + l.b.x += x; + l.b.y += y; + + AM_drawMline(&l, color); + } +} + + +void AM_drawPlayers(void) +{ + int i; + player_t* p; + static int their_colors[] = { GREENS, GRAYS, BROWNS, REDS }; + int their_color = -1; + int color; + + if (!netgame) + { + if (cheating) + AM_drawLineCharacter + (cheat_player_arrow, NUMCHEATPLYRLINES, 0, + plr->mo->angle, WHITE, plr->mo->x, plr->mo->y); + else + AM_drawLineCharacter + (player_arrow, NUMPLYRLINES, 0, plr->mo->angle, + WHITE, plr->mo->x, plr->mo->y); + return; + } + + for (i = 0; i < MAXPLAYERS; i++) + { + their_color++; + p = &players[i]; + + if ((deathmatch && !singledemo) && p != plr) + continue; + + if (!playeringame[i]) + continue; + + if (p->powers[pw_invisibility]) + color = 246; // *close* to black + else + color = their_colors[their_color]; + + AM_drawLineCharacter + (player_arrow, NUMPLYRLINES, 0, p->mo->angle, + color, p->mo->x, p->mo->y); + } +} + + +void AM_drawThings(int colors, int colorrange) +{ + int i; + mobj_t* t; + + for (i = 0; i < numsectors; i++) + { + t = sectors[i].thinglist; + while (t) + { + AM_drawLineCharacter + (thintriangle_guy, NUMTHINTRIANGLEGUYLINES, + 16 << FRACBITS, t->angle, colors + lightlev, t->x, t->y); + t = t->snext; + } + } +} + + +void AM_drawMarks(void) +{ + int i, fx, fy, w, h; + + for (i = 0; i < AM_NUMMARKPOINTS; i++) + { + if (markpoints[i].x != -1) + { + // w = SHORT(marknums[i]->width); + // h = SHORT(marknums[i]->height); + w = 5; // because something's wrong with the wad, i guess + h = 6; // because something's wrong with the wad, i guess + fx = CXMTOF(markpoints[i].x); + fy = CYMTOF(markpoints[i].y); + if (fx >= f_x && fx <= f_w - w && fy >= f_y && fy <= f_h - h) + V_DrawPatch(fx, fy, FB, marknums[i]); + } + } +} + + +void AM_drawCrosshair(int color) +{ + fb[(f_w * (f_h + 1)) / 2] = color; // single point for now +} + + +void AM_Drawer(void) +{ + if (!automapactive) return; + + AM_clearFB(BACKGROUND); + if (grid) + AM_drawGrid(GRIDCOLORS); + AM_drawWalls(); + AM_drawPlayers(); + if (cheating == 2) + AM_drawThings(THINGCOLORS, THINGRANGE); + AM_drawCrosshair(XHAIRCOLORS); + + AM_drawMarks(); + + V_MarkRect(f_x, f_y, f_w, f_h); +} +weaponinfo_t weaponinfo[NUMWEAPONS] = +{ + { + // fist + am_noammo, + S_PUNCHUP, + S_PUNCHDOWN, + S_PUNCH, + S_PUNCH1, + S_NULL + }, + { + // pistol + am_clip, + S_PISTOLUP, + S_PISTOLDOWN, + S_PISTOL, + S_PISTOL1, + S_PISTOLFLASH + }, + { + // shotgun + am_shell, + S_SGUNUP, + S_SGUNDOWN, + S_SGUN, + S_SGUN1, + S_SGUNFLASH1 + }, + { + // chaingun + am_clip, + S_CHAINUP, + S_CHAINDOWN, + S_CHAIN, + S_CHAIN1, + S_CHAINFLASH1 + }, + { + // missile launcher + am_misl, + S_MISSILEUP, + S_MISSILEDOWN, + S_MISSILE, + S_MISSILE1, + S_MISSILEFLASH1 + }, + { + // plasma rifle + am_cell, + S_PLASMAUP, + S_PLASMADOWN, + S_PLASMA, + S_PLASMA1, + S_PLASMAFLASH1 + }, + { + // bfg 9000 + am_cell, + S_BFGUP, + S_BFGDOWN, + S_BFG, + S_BFG1, + S_BFGFLASH1 + }, + { + // chainsaw + am_noammo, + S_SAWUP, + S_SAWDOWN, + S_SAW, + S_SAW1, + S_NULL + }, + { + // super shotgun + am_shell, + S_DSGUNUP, + S_DSGUNDOWN, + S_DSGUN, + S_DSGUN1, + S_DSGUNFLASH1 + }, +}; +#if defined(DOOM_WIN32) + + +#define X_OK 0 +#define W_OK 2 +#define R_OK 4 +#define RW_OK 6 +#elif defined(DOOM_APPLE) + + +#endif + +//#include "doomdef.h" +//#include "doomstat.h" +//#include "dstrings.h" +//#include "sounds.h" +//#include "z_zone.h" +//#include "w_wad.h" +//#include "s_sound.h" +//#include "v_video.h" +//#include "f_finale.h" +//#include "f_wipe.h" +//#include "m_argv.h" +//#include "m_misc.h" +//#include "m_menu.h" +//#include "i_system.h" +//#include "i_sound.h" +//#include "i_video.h" +//#include "g_game.h" +//#include "hu_stuff.h" +//#include "wi_stuff.h" +//#include "st_stuff.h" +//#include "am_map.h" +//#include "p_setup.h" +//#include "r_local.h" +//#include "d_main.h" + + +#define MAXARGVS 100 + + +char* wadfiles[MAXWADFILES]; + +doom_boolean devparm; // started game with -devparm +doom_boolean nomonsters; // checkparm of -nomonsters +doom_boolean respawnparm; // checkparm of -respawn +doom_boolean fastparm; // checkparm of -fast + +doom_boolean drone; + +doom_boolean singletics = doom_true; // debug flag to cancel adaptiveness + +doom_boolean is_wiping_screen = doom_false; + +skill_t startskill; +int startepisode; +int startmap; +doom_boolean autostart; + +void* debugfile = 0; + +doom_boolean advancedemo; + +char wadfile[1024]; // primary wad file +char mapdir[1024]; // directory of development maps +char basedefault[1024]; // default file + +// +// EVENT HANDLING +// +// Events are asynchronous inputs generally generated by the game user. +// Events can be discarded if no responder claims them +// +event_t events[MAXEVENTS]; +int eventhead; +int eventtail; + +// wipegamestate can be set to -1 to force a wipe on the next draw +gamestate_t wipegamestate = GS_DEMOSCREEN; +void R_ExecuteSetViewSize(void); + +// print title for every printed line +char title[128]; + + +extern doom_boolean inhelpscreens; +extern doom_boolean setsizeneeded; +extern int showMessages; +extern doom_boolean demorecording; + + +void D_DoomLoop(void); +void D_CheckNetGame(void); +void D_ProcessEvents(void); +void G_BuildTiccmd(ticcmd_t* cmd); +void D_DoAdvanceDemo(void); + + +// +// D_PostEvent +// Called by the I/O functions when input is detected +// +void D_PostEvent(event_t* ev) +{ + events[eventhead] = *ev; + eventhead++; + eventhead = (eventhead) & (MAXEVENTS - 1); +} + + +// +// D_ProcessEvents +// Send all the events of the given timestamp down the responder chain +// +void D_ProcessEvents(void) +{ + event_t* ev; + + // IF STORE DEMO, DO NOT ACCEPT INPUT + if ((gamemode == commercial) + && (W_CheckNumForName((char*)"map01") < 0)) + return; + + for (; eventtail != eventhead; ) + { + ev = &events[eventtail]; + if (!M_Responder(ev)) + G_Responder(ev); + // else menu ate the event + eventtail++; + eventtail = (eventtail) & (MAXEVENTS - 1); + } +} + + +// +// D_Display +// draw current display, possibly wiping it from the previous +// +void D_Display(void) +{ + static doom_boolean viewactivestate = doom_false; + static doom_boolean menuactivestate = doom_false; + static doom_boolean inhelpscreensstate = doom_false; + static doom_boolean fullscreen = doom_false; + static gamestate_t oldgamestate = (gamestate_t)-1; + static int borderdrawcount; + int wipestart; + int y; + doom_boolean wipe; + doom_boolean redrawsbar; + + if (nodrawers) + return; // for comparative timing / profiling + + redrawsbar = doom_false; + + // change the view size if needed + if (setsizeneeded) + { + R_ExecuteSetViewSize(); + oldgamestate = (gamestate_t)-1; // force background redraw + borderdrawcount = 3; + } + + // save the current screen if about to wipe + if (gamestate != wipegamestate) + { + wipe = doom_true; + wipe_StartScreen(0, 0, SCREENWIDTH, SCREENHEIGHT); + } + else + wipe = doom_false; + + if (gamestate == GS_LEVEL && gametic) + HU_Erase(); + + // do buffered drawing + switch (gamestate) + { + case GS_LEVEL: + if (!gametic) + break; + if (automapactive) + AM_Drawer(); + if (wipe || (viewheight != 200 && fullscreen)) + redrawsbar = doom_true; + if (inhelpscreensstate && !inhelpscreens) + redrawsbar = doom_true; // just put away the help screen + ST_Drawer(viewheight == 200, redrawsbar); + fullscreen = viewheight == 200; + break; + + case GS_INTERMISSION: + WI_Drawer(); + break; + + case GS_FINALE: + F_Drawer(); + break; + + case GS_DEMOSCREEN: + D_PageDrawer(); + break; + } + + // draw buffered stuff to screen + I_UpdateNoBlit(); + + // draw the view directly + if (gamestate == GS_LEVEL && !automapactive && gametic) + R_RenderPlayerView(&players[displayplayer]); + + if (gamestate == GS_LEVEL && gametic) + HU_Drawer(); + + // clean up border stuff + if (gamestate != oldgamestate && gamestate != GS_LEVEL) + I_SetPalette((byte*)W_CacheLumpName((char*)"PLAYPAL", PU_CACHE)); + + // see if the border needs to be initially drawn + if (gamestate == GS_LEVEL && oldgamestate != GS_LEVEL) + { + viewactivestate = doom_false; // view was not active + R_FillBackScreen(); // draw the pattern into the back screen + } + + // see if the border needs to be updated to the screen + if (gamestate == GS_LEVEL && !automapactive && scaledviewwidth != 320) + { + if (menuactive || menuactivestate || !viewactivestate) + borderdrawcount = 3; + if (borderdrawcount) + { + R_DrawViewBorder(); // erase old menu stuff + borderdrawcount--; + } + + } + + menuactivestate = menuactive; + viewactivestate = viewactive; + inhelpscreensstate = inhelpscreens; + oldgamestate = wipegamestate = gamestate; + + // draw pause pic + if (paused) + { + if (automapactive) + y = 4; + else + y = viewwindowy + 4; + V_DrawPatchDirect(viewwindowx + (scaledviewwidth - 68) / 2, + y, 0, (patch_t*)W_CacheLumpName((char*)"M_PAUSE", PU_CACHE)); + } + + + // menus go directly to the screen + M_Drawer(); // menu is drawn even on top of everything + NetUpdate(); // send out any new accumulation + + + // normal update + is_wiping_screen = wipe; + if (!wipe) + { + I_FinishUpdate(); // page flip or blit buffer + return; + } + + // wipe update + wipe_EndScreen(0, 0, SCREENWIDTH, SCREENHEIGHT); + + wipestart = I_GetTime() - 1; + +#if 0 // [pd] Moved to D_UpdateWipe + do + { + do + { + nowtime = I_GetTime(); + tics = nowtime - wipestart; + } while (!tics); + wipestart = nowtime; + done = wipe_ScreenWipe(wipe_Melt + , 0, 0, SCREENWIDTH, SCREENHEIGHT, tics); + I_UpdateNoBlit(); + M_Drawer(); // menu is drawn even on top of wipes + I_FinishUpdate(); // page flip or blit buffer + } while (!done); +#endif +} + + +// +// D_DoomLoop +// +void D_UpdateWipe(void) +{ + if (wipe_ScreenWipe(wipe_Melt, 0, 0, SCREENWIDTH, SCREENHEIGHT, 1)) + is_wiping_screen = doom_false; +} + + +void D_DoomLoop(void) +{ +#if 0 // [pd] Moved to D_DoomMain() + if (demorecording) + G_BeginRecording(); + + if (M_CheckParm("-debugfile")) + { + char filename[20]; + //doom_sprintf(filename, "debug%i.txt", consoleplayer); + doom_print("debug output to: %s\n", filename); + debugfile = doom_open(filename, "w"); + } + + I_InitGraphics(); +#endif + + // while (1) + { + // frame syncronous IO operations + I_StartFrame(); + + // process one or more tics + if (singletics) + { + I_StartTic(); + D_ProcessEvents(); + G_BuildTiccmd(&netcmds[consoleplayer][maketic % BACKUPTICS]); + if (advancedemo) + D_DoAdvanceDemo(); + M_Ticker(); + G_Ticker(); + gametic++; + maketic++; + } + else + { + TryRunTics(); // will run at least one tic + } + + S_UpdateSounds(players[consoleplayer].mo);// move positional sounds + + // Update display, next frame, with current state. + D_Display(); + +#if 0 // [pd] Sound is queried by the application's audio thread. + // Sound mixing for the buffer is snychronous. + I_UpdateSound(); + + // Synchronous sound output is explicitly called. + // Update sound output. + I_SubmitSound(); +#endif + } +} + + +// +// DEMO LOOP +// +int demosequence; +int pagetic; +char* pagename; + + +// +// D_PageTicker +// Handles timing for warped projection +// +void D_PageTicker(void) +{ + if (--pagetic < 0) + D_AdvanceDemo(); +} + + +// +// D_PageDrawer +// +void D_PageDrawer(void) +{ + V_DrawPatch(0, 0, 0, (patch_t*)W_CacheLumpName(pagename, PU_CACHE)); +} + + +// +// D_AdvanceDemo +// Called after each demo or intro demosequence finishes +// +void D_AdvanceDemo(void) +{ + advancedemo = doom_true; +} + + +// +// This cycles through the demo sequences. +// FIXME - version dependend demo numbers? +// +void D_DoAdvanceDemo(void) +{ + players[consoleplayer].playerstate = PST_LIVE; // not reborn + advancedemo = doom_false; + usergame = doom_false; // no save / end game here + paused = doom_false; + gameaction = ga_nothing; + + if (gamemode == retail) + demosequence = (demosequence + 1) % 7; + else + demosequence = (demosequence + 1) % 6; + + switch (demosequence) + { + case 0: + if (gamemode == commercial) + pagetic = 35 * 11; + else + pagetic = 170; + gamestate = GS_DEMOSCREEN; + pagename = (char*)"TITLEPIC"; + if (gamemode == commercial) + S_StartMusic(mus_dm2ttl); + else + S_StartMusic(mus_intro); + break; + case 1: + G_DeferedPlayDemo((char*)"demo1"); + break; + case 2: + pagetic = 200; + gamestate = GS_DEMOSCREEN; + pagename = (char*)"CREDIT"; + break; + case 3: + G_DeferedPlayDemo((char*)"demo2"); + break; + case 4: + gamestate = GS_DEMOSCREEN; + if (gamemode == commercial) + { + pagetic = 35 * 11; + pagename = (char*)"TITLEPIC"; + S_StartMusic(mus_dm2ttl); + } + else + { + pagetic = 200; + + if (gamemode == retail) + pagename = (char*)"CREDIT"; + else + pagename = (char*)"HELP2"; + } + break; + case 5: + G_DeferedPlayDemo((char*)"demo3"); + break; + // THE DEFINITIVE DOOM Special Edition demo + case 6: + G_DeferedPlayDemo((char*)"demo4"); + break; + } +} + + +// +// D_StartTitle +// +void D_StartTitle(void) +{ + gameaction = ga_nothing; + demosequence = -1; + D_AdvanceDemo(); +} + + +// +// D_AddFile +// +void D_AddFile(char* file) +{ + int numwadfiles; + char* newfile; + + for (numwadfiles = 0; wadfiles[numwadfiles]; numwadfiles++) + ; + + newfile = (char*)doom_malloc(doom_strlen(file) + 1); + doom_strcpy(newfile, file); + + wadfiles[numwadfiles] = newfile; +} + + +// +// IdentifyVersion +// Checks availability of IWAD files by name, +// to determine whether registered/commercial features +// should be executed (notably loading PWAD's). +// +void IdentifyVersion(void) +{ + char* doom1wad; + char* doomwad; + char* doomuwad; + char* doom2wad; + + char* doom2fwad; + char* plutoniawad; + char* tntwad; + + char* home; + char* doomwaddir; + doomwaddir = doom_getenv("DOOMWADDIR"); + if (!doomwaddir) + doomwaddir = (char*)"."; + + // Commercial. + doom2wad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 + 9 + 1); + //doom_sprintf(doom2wad, "%s/doom2.wad", doomwaddir); + doom_strcpy(doom2wad, doomwaddir); + doom_concat(doom2wad, "/doom2.wad"); + + // Retail. + doomuwad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 + 8 + 1); + //doom_sprintf(doomuwad, "%s/doomu.wad", doomwaddir); + doom_strcpy(doomuwad, doomwaddir); + doom_concat(doomuwad, "/doomu.wad"); + + // Registered. + doomwad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 + 8 + 1); + //doom_sprintf(doomwad, "%s/doom.wad", doomwaddir); + doom_strcpy(doomwad, doomwaddir); + doom_concat(doomwad, "/doom.wad"); + + // Shareware. + doom1wad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 + 9 + 1); + //doom_sprintf(doom1wad, "%s/doom1.wad", doomwaddir); + doom_strcpy(doom1wad, doomwaddir); + doom_concat(doom1wad, "/doom1.wad"); + + // Bug, dear Shawn. + // Insufficient malloc, caused spurious realloc errors. + plutoniawad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 +/*9*/12 + 1); + //doom_sprintf(plutoniawad, "%s/plutonia.wad", doomwaddir); + doom_strcpy(plutoniawad, doomwaddir); + doom_concat(plutoniawad, "/plutonia.wad"); + + tntwad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 + 9 + 1); + //doom_sprintf(tntwad, "%s/tnt.wad", doomwaddir); + doom_strcpy(tntwad, doomwaddir); + doom_concat(tntwad, "/tnt.wad"); + + // French stuff. + doom2fwad = (char*)doom_malloc(doom_strlen(doomwaddir) + 1 + 10 + 1); + //doom_sprintf(doom2fwad, "%s/doom2f.wad", doomwaddir); + doom_strcpy(doom2fwad, doomwaddir); + doom_concat(doom2fwad, "/doom2f.wad"); + +#if !defined(DOOM_WIN32) + home = doom_getenv("HOME"); + if (!home) + I_Error((char*)"Error: Please set $HOME to your home directory"); +#else + home = "."; +#endif + //doom_sprintf(basedefault, "%s/.doomrc", home); + doom_strcpy(basedefault, home); + doom_concat(basedefault, "/.doomrc"); + + if (M_CheckParm((char*)"-shdev")) + { + gamemode = shareware; + devparm = doom_true; + D_AddFile((char*)DEVDATA"doom1.wad"); + D_AddFile((char*)DEVMAPS"data_se/texture1.lmp"); + D_AddFile((char*)DEVMAPS"data_se/pnames.lmp"); + doom_strcpy(basedefault, DEVDATA"default.cfg"); + return; + } + + if (M_CheckParm((char*)"-regdev")) + { + gamemode = registered; + devparm = doom_true; + D_AddFile((char*)DEVDATA"doom.wad"); + D_AddFile((char*)DEVMAPS"data_se/texture1.lmp"); + D_AddFile((char*)DEVMAPS"data_se/texture2.lmp"); + D_AddFile((char*)DEVMAPS"data_se/pnames.lmp"); + doom_strcpy(basedefault, DEVDATA"default.cfg"); + return; + } + + if (M_CheckParm((char*)"-comdev")) + { + gamemode = commercial; + devparm = doom_true; + /* I don't bother + if(plutonia) + D_AddFile (DEVDATA"plutonia.wad"); + else if(tnt) + D_AddFile (DEVDATA"tnt.wad"); + else*/ + D_AddFile((char*)DEVDATA"doom2.wad"); + + D_AddFile((char*)DEVMAPS"cdata/texture1.lmp"); + D_AddFile((char*)DEVMAPS"cdata/pnames.lmp"); + doom_strcpy(basedefault, DEVDATA"default.cfg"); + return; + } + + void* f; + if (f = doom_open(doom2fwad, "rb")) + { + doom_close(f); + gamemode = commercial; + // C'est ridicule! + // Let's handle languages in config files, okay? + language = french; + doom_print("French version\n"); + D_AddFile(doom2fwad); + return; + } + + if (f = doom_open(doom2wad, "rb")) + { + doom_close(f); + gamemode = commercial; + D_AddFile(doom2wad); + return; + } + + if (f = doom_open(plutoniawad, "rb")) + { + doom_close(f); + gamemode = commercial; + D_AddFile(plutoniawad); + return; + } + + if (f = doom_open(tntwad, "rb")) + { + doom_close(f); + gamemode = commercial; + D_AddFile(tntwad); + return; + } + + if (f = doom_open(doomuwad, "rb")) + { + doom_close(f); + gamemode = retail; + D_AddFile(doomuwad); + return; + } + + if (f = doom_open(doomwad, "rb")) + { + doom_close(f); + gamemode = registered; + D_AddFile(doomwad); + return; + } + + if (f = doom_open(doom1wad, "rb")) + { + doom_close(f); + gamemode = shareware; + D_AddFile(doom1wad); + return; + } + + doom_print("Game mode indeterminate.\n"); + gamemode = indetermined; +} + + +// +// Find a Response File +// +void FindResponseFile(void) +{ + int i; + + for (i = 1; i < myargc; i++) + if (myargv[i][0] == '@') + { + void* handle = 0; + int size; + int k; + int index; + int indexinfile; + char* infile; + char* file; + char* moreargs[20]; + char* firstargv; + + // READ THE RESPONSE FILE INTO MEMORY + handle = doom_open(&myargv[i][1], "rb"); + if (!handle) + { + doom_print("\nNo such response file!"); + doom_exit(1); + } + doom_print("Found response file %s!\n"); + doom_print(&myargv[i][1]); + doom_print("!\n"); + doom_seek(handle, 0, DOOM_SEEK_END); + size = doom_tell(handle); + doom_seek(handle, 0, DOOM_SEEK_SET); + file = (char*)doom_malloc(size); + doom_read(handle, file, size * 1); + doom_close(handle); + + // KEEP ALL CMDLINE ARGS FOLLOWING @RESPONSEFILE ARG + for (index = 0, k = i + 1; k < myargc; k++) + moreargs[index++] = myargv[k]; + + firstargv = myargv[0]; + myargv = (char**)doom_malloc(sizeof(char*) * MAXARGVS); + doom_memset(myargv, 0, sizeof(char*) * MAXARGVS); + myargv[0] = firstargv; + + infile = file; + indexinfile = k = 0; + indexinfile++; // SKIP PAST ARGV[0] (KEEP IT) + do + { + myargv[indexinfile++] = infile + k; + while (k < size && + ((*(infile + k) >= ' ' + 1) && (*(infile + k) <= 'z'))) + k++; + *(infile + k) = 0; + while (k < size && + ((*(infile + k) <= ' ') || (*(infile + k) > 'z'))) + k++; + } while (k < size); + + for (k = 0; k < index; k++) + myargv[indexinfile++] = moreargs[k]; + myargc = indexinfile; + + // DISPLAY ARGS + doom_print(doom_itoa(myargc, 10)); + doom_print(" command-line args:\n"); + for (k = 1; k < myargc; k++) + { + //doom_print("%s\n", myargv[k]); + doom_print(myargv[k]); + doom_print("\n"); + } + + break; + } +} + + +// +// D_DoomMain +// +void D_DoomMain(void) +{ + int p; + char file[256]; + + FindResponseFile(); + + IdentifyVersion(); + + modifiedgame = doom_false; + + nomonsters = M_CheckParm((char*)"-nomonsters"); + respawnparm = M_CheckParm((char*)"-respawn"); + fastparm = M_CheckParm((char*)"-fast"); + devparm = M_CheckParm((char*)"-devparm"); + if (M_CheckParm((char*)"-altdeath")) + deathmatch = 2; + else if (M_CheckParm((char*)"-deathmatch")) + deathmatch = 1; + + switch (gamemode) + { + case retail: + //doom_sprintf(title, + // " " + // "The Ultimate DOOM Startup v%i.%i" + // " ", + // VERSION / 100, VERSION % 100); + doom_strcpy(title, " " "The Ultimate DOOM Startup v"); + doom_concat(title, doom_itoa(VERSION / 100, 10)); + doom_concat(title, "."); + doom_concat(title, doom_itoa(VERSION % 100, 10)); + doom_concat(title, " "); + break; + case shareware: + //doom_sprintf(title, + // " " + // "DOOM Shareware Startup v%i.%i" + // " ", + // VERSION / 100, VERSION % 100); + doom_strcpy(title, " " "DOOM Shareware Startup v"); + doom_concat(title, doom_itoa(VERSION / 100, 10)); + doom_concat(title, "."); + doom_concat(title, doom_itoa(VERSION % 100, 10)); + doom_concat(title, " "); + break; + case registered: + //doom_sprintf(title, + // " " + // "DOOM Registered Startup v%i.%i" + // " ", + // VERSION / 100, VERSION % 100); + doom_strcpy(title, " " "DOOM Registered Startup v"); + doom_concat(title, doom_itoa(VERSION / 100, 10)); + doom_concat(title, "."); + doom_concat(title, doom_itoa(VERSION % 100, 10)); + doom_concat(title, " "); + break; + case commercial: + //doom_sprintf(title, + // " " + // "DOOM 2: Hell on Earth v%i.%i" + // " ", + // VERSION / 100, VERSION % 100); + doom_strcpy(title, " " "DOOM 2: Hell on Earth v"); + doom_concat(title, doom_itoa(VERSION / 100, 10)); + doom_concat(title, "."); + doom_concat(title, doom_itoa(VERSION % 100, 10)); + doom_concat(title, " "); + break; + /*FIXME + case pack_plut: + sprintf (title, + " " + "DOOM 2: Plutonia Experiment v%i.%i" + " ", + VERSION/100,VERSION%100); + break; + case pack_tnt: + sprintf (title, + " " + "DOOM 2: TNT - Evilution v%i.%i" + " ", + VERSION/100,VERSION%100); + break; + */ + default: + //doom_sprintf(title, + // " " + // "Public DOOM - v%i.%i" + // " ", + // VERSION / 100, VERSION % 100); + doom_strcpy(title, " " "Public DOOM - v"); + doom_concat(title, doom_itoa(VERSION / 100, 10)); + doom_concat(title, "."); + doom_concat(title, doom_itoa(VERSION % 100, 10)); + doom_concat(title, " "); + break; + } + + //doom_print("%s\n", title); + doom_print(title); + doom_print("\n"); + + if (devparm) + doom_print(D_DEVSTR); + +#if 0 // [pd] Ignore cdrom + if (M_CheckParm("-cdrom")) + { + doom_print(D_CDROM); + mkdir("c:\\doomdata", 0); + doom_strcpy(basedefault, "c:/doomdata/default.cfg"); + } +#endif + + // turbo option + if ((p = M_CheckParm((char*)"-turbo"))) + { + int scale = 200; + extern int forwardmove[2]; + extern int sidemove[2]; + + if (p < myargc - 1) + scale = doom_atoi(myargv[p + 1]); + if (scale < 10) + scale = 10; + if (scale > 400) + scale = 400; + //doom_print("turbo scale: %i%%\n", scale); + doom_print("turbo scale: "); + doom_print(doom_itoa(scale, 10)); + doom_print("%%\n"); + forwardmove[0] = forwardmove[0] * scale / 100; + forwardmove[1] = forwardmove[1] * scale / 100; + sidemove[0] = sidemove[0] * scale / 100; + sidemove[1] = sidemove[1] * scale / 100; + } + + // add any files specified on the command line with -file wadfile + // to the wad list + // + // convenience hack to allow -wart e m to add a wad file + // prepend a tilde to the filename so wadfile will be reloadable + p = M_CheckParm((char*)"-wart"); + if (p) + { + myargv[p][4] = 'p'; // big hack, change to -warp + + // Map name handling. + switch (gamemode) + { + case shareware: + case retail: + case registered: + //doom_sprintf(file, "~"DEVMAPS"E%cM%c.wad", myargv[p + 1][0], myargv[p + 2][0]); + doom_strcpy(file, (char*)"~" DEVMAPS "E"); + doom_concat(file, doom_ctoa(myargv[p + 1][0])); + doom_concat(file, "M"); + doom_concat(file, doom_ctoa(myargv[p + 2][0])); + doom_concat(file, ".wad"); + + //doom_print("Warping to Episode %s, Map %s.\n", myargv[p + 1], myargv[p + 2]); + doom_print("Warping to Episode "); + doom_print(myargv[p + 1]); + doom_print(", Map "); + doom_print(myargv[p + 2]); + doom_print(".\n"); + break; + + case commercial: + default: + p = doom_atoi(myargv[p + 1]); + if (p < 10) + { + //doom_sprintf(file, "~"DEVMAPS"cdata/map0%i.wad", p); + doom_strcpy(file, (char*)"~" DEVMAPS "cdata/map0"); + doom_concat(file, doom_itoa(p, 10)); + doom_concat(file, ".wad"); + } + else + { + //doom_sprintf(file, "~"DEVMAPS"cdata/map%i.wad", p); + doom_strcpy(file, (char*)"~" DEVMAPS "cdata/map"); + doom_concat(file, doom_itoa(p, 10)); + doom_concat(file, ".wad"); + } + break; + } + D_AddFile(file); + } + + p = M_CheckParm((char*)"-file"); + if (p) + { + // the parms after p are wadfile/lump names, + // until end of parms or another - preceded parm + modifiedgame = doom_true; // homebrew levels + while (++p != myargc && myargv[p][0] != '-') + D_AddFile(myargv[p]); + } + + p = M_CheckParm((char*)"-playdemo"); + + if (!p) + p = M_CheckParm((char*)"-timedemo"); + + if (p && p < myargc - 1) + { + //doom_sprintf(file, "%s.lmp", myargv[p + 1]); + doom_strcpy(file, myargv[p + 1]); + doom_concat(file, ".lmp"); + D_AddFile(file); + //doom_print("Playing demo %s.lmp.\n", myargv[p + 1]); + doom_print("Playing demo "); + doom_print(myargv[p + 1]); + doom_print(".lmp.\n"); + } + + // get skill / episode / map from parms + startskill = sk_medium; + startepisode = 1; + startmap = 1; + autostart = doom_false; + + + p = M_CheckParm((char*)"-skill"); + if (p && p < myargc - 1) + { + startskill = (skill_t)(myargv[p + 1][0] - '1'); + autostart = doom_true; + } + + p = M_CheckParm((char*)"-episode"); + if (p && p < myargc - 1) + { + startepisode = myargv[p + 1][0] - '0'; + startmap = 1; + autostart = doom_true; + } + + p = M_CheckParm((char*)"-timer"); + if (p && p < myargc - 1 && deathmatch) + { + int time; + time = doom_atoi(myargv[p + 1]); + //doom_print("Levels will end after %d minute", time); + doom_print("Levels will end after "); + doom_print(doom_itoa(time, 10)); + doom_print(" minute"); + if (time > 1) + doom_print("s"); + doom_print(".\n"); + } + + p = M_CheckParm((char*)"-avg"); + if (p && p < myargc - 1 && deathmatch) + doom_print("Austin Virtual Gaming: Levels will end after 20 minutes\n"); + + p = M_CheckParm((char*)"-warp"); + if (p && p < myargc - 1) + { + if (gamemode == commercial) + startmap = doom_atoi(myargv[p + 1]); + else + { + startepisode = myargv[p + 1][0] - '0'; + startmap = myargv[p + 2][0] - '0'; + } + autostart = doom_true; + } + + // init subsystems + doom_print("V_Init: allocate screens.\n"); + V_Init(); + + doom_print("M_LoadDefaults: Load system defaults.\n"); + M_LoadDefaults(); // load before initing other systems + + doom_print("Z_Init: Init zone memory allocation daemon. \n"); + Z_Init(); + + doom_print("W_Init: Init WADfiles.\n"); + W_InitMultipleFiles(wadfiles); + + + // Check for -file in shareware + if (modifiedgame) + { + // These are the lumps that will be checked in IWAD, + // if any one is not present, execution will be aborted. + char name[23][9] = + { + "e2m1","e2m2","e2m3","e2m4","e2m5","e2m6","e2m7","e2m8","e2m9", + "e3m1","e3m3","e3m3","e3m4","e3m5","e3m6","e3m7","e3m8","e3m9", + "dphoof","bfgga0","heada1","cybra1","spida1d1" + }; + int i; + + if (gamemode == shareware) + I_Error((char*)"Error: \nYou cannot -file with the shareware " + "version. Register!"); + + // Check for fake IWAD with right name, + // but w/o all the lumps of the registered version. + if (gamemode == registered) + for (i = 0; i < 23; i++) + if (W_CheckNumForName(name[i]) < 0) + I_Error((char*)"Error: \nThis is not the registered version."); + } + + // Iff additonal PWAD files are used, print modified banner + if (modifiedgame) + { + /*m*/doom_print( + "===========================================================================\n" + "ATTENTION: This version of DOOM has been modified. If you would like to\n" + "get a copy of the original game, call 1-800-IDGAMES or see the readme file.\n" + " You will not receive technical support for modified games.\n" + //" press enter to continue\n" + "===========================================================================\n" + ); + //getchar(); + } + + + // Check and print which version is executed. + switch (gamemode) + { + case shareware: + case indetermined: + doom_print( + "===========================================================================\n" + " Shareware!\n" + "===========================================================================\n" + ); + break; + case registered: + case retail: + case commercial: + doom_print( + "===========================================================================\n" + " Commercial product - do not distribute!\n" + " Please report software piracy to the SPA: 1-800-388-PIR8\n" + "===========================================================================\n" + ); + break; + + default: + // Ouch. + break; + } + + doom_print("M_Init: Init miscellaneous info.\n"); + M_Init(); + + doom_print("R_Init: Init DOOM refresh daemon - "); + R_Init(); + + doom_print("\nP_Init: Init Playloop state.\n"); + P_Init(); + + doom_print("I_Init: Setting up machine state.\n"); + I_Init(); + + doom_print("D_CheckNetGame: Checking network game status.\n"); + D_CheckNetGame(); + + doom_print("S_Init: Setting up sound.\n"); + S_Init(snd_SfxVolume /* *8 */, snd_MusicVolume /* *8*/); + + doom_print("HU_Init: Setting up heads up display.\n"); + HU_Init(); + + doom_print("ST_Init: Init status bar.\n"); + ST_Init(); + + // check for a driver that wants intermission stats +#if 0 // [pd] Unsure how to test this + p = M_CheckParm("-statcopy"); + if (p && p < myargc - 1) + { + // for statistics driver + extern void* statcopy; + + statcopy = (void*)atoll(myargv[p + 1]); + doom_print("External statistics registered.\n"); + } +#endif + + // start the apropriate game based on parms + p = M_CheckParm((char*)"-record"); + + if (p && p < myargc - 1) + { + G_RecordDemo(myargv[p + 1]); + autostart = doom_true; + } + + p = M_CheckParm((char*)"-playdemo"); + if (p && p < myargc - 1) + { + singledemo = doom_true; // quit after one demo + G_DeferedPlayDemo(myargv[p + 1]); + D_DoomLoop(); // never returns + } + + p = M_CheckParm((char*)"-timedemo"); + if (p && p < myargc - 1) + { + G_TimeDemo(myargv[p + 1]); + D_DoomLoop(); // never returns + } + + p = M_CheckParm((char*)"-loadgame"); + if (p && p < myargc - 1) + { +#if 0 // [pd] We don't support the cdrom flag + if (M_CheckParm("-cdrom")) + { + //doom_sprintf(file, "c:\\doomdata\\"SAVEGAMENAME"%c.dsg", myargv[p + 1][0]); + } + else +#endif + { + //doom_sprintf(file, SAVEGAMENAME"%c.dsg", myargv[p + 1][0]); + doom_strcpy(file, SAVEGAMENAME); + doom_concat(file, doom_ctoa(myargv[p + 1][0])); + doom_concat(file, ".dsg"); + } + G_LoadGame(file); + } + + + if (gameaction != ga_loadgame) + { + if (autostart || netgame) + G_InitNew(startskill, startepisode, startmap); + else + D_StartTitle(); // start up intro loop + + } + + // D_DoomLoop (); // never returns [ddps] Called by app + + if (demorecording) + G_BeginRecording(); + + if (M_CheckParm((char*)"-debugfile")) + { + char filename[20]; + //doom_sprintf(filename, "debug%i.txt", consoleplayer); + doom_strcpy(filename, "debug"); + doom_concat(filename, doom_itoa(consoleplayer, 10)); + doom_concat(filename, ".txt"); + //doom_print("debug output to: %s\n", filename); + doom_print("debug output to: "); + doom_print(filename); + doom_print("\n"); + debugfile = doom_open(filename, "w"); + } + + I_InitGraphics(); +} +#define NCMD_EXIT 0x80000000 +#define NCMD_RETRANSMIT 0x40000000 +#define NCMD_SETUP 0x20000000 +#define NCMD_KILL 0x10000000 // kill game +#define NCMD_CHECKSUM 0x0fffffff + +#define RESENDCOUNT 10 +#define PL_DRONE 0x80 // bit flag in doomdata->player + + +doomcom_t* doomcom; +doomdata_t* netbuffer; // points inside doomcom + +ticcmd_t localcmds[BACKUPTICS]; + +ticcmd_t netcmds[MAXPLAYERS][BACKUPTICS]; +int nettics[MAXNETNODES]; +doom_boolean nodeingame[MAXNETNODES]; // set doom_false as nodes leave game +doom_boolean remoteresend[MAXNETNODES]; // set when local needs tics +int resendto[MAXNETNODES]; // set when remote needs tics +int resendcount[MAXNETNODES]; + +int nodeforplayer[MAXPLAYERS]; + +int maketic; +int lastnettic; +int skiptics; +int ticdup; +int maxsend; // BACKUPTICS/(2*ticdup)-1 + +doom_boolean reboundpacket; +doomdata_t reboundstore; + +char exitmsg[80]; +int gametime; +int frametics[4]; +int frameon; +int frameskip[4]; +int oldnettics; + + +extern int viewangleoffset; +extern doom_boolean advancedemo; + + +void D_ProcessEvents(void); +void G_BuildTiccmd(ticcmd_t* cmd); +void D_DoAdvanceDemo(void); + + +// +// +// +int NetbufferSize(void) +{ + return (int)(long long)&(((doomdata_t*)0)->cmds[netbuffer->numtics]); +} + + +// +// Checksum +// +unsigned NetbufferChecksum(void) +{ + unsigned c; + int i, l; + + c = 0x1234567; + + // FIXME -endianess? +// #ifdef NORMALUNIX + return 0; // byte order problems +// #endif + + l = (NetbufferSize() - (int)(long long)&(((doomdata_t*)0)->retransmitfrom)) / 4; + for (i = 0; i < l; i++) + c += ((unsigned*)&netbuffer->retransmitfrom)[i] * (i + 1); + + return c & NCMD_CHECKSUM; +} + + +// +// +// +int ExpandTics(int low) +{ + int delta; + + delta = low - (maketic & 0xff); + + if (delta >= -64 && delta <= 64) + return (maketic & ~0xff) + low; + if (delta > 64) + return (maketic & ~0xff) - 256 + low; + if (delta < -64) + return (maketic & ~0xff) + 256 + low; + + //I_Error("Error: ExpandTics: strange value %i at maketic %i", low, maketic); + doom_strcpy(error_buf, "Error: ExpandTics: strange value "); + doom_concat(error_buf, doom_itoa(low, 10)); + doom_concat(error_buf, " at maketic "); + doom_concat(error_buf, doom_itoa(maketic, 10)); + I_Error(error_buf); + return 0; +} + + +// +// HSendPacket +// +void HSendPacket(int node, int flags) +{ + netbuffer->checksum = NetbufferChecksum() | flags; + + if (!node) + { + reboundstore = *netbuffer; + reboundpacket = doom_true; + return; + } + + if (demoplayback) + return; + + if (!netgame) + I_Error((char*)"Error: Tried to transmit to another node"); + + doomcom->command = CMD_SEND; + doomcom->remotenode = node; + doomcom->datalength = NetbufferSize(); + + if (debugfile) + { + int i; + int realretrans; + if (netbuffer->checksum & NCMD_RETRANSMIT) + realretrans = ExpandTics(netbuffer->retransmitfrom); + else + realretrans = -1; + + { + //fprintf(debugfile, "send (%i + %i, R %i) [%i] ", + // ExpandTics(netbuffer->starttic), + // netbuffer->numtics, realretrans, doomcom->datalength); + doom_fprint(debugfile, "send ("); + doom_fprint(debugfile, doom_itoa(ExpandTics(netbuffer->starttic), 10)); + doom_fprint(debugfile, " + "); + doom_fprint(debugfile, doom_itoa(netbuffer->numtics, 10)); + doom_fprint(debugfile, ", R "); + doom_fprint(debugfile, doom_itoa(realretrans, 10)); + doom_fprint(debugfile, ") ["); + doom_fprint(debugfile, doom_itoa(doomcom->datalength, 10)); + doom_fprint(debugfile, "] "); + } + + for (i = 0; i < doomcom->datalength; i++) + { + //fprintf(debugfile, "%i ", ((byte*)netbuffer)[i]); + doom_fprint(debugfile, doom_itoa(((byte*)netbuffer)[i], 10)); + doom_fprint(debugfile, " "); + } + + doom_fprint(debugfile, "\n"); + } + + I_NetCmd(); +} + + +// +// HGetPacket +// Returns doom_false if no packet is waiting +// +doom_boolean HGetPacket(void) +{ + if (reboundpacket) + { + *netbuffer = reboundstore; + doomcom->remotenode = 0; + reboundpacket = doom_false; + return doom_true; + } + + if (!netgame) + return doom_false; + + if (demoplayback) + return doom_false; + + doomcom->command = CMD_GET; + I_NetCmd(); + + if (doomcom->remotenode == -1) + return doom_false; + + if (doomcom->datalength != NetbufferSize()) + { + if (debugfile) + { + //fprintf(debugfile, "bad packet length %i\n", doomcom->datalength); + doom_fprint(debugfile, "bad packet length "); + doom_fprint(debugfile, doom_itoa(doomcom->datalength, 10)); + doom_fprint(debugfile, "\n"); + } + return doom_false; + } + + if (NetbufferChecksum() != (netbuffer->checksum & NCMD_CHECKSUM)) + { + if (debugfile) + { + doom_fprint(debugfile, "bad packet checksum\n"); + } + return doom_false; + } + + if (debugfile) + { + int realretrans; + int i; + + if (netbuffer->checksum & NCMD_SETUP) + { + doom_fprint(debugfile, "setup packet\n"); + } + else + { + if (netbuffer->checksum & NCMD_RETRANSMIT) + realretrans = ExpandTics(netbuffer->retransmitfrom); + else + realretrans = -1; + + { + //fprintf(debugfile, "get %i = (%i + %i, R %i)[%i] ", + // doomcom->remotenode, + // ExpandTics(netbuffer->starttic), + // netbuffer->numtics, realretrans, doomcom->datalength); + doom_fprint(debugfile, "get "); + doom_fprint(debugfile, doom_itoa(doomcom->remotenode, 10)); + doom_fprint(debugfile, " = ("); + doom_fprint(debugfile, doom_itoa(ExpandTics(netbuffer->starttic), 10)); + doom_fprint(debugfile, " + "); + doom_fprint(debugfile, doom_itoa(netbuffer->numtics, 10)); + doom_fprint(debugfile, ", R "); + doom_fprint(debugfile, doom_itoa(realretrans, 10)); + doom_fprint(debugfile, ")["); + doom_fprint(debugfile, doom_itoa(doomcom->datalength, 10)); + doom_fprint(debugfile, "] "); + } + + for (i = 0; i < doomcom->datalength; i++) + { + //fprintf(debugfile, "%i ", ((byte*)netbuffer)[i]); + doom_fprint(debugfile, doom_itoa(((byte*)netbuffer)[i], 10)); + doom_fprint(debugfile, " "); + } + doom_fprint(debugfile, "\n"); + } + } + return doom_true; +} + + +// +// GetPackets +// +void GetPackets(void) +{ + int netconsole; + int netnode; + ticcmd_t* src, *dest; + int realend; + int realstart; + + while (HGetPacket()) + { + if (netbuffer->checksum & NCMD_SETUP) + continue; // extra setup packet + + netconsole = netbuffer->player & ~PL_DRONE; + netnode = doomcom->remotenode; + + // to save bytes, only the low byte of tic numbers are sent + // Figure out what the rest of the bytes are + realstart = ExpandTics(netbuffer->starttic); + realend = (realstart + netbuffer->numtics); + + // check for exiting the game + if (netbuffer->checksum & NCMD_EXIT) + { + if (!nodeingame[netnode]) + continue; + nodeingame[netnode] = doom_false; + playeringame[netconsole] = doom_false; + doom_strcpy(exitmsg, "Player 1 left the game"); + exitmsg[7] += netconsole; + players[consoleplayer].message = exitmsg; + if (demorecording) + G_CheckDemoStatus(); + continue; + } + + // check for a remote game kill + if (netbuffer->checksum & NCMD_KILL) + I_Error((char*)"Error: Killed by network driver"); + + nodeforplayer[netconsole] = netnode; + + // check for retransmit request + if (resendcount[netnode] <= 0 + && (netbuffer->checksum & NCMD_RETRANSMIT)) + { + resendto[netnode] = ExpandTics(netbuffer->retransmitfrom); + if (debugfile) + { + //fprintf(debugfile, "retransmit from %i\n", resendto[netnode]); + doom_fprint(debugfile, "retransmit from "); + doom_fprint(debugfile, doom_itoa(resendto[netnode], 10)); + doom_fprint(debugfile, "\n"); + } + resendcount[netnode] = RESENDCOUNT; + } + else + resendcount[netnode]--; + + // check for out of order / duplicated packet + if (realend == nettics[netnode]) + continue; + + if (realend < nettics[netnode]) + { + if (debugfile) + { + //fprintf(debugfile, + // "out of order packet (%i + %i)\n", + // realstart, netbuffer->numtics); + doom_fprint(debugfile, "out of order packet ("); + doom_fprint(debugfile, doom_itoa(realstart, 10)); + doom_fprint(debugfile, " + "); + doom_fprint(debugfile, doom_itoa(netbuffer->numtics, 10)); + doom_fprint(debugfile, ")\n"); + } + continue; + } + + // check for a missed packet + if (realstart > nettics[netnode]) + { + // stop processing until the other system resends the missed tics + if (debugfile) + { + //fprintf(debugfile, + // "missed tics from %i (%i - %i)\n", + // netnode, realstart, nettics[netnode]); + doom_fprint(debugfile, "missed tics from "); + doom_fprint(debugfile, doom_itoa(netnode, 10)); + doom_fprint(debugfile, " ("); + doom_fprint(debugfile, doom_itoa(realstart, 10)); + doom_fprint(debugfile, " - "); + doom_fprint(debugfile, doom_itoa(nettics[netnode], 10)); + doom_fprint(debugfile, ")\n"); + } + remoteresend[netnode] = doom_true; + continue; + } + + // update command store from the packet + { + int start; + + remoteresend[netnode] = doom_false; + + start = nettics[netnode] - realstart; + src = &netbuffer->cmds[start]; + + while (nettics[netnode] < realend) + { + dest = &netcmds[netconsole][nettics[netnode] % BACKUPTICS]; + nettics[netnode]++; + *dest = *src; + src++; + } + } + } +} + + +// +// NetUpdate +// Builds ticcmds for console player, +// sends out a packet +// +void NetUpdate(void) +{ + int nowtime; + int newtics; + int i, j; + int realstart; + int gameticdiv; + + // check time + nowtime = I_GetTime() / ticdup; + newtics = nowtime - gametime; + gametime = nowtime; + + if (newtics <= 0) // nothing new to update + goto listen; + + if (skiptics <= newtics) + { + newtics -= skiptics; + skiptics = 0; + } + else + { + skiptics -= newtics; + newtics = 0; + } + + netbuffer->player = consoleplayer; + + // build new ticcmds for console player + gameticdiv = gametic / ticdup; + for (i = 0; i < newtics; i++) + { + I_StartTic(); + D_ProcessEvents(); + if (maketic - gameticdiv >= BACKUPTICS / 2 - 1) + break; // can't hold any more + + //doom_print ("mk:%i ",maketic); + G_BuildTiccmd(&localcmds[maketic % BACKUPTICS]); + maketic++; + } + + + if (singletics) + return; // singletic update is syncronous + + // send the packet to the other nodes + for (i = 0; i < doomcom->numnodes; i++) + if (nodeingame[i]) + { + netbuffer->starttic = realstart = resendto[i]; + netbuffer->numtics = maketic - realstart; + if (netbuffer->numtics > BACKUPTICS) + I_Error((char*)"Error: NetUpdate: netbuffer->numtics > BACKUPTICS"); + + resendto[i] = maketic - doomcom->extratics; + + for (j = 0; j < netbuffer->numtics; j++) + netbuffer->cmds[j] = + localcmds[(realstart + j) % BACKUPTICS]; + + if (remoteresend[i]) + { + netbuffer->retransmitfrom = nettics[i]; + HSendPacket(i, NCMD_RETRANSMIT); + } + else + { + netbuffer->retransmitfrom = 0; + HSendPacket(i, 0); + } + } + + // listen for other packets +listen: + GetPackets(); +} + + +// +// CheckAbort +// +void CheckAbort(void) +{ + event_t* ev; + int stoptic; + + stoptic = I_GetTime() + 2; + while (I_GetTime() < stoptic) + I_StartTic(); + + I_StartTic(); + for (; eventtail != eventhead + ; ) + { + ev = &events[eventtail]; + if (ev->type == ev_keydown && ev->data1 == KEY_ESCAPE) + I_Error((char*)"Error: Network game synchronization aborted."); + } + + eventtail++; + eventtail = (eventtail) & (MAXEVENTS - 1); +} + + +// +// D_ArbitrateNetStart +// +void D_ArbitrateNetStart(void) +{ + int i; + doom_boolean gotinfo[MAXNETNODES]; + + autostart = doom_true; + doom_memset(gotinfo, 0, sizeof(gotinfo)); + + if (doomcom->consoleplayer) + { + // listen for setup info from key player + doom_print("listening for network start info...\n"); + while (1) + { + CheckAbort(); + if (!HGetPacket()) + continue; + if (netbuffer->checksum & NCMD_SETUP) + { + if (netbuffer->player != VERSION) + I_Error((char*)"Error: Different DOOM versions cannot play a net game!"); + startskill = (skill_t)(netbuffer->retransmitfrom & 15); + deathmatch = (netbuffer->retransmitfrom & 0xc0) >> 6; + nomonsters = (netbuffer->retransmitfrom & 0x20) > 0; + respawnparm = (netbuffer->retransmitfrom & 0x10) > 0; + startmap = netbuffer->starttic & 0x3f; + startepisode = netbuffer->starttic >> 6; + return; + } + } + } + else + { + // key player, send the setup info + doom_print("sending network start info...\n"); + do + { + CheckAbort(); + for (i = 0; i < doomcom->numnodes; i++) + { + netbuffer->retransmitfrom = startskill; + if (deathmatch) + netbuffer->retransmitfrom |= (deathmatch << 6); + if (nomonsters) + netbuffer->retransmitfrom |= 0x20; + if (respawnparm) + netbuffer->retransmitfrom |= 0x10; + netbuffer->starttic = startepisode * 64 + startmap; + netbuffer->player = VERSION; + netbuffer->numtics = 0; + HSendPacket(i, NCMD_SETUP); + } + +#if 1 + for (i = 10; i && HGetPacket(); --i) + { + if ((netbuffer->player & 0x7f) < MAXNETNODES) + gotinfo[netbuffer->player & 0x7f] = doom_true; + } +#else + while (HGetPacket()) + { + gotinfo[netbuffer->player & 0x7f] = doom_true; + } +#endif + + for (i = 1; i < doomcom->numnodes; i++) + if (!gotinfo[i]) + break; + } while (i < doomcom->numnodes); + } +} + + +// +// D_CheckNetGame +// Works out player numbers among the net participants +// +void D_CheckNetGame(void) +{ + int i; + + for (i = 0; i < MAXNETNODES; i++) + { + nodeingame[i] = doom_false; + nettics[i] = 0; + remoteresend[i] = doom_false; // set when local needs tics + resendto[i] = 0; // which tic to start sending + } + + // I_InitNetwork sets doomcom and netgame + I_InitNetwork(); + if (doomcom->id != DOOMCOM_ID) + I_Error((char*)"Error: Doomcom buffer invalid!"); + + netbuffer = &doomcom->data; + consoleplayer = displayplayer = doomcom->consoleplayer; + if (netgame) + D_ArbitrateNetStart(); + + //doom_print("startskill %i deathmatch: %i startmap: %i startepisode: %i\n", + // startskill, deathmatch, startmap, startepisode); + doom_print("startskill "); + doom_print(doom_itoa(startskill, 10)); + doom_print(" deathmatch: "); + doom_print(doom_itoa(deathmatch, 10)); + doom_print(" startmap: "); + doom_print(doom_itoa(startmap, 10)); + doom_print(" startepisode: "); + doom_print(doom_itoa(startepisode, 10)); + doom_print("\n"); + + // read values out of doomcom + ticdup = doomcom->ticdup; + maxsend = BACKUPTICS / (2 * ticdup) - 1; + if (maxsend < 1) + maxsend = 1; + + for (i = 0; i < doomcom->numplayers; i++) + playeringame[i] = doom_true; + for (i = 0; i < doomcom->numnodes; i++) + nodeingame[i] = doom_true; + + //doom_print("player %i of %i (%i nodes)\n", + // consoleplayer + 1, doomcom->numplayers, doomcom->numnodes); + doom_print("player "); + doom_print(doom_itoa(consoleplayer + 1, 10)); + doom_print(" of "); + doom_print(doom_itoa(doomcom->numplayers, 10)); + doom_print(" ("); + doom_print(doom_itoa(doomcom->numnodes, 10)); + doom_print(" nodes)\n"); +} + + +// +// D_QuitNetGame +// Called before quitting to leave a net game +// without hanging the other players +// +void D_QuitNetGame(void) +{ + int i, j; + + if (debugfile) + doom_close(debugfile); + + if (!netgame || !usergame || consoleplayer == -1 || demoplayback) + return; + + // send a bunch of packets for security + netbuffer->player = consoleplayer; + netbuffer->numtics = 0; + for (i = 0; i < 4; i++) + { + for (j = 1; j < doomcom->numnodes; j++) + if (nodeingame[j]) + HSendPacket(j, NCMD_EXIT); + I_WaitVBL(1); + } +} + + +// +// TryRunTics +// +void TryRunTics(void) +{ + int i; + int lowtic; + int entertic; + static int oldentertics; + int realtics; + int availabletics; + int counts; + int numplaying; + + // get real tics + entertic = I_GetTime() / ticdup; + realtics = entertic - oldentertics; + oldentertics = entertic; + + // get available tics + NetUpdate(); + + lowtic = DOOM_MAXINT; + numplaying = 0; + for (i = 0; i < doomcom->numnodes; i++) + { + if (nodeingame[i]) + { + numplaying++; + if (nettics[i] < lowtic) + lowtic = nettics[i]; + } + } + availabletics = lowtic - gametic / ticdup; + + // decide how many tics to run + if (realtics < availabletics - 1) + counts = realtics + 1; + else if (realtics < availabletics) + counts = realtics; + else + counts = availabletics; + + if (counts < 1) + counts = 1; + + frameon++; + + if (debugfile) + { + //fprintf(debugfile, + // "=======real: %i avail: %i game: %i\n", + // realtics, availabletics, counts); + doom_fprint(debugfile, "=======real: "); + doom_fprint(debugfile, doom_itoa(realtics, 10)); + doom_fprint(debugfile, " avail: "); + doom_fprint(debugfile, doom_itoa(availabletics, 10)); + doom_fprint(debugfile, " game: "); + doom_fprint(debugfile, doom_itoa(counts, 10)); + doom_fprint(debugfile, "\n"); + } + + if (!demoplayback) + { + // ideally nettics[0] should be 1 - 3 tics above lowtic + // if we are consistantly slower, speed up time + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i]) + break; + if (consoleplayer == i) + { + // the key player does not adapt + } + else + { + if (nettics[0] <= nettics[nodeforplayer[i]]) + { + gametime--; + // doom_print ("-"); + } + frameskip[frameon & 3] = (oldnettics > nettics[nodeforplayer[i]]); + oldnettics = nettics[0]; + if (frameskip[0] && frameskip[1] && frameskip[2] && frameskip[3]) + { + skiptics = 1; + // doom_print ("+"); + } + } + }// demoplayback + + // wait for new tics if needed + while (lowtic < gametic / ticdup + counts) + { + NetUpdate(); + lowtic = DOOM_MAXINT; + + for (i = 0; i < doomcom->numnodes; i++) + if (nodeingame[i] && nettics[i] < lowtic) + lowtic = nettics[i]; + + if (lowtic < gametic / ticdup) + I_Error((char*)"Error: TryRunTics: lowtic < gametic"); + + // don't stay in here forever -- give the menu a chance to work + if (I_GetTime() / ticdup - entertic >= 20) + { + M_Ticker(); + return; + } + } + + // run the count * ticdup dics + while (counts--) + { + for (i = 0; i < ticdup; i++) + { + if (gametic / ticdup > lowtic) + I_Error((char*)"Error: gametic>lowtic"); + if (advancedemo) + D_DoAdvanceDemo(); + M_Ticker(); + G_Ticker(); + gametic++; + + // modify command for duplicated tics + if (i != ticdup - 1) + { + ticcmd_t* cmd; + int buf; + int j; + + buf = (gametic / ticdup) % BACKUPTICS; + for (j = 0; j < MAXPLAYERS; j++) + { + cmd = &netcmds[j][buf]; + cmd->chatchar = 0; + if (cmd->buttons & BT_SPECIAL) + cmd->buttons = 0; + } + } + } + NetUpdate(); // check for new console commands + } +} +GameMode_t gamemode = indetermined; +GameMission_t gamemission = doom; + +// Language. +Language_t language = english; + +// Set if homebrew PWAD stuff has been added. +doom_boolean modifiedgame; +char* endmsg[NUM_QUITMESSAGES + 1] = +{ + // DOOM1 + (char*)QUITMSG, + (char*)"please don't leave, there's more\ndemons to toast!", + (char*)"let's beat it -- this is turning\ninto a bloodbath!", + (char*)"i wouldn't leave if i were you.\ndos is much worse.", + (char*)"you're trying to say you like dos\nbetter than me, right?", + (char*)"don't leave yet -- there's a\ndemon around that corner!", + (char*)"ya know, next time you come in here\ni'm gonna toast ya.", + (char*)"go ahead and leave. see if i care.", + + // QuitDOOM II messages + (char*)"you want to quit?\nthen, thou hast lost an eighth!", + (char*)"don't go now, there's a \ndimensional shambler waiting\nat the dos prompt!", + (char*)"get outta here and go back\nto your boring programs.", + (char*)"if i were your boss, i'd \n deathmatch ya in a minute!", + (char*)"look, bud. you leave now\nand you forfeit your body count!", + (char*)"just leave. when you come\nback, i'll be waiting with a bat.", + (char*)"you're lucky i don't smack\nyou for thinking about leaving.", + + // FinalDOOM? + (char*)"fuck you, pussy!\nget the fuck out!", + (char*)"you quit and i'll jizz\nin your cystholes!", + (char*)"if you leave, i'll make\nthe lord drink my jizz.", + (char*)"hey, ron! can we say\n'fuck' in the game?", + (char*)"i'd leave: this is just\nmore monsters and levels.\nwhat a load.", + (char*)"suck it down, asshole!\nyou're a fucking wimp!", + (char*)"don't quit now! we're \nstill spending your money!", + + // Internal debug. Different style, too. + (char*)"THIS IS NO MESSAGE!\nPage intentionally left blank." +}; +#define TEXTSPEED 3 +#define TEXTWAIT 250 + + +typedef struct +{ + char* name; + mobjtype_t type; +} castinfo_t; + + +// Stage of animation: +// 0 = text, 1 = art screen, 2 = character cast +int finalestage; + +int finalecount; + +char* e1text = (char*)E1TEXT; +char* e2text = (char*)E2TEXT; +char* e3text = (char*)E3TEXT; +char* e4text = (char*)E4TEXT; + +char* c1text = (char*)C1TEXT; +char* c2text = (char*)C2TEXT; +char* c3text = (char*)C3TEXT; +char* c4text = (char*)C4TEXT; +char* c5text = (char*)C5TEXT; +char* c6text = (char*)C6TEXT; + +char* p1text = (char*)P1TEXT; +char* p2text = (char*)P2TEXT; +char* p3text = (char*)P3TEXT; +char* p4text = (char*)P4TEXT; +char* p5text = (char*)P5TEXT; +char* p6text = (char*)P6TEXT; + +char* t1text = (char*)T1TEXT; +char* t2text = (char*)T2TEXT; +char* t3text = (char*)T3TEXT; +char* t4text = (char*)T4TEXT; +char* t5text = (char*)T5TEXT; +char* t6text = (char*)T6TEXT; + +char* finaletext; +char* finaleflat; + +castinfo_t castorder[] = { + {(char*)CC_ZOMBIE, MT_POSSESSED}, + {(char*)CC_SHOTGUN, MT_SHOTGUY}, + {(char*)CC_HEAVY, MT_CHAINGUY}, + {(char*)CC_IMP, MT_TROOP}, + {(char*)CC_DEMON, MT_SERGEANT}, + {(char*)CC_LOST, MT_SKULL}, + {(char*)CC_CACO, MT_HEAD}, + {(char*)CC_HELL, MT_KNIGHT}, + {(char*)CC_BARON, MT_BRUISER}, + {(char*)CC_ARACH, MT_BABY}, + {(char*)CC_PAIN, MT_PAIN}, + {(char*)CC_REVEN, MT_UNDEAD}, + {(char*)CC_MANCU, MT_FATSO}, + {(char*)CC_ARCH, MT_VILE}, + {(char*)CC_SPIDER, MT_SPIDER}, + {(char*)CC_CYBER, MT_CYBORG}, + {(char*)CC_HERO, MT_PLAYER}, + + {0,(mobjtype_t)0} +}; + +int castnum; +int casttics; +state_t* caststate; +doom_boolean castdeath; +int castframes; +int castonmelee; +doom_boolean castattacking; + + +// +// F_StartCast +// +extern gamestate_t wipegamestate; +extern patch_t* hu_font[HU_FONTSIZE]; + + +void F_StartCast(void); +void F_CastTicker(void); +doom_boolean F_CastResponder(event_t* ev); +void F_CastDrawer(void); +void V_DrawPatchFlipped(int x, int y, int scrn, patch_t* patch); + + +// +// F_StartFinale +// +void F_StartFinale(void) +{ + gameaction = ga_nothing; + gamestate = GS_FINALE; + viewactive = doom_false; + automapactive = doom_false; + + // Okay - IWAD dependend stuff. + // This has been changed severly, and + // some stuff might have changed in the process. + switch (gamemode) + { + + // DOOM 1 - E1, E3 or E4, but each nine missions + case shareware: + case registered: + case retail: + { + S_ChangeMusic(mus_victor, doom_true); + + switch (gameepisode) + { + case 1: + finaleflat = (char*)"FLOOR4_8"; + finaletext = e1text; + break; + case 2: + finaleflat = (char*)"SFLR6_1"; + finaletext = e2text; + break; + case 3: + finaleflat = (char*)"MFLR8_4"; + finaletext = e3text; + break; + case 4: + finaleflat = (char*)"MFLR8_3"; + finaletext = e4text; + break; + default: + // Ouch. + break; + } + break; + } + + // DOOM II and missions packs with E1, M34 + case commercial: + { + S_ChangeMusic(mus_read_m, doom_true); + + switch (gamemap) + { + case 6: + finaleflat = (char*)"SLIME16"; + finaletext = c1text; + break; + case 11: + finaleflat = (char*)"RROCK14"; + finaletext = c2text; + break; + case 20: + finaleflat = (char*)"RROCK07"; + finaletext = c3text; + break; + case 30: + finaleflat = (char*)"RROCK17"; + finaletext = c4text; + break; + case 15: + finaleflat = (char*)"RROCK13"; + finaletext = c5text; + break; + case 31: + finaleflat = (char*)"RROCK19"; + finaletext = c6text; + break; + default: + // Ouch. + break; + } + break; + } + + + // Indeterminate. + default: + S_ChangeMusic(mus_read_m, doom_true); + finaleflat = (char*)"F_SKY1"; // Not used anywhere else. + finaletext = c1text; // FIXME - other text, music? + break; + } + + finalestage = 0; + finalecount = 0; +} + + +doom_boolean F_Responder(event_t* event) +{ + if (finalestage == 2) + return F_CastResponder(event); + + return doom_false; +} + + +// +// F_Ticker +// +void F_Ticker(void) +{ + int i; + + // check for skipping + if ((gamemode == commercial) + && (finalecount > 50)) + { + // go on to the next level + for (i = 0; i < MAXPLAYERS; i++) + if (players[i].cmd.buttons) + break; + + if (i < MAXPLAYERS) + { + if (gamemap == 30) + F_StartCast(); + else + gameaction = ga_worlddone; + } + } + + // advance animation + finalecount++; + + if (finalestage == 2) + { + F_CastTicker(); + return; + } + + if (gamemode == commercial) + return; + + if (!finalestage && finalecount > doom_strlen(finaletext) * TEXTSPEED + TEXTWAIT) + { + finalecount = 0; + finalestage = 1; + wipegamestate = (gamestate_t)-1; // force a wipe + if (gameepisode == 3) + S_StartMusic(mus_bunny); + } +} + + +// +// F_TextWrite +// +void F_TextWrite(void) +{ + byte* src; + byte* dest; + + int x, y, w; + int count; + char* ch; + int c; + int cx; + int cy; + + // erase the entire screen to a tiled background + src = (unsigned char*)W_CacheLumpName(finaleflat, PU_CACHE); + dest = screens[0]; + + for (y = 0; y < SCREENHEIGHT; y++) + { + for (x = 0; x < SCREENWIDTH / 64; x++) + { + doom_memcpy(dest, src + ((y & 63) << 6), 64); + dest += 64; + } + if (SCREENWIDTH & 63) + { + doom_memcpy(dest, src + ((y & 63) << 6), SCREENWIDTH & 63); + dest += (SCREENWIDTH & 63); + } + } + + V_MarkRect(0, 0, SCREENWIDTH, SCREENHEIGHT); + + // draw some of the text onto the screen + cx = 10; + cy = 10; + ch = finaletext; + + count = (finalecount - 10) / TEXTSPEED; + if (count < 0) + count = 0; + for (; count; count--) + { + c = *ch++; + if (!c) + break; + if (c == '\n') + { + cx = 10; + cy += 11; + continue; + } + + c = doom_toupper(c) - HU_FONTSTART; + if (c < 0 || c> HU_FONTSIZE) + { + cx += 4; + continue; + } + + w = SHORT(hu_font[c]->width); + if (cx + w > SCREENWIDTH) + break; + V_DrawPatch(cx, cy, 0, hu_font[c]); + cx += w; + } +} + + +// +// Final DOOM 2 animation +// Casting by id Software. +// in order of appearance +// +void F_StartCast(void) +{ + wipegamestate = (gamestate_t)-1; // force a screen wipe + castnum = 0; + caststate = &states[mobjinfo[castorder[castnum].type].seestate]; + casttics = caststate->tics; + castdeath = doom_false; + finalestage = 2; + castframes = 0; + castonmelee = 0; + castattacking = doom_false; + S_ChangeMusic(mus_evil, doom_true); +} + + +// +// F_CastTicker +// +void F_CastTicker(void) +{ + int st; + int sfx; + + if (--casttics > 0) + return; // not time to change state yet + + if (caststate->tics == -1 || caststate->nextstate == S_NULL) + { + // switch from deathstate to next monster + castnum++; + castdeath = doom_false; + if (castorder[castnum].name == 0) + castnum = 0; + if (mobjinfo[castorder[castnum].type].seesound) + S_StartSound(0, mobjinfo[castorder[castnum].type].seesound); + caststate = &states[mobjinfo[castorder[castnum].type].seestate]; + castframes = 0; + } + else + { + // just advance to next state in animation + if (caststate == &states[S_PLAY_ATK1]) + goto stopattack; // Oh, gross hack! + st = caststate->nextstate; + caststate = &states[st]; + castframes++; + + // sound hacks.... + switch (st) + { + case S_PLAY_ATK1: sfx = sfx_dshtgn; break; + case S_POSS_ATK2: sfx = sfx_pistol; break; + case S_SPOS_ATK2: sfx = sfx_shotgn; break; + case S_VILE_ATK2: sfx = sfx_vilatk; break; + case S_SKEL_FIST2: sfx = sfx_skeswg; break; + case S_SKEL_FIST4: sfx = sfx_skepch; break; + case S_SKEL_MISS2: sfx = sfx_skeatk; break; + case S_FATT_ATK8: + case S_FATT_ATK5: + case S_FATT_ATK2: sfx = sfx_firsht; break; + case S_CPOS_ATK2: + case S_CPOS_ATK3: + case S_CPOS_ATK4: sfx = sfx_shotgn; break; + case S_TROO_ATK3: sfx = sfx_claw; break; + case S_SARG_ATK2: sfx = sfx_sgtatk; break; + case S_BOSS_ATK2: + case S_BOS2_ATK2: + case S_HEAD_ATK2: sfx = sfx_firsht; break; + case S_SKULL_ATK2: sfx = sfx_sklatk; break; + case S_SPID_ATK2: + case S_SPID_ATK3: sfx = sfx_shotgn; break; + case S_BSPI_ATK2: sfx = sfx_plasma; break; + case S_CYBER_ATK2: + case S_CYBER_ATK4: + case S_CYBER_ATK6: sfx = sfx_rlaunc; break; + case S_PAIN_ATK3: sfx = sfx_sklatk; break; + default: sfx = 0; break; + } + + if (sfx) + S_StartSound(0, sfx); + } + + if (castframes == 12) + { + // go into attack frame + castattacking = doom_true; + if (castonmelee) + caststate = &states[mobjinfo[castorder[castnum].type].meleestate]; + else + caststate = &states[mobjinfo[castorder[castnum].type].missilestate]; + castonmelee ^= 1; + if (caststate == &states[S_NULL]) + { + if (castonmelee) + caststate = + &states[mobjinfo[castorder[castnum].type].meleestate]; + else + caststate = + &states[mobjinfo[castorder[castnum].type].missilestate]; + } + } + + if (castattacking) + { + if (castframes == 24 + || caststate == &states[mobjinfo[castorder[castnum].type].seestate]) + { +stopattack: + castattacking = doom_false; + castframes = 0; + caststate = &states[mobjinfo[castorder[castnum].type].seestate]; + } + } + + casttics = caststate->tics; + if (casttics == -1) + casttics = 15; +} + + +// +// F_CastResponder +// +doom_boolean F_CastResponder(event_t* ev) +{ + if (ev->type != ev_keydown) + return doom_false; + + if (castdeath) + return doom_true; // already in dying frames + + // go into death frame + castdeath = doom_true; + caststate = &states[mobjinfo[castorder[castnum].type].deathstate]; + casttics = caststate->tics; + castframes = 0; + castattacking = doom_false; + if (mobjinfo[castorder[castnum].type].deathsound) + S_StartSound(0, mobjinfo[castorder[castnum].type].deathsound); + + return doom_true; +} + + +void F_CastPrint(char* text) +{ + char* ch; + int c; + int cx; + int w; + int width; + + // find width + ch = text; + width = 0; + + while (ch) + { + c = *ch++; + if (!c) + break; + c = doom_toupper(c) - HU_FONTSTART; + if (c < 0 || c> HU_FONTSIZE) + { + width += 4; + continue; + } + + w = SHORT(hu_font[c]->width); + width += w; + } + + // draw it + cx = 160 - width / 2; + ch = text; + while (ch) + { + c = *ch++; + if (!c) + break; + c = doom_toupper(c) - HU_FONTSTART; + if (c < 0 || c> HU_FONTSIZE) + { + cx += 4; + continue; + } + + w = SHORT(hu_font[c]->width); + V_DrawPatch(cx, 180, 0, hu_font[c]); + cx += w; + } +} + + +// +// F_CastDrawer +// +void F_CastDrawer(void) +{ + spritedef_t* sprdef; + spriteframe_t* sprframe; + int lump; + doom_boolean flip; + patch_t* patch; + + // erase the entire screen to a background + V_DrawPatch(0, 0, 0, (patch_t*)W_CacheLumpName((char*)"BOSSBACK", PU_CACHE)); + + F_CastPrint(castorder[castnum].name); + + // draw the current frame in the middle of the screen + sprdef = &sprites[caststate->sprite]; + sprframe = &sprdef->spriteframes[caststate->frame & FF_FRAMEMASK]; + lump = sprframe->lump[0]; + flip = (doom_boolean)sprframe->flip[0]; + + patch = (patch_t*)W_CacheLumpNum(lump + firstspritelump, PU_CACHE); + if (flip) + V_DrawPatchFlipped(160, 170, 0, patch); + else + V_DrawPatch(160, 170, 0, patch); +} + + +// +// F_DrawPatchCol +// +void F_DrawPatchCol(int x, patch_t* patch, int col) +{ + column_t* column; + byte* source; + byte* dest; + byte* desttop; + int count; + + column = (column_t*)((byte*)patch + LONG(patch->columnofs[col])); + desttop = screens[0] + x; + + // step through the posts in a column + while (column->topdelta != 0xff) + { + source = (byte*)column + 3; + dest = desttop + column->topdelta * SCREENWIDTH; + count = column->length; + + while (count--) + { + *dest = *source++; + dest += SCREENWIDTH; + } + column = (column_t*)((byte*)column + column->length + 4); + } +} + + +// +// F_BunnyScroll +// +void F_BunnyScroll(void) +{ + int scrolled; + int x; + patch_t* p1; + patch_t* p2; + char name[10]; + int stage; + static int laststage; + + p1 = (patch_t*)W_CacheLumpName((char*)"PFUB2", PU_LEVEL); + p2 = (patch_t*)W_CacheLumpName((char*)"PFUB1", PU_LEVEL); + + V_MarkRect(0, 0, SCREENWIDTH, SCREENHEIGHT); + + scrolled = 320 - (finalecount - 230) / 2; + if (scrolled > 320) + scrolled = 320; + if (scrolled < 0) + scrolled = 0; + + for (x = 0; x < SCREENWIDTH; x++) + { + if (x + scrolled < 320) + F_DrawPatchCol(x, p1, x + scrolled); + else + F_DrawPatchCol(x, p2, x + scrolled - 320); + } + + if (finalecount < 1130) + return; + if (finalecount < 1180) + { + V_DrawPatch((SCREENWIDTH - 13 * 8) / 2, + (SCREENHEIGHT - 8 * 8) / 2, 0, (patch_t*)W_CacheLumpName((char*)"END0", PU_CACHE)); + laststage = 0; + return; + } + + stage = (finalecount - 1180) / 5; + if (stage > 6) + stage = 6; + if (stage > laststage) + { + S_StartSound(0, sfx_pistol); + laststage = stage; + } + + //doom_sprintf(name, "END%i", stage); + doom_strcpy(name, "END"); + doom_concat(name, doom_itoa(stage, 10)); + V_DrawPatch((SCREENWIDTH - 13 * 8) / 2, (SCREENHEIGHT - 8 * 8) / 2, 0, (patch_t*)W_CacheLumpName((char*)name, PU_CACHE)); +} + + +// +// F_Drawer +// +void F_Drawer(void) +{ + if (finalestage == 2) + { + F_CastDrawer(); + return; + } + + if (!finalestage) + F_TextWrite(); + else + { + switch (gameepisode) + { + case 1: + if (gamemode == retail) + V_DrawPatch(0, 0, 0, + (patch_t*)W_CacheLumpName((char*)"CREDIT", PU_CACHE)); + else + V_DrawPatch(0, 0, 0, + (patch_t*)W_CacheLumpName((char*)"HELP2", PU_CACHE)); + break; + case 2: + V_DrawPatch(0, 0, 0, + (patch_t*)W_CacheLumpName((char*)"VICTORY2", PU_CACHE)); + break; + case 3: + F_BunnyScroll(); + break; + case 4: + V_DrawPatch(0, 0, 0, + (patch_t*)W_CacheLumpName((char*)"ENDPIC", PU_CACHE)); + break; + } + } +} +static doom_boolean go = 0; + +static byte* wipe_scr_start; +static byte* wipe_scr_end; +static byte* wipe_scr; + +static int* y; + + +void wipe_shittyColMajorXform(short* array, int width, int height) +{ + int x; + int y; + short* dest; + + dest = (short*)Z_Malloc(width * height * sizeof(short), PU_STATIC, 0); + + for (y = 0; y < height; y++) + for (x = 0; x < width; x++) + dest[x * height + y] = array[y * width + x]; + + doom_memcpy(array, dest, width * height * 2); + + Z_Free(dest); +} + + +int wipe_initColorXForm(int width, int height, int ticks) +{ + doom_memcpy(wipe_scr, wipe_scr_start, width * height); + return 0; +} + + +int wipe_doColorXForm(int width, int height, int ticks) +{ + doom_boolean changed; + byte* w; + byte* e; + int newval; + + changed = doom_false; + w = wipe_scr; + e = wipe_scr_end; + + while (w != wipe_scr + width * height) + { + if (*w != *e) + { + if (*w > *e) + { + newval = *w - ticks; + if (newval < *e) + *w = *e; + else + *w = newval; + changed = doom_true; + } + else if (*w < *e) + { + newval = *w + ticks; + if (newval > *e) + *w = *e; + else + *w = newval; + changed = doom_true; + } + } + w++; + e++; + } + + return !changed; +} + + +int wipe_exitColorXForm(int width, int height, int ticks) +{ + return 0; +} + + +int wipe_initMelt(int width, int height, int ticks) +{ + int i, r; + + // copy start screen to main screen + doom_memcpy(wipe_scr, wipe_scr_start, width * height); + + // makes this wipe faster (in theory) + // to have stuff in column-major format + wipe_shittyColMajorXform((short*)wipe_scr_start, width / 2, height); + wipe_shittyColMajorXform((short*)wipe_scr_end, width / 2, height); + + // setup initial column positions + // (y<0 => not ready to scroll yet) + y = (int*)Z_Malloc(width * sizeof(int), PU_STATIC, 0); + y[0] = -(M_Random() % 16); + for (i = 1; i < width; i++) + { + r = (M_Random() % 3) - 1; + y[i] = y[i - 1] + r; + if (y[i] > 0) y[i] = 0; + else if (y[i] == -16) y[i] = -15; + } + + return 0; +} + + +int wipe_doMelt(int width, int height, int ticks) +{ + int i; + int j; + int dy; + int idx; + + short* s; + short* d; + doom_boolean done = doom_true; + + width /= 2; + + while (ticks--) + { + for (i = 0; i < width; i++) + { + if (y[i] < 0) + { + y[i]++; done = doom_false; + } + else if (y[i] < height) + { + dy = (y[i] < 16) ? y[i] + 1 : 8; + if (y[i] + dy >= height) dy = height - y[i]; + s = &((short*)wipe_scr_end)[i * height + y[i]]; + d = &((short*)wipe_scr)[y[i] * width + i]; + idx = 0; + for (j = dy; j; j--) + { + d[idx] = *(s++); + idx += width; + } + y[i] += dy; + s = &((short*)wipe_scr_start)[i * height]; + d = &((short*)wipe_scr)[y[i] * width + i]; + idx = 0; + for (j = height - y[i]; j; j--) + { + d[idx] = *(s++); + idx += width; + } + done = doom_false; + } + } + } + + return done; +} + + +int wipe_exitMelt(int width, int height, int ticks) +{ + Z_Free(y); + return 0; +} + + +int wipe_StartScreen(int x, int y, int width, int height) +{ + wipe_scr_start = screens[2]; + I_ReadScreen(wipe_scr_start); + return 0; +} + + +int wipe_EndScreen(int x, int y, int width, int height) +{ + wipe_scr_end = screens[3]; + I_ReadScreen(wipe_scr_end); + V_DrawBlock(x, y, 0, width, height, wipe_scr_start); // restore start scr. + return 0; +} + + +int wipe_ScreenWipe(int wipeno, int x, int y, int width, int height, int ticks) +{ + int rc; + static int (*wipes[])(int, int, int) = + { + wipe_initColorXForm, wipe_doColorXForm, wipe_exitColorXForm, + wipe_initMelt, wipe_doMelt, wipe_exitMelt + }; + + void V_MarkRect(int, int, int, int); + + // initial stuff + if (!go) + { + go = 1; + // wipe_scr = (byte *) Z_Malloc(width*height, PU_STATIC, 0); // DEBUG + wipe_scr = screens[0]; + (*wipes[wipeno * 3])(width, height, ticks); + } + + // do a piece of wipe-in + V_MarkRect(0, 0, width, height); + rc = (*wipes[wipeno * 3 + 1])(width, height, ticks); + // V_DrawBlock(x, y, 0, width, height, wipe_scr); // DEBUG + + // final stuff + if (rc) + { + go = 0; + (*wipes[wipeno * 3 + 2])(width, height, ticks); + } + + return !go; +} +#define SAVEGAMESIZE 0x2c000 +#define SAVESTRINGSIZE 24 +#define MAXPLMOVE (forwardmove[1]) +#define TURBOTHRESHOLD 0x32 +#define SLOWTURNTICS 6 +#define NUMKEYS 256 +#define BODYQUESIZE 32 +#define VERSIONSIZE 16 +#define DEMOMARKER 0x80 + + +// Prototypes +doom_boolean G_CheckDemoStatus(void); +void G_ReadDemoTiccmd(ticcmd_t* cmd); +void G_WriteDemoTiccmd(ticcmd_t* cmd); +void G_PlayerReborn(int player); +void G_InitNew(skill_t skill, int episode, int map); +void G_DoReborn(int playernum); +void G_DoLoadLevel(void); +void G_DoNewGame(void); +void G_DoLoadGame(void); +void G_DoPlayDemo(void); +void G_DoCompleted(void); +void G_DoWorldDone(void); +void G_DoSaveGame(void); +void P_SpawnPlayer(mapthing_t* mthing); +void R_ExecuteSetViewSize(void); + + +gameaction_t gameaction; +gamestate_t gamestate; +skill_t gameskill; +doom_boolean respawnmonsters; +int gameepisode; +int gamemap; + +doom_boolean paused; +doom_boolean sendpause; // send a pause event next tic +doom_boolean sendsave; // send a save event next tic +doom_boolean usergame; // ok to save / end game + +doom_boolean timingdemo; // if doom_true, exit with report on completion +doom_boolean nodrawers; // for comparative timing purposes +doom_boolean noblit; // for comparative timing purposes +int starttime; // for comparative timing purposes + +doom_boolean viewactive; + +doom_boolean deathmatch; // only if started as net death +doom_boolean netgame; // only doom_true if packets are broadcast +doom_boolean playeringame[MAXPLAYERS]; +player_t players[MAXPLAYERS]; + +int consoleplayer; // player taking events and displaying +int displayplayer; // view being displayed +int gametic; +int levelstarttic; // gametic at level start +int totalkills, totalitems, totalsecret; // for intermission + +char demoname[32]; +doom_boolean demorecording; +doom_boolean demoplayback; +doom_boolean netdemo; +byte* demobuffer; +byte* demo_p; +byte* demoend; +doom_boolean singledemo; // quit after playing a demo from cmdline + +doom_boolean precache = doom_true; // if doom_true, load all graphics at start + +wbstartstruct_t wminfo; // parms for world map / intermission + +short consistancy[MAXPLAYERS][BACKUPTICS]; + +byte* savebuffer; + +// +// controls (have defaults) +// +int key_right; +int key_left; + +int key_up; +int key_down; +int key_strafeleft; +int key_straferight; +int key_fire; +int key_use; +int key_strafe; +int key_speed; + +int mousebfire; +int mousebstrafe; +int mousebforward; +int mousemove; + +int joybfire; +int joybstrafe; +int joybuse; +int joybspeed; + +fixed_t forwardmove[2] = { 0x19, 0x32 }; +fixed_t sidemove[2] = { 0x18, 0x28 }; +fixed_t angleturn[3] = { 640, 1280, 320 }; // + slow turn + +doom_boolean gamekeydown[NUMKEYS]; +int turnheld; // for accelerative turning + +doom_boolean mousearray[4]; +doom_boolean* mousebuttons = &mousearray[1]; // allow [-1] + +// mouse values are used once +int mousex; +int mousey; + +int dclicktime; +int dclickstate; +int dclicks; +int dclicktime2; +int dclickstate2; +int dclicks2; + +// joystick values are repeated +int joyxmove; +int joyymove; +doom_boolean joyarray[5]; +doom_boolean* joybuttons = &joyarray[1]; // allow [-1] + +int savegameslot; +char savedescription[32]; + +mobj_t* bodyque[BODYQUESIZE]; +int bodyqueslot; + +void* statcopy; // for statistics driver + +// DOOM Par Times +int pars[4][10] = +{ + {0}, + {0,30,75,120,90,165,180,180,30,165}, + {0,90,90,90,120,90,360,240,30,170}, + {0,90,45,90,150,90,90,165,30,135} +}; + +// DOOM II Par Times +int cpars[32] = +{ + 30,90,120,120,90,150,120,120,270,90, // 1-10 + 210,150,150,150,210,150,420,150,210,150, // 11-20 + 240,150,180,150,150,300,330,420,300,180, // 21-30 + 120,30 // 31-32 +}; + +doom_boolean secretexit; + +char savename[256]; + +skill_t d_skill; +int d_episode; +int d_map; + +char* defdemoname; + + +extern gamestate_t wipegamestate; +extern char* pagename; +extern doom_boolean setsizeneeded; + +// The sky texture to be used instead of the F_SKY1 dummy. +extern int skytexture; + + +int G_CmdChecksum(ticcmd_t* cmd) +{ + int i; + int sum = 0; + + for (i = 0; i < sizeof(*cmd) / 4 - 1; i++) + sum += ((int*)cmd)[i]; + + return sum; +} + + +// +// G_BuildTiccmd +// Builds a ticcmd from all of the available inputs +// or reads it from the demo buffer. +// If recording a demo, write it out +// +void G_BuildTiccmd(ticcmd_t* cmd) +{ + int i; + doom_boolean strafe; + doom_boolean bstrafe; + int speed; + int tspeed; + int forward; + int side; + + ticcmd_t* base; + + base = I_BaseTiccmd(); // empty, or external driver + doom_memcpy(cmd, base, sizeof(*cmd)); + + cmd->consistancy = + consistancy[consoleplayer][maketic % BACKUPTICS]; + + + strafe = gamekeydown[key_strafe] || mousebuttons[mousebstrafe] + || joybuttons[joybstrafe]; + + extern int always_run; + doom_boolean running = always_run ? (gamekeydown[key_speed] ? doom_false : doom_true) : (gamekeydown[key_speed] ? doom_true : doom_false); + speed = running || joybuttons[joybspeed]; + + forward = side = 0; + + // use two stage accelerative turning + // on the keyboard and joystick + if (joyxmove < 0 + || joyxmove > 0 + || gamekeydown[key_right] + || gamekeydown[key_left]) + turnheld += ticdup; + else + turnheld = 0; + + if (turnheld < SLOWTURNTICS) + tspeed = 2; // slow turn + else + tspeed = speed; + + // let movement keys cancel each other out + if (strafe) + { + if (gamekeydown[key_right]) + { + side += sidemove[speed]; + } + if (gamekeydown[key_left]) + { + side -= sidemove[speed]; + } + if (joyxmove > 0) + side += sidemove[speed]; + if (joyxmove < 0) + side -= sidemove[speed]; + + } + else + { + if (gamekeydown[key_right]) + cmd->angleturn -= angleturn[tspeed]; + if (gamekeydown[key_left]) + cmd->angleturn += angleturn[tspeed]; + if (joyxmove > 0) + cmd->angleturn -= angleturn[tspeed]; + if (joyxmove < 0) + cmd->angleturn += angleturn[tspeed]; + } + + if (gamekeydown[key_up]) + { + forward += forwardmove[speed]; + } + if (gamekeydown[key_down]) + { + forward -= forwardmove[speed]; + } + if (joyymove < 0) + forward += forwardmove[speed]; + if (joyymove > 0) + forward -= forwardmove[speed]; + if (gamekeydown[key_straferight]) + side += sidemove[speed]; + if (gamekeydown[key_strafeleft]) + side -= sidemove[speed]; + + // buttons + cmd->chatchar = HU_dequeueChatChar(); + + if (gamekeydown[key_fire] || mousebuttons[mousebfire] + || joybuttons[joybfire]) + cmd->buttons |= BT_ATTACK; + + if (gamekeydown[key_use] || joybuttons[joybuse]) + { + cmd->buttons |= BT_USE; + // clear double clicks if hit use button + dclicks = 0; + } + + // chainsaw overrides + for (i = 0; i < NUMWEAPONS - 1; i++) + if (gamekeydown['1' + i]) + { + cmd->buttons |= BT_CHANGE; + cmd->buttons |= i << BT_WEAPONSHIFT; + break; + } + + // mouse + if (mousebuttons[mousebforward]) + forward += forwardmove[speed]; + + // forward double click + if ((int)mousebuttons[mousebforward] != dclickstate && dclicktime > 1) + { + dclickstate = mousebuttons[mousebforward]; + if (dclickstate) + dclicks++; + if (dclicks == 2) + { + cmd->buttons |= BT_USE; + dclicks = 0; + } + else + dclicktime = 0; + } + else + { + dclicktime += ticdup; + if (dclicktime > 20) + { + dclicks = 0; + dclickstate = 0; + } + } + + // strafe double click + bstrafe = + mousebuttons[mousebstrafe] + || joybuttons[joybstrafe]; + if ((bstrafe != 0) != (dclickstate2 != 0) && dclicktime2 > 1) + { + dclickstate2 = bstrafe; + if (dclickstate2) + dclicks2++; + if (dclicks2 == 2) + { + cmd->buttons |= BT_USE; + dclicks2 = 0; + } + else + dclicktime2 = 0; + } + else + { + dclicktime2 += ticdup; + if (dclicktime2 > 20) + { + dclicks2 = 0; + dclickstate2 = 0; + } + } + + if (mousemove) + forward += mousey; + if (strafe) + side += mousex * 2; + else + cmd->angleturn -= mousex * 0x8; + + mousex = mousey = 0; + + if (forward > MAXPLMOVE) + forward = MAXPLMOVE; + else if (forward < -MAXPLMOVE) + forward = -MAXPLMOVE; + if (side > MAXPLMOVE) + side = MAXPLMOVE; + else if (side < -MAXPLMOVE) + side = -MAXPLMOVE; + + cmd->forwardmove += forward; + cmd->sidemove += side; + + // special buttons + if (sendpause) + { + sendpause = doom_false; + cmd->buttons = BT_SPECIAL | BTS_PAUSE; + } + + if (sendsave) + { + sendsave = doom_false; + cmd->buttons = BT_SPECIAL | BTS_SAVEGAME | (savegameslot << BTS_SAVESHIFT); + } +} + + +// +// G_DoLoadLevel +// +void G_DoLoadLevel(void) +{ + int i; + + // Set the sky map. + // First thing, we have a dummy sky texture name, + // a flat. The data is in the WAD only because + // we look for an actual index, instead of simply + // setting one. + skyflatnum = R_FlatNumForName((char*)SKYFLATNAME); + + // DOOM determines the sky texture to be used + // depending on the current episode, and the game version. + if ((gamemode == commercial) + || (gamemode == (GameMode_t)pack_tnt) + || (gamemode == (GameMode_t)pack_plut)) + { + skytexture = R_TextureNumForName((char*)"SKY3"); + if (gamemap < 12) + skytexture = R_TextureNumForName((char*)"SKY1"); + else + if (gamemap < 21) + skytexture = R_TextureNumForName((char*)"SKY2"); + } + + levelstarttic = gametic; // for time calculation + + if (wipegamestate == GS_LEVEL) + wipegamestate = (gamestate_t)-1; // force a wipe + + gamestate = GS_LEVEL; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] && players[i].playerstate == PST_DEAD) + players[i].playerstate = PST_REBORN; + doom_memset(players[i].frags, 0, sizeof(players[i].frags)); + } + + P_SetupLevel(gameepisode, gamemap, 0, gameskill); + displayplayer = consoleplayer; // view the guy you are playing + starttime = I_GetTime(); + gameaction = ga_nothing; + Z_CheckHeap(); + + // clear cmd building stuff + doom_memset(gamekeydown, 0, sizeof(gamekeydown)); + joyxmove = joyymove = 0; + mousex = mousey = 0; + sendpause = sendsave = paused = doom_false; + doom_memset(mousebuttons, 0, sizeof(*mousebuttons) * 3); + doom_memset(joybuttons, 0, sizeof(*joybuttons) * 4); +} + + +// +// G_Responder +// Get info needed to make ticcmd_ts for the players. +// +doom_boolean G_Responder(event_t* ev) +{ + // allow spy mode changes even during the demo + if (gamestate == GS_LEVEL && ev->type == ev_keydown + && ev->data1 == KEY_F12 && (singledemo || !deathmatch)) + { + // spy mode + do + { + displayplayer++; + if (displayplayer == MAXPLAYERS) + displayplayer = 0; + } while (!playeringame[displayplayer] && displayplayer != consoleplayer); + return doom_true; + } + + // any other key pops up menu if in demos + if (gameaction == ga_nothing && !singledemo && + (demoplayback || gamestate == GS_DEMOSCREEN) + ) + { + if (ev->type == ev_keydown || + (ev->type == ev_mouse && ev->data1) || + (ev->type == ev_joystick && ev->data1)) + { + M_StartControlPanel(); + return doom_true; + } + return doom_false; + } + + if (gamestate == GS_LEVEL) + { +#if 0 + if (devparm && ev->type == ev_keydown && ev->data1 == ';') + { + G_DeathMatchSpawnPlayer(0); + return doom_true; + } +#endif + if (HU_Responder(ev)) + return doom_true; // chat ate the event + if (ST_Responder(ev)) + return doom_true; // status window ate it + if (AM_Responder(ev)) + return doom_true; // automap ate it + } + + if (gamestate == GS_FINALE) + { + if (F_Responder(ev)) + return doom_true; // finale ate the event + } + + switch (ev->type) + { + case ev_keydown: + if (ev->data1 == KEY_PAUSE) + { + sendpause = doom_true; + return doom_true; + } + if (ev->data1 < NUMKEYS) + gamekeydown[ev->data1] = doom_true; + return doom_true; // eat key down events + + case ev_keyup: + if (ev->data1 < NUMKEYS) + gamekeydown[ev->data1] = doom_false; + return doom_false; // always let key up events filter down + + case ev_mouse: + mousebuttons[0] = ev->data1 & 1; + mousebuttons[1] = ev->data1 & 2; + mousebuttons[2] = ev->data1 & 4; + mousex = ev->data2 * (mouseSensitivity + 5) / 10; + mousey = ev->data3 * (mouseSensitivity + 5) / 10; + return doom_true; // eat events + + case ev_joystick: + joybuttons[0] = ev->data1 & 1; + joybuttons[1] = ev->data1 & 2; + joybuttons[2] = ev->data1 & 4; + joybuttons[3] = ev->data1 & 8; + joyxmove = ev->data2; + joyymove = ev->data3; + return doom_true; // eat events + + default: + break; + } + + return doom_false; +} + + + +// +// G_Ticker +// Make ticcmd_ts for the players. +// +void G_Ticker(void) +{ + int i; + int buf; + ticcmd_t* cmd; + + // do player reborns if needed + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i] && players[i].playerstate == PST_REBORN) + G_DoReborn(i); + + // do things to change the game state + while (gameaction != ga_nothing) + { + switch (gameaction) + { + case ga_loadlevel: + G_DoLoadLevel(); + break; + case ga_newgame: + G_DoNewGame(); + break; + case ga_loadgame: + G_DoLoadGame(); + break; + case ga_savegame: + G_DoSaveGame(); + break; + case ga_playdemo: + G_DoPlayDemo(); + break; + case ga_completed: + G_DoCompleted(); + break; + case ga_victory: + F_StartFinale(); + break; + case ga_worlddone: + G_DoWorldDone(); + break; + case ga_screenshot: + M_ScreenShot(); + gameaction = ga_nothing; + break; + case ga_nothing: + break; + } + } + + // get commands, check consistancy, + // and build new consistancy check + buf = (gametic / ticdup) % BACKUPTICS; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i]) + { + cmd = &players[i].cmd; + + doom_memcpy(cmd, &netcmds[i][buf], sizeof(ticcmd_t)); + + if (demoplayback) + G_ReadDemoTiccmd(cmd); + if (demorecording) + G_WriteDemoTiccmd(cmd); + + // check for turbo cheats + if (cmd->forwardmove > TURBOTHRESHOLD + && !(gametic & 31) && ((gametic >> 5) & 3) == i) + { + static char turbomessage[80]; + extern char* player_names[4]; + //doom_sprintf(turbomessage, "%s is turbo!", player_names[i]); + doom_strcpy(turbomessage, player_names[i]); + doom_concat(turbomessage, " is turbo!"); + players[consoleplayer].message = turbomessage; + } + + if (netgame && !netdemo && !(gametic % ticdup)) + { + if (gametic > BACKUPTICS + && consistancy[i][buf] != cmd->consistancy) + { + //I_Error("Error: consistency failure (%i should be %i)", + // cmd->consistancy, consistancy[i][buf]); + + doom_strcpy(error_buf, "Error: consistency failure ("); + doom_concat(error_buf, doom_itoa(cmd->consistancy, 10)); + doom_concat(error_buf, " should be "); + doom_concat(error_buf, doom_itoa(consistancy[i][buf], 10)); + doom_concat(error_buf, ")"); + I_Error(error_buf); + } + if (players[i].mo) + consistancy[i][buf] = players[i].mo->x; + else + consistancy[i][buf] = rndindex; + } + } + } + + // check for special buttons + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i]) + { + if (players[i].cmd.buttons & BT_SPECIAL) + { + switch (players[i].cmd.buttons & BT_SPECIALMASK) + { + case BTS_PAUSE: + paused ^= 1; + if (paused) + S_PauseSound(); + else + S_ResumeSound(); + break; + + case BTS_SAVEGAME: + if (!savedescription[0]) + doom_strcpy(savedescription, "NET GAME"); + savegameslot = + (players[i].cmd.buttons & BTS_SAVEMASK) >> BTS_SAVESHIFT; + gameaction = ga_savegame; + break; + } + } + } + } + + // do main actions + switch (gamestate) + { + case GS_LEVEL: + P_Ticker(); + ST_Ticker(); + AM_Ticker(); + HU_Ticker(); + break; + + case GS_INTERMISSION: + WI_Ticker(); + break; + + case GS_FINALE: + F_Ticker(); + break; + + case GS_DEMOSCREEN: + D_PageTicker(); + break; + } +} + + +// +// PLAYER STRUCTURE FUNCTIONS +// also see P_SpawnPlayer in P_Things +// + +// +// G_InitPlayer +// Called at the start. +// Called by the game initialization functions. +// +void G_InitPlayer(int player) +{ + player_t* p; + + // set up the saved info + p = &players[player]; + + // clear everything else to defaults + G_PlayerReborn(player); +} + + +// +// G_PlayerFinishLevel +// Can when a player completes a level. +// +void G_PlayerFinishLevel(int player) +{ + player_t* p; + + p = &players[player]; + + doom_memset(p->powers, 0, sizeof(p->powers)); + doom_memset(p->cards, 0, sizeof(p->cards)); + p->mo->flags &= ~MF_SHADOW; // cancel invisibility + p->extralight = 0; // cancel gun flashes + p->fixedcolormap = 0; // cancel ir gogles + p->damagecount = 0; // no palette changes + p->bonuscount = 0; +} + + +// +// G_PlayerReborn +// Called after a player dies +// almost everything is cleared and initialized +// +void G_PlayerReborn(int player) +{ + player_t* p; + int i; + int frags[MAXPLAYERS]; + int killcount; + int itemcount; + int secretcount; + + doom_memcpy(frags, players[player].frags, sizeof(frags)); + killcount = players[player].killcount; + itemcount = players[player].itemcount; + secretcount = players[player].secretcount; + + p = &players[player]; + doom_memset(p, 0, sizeof(*p)); + + doom_memcpy(players[player].frags, frags, sizeof(players[player].frags)); + players[player].killcount = killcount; + players[player].itemcount = itemcount; + players[player].secretcount = secretcount; + + p->usedown = p->attackdown = doom_true; // don't do anything immediately + p->playerstate = PST_LIVE; + p->health = MAXHEALTH; + p->readyweapon = p->pendingweapon = wp_pistol; + p->weaponowned[wp_fist] = doom_true; + p->weaponowned[wp_pistol] = doom_true; + p->ammo[am_clip] = 50; + + for (i = 0; i < NUMAMMO; i++) + p->maxammo[i] = maxammo[i]; +} + +// +// G_CheckSpot +// Returns doom_false if the player cannot be respawned +// at the given mapthing_t spot +// because something is occupying it +// + +doom_boolean G_CheckSpot(int playernum, mapthing_t* mthing) +{ + fixed_t x; + fixed_t y; + subsector_t* ss; + unsigned an; + mobj_t* mo; + int i; + + if (!players[playernum].mo) + { + // first spawn of level, before corpses + for (i = 0; i < playernum; i++) + if (players[i].mo->x == mthing->x << FRACBITS + && players[i].mo->y == mthing->y << FRACBITS) + return doom_false; + return doom_true; + } + + x = mthing->x << FRACBITS; + y = mthing->y << FRACBITS; + + if (!P_CheckPosition(players[playernum].mo, x, y)) + return doom_false; + + // flush an old corpse if needed + if (bodyqueslot >= BODYQUESIZE) + P_RemoveMobj(bodyque[bodyqueslot % BODYQUESIZE]); + bodyque[bodyqueslot % BODYQUESIZE] = players[playernum].mo; + bodyqueslot++; + + // spawn a teleport fog + ss = R_PointInSubsector(x, y); + an = (ANG45 * (mthing->angle / 45)) >> ANGLETOFINESHIFT; + + mo = P_SpawnMobj(x + 20 * finecosine[an], y + 20 * finesine[an] + , ss->sector->floorheight + , MT_TFOG); + + if (players[consoleplayer].viewz != 1) + S_StartSound(mo, sfx_telept); // don't start sound on first frame + + return doom_true; +} + + +// +// G_DeathMatchSpawnPlayer +// Spawns a player at one of the random death match spots +// called at level load and each death +// +void G_DeathMatchSpawnPlayer(int playernum) +{ + int i, j; + int selections; + + selections = (int)(deathmatch_p - deathmatchstarts); + if (selections < 4) + { + //I_Error("Error: Only %i deathmatch spots, 4 required", selections); + + doom_strcpy(error_buf, "Error: Only "); + doom_concat(error_buf, doom_itoa(selections, 10)); + doom_concat(error_buf, " deathmatch spots, 4 required"); + I_Error(error_buf); + } + + for (j = 0; j < 20; j++) + { + i = P_Random() % selections; + if (G_CheckSpot(playernum, &deathmatchstarts[i])) + { + deathmatchstarts[i].type = playernum + 1; + P_SpawnPlayer(&deathmatchstarts[i]); + return; + } + } + + // no good spot, so the player will probably get stuck + P_SpawnPlayer(&playerstarts[playernum]); +} + +// +// G_DoReborn +// +void G_DoReborn(int playernum) +{ + int i; + + if (!netgame) + { + // reload the level from scratch + gameaction = ga_loadlevel; + } + else + { + // respawn at the start + + // first dissasociate the corpse + players[playernum].mo->player = 0; + + // spawn at random spot if in death match + if (deathmatch) + { + G_DeathMatchSpawnPlayer(playernum); + return; + } + + if (G_CheckSpot(playernum, &playerstarts[playernum])) + { + P_SpawnPlayer(&playerstarts[playernum]); + return; + } + + // try to spawn at one of the other players spots + for (i = 0; i < MAXPLAYERS; i++) + { + if (G_CheckSpot(playernum, &playerstarts[i])) + { + playerstarts[i].type = playernum + 1; // fake as other player + P_SpawnPlayer(&playerstarts[i]); + playerstarts[i].type = i + 1; // restore + return; + } + // he's going to be inside something. Too bad. + } + P_SpawnPlayer(&playerstarts[playernum]); + } +} + + +void G_ScreenShot(void) +{ + gameaction = ga_screenshot; +} + + +// +// G_DoCompleted +// +void G_ExitLevel(void) +{ + secretexit = doom_false; + gameaction = ga_completed; +} + +// Here's for the german edition. +void G_SecretExitLevel(void) +{ + // IF NO WOLF3D LEVELS, NO SECRET EXIT! + if ((gamemode == commercial) + && (W_CheckNumForName((char*)"map31") < 0)) + secretexit = doom_false; + else + secretexit = doom_true; + gameaction = ga_completed; +} + +void G_DoCompleted(void) +{ + int i; + + gameaction = ga_nothing; + + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i]) + G_PlayerFinishLevel(i); // take away cards and stuff + + if (automapactive) + AM_Stop(); + + if (gamemode != commercial) + switch (gamemap) + { + case 8: + gameaction = ga_victory; + return; + case 9: + for (i = 0; i < MAXPLAYERS; i++) + players[i].didsecret = doom_true; + break; + } + + if ((gamemap == 8) + && (gamemode != commercial)) + { + // victory + gameaction = ga_victory; + return; + } + + if ((gamemap == 9) + && (gamemode != commercial)) + { + // exit secret level + for (i = 0; i < MAXPLAYERS; i++) + players[i].didsecret = doom_true; + } + + + wminfo.didsecret = players[consoleplayer].didsecret; + wminfo.epsd = gameepisode - 1; + wminfo.last = gamemap - 1; + + // wminfo.next is 0 biased, unlike gamemap + if (gamemode == commercial) + { + if (secretexit) + switch (gamemap) + { + case 15: wminfo.next = 30; break; + case 31: wminfo.next = 31; break; + } + else + switch (gamemap) + { + case 31: + case 32: wminfo.next = 15; break; + default: wminfo.next = gamemap; + } + } + else + { + if (secretexit) + wminfo.next = 8; // go to secret level + else if (gamemap == 9) + { + // returning from secret level + switch (gameepisode) + { + case 1: + wminfo.next = 3; + break; + case 2: + wminfo.next = 5; + break; + case 3: + wminfo.next = 6; + break; + case 4: + wminfo.next = 2; + break; + } + } + else + wminfo.next = gamemap; // go to next level + } + + wminfo.maxkills = totalkills; + wminfo.maxitems = totalitems; + wminfo.maxsecret = totalsecret; + wminfo.maxfrags = 0; + if (gamemode == commercial) + wminfo.partime = 35 * cpars[gamemap - 1]; + else + wminfo.partime = 35 * pars[gameepisode][gamemap]; + wminfo.pnum = consoleplayer; + + for (i = 0; i < MAXPLAYERS; i++) + { + wminfo.plyr[i].in = playeringame[i]; + wminfo.plyr[i].skills = players[i].killcount; + wminfo.plyr[i].sitems = players[i].itemcount; + wminfo.plyr[i].ssecret = players[i].secretcount; + wminfo.plyr[i].stime = leveltime; + doom_memcpy(wminfo.plyr[i].frags, players[i].frags + , sizeof(wminfo.plyr[i].frags)); + } + + gamestate = GS_INTERMISSION; + viewactive = doom_false; + automapactive = doom_false; + + if (statcopy) + doom_memcpy(statcopy, &wminfo, sizeof(wminfo)); + + WI_Start(&wminfo); +} + + +// +// G_WorldDone +// +void G_WorldDone(void) +{ + gameaction = ga_worlddone; + + if (secretexit) + players[consoleplayer].didsecret = doom_true; + + if (gamemode == commercial) + { + switch (gamemap) + { + case 15: + case 31: + if (!secretexit) + break; + case 6: + case 11: + case 20: + case 30: + F_StartFinale(); + break; + } + } +} + +void G_DoWorldDone(void) +{ + gamestate = GS_LEVEL; + gamemap = wminfo.next + 1; + G_DoLoadLevel(); + gameaction = ga_nothing; + viewactive = doom_true; +} + + + +// +// G_InitFromSavegame +// Can be called by the startup code or the menu task. +// + +void G_LoadGame(char* name) +{ + doom_strcpy(savename, name); + gameaction = ga_loadgame; +} + + +void G_DoLoadGame(void) +{ + int length; + int i; + int a, b, c; + char vcheck[VERSIONSIZE]; + + gameaction = ga_nothing; + + length = M_ReadFile(savename, &savebuffer); + save_p = savebuffer + SAVESTRINGSIZE; + + // skip the description field + doom_memset(vcheck, 0, sizeof(vcheck)); + //doom_sprintf(vcheck, "version %i", VERSION); + doom_strcpy(vcheck, "version "); + doom_concat(vcheck, doom_itoa(VERSION, 10)); + if (doom_strcmp((const char*)save_p, (const char*)vcheck)) + return; // bad version + save_p += VERSIONSIZE; + + gameskill = (skill_t)(*save_p++); + gameepisode = *save_p++; + gamemap = *save_p++; + for (i = 0; i < MAXPLAYERS; i++) + playeringame[i] = *save_p++; + + // load a base level + G_InitNew(gameskill, gameepisode, gamemap); + + // get the times + a = *save_p++; + b = *save_p++; + c = *save_p++; + leveltime = (a << 16) + (b << 8) + c; + + // dearchive all the modifications + P_UnArchivePlayers(); + P_UnArchiveWorld(); + P_UnArchiveThinkers(); + P_UnArchiveSpecials(); + + if (*save_p != 0x1d) + I_Error((char*)"Error: Bad savegame"); + + // done + Z_Free(savebuffer); + + if (setsizeneeded) + R_ExecuteSetViewSize(); + + // draw the pattern into the back screen + R_FillBackScreen(); +} + + +// +// G_SaveGame +// Called by the menu task. +// Description is a 24 byte text string +// +void G_SaveGame(int slot, char* description) +{ + savegameslot = slot; + doom_strcpy(savedescription, description); + sendsave = doom_true; +} + +void G_DoSaveGame(void) +{ + char name[100]; + char name2[VERSIONSIZE]; + char* description; + int length; + int i; + +#if 0 + if (M_CheckParm("-cdrom")) + doom_sprintf(name, "c:\\doomdata\\"SAVEGAMENAME"%d.dsg", savegameslot); + else +#endif + { + //doom_sprintf(name, SAVEGAMENAME"%d.dsg", savegameslot); + doom_strcpy(name, SAVEGAMENAME); + doom_concat(name, doom_itoa(savegameslot, 10)); + doom_concat(name, ".dsg"); + } + description = savedescription; + + save_p = savebuffer = screens[1] + 0x4000; + + doom_memcpy(save_p, description, SAVESTRINGSIZE); + save_p += SAVESTRINGSIZE; + doom_memset(name2, 0, sizeof(name2)); + //doom_sprintf(name2, "version %i", VERSION); + doom_strcpy(name2, "version "); + doom_concat(name2, doom_itoa(VERSION, 10)); + doom_memcpy(save_p, name2, VERSIONSIZE); + save_p += VERSIONSIZE; + + *save_p++ = gameskill; + *save_p++ = gameepisode; + *save_p++ = gamemap; + for (i = 0; i < MAXPLAYERS; i++) + *save_p++ = playeringame[i]; + *save_p++ = leveltime >> 16; + *save_p++ = leveltime >> 8; + *save_p++ = leveltime; + + P_ArchivePlayers(); + P_ArchiveWorld(); + P_ArchiveThinkers(); + P_ArchiveSpecials(); + + *save_p++ = 0x1d; // consistancy marker + + length = (int)(save_p - savebuffer); + if (length > SAVEGAMESIZE) + I_Error((char*)"Error: Savegame buffer overrun"); + M_WriteFile(name, savebuffer, length); + gameaction = ga_nothing; + savedescription[0] = 0; + + players[consoleplayer].message = (char*)GGSAVED; + + // draw the pattern into the back screen + R_FillBackScreen(); +} + + +// +// G_InitNew +// Can be called by the startup code or the menu task, +// consoleplayer, displayplayer, playeringame[] should be set. +// + +void G_DeferedInitNew(skill_t skill, int episode, int map) +{ + d_skill = skill; + d_episode = episode; + d_map = map; + gameaction = ga_newgame; +} + + +void G_DoNewGame(void) +{ + demoplayback = doom_false; + netdemo = doom_false; + netgame = doom_false; + deathmatch = doom_false; + playeringame[1] = playeringame[2] = playeringame[3] = 0; + respawnparm = doom_false; + fastparm = doom_false; + nomonsters = doom_false; + consoleplayer = 0; + G_InitNew(d_skill, d_episode, d_map); + gameaction = ga_nothing; +} + +void G_InitNew(skill_t skill, int episode, int map) +{ + int i; + + if (paused) + { + paused = doom_false; + S_ResumeSound(); + } + + + if (skill > sk_nightmare) + skill = sk_nightmare; + + + // This was quite messy with SPECIAL and commented parts. + // Supposedly hacks to make the latest edition work. + // It might not work properly. + if (episode < 1) + episode = 1; + + if (gamemode == retail) + { + if (episode > 4) + episode = 4; + } + else if (gamemode == shareware) + { + if (episode > 1) + episode = 1; // only start episode 1 on shareware + } + else + { + if (episode > 3) + episode = 3; + } + + + + if (map < 1) + map = 1; + + if ((map > 9) + && (gamemode != commercial)) + map = 9; + + M_ClearRandom(); + + if (skill == sk_nightmare || respawnparm) + respawnmonsters = doom_true; + else + respawnmonsters = doom_false; + + if (fastparm || (skill == sk_nightmare && gameskill != sk_nightmare)) + { + for (i = S_SARG_RUN1; i <= S_SARG_PAIN2; i++) + states[i].tics >>= 1; + mobjinfo[MT_BRUISERSHOT].speed = 20 * FRACUNIT; + mobjinfo[MT_HEADSHOT].speed = 20 * FRACUNIT; + mobjinfo[MT_TROOPSHOT].speed = 20 * FRACUNIT; + } + else if (skill != sk_nightmare && gameskill == sk_nightmare) + { + for (i = S_SARG_RUN1; i <= S_SARG_PAIN2; i++) + states[i].tics <<= 1; + mobjinfo[MT_BRUISERSHOT].speed = 15 * FRACUNIT; + mobjinfo[MT_HEADSHOT].speed = 10 * FRACUNIT; + mobjinfo[MT_TROOPSHOT].speed = 10 * FRACUNIT; + } + + + // force players to be initialized upon first level load + for (i = 0; i < MAXPLAYERS; i++) + players[i].playerstate = PST_REBORN; + + usergame = doom_true; // will be set doom_false if a demo + paused = doom_false; + demoplayback = doom_false; + automapactive = doom_false; + viewactive = doom_true; + gameepisode = episode; + gamemap = map; + gameskill = skill; + + viewactive = doom_true; + + // set the sky map for the episode + if (gamemode == commercial) + { + skytexture = R_TextureNumForName((char*)"SKY3"); + if (gamemap < 12) + skytexture = R_TextureNumForName((char*)"SKY1"); + else + if (gamemap < 21) + skytexture = R_TextureNumForName((char*)"SKY2"); + } + else + switch (episode) + { + case 1: + skytexture = R_TextureNumForName((char*)"SKY1"); + break; + case 2: + skytexture = R_TextureNumForName((char*)"SKY2"); + break; + case 3: + skytexture = R_TextureNumForName((char*)"SKY3"); + break; + case 4: // Special Edition sky + skytexture = R_TextureNumForName((char*)"SKY4"); + break; + } + + G_DoLoadLevel(); +} + + +// +// DEMO RECORDING +// + +void G_ReadDemoTiccmd(ticcmd_t* cmd) +{ + if (*demo_p == DEMOMARKER) + { + // end of demo data stream + G_CheckDemoStatus(); + return; + } + cmd->forwardmove = ((signed char)*demo_p++); + cmd->sidemove = ((signed char)*demo_p++); + cmd->angleturn = ((unsigned char)*demo_p++) << 8; + cmd->buttons = (unsigned char)*demo_p++; +} + + +void G_WriteDemoTiccmd(ticcmd_t* cmd) +{ + if (gamekeydown['q']) // press q to end demo recording + G_CheckDemoStatus(); + *demo_p++ = cmd->forwardmove; + *demo_p++ = cmd->sidemove; + *demo_p++ = (cmd->angleturn + 128) >> 8; + *demo_p++ = cmd->buttons; + demo_p -= 4; + if (demo_p > demoend - 16) + { + // no more space + G_CheckDemoStatus(); + return; + } + + G_ReadDemoTiccmd(cmd); // make SURE it is exactly the same +} + + +// +// G_RecordDemo +// +void G_RecordDemo(char* name) +{ + int i; + int maxsize; + + usergame = doom_false; + doom_strcpy(demoname, name); + doom_concat(demoname, ".lmp"); + maxsize = 0x20000; + i = M_CheckParm((char*)"-maxdemo"); + if (i && i < myargc - 1) + maxsize = doom_atoi(myargv[i + 1]) * 1024; + demobuffer = (byte*)Z_Malloc(maxsize, PU_STATIC, 0); + demoend = demobuffer + maxsize; + + demorecording = doom_true; +} + + +void G_BeginRecording(void) +{ + int i; + + demo_p = demobuffer; + + *demo_p++ = VERSION; + *demo_p++ = gameskill; + *demo_p++ = gameepisode; + *demo_p++ = gamemap; + *demo_p++ = deathmatch; + *demo_p++ = respawnparm; + *demo_p++ = fastparm; + *demo_p++ = nomonsters; + *demo_p++ = consoleplayer; + + for (i = 0; i < MAXPLAYERS; i++) + *demo_p++ = playeringame[i]; +} + + +// +// G_PlayDemo +// + + +void G_DeferedPlayDemo(char* name) +{ + defdemoname = name; + gameaction = ga_playdemo; +} + +void G_DoPlayDemo(void) +{ + skill_t skill; + int i, episode, map; + + gameaction = ga_nothing; + demobuffer = demo_p = (byte*)W_CacheLumpName(defdemoname, PU_STATIC); + byte demo_version = *demo_p++; + if (demo_version != VERSION && + demo_version != 109) // Demos seem to run fine with version 109 + { + //doom_print("Demo is from a different game version! Demo Verson = %i, this version = %i\n", (int)demo_version, VERSION); + doom_print("Demo is from a different game version! Demo Verson = "); + doom_print(doom_itoa((int)demo_version, 10)); + doom_print(", this version = "); + doom_print(doom_itoa(VERSION, 10)); + doom_print("\n"); + gameaction = ga_nothing; + return; + } + + skill = (skill_t)(*demo_p++); + episode = *demo_p++; + map = *demo_p++; + deathmatch = *demo_p++; + respawnparm = *demo_p++; + fastparm = *demo_p++; + nomonsters = *demo_p++; + consoleplayer = *demo_p++; + + for (i = 0; i < MAXPLAYERS; i++) + playeringame[i] = *demo_p++; + if (playeringame[1]) + { + netgame = doom_true; + netdemo = doom_true; + } + + // don't spend a lot of time in loadlevel + precache = doom_false; + G_InitNew(skill, episode, map); + precache = doom_true; + + usergame = doom_false; + demoplayback = doom_true; +} + +// +// G_TimeDemo +// +void G_TimeDemo(char* name) +{ + nodrawers = M_CheckParm((char*)"-nodraw"); + noblit = M_CheckParm((char*)"-noblit"); + timingdemo = doom_true; + singletics = doom_true; + + defdemoname = name; + gameaction = ga_playdemo; +} + + +/* +=================== += += G_CheckDemoStatus += += Called after a death or level completion to allow demos to be cleaned up += Returns doom_true if a new demo loop action will take place +=================== +*/ + +doom_boolean G_CheckDemoStatus(void) +{ + int endtime; + + if (timingdemo) + { + endtime = I_GetTime(); + //I_Error("Error: timed %i gametics in %i realtics", gametic + // , endtime - starttime); + + doom_strcpy(error_buf, "Error: timed "); + doom_concat(error_buf, doom_itoa(gametic, 10)); + doom_concat(error_buf, " gametics in "); + doom_concat(error_buf, doom_itoa(endtime - starttime, 10)); + doom_concat(error_buf, " realtics"); + I_Error(error_buf); + } + + if (demoplayback) + { + if (singledemo) + I_Quit(); + + Z_ChangeTag(demobuffer, PU_CACHE); + demoplayback = doom_false; + netdemo = doom_false; + netgame = doom_false; + deathmatch = doom_false; + playeringame[1] = playeringame[2] = playeringame[3] = 0; + respawnparm = doom_false; + fastparm = doom_false; + nomonsters = doom_false; + consoleplayer = 0; + D_AdvanceDemo(); + return doom_true; + } + + if (demorecording) + { + *demo_p++ = DEMOMARKER; + M_WriteFile(demoname, demobuffer, (int)(demo_p - demobuffer)); + Z_Free(demobuffer); + demorecording = doom_false; + //I_Error("Error: Demo %s recorded", demoname); + + doom_strcpy(error_buf, "Error: Demo "); + doom_concat(error_buf, demoname); + doom_concat(error_buf, " recorded"); + I_Error(error_buf); + } + + return doom_false; +} +#define noterased viewwindowx + + +extern doom_boolean automapactive; // in AM_map.c + + +void HUlib_init(void) +{ +} + + +void HUlib_clearTextLine(hu_textline_t* t) +{ + t->len = 0; + t->l[0] = 0; + t->needsupdate = doom_true; +} + + +void HUlib_initTextLine(hu_textline_t* t, int x, int y, patch_t** f, int sc) +{ + t->x = x; + t->y = y; + t->f = f; + t->sc = sc; + HUlib_clearTextLine(t); +} + + +doom_boolean HUlib_addCharToTextLine(hu_textline_t* t, char ch) +{ + if (t->len == HU_MAXLINELENGTH) + return doom_false; + else + { + t->l[t->len++] = ch; + t->l[t->len] = 0; + t->needsupdate = 4; + return doom_true; + } +} + + +doom_boolean HUlib_delCharFromTextLine(hu_textline_t* t) +{ + if (!t->len) return doom_false; + else + { + t->l[--t->len] = 0; + t->needsupdate = 4; + return doom_true; + } +} + + +void HUlib_drawTextLine(hu_textline_t* l, doom_boolean drawcursor) +{ + int i; + int w; + int x; + unsigned char c; + + // draw the new stuff + x = l->x; + for (i = 0; i < l->len; i++) + { + c = doom_toupper(l->l[i]); + if (c != ' ' + && c >= l->sc + && c <= '_') + { + w = SHORT(l->f[c - l->sc]->width); + if (x + w > SCREENWIDTH) + break; + V_DrawPatchDirect(x, l->y, FG, l->f[c - l->sc]); + x += w; + } + else + { + x += 4; + if (x >= SCREENWIDTH) + break; + } + } + + // draw the cursor if requested + if (drawcursor + && x + SHORT(l->f['_' - l->sc]->width) <= SCREENWIDTH) + { + V_DrawPatchDirect(x, l->y, FG, l->f['_' - l->sc]); + } +} + + +// sorta called by HU_Erase and just better darn get things straight +void HUlib_eraseTextLine(hu_textline_t* l) +{ + int lh; + int y; + int yoffset; + static doom_boolean lastautomapactive = doom_true; + + // Only erases when NOT in automap and the screen is reduced, + // and the text must either need updating or refreshing + // (because of a recent change back from the automap) + + if (!automapactive && + viewwindowx && l->needsupdate) + { + lh = SHORT(l->f[0]->height) + 1; + for (y = l->y, yoffset = y * SCREENWIDTH; y < l->y + lh; y++, yoffset += SCREENWIDTH) + { + if (y < viewwindowy || y >= viewwindowy + viewheight) + R_VideoErase(yoffset, SCREENWIDTH); // erase entire line + else + { + R_VideoErase(yoffset, viewwindowx); // erase left border + R_VideoErase(yoffset + viewwindowx + viewwidth, viewwindowx); + // erase right border + } + } + } + + lastautomapactive = automapactive; + if (l->needsupdate) l->needsupdate--; +} + + +void HUlib_initSText(hu_stext_t* s, + int x, + int y, + int h, + patch_t** font, + int startchar, + doom_boolean* on) +{ + int i; + + s->h = h; + s->on = on; + s->laston = doom_true; + s->cl = 0; + for (i = 0; i < h; i++) + HUlib_initTextLine(&s->l[i], + x, y - i * (SHORT(font[0]->height) + 1), + font, startchar); +} + + +void HUlib_addLineToSText(hu_stext_t* s) +{ + + int i; + + // add a clear line + if (++s->cl == s->h) + s->cl = 0; + HUlib_clearTextLine(&s->l[s->cl]); + + // everything needs updating + for (i = 0; i < s->h; i++) + s->l[i].needsupdate = 4; +} + + +void HUlib_addMessageToSText(hu_stext_t* s, char* prefix, char* msg) +{ + HUlib_addLineToSText(s); + if (prefix) + while (*prefix) + HUlib_addCharToTextLine(&s->l[s->cl], *(prefix++)); + + while (*msg) + HUlib_addCharToTextLine(&s->l[s->cl], *(msg++)); +} + + +void HUlib_drawSText(hu_stext_t* s) +{ + int i, idx; + hu_textline_t* l; + + if (!*s->on) + return; // if not on, don't draw + + // draw everything + for (i = 0; i < s->h; i++) + { + idx = s->cl - i; + if (idx < 0) + idx += s->h; // handle queue of lines + + l = &s->l[idx]; + + // need a decision made here on whether to skip the draw + HUlib_drawTextLine(l, doom_false); // no cursor, please + } +} + + +void HUlib_eraseSText(hu_stext_t* s) +{ + int i; + + for (i = 0; i < s->h; i++) + { + if (s->laston && !*s->on) + s->l[i].needsupdate = 4; + HUlib_eraseTextLine(&s->l[i]); + } + s->laston = *s->on; +} + + +void HUlib_initIText(hu_itext_t* it, + int x, + int y, + patch_t** font, + int startchar, + doom_boolean* on) +{ + it->lm = 0; // default left margin is start of text + it->on = on; + it->laston = doom_true; + HUlib_initTextLine(&it->l, x, y, font, startchar); +} + + +// The following deletion routines adhere to the left margin restriction +void HUlib_delCharFromIText(hu_itext_t* it) +{ + if (it->l.len != it->lm) + HUlib_delCharFromTextLine(&it->l); +} + + +void HUlib_eraseLineFromIText(hu_itext_t* it) +{ + while (it->lm != it->l.len) + HUlib_delCharFromTextLine(&it->l); +} + + +// Resets left margin as well +void HUlib_resetIText(hu_itext_t* it) +{ + it->lm = 0; + HUlib_clearTextLine(&it->l); +} + + +void HUlib_addPrefixToIText(hu_itext_t* it, char* str) +{ + while (*str) + HUlib_addCharToTextLine(&it->l, *(str++)); + it->lm = it->l.len; +} + + +// wrapper function for handling general keyed input. +// returns doom_true if it ate the key +doom_boolean HUlib_keyInIText(hu_itext_t* it, unsigned char ch) +{ + if (ch >= ' ' && ch <= '_') + HUlib_addCharToTextLine(&it->l, (char)ch); + else + if (ch == KEY_BACKSPACE) + HUlib_delCharFromIText(it); + else + if (ch != KEY_ENTER) + return doom_false; // did not eat key + + return doom_true; // ate the key +} + + +void HUlib_drawIText(hu_itext_t* it) +{ + hu_textline_t* l = &it->l; + + if (!*it->on) + return; + HUlib_drawTextLine(l, doom_true); // draw the line w/ cursor +} + + +void HUlib_eraseIText(hu_itext_t* it) +{ + if (it->laston && !*it->on) + it->l.needsupdate = 4; + HUlib_eraseTextLine(&it->l); + it->laston = *it->on; +} +#define HU_TITLE (mapnames[(gameepisode-1)*9+gamemap-1]) +#define HU_TITLE2 (mapnames2[gamemap-1]) +#define HU_TITLEP (mapnamesp[gamemap-1]) +#define HU_TITLET (mapnamest[gamemap-1]) +#define HU_TITLEHEIGHT 1 +#define HU_TITLEX 0 +#define HU_TITLEY (167 - SHORT(hu_font[0]->height)) +#define HU_INPUTTOGGLE 't' +#define HU_INPUTX HU_MSGX +#define HU_INPUTY (HU_MSGY + HU_MSGHEIGHT*(SHORT(hu_font[0]->height) +1)) +#define HU_INPUTWIDTH 64 +#define HU_INPUTHEIGHT 1 +#define QUEUESIZE 128 + + +//static player_t* plr; +static hu_textline_t w_title; +static hu_itext_t w_chat; +static doom_boolean always_off = doom_false; +static char chat_dest[MAXPLAYERS]; +static hu_itext_t w_inputbuffer[MAXPLAYERS]; +static doom_boolean message_on; +static doom_boolean message_nottobefuckedwith; +static hu_stext_t w_message; +static int message_counter; +static doom_boolean headsupactive = doom_false; +static char chatchars[QUEUESIZE]; +static int head = 0; +static int tail = 0; + +char* chat_macros[] = +{ + (char*)HUSTR_CHATMACRO0, + (char*)HUSTR_CHATMACRO1, + (char*)HUSTR_CHATMACRO2, + (char*)HUSTR_CHATMACRO3, + (char*)HUSTR_CHATMACRO4, + (char*)HUSTR_CHATMACRO5, + (char*)HUSTR_CHATMACRO6, + (char*)HUSTR_CHATMACRO7, + (char*)HUSTR_CHATMACRO8, + (char*)HUSTR_CHATMACRO9 +}; + +char* player_names[] = +{ + (char*)HUSTR_PLRGREEN, + (char*)HUSTR_PLRINDIGO, + (char*)HUSTR_PLRBROWN, + (char*)HUSTR_PLRRED +}; + +const char* shiftxform; + +const char french_shiftxform[] = +{ + 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, + ' ', '!', '"', '#', '$', '%', '&', + '"', // shift-' + '(', ')', '*', '+', + '?', // shift-, + '_', // shift-- + '>', // shift-. + '?', // shift-/ + '0', // shift-0 + '1', // shift-1 + '2', // shift-2 + '3', // shift-3 + '4', // shift-4 + '5', // shift-5 + '6', // shift-6 + '7', // shift-7 + '8', // shift-8 + '9', // shift-9 + '/', + '.', // shift-; + '<', + '+', // shift-= + '>', '?', '@', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '[', // shift-[ + '!', // shift-backslash - OH MY GOD DOES WATCOM SUCK + ']', // shift-] + '"', '_', + '\'', // shift-` + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '{', '|', '}', '~', 127 + +}; + +const char english_shiftxform[] = +{ + 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, + ' ', '!', '"', '#', '$', '%', '&', + '"', // shift-' + '(', ')', '*', '+', + '<', // shift-, + '_', // shift-- + '>', // shift-. + '?', // shift-/ + ')', // shift-0 + '!', // shift-1 + '@', // shift-2 + '#', // shift-3 + '$', // shift-4 + '%', // shift-5 + '^', // shift-6 + '&', // shift-7 + '*', // shift-8 + '(', // shift-9 + ':', + ':', // shift-; + '<', + '+', // shift-= + '>', '?', '@', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '[', // shift-[ + '!', // shift-backslash - OH MY GOD DOES WATCOM SUCK + ']', // shift-] + '"', '_', + '\'', // shift-` + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '{', '|', '}', '~', 127 +}; + +char frenchKeyMap[128] = +{ + 0, + 1,2,3,4,5,6,7,8,9,10, + 11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30, + 31, + ' ','!','"','#','$','%','&','%','(',')','*','+',';','-',':','!', + '0','1','2','3','4','5','6','7','8','9',':','M','<','=','>','?', + '@','Q','B','C','D','E','F','G','H','I','J','K','L',',','N','O', + 'P','A','R','S','T','U','V','Z','X','Y','W','^','\\','$','^','_', + '@','Q','B','C','D','E','F','G','H','I','J','K','L',',','N','O', + 'P','A','R','S','T','U','V','Z','X','Y','W','^','\\','$','^',127 +}; + +char chat_char; // remove later. +patch_t* hu_font[HU_FONTSIZE]; +doom_boolean chat_on; +doom_boolean message_dontfuckwithme; + +extern int showMessages; +extern doom_boolean automapactive; + + +// +// Builtin map names. +// The actual names can be found in DStrings.h. +// + +char* mapnames[] = // DOOM shareware/registered/retail (Ultimate) names. +{ + + (char*)HUSTR_E1M1, + (char*)HUSTR_E1M2, + (char*)HUSTR_E1M3, + (char*)HUSTR_E1M4, + (char*)HUSTR_E1M5, + (char*)HUSTR_E1M6, + (char*)HUSTR_E1M7, + (char*)HUSTR_E1M8, + (char*)HUSTR_E1M9, + + (char*)HUSTR_E2M1, + (char*)HUSTR_E2M2, + (char*)HUSTR_E2M3, + (char*)HUSTR_E2M4, + (char*)HUSTR_E2M5, + (char*)HUSTR_E2M6, + (char*)HUSTR_E2M7, + (char*)HUSTR_E2M8, + (char*)HUSTR_E2M9, + + (char*)HUSTR_E3M1, + (char*)HUSTR_E3M2, + (char*)HUSTR_E3M3, + (char*)HUSTR_E3M4, + (char*)HUSTR_E3M5, + (char*)HUSTR_E3M6, + (char*)HUSTR_E3M7, + (char*)HUSTR_E3M8, + (char*)HUSTR_E3M9, + + (char*)HUSTR_E4M1, + (char*)HUSTR_E4M2, + (char*)HUSTR_E4M3, + (char*)HUSTR_E4M4, + (char*)HUSTR_E4M5, + (char*)HUSTR_E4M6, + (char*)HUSTR_E4M7, + (char*)HUSTR_E4M8, + (char*)HUSTR_E4M9, + + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL", + (char*)"NEWLEVEL" +}; + +char* mapnames2[] = // DOOM 2 map names. +{ + (char*)HUSTR_1, + (char*)HUSTR_2, + (char*)HUSTR_3, + (char*)HUSTR_4, + (char*)HUSTR_5, + (char*)HUSTR_6, + (char*)HUSTR_7, + (char*)HUSTR_8, + (char*)HUSTR_9, + (char*)HUSTR_10, + (char*)HUSTR_11, + + (char*)HUSTR_12, + (char*)HUSTR_13, + (char*)HUSTR_14, + (char*)HUSTR_15, + (char*)HUSTR_16, + (char*)HUSTR_17, + (char*)HUSTR_18, + (char*)HUSTR_19, + (char*)HUSTR_20, + + (char*)HUSTR_21, + (char*)HUSTR_22, + (char*)HUSTR_23, + (char*)HUSTR_24, + (char*)HUSTR_25, + (char*)HUSTR_26, + (char*)HUSTR_27, + (char*)HUSTR_28, + (char*)HUSTR_29, + (char*)HUSTR_30, + (char*)HUSTR_31, + (char*)HUSTR_32 +}; + + +char* mapnamesp[] = // Plutonia WAD map names. +{ + (char*)PHUSTR_1, + (char*)PHUSTR_2, + (char*)PHUSTR_3, + (char*)PHUSTR_4, + (char*)PHUSTR_5, + (char*)PHUSTR_6, + (char*)PHUSTR_7, + (char*)PHUSTR_8, + (char*)PHUSTR_9, + (char*)PHUSTR_10, + (char*)PHUSTR_11, + + (char*)PHUSTR_12, + (char*)PHUSTR_13, + (char*)PHUSTR_14, + (char*)PHUSTR_15, + (char*)PHUSTR_16, + (char*)PHUSTR_17, + (char*)PHUSTR_18, + (char*)PHUSTR_19, + (char*)PHUSTR_20, + + (char*)PHUSTR_21, + (char*)PHUSTR_22, + (char*)PHUSTR_23, + (char*)PHUSTR_24, + (char*)PHUSTR_25, + (char*)PHUSTR_26, + (char*)PHUSTR_27, + (char*)PHUSTR_28, + (char*)PHUSTR_29, + (char*)PHUSTR_30, + (char*)PHUSTR_31, + (char*)PHUSTR_32 +}; + + +char* mapnamest[] = // TNT WAD map names. +{ + (char*)THUSTR_1, + (char*)THUSTR_2, + (char*)THUSTR_3, + (char*)THUSTR_4, + (char*)THUSTR_5, + (char*)THUSTR_6, + (char*)THUSTR_7, + (char*)THUSTR_8, + (char*)THUSTR_9, + (char*)THUSTR_10, + (char*)THUSTR_11, + + (char*)THUSTR_12, + (char*)THUSTR_13, + (char*)THUSTR_14, + (char*)THUSTR_15, + (char*)THUSTR_16, + (char*)THUSTR_17, + (char*)THUSTR_18, + (char*)THUSTR_19, + (char*)THUSTR_20, + + (char*)THUSTR_21, + (char*)THUSTR_22, + (char*)THUSTR_23, + (char*)THUSTR_24, + (char*)THUSTR_25, + (char*)THUSTR_26, + (char*)THUSTR_27, + (char*)THUSTR_28, + (char*)THUSTR_29, + (char*)THUSTR_30, + (char*)THUSTR_31, + (char*)THUSTR_32 +}; + +char ForeignTranslation(unsigned char ch) +{ + return ch < 128 ? frenchKeyMap[ch] : ch; +} + +void HU_Init(void) +{ + + int i; + int j; + char buffer[9]; + + if (french) + shiftxform = french_shiftxform; + else + shiftxform = english_shiftxform; + + // load the heads-up font + j = HU_FONTSTART; + for (i = 0; i < HU_FONTSIZE; i++) + { + //if (j == 40) __debugbreak(); + //doom_sprintf(buffer, "STCFN%.3d", j++); + doom_strcpy(buffer, "STCFN"); + if (j < 100) doom_concat(buffer, "0"); + if (j < 10) doom_concat(buffer, "0"); + doom_concat(buffer, doom_itoa(j++, 10)); + hu_font[i] = (patch_t*)W_CacheLumpName(buffer, PU_STATIC); + } +} + +void HU_Stop(void) +{ + headsupactive = doom_false; +} + +void HU_Start(void) +{ + int i; + char* s; + + if (headsupactive) + HU_Stop(); + + plr = &players[consoleplayer]; + message_on = doom_false; + message_dontfuckwithme = doom_false; + message_nottobefuckedwith = doom_false; + chat_on = doom_false; + + // create the message widget + HUlib_initSText(&w_message, + HU_MSGX, HU_MSGY, HU_MSGHEIGHT, + hu_font, + HU_FONTSTART, &message_on); + + // create the map title widget + HUlib_initTextLine(&w_title, + HU_TITLEX, HU_TITLEY, + hu_font, + HU_FONTSTART); + + switch (gamemode) + { + case shareware: + case registered: + case retail: + s = HU_TITLE; + break; + + /* FIXME + case pack_plut: + s = HU_TITLEP; + break; + case pack_tnt: + s = HU_TITLET; + break; + */ + + case commercial: + default: + s = HU_TITLE2; + break; + } + + while (*s) + HUlib_addCharToTextLine(&w_title, *(s++)); + + // create the chat widget + HUlib_initIText(&w_chat, + HU_INPUTX, HU_INPUTY, + hu_font, + HU_FONTSTART, &chat_on); + + // create the inputbuffer widgets + for (i = 0; i < MAXPLAYERS; i++) + HUlib_initIText(&w_inputbuffer[i], 0, 0, 0, 0, &always_off); + + headsupactive = doom_true; +} + +void HU_Drawer(void) +{ + HUlib_drawSText(&w_message); + HUlib_drawIText(&w_chat); + if (automapactive) + HUlib_drawTextLine(&w_title, doom_false); +} + +void HU_Erase(void) +{ + HUlib_eraseSText(&w_message); + HUlib_eraseIText(&w_chat); + HUlib_eraseTextLine(&w_title); +} + +void HU_Ticker(void) +{ + int i, rc; + char c; + + // tick down message counter if message is up + if (message_counter && !--message_counter) + { + message_on = doom_false; + message_nottobefuckedwith = doom_false; + } + + if (showMessages || message_dontfuckwithme) + { + + // display message if necessary + if ((plr->message && !message_nottobefuckedwith) + || (plr->message && message_dontfuckwithme)) + { + HUlib_addMessageToSText(&w_message, 0, plr->message); + plr->message = 0; + message_on = doom_true; + message_counter = HU_MSGTIMEOUT; + message_nottobefuckedwith = message_dontfuckwithme; + message_dontfuckwithme = 0; + } + + } // else message_on = doom_false; + + // check for incoming chat characters + if (netgame) + { + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + if (i != consoleplayer + && (c = players[i].cmd.chatchar)) + { + if (c <= HU_BROADCAST) + chat_dest[i] = c; + else + { + if (c >= 'a' && c <= 'z') + c = (char)shiftxform[(unsigned char)c]; + rc = HUlib_keyInIText(&w_inputbuffer[i], c); + if (rc && c == KEY_ENTER) + { + if (w_inputbuffer[i].l.len + && (chat_dest[i] == consoleplayer + 1 + || chat_dest[i] == HU_BROADCAST)) + { + HUlib_addMessageToSText(&w_message, + player_names[i], + w_inputbuffer[i].l.l); + + message_nottobefuckedwith = doom_true; + message_on = doom_true; + message_counter = HU_MSGTIMEOUT; + if (gamemode == commercial) + S_StartSound(0, sfx_radio); + else + S_StartSound(0, sfx_tink); + } + HUlib_resetIText(&w_inputbuffer[i]); + } + } + players[i].cmd.chatchar = 0; + } + } + } +} + +void HU_queueChatChar(char c) +{ + if (((head + 1) & (QUEUESIZE - 1)) == tail) + { + plr->message = (char*)HUSTR_MSGU; + } + else + { + chatchars[head] = c; + head = (head + 1) & (QUEUESIZE - 1); + } +} + +char HU_dequeueChatChar(void) +{ + char c; + + if (head != tail) + { + c = chatchars[tail]; + tail = (tail + 1) & (QUEUESIZE - 1); + } + else + { + c = 0; + } + + return c; +} + +doom_boolean HU_Responder(event_t* ev) +{ + + static char lastmessage[HU_MAXLINELENGTH + 1]; + char* macromessage; + doom_boolean eatkey = doom_false; + static doom_boolean shiftdown = doom_false; + static doom_boolean altdown = doom_false; + unsigned char c; + int i; + int numplayers; + + static char destination_keys[MAXPLAYERS] = + { + HUSTR_KEYGREEN, + HUSTR_KEYINDIGO, + HUSTR_KEYBROWN, + HUSTR_KEYRED + }; + + static int num_nobrainers = 0; + + numplayers = 0; + for (i = 0; i < MAXPLAYERS; i++) + numplayers += playeringame[i]; + + if (ev->data1 == KEY_RSHIFT) + { + shiftdown = ev->type == ev_keydown; + return doom_false; + } + else if (ev->data1 == KEY_RALT || ev->data1 == KEY_LALT) + { + altdown = ev->type == ev_keydown; + return doom_false; + } + + if (ev->type != ev_keydown) + return doom_false; + + if (!chat_on) + { + if (ev->data1 == HU_MSGREFRESH) + { + message_on = doom_true; + message_counter = HU_MSGTIMEOUT; + eatkey = doom_true; + } + else if (netgame && ev->data1 == HU_INPUTTOGGLE) + { + eatkey = chat_on = doom_true; + HUlib_resetIText(&w_chat); + HU_queueChatChar(HU_BROADCAST); + } + else if (netgame && numplayers > 2) + { + for (i = 0; i < MAXPLAYERS; i++) + { + if (ev->data1 == destination_keys[i]) + { + if (playeringame[i] && i != consoleplayer) + { + eatkey = chat_on = doom_true; + HUlib_resetIText(&w_chat); + HU_queueChatChar(i + 1); + break; + } + else if (i == consoleplayer) + { + num_nobrainers++; + if (num_nobrainers < 3) + plr->message = (char*)HUSTR_TALKTOSELF1; + else if (num_nobrainers < 6) + plr->message = (char*)HUSTR_TALKTOSELF2; + else if (num_nobrainers < 9) + plr->message = (char*)HUSTR_TALKTOSELF3; + else if (num_nobrainers < 32) + plr->message = (char*)HUSTR_TALKTOSELF4; + else + plr->message = (char*)HUSTR_TALKTOSELF5; + } + } + } + } + } + else + { + c = ev->data1; + // send a macro + if (altdown) + { + c = c - '0'; + if (c > 9) + return doom_false; + macromessage = chat_macros[c]; + + // kill last message with a '\n' + HU_queueChatChar(KEY_ENTER); // DEBUG!!! + + // send the macro message + while (*macromessage) + HU_queueChatChar(*macromessage++); + HU_queueChatChar(KEY_ENTER); + + // leave chat mode and notify that it was sent + chat_on = doom_false; + doom_strcpy(lastmessage, chat_macros[c]); + plr->message = lastmessage; + eatkey = doom_true; + } + else + { + if (french) + c = ForeignTranslation(c); + if (shiftdown || (c >= 'a' && c <= 'z')) + c = shiftxform[c]; + eatkey = HUlib_keyInIText(&w_chat, c); + if (eatkey) + { + HU_queueChatChar(c); + } + if (c == KEY_ENTER) + { + chat_on = doom_false; + if (w_chat.l.len) + { + doom_strcpy(lastmessage, w_chat.l.l); + plr->message = lastmessage; + } + } + else if (c == KEY_ESCAPE) + chat_on = doom_false; + } + } + + return eatkey; +} +#if defined(I_NET_ENABLED) +#define _CRT_SECURE_NO_WARNINGS +#define _WINSOCK_DEPRECATED_NO_WARNINGS +#endif +//#include "doom_config.h" + +#if defined(I_NET_ENABLED) +#if defined(DOOM_WIN32) +#define _CRT_SECURE_NO_WARNINGS +#define _WINSOCK_DEPRECATED_NO_WARNINGS +//#include +//#include +#define IPPORT_USERRESERVED 5000 +#pragma comment(lib, "ws2_32.lib") +#else + //#include + //#include + //#include + //#include +#define SOCKET int +#endif +#else +#define IPPORT_USERRESERVED 5000 +#endif + +//#include "i_system.h" +//#include "d_event.h" +//#include "d_net.h" +//#include "m_argv.h" +//#include "doomstat.h" +//#include "i_net.h" + + +// For some odd reason... +#if !defined(DOOM_APPLE) // It doesn't complain on Win32? O_o +#define ntohl(x) \ + ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \ + (((unsigned long int)(x) & 0x0000ff00U) << 8) | \ + (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \ + (((unsigned long int)(x) & 0xff000000U) >> 24))) + +#define ntohs(x) \ + ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \ + (((unsigned short int)(x) & 0xff00) >> 8))) \ + +#define htonl(x) ntohl(x) +#define htons(x) ntohs(x) +#endif + + +// +// NETWORKING +// + +int DOOMPORT = (IPPORT_USERRESERVED + 0x1d); +int DOOMPORT_SEND = (IPPORT_USERRESERVED + 0x1e); + +#if defined(I_NET_ENABLED) +SOCKET sendsocket; +SOCKET insocket; + +struct sockaddr_in sendaddress[MAXNETNODES]; +#endif + +void (*netget) (void); +void (*netsend) (void); + + +void NetSend(void); +doom_boolean NetListen(void); + +// +// UDPsocket +// +#if defined(I_NET_ENABLED) +SOCKET UDPsocket(void) +{ + SOCKET s; + + // allocate a socket + s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (s < 0) + { + //I_Error("Error: can't create socket: %s", strerror(errno)); + + doom_strcpy(error_buf, "Error: can't create socket: "); + doom_concat(error_buf, strerror(errno)); + I_Error(error_buf); + } + + return s; +} +#endif + + +// +// BindToLocalPort +// +#if defined(I_NET_ENABLED) +void BindToLocalPort(SOCKET s, int port) +{ + int v; + struct sockaddr_in address; + + doom_memset(&address, 0, sizeof(address)); + address.sin_family = AF_INET; + address.sin_addr.s_addr = INADDR_ANY; + address.sin_port = port; + + v = bind(s, (const sockaddr*)&address, sizeof(address)); + if (v == -1) + { + //I_Error("Error: BindToPort: bind: %s", strerror(errno)); + + doom_strcpy(error_buf, "Error: BindToPort: bind: "); + doom_concat(error_buf, strerror(errno)); + I_Error(error_buf); + } +} +#endif + + +// +// PacketSend +// +void PacketSend(void) +{ +#if defined(I_NET_ENABLED) + int c; + doomdata_t sw; + + // byte swap + sw.checksum = htonl(netbuffer->checksum); + sw.player = netbuffer->player; + sw.retransmitfrom = netbuffer->retransmitfrom; + sw.starttic = netbuffer->starttic; + sw.numtics = netbuffer->numtics; + for (c = 0; c < netbuffer->numtics; c++) + { + sw.cmds[c].forwardmove = netbuffer->cmds[c].forwardmove; + sw.cmds[c].sidemove = netbuffer->cmds[c].sidemove; + sw.cmds[c].angleturn = htons(netbuffer->cmds[c].angleturn); + sw.cmds[c].consistancy = htons(netbuffer->cmds[c].consistancy); + sw.cmds[c].chatchar = netbuffer->cmds[c].chatchar; + sw.cmds[c].buttons = netbuffer->cmds[c].buttons; + } + + //doom_print ("sending %i\n",gametic); + c = sendto(sendsocket, (const char*)&sw, doomcom->datalength + , 0, (const sockaddr*)&sendaddress[doomcom->remotenode] + , sizeof(sendaddress[doomcom->remotenode])); +#endif +} + + +// +// PacketGet +// +void PacketGet(void) +{ +#if defined(I_NET_ENABLED) + int i; + int c; + struct sockaddr_in fromaddress; +#if defined(__APPLE__) + socklen_t fromlen; +#else + int fromlen; +#endif + doomdata_t sw; + + fromlen = sizeof(fromaddress); + c = recvfrom(insocket, (char*)&sw, sizeof(sw), 0 + , (struct sockaddr*)&fromaddress, &fromlen); + if (c == -1) + { +#if defined(DOOM_WIN32) + int r = WSAGetLastError(); + if (r != WSAEWOULDBLOCK) + { + //I_Error("Error: GetPacket: %i", r); + + doom_strcpy(error_buf, "Error: GetPacket: "); + doom_concat(error_buf, doom_itoa(r, 10)); + I_Error(error_buf); + } +#else + if (errno != EWOULDBLOCK) + { + //I_Error("Error: GetPacket: %s", strerror(errno)); + + doom_strcpy(error_buf, "Error: GetPacket: "); + doom_concat(error_buf, strerror(errno)); + I_Error(error_buf); + } +#endif + doomcom->remotenode = -1; // no packet + return; + } + + { + static int first = 1; + if (first) + { + //doom_print("len=%d:p=[0x%x 0x%x] \n", c, *(int*)&sw, *((int*)&sw + 1)); + doom_print("len="); + doom_print(doom_itoa(c, 10)); + doom_print(":p=[0x"); + doom_print(doom_itoa(*(int*)&sw, 16)); + doom_print(" 0x"); + doom_print(doom_itoa(*((int*)&sw + 1), 16)); + doom_print("] \n"); + } + first = 0; + } + + // find remote node number + for (i = 0; i < doomcom->numnodes; i++) + if (fromaddress.sin_addr.s_addr == sendaddress[i].sin_addr.s_addr) + break; + + if (i == doomcom->numnodes) + { + // packet is not from one of the players (new game broadcast) + doomcom->remotenode = -1; // no packet + return; + } + + doomcom->remotenode = i; // good packet from a game player + doomcom->datalength = c; + + // byte swap + netbuffer->checksum = ntohl(sw.checksum); + netbuffer->player = sw.player; + netbuffer->retransmitfrom = sw.retransmitfrom; + netbuffer->starttic = sw.starttic; + netbuffer->numtics = sw.numtics; + + for (c = 0; c < netbuffer->numtics; c++) + { + netbuffer->cmds[c].forwardmove = sw.cmds[c].forwardmove; + netbuffer->cmds[c].sidemove = sw.cmds[c].sidemove; + netbuffer->cmds[c].angleturn = ntohs(sw.cmds[c].angleturn); + netbuffer->cmds[c].consistancy = ntohs(sw.cmds[c].consistancy); + netbuffer->cmds[c].chatchar = sw.cmds[c].chatchar; + netbuffer->cmds[c].buttons = sw.cmds[c].buttons; + } +#endif +} + + +int GetLocalAddress(void) +{ +#if defined(I_NET_ENABLED) + char hostname[1024]; + struct hostent* hostentry; // host information entry + int v; + + // get local address + v = gethostname(hostname, sizeof(hostname)); + if (v == -1) + { + //I_Error("Error: GetLocalAddress : gethostname: errno %d", errno); + + doom_strcpy(error_buf, "Error: GetLocalAddress : gethostname: errno "); + doom_concat(error_buf, strerror(errno)); + I_Error(error_buf); + } + + hostentry = gethostbyname(hostname); + if (!hostentry) + { + I_Error((char*)"Error: GetLocalAddress : gethostbyname: couldn't get local host"); + } + + return *(int*)hostentry->h_addr_list[0]; +#else + return 0; +#endif +} + + +// +// I_InitNetwork +// +void I_InitNetwork(void) +{ +#if defined(I_NET_ENABLED) +#if defined(DOOM_WIN32) + WSADATA wsaData; + WSAStartup(MAKEWORD(2, 2), &wsaData); + + u_long trueval = 1; +#else + doom_boolean trueval = doom_true; +#endif +#endif + int i; + int p; + + doomcom = (doomcom_t*)doom_malloc(sizeof(*doomcom)); + doom_memset(doomcom, 0, sizeof(*doomcom)); + + // set up for network + i = M_CheckParm((char*)"-dup"); + if (i && i < myargc - 1) + { + doomcom->ticdup = myargv[i + 1][0] - '0'; + if (doomcom->ticdup < 1) + doomcom->ticdup = 1; + if (doomcom->ticdup > 9) + doomcom->ticdup = 9; + } + else + doomcom->ticdup = 1; + + if (M_CheckParm((char*)"-extratic")) + doomcom->extratics = 1; + else + doomcom->extratics = 0; + + p = M_CheckParm((char*)"-port"); + if (p && p < myargc - 1) + { + DOOMPORT = doom_atoi(myargv[p + 1]); + //doom_print("using alternate port %i\n", DOOMPORT); + doom_print("using alternate port "); + doom_print(doom_itoa(DOOMPORT, 10)); + doom_print("\n"); + } + + p = M_CheckParm((char*)"-sendport"); + if (p && p < myargc - 1) + { + DOOMPORT_SEND = doom_atoi(myargv[p + 1]); + //doom_print("using alternate send port %i\n", DOOMPORT_SEND); + doom_print("using alternate send port "); + doom_print(doom_itoa(DOOMPORT_SEND, 10)); + doom_print("\n"); + } + + // parse network game options, + // -net ... + i = M_CheckParm((char*)"-net"); + if (!i) + { + // single player game + netgame = doom_false; + doomcom->id = DOOMCOM_ID; + doomcom->numplayers = doomcom->numnodes = 1; + doomcom->deathmatch = doom_false; + doomcom->consoleplayer = 0; + return; + } + +#if defined(I_NET_ENABLED) + struct hostent* hostentry; // host information entry + netsend = PacketSend; + netget = PacketGet; + netgame = doom_true; + + // parse player number and host list + doomcom->consoleplayer = myargv[i + 1][0] - '1'; + + doomcom->numnodes = 1; // this node for sure + + i++; + while (++i < myargc && myargv[i][0] != '-') + { + sendaddress[doomcom->numnodes].sin_family = AF_INET; + sendaddress[doomcom->numnodes].sin_port = htons(DOOMPORT); + if (myargv[i][0] == '.') + { + sendaddress[doomcom->numnodes].sin_addr.s_addr + = inet_addr(myargv[i] + 1); + } + else + { + hostentry = gethostbyname(myargv[i]); + if (!hostentry) + { + //I_Error("Error: gethostbyname: couldn't find %s", myargv[i]); + + doom_strcpy(error_buf, "Error: gethostbyname: couldn't find "); + doom_concat(error_buf, myargv[i]); + I_Error(error_buf); + } + sendaddress[doomcom->numnodes].sin_addr.s_addr + = *(int*)hostentry->h_addr_list[0]; + } + doomcom->numnodes++; + } + + doomcom->id = DOOMCOM_ID; + doomcom->numplayers = doomcom->numnodes; + + // build message to receive + insocket = UDPsocket(); + BindToLocalPort(insocket, htons(DOOMPORT)); +#if defined(DOOM_WIN32) + ioctlsocket(insocket, FIONBIO, &trueval); +#else + ioctl(insocket, FIONBIO, &trueval); +#endif + + sendsocket = UDPsocket(); +#endif +} + + +void I_NetCmd(void) +{ +#if defined(I_NET_ENABLED) + if (doomcom->command == CMD_SEND) + { + netsend(); + } + else if (doomcom->command == CMD_GET) + { + netget(); + } + else + { + //I_Error("Error: Bad net cmd: %i\n", doomcom->command); + + doom_strcpy(error_buf, "Error: Bad net cmd: "); + doom_concat(error_buf, doom_itoa(doomcom->command, 10)); + I_Error(error_buf); + } +#endif +} +#define SAMPLECOUNT 512 +#define NUM_CHANNELS 8 +// It is 2 for 16bit, and 2 for two channels. +#define BUFMUL 4 +#define MIXBUFFERSIZE (SAMPLECOUNT*BUFMUL) + +#define SAMPLERATE 11025 // Hz +#define SAMPLESIZE 2 // 16bit + +#define MAX_QUEUED_MIDI_MSGS 256 + +#define EVENT_RELEASE_NOTE 0 +#define EVENT_PLAY_NOTE 1 +#define EVENT_PITCH_BEND 2 +#define EVENT_SYSTEM_EVENT 3 +#define EVENT_CONTROLLER 4 +#define EVENT_END_OF_MEASURE 5 +#define EVENT_FINISH 6 +#define EVENT_UNUSED 7 + +#define CONTROLLER_EVENT_ALL_SOUNDS_OFF 10 +#define CONTROLLER_EVENT_ALL_NOTES_OFF 11 +#define CONTROLLER_EVENT_MONO 12 +#define CONTROLLER_EVENT_POLY 13 +#define CONTROLLER_EVENT_RESET_ALL_CONTROLLERS 14 +#define CONTROLLER_EVENT_EVENT 15 + +#define CONTROLLER_CHANGE_INSTRUMENT 0 +#define CONTROLLER_BANK_SELECT 1 +#define CONTROLLER_MODULATION 2 +#define CONTROLLER_VOLUME 3 +#define CONTROLLER_PAN 4 +#define CONTROLLER_EXPRESSION 5 +#define CONTROLLER_REVERB 6 +#define CONTROLLER_CHORUS 7 +#define CONTROLLER_SUSTAIN 8 +#define CONTROLLER_SOFT 9 + + +typedef struct +{ + char ID[4]; + unsigned short scoreLen; + unsigned short scoreStart; + unsigned short channels; + unsigned short sec_channels; + unsigned short instrCnt; + unsigned short dummy; +} mus_header_t; + + +// A quick hack to establish a protocol between +// synchronous mix buffer updates and asynchronous +// audio writes. Probably redundant with gametic. +static int flag = 0; + +static unsigned char* mus_data = 0; +static mus_header_t mus_header; +static int mus_offset = 0; +static int mus_delay = 0; +static doom_boolean mus_loop = doom_false; +static doom_boolean mus_playing = doom_false; +static int mus_volume = 127; +static int mus_channel_volumes[16] = { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127 }; + +static int looping = 0; +static int musicdies = -1; + + +// The number of internal mixing channels, +// the samples calculated for each mixing step, +// the size of the 16bit, 2 hardware channel (stereo) +// mixing buffer, and the samplerate of the raw data. + +// The actual lengths of all sound effects. +int lengths[NUMSFX]; + +// The actual output device. +int audio_fd; + +// The global mixing buffer. +// Basically, samples from all active internal channels +// are modifed and added, and stored in the buffer +// that is submitted to the audio device. +signed short mixbuffer[MIXBUFFERSIZE]; + + +// The channel step amount... +unsigned int channelstep[NUM_CHANNELS]; +// ... and a 0.16 bit remainder of last step. +unsigned int channelstepremainder[NUM_CHANNELS]; + +// The channel data pointers, start and end. +unsigned char* channels[NUM_CHANNELS]; +unsigned char* channelsend[NUM_CHANNELS]; + +// Time/gametic that the channel started playing, +// used to determine oldest, which automatically +// has lowest priority. +// In case number of active sounds exceeds +// available channels. +int channelstart[NUM_CHANNELS]; + +// The sound in channel handles, +// determined on registration, +// might be used to unregister/stop/modify, +// currently unused. +int channelhandles[NUM_CHANNELS]; + +// SFX id of the playing sound effect. +// Used to catch duplicates (like chainsaw). +int channelids[NUM_CHANNELS]; + +// Pitch to stepping lookup, unused. +int steptable[256]; + +// Volume lookups. +int vol_lookup[128 * 256]; + +// Hardware left and right channel volume lookup. +int* channelleftvol_lookup[NUM_CHANNELS]; +int* channelrightvol_lookup[NUM_CHANNELS]; + +unsigned long queued_midi_msgs[MAX_QUEUED_MIDI_MSGS]; +int queue_midi_head = 0; +int queue_midi_tail = 0; + + +void TickSong(); + + +// +// This function loads the sound data from the WAD lump, +// for single sound. +// +void* getsfx(char* sfxname, int* len) +{ + unsigned char* sfx; + unsigned char* paddedsfx; + int i; + int size; + int paddedsize; + char name[20]; + int sfxlump; + + // Get the sound data from the WAD, allocate lump + // in zone memory. + //doom_sprintf(name, "ds%s", sfxname); + doom_strcpy(name, "ds"); + doom_concat(name, sfxname); + + // Now, there is a severe problem with the + // sound handling, in it is not (yet/anymore) + // gamemode aware. That means, sounds from + // DOOM II will be requested even with DOOM + // shareware. + // The sound list is wired into sounds.c, + // which sets the external variable. + // I do not do runtime patches to that + // variable. Instead, we will use a + // default sound for replacement. + if (W_CheckNumForName(name) == -1) + sfxlump = W_GetNumForName((char*)"dspistol"); + else + sfxlump = W_GetNumForName(name); + + size = W_LumpLength(sfxlump); + + sfx = (unsigned char*)W_CacheLumpNum(sfxlump, PU_STATIC); + + // Pads the sound effect out to the mixing buffer size. + // The original realloc would interfere with zone memory. + paddedsize = ((size - 8 + (SAMPLECOUNT - 1)) / SAMPLECOUNT) * SAMPLECOUNT; + + // Allocate from zone memory. + paddedsfx = (unsigned char*)Z_Malloc(paddedsize + 8, PU_STATIC, 0); + // ddt: (unsigned char *) realloc(sfx, paddedsize+8); + // This should interfere with zone memory handling, + // which does not kick in in the soundserver. + + // Now copy and pad. + doom_memcpy(paddedsfx, sfx, size); + for (i = size; i < paddedsize + 8; i++) + paddedsfx[i] = 128; + + // Remove the cached lump. + Z_Free(sfx); + + // Preserve padded length. + *len = paddedsize; + + // Return allocated padded data. + return (void*)(paddedsfx + 8); +} + + +// +// This function adds a sound to the +// list of currently active sounds, +// which is maintained as a given number +// (eight, usually) of internal channels. +// Returns a handle. +// +int addsfx(int sfxid, int volume, int step, int seperation) +{ + static unsigned short handlenums = 0; + + int i; + int rc = -1; + + int oldest = gametic; + int oldestnum = 0; + int slot; + + int rightvol; + int leftvol; + + // Chainsaw troubles. + // Play these sound effects only one at a time. + if (sfxid == sfx_sawup + || sfxid == sfx_sawidl + || sfxid == sfx_sawful + || sfxid == sfx_sawhit + || sfxid == sfx_stnmov + || sfxid == sfx_pistol) + { + // Loop all channels, check. + for (i = 0; i < NUM_CHANNELS; i++) + { + // Active, and using the same SFX? + if ((channels[i]) + && (channelids[i] == sfxid)) + { + // Reset. + channels[i] = 0; + // We are sure that iff, + // there will only be one. + break; + } + } + } + + // Loop all channels to find oldest SFX. + for (i = 0; (i < NUM_CHANNELS) && (channels[i]); i++) + { + if (channelstart[i] < oldest) + { + oldestnum = i; + oldest = channelstart[i]; + } + } + + // Tales from the cryptic. + // If we found a channel, fine. + // If not, we simply overwrite the first one, 0. + // Probably only happens at startup. + if (i == NUM_CHANNELS) + slot = oldestnum; + else + slot = i; + + // Okay, in the less recent channel, + // we will handle the new SFX. + // Set pointer to raw data. + channels[slot] = (unsigned char*)S_sfx[sfxid].data; + // Set pointer to end of raw data. + channelsend[slot] = channels[slot] + lengths[sfxid]; + + // Reset current handle number, limited to 0..100. + if (!handlenums) + handlenums = 100; + + // Assign current handle number. + // Preserved so sounds could be stopped (unused). + channelhandles[slot] = rc = handlenums++; + + // Set stepping??? + // Kinda getting the impression this is never used. + channelstep[slot] = step; + // ??? + channelstepremainder[slot] = 0; + // Should be gametic, I presume. + channelstart[slot] = gametic; + + // Separation, that is, orientation/stereo. + // range is: 1 - 256 + seperation += 1; + + // Per left/right channel. + // x^2 seperation, + // adjust volume properly. + leftvol = + volume - ((volume * seperation * seperation) >> 16); ///(256*256); + seperation = seperation - 257; + rightvol = + volume - ((volume * seperation * seperation) >> 16); + + // Sanity check, clamp volume. + if (rightvol < 0 || rightvol > 127) + I_Error((char*)"Error: rightvol out of bounds"); + + if (leftvol < 0 || leftvol > 127) + I_Error((char*)"Error: leftvol out of bounds"); + + // Get the proper lookup table piece + // for this volume level??? + channelleftvol_lookup[slot] = &vol_lookup[leftvol * 256]; + channelrightvol_lookup[slot] = &vol_lookup[rightvol * 256]; + + // Preserve sound SFX id, + // e.g. for avoiding duplicates of chainsaw. + channelids[slot] = sfxid; + + // You tell me. + return rc; +} + + +// +// SFX API +// Note: this was called by S_Init. +// However, whatever they did in the +// old DPMS based DOS version, this +// were simply dummies in the Linux +// version. +// See soundserver initdata(). +// +void I_SetChannels() +{ + // Init internal lookups (raw data, mixing buffer, channels). + // This function sets up internal lookups used during + // the mixing process. + int i; + int j; + + int* steptablemid = steptable + 128; + + // Okay, reset internal mixing channels to zero. + /*for (i=0; iname); + doom_strcpy(namebuf, "ds"); + doom_concat(namebuf, sfx->name); + return W_GetNumForName(namebuf); +} + + +// +// Starting a sound means adding it +// to the current list of active sounds +// in the internal channels. +// As the SFX info struct contains +// e.g. a pointer to the raw data, +// it is ignored. +// As our sound handling does not handle +// priority, it is ignored. +// Pitching (that is, increased speed of playback) +// is set, but currently not used by mixing. +// +int I_StartSound(int id, int vol, int sep, int pitch, int priority) +{ + // Returns a handle (not used). + id = addsfx(id, vol, steptable[pitch], sep); + return id; +} + + +void I_StopSound(int handle) +{ + // You need the handle returned by StartSound. + // Would be looping all channels, + // tracking down the handle, + // an setting the channel to zero. +} + + +int I_SoundIsPlaying(int handle) +{ + // Ouch. + return gametic < handle; +} + + +// +// This function loops all active (internal) sound +// channels, retrieves a given number of samples +// from the raw sound data, modifies it according +// to the current (internal) channel parameters, +// mixes the per channel samples into the global +// mixbuffer, clamping it to the allowed range, +// and sets up everything for transferring the +// contents of the mixbuffer to the (two) +// hardware channels (left and right, that is). +// +// This function currently supports only 16bit. +// +void I_UpdateSound(void) +{ + static int song_tick_progress = 0; + + // Mix current sound data. + // Data, from raw sound, for right and left. + unsigned int sample; + int dl; + int dr; + + // Pointers in global mixbuffer, left, right, end. + signed short* leftout; + signed short* rightout; + signed short* leftend; + // Step in mixbuffer, left and right, thus two. + int step; + + // Mixing channel index. + int chan; + + // Do music first. [dsl] TODO: if we have embedded synth + //static int song_progress = 0; + //song_progress += 512; + //while (song_progress > 0) + //{ + // TickSong(); // About 7 music ticks per sound sampling (X for doubt) + // song_progress -= 78; + //} + + // Left and right channel + // are in global mixbuffer, alternating. + leftout = mixbuffer; + rightout = mixbuffer + 1; + step = 2; + + // Determine end, for left channel only + // (right channel is implicit). + leftend = mixbuffer + SAMPLECOUNT * step; + + // Mix sounds into the mixing buffer. + // Loop over step*SAMPLECOUNT, + // that is 512 values for two channels. + while (leftout != leftend) + { + // Reset left/right value. + dl = 0; + dr = 0; + + // Love thy L2 chache - made this a loop. + // Now more channels could be set at compile time + // as well. Thus loop those channels. + for (chan = 0; chan < NUM_CHANNELS; chan++) + { + // Check channel, if active. + if (channels[chan]) + { + // Get the raw data from the channel. + sample = *channels[chan]; + // Add left and right part + // for this channel (sound) + // to the current data. + // Adjust volume accordingly. + dl += channelleftvol_lookup[chan][sample]; + dr += channelrightvol_lookup[chan][sample]; + // Increment index ??? + channelstepremainder[chan] += channelstep[chan]; + // MSB is next sample??? + channels[chan] += channelstepremainder[chan] >> 16; + // Limit to LSB??? + channelstepremainder[chan] &= 65536 - 1; + + // Check whether we are done. + if (channels[chan] >= channelsend[chan]) + channels[chan] = 0; + } + } + + // Clamp to range. Left hardware channel. + // Has been char instead of short. + // if (dl > 127) *leftout = 127; + // else if (dl < -128) *leftout = -128; + // else *leftout = dl; + + if (dl > 0x7fff) + *leftout = 0x7fff; + else if (dl < -0x8000) + *leftout = -0x8000; + else + *leftout = dl; + + // Same for right hardware channel. + if (dr > 0x7fff) + *rightout = 0x7fff; + else if (dr < -0x8000) + *rightout = -0x8000; + else + *rightout = dr; + + // Increment current pointers in mixbuffer. + leftout += step; + rightout += step; + } +} + + +//extern doom_sound_callbacks_t doom_sound_callbacks; +//extern doom_boolean skip_next_sound_update; + +// +// This would be used to write out the mixbuffer +// during each game loop update. +// Updates sound buffer and audio device at runtime. +// It is called during Timer interrupt with SNDINTR. +// Mixing now done synchronous, and +// only output be done asynchronous? +// +void I_SubmitSound(void) +{ +} + + +void I_UpdateSoundParams(int handle, int vol, int sep, int pitch) +{ + // I fail too see that this is used. + // Would be using the handle to identify + // on which channel the sound might be active, + // and resetting the channel parameters. +} + + +void I_ShutdownSound(void) +{ + // Wait till all pending sounds are finished. + int done = 0; + int i; + + // FIXME (below). + doom_print("I_ShutdownSound: NOT finishing pending sounds\n"); + + while (!done) + { + for (i = 0; i < 8 && !channels[i]; i++); + + // FIXME. No proper channel output. + //if (i==8) + done = 1; + } + + // Done. + return; +} + + +void I_InitSound() +{ + int i; + + // Secure and configure sound device first. + doom_print("I_InitSound: "); + + // Initialize external data (all sounds) at start, keep static. + doom_print("I_InitSound: "); + + for (i = 1; i < NUMSFX; i++) + { + // Alias? Example is the chaingun sound linked to pistol. + if (!S_sfx[i].link) + { + // Load data from WAD file. + S_sfx[i].data = getsfx(S_sfx[i].name, &lengths[i]); + } + else + { + // Previously loaded already? + S_sfx[i].data = S_sfx[i].link->data; + lengths[i] = lengths[(S_sfx[i].link - S_sfx) / sizeof(sfxinfo_t)]; + } + } + + doom_print(" pre-cached all sound data\n"); + + // Now initialize mixbuffer with zero. + for (i = 0; i < MIXBUFFERSIZE; i++) + mixbuffer[i] = 0; + + // Finished initialization. + doom_print("I_InitSound: sound module ready\n"); +} + + +// +// MUSIC API. +// +void I_InitMusic(void) +{ +} + + +void I_ShutdownMusic(void) +{ +} + + +void I_PlaySong(int handle, int looping) +{ + musicdies = gametic + TICRATE * 30; + + mus_loop = looping ? doom_true : doom_false; + mus_playing = doom_true; +} + + +void I_PauseSong(int handle) +{ + mus_playing = doom_false; +} + + +void I_ResumeSong(int handle) +{ + if (mus_data) mus_playing = doom_true; +} + + +static void reset_all_channels() +{ + for (int i = 0; i < 16; ++i) + queued_midi_msgs[(queue_midi_tail++) % MAX_QUEUED_MIDI_MSGS] = 0b10110000 | i | (123 << 8); +} + + +void I_StopSong(int handle) +{ + mus_data = 0; + mus_delay = 0; + mus_offset = 0; + mus_playing = doom_false; + + reset_all_channels(); +} + + +void I_UnRegisterSong(int handle) +{ + I_StopSong(handle); +} + + +int I_RegisterSong(void* data) +{ + doom_memcpy(&mus_header, data, sizeof(mus_header_t)); + if (doom_strncmp(mus_header.ID, "MUS", 3) != 0 || mus_header.ID[3] != 0x1A) return 0; + + mus_data = (unsigned char*)data; + mus_delay = 0; + mus_offset = mus_header.scoreStart; + mus_playing = doom_false; + + return 1; +} + + +// Is the song playing? +int I_QrySongPlaying(int handle) +{ + return mus_playing; +} + + +unsigned long I_TickSong() +{ + unsigned long midi_event = 0; + + // Dequeue MIDI events + if (queue_midi_head != queue_midi_tail) + return queued_midi_msgs[(queue_midi_head++) % MAX_QUEUED_MIDI_MSGS]; + + if (!mus_playing || !mus_data) return 0; + + if (mus_delay <= 0) + { + int event = (int)mus_data[mus_offset++]; + int type = (event & 0b01110000) >> 4; + int channel = event & 0b00001111; + + if (channel == 15) channel = 9; // Percussion is 9 on GM + else if (channel == 9) channel = 15; + + switch (type) + { + case EVENT_RELEASE_NOTE: + { + int note = (int)mus_data[mus_offset++] & 0b01111111; + midi_event = (0x00000080 | channel | (note << 8)); + break; + } + case EVENT_PLAY_NOTE: + { + int note_bytes = (int)mus_data[mus_offset++]; + int note = note_bytes & 0b01111111; + int vol = 127; + if (note_bytes & 0b10000000) vol = (int)mus_data[mus_offset++] & 0b01111111; + midi_event = (0x00000090 | channel | (note << 8) | (vol << 16)); + break; + } + case EVENT_PITCH_BEND: + { + int bend_amount = (int)mus_data[mus_offset++] * 64; + int l = bend_amount & 0b01111111; + int m = (bend_amount & 0b1111111110000000) >> 7; + midi_event = (0x000000E0 | channel | (l << 8) | (m << 16)); + break; + } + case EVENT_SYSTEM_EVENT: + { + int controller = (int)mus_data[mus_offset++] & 0b01111111; + switch (controller) + { + case CONTROLLER_EVENT_ALL_SOUNDS_OFF: + midi_event = (0x000000B0 | channel | (120 << 8)); + break; + case CONTROLLER_EVENT_ALL_NOTES_OFF: + midi_event = (0x000000B0 | channel | (123 << 8)); + break; + case CONTROLLER_EVENT_MONO: + midi_event = (0x000000B0 | channel | (126 << 8)); + break; + case CONTROLLER_EVENT_POLY: + midi_event = (0x000000B0 | channel | (127 << 8)); + break; + case CONTROLLER_EVENT_RESET_ALL_CONTROLLERS: + midi_event = (0x000000B0 | channel | (121 << 8)); + break; + case CONTROLLER_EVENT_EVENT: // Doom never implemented + break; + } + break; + } + case EVENT_CONTROLLER: + { + int controller = (int)mus_data[mus_offset++] & 0b01111111; + int value = (int)mus_data[mus_offset++] & 0b01111111; + switch (controller) + { + case CONTROLLER_CHANGE_INSTRUMENT: + midi_event = (0x000000C0 | channel | (value << 8)); + break; + case CONTROLLER_BANK_SELECT: + midi_event = (0x000000B0 | channel | 0x2000 | (value << 16)); + break; + case CONTROLLER_MODULATION: + midi_event = (0x000000B0 | channel | 0x0100 | (value << 16)); + break; + case CONTROLLER_VOLUME: + mus_channel_volumes[channel] = value; + midi_event = (0x000000B0 | channel | 0x0700 | (((mus_channel_volumes[channel] * mus_volume) / 127) << 16)); + break; + case CONTROLLER_PAN: + midi_event = (0x000000B0 | channel | 0x0A00 | (value << 16)); + break; + case CONTROLLER_EXPRESSION: + midi_event = (0x000000B0 | channel | 0x0B00 | (value << 16)); + break; + case CONTROLLER_REVERB: + midi_event = (0x000000B0 | channel | 0x5B00 | (value << 16)); + break; + case CONTROLLER_CHORUS: + midi_event = (0x000000B0 | channel | 0x5D00 | (value << 16)); + break; + case CONTROLLER_SUSTAIN: + midi_event = (0x000000B0 | channel | 0x4000 | (value << 16)); + break; + case CONTROLLER_SOFT: + midi_event = (0x000000B0 | channel | 0x4300 | (value << 16)); + break; + } + break; + } + case EVENT_END_OF_MEASURE: + { + break; + } + case EVENT_FINISH: + { + // Loop + if (mus_loop) + { + mus_delay = 0; + mus_offset = mus_header.scoreStart; + break; + } + else + { + mus_playing = doom_false; + return 0; + } + } + case EVENT_UNUSED: + { + int dummy = (int)mus_data[mus_offset++]; + break; + } + } + + if (event & 0b10000000) // Followed by delay + { + mus_delay = 0; + int delay_byte = 0; + do + { + delay_byte = mus_data[mus_offset++]; + mus_delay = mus_delay * 128 + delay_byte & 0b01111111; + } while (delay_byte & 0b10000000); + + return midi_event; + } + } + + mus_delay--; + + return midi_event; +} +int mb_used = 6 * (sizeof(void*) / 4); +ticcmd_t emptycmd; + + +extern doom_boolean demorecording; + + +void I_Tactile(int on, int off, int total) +{ +} + + +ticcmd_t* I_BaseTiccmd(void) +{ + return &emptycmd; +} + + +int I_GetHeapSize(void) +{ + return mb_used * 1024 * 1024; +} + + +byte* I_ZoneBase(int* size) +{ + *size = mb_used * 1024 * 1024; + return (byte*)doom_malloc(*size); +} + + +// +// I_GetTime +// returns time in 1/70th second tics +// +int I_GetTime(void) +{ + int sec, usec; + int newtics; + static int basetime = 0; + + doom_gettime(&sec, &usec); + if (!basetime) + basetime = sec; + newtics = (sec - basetime) * TICRATE + usec * TICRATE / 1000000; + return newtics; +} + + +// +// I_Init +// +void I_Init(void) +{ + I_InitSound(); +} + + +// +// I_Quit +// +void I_Quit(void) +{ + D_QuitNetGame(); + I_ShutdownSound(); + I_ShutdownMusic(); + M_SaveDefaults(); + I_ShutdownGraphics(); + doom_exit(0); +} + + +void I_WaitVBL(int count) +{ +#if 0 // [pd] Never sleep in main thread +#ifdef SGI + sginap(1); +#else +#ifdef SUN + sleep(0); +#else + usleep(count * (1000000 / 70)); +#endif +#endif +#endif +} + + +void I_BeginRead(void) +{ +} + + +void I_EndRead(void) +{ +} + + +byte* I_AllocLow(int length) +{ + byte* mem; + + mem = (byte*)doom_malloc(length); + doom_memset(mem, 0, length); + return mem; +} + + +// +// I_Error +// +void I_Error(char* error) +{ + // Message first. + if (error) doom_print(error); + doom_print("\n"); + + // Shutdown. Here might be other errors. + if (demorecording) + G_CheckDemoStatus(); + + D_QuitNetGame(); + I_ShutdownGraphics(); + + doom_exit(-1); +} +#define POINTER_WARP_COUNTDOWN 1 + + +// Fake mouse handling. +// This cannot work properly w/o DGA. +// Needs an invisible mouse cursor at least. +doom_boolean grabMouse; +int doPointerWarp = POINTER_WARP_COUNTDOWN; + +unsigned char screen_palette[256 * 3]; + +doom_boolean mousemoved = doom_false; +doom_boolean shmFinished; + + +// Blocky mode, +// replace each 320x200 pixel with multiply*multiply pixels. +// According to Dave Taylor, it still is a bonehead thing +// to use .... +static int multiply = 1; +static int lastmousex = 0; +static int lastmousey = 0; + + +void I_ShutdownGraphics(void) +{ +} + + +// +// I_StartFrame +// +void I_StartFrame(void) +{ +} + + +void I_GetEvent(void) +{ +} + + +// +// I_StartTic +// +void I_StartTic(void) +{ +} + + +// +// I_UpdateNoBlit +// +void I_UpdateNoBlit(void) +{ + // what is this? +} + + +// +// I_FinishUpdate +// +void I_FinishUpdate(void) +{ + static int lasttic; + int tics; + int i; + + // draws little dots on the bottom of the screen + if (devparm) + { + i = I_GetTime(); + tics = i - lasttic; + lasttic = i; + if (tics > 20) tics = 20; + + for (i = 0; i < tics * 2; i += 2) + screens[0][(SCREENHEIGHT - 1) * SCREENWIDTH + i] = 0xff; + for (; i < 20 * 2; i += 2) + screens[0][(SCREENHEIGHT - 1) * SCREENWIDTH + i] = 0x0; + + } +} + + +// +// I_ReadScreen +// +void I_ReadScreen(byte* scr) +{ + doom_memcpy(scr, screens[0], SCREENWIDTH * SCREENHEIGHT); +} + + +// +// I_SetPalette +// +void I_SetPalette(byte* palette) +{ + doom_memcpy(screen_palette, palette, 256 * 3); +} + + +void I_InitGraphics(void) +{ + screens[0] = (unsigned char*)doom_malloc(SCREENWIDTH * SCREENHEIGHT); +} +char* sprnames[NUMSPRITES + 1] = { + (char*)"TROO",(char*)"SHTG",(char*)"PUNG",(char*)"PISG",(char*)"PISF",(char*)"SHTF",(char*)"SHT2",(char*)"CHGG",(char*)"CHGF",(char*)"MISG", + (char*)"MISF",(char*)"SAWG",(char*)"PLSG",(char*)"PLSF",(char*)"BFGG",(char*)"BFGF",(char*)"BLUD",(char*)"PUFF",(char*)"BAL1",(char*)"BAL2", + (char*)"PLSS",(char*)"PLSE",(char*)"MISL",(char*)"BFS1",(char*)"BFE1",(char*)"BFE2",(char*)"TFOG",(char*)"IFOG",(char*)"PLAY",(char*)"POSS", + (char*)"SPOS",(char*)"VILE",(char*)"FIRE",(char*)"FATB",(char*)"FBXP",(char*)"SKEL",(char*)"MANF",(char*)"FATT",(char*)"CPOS",(char*)"SARG", + (char*)"HEAD",(char*)"BAL7",(char*)"BOSS",(char*)"BOS2",(char*)"SKUL",(char*)"SPID",(char*)"BSPI",(char*)"APLS",(char*)"APBX",(char*)"CYBR", + (char*)"PAIN",(char*)"SSWV",(char*)"KEEN",(char*)"BBRN",(char*)"BOSF",(char*)"ARM1",(char*)"ARM2",(char*)"BAR1",(char*)"BEXP",(char*)"FCAN", + (char*)"BON1",(char*)"BON2",(char*)"BKEY",(char*)"RKEY",(char*)"YKEY",(char*)"BSKU",(char*)"RSKU",(char*)"YSKU",(char*)"STIM",(char*)"MEDI", + (char*)"SOUL",(char*)"PINV",(char*)"PSTR",(char*)"PINS",(char*)"MEGA",(char*)"SUIT",(char*)"PMAP",(char*)"PVIS",(char*)"CLIP",(char*)"AMMO", + (char*)"ROCK",(char*)"BROK",(char*)"CELL",(char*)"CELP",(char*)"SHEL",(char*)"SBOX",(char*)"BPAK",(char*)"BFUG",(char*)"MGUN",(char*)"CSAW", + (char*)"LAUN",(char*)"PLAS",(char*)"SHOT",(char*)"SGN2",(char*)"COLU",(char*)"SMT2",(char*)"GOR1",(char*)"POL2",(char*)"POL5",(char*)"POL4", + (char*)"POL3",(char*)"POL1",(char*)"POL6",(char*)"GOR2",(char*)"GOR3",(char*)"GOR4",(char*)"GOR5",(char*)"SMIT",(char*)"COL1",(char*)"COL2", + (char*)"COL3",(char*)"COL4",(char*)"CAND",(char*)"CBRA",(char*)"COL6",(char*)"TRE1",(char*)"TRE2",(char*)"ELEC",(char*)"CEYE",(char*)"FSKU", + (char*)"COL5",(char*)"TBLU",(char*)"TGRN",(char*)"TRED",(char*)"SMBT",(char*)"SMGT",(char*)"SMRT",(char*)"HDB1",(char*)"HDB2",(char*)"HDB3", + (char*)"HDB4",(char*)"HDB5",(char*)"HDB6",(char*)"POB1",(char*)"POB2",(char*)"BRS1",(char*)"TLMP",(char*)"TLP2",0 +}; + + +void A_Light0(player_t* player, pspdef_t* psp); +void A_WeaponReady(player_t* player, pspdef_t* psp); +void A_Lower(player_t* player, pspdef_t* psp); +void A_Raise(player_t* player, pspdef_t* psp); +void A_Punch(player_t* player, pspdef_t* psp); +void A_ReFire(player_t* player, pspdef_t* psp); +void A_FirePistol(player_t* player, pspdef_t* psp); +void A_Light1(player_t* player, pspdef_t* psp); +void A_FireShotgun(player_t* player, pspdef_t* psp); +void A_Light2(player_t* player, pspdef_t* psp); +void A_FireShotgun2(player_t* player, pspdef_t* psp); +void A_CheckReload(player_t* player, pspdef_t* psp); +void A_OpenShotgun2(player_t* player, pspdef_t* psp); +void A_LoadShotgun2(player_t* player, pspdef_t* psp); +void A_CloseShotgun2(player_t* player, pspdef_t* psp); +void A_FireCGun(player_t* player, pspdef_t* psp); +void A_GunFlash(player_t* player, pspdef_t* psp); +void A_FireMissile(player_t* player, pspdef_t* psp); +void A_Saw(player_t* player, pspdef_t* psp); +void A_FirePlasma(player_t* player, pspdef_t* psp); +void A_BFGsound(player_t* player, pspdef_t* psp); +void A_FireBFG(player_t* player, pspdef_t* psp); +void A_BFGSpray(mobj_t* mo); +void A_Explode(mobj_t* thingy); +void A_Pain(mobj_t* actor); +void A_PlayerScream(mobj_t* mo); +void A_Fall(mobj_t* actor); +void A_XScream(mobj_t* actor); +void A_Look(mobj_t* actor); +void A_Chase(mobj_t* actor); +void A_FaceTarget(mobj_t* actor); +void A_PosAttack(mobj_t* actor); +void A_Scream(mobj_t* actor); +void A_SPosAttack(mobj_t* actor); +void A_VileChase(mobj_t* actor); +void A_VileStart(mobj_t* actor); +void A_VileTarget(mobj_t* actor); +void A_VileAttack(mobj_t* actor); +void A_StartFire(mobj_t* actor); +void A_Fire(mobj_t* actor); +void A_FireCrackle(mobj_t* actor); +void A_Tracer(mobj_t* actor); +void A_SkelWhoosh(mobj_t* actor); +void A_SkelFist(mobj_t* actor); +void A_SkelMissile(mobj_t* actor); +void A_FatRaise(mobj_t* actor); +void A_FatAttack1(mobj_t* actor); +void A_FatAttack2(mobj_t* actor); +void A_FatAttack3(mobj_t* actor); +void A_BossDeath(mobj_t* actor); +void A_CPosAttack(mobj_t* actor); +void A_CPosRefire(mobj_t* actor); +void A_TroopAttack(mobj_t* actor); +void A_SargAttack(mobj_t* actor); +void A_HeadAttack(mobj_t* actor); +void A_BruisAttack(mobj_t* actor); +void A_SkullAttack(mobj_t* actor); +void A_Metal(mobj_t* actor); +void A_SpidRefire(mobj_t* actor); +void A_BabyMetal(mobj_t* actor); +void A_BspiAttack(mobj_t* actor); +void A_Hoof(mobj_t* actor); +void A_CyberAttack(mobj_t* actor); +void A_PainAttack(mobj_t* actor); +void A_PainDie(mobj_t* actor); +void A_KeenDie(mobj_t* actor); +void A_BrainPain(mobj_t* actor); +void A_BrainScream(mobj_t* actor); +void A_BrainDie(mobj_t* actor); +void A_BrainAwake(mobj_t* actor); +void A_BrainSpit(mobj_t* actor); +void A_SpawnSound(mobj_t* actor); +void A_SpawnFly(mobj_t* actor); +void A_BrainExplode(mobj_t* actor); + + +state_t states[NUMSTATES] = { + {SPR_TROO,0,-1,{0},S_NULL,0,0}, // S_NULL + {SPR_SHTG,4,0,{(actionf_p1)A_Light0},S_NULL,0,0}, // S_LIGHTDONE + {SPR_PUNG,0,1,{(actionf_p1)A_WeaponReady},S_PUNCH,0,0}, // S_PUNCH + {SPR_PUNG,0,1,{(actionf_p1)A_Lower},S_PUNCHDOWN,0,0}, // S_PUNCHDOWN + {SPR_PUNG,0,1,{(actionf_p1)A_Raise},S_PUNCHUP,0,0}, // S_PUNCHUP + {SPR_PUNG,1,4,{0},S_PUNCH2,0,0}, // S_PUNCH1 + {SPR_PUNG,2,4,{(actionf_p1)A_Punch},S_PUNCH3,0,0}, // S_PUNCH2 + {SPR_PUNG,3,5,{0},S_PUNCH4,0,0}, // S_PUNCH3 + {SPR_PUNG,2,4,{0},S_PUNCH5,0,0}, // S_PUNCH4 + {SPR_PUNG,1,5,{(actionf_p1)A_ReFire},S_PUNCH,0,0}, // S_PUNCH5 + {SPR_PISG,0,1,{(actionf_p1)A_WeaponReady},S_PISTOL,0,0},// S_PISTOL + {SPR_PISG,0,1,{(actionf_p1)A_Lower},S_PISTOLDOWN,0,0}, // S_PISTOLDOWN + {SPR_PISG,0,1,{(actionf_p1)A_Raise},S_PISTOLUP,0,0}, // S_PISTOLUP + {SPR_PISG,0,4,{0},S_PISTOL2,0,0}, // S_PISTOL1 + {SPR_PISG,1,6,{(actionf_p1)A_FirePistol},S_PISTOL3,0,0},// S_PISTOL2 + {SPR_PISG,2,4,{0},S_PISTOL4,0,0}, // S_PISTOL3 + {SPR_PISG,1,5,{(actionf_p1)A_ReFire},S_PISTOL,0,0}, // S_PISTOL4 + {SPR_PISF,32768,7,{(actionf_p1)A_Light1},S_LIGHTDONE,0,0}, // S_PISTOLFLASH + {SPR_SHTG,0,1,{(actionf_p1)A_WeaponReady},S_SGUN,0,0}, // S_SGUN + {SPR_SHTG,0,1,{(actionf_p1)A_Lower},S_SGUNDOWN,0,0}, // S_SGUNDOWN + {SPR_SHTG,0,1,{(actionf_p1)A_Raise},S_SGUNUP,0,0}, // S_SGUNUP + {SPR_SHTG,0,3,{0},S_SGUN2,0,0}, // S_SGUN1 + {SPR_SHTG,0,7,{(actionf_p1)A_FireShotgun},S_SGUN3,0,0}, // S_SGUN2 + {SPR_SHTG,1,5,{0},S_SGUN4,0,0}, // S_SGUN3 + {SPR_SHTG,2,5,{0},S_SGUN5,0,0}, // S_SGUN4 + {SPR_SHTG,3,4,{0},S_SGUN6,0,0}, // S_SGUN5 + {SPR_SHTG,2,5,{0},S_SGUN7,0,0}, // S_SGUN6 + {SPR_SHTG,1,5,{0},S_SGUN8,0,0}, // S_SGUN7 + {SPR_SHTG,0,3,{0},S_SGUN9,0,0}, // S_SGUN8 + {SPR_SHTG,0,7,{(actionf_p1)A_ReFire},S_SGUN,0,0}, // S_SGUN9 + {SPR_SHTF,32768,4,{(actionf_p1)A_Light1},S_SGUNFLASH2,0,0}, // S_SGUNFLASH1 + {SPR_SHTF,32769,3,{(actionf_p1)A_Light2},S_LIGHTDONE,0,0}, // S_SGUNFLASH2 + {SPR_SHT2,0,1,{(actionf_p1)A_WeaponReady},S_DSGUN,0,0}, // S_DSGUN + {SPR_SHT2,0,1,{(actionf_p1)A_Lower},S_DSGUNDOWN,0,0}, // S_DSGUNDOWN + {SPR_SHT2,0,1,{(actionf_p1)A_Raise},S_DSGUNUP,0,0}, // S_DSGUNUP + {SPR_SHT2,0,3,{0},S_DSGUN2,0,0}, // S_DSGUN1 + {SPR_SHT2,0,7,{(actionf_p1)A_FireShotgun2},S_DSGUN3,0,0}, // S_DSGUN2 + {SPR_SHT2,1,7,{0},S_DSGUN4,0,0}, // S_DSGUN3 + {SPR_SHT2,2,7,{(actionf_p1)A_CheckReload},S_DSGUN5,0,0}, // S_DSGUN4 + {SPR_SHT2,3,7,{(actionf_p1)A_OpenShotgun2},S_DSGUN6,0,0}, // S_DSGUN5 + {SPR_SHT2,4,7,{0},S_DSGUN7,0,0}, // S_DSGUN6 + {SPR_SHT2,5,7,{(actionf_p1)A_LoadShotgun2},S_DSGUN8,0,0}, // S_DSGUN7 + {SPR_SHT2,6,6,{0},S_DSGUN9,0,0}, // S_DSGUN8 + {SPR_SHT2,7,6,{(actionf_p1)A_CloseShotgun2},S_DSGUN10,0,0}, // S_DSGUN9 + {SPR_SHT2,0,5,{(actionf_p1)A_ReFire},S_DSGUN,0,0}, // S_DSGUN10 + {SPR_SHT2,1,7,{0},S_DSNR2,0,0}, // S_DSNR1 + {SPR_SHT2,0,3,{0},S_DSGUNDOWN,0,0}, // S_DSNR2 + {SPR_SHT2,32776,5,{(actionf_p1)A_Light1},S_DSGUNFLASH2,0,0}, // S_DSGUNFLASH1 + {SPR_SHT2,32777,4,{(actionf_p1)A_Light2},S_LIGHTDONE,0,0}, // S_DSGUNFLASH2 + {SPR_CHGG,0,1,{(actionf_p1)A_WeaponReady},S_CHAIN,0,0}, // S_CHAIN + {SPR_CHGG,0,1,{(actionf_p1)A_Lower},S_CHAINDOWN,0,0}, // S_CHAINDOWN + {SPR_CHGG,0,1,{(actionf_p1)A_Raise},S_CHAINUP,0,0}, // S_CHAINUP + {SPR_CHGG,0,4,{(actionf_p1)A_FireCGun},S_CHAIN2,0,0}, // S_CHAIN1 + {SPR_CHGG,1,4,{(actionf_p1)A_FireCGun},S_CHAIN3,0,0}, // S_CHAIN2 + {SPR_CHGG,1,0,{(actionf_p1)A_ReFire},S_CHAIN,0,0}, // S_CHAIN3 + {SPR_CHGF,32768,5,{(actionf_p1)A_Light1},S_LIGHTDONE,0,0}, // S_CHAINFLASH1 + {SPR_CHGF,32769,5,{(actionf_p1)A_Light2},S_LIGHTDONE,0,0}, // S_CHAINFLASH2 + {SPR_MISG,0,1,{(actionf_p1)A_WeaponReady},S_MISSILE,0,0}, // S_MISSILE + {SPR_MISG,0,1,{(actionf_p1)A_Lower},S_MISSILEDOWN,0,0}, // S_MISSILEDOWN + {SPR_MISG,0,1,{(actionf_p1)A_Raise},S_MISSILEUP,0,0}, // S_MISSILEUP + {SPR_MISG,1,8,{(actionf_p1)A_GunFlash},S_MISSILE2,0,0}, // S_MISSILE1 + {SPR_MISG,1,12,{(actionf_p1)A_FireMissile},S_MISSILE3,0,0}, // S_MISSILE2 + {SPR_MISG,1,0,{(actionf_p1)A_ReFire},S_MISSILE,0,0}, // S_MISSILE3 + {SPR_MISF,32768,3,{(actionf_p1)A_Light1},S_MISSILEFLASH2,0,0}, // S_MISSILEFLASH1 + {SPR_MISF,32769,4,{0},S_MISSILEFLASH3,0,0}, // S_MISSILEFLASH2 + {SPR_MISF,32770,4,{(actionf_p1)A_Light2},S_MISSILEFLASH4,0,0}, // S_MISSILEFLASH3 + {SPR_MISF,32771,4,{(actionf_p1)A_Light2},S_LIGHTDONE,0,0}, // S_MISSILEFLASH4 + {SPR_SAWG,2,4,{(actionf_p1)A_WeaponReady},S_SAWB,0,0}, // S_SAW + {SPR_SAWG,3,4,{(actionf_p1)A_WeaponReady},S_SAW,0,0}, // S_SAWB + {SPR_SAWG,2,1,{(actionf_p1)A_Lower},S_SAWDOWN,0,0}, // S_SAWDOWN + {SPR_SAWG,2,1,{(actionf_p1)A_Raise},S_SAWUP,0,0}, // S_SAWUP + {SPR_SAWG,0,4,{(actionf_p1)A_Saw},S_SAW2,0,0}, // S_SAW1 + {SPR_SAWG,1,4,{(actionf_p1)A_Saw},S_SAW3,0,0}, // S_SAW2 + {SPR_SAWG,1,0,{(actionf_p1)A_ReFire},S_SAW,0,0}, // S_SAW3 + {SPR_PLSG,0,1,{(actionf_p1)A_WeaponReady},S_PLASMA,0,0}, // S_PLASMA + {SPR_PLSG,0,1,{(actionf_p1)A_Lower},S_PLASMADOWN,0,0}, // S_PLASMADOWN + {SPR_PLSG,0,1,{(actionf_p1)A_Raise},S_PLASMAUP,0,0}, // S_PLASMAUP + {SPR_PLSG,0,3,{(actionf_p1)A_FirePlasma},S_PLASMA2,0,0}, // S_PLASMA1 + {SPR_PLSG,1,20,{(actionf_p1)A_ReFire},S_PLASMA,0,0}, // S_PLASMA2 + {SPR_PLSF,32768,4,{(actionf_p1)A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH1 + {SPR_PLSF,32769,4,{(actionf_p1)A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH2 + {SPR_BFGG,0,1,{(actionf_p1)A_WeaponReady},S_BFG,0,0}, // S_BFG + {SPR_BFGG,0,1,{(actionf_p1)A_Lower},S_BFGDOWN,0,0}, // S_BFGDOWN + {SPR_BFGG,0,1,{(actionf_p1)A_Raise},S_BFGUP,0,0}, // S_BFGUP + {SPR_BFGG,0,20,{(actionf_p1)A_BFGsound},S_BFG2,0,0}, // S_BFG1 + {SPR_BFGG,1,10,{(actionf_p1)A_GunFlash},S_BFG3,0,0}, // S_BFG2 + {SPR_BFGG,1,10,{(actionf_p1)A_FireBFG},S_BFG4,0,0}, // S_BFG3 + {SPR_BFGG,1,20,{(actionf_p1)A_ReFire},S_BFG,0,0}, // S_BFG4 + {SPR_BFGF,32768,11,{(actionf_p1)A_Light1},S_BFGFLASH2,0,0}, // S_BFGFLASH1 + {SPR_BFGF,32769,6,{(actionf_p1)A_Light2},S_LIGHTDONE,0,0}, // S_BFGFLASH2 + {SPR_BLUD,2,8,{0},S_BLOOD2,0,0}, // S_BLOOD1 + {SPR_BLUD,1,8,{0},S_BLOOD3,0,0}, // S_BLOOD2 + {SPR_BLUD,0,8,{0},S_NULL,0,0}, // S_BLOOD3 + {SPR_PUFF,32768,4,{0},S_PUFF2,0,0}, // S_PUFF1 + {SPR_PUFF,1,4,{0},S_PUFF3,0,0}, // S_PUFF2 + {SPR_PUFF,2,4,{0},S_PUFF4,0,0}, // S_PUFF3 + {SPR_PUFF,3,4,{0},S_NULL,0,0}, // S_PUFF4 + {SPR_BAL1,32768,4,{0},S_TBALL2,0,0}, // S_TBALL1 + {SPR_BAL1,32769,4,{0},S_TBALL1,0,0}, // S_TBALL2 + {SPR_BAL1,32770,6,{0},S_TBALLX2,0,0}, // S_TBALLX1 + {SPR_BAL1,32771,6,{0},S_TBALLX3,0,0}, // S_TBALLX2 + {SPR_BAL1,32772,6,{0},S_NULL,0,0}, // S_TBALLX3 + {SPR_BAL2,32768,4,{0},S_RBALL2,0,0}, // S_RBALL1 + {SPR_BAL2,32769,4,{0},S_RBALL1,0,0}, // S_RBALL2 + {SPR_BAL2,32770,6,{0},S_RBALLX2,0,0}, // S_RBALLX1 + {SPR_BAL2,32771,6,{0},S_RBALLX3,0,0}, // S_RBALLX2 + {SPR_BAL2,32772,6,{0},S_NULL,0,0}, // S_RBALLX3 + {SPR_PLSS,32768,6,{0},S_PLASBALL2,0,0}, // S_PLASBALL + {SPR_PLSS,32769,6,{0},S_PLASBALL,0,0}, // S_PLASBALL2 + {SPR_PLSE,32768,4,{0},S_PLASEXP2,0,0}, // S_PLASEXP + {SPR_PLSE,32769,4,{0},S_PLASEXP3,0,0}, // S_PLASEXP2 + {SPR_PLSE,32770,4,{0},S_PLASEXP4,0,0}, // S_PLASEXP3 + {SPR_PLSE,32771,4,{0},S_PLASEXP5,0,0}, // S_PLASEXP4 + {SPR_PLSE,32772,4,{0},S_NULL,0,0}, // S_PLASEXP5 + {SPR_MISL,32768,1,{0},S_ROCKET,0,0}, // S_ROCKET + {SPR_BFS1,32768,4,{0},S_BFGSHOT2,0,0}, // S_BFGSHOT + {SPR_BFS1,32769,4,{0},S_BFGSHOT,0,0}, // S_BFGSHOT2 + {SPR_BFE1,32768,8,{0},S_BFGLAND2,0,0}, // S_BFGLAND + {SPR_BFE1,32769,8,{0},S_BFGLAND3,0,0}, // S_BFGLAND2 + {SPR_BFE1,32770,8,{(actionf_p1)A_BFGSpray},S_BFGLAND4,0,0}, // S_BFGLAND3 + {SPR_BFE1,32771,8,{0},S_BFGLAND5,0,0}, // S_BFGLAND4 + {SPR_BFE1,32772,8,{0},S_BFGLAND6,0,0}, // S_BFGLAND5 + {SPR_BFE1,32773,8,{0},S_NULL,0,0}, // S_BFGLAND6 + {SPR_BFE2,32768,8,{0},S_BFGEXP2,0,0}, // S_BFGEXP + {SPR_BFE2,32769,8,{0},S_BFGEXP3,0,0}, // S_BFGEXP2 + {SPR_BFE2,32770,8,{0},S_BFGEXP4,0,0}, // S_BFGEXP3 + {SPR_BFE2,32771,8,{0},S_NULL,0,0}, // S_BFGEXP4 + {SPR_MISL,32769,8,{(actionf_p1)A_Explode},S_EXPLODE2,0,0}, // S_EXPLODE1 + {SPR_MISL,32770,6,{0},S_EXPLODE3,0,0}, // S_EXPLODE2 + {SPR_MISL,32771,4,{0},S_NULL,0,0}, // S_EXPLODE3 + {SPR_TFOG,32768,6,{0},S_TFOG01,0,0}, // S_TFOG + {SPR_TFOG,32769,6,{0},S_TFOG02,0,0}, // S_TFOG01 + {SPR_TFOG,32768,6,{0},S_TFOG2,0,0}, // S_TFOG02 + {SPR_TFOG,32769,6,{0},S_TFOG3,0,0}, // S_TFOG2 + {SPR_TFOG,32770,6,{0},S_TFOG4,0,0}, // S_TFOG3 + {SPR_TFOG,32771,6,{0},S_TFOG5,0,0}, // S_TFOG4 + {SPR_TFOG,32772,6,{0},S_TFOG6,0,0}, // S_TFOG5 + {SPR_TFOG,32773,6,{0},S_TFOG7,0,0}, // S_TFOG6 + {SPR_TFOG,32774,6,{0},S_TFOG8,0,0}, // S_TFOG7 + {SPR_TFOG,32775,6,{0},S_TFOG9,0,0}, // S_TFOG8 + {SPR_TFOG,32776,6,{0},S_TFOG10,0,0}, // S_TFOG9 + {SPR_TFOG,32777,6,{0},S_NULL,0,0}, // S_TFOG10 + {SPR_IFOG,32768,6,{0},S_IFOG01,0,0}, // S_IFOG + {SPR_IFOG,32769,6,{0},S_IFOG02,0,0}, // S_IFOG01 + {SPR_IFOG,32768,6,{0},S_IFOG2,0,0}, // S_IFOG02 + {SPR_IFOG,32769,6,{0},S_IFOG3,0,0}, // S_IFOG2 + {SPR_IFOG,32770,6,{0},S_IFOG4,0,0}, // S_IFOG3 + {SPR_IFOG,32771,6,{0},S_IFOG5,0,0}, // S_IFOG4 + {SPR_IFOG,32772,6,{0},S_NULL,0,0}, // S_IFOG5 + {SPR_PLAY,0,-1,{0},S_NULL,0,0}, // S_PLAY + {SPR_PLAY,0,4,{0},S_PLAY_RUN2,0,0}, // S_PLAY_RUN1 + {SPR_PLAY,1,4,{0},S_PLAY_RUN3,0,0}, // S_PLAY_RUN2 + {SPR_PLAY,2,4,{0},S_PLAY_RUN4,0,0}, // S_PLAY_RUN3 + {SPR_PLAY,3,4,{0},S_PLAY_RUN1,0,0}, // S_PLAY_RUN4 + {SPR_PLAY,4,12,{0},S_PLAY,0,0}, // S_PLAY_ATK1 + {SPR_PLAY,32773,6,{0},S_PLAY_ATK1,0,0}, // S_PLAY_ATK2 + {SPR_PLAY,6,4,{0},S_PLAY_PAIN2,0,0}, // S_PLAY_PAIN + {SPR_PLAY,6,4,{(actionf_p1)A_Pain},S_PLAY,0,0}, // S_PLAY_PAIN2 + {SPR_PLAY,7,10,{0},S_PLAY_DIE2,0,0}, // S_PLAY_DIE1 + {SPR_PLAY,8,10,{(actionf_p1)A_PlayerScream},S_PLAY_DIE3,0,0}, // S_PLAY_DIE2 + {SPR_PLAY,9,10,{(actionf_p1)A_Fall},S_PLAY_DIE4,0,0}, // S_PLAY_DIE3 + {SPR_PLAY,10,10,{0},S_PLAY_DIE5,0,0}, // S_PLAY_DIE4 + {SPR_PLAY,11,10,{0},S_PLAY_DIE6,0,0}, // S_PLAY_DIE5 + {SPR_PLAY,12,10,{0},S_PLAY_DIE7,0,0}, // S_PLAY_DIE6 + {SPR_PLAY,13,-1,{0},S_NULL,0,0}, // S_PLAY_DIE7 + {SPR_PLAY,14,5,{0},S_PLAY_XDIE2,0,0}, // S_PLAY_XDIE1 + {SPR_PLAY,15,5,{(actionf_p1)A_XScream},S_PLAY_XDIE3,0,0}, // S_PLAY_XDIE2 + {SPR_PLAY,16,5,{(actionf_p1)A_Fall},S_PLAY_XDIE4,0,0}, // S_PLAY_XDIE3 + {SPR_PLAY,17,5,{0},S_PLAY_XDIE5,0,0}, // S_PLAY_XDIE4 + {SPR_PLAY,18,5,{0},S_PLAY_XDIE6,0,0}, // S_PLAY_XDIE5 + {SPR_PLAY,19,5,{0},S_PLAY_XDIE7,0,0}, // S_PLAY_XDIE6 + {SPR_PLAY,20,5,{0},S_PLAY_XDIE8,0,0}, // S_PLAY_XDIE7 + {SPR_PLAY,21,5,{0},S_PLAY_XDIE9,0,0}, // S_PLAY_XDIE8 + {SPR_PLAY,22,-1,{0},S_NULL,0,0}, // S_PLAY_XDIE9 + {SPR_POSS,0,10,{(actionf_p1)A_Look},S_POSS_STND2,0,0}, // S_POSS_STND + {SPR_POSS,1,10,{(actionf_p1)A_Look},S_POSS_STND,0,0}, // S_POSS_STND2 + {SPR_POSS,0,4,{(actionf_p1)A_Chase},S_POSS_RUN2,0,0}, // S_POSS_RUN1 + {SPR_POSS,0,4,{(actionf_p1)A_Chase},S_POSS_RUN3,0,0}, // S_POSS_RUN2 + {SPR_POSS,1,4,{(actionf_p1)A_Chase},S_POSS_RUN4,0,0}, // S_POSS_RUN3 + {SPR_POSS,1,4,{(actionf_p1)A_Chase},S_POSS_RUN5,0,0}, // S_POSS_RUN4 + {SPR_POSS,2,4,{(actionf_p1)A_Chase},S_POSS_RUN6,0,0}, // S_POSS_RUN5 + {SPR_POSS,2,4,{(actionf_p1)A_Chase},S_POSS_RUN7,0,0}, // S_POSS_RUN6 + {SPR_POSS,3,4,{(actionf_p1)A_Chase},S_POSS_RUN8,0,0}, // S_POSS_RUN7 + {SPR_POSS,3,4,{(actionf_p1)A_Chase},S_POSS_RUN1,0,0}, // S_POSS_RUN8 + {SPR_POSS,4,10,{(actionf_p1)A_FaceTarget},S_POSS_ATK2,0,0}, // S_POSS_ATK1 + {SPR_POSS,5,8,{(actionf_p1)A_PosAttack},S_POSS_ATK3,0,0}, // S_POSS_ATK2 + {SPR_POSS,4,8,{0},S_POSS_RUN1,0,0}, // S_POSS_ATK3 + {SPR_POSS,6,3,{0},S_POSS_PAIN2,0,0}, // S_POSS_PAIN + {SPR_POSS,6,3,{(actionf_p1)A_Pain},S_POSS_RUN1,0,0}, // S_POSS_PAIN2 + {SPR_POSS,7,5,{0},S_POSS_DIE2,0,0}, // S_POSS_DIE1 + {SPR_POSS,8,5,{(actionf_p1)A_Scream},S_POSS_DIE3,0,0}, // S_POSS_DIE2 + {SPR_POSS,9,5,{(actionf_p1)A_Fall},S_POSS_DIE4,0,0}, // S_POSS_DIE3 + {SPR_POSS,10,5,{0},S_POSS_DIE5,0,0}, // S_POSS_DIE4 + {SPR_POSS,11,-1,{0},S_NULL,0,0}, // S_POSS_DIE5 + {SPR_POSS,12,5,{0},S_POSS_XDIE2,0,0}, // S_POSS_XDIE1 + {SPR_POSS,13,5,{(actionf_p1)A_XScream},S_POSS_XDIE3,0,0}, // S_POSS_XDIE2 + {SPR_POSS,14,5,{(actionf_p1)A_Fall},S_POSS_XDIE4,0,0}, // S_POSS_XDIE3 + {SPR_POSS,15,5,{0},S_POSS_XDIE5,0,0}, // S_POSS_XDIE4 + {SPR_POSS,16,5,{0},S_POSS_XDIE6,0,0}, // S_POSS_XDIE5 + {SPR_POSS,17,5,{0},S_POSS_XDIE7,0,0}, // S_POSS_XDIE6 + {SPR_POSS,18,5,{0},S_POSS_XDIE8,0,0}, // S_POSS_XDIE7 + {SPR_POSS,19,5,{0},S_POSS_XDIE9,0,0}, // S_POSS_XDIE8 + {SPR_POSS,20,-1,{0},S_NULL,0,0}, // S_POSS_XDIE9 + {SPR_POSS,10,5,{0},S_POSS_RAISE2,0,0}, // S_POSS_RAISE1 + {SPR_POSS,9,5,{0},S_POSS_RAISE3,0,0}, // S_POSS_RAISE2 + {SPR_POSS,8,5,{0},S_POSS_RAISE4,0,0}, // S_POSS_RAISE3 + {SPR_POSS,7,5,{0},S_POSS_RUN1,0,0}, // S_POSS_RAISE4 + {SPR_SPOS,0,10,{(actionf_p1)A_Look},S_SPOS_STND2,0,0}, // S_SPOS_STND + {SPR_SPOS,1,10,{(actionf_p1)A_Look},S_SPOS_STND,0,0}, // S_SPOS_STND2 + {SPR_SPOS,0,3,{(actionf_p1)A_Chase},S_SPOS_RUN2,0,0}, // S_SPOS_RUN1 + {SPR_SPOS,0,3,{(actionf_p1)A_Chase},S_SPOS_RUN3,0,0}, // S_SPOS_RUN2 + {SPR_SPOS,1,3,{(actionf_p1)A_Chase},S_SPOS_RUN4,0,0}, // S_SPOS_RUN3 + {SPR_SPOS,1,3,{(actionf_p1)A_Chase},S_SPOS_RUN5,0,0}, // S_SPOS_RUN4 + {SPR_SPOS,2,3,{(actionf_p1)A_Chase},S_SPOS_RUN6,0,0}, // S_SPOS_RUN5 + {SPR_SPOS,2,3,{(actionf_p1)A_Chase},S_SPOS_RUN7,0,0}, // S_SPOS_RUN6 + {SPR_SPOS,3,3,{(actionf_p1)A_Chase},S_SPOS_RUN8,0,0}, // S_SPOS_RUN7 + {SPR_SPOS,3,3,{(actionf_p1)A_Chase},S_SPOS_RUN1,0,0}, // S_SPOS_RUN8 + {SPR_SPOS,4,10,{(actionf_p1)A_FaceTarget},S_SPOS_ATK2,0,0}, // S_SPOS_ATK1 + {SPR_SPOS,32773,10,{(actionf_p1)A_SPosAttack},S_SPOS_ATK3,0,0}, // S_SPOS_ATK2 + {SPR_SPOS,4,10,{0},S_SPOS_RUN1,0,0}, // S_SPOS_ATK3 + {SPR_SPOS,6,3,{0},S_SPOS_PAIN2,0,0}, // S_SPOS_PAIN + {SPR_SPOS,6,3,{(actionf_p1)A_Pain},S_SPOS_RUN1,0,0}, // S_SPOS_PAIN2 + {SPR_SPOS,7,5,{0},S_SPOS_DIE2,0,0}, // S_SPOS_DIE1 + {SPR_SPOS,8,5,{(actionf_p1)A_Scream},S_SPOS_DIE3,0,0}, // S_SPOS_DIE2 + {SPR_SPOS,9,5,{(actionf_p1)A_Fall},S_SPOS_DIE4,0,0}, // S_SPOS_DIE3 + {SPR_SPOS,10,5,{0},S_SPOS_DIE5,0,0}, // S_SPOS_DIE4 + {SPR_SPOS,11,-1,{0},S_NULL,0,0}, // S_SPOS_DIE5 + {SPR_SPOS,12,5,{0},S_SPOS_XDIE2,0,0}, // S_SPOS_XDIE1 + {SPR_SPOS,13,5,{(actionf_p1)A_XScream},S_SPOS_XDIE3,0,0}, // S_SPOS_XDIE2 + {SPR_SPOS,14,5,{(actionf_p1)A_Fall},S_SPOS_XDIE4,0,0}, // S_SPOS_XDIE3 + {SPR_SPOS,15,5,{0},S_SPOS_XDIE5,0,0}, // S_SPOS_XDIE4 + {SPR_SPOS,16,5,{0},S_SPOS_XDIE6,0,0}, // S_SPOS_XDIE5 + {SPR_SPOS,17,5,{0},S_SPOS_XDIE7,0,0}, // S_SPOS_XDIE6 + {SPR_SPOS,18,5,{0},S_SPOS_XDIE8,0,0}, // S_SPOS_XDIE7 + {SPR_SPOS,19,5,{0},S_SPOS_XDIE9,0,0}, // S_SPOS_XDIE8 + {SPR_SPOS,20,-1,{0},S_NULL,0,0}, // S_SPOS_XDIE9 + {SPR_SPOS,11,5,{0},S_SPOS_RAISE2,0,0}, // S_SPOS_RAISE1 + {SPR_SPOS,10,5,{0},S_SPOS_RAISE3,0,0}, // S_SPOS_RAISE2 + {SPR_SPOS,9,5,{0},S_SPOS_RAISE4,0,0}, // S_SPOS_RAISE3 + {SPR_SPOS,8,5,{0},S_SPOS_RAISE5,0,0}, // S_SPOS_RAISE4 + {SPR_SPOS,7,5,{0},S_SPOS_RUN1,0,0}, // S_SPOS_RAISE5 + {SPR_VILE,0,10,{(actionf_p1)A_Look},S_VILE_STND2,0,0}, // S_VILE_STND + {SPR_VILE,1,10,{(actionf_p1)A_Look},S_VILE_STND,0,0}, // S_VILE_STND2 + {SPR_VILE,0,2,{(actionf_p1)A_VileChase},S_VILE_RUN2,0,0}, // S_VILE_RUN1 + {SPR_VILE,0,2,{(actionf_p1)A_VileChase},S_VILE_RUN3,0,0}, // S_VILE_RUN2 + {SPR_VILE,1,2,{(actionf_p1)A_VileChase},S_VILE_RUN4,0,0}, // S_VILE_RUN3 + {SPR_VILE,1,2,{(actionf_p1)A_VileChase},S_VILE_RUN5,0,0}, // S_VILE_RUN4 + {SPR_VILE,2,2,{(actionf_p1)A_VileChase},S_VILE_RUN6,0,0}, // S_VILE_RUN5 + {SPR_VILE,2,2,{(actionf_p1)A_VileChase},S_VILE_RUN7,0,0}, // S_VILE_RUN6 + {SPR_VILE,3,2,{(actionf_p1)A_VileChase},S_VILE_RUN8,0,0}, // S_VILE_RUN7 + {SPR_VILE,3,2,{(actionf_p1)A_VileChase},S_VILE_RUN9,0,0}, // S_VILE_RUN8 + {SPR_VILE,4,2,{(actionf_p1)A_VileChase},S_VILE_RUN10,0,0}, // S_VILE_RUN9 + {SPR_VILE,4,2,{(actionf_p1)A_VileChase},S_VILE_RUN11,0,0}, // S_VILE_RUN10 + {SPR_VILE,5,2,{(actionf_p1)A_VileChase},S_VILE_RUN12,0,0}, // S_VILE_RUN11 + {SPR_VILE,5,2,{(actionf_p1)A_VileChase},S_VILE_RUN1,0,0}, // S_VILE_RUN12 + {SPR_VILE,32774,0,{(actionf_p1)A_VileStart},S_VILE_ATK2,0,0}, // S_VILE_ATK1 + {SPR_VILE,32774,10,{(actionf_p1)A_FaceTarget},S_VILE_ATK3,0,0}, // S_VILE_ATK2 + {SPR_VILE,32775,8,{(actionf_p1)A_VileTarget},S_VILE_ATK4,0,0}, // S_VILE_ATK3 + {SPR_VILE,32776,8,{(actionf_p1)A_FaceTarget},S_VILE_ATK5,0,0}, // S_VILE_ATK4 + {SPR_VILE,32777,8,{(actionf_p1)A_FaceTarget},S_VILE_ATK6,0,0}, // S_VILE_ATK5 + {SPR_VILE,32778,8,{(actionf_p1)A_FaceTarget},S_VILE_ATK7,0,0}, // S_VILE_ATK6 + {SPR_VILE,32779,8,{(actionf_p1)A_FaceTarget},S_VILE_ATK8,0,0}, // S_VILE_ATK7 + {SPR_VILE,32780,8,{(actionf_p1)A_FaceTarget},S_VILE_ATK9,0,0}, // S_VILE_ATK8 + {SPR_VILE,32781,8,{(actionf_p1)A_FaceTarget},S_VILE_ATK10,0,0}, // S_VILE_ATK9 + {SPR_VILE,32782,8,{(actionf_p1)A_VileAttack},S_VILE_ATK11,0,0}, // S_VILE_ATK10 + {SPR_VILE,32783,20,{0},S_VILE_RUN1,0,0}, // S_VILE_ATK11 + {SPR_VILE,32794,10,{0},S_VILE_HEAL2,0,0}, // S_VILE_HEAL1 + {SPR_VILE,32795,10,{0},S_VILE_HEAL3,0,0}, // S_VILE_HEAL2 + {SPR_VILE,32796,10,{0},S_VILE_RUN1,0,0}, // S_VILE_HEAL3 + {SPR_VILE,16,5,{0},S_VILE_PAIN2,0,0}, // S_VILE_PAIN + {SPR_VILE,16,5,{(actionf_p1)A_Pain},S_VILE_RUN1,0,0}, // S_VILE_PAIN2 + {SPR_VILE,16,7,{0},S_VILE_DIE2,0,0}, // S_VILE_DIE1 + {SPR_VILE,17,7,{(actionf_p1)A_Scream},S_VILE_DIE3,0,0}, // S_VILE_DIE2 + {SPR_VILE,18,7,{(actionf_p1)A_Fall},S_VILE_DIE4,0,0}, // S_VILE_DIE3 + {SPR_VILE,19,7,{0},S_VILE_DIE5,0,0}, // S_VILE_DIE4 + {SPR_VILE,20,7,{0},S_VILE_DIE6,0,0}, // S_VILE_DIE5 + {SPR_VILE,21,7,{0},S_VILE_DIE7,0,0}, // S_VILE_DIE6 + {SPR_VILE,22,7,{0},S_VILE_DIE8,0,0}, // S_VILE_DIE7 + {SPR_VILE,23,5,{0},S_VILE_DIE9,0,0}, // S_VILE_DIE8 + {SPR_VILE,24,5,{0},S_VILE_DIE10,0,0}, // S_VILE_DIE9 + {SPR_VILE,25,-1,{0},S_NULL,0,0}, // S_VILE_DIE10 + {SPR_FIRE,32768,2,{(actionf_p1)A_StartFire},S_FIRE2,0,0}, // S_FIRE1 + {SPR_FIRE,32769,2,{(actionf_p1)A_Fire},S_FIRE3,0,0}, // S_FIRE2 + {SPR_FIRE,32768,2,{(actionf_p1)A_Fire},S_FIRE4,0,0}, // S_FIRE3 + {SPR_FIRE,32769,2,{(actionf_p1)A_Fire},S_FIRE5,0,0}, // S_FIRE4 + {SPR_FIRE,32770,2,{(actionf_p1)A_FireCrackle},S_FIRE6,0,0}, // S_FIRE5 + {SPR_FIRE,32769,2,{(actionf_p1)A_Fire},S_FIRE7,0,0}, // S_FIRE6 + {SPR_FIRE,32770,2,{(actionf_p1)A_Fire},S_FIRE8,0,0}, // S_FIRE7 + {SPR_FIRE,32769,2,{(actionf_p1)A_Fire},S_FIRE9,0,0}, // S_FIRE8 + {SPR_FIRE,32770,2,{(actionf_p1)A_Fire},S_FIRE10,0,0}, // S_FIRE9 + {SPR_FIRE,32771,2,{(actionf_p1)A_Fire},S_FIRE11,0,0}, // S_FIRE10 + {SPR_FIRE,32770,2,{(actionf_p1)A_Fire},S_FIRE12,0,0}, // S_FIRE11 + {SPR_FIRE,32771,2,{(actionf_p1)A_Fire},S_FIRE13,0,0}, // S_FIRE12 + {SPR_FIRE,32770,2,{(actionf_p1)A_Fire},S_FIRE14,0,0}, // S_FIRE13 + {SPR_FIRE,32771,2,{(actionf_p1)A_Fire},S_FIRE15,0,0}, // S_FIRE14 + {SPR_FIRE,32772,2,{(actionf_p1)A_Fire},S_FIRE16,0,0}, // S_FIRE15 + {SPR_FIRE,32771,2,{(actionf_p1)A_Fire},S_FIRE17,0,0}, // S_FIRE16 + {SPR_FIRE,32772,2,{(actionf_p1)A_Fire},S_FIRE18,0,0}, // S_FIRE17 + {SPR_FIRE,32771,2,{(actionf_p1)A_Fire},S_FIRE19,0,0}, // S_FIRE18 + {SPR_FIRE,32772,2,{(actionf_p1)A_FireCrackle},S_FIRE20,0,0}, // S_FIRE19 + {SPR_FIRE,32773,2,{(actionf_p1)A_Fire},S_FIRE21,0,0}, // S_FIRE20 + {SPR_FIRE,32772,2,{(actionf_p1)A_Fire},S_FIRE22,0,0}, // S_FIRE21 + {SPR_FIRE,32773,2,{(actionf_p1)A_Fire},S_FIRE23,0,0}, // S_FIRE22 + {SPR_FIRE,32772,2,{(actionf_p1)A_Fire},S_FIRE24,0,0}, // S_FIRE23 + {SPR_FIRE,32773,2,{(actionf_p1)A_Fire},S_FIRE25,0,0}, // S_FIRE24 + {SPR_FIRE,32774,2,{(actionf_p1)A_Fire},S_FIRE26,0,0}, // S_FIRE25 + {SPR_FIRE,32775,2,{(actionf_p1)A_Fire},S_FIRE27,0,0}, // S_FIRE26 + {SPR_FIRE,32774,2,{(actionf_p1)A_Fire},S_FIRE28,0,0}, // S_FIRE27 + {SPR_FIRE,32775,2,{(actionf_p1)A_Fire},S_FIRE29,0,0}, // S_FIRE28 + {SPR_FIRE,32774,2,{(actionf_p1)A_Fire},S_FIRE30,0,0}, // S_FIRE29 + {SPR_FIRE,32775,2,{(actionf_p1)A_Fire},S_NULL,0,0}, // S_FIRE30 + {SPR_PUFF,1,4,{0},S_SMOKE2,0,0}, // S_SMOKE1 + {SPR_PUFF,2,4,{0},S_SMOKE3,0,0}, // S_SMOKE2 + {SPR_PUFF,1,4,{0},S_SMOKE4,0,0}, // S_SMOKE3 + {SPR_PUFF,2,4,{0},S_SMOKE5,0,0}, // S_SMOKE4 + {SPR_PUFF,3,4,{0},S_NULL,0,0}, // S_SMOKE5 + {SPR_FATB,32768,2,{(actionf_p1)A_Tracer},S_TRACER2,0,0}, // S_TRACER + {SPR_FATB,32769,2,{(actionf_p1)A_Tracer},S_TRACER,0,0}, // S_TRACER2 + {SPR_FBXP,32768,8,{0},S_TRACEEXP2,0,0}, // S_TRACEEXP1 + {SPR_FBXP,32769,6,{0},S_TRACEEXP3,0,0}, // S_TRACEEXP2 + {SPR_FBXP,32770,4,{0},S_NULL,0,0}, // S_TRACEEXP3 + {SPR_SKEL,0,10,{(actionf_p1)A_Look},S_SKEL_STND2,0,0}, // S_SKEL_STND + {SPR_SKEL,1,10,{(actionf_p1)A_Look},S_SKEL_STND,0,0}, // S_SKEL_STND2 + {SPR_SKEL,0,2,{(actionf_p1)A_Chase},S_SKEL_RUN2,0,0}, // S_SKEL_RUN1 + {SPR_SKEL,0,2,{(actionf_p1)A_Chase},S_SKEL_RUN3,0,0}, // S_SKEL_RUN2 + {SPR_SKEL,1,2,{(actionf_p1)A_Chase},S_SKEL_RUN4,0,0}, // S_SKEL_RUN3 + {SPR_SKEL,1,2,{(actionf_p1)A_Chase},S_SKEL_RUN5,0,0}, // S_SKEL_RUN4 + {SPR_SKEL,2,2,{(actionf_p1)A_Chase},S_SKEL_RUN6,0,0}, // S_SKEL_RUN5 + {SPR_SKEL,2,2,{(actionf_p1)A_Chase},S_SKEL_RUN7,0,0}, // S_SKEL_RUN6 + {SPR_SKEL,3,2,{(actionf_p1)A_Chase},S_SKEL_RUN8,0,0}, // S_SKEL_RUN7 + {SPR_SKEL,3,2,{(actionf_p1)A_Chase},S_SKEL_RUN9,0,0}, // S_SKEL_RUN8 + {SPR_SKEL,4,2,{(actionf_p1)A_Chase},S_SKEL_RUN10,0,0}, // S_SKEL_RUN9 + {SPR_SKEL,4,2,{(actionf_p1)A_Chase},S_SKEL_RUN11,0,0}, // S_SKEL_RUN10 + {SPR_SKEL,5,2,{(actionf_p1)A_Chase},S_SKEL_RUN12,0,0}, // S_SKEL_RUN11 + {SPR_SKEL,5,2,{(actionf_p1)A_Chase},S_SKEL_RUN1,0,0}, // S_SKEL_RUN12 + {SPR_SKEL,6,0,{(actionf_p1)A_FaceTarget},S_SKEL_FIST2,0,0}, // S_SKEL_FIST1 + {SPR_SKEL,6,6,{(actionf_p1)A_SkelWhoosh},S_SKEL_FIST3,0,0}, // S_SKEL_FIST2 + {SPR_SKEL,7,6,{(actionf_p1)A_FaceTarget},S_SKEL_FIST4,0,0}, // S_SKEL_FIST3 + {SPR_SKEL,8,6,{(actionf_p1)A_SkelFist},S_SKEL_RUN1,0,0}, // S_SKEL_FIST4 + {SPR_SKEL,32777,0,{(actionf_p1)A_FaceTarget},S_SKEL_MISS2,0,0}, // S_SKEL_MISS1 + {SPR_SKEL,32777,10,{(actionf_p1)A_FaceTarget},S_SKEL_MISS3,0,0}, // S_SKEL_MISS2 + {SPR_SKEL,10,10,{(actionf_p1)A_SkelMissile},S_SKEL_MISS4,0,0}, // S_SKEL_MISS3 + {SPR_SKEL,10,10,{(actionf_p1)A_FaceTarget},S_SKEL_RUN1,0,0}, // S_SKEL_MISS4 + {SPR_SKEL,11,5,{0},S_SKEL_PAIN2,0,0}, // S_SKEL_PAIN + {SPR_SKEL,11,5,{(actionf_p1)A_Pain},S_SKEL_RUN1,0,0}, // S_SKEL_PAIN2 + {SPR_SKEL,11,7,{0},S_SKEL_DIE2,0,0}, // S_SKEL_DIE1 + {SPR_SKEL,12,7,{0},S_SKEL_DIE3,0,0}, // S_SKEL_DIE2 + {SPR_SKEL,13,7,{(actionf_p1)A_Scream},S_SKEL_DIE4,0,0}, // S_SKEL_DIE3 + {SPR_SKEL,14,7,{(actionf_p1)A_Fall},S_SKEL_DIE5,0,0}, // S_SKEL_DIE4 + {SPR_SKEL,15,7,{0},S_SKEL_DIE6,0,0}, // S_SKEL_DIE5 + {SPR_SKEL,16,-1,{0},S_NULL,0,0}, // S_SKEL_DIE6 + {SPR_SKEL,16,5,{0},S_SKEL_RAISE2,0,0}, // S_SKEL_RAISE1 + {SPR_SKEL,15,5,{0},S_SKEL_RAISE3,0,0}, // S_SKEL_RAISE2 + {SPR_SKEL,14,5,{0},S_SKEL_RAISE4,0,0}, // S_SKEL_RAISE3 + {SPR_SKEL,13,5,{0},S_SKEL_RAISE5,0,0}, // S_SKEL_RAISE4 + {SPR_SKEL,12,5,{0},S_SKEL_RAISE6,0,0}, // S_SKEL_RAISE5 + {SPR_SKEL,11,5,{0},S_SKEL_RUN1,0,0}, // S_SKEL_RAISE6 + {SPR_MANF,32768,4,{0},S_FATSHOT2,0,0}, // S_FATSHOT1 + {SPR_MANF,32769,4,{0},S_FATSHOT1,0,0}, // S_FATSHOT2 + {SPR_MISL,32769,8,{0},S_FATSHOTX2,0,0}, // S_FATSHOTX1 + {SPR_MISL,32770,6,{0},S_FATSHOTX3,0,0}, // S_FATSHOTX2 + {SPR_MISL,32771,4,{0},S_NULL,0,0}, // S_FATSHOTX3 + {SPR_FATT,0,15,{(actionf_p1)A_Look},S_FATT_STND2,0,0}, // S_FATT_STND + {SPR_FATT,1,15,{(actionf_p1)A_Look},S_FATT_STND,0,0}, // S_FATT_STND2 + {SPR_FATT,0,4,{(actionf_p1)A_Chase},S_FATT_RUN2,0,0}, // S_FATT_RUN1 + {SPR_FATT,0,4,{(actionf_p1)A_Chase},S_FATT_RUN3,0,0}, // S_FATT_RUN2 + {SPR_FATT,1,4,{(actionf_p1)A_Chase},S_FATT_RUN4,0,0}, // S_FATT_RUN3 + {SPR_FATT,1,4,{(actionf_p1)A_Chase},S_FATT_RUN5,0,0}, // S_FATT_RUN4 + {SPR_FATT,2,4,{(actionf_p1)A_Chase},S_FATT_RUN6,0,0}, // S_FATT_RUN5 + {SPR_FATT,2,4,{(actionf_p1)A_Chase},S_FATT_RUN7,0,0}, // S_FATT_RUN6 + {SPR_FATT,3,4,{(actionf_p1)A_Chase},S_FATT_RUN8,0,0}, // S_FATT_RUN7 + {SPR_FATT,3,4,{(actionf_p1)A_Chase},S_FATT_RUN9,0,0}, // S_FATT_RUN8 + {SPR_FATT,4,4,{(actionf_p1)A_Chase},S_FATT_RUN10,0,0}, // S_FATT_RUN9 + {SPR_FATT,4,4,{(actionf_p1)A_Chase},S_FATT_RUN11,0,0}, // S_FATT_RUN10 + {SPR_FATT,5,4,{(actionf_p1)A_Chase},S_FATT_RUN12,0,0}, // S_FATT_RUN11 + {SPR_FATT,5,4,{(actionf_p1)A_Chase},S_FATT_RUN1,0,0}, // S_FATT_RUN12 + {SPR_FATT,6,20,{(actionf_p1)A_FatRaise},S_FATT_ATK2,0,0}, // S_FATT_ATK1 + {SPR_FATT,32775,10,{(actionf_p1)A_FatAttack1},S_FATT_ATK3,0,0}, // S_FATT_ATK2 + {SPR_FATT,8,5,{(actionf_p1)A_FaceTarget},S_FATT_ATK4,0,0}, // S_FATT_ATK3 + {SPR_FATT,6,5,{(actionf_p1)A_FaceTarget},S_FATT_ATK5,0,0}, // S_FATT_ATK4 + {SPR_FATT,32775,10,{(actionf_p1)A_FatAttack2},S_FATT_ATK6,0,0}, // S_FATT_ATK5 + {SPR_FATT,8,5,{(actionf_p1)A_FaceTarget},S_FATT_ATK7,0,0}, // S_FATT_ATK6 + {SPR_FATT,6,5,{(actionf_p1)A_FaceTarget},S_FATT_ATK8,0,0}, // S_FATT_ATK7 + {SPR_FATT,32775,10,{(actionf_p1)A_FatAttack3},S_FATT_ATK9,0,0}, // S_FATT_ATK8 + {SPR_FATT,8,5,{(actionf_p1)A_FaceTarget},S_FATT_ATK10,0,0}, // S_FATT_ATK9 + {SPR_FATT,6,5,{(actionf_p1)A_FaceTarget},S_FATT_RUN1,0,0}, // S_FATT_ATK10 + {SPR_FATT,9,3,{0},S_FATT_PAIN2,0,0}, // S_FATT_PAIN + {SPR_FATT,9,3,{(actionf_p1)A_Pain},S_FATT_RUN1,0,0}, // S_FATT_PAIN2 + {SPR_FATT,10,6,{0},S_FATT_DIE2,0,0}, // S_FATT_DIE1 + {SPR_FATT,11,6,{(actionf_p1)A_Scream},S_FATT_DIE3,0,0}, // S_FATT_DIE2 + {SPR_FATT,12,6,{(actionf_p1)A_Fall},S_FATT_DIE4,0,0}, // S_FATT_DIE3 + {SPR_FATT,13,6,{0},S_FATT_DIE5,0,0}, // S_FATT_DIE4 + {SPR_FATT,14,6,{0},S_FATT_DIE6,0,0}, // S_FATT_DIE5 + {SPR_FATT,15,6,{0},S_FATT_DIE7,0,0}, // S_FATT_DIE6 + {SPR_FATT,16,6,{0},S_FATT_DIE8,0,0}, // S_FATT_DIE7 + {SPR_FATT,17,6,{0},S_FATT_DIE9,0,0}, // S_FATT_DIE8 + {SPR_FATT,18,6,{0},S_FATT_DIE10,0,0}, // S_FATT_DIE9 + {SPR_FATT,19,-1,{(actionf_p1)A_BossDeath},S_NULL,0,0}, // S_FATT_DIE10 + {SPR_FATT,17,5,{0},S_FATT_RAISE2,0,0}, // S_FATT_RAISE1 + {SPR_FATT,16,5,{0},S_FATT_RAISE3,0,0}, // S_FATT_RAISE2 + {SPR_FATT,15,5,{0},S_FATT_RAISE4,0,0}, // S_FATT_RAISE3 + {SPR_FATT,14,5,{0},S_FATT_RAISE5,0,0}, // S_FATT_RAISE4 + {SPR_FATT,13,5,{0},S_FATT_RAISE6,0,0}, // S_FATT_RAISE5 + {SPR_FATT,12,5,{0},S_FATT_RAISE7,0,0}, // S_FATT_RAISE6 + {SPR_FATT,11,5,{0},S_FATT_RAISE8,0,0}, // S_FATT_RAISE7 + {SPR_FATT,10,5,{0},S_FATT_RUN1,0,0}, // S_FATT_RAISE8 + {SPR_CPOS,0,10,{(actionf_p1)A_Look},S_CPOS_STND2,0,0}, // S_CPOS_STND + {SPR_CPOS,1,10,{(actionf_p1)A_Look},S_CPOS_STND,0,0}, // S_CPOS_STND2 + {SPR_CPOS,0,3,{(actionf_p1)A_Chase},S_CPOS_RUN2,0,0}, // S_CPOS_RUN1 + {SPR_CPOS,0,3,{(actionf_p1)A_Chase},S_CPOS_RUN3,0,0}, // S_CPOS_RUN2 + {SPR_CPOS,1,3,{(actionf_p1)A_Chase},S_CPOS_RUN4,0,0}, // S_CPOS_RUN3 + {SPR_CPOS,1,3,{(actionf_p1)A_Chase},S_CPOS_RUN5,0,0}, // S_CPOS_RUN4 + {SPR_CPOS,2,3,{(actionf_p1)A_Chase},S_CPOS_RUN6,0,0}, // S_CPOS_RUN5 + {SPR_CPOS,2,3,{(actionf_p1)A_Chase},S_CPOS_RUN7,0,0}, // S_CPOS_RUN6 + {SPR_CPOS,3,3,{(actionf_p1)A_Chase},S_CPOS_RUN8,0,0}, // S_CPOS_RUN7 + {SPR_CPOS,3,3,{(actionf_p1)A_Chase},S_CPOS_RUN1,0,0}, // S_CPOS_RUN8 + {SPR_CPOS,4,10,{(actionf_p1)A_FaceTarget},S_CPOS_ATK2,0,0}, // S_CPOS_ATK1 + {SPR_CPOS,32773,4,{(actionf_p1)A_CPosAttack},S_CPOS_ATK3,0,0}, // S_CPOS_ATK2 + {SPR_CPOS,32772,4,{(actionf_p1)A_CPosAttack},S_CPOS_ATK4,0,0}, // S_CPOS_ATK3 + {SPR_CPOS,5,1,{(actionf_p1)A_CPosRefire},S_CPOS_ATK2,0,0}, // S_CPOS_ATK4 + {SPR_CPOS,6,3,{0},S_CPOS_PAIN2,0,0}, // S_CPOS_PAIN + {SPR_CPOS,6,3,{(actionf_p1)A_Pain},S_CPOS_RUN1,0,0}, // S_CPOS_PAIN2 + {SPR_CPOS,7,5,{0},S_CPOS_DIE2,0,0}, // S_CPOS_DIE1 + {SPR_CPOS,8,5,{(actionf_p1)A_Scream},S_CPOS_DIE3,0,0}, // S_CPOS_DIE2 + {SPR_CPOS,9,5,{(actionf_p1)A_Fall},S_CPOS_DIE4,0,0}, // S_CPOS_DIE3 + {SPR_CPOS,10,5,{0},S_CPOS_DIE5,0,0}, // S_CPOS_DIE4 + {SPR_CPOS,11,5,{0},S_CPOS_DIE6,0,0}, // S_CPOS_DIE5 + {SPR_CPOS,12,5,{0},S_CPOS_DIE7,0,0}, // S_CPOS_DIE6 + {SPR_CPOS,13,-1,{0},S_NULL,0,0}, // S_CPOS_DIE7 + {SPR_CPOS,14,5,{0},S_CPOS_XDIE2,0,0}, // S_CPOS_XDIE1 + {SPR_CPOS,15,5,{(actionf_p1)A_XScream},S_CPOS_XDIE3,0,0}, // S_CPOS_XDIE2 + {SPR_CPOS,16,5,{(actionf_p1)A_Fall},S_CPOS_XDIE4,0,0}, // S_CPOS_XDIE3 + {SPR_CPOS,17,5,{0},S_CPOS_XDIE5,0,0}, // S_CPOS_XDIE4 + {SPR_CPOS,18,5,{0},S_CPOS_XDIE6,0,0}, // S_CPOS_XDIE5 + {SPR_CPOS,19,-1,{0},S_NULL,0,0}, // S_CPOS_XDIE6 + {SPR_CPOS,13,5,{0},S_CPOS_RAISE2,0,0}, // S_CPOS_RAISE1 + {SPR_CPOS,12,5,{0},S_CPOS_RAISE3,0,0}, // S_CPOS_RAISE2 + {SPR_CPOS,11,5,{0},S_CPOS_RAISE4,0,0}, // S_CPOS_RAISE3 + {SPR_CPOS,10,5,{0},S_CPOS_RAISE5,0,0}, // S_CPOS_RAISE4 + {SPR_CPOS,9,5,{0},S_CPOS_RAISE6,0,0}, // S_CPOS_RAISE5 + {SPR_CPOS,8,5,{0},S_CPOS_RAISE7,0,0}, // S_CPOS_RAISE6 + {SPR_CPOS,7,5,{0},S_CPOS_RUN1,0,0}, // S_CPOS_RAISE7 + {SPR_TROO,0,10,{(actionf_p1)A_Look},S_TROO_STND2,0,0}, // S_TROO_STND + {SPR_TROO,1,10,{(actionf_p1)A_Look},S_TROO_STND,0,0}, // S_TROO_STND2 + {SPR_TROO,0,3,{(actionf_p1)A_Chase},S_TROO_RUN2,0,0}, // S_TROO_RUN1 + {SPR_TROO,0,3,{(actionf_p1)A_Chase},S_TROO_RUN3,0,0}, // S_TROO_RUN2 + {SPR_TROO,1,3,{(actionf_p1)A_Chase},S_TROO_RUN4,0,0}, // S_TROO_RUN3 + {SPR_TROO,1,3,{(actionf_p1)A_Chase},S_TROO_RUN5,0,0}, // S_TROO_RUN4 + {SPR_TROO,2,3,{(actionf_p1)A_Chase},S_TROO_RUN6,0,0}, // S_TROO_RUN5 + {SPR_TROO,2,3,{(actionf_p1)A_Chase},S_TROO_RUN7,0,0}, // S_TROO_RUN6 + {SPR_TROO,3,3,{(actionf_p1)A_Chase},S_TROO_RUN8,0,0}, // S_TROO_RUN7 + {SPR_TROO,3,3,{(actionf_p1)A_Chase},S_TROO_RUN1,0,0}, // S_TROO_RUN8 + {SPR_TROO,4,8,{(actionf_p1)A_FaceTarget},S_TROO_ATK2,0,0}, // S_TROO_ATK1 + {SPR_TROO,5,8,{(actionf_p1)A_FaceTarget},S_TROO_ATK3,0,0}, // S_TROO_ATK2 + {SPR_TROO,6,6,{(actionf_p1)A_TroopAttack},S_TROO_RUN1,0,0}, // S_TROO_ATK3 + {SPR_TROO,7,2,{0},S_TROO_PAIN2,0,0}, // S_TROO_PAIN + {SPR_TROO,7,2,{(actionf_p1)A_Pain},S_TROO_RUN1,0,0}, // S_TROO_PAIN2 + {SPR_TROO,8,8,{0},S_TROO_DIE2,0,0}, // S_TROO_DIE1 + {SPR_TROO,9,8,{(actionf_p1)A_Scream},S_TROO_DIE3,0,0}, // S_TROO_DIE2 + {SPR_TROO,10,6,{0},S_TROO_DIE4,0,0}, // S_TROO_DIE3 + {SPR_TROO,11,6,{(actionf_p1)A_Fall},S_TROO_DIE5,0,0}, // S_TROO_DIE4 + {SPR_TROO,12,-1,{0},S_NULL,0,0}, // S_TROO_DIE5 + {SPR_TROO,13,5,{0},S_TROO_XDIE2,0,0}, // S_TROO_XDIE1 + {SPR_TROO,14,5,{(actionf_p1)A_XScream},S_TROO_XDIE3,0,0}, // S_TROO_XDIE2 + {SPR_TROO,15,5,{0},S_TROO_XDIE4,0,0}, // S_TROO_XDIE3 + {SPR_TROO,16,5,{(actionf_p1)A_Fall},S_TROO_XDIE5,0,0}, // S_TROO_XDIE4 + {SPR_TROO,17,5,{0},S_TROO_XDIE6,0,0}, // S_TROO_XDIE5 + {SPR_TROO,18,5,{0},S_TROO_XDIE7,0,0}, // S_TROO_XDIE6 + {SPR_TROO,19,5,{0},S_TROO_XDIE8,0,0}, // S_TROO_XDIE7 + {SPR_TROO,20,-1,{0},S_NULL,0,0}, // S_TROO_XDIE8 + {SPR_TROO,12,8,{0},S_TROO_RAISE2,0,0}, // S_TROO_RAISE1 + {SPR_TROO,11,8,{0},S_TROO_RAISE3,0,0}, // S_TROO_RAISE2 + {SPR_TROO,10,6,{0},S_TROO_RAISE4,0,0}, // S_TROO_RAISE3 + {SPR_TROO,9,6,{0},S_TROO_RAISE5,0,0}, // S_TROO_RAISE4 + {SPR_TROO,8,6,{0},S_TROO_RUN1,0,0}, // S_TROO_RAISE5 + {SPR_SARG,0,10,{(actionf_p1)A_Look},S_SARG_STND2,0,0}, // S_SARG_STND + {SPR_SARG,1,10,{(actionf_p1)A_Look},S_SARG_STND,0,0}, // S_SARG_STND2 + {SPR_SARG,0,2,{(actionf_p1)A_Chase},S_SARG_RUN2,0,0}, // S_SARG_RUN1 + {SPR_SARG,0,2,{(actionf_p1)A_Chase},S_SARG_RUN3,0,0}, // S_SARG_RUN2 + {SPR_SARG,1,2,{(actionf_p1)A_Chase},S_SARG_RUN4,0,0}, // S_SARG_RUN3 + {SPR_SARG,1,2,{(actionf_p1)A_Chase},S_SARG_RUN5,0,0}, // S_SARG_RUN4 + {SPR_SARG,2,2,{(actionf_p1)A_Chase},S_SARG_RUN6,0,0}, // S_SARG_RUN5 + {SPR_SARG,2,2,{(actionf_p1)A_Chase},S_SARG_RUN7,0,0}, // S_SARG_RUN6 + {SPR_SARG,3,2,{(actionf_p1)A_Chase},S_SARG_RUN8,0,0}, // S_SARG_RUN7 + {SPR_SARG,3,2,{(actionf_p1)A_Chase},S_SARG_RUN1,0,0}, // S_SARG_RUN8 + {SPR_SARG,4,8,{(actionf_p1)A_FaceTarget},S_SARG_ATK2,0,0}, // S_SARG_ATK1 + {SPR_SARG,5,8,{(actionf_p1)A_FaceTarget},S_SARG_ATK3,0,0}, // S_SARG_ATK2 + {SPR_SARG,6,8,{(actionf_p1)A_SargAttack},S_SARG_RUN1,0,0}, // S_SARG_ATK3 + {SPR_SARG,7,2,{0},S_SARG_PAIN2,0,0}, // S_SARG_PAIN + {SPR_SARG,7,2,{(actionf_p1)A_Pain},S_SARG_RUN1,0,0}, // S_SARG_PAIN2 + {SPR_SARG,8,8,{0},S_SARG_DIE2,0,0}, // S_SARG_DIE1 + {SPR_SARG,9,8,{(actionf_p1)A_Scream},S_SARG_DIE3,0,0}, // S_SARG_DIE2 + {SPR_SARG,10,4,{0},S_SARG_DIE4,0,0}, // S_SARG_DIE3 + {SPR_SARG,11,4,{(actionf_p1)A_Fall},S_SARG_DIE5,0,0}, // S_SARG_DIE4 + {SPR_SARG,12,4,{0},S_SARG_DIE6,0,0}, // S_SARG_DIE5 + {SPR_SARG,13,-1,{0},S_NULL,0,0}, // S_SARG_DIE6 + {SPR_SARG,13,5,{0},S_SARG_RAISE2,0,0}, // S_SARG_RAISE1 + {SPR_SARG,12,5,{0},S_SARG_RAISE3,0,0}, // S_SARG_RAISE2 + {SPR_SARG,11,5,{0},S_SARG_RAISE4,0,0}, // S_SARG_RAISE3 + {SPR_SARG,10,5,{0},S_SARG_RAISE5,0,0}, // S_SARG_RAISE4 + {SPR_SARG,9,5,{0},S_SARG_RAISE6,0,0}, // S_SARG_RAISE5 + {SPR_SARG,8,5,{0},S_SARG_RUN1,0,0}, // S_SARG_RAISE6 + {SPR_HEAD,0,10,{(actionf_p1)A_Look},S_HEAD_STND,0,0}, // S_HEAD_STND + {SPR_HEAD,0,3,{(actionf_p1)A_Chase},S_HEAD_RUN1,0,0}, // S_HEAD_RUN1 + {SPR_HEAD,1,5,{(actionf_p1)A_FaceTarget},S_HEAD_ATK2,0,0}, // S_HEAD_ATK1 + {SPR_HEAD,2,5,{(actionf_p1)A_FaceTarget},S_HEAD_ATK3,0,0}, // S_HEAD_ATK2 + {SPR_HEAD,32771,5,{(actionf_p1)A_HeadAttack},S_HEAD_RUN1,0,0}, // S_HEAD_ATK3 + {SPR_HEAD,4,3,{0},S_HEAD_PAIN2,0,0}, // S_HEAD_PAIN + {SPR_HEAD,4,3,{(actionf_p1)A_Pain},S_HEAD_PAIN3,0,0}, // S_HEAD_PAIN2 + {SPR_HEAD,5,6,{0},S_HEAD_RUN1,0,0}, // S_HEAD_PAIN3 + {SPR_HEAD,6,8,{0},S_HEAD_DIE2,0,0}, // S_HEAD_DIE1 + {SPR_HEAD,7,8,{(actionf_p1)A_Scream},S_HEAD_DIE3,0,0}, // S_HEAD_DIE2 + {SPR_HEAD,8,8,{0},S_HEAD_DIE4,0,0}, // S_HEAD_DIE3 + {SPR_HEAD,9,8,{0},S_HEAD_DIE5,0,0}, // S_HEAD_DIE4 + {SPR_HEAD,10,8,{(actionf_p1)A_Fall},S_HEAD_DIE6,0,0}, // S_HEAD_DIE5 + {SPR_HEAD,11,-1,{0},S_NULL,0,0}, // S_HEAD_DIE6 + {SPR_HEAD,11,8,{0},S_HEAD_RAISE2,0,0}, // S_HEAD_RAISE1 + {SPR_HEAD,10,8,{0},S_HEAD_RAISE3,0,0}, // S_HEAD_RAISE2 + {SPR_HEAD,9,8,{0},S_HEAD_RAISE4,0,0}, // S_HEAD_RAISE3 + {SPR_HEAD,8,8,{0},S_HEAD_RAISE5,0,0}, // S_HEAD_RAISE4 + {SPR_HEAD,7,8,{0},S_HEAD_RAISE6,0,0}, // S_HEAD_RAISE5 + {SPR_HEAD,6,8,{0},S_HEAD_RUN1,0,0}, // S_HEAD_RAISE6 + {SPR_BAL7,32768,4,{0},S_BRBALL2,0,0}, // S_BRBALL1 + {SPR_BAL7,32769,4,{0},S_BRBALL1,0,0}, // S_BRBALL2 + {SPR_BAL7,32770,6,{0},S_BRBALLX2,0,0}, // S_BRBALLX1 + {SPR_BAL7,32771,6,{0},S_BRBALLX3,0,0}, // S_BRBALLX2 + {SPR_BAL7,32772,6,{0},S_NULL,0,0}, // S_BRBALLX3 + {SPR_BOSS,0,10,{(actionf_p1)A_Look},S_BOSS_STND2,0,0}, // S_BOSS_STND + {SPR_BOSS,1,10,{(actionf_p1)A_Look},S_BOSS_STND,0,0}, // S_BOSS_STND2 + {SPR_BOSS,0,3,{(actionf_p1)A_Chase},S_BOSS_RUN2,0,0}, // S_BOSS_RUN1 + {SPR_BOSS,0,3,{(actionf_p1)A_Chase},S_BOSS_RUN3,0,0}, // S_BOSS_RUN2 + {SPR_BOSS,1,3,{(actionf_p1)A_Chase},S_BOSS_RUN4,0,0}, // S_BOSS_RUN3 + {SPR_BOSS,1,3,{(actionf_p1)A_Chase},S_BOSS_RUN5,0,0}, // S_BOSS_RUN4 + {SPR_BOSS,2,3,{(actionf_p1)A_Chase},S_BOSS_RUN6,0,0}, // S_BOSS_RUN5 + {SPR_BOSS,2,3,{(actionf_p1)A_Chase},S_BOSS_RUN7,0,0}, // S_BOSS_RUN6 + {SPR_BOSS,3,3,{(actionf_p1)A_Chase},S_BOSS_RUN8,0,0}, // S_BOSS_RUN7 + {SPR_BOSS,3,3,{(actionf_p1)A_Chase},S_BOSS_RUN1,0,0}, // S_BOSS_RUN8 + {SPR_BOSS,4,8,{(actionf_p1)A_FaceTarget},S_BOSS_ATK2,0,0}, // S_BOSS_ATK1 + {SPR_BOSS,5,8,{(actionf_p1)A_FaceTarget},S_BOSS_ATK3,0,0}, // S_BOSS_ATK2 + {SPR_BOSS,6,8,{(actionf_p1)A_BruisAttack},S_BOSS_RUN1,0,0}, // S_BOSS_ATK3 + {SPR_BOSS,7,2,{0},S_BOSS_PAIN2,0,0}, // S_BOSS_PAIN + {SPR_BOSS,7,2,{(actionf_p1)A_Pain},S_BOSS_RUN1,0,0}, // S_BOSS_PAIN2 + {SPR_BOSS,8,8,{0},S_BOSS_DIE2,0,0}, // S_BOSS_DIE1 + {SPR_BOSS,9,8,{(actionf_p1)A_Scream},S_BOSS_DIE3,0,0}, // S_BOSS_DIE2 + {SPR_BOSS,10,8,{0},S_BOSS_DIE4,0,0}, // S_BOSS_DIE3 + {SPR_BOSS,11,8,{(actionf_p1)A_Fall},S_BOSS_DIE5,0,0}, // S_BOSS_DIE4 + {SPR_BOSS,12,8,{0},S_BOSS_DIE6,0,0}, // S_BOSS_DIE5 + {SPR_BOSS,13,8,{0},S_BOSS_DIE7,0,0}, // S_BOSS_DIE6 + {SPR_BOSS,14,-1,{(actionf_p1)A_BossDeath},S_NULL,0,0}, // S_BOSS_DIE7 + {SPR_BOSS,14,8,{0},S_BOSS_RAISE2,0,0}, // S_BOSS_RAISE1 + {SPR_BOSS,13,8,{0},S_BOSS_RAISE3,0,0}, // S_BOSS_RAISE2 + {SPR_BOSS,12,8,{0},S_BOSS_RAISE4,0,0}, // S_BOSS_RAISE3 + {SPR_BOSS,11,8,{0},S_BOSS_RAISE5,0,0}, // S_BOSS_RAISE4 + {SPR_BOSS,10,8,{0},S_BOSS_RAISE6,0,0}, // S_BOSS_RAISE5 + {SPR_BOSS,9,8,{0},S_BOSS_RAISE7,0,0}, // S_BOSS_RAISE6 + {SPR_BOSS,8,8,{0},S_BOSS_RUN1,0,0}, // S_BOSS_RAISE7 + {SPR_BOS2,0,10,{(actionf_p1)A_Look},S_BOS2_STND2,0,0}, // S_BOS2_STND + {SPR_BOS2,1,10,{(actionf_p1)A_Look},S_BOS2_STND,0,0}, // S_BOS2_STND2 + {SPR_BOS2,0,3,{(actionf_p1)A_Chase},S_BOS2_RUN2,0,0}, // S_BOS2_RUN1 + {SPR_BOS2,0,3,{(actionf_p1)A_Chase},S_BOS2_RUN3,0,0}, // S_BOS2_RUN2 + {SPR_BOS2,1,3,{(actionf_p1)A_Chase},S_BOS2_RUN4,0,0}, // S_BOS2_RUN3 + {SPR_BOS2,1,3,{(actionf_p1)A_Chase},S_BOS2_RUN5,0,0}, // S_BOS2_RUN4 + {SPR_BOS2,2,3,{(actionf_p1)A_Chase},S_BOS2_RUN6,0,0}, // S_BOS2_RUN5 + {SPR_BOS2,2,3,{(actionf_p1)A_Chase},S_BOS2_RUN7,0,0}, // S_BOS2_RUN6 + {SPR_BOS2,3,3,{(actionf_p1)A_Chase},S_BOS2_RUN8,0,0}, // S_BOS2_RUN7 + {SPR_BOS2,3,3,{(actionf_p1)A_Chase},S_BOS2_RUN1,0,0}, // S_BOS2_RUN8 + {SPR_BOS2,4,8,{(actionf_p1)A_FaceTarget},S_BOS2_ATK2,0,0}, // S_BOS2_ATK1 + {SPR_BOS2,5,8,{(actionf_p1)A_FaceTarget},S_BOS2_ATK3,0,0}, // S_BOS2_ATK2 + {SPR_BOS2,6,8,{(actionf_p1)A_BruisAttack},S_BOS2_RUN1,0,0}, // S_BOS2_ATK3 + {SPR_BOS2,7,2,{0},S_BOS2_PAIN2,0,0}, // S_BOS2_PAIN + {SPR_BOS2,7,2,{(actionf_p1)A_Pain},S_BOS2_RUN1,0,0}, // S_BOS2_PAIN2 + {SPR_BOS2,8,8,{0},S_BOS2_DIE2,0,0}, // S_BOS2_DIE1 + {SPR_BOS2,9,8,{(actionf_p1)A_Scream},S_BOS2_DIE3,0,0}, // S_BOS2_DIE2 + {SPR_BOS2,10,8,{0},S_BOS2_DIE4,0,0}, // S_BOS2_DIE3 + {SPR_BOS2,11,8,{(actionf_p1)A_Fall},S_BOS2_DIE5,0,0}, // S_BOS2_DIE4 + {SPR_BOS2,12,8,{0},S_BOS2_DIE6,0,0}, // S_BOS2_DIE5 + {SPR_BOS2,13,8,{0},S_BOS2_DIE7,0,0}, // S_BOS2_DIE6 + {SPR_BOS2,14,-1,{0},S_NULL,0,0}, // S_BOS2_DIE7 + {SPR_BOS2,14,8,{0},S_BOS2_RAISE2,0,0}, // S_BOS2_RAISE1 + {SPR_BOS2,13,8,{0},S_BOS2_RAISE3,0,0}, // S_BOS2_RAISE2 + {SPR_BOS2,12,8,{0},S_BOS2_RAISE4,0,0}, // S_BOS2_RAISE3 + {SPR_BOS2,11,8,{0},S_BOS2_RAISE5,0,0}, // S_BOS2_RAISE4 + {SPR_BOS2,10,8,{0},S_BOS2_RAISE6,0,0}, // S_BOS2_RAISE5 + {SPR_BOS2,9,8,{0},S_BOS2_RAISE7,0,0}, // S_BOS2_RAISE6 + {SPR_BOS2,8,8,{0},S_BOS2_RUN1,0,0}, // S_BOS2_RAISE7 + {SPR_SKUL,32768,10,{(actionf_p1)A_Look},S_SKULL_STND2,0,0}, // S_SKULL_STND + {SPR_SKUL,32769,10,{(actionf_p1)A_Look},S_SKULL_STND,0,0}, // S_SKULL_STND2 + {SPR_SKUL,32768,6,{(actionf_p1)A_Chase},S_SKULL_RUN2,0,0}, // S_SKULL_RUN1 + {SPR_SKUL,32769,6,{(actionf_p1)A_Chase},S_SKULL_RUN1,0,0}, // S_SKULL_RUN2 + {SPR_SKUL,32770,10,{(actionf_p1)A_FaceTarget},S_SKULL_ATK2,0,0}, // S_SKULL_ATK1 + {SPR_SKUL,32771,4,{(actionf_p1)A_SkullAttack},S_SKULL_ATK3,0,0}, // S_SKULL_ATK2 + {SPR_SKUL,32770,4,{0},S_SKULL_ATK4,0,0}, // S_SKULL_ATK3 + {SPR_SKUL,32771,4,{0},S_SKULL_ATK3,0,0}, // S_SKULL_ATK4 + {SPR_SKUL,32772,3,{0},S_SKULL_PAIN2,0,0}, // S_SKULL_PAIN + {SPR_SKUL,32772,3,{(actionf_p1)A_Pain},S_SKULL_RUN1,0,0}, // S_SKULL_PAIN2 + {SPR_SKUL,32773,6,{0},S_SKULL_DIE2,0,0}, // S_SKULL_DIE1 + {SPR_SKUL,32774,6,{(actionf_p1)A_Scream},S_SKULL_DIE3,0,0}, // S_SKULL_DIE2 + {SPR_SKUL,32775,6,{0},S_SKULL_DIE4,0,0}, // S_SKULL_DIE3 + {SPR_SKUL,32776,6,{(actionf_p1)A_Fall},S_SKULL_DIE5,0,0}, // S_SKULL_DIE4 + {SPR_SKUL,9,6,{0},S_SKULL_DIE6,0,0}, // S_SKULL_DIE5 + {SPR_SKUL,10,6,{0},S_NULL,0,0}, // S_SKULL_DIE6 + {SPR_SPID,0,10,{(actionf_p1)A_Look},S_SPID_STND2,0,0}, // S_SPID_STND + {SPR_SPID,1,10,{(actionf_p1)A_Look},S_SPID_STND,0,0}, // S_SPID_STND2 + {SPR_SPID,0,3,{(actionf_p1)A_Metal},S_SPID_RUN2,0,0}, // S_SPID_RUN1 + {SPR_SPID,0,3,{(actionf_p1)A_Chase},S_SPID_RUN3,0,0}, // S_SPID_RUN2 + {SPR_SPID,1,3,{(actionf_p1)A_Chase},S_SPID_RUN4,0,0}, // S_SPID_RUN3 + {SPR_SPID,1,3,{(actionf_p1)A_Chase},S_SPID_RUN5,0,0}, // S_SPID_RUN4 + {SPR_SPID,2,3,{(actionf_p1)A_Metal},S_SPID_RUN6,0,0}, // S_SPID_RUN5 + {SPR_SPID,2,3,{(actionf_p1)A_Chase},S_SPID_RUN7,0,0}, // S_SPID_RUN6 + {SPR_SPID,3,3,{(actionf_p1)A_Chase},S_SPID_RUN8,0,0}, // S_SPID_RUN7 + {SPR_SPID,3,3,{(actionf_p1)A_Chase},S_SPID_RUN9,0,0}, // S_SPID_RUN8 + {SPR_SPID,4,3,{(actionf_p1)A_Metal},S_SPID_RUN10,0,0}, // S_SPID_RUN9 + {SPR_SPID,4,3,{(actionf_p1)A_Chase},S_SPID_RUN11,0,0}, // S_SPID_RUN10 + {SPR_SPID,5,3,{(actionf_p1)A_Chase},S_SPID_RUN12,0,0}, // S_SPID_RUN11 + {SPR_SPID,5,3,{(actionf_p1)A_Chase},S_SPID_RUN1,0,0}, // S_SPID_RUN12 + {SPR_SPID,32768,20,{(actionf_p1)A_FaceTarget},S_SPID_ATK2,0,0}, // S_SPID_ATK1 + {SPR_SPID,32774,4,{(actionf_p1)A_SPosAttack},S_SPID_ATK3,0,0}, // S_SPID_ATK2 + {SPR_SPID,32775,4,{(actionf_p1)A_SPosAttack},S_SPID_ATK4,0,0}, // S_SPID_ATK3 + {SPR_SPID,32775,1,{(actionf_p1)A_SpidRefire},S_SPID_ATK2,0,0}, // S_SPID_ATK4 + {SPR_SPID,8,3,{0},S_SPID_PAIN2,0,0}, // S_SPID_PAIN + {SPR_SPID,8,3,{(actionf_p1)A_Pain},S_SPID_RUN1,0,0}, // S_SPID_PAIN2 + {SPR_SPID,9,20,{(actionf_p1)A_Scream},S_SPID_DIE2,0,0}, // S_SPID_DIE1 + {SPR_SPID,10,10,{(actionf_p1)A_Fall},S_SPID_DIE3,0,0}, // S_SPID_DIE2 + {SPR_SPID,11,10,{0},S_SPID_DIE4,0,0}, // S_SPID_DIE3 + {SPR_SPID,12,10,{0},S_SPID_DIE5,0,0}, // S_SPID_DIE4 + {SPR_SPID,13,10,{0},S_SPID_DIE6,0,0}, // S_SPID_DIE5 + {SPR_SPID,14,10,{0},S_SPID_DIE7,0,0}, // S_SPID_DIE6 + {SPR_SPID,15,10,{0},S_SPID_DIE8,0,0}, // S_SPID_DIE7 + {SPR_SPID,16,10,{0},S_SPID_DIE9,0,0}, // S_SPID_DIE8 + {SPR_SPID,17,10,{0},S_SPID_DIE10,0,0}, // S_SPID_DIE9 + {SPR_SPID,18,30,{0},S_SPID_DIE11,0,0}, // S_SPID_DIE10 + {SPR_SPID,18,-1,{(actionf_p1)A_BossDeath},S_NULL,0,0}, // S_SPID_DIE11 + {SPR_BSPI,0,10,{(actionf_p1)A_Look},S_BSPI_STND2,0,0}, // S_BSPI_STND + {SPR_BSPI,1,10,{(actionf_p1)A_Look},S_BSPI_STND,0,0}, // S_BSPI_STND2 + {SPR_BSPI,0,20,{0},S_BSPI_RUN1,0,0}, // S_BSPI_SIGHT + {SPR_BSPI,0,3,{(actionf_p1)A_BabyMetal},S_BSPI_RUN2,0,0}, // S_BSPI_RUN1 + {SPR_BSPI,0,3,{(actionf_p1)A_Chase},S_BSPI_RUN3,0,0}, // S_BSPI_RUN2 + {SPR_BSPI,1,3,{(actionf_p1)A_Chase},S_BSPI_RUN4,0,0}, // S_BSPI_RUN3 + {SPR_BSPI,1,3,{(actionf_p1)A_Chase},S_BSPI_RUN5,0,0}, // S_BSPI_RUN4 + {SPR_BSPI,2,3,{(actionf_p1)A_Chase},S_BSPI_RUN6,0,0}, // S_BSPI_RUN5 + {SPR_BSPI,2,3,{(actionf_p1)A_Chase},S_BSPI_RUN7,0,0}, // S_BSPI_RUN6 + {SPR_BSPI,3,3,{(actionf_p1)A_BabyMetal},S_BSPI_RUN8,0,0}, // S_BSPI_RUN7 + {SPR_BSPI,3,3,{(actionf_p1)A_Chase},S_BSPI_RUN9,0,0}, // S_BSPI_RUN8 + {SPR_BSPI,4,3,{(actionf_p1)A_Chase},S_BSPI_RUN10,0,0}, // S_BSPI_RUN9 + {SPR_BSPI,4,3,{(actionf_p1)A_Chase},S_BSPI_RUN11,0,0}, // S_BSPI_RUN10 + {SPR_BSPI,5,3,{(actionf_p1)A_Chase},S_BSPI_RUN12,0,0}, // S_BSPI_RUN11 + {SPR_BSPI,5,3,{(actionf_p1)A_Chase},S_BSPI_RUN1,0,0}, // S_BSPI_RUN12 + {SPR_BSPI,32768,20,{(actionf_p1)A_FaceTarget},S_BSPI_ATK2,0,0}, // S_BSPI_ATK1 + {SPR_BSPI,32774,4,{(actionf_p1)A_BspiAttack},S_BSPI_ATK3,0,0}, // S_BSPI_ATK2 + {SPR_BSPI,32775,4,{0},S_BSPI_ATK4,0,0}, // S_BSPI_ATK3 + {SPR_BSPI,32775,1,{(actionf_p1)A_SpidRefire},S_BSPI_ATK2,0,0}, // S_BSPI_ATK4 + {SPR_BSPI,8,3,{0},S_BSPI_PAIN2,0,0}, // S_BSPI_PAIN + {SPR_BSPI,8,3,{(actionf_p1)A_Pain},S_BSPI_RUN1,0,0}, // S_BSPI_PAIN2 + {SPR_BSPI,9,20,{(actionf_p1)A_Scream},S_BSPI_DIE2,0,0}, // S_BSPI_DIE1 + {SPR_BSPI,10,7,{(actionf_p1)A_Fall},S_BSPI_DIE3,0,0}, // S_BSPI_DIE2 + {SPR_BSPI,11,7,{0},S_BSPI_DIE4,0,0}, // S_BSPI_DIE3 + {SPR_BSPI,12,7,{0},S_BSPI_DIE5,0,0}, // S_BSPI_DIE4 + {SPR_BSPI,13,7,{0},S_BSPI_DIE6,0,0}, // S_BSPI_DIE5 + {SPR_BSPI,14,7,{0},S_BSPI_DIE7,0,0}, // S_BSPI_DIE6 + {SPR_BSPI,15,-1,{(actionf_p1)A_BossDeath},S_NULL,0,0}, // S_BSPI_DIE7 + {SPR_BSPI,15,5,{0},S_BSPI_RAISE2,0,0}, // S_BSPI_RAISE1 + {SPR_BSPI,14,5,{0},S_BSPI_RAISE3,0,0}, // S_BSPI_RAISE2 + {SPR_BSPI,13,5,{0},S_BSPI_RAISE4,0,0}, // S_BSPI_RAISE3 + {SPR_BSPI,12,5,{0},S_BSPI_RAISE5,0,0}, // S_BSPI_RAISE4 + {SPR_BSPI,11,5,{0},S_BSPI_RAISE6,0,0}, // S_BSPI_RAISE5 + {SPR_BSPI,10,5,{0},S_BSPI_RAISE7,0,0}, // S_BSPI_RAISE6 + {SPR_BSPI,9,5,{0},S_BSPI_RUN1,0,0}, // S_BSPI_RAISE7 + {SPR_APLS,32768,5,{0},S_ARACH_PLAZ2,0,0}, // S_ARACH_PLAZ + {SPR_APLS,32769,5,{0},S_ARACH_PLAZ,0,0}, // S_ARACH_PLAZ2 + {SPR_APBX,32768,5,{0},S_ARACH_PLEX2,0,0}, // S_ARACH_PLEX + {SPR_APBX,32769,5,{0},S_ARACH_PLEX3,0,0}, // S_ARACH_PLEX2 + {SPR_APBX,32770,5,{0},S_ARACH_PLEX4,0,0}, // S_ARACH_PLEX3 + {SPR_APBX,32771,5,{0},S_ARACH_PLEX5,0,0}, // S_ARACH_PLEX4 + {SPR_APBX,32772,5,{0},S_NULL,0,0}, // S_ARACH_PLEX5 + {SPR_CYBR,0,10,{(actionf_p1)A_Look},S_CYBER_STND2,0,0}, // S_CYBER_STND + {SPR_CYBR,1,10,{(actionf_p1)A_Look},S_CYBER_STND,0,0}, // S_CYBER_STND2 + {SPR_CYBR,0,3,{(actionf_p1)A_Hoof},S_CYBER_RUN2,0,0}, // S_CYBER_RUN1 + {SPR_CYBR,0,3,{(actionf_p1)A_Chase},S_CYBER_RUN3,0,0}, // S_CYBER_RUN2 + {SPR_CYBR,1,3,{(actionf_p1)A_Chase},S_CYBER_RUN4,0,0}, // S_CYBER_RUN3 + {SPR_CYBR,1,3,{(actionf_p1)A_Chase},S_CYBER_RUN5,0,0}, // S_CYBER_RUN4 + {SPR_CYBR,2,3,{(actionf_p1)A_Chase},S_CYBER_RUN6,0,0}, // S_CYBER_RUN5 + {SPR_CYBR,2,3,{(actionf_p1)A_Chase},S_CYBER_RUN7,0,0}, // S_CYBER_RUN6 + {SPR_CYBR,3,3,{(actionf_p1)A_Metal},S_CYBER_RUN8,0,0}, // S_CYBER_RUN7 + {SPR_CYBR,3,3,{(actionf_p1)A_Chase},S_CYBER_RUN1,0,0}, // S_CYBER_RUN8 + {SPR_CYBR,4,6,{(actionf_p1)A_FaceTarget},S_CYBER_ATK2,0,0}, // S_CYBER_ATK1 + {SPR_CYBR,5,12,{(actionf_p1)A_CyberAttack},S_CYBER_ATK3,0,0}, // S_CYBER_ATK2 + {SPR_CYBR,4,12,{(actionf_p1)A_FaceTarget},S_CYBER_ATK4,0,0}, // S_CYBER_ATK3 + {SPR_CYBR,5,12,{(actionf_p1)A_CyberAttack},S_CYBER_ATK5,0,0}, // S_CYBER_ATK4 + {SPR_CYBR,4,12,{(actionf_p1)A_FaceTarget},S_CYBER_ATK6,0,0}, // S_CYBER_ATK5 + {SPR_CYBR,5,12,{(actionf_p1)A_CyberAttack},S_CYBER_RUN1,0,0}, // S_CYBER_ATK6 + {SPR_CYBR,6,10,{(actionf_p1)A_Pain},S_CYBER_RUN1,0,0}, // S_CYBER_PAIN + {SPR_CYBR,7,10,{0},S_CYBER_DIE2,0,0}, // S_CYBER_DIE1 + {SPR_CYBR,8,10,{(actionf_p1)A_Scream},S_CYBER_DIE3,0,0}, // S_CYBER_DIE2 + {SPR_CYBR,9,10,{0},S_CYBER_DIE4,0,0}, // S_CYBER_DIE3 + {SPR_CYBR,10,10,{0},S_CYBER_DIE5,0,0}, // S_CYBER_DIE4 + {SPR_CYBR,11,10,{0},S_CYBER_DIE6,0,0}, // S_CYBER_DIE5 + {SPR_CYBR,12,10,{(actionf_p1)A_Fall},S_CYBER_DIE7,0,0}, // S_CYBER_DIE6 + {SPR_CYBR,13,10,{0},S_CYBER_DIE8,0,0}, // S_CYBER_DIE7 + {SPR_CYBR,14,10,{0},S_CYBER_DIE9,0,0}, // S_CYBER_DIE8 + {SPR_CYBR,15,30,{0},S_CYBER_DIE10,0,0}, // S_CYBER_DIE9 + {SPR_CYBR,15,-1,{(actionf_p1)A_BossDeath},S_NULL,0,0}, // S_CYBER_DIE10 + {SPR_PAIN,0,10,{(actionf_p1)A_Look},S_PAIN_STND,0,0}, // S_PAIN_STND + {SPR_PAIN,0,3,{(actionf_p1)A_Chase},S_PAIN_RUN2,0,0}, // S_PAIN_RUN1 + {SPR_PAIN,0,3,{(actionf_p1)A_Chase},S_PAIN_RUN3,0,0}, // S_PAIN_RUN2 + {SPR_PAIN,1,3,{(actionf_p1)A_Chase},S_PAIN_RUN4,0,0}, // S_PAIN_RUN3 + {SPR_PAIN,1,3,{(actionf_p1)A_Chase},S_PAIN_RUN5,0,0}, // S_PAIN_RUN4 + {SPR_PAIN,2,3,{(actionf_p1)A_Chase},S_PAIN_RUN6,0,0}, // S_PAIN_RUN5 + {SPR_PAIN,2,3,{(actionf_p1)A_Chase},S_PAIN_RUN1,0,0}, // S_PAIN_RUN6 + {SPR_PAIN,3,5,{(actionf_p1)A_FaceTarget},S_PAIN_ATK2,0,0}, // S_PAIN_ATK1 + {SPR_PAIN,4,5,{(actionf_p1)A_FaceTarget},S_PAIN_ATK3,0,0}, // S_PAIN_ATK2 + {SPR_PAIN,32773,5,{(actionf_p1)A_FaceTarget},S_PAIN_ATK4,0,0}, // S_PAIN_ATK3 + {SPR_PAIN,32773,0,{(actionf_p1)A_PainAttack},S_PAIN_RUN1,0,0}, // S_PAIN_ATK4 + {SPR_PAIN,6,6,{0},S_PAIN_PAIN2,0,0}, // S_PAIN_PAIN + {SPR_PAIN,6,6,{(actionf_p1)A_Pain},S_PAIN_RUN1,0,0}, // S_PAIN_PAIN2 + {SPR_PAIN,32775,8,{0},S_PAIN_DIE2,0,0}, // S_PAIN_DIE1 + {SPR_PAIN,32776,8,{(actionf_p1)A_Scream},S_PAIN_DIE3,0,0}, // S_PAIN_DIE2 + {SPR_PAIN,32777,8,{0},S_PAIN_DIE4,0,0}, // S_PAIN_DIE3 + {SPR_PAIN,32778,8,{0},S_PAIN_DIE5,0,0}, // S_PAIN_DIE4 + {SPR_PAIN,32779,8,{(actionf_p1)A_PainDie},S_PAIN_DIE6,0,0}, // S_PAIN_DIE5 + {SPR_PAIN,32780,8,{0},S_NULL,0,0}, // S_PAIN_DIE6 + {SPR_PAIN,12,8,{0},S_PAIN_RAISE2,0,0}, // S_PAIN_RAISE1 + {SPR_PAIN,11,8,{0},S_PAIN_RAISE3,0,0}, // S_PAIN_RAISE2 + {SPR_PAIN,10,8,{0},S_PAIN_RAISE4,0,0}, // S_PAIN_RAISE3 + {SPR_PAIN,9,8,{0},S_PAIN_RAISE5,0,0}, // S_PAIN_RAISE4 + {SPR_PAIN,8,8,{0},S_PAIN_RAISE6,0,0}, // S_PAIN_RAISE5 + {SPR_PAIN,7,8,{0},S_PAIN_RUN1,0,0}, // S_PAIN_RAISE6 + {SPR_SSWV,0,10,{(actionf_p1)A_Look},S_SSWV_STND2,0,0}, // S_SSWV_STND + {SPR_SSWV,1,10,{(actionf_p1)A_Look},S_SSWV_STND,0,0}, // S_SSWV_STND2 + {SPR_SSWV,0,3,{(actionf_p1)A_Chase},S_SSWV_RUN2,0,0}, // S_SSWV_RUN1 + {SPR_SSWV,0,3,{(actionf_p1)A_Chase},S_SSWV_RUN3,0,0}, // S_SSWV_RUN2 + {SPR_SSWV,1,3,{(actionf_p1)A_Chase},S_SSWV_RUN4,0,0}, // S_SSWV_RUN3 + {SPR_SSWV,1,3,{(actionf_p1)A_Chase},S_SSWV_RUN5,0,0}, // S_SSWV_RUN4 + {SPR_SSWV,2,3,{(actionf_p1)A_Chase},S_SSWV_RUN6,0,0}, // S_SSWV_RUN5 + {SPR_SSWV,2,3,{(actionf_p1)A_Chase},S_SSWV_RUN7,0,0}, // S_SSWV_RUN6 + {SPR_SSWV,3,3,{(actionf_p1)A_Chase},S_SSWV_RUN8,0,0}, // S_SSWV_RUN7 + {SPR_SSWV,3,3,{(actionf_p1)A_Chase},S_SSWV_RUN1,0,0}, // S_SSWV_RUN8 + {SPR_SSWV,4,10,{(actionf_p1)A_FaceTarget},S_SSWV_ATK2,0,0}, // S_SSWV_ATK1 + {SPR_SSWV,5,10,{(actionf_p1)A_FaceTarget},S_SSWV_ATK3,0,0}, // S_SSWV_ATK2 + {SPR_SSWV,32774,4,{(actionf_p1)A_CPosAttack},S_SSWV_ATK4,0,0}, // S_SSWV_ATK3 + {SPR_SSWV,5,6,{(actionf_p1)A_FaceTarget},S_SSWV_ATK5,0,0}, // S_SSWV_ATK4 + {SPR_SSWV,32774,4,{(actionf_p1)A_CPosAttack},S_SSWV_ATK6,0,0}, // S_SSWV_ATK5 + {SPR_SSWV,5,1,{(actionf_p1)A_CPosRefire},S_SSWV_ATK2,0,0}, // S_SSWV_ATK6 + {SPR_SSWV,7,3,{0},S_SSWV_PAIN2,0,0}, // S_SSWV_PAIN + {SPR_SSWV,7,3,{(actionf_p1)A_Pain},S_SSWV_RUN1,0,0}, // S_SSWV_PAIN2 + {SPR_SSWV,8,5,{0},S_SSWV_DIE2,0,0}, // S_SSWV_DIE1 + {SPR_SSWV,9,5,{(actionf_p1)A_Scream},S_SSWV_DIE3,0,0}, // S_SSWV_DIE2 + {SPR_SSWV,10,5,{(actionf_p1)A_Fall},S_SSWV_DIE4,0,0}, // S_SSWV_DIE3 + {SPR_SSWV,11,5,{0},S_SSWV_DIE5,0,0}, // S_SSWV_DIE4 + {SPR_SSWV,12,-1,{0},S_NULL,0,0}, // S_SSWV_DIE5 + {SPR_SSWV,13,5,{0},S_SSWV_XDIE2,0,0}, // S_SSWV_XDIE1 + {SPR_SSWV,14,5,{(actionf_p1)A_XScream},S_SSWV_XDIE3,0,0}, // S_SSWV_XDIE2 + {SPR_SSWV,15,5,{(actionf_p1)A_Fall},S_SSWV_XDIE4,0,0}, // S_SSWV_XDIE3 + {SPR_SSWV,16,5,{0},S_SSWV_XDIE5,0,0}, // S_SSWV_XDIE4 + {SPR_SSWV,17,5,{0},S_SSWV_XDIE6,0,0}, // S_SSWV_XDIE5 + {SPR_SSWV,18,5,{0},S_SSWV_XDIE7,0,0}, // S_SSWV_XDIE6 + {SPR_SSWV,19,5,{0},S_SSWV_XDIE8,0,0}, // S_SSWV_XDIE7 + {SPR_SSWV,20,5,{0},S_SSWV_XDIE9,0,0}, // S_SSWV_XDIE8 + {SPR_SSWV,21,-1,{0},S_NULL,0,0}, // S_SSWV_XDIE9 + {SPR_SSWV,12,5,{0},S_SSWV_RAISE2,0,0}, // S_SSWV_RAISE1 + {SPR_SSWV,11,5,{0},S_SSWV_RAISE3,0,0}, // S_SSWV_RAISE2 + {SPR_SSWV,10,5,{0},S_SSWV_RAISE4,0,0}, // S_SSWV_RAISE3 + {SPR_SSWV,9,5,{0},S_SSWV_RAISE5,0,0}, // S_SSWV_RAISE4 + {SPR_SSWV,8,5,{0},S_SSWV_RUN1,0,0}, // S_SSWV_RAISE5 + {SPR_KEEN,0,-1,{0},S_KEENSTND,0,0}, // S_KEENSTND + {SPR_KEEN,0,6,{0},S_COMMKEEN2,0,0}, // S_COMMKEEN + {SPR_KEEN,1,6,{0},S_COMMKEEN3,0,0}, // S_COMMKEEN2 + {SPR_KEEN,2,6,{(actionf_p1)A_Scream},S_COMMKEEN4,0,0}, // S_COMMKEEN3 + {SPR_KEEN,3,6,{0},S_COMMKEEN5,0,0}, // S_COMMKEEN4 + {SPR_KEEN,4,6,{0},S_COMMKEEN6,0,0}, // S_COMMKEEN5 + {SPR_KEEN,5,6,{0},S_COMMKEEN7,0,0}, // S_COMMKEEN6 + {SPR_KEEN,6,6,{0},S_COMMKEEN8,0,0}, // S_COMMKEEN7 + {SPR_KEEN,7,6,{0},S_COMMKEEN9,0,0}, // S_COMMKEEN8 + {SPR_KEEN,8,6,{0},S_COMMKEEN10,0,0}, // S_COMMKEEN9 + {SPR_KEEN,9,6,{0},S_COMMKEEN11,0,0}, // S_COMMKEEN10 + {SPR_KEEN,10,6,{(actionf_p1)A_KeenDie},S_COMMKEEN12,0,0},// S_COMMKEEN11 + {SPR_KEEN,11,-1,{0},S_NULL,0,0}, // S_COMMKEEN12 + {SPR_KEEN,12,4,{0},S_KEENPAIN2,0,0}, // S_KEENPAIN + {SPR_KEEN,12,8,{(actionf_p1)A_Pain},S_KEENSTND,0,0}, // S_KEENPAIN2 + {SPR_BBRN,0,-1,{0},S_NULL,0,0}, // S_BRAIN + {SPR_BBRN,1,36,{(actionf_p1)A_BrainPain},S_BRAIN,0,0}, // S_BRAIN_PAIN + {SPR_BBRN,0,100,{(actionf_p1)A_BrainScream},S_BRAIN_DIE2,0,0}, // S_BRAIN_DIE1 + {SPR_BBRN,0,10,{0},S_BRAIN_DIE3,0,0}, // S_BRAIN_DIE2 + {SPR_BBRN,0,10,{0},S_BRAIN_DIE4,0,0}, // S_BRAIN_DIE3 + {SPR_BBRN,0,-1,{(actionf_p1)A_BrainDie},S_NULL,0,0}, // S_BRAIN_DIE4 + {SPR_SSWV,0,10,{(actionf_p1)A_Look},S_BRAINEYE,0,0}, // S_BRAINEYE + {SPR_SSWV,0,181,{(actionf_p1)A_BrainAwake},S_BRAINEYE1,0,0}, // S_BRAINEYESEE + {SPR_SSWV,0,150,{(actionf_p1)A_BrainSpit},S_BRAINEYE1,0,0}, // S_BRAINEYE1 + {SPR_BOSF,32768,3,{(actionf_p1)A_SpawnSound},S_SPAWN2,0,0}, // S_SPAWN1 + {SPR_BOSF,32769,3,{(actionf_p1)A_SpawnFly},S_SPAWN3,0,0}, // S_SPAWN2 + {SPR_BOSF,32770,3,{(actionf_p1)A_SpawnFly},S_SPAWN4,0,0}, // S_SPAWN3 + {SPR_BOSF,32771,3,{(actionf_p1)A_SpawnFly},S_SPAWN1,0,0}, // S_SPAWN4 + {SPR_FIRE,32768,4,{(actionf_p1)A_Fire},S_SPAWNFIRE2,0,0}, // S_SPAWNFIRE1 + {SPR_FIRE,32769,4,{(actionf_p1)A_Fire},S_SPAWNFIRE3,0,0}, // S_SPAWNFIRE2 + {SPR_FIRE,32770,4,{(actionf_p1)A_Fire},S_SPAWNFIRE4,0,0}, // S_SPAWNFIRE3 + {SPR_FIRE,32771,4,{(actionf_p1)A_Fire},S_SPAWNFIRE5,0,0}, // S_SPAWNFIRE4 + {SPR_FIRE,32772,4,{(actionf_p1)A_Fire},S_SPAWNFIRE6,0,0}, // S_SPAWNFIRE5 + {SPR_FIRE,32773,4,{(actionf_p1)A_Fire},S_SPAWNFIRE7,0,0}, // S_SPAWNFIRE6 + {SPR_FIRE,32774,4,{(actionf_p1)A_Fire},S_SPAWNFIRE8,0,0}, // S_SPAWNFIRE7 + {SPR_FIRE,32775,4,{(actionf_p1)A_Fire},S_NULL,0,0}, // S_SPAWNFIRE8 + {SPR_MISL,32769,10,{0},S_BRAINEXPLODE2,0,0}, // S_BRAINEXPLODE1 + {SPR_MISL,32770,10,{0},S_BRAINEXPLODE3,0,0}, // S_BRAINEXPLODE2 + {SPR_MISL,32771,10,{(actionf_p1)A_BrainExplode},S_NULL,0,0}, // S_BRAINEXPLODE3 + {SPR_ARM1,0,6,{0},S_ARM1A,0,0}, // S_ARM1 + {SPR_ARM1,32769,7,{0},S_ARM1,0,0}, // S_ARM1A + {SPR_ARM2,0,6,{0},S_ARM2A,0,0}, // S_ARM2 + {SPR_ARM2,32769,6,{0},S_ARM2,0,0}, // S_ARM2A + {SPR_BAR1,0,6,{0},S_BAR2,0,0}, // S_BAR1 + {SPR_BAR1,1,6,{0},S_BAR1,0,0}, // S_BAR2 + {SPR_BEXP,32768,5,{0},S_BEXP2,0,0}, // S_BEXP + {SPR_BEXP,32769,5,{(actionf_p1)A_Scream},S_BEXP3,0,0}, // S_BEXP2 + {SPR_BEXP,32770,5,{0},S_BEXP4,0,0}, // S_BEXP3 + {SPR_BEXP,32771,10,{(actionf_p1)A_Explode},S_BEXP5,0,0}, // S_BEXP4 + {SPR_BEXP,32772,10,{0},S_NULL,0,0}, // S_BEXP5 + {SPR_FCAN,32768,4,{0},S_BBAR2,0,0}, // S_BBAR1 + {SPR_FCAN,32769,4,{0},S_BBAR3,0,0}, // S_BBAR2 + {SPR_FCAN,32770,4,{0},S_BBAR1,0,0}, // S_BBAR3 + {SPR_BON1,0,6,{0},S_BON1A,0,0}, // S_BON1 + {SPR_BON1,1,6,{0},S_BON1B,0,0}, // S_BON1A + {SPR_BON1,2,6,{0},S_BON1C,0,0}, // S_BON1B + {SPR_BON1,3,6,{0},S_BON1D,0,0}, // S_BON1C + {SPR_BON1,2,6,{0},S_BON1E,0,0}, // S_BON1D + {SPR_BON1,1,6,{0},S_BON1,0,0}, // S_BON1E + {SPR_BON2,0,6,{0},S_BON2A,0,0}, // S_BON2 + {SPR_BON2,1,6,{0},S_BON2B,0,0}, // S_BON2A + {SPR_BON2,2,6,{0},S_BON2C,0,0}, // S_BON2B + {SPR_BON2,3,6,{0},S_BON2D,0,0}, // S_BON2C + {SPR_BON2,2,6,{0},S_BON2E,0,0}, // S_BON2D + {SPR_BON2,1,6,{0},S_BON2,0,0}, // S_BON2E + {SPR_BKEY,0,10,{0},S_BKEY2,0,0}, // S_BKEY + {SPR_BKEY,32769,10,{0},S_BKEY,0,0}, // S_BKEY2 + {SPR_RKEY,0,10,{0},S_RKEY2,0,0}, // S_RKEY + {SPR_RKEY,32769,10,{0},S_RKEY,0,0}, // S_RKEY2 + {SPR_YKEY,0,10,{0},S_YKEY2,0,0}, // S_YKEY + {SPR_YKEY,32769,10,{0},S_YKEY,0,0}, // S_YKEY2 + {SPR_BSKU,0,10,{0},S_BSKULL2,0,0}, // S_BSKULL + {SPR_BSKU,32769,10,{0},S_BSKULL,0,0}, // S_BSKULL2 + {SPR_RSKU,0,10,{0},S_RSKULL2,0,0}, // S_RSKULL + {SPR_RSKU,32769,10,{0},S_RSKULL,0,0}, // S_RSKULL2 + {SPR_YSKU,0,10,{0},S_YSKULL2,0,0}, // S_YSKULL + {SPR_YSKU,32769,10,{0},S_YSKULL,0,0}, // S_YSKULL2 + {SPR_STIM,0,-1,{0},S_NULL,0,0}, // S_STIM + {SPR_MEDI,0,-1,{0},S_NULL,0,0}, // S_MEDI + {SPR_SOUL,32768,6,{0},S_SOUL2,0,0}, // S_SOUL + {SPR_SOUL,32769,6,{0},S_SOUL3,0,0}, // S_SOUL2 + {SPR_SOUL,32770,6,{0},S_SOUL4,0,0}, // S_SOUL3 + {SPR_SOUL,32771,6,{0},S_SOUL5,0,0}, // S_SOUL4 + {SPR_SOUL,32770,6,{0},S_SOUL6,0,0}, // S_SOUL5 + {SPR_SOUL,32769,6,{0},S_SOUL,0,0}, // S_SOUL6 + {SPR_PINV,32768,6,{0},S_PINV2,0,0}, // S_PINV + {SPR_PINV,32769,6,{0},S_PINV3,0,0}, // S_PINV2 + {SPR_PINV,32770,6,{0},S_PINV4,0,0}, // S_PINV3 + {SPR_PINV,32771,6,{0},S_PINV,0,0}, // S_PINV4 + {SPR_PSTR,32768,-1,{0},S_NULL,0,0}, // S_PSTR + {SPR_PINS,32768,6,{0},S_PINS2,0,0}, // S_PINS + {SPR_PINS,32769,6,{0},S_PINS3,0,0}, // S_PINS2 + {SPR_PINS,32770,6,{0},S_PINS4,0,0}, // S_PINS3 + {SPR_PINS,32771,6,{0},S_PINS,0,0}, // S_PINS4 + {SPR_MEGA,32768,6,{0},S_MEGA2,0,0}, // S_MEGA + {SPR_MEGA,32769,6,{0},S_MEGA3,0,0}, // S_MEGA2 + {SPR_MEGA,32770,6,{0},S_MEGA4,0,0}, // S_MEGA3 + {SPR_MEGA,32771,6,{0},S_MEGA,0,0}, // S_MEGA4 + {SPR_SUIT,32768,-1,{0},S_NULL,0,0}, // S_SUIT + {SPR_PMAP,32768,6,{0},S_PMAP2,0,0}, // S_PMAP + {SPR_PMAP,32769,6,{0},S_PMAP3,0,0}, // S_PMAP2 + {SPR_PMAP,32770,6,{0},S_PMAP4,0,0}, // S_PMAP3 + {SPR_PMAP,32771,6,{0},S_PMAP5,0,0}, // S_PMAP4 + {SPR_PMAP,32770,6,{0},S_PMAP6,0,0}, // S_PMAP5 + {SPR_PMAP,32769,6,{0},S_PMAP,0,0}, // S_PMAP6 + {SPR_PVIS,32768,6,{0},S_PVIS2,0,0}, // S_PVIS + {SPR_PVIS,1,6,{0},S_PVIS,0,0}, // S_PVIS2 + {SPR_CLIP,0,-1,{0},S_NULL,0,0}, // S_CLIP + {SPR_AMMO,0,-1,{0},S_NULL,0,0}, // S_AMMO + {SPR_ROCK,0,-1,{0},S_NULL,0,0}, // S_ROCK + {SPR_BROK,0,-1,{0},S_NULL,0,0}, // S_BROK + {SPR_CELL,0,-1,{0},S_NULL,0,0}, // S_CELL + {SPR_CELP,0,-1,{0},S_NULL,0,0}, // S_CELP + {SPR_SHEL,0,-1,{0},S_NULL,0,0}, // S_SHEL + {SPR_SBOX,0,-1,{0},S_NULL,0,0}, // S_SBOX + {SPR_BPAK,0,-1,{0},S_NULL,0,0}, // S_BPAK + {SPR_BFUG,0,-1,{0},S_NULL,0,0}, // S_BFUG + {SPR_MGUN,0,-1,{0},S_NULL,0,0}, // S_MGUN + {SPR_CSAW,0,-1,{0},S_NULL,0,0}, // S_CSAW + {SPR_LAUN,0,-1,{0},S_NULL,0,0}, // S_LAUN + {SPR_PLAS,0,-1,{0},S_NULL,0,0}, // S_PLAS + {SPR_SHOT,0,-1,{0},S_NULL,0,0}, // S_SHOT + {SPR_SGN2,0,-1,{0},S_NULL,0,0}, // S_SHOT2 + {SPR_COLU,32768,-1,{0},S_NULL,0,0}, // S_COLU + {SPR_SMT2,0,-1,{0},S_NULL,0,0}, // S_STALAG + {SPR_GOR1,0,10,{0},S_BLOODYTWITCH2,0,0}, // S_BLOODYTWITCH + {SPR_GOR1,1,15,{0},S_BLOODYTWITCH3,0,0}, // S_BLOODYTWITCH2 + {SPR_GOR1,2,8,{0},S_BLOODYTWITCH4,0,0}, // S_BLOODYTWITCH3 + {SPR_GOR1,1,6,{0},S_BLOODYTWITCH,0,0}, // S_BLOODYTWITCH4 + {SPR_PLAY,13,-1,{0},S_NULL,0,0}, // S_DEADTORSO + {SPR_PLAY,18,-1,{0},S_NULL,0,0}, // S_DEADBOTTOM + {SPR_POL2,0,-1,{0},S_NULL,0,0}, // S_HEADSONSTICK + {SPR_POL5,0,-1,{0},S_NULL,0,0}, // S_GIBS + {SPR_POL4,0,-1,{0},S_NULL,0,0}, // S_HEADONASTICK + {SPR_POL3,32768,6,{0},S_HEADCANDLES2,0,0}, // S_HEADCANDLES + {SPR_POL3,32769,6,{0},S_HEADCANDLES,0,0}, // S_HEADCANDLES2 + {SPR_POL1,0,-1,{0},S_NULL,0,0}, // S_DEADSTICK + {SPR_POL6,0,6,{0},S_LIVESTICK2,0,0}, // S_LIVESTICK + {SPR_POL6,1,8,{0},S_LIVESTICK,0,0}, // S_LIVESTICK2 + {SPR_GOR2,0,-1,{0},S_NULL,0,0}, // S_MEAT2 + {SPR_GOR3,0,-1,{0},S_NULL,0,0}, // S_MEAT3 + {SPR_GOR4,0,-1,{0},S_NULL,0,0}, // S_MEAT4 + {SPR_GOR5,0,-1,{0},S_NULL,0,0}, // S_MEAT5 + {SPR_SMIT,0,-1,{0},S_NULL,0,0}, // S_STALAGTITE + {SPR_COL1,0,-1,{0},S_NULL,0,0}, // S_TALLGRNCOL + {SPR_COL2,0,-1,{0},S_NULL,0,0}, // S_SHRTGRNCOL + {SPR_COL3,0,-1,{0},S_NULL,0,0}, // S_TALLREDCOL + {SPR_COL4,0,-1,{0},S_NULL,0,0}, // S_SHRTREDCOL + {SPR_CAND,32768,-1,{0},S_NULL,0,0}, // S_CANDLESTIK + {SPR_CBRA,32768,-1,{0},S_NULL,0,0}, // S_CANDELABRA + {SPR_COL6,0,-1,{0},S_NULL,0,0}, // S_SKULLCOL + {SPR_TRE1,0,-1,{0},S_NULL,0,0}, // S_TORCHTREE + {SPR_TRE2,0,-1,{0},S_NULL,0,0}, // S_BIGTREE + {SPR_ELEC,0,-1,{0},S_NULL,0,0}, // S_TECHPILLAR + {SPR_CEYE,32768,6,{0},S_EVILEYE2,0,0}, // S_EVILEYE + {SPR_CEYE,32769,6,{0},S_EVILEYE3,0,0}, // S_EVILEYE2 + {SPR_CEYE,32770,6,{0},S_EVILEYE4,0,0}, // S_EVILEYE3 + {SPR_CEYE,32769,6,{0},S_EVILEYE,0,0}, // S_EVILEYE4 + {SPR_FSKU,32768,6,{0},S_FLOATSKULL2,0,0}, // S_FLOATSKULL + {SPR_FSKU,32769,6,{0},S_FLOATSKULL3,0,0}, // S_FLOATSKULL2 + {SPR_FSKU,32770,6,{0},S_FLOATSKULL,0,0}, // S_FLOATSKULL3 + {SPR_COL5,0,14,{0},S_HEARTCOL2,0,0}, // S_HEARTCOL + {SPR_COL5,1,14,{0},S_HEARTCOL,0,0}, // S_HEARTCOL2 + {SPR_TBLU,32768,4,{0},S_BLUETORCH2,0,0}, // S_BLUETORCH + {SPR_TBLU,32769,4,{0},S_BLUETORCH3,0,0}, // S_BLUETORCH2 + {SPR_TBLU,32770,4,{0},S_BLUETORCH4,0,0}, // S_BLUETORCH3 + {SPR_TBLU,32771,4,{0},S_BLUETORCH,0,0}, // S_BLUETORCH4 + {SPR_TGRN,32768,4,{0},S_GREENTORCH2,0,0}, // S_GREENTORCH + {SPR_TGRN,32769,4,{0},S_GREENTORCH3,0,0}, // S_GREENTORCH2 + {SPR_TGRN,32770,4,{0},S_GREENTORCH4,0,0}, // S_GREENTORCH3 + {SPR_TGRN,32771,4,{0},S_GREENTORCH,0,0}, // S_GREENTORCH4 + {SPR_TRED,32768,4,{0},S_REDTORCH2,0,0}, // S_REDTORCH + {SPR_TRED,32769,4,{0},S_REDTORCH3,0,0}, // S_REDTORCH2 + {SPR_TRED,32770,4,{0},S_REDTORCH4,0,0}, // S_REDTORCH3 + {SPR_TRED,32771,4,{0},S_REDTORCH,0,0}, // S_REDTORCH4 + {SPR_SMBT,32768,4,{0},S_BTORCHSHRT2,0,0}, // S_BTORCHSHRT + {SPR_SMBT,32769,4,{0},S_BTORCHSHRT3,0,0}, // S_BTORCHSHRT2 + {SPR_SMBT,32770,4,{0},S_BTORCHSHRT4,0,0}, // S_BTORCHSHRT3 + {SPR_SMBT,32771,4,{0},S_BTORCHSHRT,0,0}, // S_BTORCHSHRT4 + {SPR_SMGT,32768,4,{0},S_GTORCHSHRT2,0,0}, // S_GTORCHSHRT + {SPR_SMGT,32769,4,{0},S_GTORCHSHRT3,0,0}, // S_GTORCHSHRT2 + {SPR_SMGT,32770,4,{0},S_GTORCHSHRT4,0,0}, // S_GTORCHSHRT3 + {SPR_SMGT,32771,4,{0},S_GTORCHSHRT,0,0}, // S_GTORCHSHRT4 + {SPR_SMRT,32768,4,{0},S_RTORCHSHRT2,0,0}, // S_RTORCHSHRT + {SPR_SMRT,32769,4,{0},S_RTORCHSHRT3,0,0}, // S_RTORCHSHRT2 + {SPR_SMRT,32770,4,{0},S_RTORCHSHRT4,0,0}, // S_RTORCHSHRT3 + {SPR_SMRT,32771,4,{0},S_RTORCHSHRT,0,0}, // S_RTORCHSHRT4 + {SPR_HDB1,0,-1,{0},S_NULL,0,0}, // S_HANGNOGUTS + {SPR_HDB2,0,-1,{0},S_NULL,0,0}, // S_HANGBNOBRAIN + {SPR_HDB3,0,-1,{0},S_NULL,0,0}, // S_HANGTLOOKDN + {SPR_HDB4,0,-1,{0},S_NULL,0,0}, // S_HANGTSKULL + {SPR_HDB5,0,-1,{0},S_NULL,0,0}, // S_HANGTLOOKUP + {SPR_HDB6,0,-1,{0},S_NULL,0,0}, // S_HANGTNOBRAIN + {SPR_POB1,0,-1,{0},S_NULL,0,0}, // S_COLONGIBS + {SPR_POB2,0,-1,{0},S_NULL,0,0}, // S_SMALLPOOL + {SPR_BRS1,0,-1,{0},S_NULL,0,0}, // S_BRAINSTEM + {SPR_TLMP,32768,4,{0},S_TECHLAMP2,0,0}, // S_TECHLAMP + {SPR_TLMP,32769,4,{0},S_TECHLAMP3,0,0}, // S_TECHLAMP2 + {SPR_TLMP,32770,4,{0},S_TECHLAMP4,0,0}, // S_TECHLAMP3 + {SPR_TLMP,32771,4,{0},S_TECHLAMP,0,0}, // S_TECHLAMP4 + {SPR_TLP2,32768,4,{0},S_TECH2LAMP2,0,0}, // S_TECH2LAMP + {SPR_TLP2,32769,4,{0},S_TECH2LAMP3,0,0}, // S_TECH2LAMP2 + {SPR_TLP2,32770,4,{0},S_TECH2LAMP4,0,0}, // S_TECH2LAMP3 + {SPR_TLP2,32771,4,{0},S_TECH2LAMP,0,0} // S_TECH2LAMP4 +}; + + +mobjinfo_t mobjinfo[NUMMOBJTYPES] = { + + { // MT_PLAYER + -1, // doomednum + S_PLAY, // spawnstate + 100, // spawnhealth + S_PLAY_RUN1, // seestate + sfx_None, // seesound + 0, // reactiontime + sfx_None, // attacksound + S_PLAY_PAIN, // painstate + 255, // painchance + sfx_plpain, // painsound + S_NULL, // meleestate + S_PLAY_ATK1, // missilestate + S_PLAY_DIE1, // deathstate + S_PLAY_XDIE1, // xdeathstate + sfx_pldeth, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SHOOTABLE | MF_DROPOFF | MF_PICKUP | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_POSSESSED + 3004, // doomednum + S_POSS_STND, // spawnstate + 20, // spawnhealth + S_POSS_RUN1, // seestate + sfx_posit1, // seesound + 8, // reactiontime + sfx_pistol, // attacksound + S_POSS_PAIN, // painstate + 200, // painchance + sfx_popain, // painsound + 0, // meleestate + S_POSS_ATK1, // missilestate + S_POSS_DIE1, // deathstate + S_POSS_XDIE1, // xdeathstate + sfx_podth1, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_POSS_RAISE1 // raisestate + }, + + { // MT_SHOTGUY + 9, // doomednum + S_SPOS_STND, // spawnstate + 30, // spawnhealth + S_SPOS_RUN1, // seestate + sfx_posit2, // seesound + 8, // reactiontime + 0, // attacksound + S_SPOS_PAIN, // painstate + 170, // painchance + sfx_popain, // painsound + 0, // meleestate + S_SPOS_ATK1, // missilestate + S_SPOS_DIE1, // deathstate + S_SPOS_XDIE1, // xdeathstate + sfx_podth2, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SPOS_RAISE1 // raisestate + }, + + { // MT_VILE + 64, // doomednum + S_VILE_STND, // spawnstate + 700, // spawnhealth + S_VILE_RUN1, // seestate + sfx_vilsit, // seesound + 8, // reactiontime + 0, // attacksound + S_VILE_PAIN, // painstate + 10, // painchance + sfx_vipain, // painsound + 0, // meleestate + S_VILE_ATK1, // missilestate + S_VILE_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_vildth, // deathsound + 15, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 500, // mass + 0, // damage + sfx_vilact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { // MT_FIRE + -1, // doomednum + S_FIRE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_UNDEAD + 66, // doomednum + S_SKEL_STND, // spawnstate + 300, // spawnhealth + S_SKEL_RUN1, // seestate + sfx_skesit, // seesound + 8, // reactiontime + 0, // attacksound + S_SKEL_PAIN, // painstate + 100, // painchance + sfx_popain, // painsound + S_SKEL_FIST1, // meleestate + S_SKEL_MISS1, // missilestate + S_SKEL_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_skedth, // deathsound + 10, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 500, // mass + 0, // damage + sfx_skeact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SKEL_RAISE1 // raisestate + }, + + { // MT_TRACER + -1, // doomednum + S_TRACER, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_skeatk, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_TRACEEXP1, // deathstate + S_NULL, // xdeathstate + sfx_barexp, // deathsound + 10 * FRACUNIT, // speed + 11 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 10, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_SMOKE + -1, // doomednum + S_SMOKE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_FATSO + 67, // doomednum + S_FATT_STND, // spawnstate + 600, // spawnhealth + S_FATT_RUN1, // seestate + sfx_mansit, // seesound + 8, // reactiontime + 0, // attacksound + S_FATT_PAIN, // painstate + 80, // painchance + sfx_mnpain, // painsound + 0, // meleestate + S_FATT_ATK1, // missilestate + S_FATT_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_mandth, // deathsound + 8, // speed + 48 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_FATT_RAISE1 // raisestate + }, + + { // MT_FATSHOT + -1, // doomednum + S_FATSHOT1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_FATSHOTX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 20 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 8, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_CHAINGUY + 65, // doomednum + S_CPOS_STND, // spawnstate + 70, // spawnhealth + S_CPOS_RUN1, // seestate + sfx_posit2, // seesound + 8, // reactiontime + 0, // attacksound + S_CPOS_PAIN, // painstate + 170, // painchance + sfx_popain, // painsound + 0, // meleestate + S_CPOS_ATK1, // missilestate + S_CPOS_DIE1, // deathstate + S_CPOS_XDIE1, // xdeathstate + sfx_podth2, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_CPOS_RAISE1 // raisestate + }, + + { // MT_TROOP + 3001, // doomednum + S_TROO_STND, // spawnstate + 60, // spawnhealth + S_TROO_RUN1, // seestate + sfx_bgsit1, // seesound + 8, // reactiontime + 0, // attacksound + S_TROO_PAIN, // painstate + 200, // painchance + sfx_popain, // painsound + S_TROO_ATK1, // meleestate + S_TROO_ATK1, // missilestate + S_TROO_DIE1, // deathstate + S_TROO_XDIE1, // xdeathstate + sfx_bgdth1, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_bgact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_TROO_RAISE1 // raisestate + }, + + { // MT_SERGEANT + 3002, // doomednum + S_SARG_STND, // spawnstate + 150, // spawnhealth + S_SARG_RUN1, // seestate + sfx_sgtsit, // seesound + 8, // reactiontime + sfx_sgtatk, // attacksound + S_SARG_PAIN, // painstate + 180, // painchance + sfx_dmpain, // painsound + S_SARG_ATK1, // meleestate + 0, // missilestate + S_SARG_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_sgtdth, // deathsound + 10, // speed + 30 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SARG_RAISE1 // raisestate + }, + + { // MT_SHADOWS + 58, // doomednum + S_SARG_STND, // spawnstate + 150, // spawnhealth + S_SARG_RUN1, // seestate + sfx_sgtsit, // seesound + 8, // reactiontime + sfx_sgtatk, // attacksound + S_SARG_PAIN, // painstate + 180, // painchance + sfx_dmpain, // painsound + S_SARG_ATK1, // meleestate + 0, // missilestate + S_SARG_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_sgtdth, // deathsound + 10, // speed + 30 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_SHADOW | MF_COUNTKILL, // flags + S_SARG_RAISE1 // raisestate + }, + + { // MT_HEAD + 3005, // doomednum + S_HEAD_STND, // spawnstate + 400, // spawnhealth + S_HEAD_RUN1, // seestate + sfx_cacsit, // seesound + 8, // reactiontime + 0, // attacksound + S_HEAD_PAIN, // painstate + 128, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_HEAD_ATK1, // missilestate + S_HEAD_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_cacdth, // deathsound + 8, // speed + 31 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY | MF_COUNTKILL, // flags + S_HEAD_RAISE1 // raisestate + }, + + { // MT_BRUISER + 3003, // doomednum + S_BOSS_STND, // spawnstate + 1000, // spawnhealth + S_BOSS_RUN1, // seestate + sfx_brssit, // seesound + 8, // reactiontime + 0, // attacksound + S_BOSS_PAIN, // painstate + 50, // painchance + sfx_dmpain, // painsound + S_BOSS_ATK1, // meleestate + S_BOSS_ATK1, // missilestate + S_BOSS_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_brsdth, // deathsound + 8, // speed + 24 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_BOSS_RAISE1 // raisestate + }, + + { // MT_BRUISERSHOT + -1, // doomednum + S_BRBALL1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BRBALLX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 15 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 8, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_KNIGHT + 69, // doomednum + S_BOS2_STND, // spawnstate + 500, // spawnhealth + S_BOS2_RUN1, // seestate + sfx_kntsit, // seesound + 8, // reactiontime + 0, // attacksound + S_BOS2_PAIN, // painstate + 50, // painchance + sfx_dmpain, // painsound + S_BOS2_ATK1, // meleestate + S_BOS2_ATK1, // missilestate + S_BOS2_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_kntdth, // deathsound + 8, // speed + 24 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_BOS2_RAISE1 // raisestate + }, + + { // MT_SKULL + 3006, // doomednum + S_SKULL_STND, // spawnstate + 100, // spawnhealth + S_SKULL_RUN1, // seestate + 0, // seesound + 8, // reactiontime + sfx_sklatk, // attacksound + S_SKULL_PAIN, // painstate + 256, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_SKULL_ATK1, // missilestate + S_SKULL_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 8, // speed + 16 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 50, // mass + 3, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_SPIDER + 7, // doomednum + S_SPID_STND, // spawnstate + 3000, // spawnhealth + S_SPID_RUN1, // seestate + sfx_spisit, // seesound + 8, // reactiontime + sfx_shotgn, // attacksound + S_SPID_PAIN, // painstate + 40, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_SPID_ATK1, // missilestate + S_SPID_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_spidth, // deathsound + 12, // speed + 128 * FRACUNIT, // radius + 100 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { // MT_BABY + 68, // doomednum + S_BSPI_STND, // spawnstate + 500, // spawnhealth + S_BSPI_SIGHT, // seestate + sfx_bspsit, // seesound + 8, // reactiontime + 0, // attacksound + S_BSPI_PAIN, // painstate + 128, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_BSPI_ATK1, // missilestate + S_BSPI_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_bspdth, // deathsound + 12, // speed + 64 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 600, // mass + 0, // damage + sfx_bspact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_BSPI_RAISE1 // raisestate + }, + + { // MT_CYBORG + 16, // doomednum + S_CYBER_STND, // spawnstate + 4000, // spawnhealth + S_CYBER_RUN1, // seestate + sfx_cybsit, // seesound + 8, // reactiontime + 0, // attacksound + S_CYBER_PAIN, // painstate + 20, // painchance + sfx_dmpain, // painsound + 0, // meleestate + S_CYBER_ATK1, // missilestate + S_CYBER_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_cybdth, // deathsound + 16, // speed + 40 * FRACUNIT, // radius + 110 * FRACUNIT, // height + 1000, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { // MT_PAIN + 71, // doomednum + S_PAIN_STND, // spawnstate + 400, // spawnhealth + S_PAIN_RUN1, // seestate + sfx_pesit, // seesound + 8, // reactiontime + 0, // attacksound + S_PAIN_PAIN, // painstate + 128, // painchance + sfx_pepain, // painsound + 0, // meleestate + S_PAIN_ATK1, // missilestate + S_PAIN_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_pedth, // deathsound + 8, // speed + 31 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 400, // mass + 0, // damage + sfx_dmact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_FLOAT | MF_NOGRAVITY | MF_COUNTKILL, // flags + S_PAIN_RAISE1 // raisestate + }, + + { // MT_WOLFSS + 84, // doomednum + S_SSWV_STND, // spawnstate + 50, // spawnhealth + S_SSWV_RUN1, // seestate + sfx_sssit, // seesound + 8, // reactiontime + 0, // attacksound + S_SSWV_PAIN, // painstate + 170, // painchance + sfx_popain, // painsound + 0, // meleestate + S_SSWV_ATK1, // missilestate + S_SSWV_DIE1, // deathstate + S_SSWV_XDIE1, // xdeathstate + sfx_ssdth, // deathsound + 8, // speed + 20 * FRACUNIT, // radius + 56 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_posact, // activesound + MF_SOLID | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_SSWV_RAISE1 // raisestate + }, + + { // MT_KEEN + 72, // doomednum + S_KEENSTND, // spawnstate + 100, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_KEENPAIN, // painstate + 256, // painchance + sfx_keenpn, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_COMMKEEN, // deathstate + S_NULL, // xdeathstate + sfx_keendt, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 72 * FRACUNIT, // height + 10000000, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY | MF_SHOOTABLE | MF_COUNTKILL, // flags + S_NULL // raisestate + }, + + { // MT_BOSSBRAIN + 88, // doomednum + S_BRAIN, // spawnstate + 250, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_BRAIN_PAIN, // painstate + 255, // painchance + sfx_bospn, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BRAIN_DIE1, // deathstate + S_NULL, // xdeathstate + sfx_bosdth, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 10000000, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SHOOTABLE, // flags + S_NULL // raisestate + }, + + { // MT_BOSSSPIT + 89, // doomednum + S_BRAINEYE, // spawnstate + 1000, // spawnhealth + S_BRAINEYESEE, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 32 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOSECTOR, // flags + S_NULL // raisestate + }, + + { // MT_BOSSTARGET + 87, // doomednum + S_NULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 32 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOSECTOR, // flags + S_NULL // raisestate + }, + + { // MT_SPAWNSHOT + -1, // doomednum + S_SPAWN1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_bospit, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 10 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 32 * FRACUNIT, // height + 100, // mass + 3, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY | MF_NOCLIP, // flags + S_NULL // raisestate + }, + + { // MT_SPAWNFIRE + -1, // doomednum + S_SPAWNFIRE1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_BARREL + 2035, // doomednum + S_BAR1, // spawnstate + 20, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BEXP, // deathstate + S_NULL, // xdeathstate + sfx_barexp, // deathsound + 0, // speed + 10 * FRACUNIT, // radius + 42 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SHOOTABLE | MF_NOBLOOD, // flags + S_NULL // raisestate + }, + + { // MT_TROOPSHOT + -1, // doomednum + S_TBALL1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_TBALLX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 10 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 3, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_HEADSHOT + -1, // doomednum + S_RBALL1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_firsht, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_RBALLX1, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 10 * FRACUNIT, // speed + 6 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 5, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_ROCKET + -1, // doomednum + S_ROCKET, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_rlaunc, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_EXPLODE1, // deathstate + S_NULL, // xdeathstate + sfx_barexp, // deathsound + 20 * FRACUNIT, // speed + 11 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 20, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_PLASMA + -1, // doomednum + S_PLASBALL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_plasma, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_PLASEXP, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 25 * FRACUNIT, // speed + 13 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 5, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_BFG + -1, // doomednum + S_BFGSHOT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + 0, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_BFGLAND, // deathstate + S_NULL, // xdeathstate + sfx_rxplod, // deathsound + 25 * FRACUNIT, // speed + 13 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 100, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_ARACHPLAZ + -1, // doomednum + S_ARACH_PLAZ, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_plasma, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_ARACH_PLEX, // deathstate + S_NULL, // xdeathstate + sfx_firxpl, // deathsound + 25 * FRACUNIT, // speed + 13 * FRACUNIT, // radius + 8 * FRACUNIT, // height + 100, // mass + 5, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_MISSILE | MF_DROPOFF | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_PUFF + -1, // doomednum + S_PUFF1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_BLOOD + -1, // doomednum + S_BLOOD1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { // MT_TFOG + -1, // doomednum + S_TFOG, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_IFOG + -1, // doomednum + S_IFOG, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_TELEPORTMAN + 14, // doomednum + S_NULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOSECTOR, // flags + S_NULL // raisestate + }, + + { // MT_EXTRABFG + -1, // doomednum + S_BFGEXP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC0 + 2018, // doomednum + S_ARM1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC1 + 2019, // doomednum + S_ARM2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC2 + 2014, // doomednum + S_BON1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_MISC3 + 2015, // doomednum + S_BON2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_MISC4 + 5, // doomednum + S_BKEY, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_MISC5 + 13, // doomednum + S_RKEY, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_MISC6 + 6, // doomednum + S_YKEY, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_MISC7 + 39, // doomednum + S_YSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_MISC8 + 38, // doomednum + S_RSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_MISC9 + 40, // doomednum + S_BSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_NOTDMATCH, // flags + S_NULL // raisestate + }, + + { // MT_MISC10 + 2011, // doomednum + S_STIM, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC11 + 2012, // doomednum + S_MEDI, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC12 + 2013, // doomednum + S_SOUL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_INV + 2022, // doomednum + S_PINV, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_MISC13 + 2023, // doomednum + S_PSTR, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_INS + 2024, // doomednum + S_PINS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_MISC14 + 2025, // doomednum + S_SUIT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC15 + 2026, // doomednum + S_PMAP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_MISC16 + 2045, // doomednum + S_PVIS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_MEGA + 83, // doomednum + S_MEGA, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL | MF_COUNTITEM, // flags + S_NULL // raisestate + }, + + { // MT_CLIP + 2007, // doomednum + S_CLIP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC17 + 2048, // doomednum + S_AMMO, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC18 + 2010, // doomednum + S_ROCK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC19 + 2046, // doomednum + S_BROK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC20 + 2047, // doomednum + S_CELL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC21 + 17, // doomednum + S_CELP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC22 + 2008, // doomednum + S_SHEL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC23 + 2049, // doomednum + S_SBOX, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC24 + 8, // doomednum + S_BPAK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC25 + 2006, // doomednum + S_BFUG, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_CHAINGUN + 2002, // doomednum + S_MGUN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC26 + 2005, // doomednum + S_CSAW, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC27 + 2003, // doomednum + S_LAUN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC28 + 2004, // doomednum + S_PLAS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_SHOTGUN + 2001, // doomednum + S_SHOT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_SUPERSHOTGUN + 82, // doomednum + S_SHOT2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPECIAL, // flags + S_NULL // raisestate + }, + + { // MT_MISC29 + 85, // doomednum + S_TECHLAMP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC30 + 86, // doomednum + S_TECH2LAMP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC31 + 2028, // doomednum + S_COLU, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC32 + 30, // doomednum + S_TALLGRNCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC33 + 31, // doomednum + S_SHRTGRNCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC34 + 32, // doomednum + S_TALLREDCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC35 + 33, // doomednum + S_SHRTREDCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC36 + 37, // doomednum + S_SKULLCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC37 + 36, // doomednum + S_HEARTCOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC38 + 41, // doomednum + S_EVILEYE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC39 + 42, // doomednum + S_FLOATSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC40 + 43, // doomednum + S_TORCHTREE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC41 + 44, // doomednum + S_BLUETORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC42 + 45, // doomednum + S_GREENTORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC43 + 46, // doomednum + S_REDTORCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC44 + 55, // doomednum + S_BTORCHSHRT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC45 + 56, // doomednum + S_GTORCHSHRT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC46 + 57, // doomednum + S_RTORCHSHRT, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC47 + 47, // doomednum + S_STALAGTITE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC48 + 48, // doomednum + S_TECHPILLAR, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC49 + 34, // doomednum + S_CANDLESTIK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC50 + 35, // doomednum + S_CANDELABRA, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC51 + 49, // doomednum + S_BLOODYTWITCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC52 + 50, // doomednum + S_MEAT2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 84 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC53 + 51, // doomednum + S_MEAT3, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 84 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC54 + 52, // doomednum + S_MEAT4, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC55 + 53, // doomednum + S_MEAT5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 52 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC56 + 59, // doomednum + S_MEAT2, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 84 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC57 + 60, // doomednum + S_MEAT4, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC58 + 61, // doomednum + S_MEAT3, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 52 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC59 + 62, // doomednum + S_MEAT5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 52 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC60 + 63, // doomednum + S_BLOODYTWITCH, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 68 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC61 + 22, // doomednum + S_HEAD_DIE6, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC62 + 15, // doomednum + S_PLAY_DIE7, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC63 + 18, // doomednum + S_POSS_DIE5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC64 + 21, // doomednum + S_SARG_DIE6, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC65 + 23, // doomednum + S_SKULL_DIE6, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC66 + 20, // doomednum + S_TROO_DIE5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC67 + 19, // doomednum + S_SPOS_DIE5, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC68 + 10, // doomednum + S_PLAY_XDIE9, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC69 + 12, // doomednum + S_PLAY_XDIE9, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC70 + 28, // doomednum + S_HEADSONSTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC71 + 24, // doomednum + S_GIBS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + 0, // flags + S_NULL // raisestate + }, + + { // MT_MISC72 + 27, // doomednum + S_HEADONASTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC73 + 29, // doomednum + S_HEADCANDLES, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC74 + 25, // doomednum + S_DEADSTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC75 + 26, // doomednum + S_LIVESTICK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC76 + 54, // doomednum + S_BIGTREE, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 32 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC77 + 70, // doomednum + S_BBAR1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID, // flags + S_NULL // raisestate + }, + + { // MT_MISC78 + 73, // doomednum + S_HANGNOGUTS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 88 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC79 + 74, // doomednum + S_HANGBNOBRAIN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 88 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC80 + 75, // doomednum + S_HANGTLOOKDN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC81 + 76, // doomednum + S_HANGTSKULL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC82 + 77, // doomednum + S_HANGTLOOKUP, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC83 + 78, // doomednum + S_HANGTNOBRAIN, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 16 * FRACUNIT, // radius + 64 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_SOLID | MF_SPAWNCEILING | MF_NOGRAVITY, // flags + S_NULL // raisestate + }, + + { // MT_MISC84 + 79, // doomednum + S_COLONGIBS, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { // MT_MISC85 + 80, // doomednum + S_SMALLPOOL, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + }, + + { // MT_MISC86 + 81, // doomednum + S_BRAINSTEM, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 20 * FRACUNIT, // radius + 16 * FRACUNIT, // height + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP, // flags + S_NULL // raisestate + } +}; +int myargc; +char** myargv; + + +// +// M_CheckParm +// Checks for the given parameter +// in the program's command line arguments. +// Returns the argument number (1 to argc-1) +// or 0 if not present +int M_CheckParm(char* check) +{ + int i; + + for (i = 1; i < myargc; i++) + { + if (!doom_strcasecmp(check, myargv[i])) + return i; + } + + return 0; +} +void M_ClearBox(fixed_t* box) +{ + box[BOXTOP] = box[BOXRIGHT] = DOOM_MININT; + box[BOXBOTTOM] = box[BOXLEFT] = DOOM_MAXINT; +} + + +void M_AddToBox(fixed_t* box, fixed_t x, fixed_t y) +{ + if (x < box[BOXLEFT]) + box[BOXLEFT] = x; + else if (x > box[BOXRIGHT]) + box[BOXRIGHT] = x; + if (y < box[BOXBOTTOM]) + box[BOXBOTTOM] = y; + else if (y > box[BOXTOP]) + box[BOXTOP] = y; +} +static int firsttime = 1; +static unsigned char cheat_xlate_table[256]; + + +// +// Called in st_stuff module, which handles the input. +// Returns a 1 if the cheat was successful, 0 if failed. +// +int cht_CheckCheat(cheatseq_t* cht, char key) +{ + int i; + int rc = 0; + + if (firsttime) + { + firsttime = 0; + for (i = 0; i < 256; i++) cheat_xlate_table[i] = SCRAMBLE(i); + } + + if (!cht->p) + cht->p = cht->sequence; // initialize if first time + + if (*cht->p == 0) + *(cht->p++) = key; + else if + (cheat_xlate_table[(unsigned char)key] == *cht->p) cht->p++; + else + cht->p = cht->sequence; + + if (*cht->p == 1) + cht->p++; + else if (*cht->p == 0xff) // end of sequence character + { + cht->p = cht->sequence; + rc = 1; + } + + return rc; +} + + +void cht_GetParam(cheatseq_t* cht, char* buffer) +{ + unsigned char* p, c; + + p = cht->sequence; + while (*(p++) != 1); + + do + { + c = *p; + *(buffer++) = c; + *(p++) = 0; + } while (c && *p != 0xff); + + if (*p == 0xff) + *buffer = 0; +} +fixed_t FixedMul(fixed_t a, fixed_t b) +{ + return ((long long)a * (long long)b) >> FRACBITS; +} + + +// +// FixedDiv, C version. +// +fixed_t FixedDiv(fixed_t a, fixed_t b) +{ + if ((doom_abs(a) >> 14) >= doom_abs(b)) + return (a ^ b) < 0 ? DOOM_MININT : DOOM_MAXINT; + return FixedDiv2(a, b); +} + + +fixed_t FixedDiv2(fixed_t a, fixed_t b) +{ + double c; + + c = ((double)a) / ((double)b) * FRACUNIT; + + if (c >= 2147483648.0 || c < -2147483648.0) + I_Error((char*)"Error: FixedDiv: divide by zero"); + return (fixed_t)c; +} +#define SAVESTRINGSIZE 24 +#define SKULLXOFF -32 +#define LINEHEIGHT 16 + + +// +// MENU TYPEDEFS +// +typedef struct +{ + // 0 = no cursor here, 1 = ok, 2 = arrows ok + short status; + + char name[10]; + + // choice = menu item #. + // if status = 2, + // choice=0:leftarrow,1:rightarrow + void (*routine)(int choice); + + // hotkey in menu + char alphaKey; +} menuitem_t; + + +typedef struct menu_s +{ + short numitems; // # of menu items + struct menu_s* prevMenu; // previous menu + menuitem_t* menuitems; // menu items + void (*routine)(); // draw routine + short x; + short y; // x,y of menu + short lastOn; // last item user was on in menu +} menu_t; + + +typedef struct +{ + char* lump; + int x, w; + int offx; + int offy; +} menu_custom_text_seg_t; + + +typedef struct +{ + char* name; + menu_custom_text_seg_t segs[16]; +} menu_custom_text_t; + + +extern int doom_flags; + +extern patch_t* hu_font[HU_FONTSIZE]; +extern doom_boolean message_dontfuckwithme; + +extern doom_boolean chat_on; // in heads-up code + +extern int mousemove; + + +// +// defaulted values +// +int mouseSensitivity; // has default + +// Show messages has default, 0 = off, 1 = on +int showMessages; + + +// Blocky mode, has default, 0 = high, 1 = normal +int detailLevel; +int screenblocks; // has default + +// temp for screenblocks (0-9) +int screenSize; + +// -1 = no quicksave slot picked! +int quickSaveSlot; + +// 1 = message to be printed +int messageToPrint; +// ...and here is the message string! +char* messageString; + +// message x & y +int messx; +int messy; +int messageLastMenuActive; + +// timed message = no input from user +doom_boolean messageNeedsInput; + +void (*messageRoutine)(int response); + +char gammamsg[5][26] = +{ + GAMMALVL0, + GAMMALVL1, + GAMMALVL2, + GAMMALVL3, + GAMMALVL4 +}; + +// we are going to be entering a savegame string +int saveStringEnter; +int saveSlot; // which slot to save in +int saveCharIndex; // which char we're editing +// old save description before edit +char saveOldString[SAVESTRINGSIZE]; + +doom_boolean inhelpscreens; +doom_boolean menuactive; + +extern doom_boolean sendpause; +char savegamestrings[10][SAVESTRINGSIZE]; + +char endstring[160]; + +short itemOn; // menu item skull is on +short skullAnimCounter; // skull animation counter +short whichSkull; // which skull to draw + +// graphic name of skulls +// warning: initializer-string for array of chars is too long +char skullName[2][/*8*/9] = { "M_SKULL1","M_SKULL2" }; + +// current menudef +menu_t* currentMenu; + +// We create new menu text by cutting into existing graphics and pasting them to create the new text. +// This way we don't ship code with embeded graphics that come from WAD files. +menu_custom_text_t menu_custom_texts[] = +{ + {(char*)"TXT_MMOV", { + {(char*)"M_MSENS", 0, 74, 0, 0}, // Mouse + {(char*)"M_MSENS", 0, 31, 83, 0}, // Mo + {(char*)"M_MSENS", 160, 14, 83 + 31, 0}, // v + {(char*)"M_MSENS", 60, 14, 83 + 31 + 14, 0}, // e + {(char*)"M_DETAIL", 169, 5, 83 + 31 + 14 + 14, 0}, // : + {0} + }}, + {(char*)"TXT_MOPT", { + {(char*)"M_MSENS", 0, 74, 0, 0}, // Mouse + {(char*)"M_OPTION", 0, 92, 74 + 9, 0}, // Options + {0} + }}, + {(char*)"TXT_CROS", { + {(char*)"M_SKILL", 0, 16, 0, 0}, // C + {(char*)"M_DETAIL", 14, 15, 16, 0}, // r + {(char*)"M_SKILL", 46, 30, 16 + 15, 0}, // os + {(char*)"M_SKILL", 62, 14, 16 + 15 + 30, 0}, // s + {(char*)"M_SKILL", 16, 15, 16 + 15 + 30 + 14, 0}, // h + {(char*)"M_DETAIL", 140, 19, 16 + 15 + 30 + 14 + 15, 0}, // ai + {(char*)"M_DETAIL", 14, 15, 16 + 15 + 30 + 14 + 15 + 19, 0}, // r + {(char*)"M_DETAIL", 169, 5, 16 + 15 + 30 + 14 + 15 + 19 + 15, 0}, // : + {0} + }}, + {(char*)"TXT_ARUN", { + {(char*)"M_SGTTL", 90, 17, 0, 0}, // A + {(char*)"M_GDLOW", 0, 10, 17, 3}, // l + {(char*)"M_GDLOW", 26, 16, 17 + 10, 3}, // + {(char*)"M_DISP", 57, 30, 17 + 10 + 16, 0}, // ay + {(char*)"M_RDTHIS", 99, 14, 17 + 10 + 16 + 30, 0}, // s + {(char*)"M_RDTHIS", 0, 16, 17 + 10 + 16 + 30 + 14 + 7, 0}, // R + {(char*)"M_SFXVOL", 90, 15, 17 + 10 + 16 + 30 + 14 + 7 + 16, 0}, // u + {(char*)"M_OPTION", 62, 15, 17 + 10 + 16 + 30 + 14 + 7 + 16 + 15, 0}, // n + {(char*)"M_DETAIL", 169, 5, 17 + 10 + 16 + 30 + 14 + 7 + 16 + 15 + 15, 0}, // : + {0} + }}, +}; + +const int custom_texts_count = sizeof(menu_custom_texts) / sizeof(menu_custom_text_t); + +char tempstring[80]; +int epi; +char detailNames[2][9] = { "M_GDHIGH","M_GDLOW" }; +char msgNames[2][9] = { "M_MSGOFF","M_MSGON" }; + +int quitsounds[8] = +{ + sfx_pldeth, + sfx_dmpain, + sfx_popain, + sfx_slop, + sfx_telept, + sfx_posit1, + sfx_posit3, + sfx_sgtatk +}; + +int quitsounds2[8] = +{ + sfx_vilact, + sfx_getpow, + sfx_boscub, + sfx_slop, + sfx_skeswg, + sfx_kntdth, + sfx_bspact, + sfx_sgtatk +}; + + +// +// PROTOTYPES +// +void M_NewGame(int choice); +void M_Episode(int choice); +void M_ChooseSkill(int choice); +void M_LoadGame(int choice); +void M_SaveGame(int choice); +void M_Options(int choice); +void M_EndGame(int choice); +void M_ReadThis(int choice); +void M_ReadThis2(int choice); +void M_QuitDOOM(int choice); + +void M_ChangeMessages(int choice); +void M_SfxVol(int choice); +void M_MusicVol(int choice); +void M_ChangeDetail(int choice); +void M_MouseOptions(int choice); +void M_SizeDisplay(int choice); +void M_StartGame(int choice); +void M_Sound(int choice); +void M_ChangeCrosshair(int choice); +void M_ChangeAlwaysRun(int choice); + +void M_MouseMove(int choice); +void M_ChangeSensitivity(int choice); + +void M_FinishReadThis(int choice); +void M_LoadSelect(int choice); +void M_SaveSelect(int choice); +void M_ReadSaveStrings(void); +void M_QuickSave(void); +void M_QuickLoad(void); + +void M_DrawMainMenu(void); +void M_DrawReadThis1(void); +void M_DrawReadThis2(void); +void M_DrawNewGame(void); +void M_DrawEpisode(void); +void M_DrawOptions(void); +void M_DrawSound(void); +void M_DrawLoad(void); +void M_DrawSave(void); + +void M_DrawSaveLoadBorder(int x, int y); +void M_SetupNextMenu(menu_t* menudef); +void M_DrawThermo(int x, int y, int thermWidth, int thermDot); +void M_DrawEmptyCell(menu_t* menu, int item); +void M_DrawSelCell(menu_t* menu, int item); +void M_WriteText(int x, int y, char* string); +int M_StringWidth(char* string); +int M_StringHeight(char* string); +void M_StartControlPanel(void); +void M_StartMessage(char* string, void* routine, doom_boolean input); +void M_StopMessage(void); +void M_ClearMenus(void); +void M_DrawMouseOptions(void); + + +// +// DOOM MENU +// +enum +{ + newgame = 0, + options, + loadgame, + savegame, + readthis, + quitdoom, + main_end +} main_e; + +menuitem_t MainMenu[] = +{ + {1,"M_NGAME",M_NewGame,'n'}, + {1,"M_OPTION",M_Options,'o'}, + {1,"M_LOADG",M_LoadGame,'l'}, + {1,"M_SAVEG",M_SaveGame,'s'}, + // Another hickup with Special edition. + {1,"M_RDTHIS",M_ReadThis,'r'}, + {1,"M_QUITG",M_QuitDOOM,'q'} +}; + +menu_t MainDef = +{ + main_end, + 0, + MainMenu, + M_DrawMainMenu, + 97,64, + 0 +}; + + +// +// EPISODE SELECT +// +enum +{ + ep1, + ep2, + ep3, + ep4, + ep_end +} episodes_e; + +menuitem_t EpisodeMenu[] = +{ + {1,"M_EPI1", M_Episode,'k'}, + {1,"M_EPI2", M_Episode,'t'}, + {1,"M_EPI3", M_Episode,'i'}, + {1,"M_EPI4", M_Episode,'t'} +}; + +menu_t EpiDef = +{ + ep_end, // # of menu items + &MainDef, // previous menu + EpisodeMenu, // menuitem_t -> + M_DrawEpisode, // drawing routine -> + 48,63, // x,y + ep1 // lastOn +}; + + +// +// NEW GAME +// +enum +{ + killthings, + toorough, + hurtme, + violence, + nightmare, + newg_end +} newgame_e; + +menuitem_t NewGameMenu[] = +{ + {1,"M_JKILL", M_ChooseSkill, 'i'}, + {1,"M_ROUGH", M_ChooseSkill, 'h'}, + {1,"M_HURT", M_ChooseSkill, 'h'}, + {1,"M_ULTRA", M_ChooseSkill, 'u'}, + {1,"M_NMARE", M_ChooseSkill, 'n'} +}; + +menu_t NewDef = +{ + newg_end, // # of menu items + &EpiDef, // previous menu + NewGameMenu, // menuitem_t -> + M_DrawNewGame, // drawing routine -> + 48,63, // x,y + hurtme // lastOn +}; + + +// +// OPTIONS MENU +// +menuitem_t* OptionsMenu; + +enum +{ + endgame, + messages, + crosshair_opt, + always_run_opt, + //detail, // Details do nothing? + scrnsize, + option_empty1, + mouseoptions, + soundvol, + opt_end +} options_e; + +menuitem_t OptionsMenuFull[] = +{ + {1,"M_ENDGAM", M_EndGame,'e'}, + {1,"M_MESSG", M_ChangeMessages,'m'}, + {1,"TXT_CROS", M_ChangeCrosshair,'c'}, + {1,"TXT_ARUN", M_ChangeAlwaysRun,'r'}, + //{1,"M_DETAIL", M_ChangeDetail,'g'}, // Details do nothing? + {2,"M_SCRNSZ", M_SizeDisplay,'s'}, + {-1,"",0}, + {1,"TXT_MOPT", M_MouseOptions,'f'}, + {1,"M_SVOL", M_Sound,'s'} +}; + +menu_t OptionsDef = +{ + opt_end, + &MainDef, + OptionsMenuFull, + M_DrawOptions, + 60,37, + 0 +}; + + +enum +{ + endgame_no_mouse, + messages_no_mouse, + crosshair_opt_no_mouse, + always_run_opt_no_mouse, + //detail_no_mouse, // Details do nothing? + scrnsize_no_mouse, + option_empty1_no_mouse, + soundvol_no_mouse, + opt_end_no_mouse +} options_e_no_mouse; + +menuitem_t OptionsMenuNoMouse[] = +{ + {1,"M_ENDGAM", M_EndGame,'e'}, + {1,"M_MESSG", M_ChangeMessages,'m'}, + {1,"TXT_CROS", M_ChangeCrosshair,'c'}, + {1,"TXT_ARUN", M_ChangeAlwaysRun,'r'}, + //{1,"M_DETAIL", M_ChangeDetail,'g'}, // Details do nothing? + {2,"M_SCRNSZ", M_SizeDisplay,'s'}, + {-1,"",0}, + {1,"M_SVOL", M_Sound,'s'} +}; + +menu_t OptionsNoMouseDef = +{ + opt_end_no_mouse, + &MainDef, + OptionsMenuNoMouse, + M_DrawOptions, + 60,37, + 0 +}; + + +enum +{ + endgame_no_sound, + messages_no_sound, + crosshair_opt_no_sound, + always_run_opt_no_sound, + //detail_no_sound, // Details do nothing? + scrnsize_no_sound, + option_empty1_no_sound, + mouseoptions_no_sound, + opt_end_no_sound +} options_e_no_sound; + +menuitem_t OptionsMenuNoSound[] = +{ + {1,"M_ENDGAM", M_EndGame,'e'}, + {1,"M_MESSG", M_ChangeMessages,'m'}, + {1,"TXT_CROS", M_ChangeCrosshair,'c'}, + {1,"TXT_ARUN", M_ChangeAlwaysRun,'r'}, + //{1,"M_DETAIL", M_ChangeDetail,'g'}, // Details do nothing? + {2,"M_SCRNSZ", M_SizeDisplay,'s'}, + {-1,"",0}, + {1,"TXT_MOPT", M_MouseOptions,'f'} +}; + +menu_t OptionsNoSoundDef = +{ + opt_end_no_sound, + &MainDef, + OptionsMenuNoSound, + M_DrawOptions, + 60,37, + 0 +}; + + +enum +{ + endgame_no_sound_no_mouse, + messages_no_sound_no_mouse, + crosshair_opt_no_sound_no_mouse, + always_run_top_no_sound_no_mouse, + //detail_no_sound_no_mouse, // Details do nothing? + scrnsize_no_sound_no_mouse, + option_empty1_no_sound_no_mouse, + opt_end_no_sound_no_mouse +} options_e_no_sound_no_mouse; + +menuitem_t OptionsMenuNoSoundNoMouse[] = +{ + {1,"M_ENDGAM", M_EndGame,'e'}, + {1,"M_MESSG", M_ChangeMessages,'m'}, + {1,"TXT_CROS", M_ChangeCrosshair,'c'}, + {1,"TXT_ARUN", M_ChangeAlwaysRun,'r'}, + //{1,"M_DETAIL", M_ChangeDetail,'g'}, // Details do nothing? + {2,"M_SCRNSZ", M_SizeDisplay,'s'}, + {-1,"",0} +}; + +menu_t OptionsNoSoundNoMouseDef = +{ + opt_end_no_sound_no_mouse, + &MainDef, + OptionsMenuNoSoundNoMouse, + M_DrawOptions, + 60,37, + 0 +}; + + +// +// MOUSE OPTIONS +// +enum +{ + mousemov, + mousesens, + mouse_option_empty1, + mouse_opt_end +} mouseoptions_e; + +menuitem_t MouseOptionsMenu[] = +{ + {1,"TXT_MMOV", M_MouseMove,'f'}, + {2,"M_MSENS", M_ChangeSensitivity,'m'}, + {-1,"",0}, +}; + +menu_t MouseOptionsDef = +{ + mouse_opt_end, + &OptionsDef, + MouseOptionsMenu, + M_DrawMouseOptions, + 60,70, + 0 +}; + + +// +// Read This! MENU 1 & 2 +// +enum +{ + rdthsempty1, + read1_end +} read_e; + +menuitem_t ReadMenu1[] = +{ + {1,"",M_ReadThis2,0} +}; + +menu_t ReadDef1 = +{ + read1_end, + &MainDef, + ReadMenu1, + M_DrawReadThis1, + 280,185, + 0 +}; + +enum +{ + rdthsempty2, + read2_end +} read_e2; + +menuitem_t ReadMenu2[] = +{ + {1,"",M_FinishReadThis,0} +}; + +menu_t ReadDef2 = +{ + read2_end, + &ReadDef1, + ReadMenu2, + M_DrawReadThis2, + 330,175, + 0 +}; + +// +// SOUND VOLUME MENU +// +menuitem_t* SoundMenu; + +enum +{ + sfx_vol, + sfx_empty1, + music_vol, + sfx_empty2, + sound_end +} sound_e; + +menuitem_t SoundMenuFull[] = +{ + {2,"M_SFXVOL",M_SfxVol,'s'}, + {-1,"",0}, + {2,"M_MUSVOL",M_MusicVol,'m'}, + {-1,"",0} +}; + +menu_t SoundDef = +{ + sound_end, + &OptionsDef, + SoundMenuFull, + M_DrawSound, + 80,64, + 0 +}; + + +enum +{ + music_vol_no_sfx, + sfx_empty2_no_sfx, + sound_end_no_sfx +} sound_e_no_sfx; + +menuitem_t SoundMenuNoSFX[] = +{ + {2,"M_MUSVOL",M_MusicVol,'m'}, + {-1,"",0} +}; + +menu_t SoundNoSFXDef = +{ + sound_end_no_sfx, + &OptionsDef, + SoundMenuNoSFX, + M_DrawSound, + 80,64, + 0 +}; + + +enum +{ + sfx_vol_no_music, + sfx_empty1_no_music, + sound_end_no_music +} sound_e_no_music; + +menuitem_t SoundMenuNoMusic[] = +{ + {2,"M_SFXVOL",M_SfxVol,'s'}, + {-1,"",0} +}; + +menu_t SoundNoMusicDef = +{ + sound_end_no_music, + &OptionsDef, + SoundMenuNoMusic, + M_DrawSound, + 80,64, + 0 +}; + + +// +// LOAD GAME MENU +// +enum +{ + load1, + load2, + load3, + load4, + load5, + load6, + load_end +} load_e; + +menuitem_t DOOM_LoadMenu[] = +{ + {1,"", M_LoadSelect,'1'}, + {1,"", M_LoadSelect,'2'}, + {1,"", M_LoadSelect,'3'}, + {1,"", M_LoadSelect,'4'}, + {1,"", M_LoadSelect,'5'}, + {1,"", M_LoadSelect,'6'} +}; + +menu_t LoadDef = +{ + load_end, + &MainDef, + DOOM_LoadMenu, + M_DrawLoad, + 80,54, + 0 +}; + +// +// SAVE GAME MENU +// +menuitem_t SaveMenu[] = +{ + {1,"", M_SaveSelect,'1'}, + {1,"", M_SaveSelect,'2'}, + {1,"", M_SaveSelect,'3'}, + {1,"", M_SaveSelect,'4'}, + {1,"", M_SaveSelect,'5'}, + {1,"", M_SaveSelect,'6'} +}; + +menu_t SaveDef = +{ + load_end, + &MainDef, + SaveMenu, + M_DrawSave, + 80,54, + 0 +}; + + +// +// M_DrawCustomMenuText +// Draw several segments of patches to make up new text +// +void M_DrawCustomMenuText(char* name, int x, int y) +{ + for (int i = 0; i < custom_texts_count; ++i) + { + menu_custom_text_t* custom_text = menu_custom_texts + i; + if (doom_strcmp(custom_text->name, name) == 0) + { + menu_custom_text_seg_t* seg = custom_text->segs; + while (seg->lump) + { + void* lump = W_CacheLumpName(seg->lump, PU_CACHE); + V_DrawPatchRectDirect(x + seg->offx, y, 0, (patch_t*)lump, seg->x, seg->w); + ++seg; + } + break; + } + } +} + + +// +// M_ReadSaveStrings +// read the strings from the savegame files +// +void M_ReadSaveStrings(void) +{ + void* handle; + int count; + int i; + char name[256]; + + for (i = 0; i < load_end; i++) + { +#if 0 + if (M_CheckParm("-cdrom")) + //doom_sprintf(name, "c:\\doomdata\\" SAVEGAMENAME "%d.dsg", i); + else +#endif + { + //doom_sprintf(name, SAVEGAMENAME"%d.dsg", i); + doom_strcpy(name, SAVEGAMENAME); + doom_concat(name, doom_itoa(i, 10)); + doom_concat(name, ".dsg"); + } + + handle = doom_open(name, "r"); + if (handle == 0) + { + doom_strcpy(&savegamestrings[i][0], EMPTYSTRING); + DOOM_LoadMenu[i].status = 0; + continue; + } + count = doom_read(handle, &savegamestrings[i], SAVESTRINGSIZE); + doom_close(handle); + DOOM_LoadMenu[i].status = 1; + } +} + + +// +// M_LoadGame & Cie. +// +void M_DrawLoad(void) +{ + int i; + + V_DrawPatchDirect(72, 28, 0, (patch_t*)W_CacheLumpName((char*)"M_LOADG", PU_CACHE)); + for (i = 0; i < load_end; i++) + { + M_DrawSaveLoadBorder(LoadDef.x, LoadDef.y + LINEHEIGHT * i); + M_WriteText(LoadDef.x, LoadDef.y + LINEHEIGHT * i, savegamestrings[i]); + } +} + + +// +// Draw border for the savegame description +// +void M_DrawSaveLoadBorder(int x, int y) +{ + int i; + + V_DrawPatchDirect(x - 8, y + 7, 0, (patch_t*)W_CacheLumpName((char*)"M_LSLEFT", PU_CACHE)); + + for (i = 0; i < 24; i++) + { + V_DrawPatchDirect(x, y + 7, 0, (patch_t*)W_CacheLumpName((char*)"M_LSCNTR", PU_CACHE)); + x += 8; + } + + V_DrawPatchDirect(x, y + 7, 0, (patch_t*)W_CacheLumpName((char*)"M_LSRGHT", PU_CACHE)); +} + + +// +// User wants to load this game +// +void M_LoadSelect(int choice) +{ + char name[256]; + +#if 0 + if (M_CheckParm("-cdrom")) + //doom_sprintf(name, "c:\\doomdata\\"SAVEGAMENAME"%d.dsg", choice); + else +#endif + { + //doom_sprintf(name, SAVEGAMENAME"%d.dsg", choice); + doom_strcpy(name, SAVEGAMENAME); + doom_concat(name, doom_itoa(choice, 10)); + doom_concat(name, ".dsg"); + } + G_LoadGame(name); + M_ClearMenus(); +} + + +// +// Selected from DOOM menu +// +void M_LoadGame(int choice) +{ + if (netgame) + { + M_StartMessage((char*)LOADNET, 0, doom_false); + return; + } + + M_SetupNextMenu(&LoadDef); + M_ReadSaveStrings(); +} + + +// +// M_SaveGame & Cie. +// +void M_DrawSave(void) +{ + int i; + + V_DrawPatchDirect(72, 28, 0, (patch_t*)W_CacheLumpName((char*)"M_SAVEG", PU_CACHE)); + for (i = 0; i < load_end; i++) + { + M_DrawSaveLoadBorder(LoadDef.x, LoadDef.y + LINEHEIGHT * i); + M_WriteText(LoadDef.x, LoadDef.y + LINEHEIGHT * i, savegamestrings[i]); + } + + if (saveStringEnter) + { + i = M_StringWidth(savegamestrings[saveSlot]); + M_WriteText(LoadDef.x + i, LoadDef.y + LINEHEIGHT * saveSlot, (char*)"_"); + } +} + + +// +// M_Responder calls this when user is finished +// +void M_DoSave(int slot) +{ + G_SaveGame(slot, savegamestrings[slot]); + M_ClearMenus(); + + // PICK QUICKSAVE SLOT YET? + if (quickSaveSlot == -2) + quickSaveSlot = slot; +} + + +// +// User wants to save. Start string input for M_Responder +// +void M_SaveSelect(int choice) +{ + // we are going to be intercepting all chars + saveStringEnter = 1; + + saveSlot = choice; + doom_strcpy(saveOldString, savegamestrings[choice]); + if (!doom_strcmp(savegamestrings[choice], EMPTYSTRING)) + savegamestrings[choice][0] = 0; + saveCharIndex = (int)doom_strlen(savegamestrings[choice]); +} + + +// +// Selected from DOOM menu +// +void M_SaveGame(int choice) +{ + if (!usergame) + { + M_StartMessage((char*)SAVEDEAD, 0, doom_false); + return; + } + + if (gamestate != GS_LEVEL) + return; + + M_SetupNextMenu(&SaveDef); + M_ReadSaveStrings(); +} + + +// +// M_QuickSave +// +void M_QuickSaveResponse(int ch) +{ + if (ch == 'y') + { + M_DoSave(quickSaveSlot); + S_StartSound(0, sfx_swtchx); + } +} + + +void M_QuickSave(void) +{ + if (!usergame) + { + S_StartSound(0, sfx_oof); + return; + } + + if (gamestate != GS_LEVEL) + return; + + if (quickSaveSlot < 0) + { + M_StartControlPanel(); + M_ReadSaveStrings(); + M_SetupNextMenu(&SaveDef); + quickSaveSlot = -2; // means to pick a slot now + return; + } + //doom_sprintf(tempstring, QSPROMPT, savegamestrings[quickSaveSlot]); + doom_strcpy(tempstring, QSPROMPT_1); + doom_concat(tempstring, savegamestrings[quickSaveSlot]); + doom_strcpy(tempstring, QSPROMPT_2); + M_StartMessage(tempstring, M_QuickSaveResponse, doom_true); +} + + +// +// M_QuickLoad +// +void M_QuickLoadResponse(int ch) +{ + if (ch == 'y') + { + M_LoadSelect(quickSaveSlot); + S_StartSound(0, sfx_swtchx); + } +} + + +void M_QuickLoad(void) +{ + if (netgame) + { + M_StartMessage((char*)QLOADNET, 0, doom_false); + return; + } + + if (quickSaveSlot < 0) + { + M_StartMessage((char*)QSAVESPOT, 0, doom_false); + return; + } + //doom_sprintf(tempstring, QLPROMPT, savegamestrings[quickSaveSlot]); + doom_strcpy(tempstring, QLPROMPT_1); + doom_concat(tempstring, savegamestrings[quickSaveSlot]); + doom_strcpy(tempstring, QLPROMPT_2); + M_StartMessage(tempstring, M_QuickLoadResponse, doom_true); +} + + +// +// Read This Menus +// Had a "quick hack to fix romero bug" +// +void M_DrawReadThis1(void) +{ + inhelpscreens = doom_true; + switch (gamemode) + { + case commercial: + V_DrawPatchDirect(0, 0, 0, (patch_t*)W_CacheLumpName((char*)"HELP", PU_CACHE)); + break; + case shareware: + case registered: + case retail: + V_DrawPatchDirect(0, 0, 0, (patch_t*)W_CacheLumpName((char*)"HELP1", PU_CACHE)); + break; + default: + break; + } + return; +} + + +// +// Read This Menus - optional second page. +// +void M_DrawReadThis2(void) +{ + inhelpscreens = doom_true; + switch (gamemode) + { + case retail: + case commercial: + // This hack keeps us from having to change menus. + V_DrawPatchDirect(0, 0, 0, (patch_t*)W_CacheLumpName((char*)"CREDIT", PU_CACHE)); + break; + case shareware: + case registered: + V_DrawPatchDirect(0, 0, 0, (patch_t*)W_CacheLumpName((char*)"HELP2", PU_CACHE)); + break; + default: + break; + } + return; +} + + +// +// Change Sfx & Music volumes +// +void M_DrawSound(void) +{ + V_DrawPatchDirect(60, 38, 0, (patch_t*)W_CacheLumpName((char*)"M_SVOL", PU_CACHE)); + + if (!(doom_flags & DOOM_FLAG_HIDE_SOUND_OPTIONS)) + { + int offset = (doom_flags & DOOM_FLAG_HIDE_MUSIC_OPTIONS) ? sfx_vol_no_music : sfx_vol; + M_DrawThermo(SoundDef.x, SoundDef.y + LINEHEIGHT * (offset + 1), + 16, snd_SfxVolume); + } + + if (!(doom_flags & DOOM_FLAG_HIDE_MUSIC_OPTIONS)) + { + int offset = (doom_flags & DOOM_FLAG_HIDE_SOUND_OPTIONS) ? music_vol_no_sfx : music_vol; + M_DrawThermo(SoundDef.x, SoundDef.y + LINEHEIGHT * (offset + 1), + 16, snd_MusicVolume); + } +} + + +void M_Sound(int choice) +{ + M_SetupNextMenu(&SoundDef); +} + + +void M_MouseOptions(int choice) +{ + M_SetupNextMenu(&MouseOptionsDef); +} + + +void M_SfxVol(int choice) +{ + switch (choice) + { + case 0: + if (snd_SfxVolume) + snd_SfxVolume--; + break; + case 1: + if (snd_SfxVolume < 15) + snd_SfxVolume++; + break; + } + + S_SetSfxVolume(snd_SfxVolume /* *8 */); +} + + +void M_MusicVol(int choice) +{ + switch (choice) + { + case 0: + if (snd_MusicVolume) + snd_MusicVolume--; + break; + case 1: + if (snd_MusicVolume < 15) + snd_MusicVolume++; + break; + } + + S_SetMusicVolume(snd_MusicVolume /* *8 */); +} + + +// +// M_DrawMainMenu +// +void M_DrawMainMenu(void) +{ + V_DrawPatchDirect(94, 2, 0, (patch_t*)W_CacheLumpName((char*)"M_DOOM", PU_CACHE)); +} + + +// +// M_NewGame +// +void M_DrawNewGame(void) +{ + V_DrawPatchDirect(96, 14, 0, (patch_t*)W_CacheLumpName((char*)"M_NEWG", PU_CACHE)); + V_DrawPatchDirect(54, 38, 0, (patch_t*)W_CacheLumpName((char*)"M_SKILL", PU_CACHE)); +} + + +void M_NewGame(int choice) +{ + if (netgame && !demoplayback) + { + M_StartMessage((char*)NEWGAME, 0, doom_false); + return; + } + + if (gamemode == commercial) + M_SetupNextMenu(&NewDef); + else + M_SetupNextMenu(&EpiDef); +} + + +// +// M_Episode +// +void M_DrawEpisode(void) +{ + V_DrawPatchDirect(54, 38, 0, (patch_t*)W_CacheLumpName((char*)"M_EPISOD", PU_CACHE)); +} + +void M_VerifyNightmare(int ch) +{ + if (ch != 'y') + return; + + G_DeferedInitNew((skill_t)nightmare, epi + 1, 1); + M_ClearMenus(); +} + +void M_ChooseSkill(int choice) +{ + if (choice == nightmare) + { + M_StartMessage((char*)NIGHTMARE, M_VerifyNightmare, doom_true); + return; + } + + G_DeferedInitNew((skill_t)choice, epi + 1, 1); + M_ClearMenus(); +} + +void M_Episode(int choice) +{ + if ((gamemode == shareware) + && choice) + { + M_StartMessage((char*)SWSTRING, 0, doom_false); + M_SetupNextMenu(&ReadDef1); + return; + } + + // Yet another hack... + if ((gamemode == registered) + && (choice > 2)) + { + doom_print( + "M_Episode: 4th episode requires UltimateDOOM\n"); + choice = 0; + } + + epi = choice; + M_SetupNextMenu(&NewDef); +} + + +// +// M_Options +// +void M_DrawOptions(void) +{ + V_DrawPatchDirect(108, 15, 0, (patch_t*)W_CacheLumpName((char*)"M_OPTTTL", PU_CACHE)); + + //V_DrawPatchDirect (OptionsDef.x + 175,OptionsDef.y+LINEHEIGHT*detail,0, + // W_CacheLumpName(detailNames[detailLevel],PU_CACHE)); // Details do nothing? + + V_DrawPatchDirect(OptionsDef.x + 120, OptionsDef.y + LINEHEIGHT * messages, 0, + (patch_t*)W_CacheLumpName(msgNames[showMessages], PU_CACHE)); + + extern int crosshair; + V_DrawPatchDirect(OptionsDef.x + 131, OptionsDef.y + LINEHEIGHT * crosshair_opt, 0, + (patch_t*)W_CacheLumpName(msgNames[crosshair], PU_CACHE)); + + extern int always_run; + V_DrawPatchDirect(OptionsDef.x + 147, OptionsDef.y + LINEHEIGHT * always_run_opt, 0, + (patch_t*)W_CacheLumpName(msgNames[always_run], PU_CACHE)); + + M_DrawThermo(OptionsDef.x, OptionsDef.y + LINEHEIGHT * (scrnsize + 1), + 9, screenSize); +} + + +void M_DrawMouseOptions(void) +{ + M_DrawCustomMenuText((char*)"TXT_MOPT", 74, 45); + + V_DrawPatchDirect(MouseOptionsDef.x + 149, MouseOptionsDef.y + LINEHEIGHT * mousemov, 0, + (patch_t*)W_CacheLumpName(msgNames[mousemove], PU_CACHE)); + + M_DrawThermo(MouseOptionsDef.x, MouseOptionsDef.y + LINEHEIGHT * (mousesens + 1), + 10, mouseSensitivity); +} + + +void M_Options(int choice) +{ + M_SetupNextMenu(&OptionsDef); +} + + +// +// Toggle messages on/off +// +void M_ChangeMessages(int choice) +{ + // warning: unused parameter `int choice' + choice = 0; + showMessages = 1 - showMessages; + + if (!showMessages) + players[consoleplayer].message = (char*)MSGOFF; + else + players[consoleplayer].message = (char*)MSGON; + + message_dontfuckwithme = doom_true; +} + + +// +// Toggle crosshair on/off +// +void M_ChangeCrosshair(int choice) +{ + extern int crosshair; + + // warning: unused parameter `int choice' + choice = 0; + crosshair = 1 - crosshair; + + if (!crosshair) + players[consoleplayer].message = (char*)CROSSOFF; + else + players[consoleplayer].message = (char*)CROSSON; + + message_dontfuckwithme = doom_true; +} + + +// +// Toggle always-run on/off +// +void M_ChangeAlwaysRun(int choice) +{ + extern int always_run; + + // warning: unused parameter `int choice' + choice = 0; + always_run = 1 - always_run; + + if (!always_run) + players[consoleplayer].message = (char*)ALWAYSRUNOFF; + else + players[consoleplayer].message = (char*)ALWAYSRUNON; + + message_dontfuckwithme = doom_true; +} + + +// +// M_EndGame +// +void M_EndGameResponse(int ch) +{ + if (ch != 'y') + return; + + currentMenu->lastOn = itemOn; + M_ClearMenus(); + D_StartTitle(); +} + + +void M_EndGame(int choice) +{ + choice = 0; + if (!usergame) + { + S_StartSound(0, sfx_oof); + return; + } + + if (netgame) + { + M_StartMessage((char*)NETEND, 0, doom_false); + return; + } + + M_StartMessage((char*)ENDGAME, M_EndGameResponse, doom_true); +} + + +// +// M_ReadThis +// +void M_ReadThis(int choice) +{ + choice = 0; + M_SetupNextMenu(&ReadDef1); +} + + +void M_ReadThis2(int choice) +{ + choice = 0; + M_SetupNextMenu(&ReadDef2); +} + + +void M_FinishReadThis(int choice) +{ + choice = 0; + M_SetupNextMenu(&MainDef); +} + + +// +// M_QuitDOOM +// +void M_QuitResponse(int ch) +{ + if (ch != 'y') + return; + if (!netgame) + { + if (gamemode == commercial) + S_StartSound(0, quitsounds2[(gametic >> 2) & 7]); + else + S_StartSound(0, quitsounds[(gametic >> 2) & 7]); + I_WaitVBL(105); + } + I_Quit(); +} + + +void M_QuitDOOM(int choice) +{ + // We pick index 0 which is language sensitive, + // or one at random, between 1 and maximum number. + if (language != english) + { + //doom_sprintf(endstring, "%s\n\n"DOSY, endmsg[0]); + doom_strcpy(endstring, endmsg[0]); + doom_concat(endstring, "\n\n" DOSY); + } + else + { + //doom_sprintf(endstring, "%s\n\n" DOSY, endmsg[gametic % (NUM_QUITMESSAGES - 2) + 1]); + doom_strcpy(endstring, endmsg[gametic % (NUM_QUITMESSAGES - 2) + 1]); + doom_concat(endstring, "\n\n" DOSY); + } + + M_StartMessage(endstring, M_QuitResponse, doom_true); +} + + +void M_ChangeSensitivity(int choice) +{ + switch (choice) + { + case 0: + if (mouseSensitivity) + mouseSensitivity--; + break; + case 1: + if (mouseSensitivity < 9) + mouseSensitivity++; + break; + } +} + + +void M_MouseMove(int choice) +{ + choice = 0; + mousemove = 1 - mousemove; + + return; +} + + +void M_ChangeDetail(int choice) +{ + choice = 0; + detailLevel = 1 - detailLevel; + + // FIXME - does not work. Remove anyway? + doom_print("M_ChangeDetail: low detail mode n.a.\n"); +} + + +void M_SizeDisplay(int choice) +{ + switch (choice) + { + case 0: + if (screenSize > 0) + { + screenblocks--; + screenSize--; + } + break; + case 1: + if (screenSize < 8) + { + screenblocks++; + screenSize++; + } + break; + } + + R_SetViewSize(screenblocks, detailLevel); +} + + +// +// Menu Functions +// +void M_DrawThermo(int x, int y, int thermWidth, int thermDot) +{ + int xx; + int i; + + xx = x; + V_DrawPatchDirect(xx, y, 0, (patch_t*)W_CacheLumpName((char*)"M_THERML", PU_CACHE)); + xx += 8; + for (i = 0; i < thermWidth; i++) + { + V_DrawPatchDirect(xx, y, 0, (patch_t*)W_CacheLumpName((char*)"M_THERMM", PU_CACHE)); + xx += 8; + } + V_DrawPatchDirect(xx, y, 0, (patch_t*)W_CacheLumpName((char*)"M_THERMR", PU_CACHE)); + + V_DrawPatchDirect((x + 8) + thermDot * 8, y, + 0, (patch_t*)W_CacheLumpName((char*)"M_THERMO", PU_CACHE)); +} + + +void M_DrawEmptyCell(menu_t* menu, int item) +{ + V_DrawPatchDirect(menu->x - 10, menu->y + item * LINEHEIGHT - 1, 0, + (patch_t*)W_CacheLumpName((char*)"M_CELL1", PU_CACHE)); +} + + +void M_DrawSelCell(menu_t* menu, int item) +{ + V_DrawPatchDirect(menu->x - 10, menu->y + item * LINEHEIGHT - 1, 0, + (patch_t*)W_CacheLumpName((char*)"M_CELL2", PU_CACHE)); +} + + +void M_StartMessage(char* string, void* routine, doom_boolean input) +{ + messageLastMenuActive = menuactive; + messageToPrint = 1; + messageString = string; + messageRoutine = (void(*)(int response))routine; + messageNeedsInput = input; + menuactive = doom_true; + return; +} + + +void M_StopMessage(void) +{ + menuactive = messageLastMenuActive; + messageToPrint = 0; +} + + +// +// Find string width from hu_font chars +// +int M_StringWidth(char* string) +{ + int i; + int w = 0; + int c; + + for (i = 0; i < doom_strlen(string); i++) + { + c = doom_toupper(string[i]) - HU_FONTSTART; + if (c < 0 || c >= HU_FONTSIZE) + w += 4; + else + w += SHORT(hu_font[c]->width); + } + + return w; +} + + +// +// Find string height from hu_font chars +// +int M_StringHeight(char* string) +{ + int i; + int h; + int height = SHORT(hu_font[0]->height); + + h = height; + for (i = 0; i < doom_strlen(string); i++) + if (string[i] == '\n') + h += height; + + return h; +} + + +// +// Write a string using the hu_font +// +void M_WriteText(int x, int y, char* string) +{ + int w; + char* ch; + int c; + int cx; + int cy; + + ch = string; + cx = x; + cy = y; + + while (1) + { + c = *ch++; + if (!c) + break; + if (c == '\n') + { + cx = x; + cy += 12; + continue; + } + + c = doom_toupper(c) - HU_FONTSTART; + if (c < 0 || c >= HU_FONTSIZE) + { + cx += 4; + continue; + } + + w = SHORT(hu_font[c]->width); + if (cx + w > SCREENWIDTH) + break; + V_DrawPatchDirect(cx, cy, 0, hu_font[c]); + cx += w; + } +} + + +// +// CONTROL PANEL +// + +// +// M_Responder +// +doom_boolean M_Responder(event_t* ev) +{ + int ch; + int i; + static int joywait = 0; + static int mousewait = 0; + static int mousey = 0; + static int lasty = 0; + static int mousex = 0; + static int lastx = 0; + + ch = -1; + + if (ev->type == ev_joystick && joywait < I_GetTime()) + { + if (ev->data3 == -1) + { + ch = KEY_UPARROW; + joywait = I_GetTime() + 5; + } + else if (ev->data3 == 1) + { + ch = KEY_DOWNARROW; + joywait = I_GetTime() + 5; + } + + if (ev->data2 == -1) + { + ch = KEY_LEFTARROW; + joywait = I_GetTime() + 2; + } + else if (ev->data2 == 1) + { + ch = KEY_RIGHTARROW; + joywait = I_GetTime() + 2; + } + + if (ev->data1 & 1) + { + ch = KEY_ENTER; + joywait = I_GetTime() + 5; + } + if (ev->data1 & 2) + { + ch = KEY_BACKSPACE; + joywait = I_GetTime() + 5; + } + } + else + { + if (ev->type == ev_mouse && mousewait < I_GetTime()) + { + mousey += ev->data3; + if (mousey < lasty - 30) + { + ch = KEY_DOWNARROW; + mousewait = I_GetTime() + 5; + mousey = lasty -= 30; + } + else if (mousey > lasty + 30) + { + ch = KEY_UPARROW; + mousewait = I_GetTime() + 5; + mousey = lasty += 30; + } + + mousex += ev->data2; + if (mousex < lastx - 30) + { + ch = KEY_LEFTARROW; + mousewait = I_GetTime() + 5; + mousex = lastx -= 30; + } + else if (mousex > lastx + 30) + { + ch = KEY_RIGHTARROW; + mousewait = I_GetTime() + 5; + mousex = lastx += 30; + } + + if (ev->data1 & 1) + { + ch = KEY_ENTER; + mousewait = I_GetTime() + 15; + } + + if (ev->data1 & 2) + { + ch = KEY_BACKSPACE; + mousewait = I_GetTime() + 15; + } + } + else + if (ev->type == ev_keydown) + { + ch = ev->data1; + } + } + + if (ch == -1) + return doom_false; + + + // Save Game string input + if (saveStringEnter) + { + switch (ch) + { + case KEY_BACKSPACE: + if (saveCharIndex > 0) + { + saveCharIndex--; + savegamestrings[saveSlot][saveCharIndex] = 0; + } + break; + + case KEY_ESCAPE: + saveStringEnter = 0; + doom_strcpy(&savegamestrings[saveSlot][0], saveOldString); + break; + + case KEY_ENTER: + saveStringEnter = 0; + if (savegamestrings[saveSlot][0]) + M_DoSave(saveSlot); + break; + + default: + ch = doom_toupper(ch); + if (ch != 32) + if (ch - HU_FONTSTART < 0 || ch - HU_FONTSTART >= HU_FONTSIZE) + break; + if (ch >= 32 && ch <= 127 && + saveCharIndex < SAVESTRINGSIZE - 1 && + M_StringWidth(savegamestrings[saveSlot]) < + (SAVESTRINGSIZE - 2) * 8) + { + savegamestrings[saveSlot][saveCharIndex++] = ch; + savegamestrings[saveSlot][saveCharIndex] = 0; + } + break; + } + return doom_true; + } + + // Take care of any messages that need input + if (messageToPrint) + { + if (messageNeedsInput == doom_true && + !(ch == ' ' || ch == 'n' || ch == 'y' || ch == KEY_ESCAPE)) + return doom_false; + + menuactive = messageLastMenuActive; + messageToPrint = 0; + if (messageRoutine) + messageRoutine(ch); + + menuactive = doom_false; + S_StartSound(0, sfx_swtchx); + return doom_true; + } + + if (devparm && ch == KEY_F1) + { + G_ScreenShot(); + return doom_true; + } + + + // F-Keys + if (!menuactive) + switch (ch) + { + case KEY_MINUS: // Screen size down + if (automapactive || chat_on) + return doom_false; + M_SizeDisplay(0); + S_StartSound(0, sfx_stnmov); + return doom_true; + + case KEY_EQUALS: // Screen size up + if (automapactive || chat_on) + return doom_false; + M_SizeDisplay(1); + S_StartSound(0, sfx_stnmov); + return doom_true; + + case KEY_F1: // Help key + M_StartControlPanel(); + + if (gamemode == retail) + currentMenu = &ReadDef2; + else + currentMenu = &ReadDef1; + + itemOn = 0; + S_StartSound(0, sfx_swtchn); + return doom_true; + + case KEY_F2: // Save + M_StartControlPanel(); + S_StartSound(0, sfx_swtchn); + M_SaveGame(0); + return doom_true; + + case KEY_F3: // Load + M_StartControlPanel(); + S_StartSound(0, sfx_swtchn); + M_LoadGame(0); + return doom_true; + + case KEY_F4: // Sound Volume + M_StartControlPanel(); + currentMenu = &SoundDef; + itemOn = sfx_vol; + S_StartSound(0, sfx_swtchn); + return doom_true; + + // case KEY_F5: // Detail toggle + // M_ChangeDetail(0); + // S_StartSound(0, sfx_swtchn); + // return doom_true; + + case KEY_F5: // Crosshair toggle + M_ChangeCrosshair(0); + S_StartSound(0, sfx_swtchn); + return doom_true; + + case KEY_F6: // Quicksave + S_StartSound(0, sfx_swtchn); + M_QuickSave(); + return doom_true; + + case KEY_F7: // End game + S_StartSound(0, sfx_swtchn); + M_EndGame(0); + return doom_true; + + case KEY_F8: // Toggle messages + M_ChangeMessages(0); + S_StartSound(0, sfx_swtchn); + return doom_true; + + case KEY_F9: // Quickload + S_StartSound(0, sfx_swtchn); + M_QuickLoad(); + return doom_true; + + case KEY_F10: // Quit DOOM + S_StartSound(0, sfx_swtchn); + M_QuitDOOM(0); + return doom_true; + + case KEY_F11: // gamma toggle + usegamma++; + if (usegamma > 4) + usegamma = 0; + players[consoleplayer].message = gammamsg[usegamma]; + I_SetPalette((byte*)W_CacheLumpName((char*)"PLAYPAL", PU_CACHE)); + return doom_true; + + } + + + // Pop-up menu? + if (!menuactive) + { + if (ch == KEY_ESCAPE) + { + M_StartControlPanel(); + S_StartSound(0, sfx_swtchn); + return doom_true; + } + return doom_false; + } + + + // Keys usable within menu + switch (ch) + { + case KEY_DOWNARROW: + do + { + if (itemOn + 1 > currentMenu->numitems - 1) + itemOn = 0; + else itemOn++; + S_StartSound(0, sfx_pstop); + } while (currentMenu->menuitems[itemOn].status == -1); + return doom_true; + + case KEY_UPARROW: + do + { + if (!itemOn) + itemOn = currentMenu->numitems - 1; + else itemOn--; + S_StartSound(0, sfx_pstop); + } while (currentMenu->menuitems[itemOn].status == -1); + return doom_true; + + case KEY_LEFTARROW: + if (currentMenu->menuitems[itemOn].routine && + currentMenu->menuitems[itemOn].status == 2) + { + S_StartSound(0, sfx_stnmov); + currentMenu->menuitems[itemOn].routine(0); + } + return doom_true; + + case KEY_RIGHTARROW: + if (currentMenu->menuitems[itemOn].routine && + currentMenu->menuitems[itemOn].status == 2) + { + S_StartSound(0, sfx_stnmov); + currentMenu->menuitems[itemOn].routine(1); + } + return doom_true; + + case KEY_ENTER: + if (currentMenu->menuitems[itemOn].routine && + currentMenu->menuitems[itemOn].status) + { + currentMenu->lastOn = itemOn; + if (currentMenu->menuitems[itemOn].status == 2) + { + currentMenu->menuitems[itemOn].routine(1); // right arrow + S_StartSound(0, sfx_stnmov); + } + else + { + currentMenu->menuitems[itemOn].routine(itemOn); + S_StartSound(0, sfx_pistol); + } + } + return doom_true; + + case KEY_ESCAPE: + currentMenu->lastOn = itemOn; + M_ClearMenus(); + S_StartSound(0, sfx_swtchx); + return doom_true; + + case KEY_BACKSPACE: + currentMenu->lastOn = itemOn; + if (currentMenu->prevMenu) + { + currentMenu = currentMenu->prevMenu; + itemOn = currentMenu->lastOn; + S_StartSound(0, sfx_swtchn); + } + return doom_true; + + default: + for (i = itemOn + 1; i < currentMenu->numitems; i++) + if (currentMenu->menuitems[i].alphaKey == ch) + { + itemOn = i; + S_StartSound(0, sfx_pstop); + return doom_true; + } + for (i = 0; i <= itemOn; i++) + if (currentMenu->menuitems[i].alphaKey == ch) + { + itemOn = i; + S_StartSound(0, sfx_pstop); + return doom_true; + } + break; + + } + + return doom_false; +} + + +// +// M_StartControlPanel +// +void M_StartControlPanel(void) +{ + // intro might call this repeatedly + if (menuactive) + return; + + menuactive = 1; + currentMenu = &MainDef; // JDC + itemOn = currentMenu->lastOn; // JDC +} + + +// +// M_Drawer +// Called after the view has been rendered, +// but before it has been blitted. +// +void M_Drawer(void) +{ + static short x; + static short y; + short i; + short max; + char string[40]; + int start; + + inhelpscreens = doom_false; + + + // Horiz. & Vertically center string and print it. + if (messageToPrint) + { + start = 0; + y = 100 - M_StringHeight(messageString) / 2; + while (*(messageString + start)) + { + for (i = 0; i < doom_strlen(messageString + start); i++) + if (*(messageString + start + i) == '\n') + { + doom_memset(string, 0, 40); + doom_strncpy(string, messageString + start, i); + start += i + 1; + break; + } + + if (i == doom_strlen(messageString + start)) + { + doom_strcpy(string, messageString + start); + start += i; + } + + x = 160 - M_StringWidth(string) / 2; + M_WriteText(x, y, string); + y += SHORT(hu_font[0]->height); + } + return; + } + + if (!menuactive) + return; + + // Darken background so the menu is more readable. + if (doom_flags & DOOM_FLAG_MENU_DARKEN_BG) + { + extern byte* screens[5]; + extern unsigned char screen_palette[256 * 3]; + extern lighttable_t* colormaps; + for (int j = 0, len = SCREENWIDTH * SCREENHEIGHT; j < len; ++j) + { + byte color = screens[0][j]; + color = colormaps[color + (20 * 256)]; + screens[0][j] = color; + } + } + + if (currentMenu->routine) + currentMenu->routine(); // call Draw routine + + // DRAW MENU + x = currentMenu->x; + y = currentMenu->y; + max = currentMenu->numitems; + + for (i = 0; i < max; i++) + { + menuitem_t* menuitem = currentMenu->menuitems + i; + if (menuitem->name[0]) + { + if (doom_strncmp(menuitem->name, "TXT_", 4) == 0) + { + M_DrawCustomMenuText(menuitem->name, x, y); + } + else + { + V_DrawPatchDirect(x, y, 0, (patch_t*)W_CacheLumpName(menuitem->name, PU_CACHE)); + } + } + y += LINEHEIGHT; + } + + + // DRAW SKULL + V_DrawPatchDirect(x + SKULLXOFF, currentMenu->y - 5 + itemOn * LINEHEIGHT, 0, + (patch_t*)W_CacheLumpName(skullName[whichSkull], PU_CACHE)); + +} + + +// +// M_ClearMenus +// +void M_ClearMenus(void) +{ + menuactive = 0; +} + + +// +// M_SetupNextMenu +// +void M_SetupNextMenu(menu_t* menudef) +{ + currentMenu = menudef; + itemOn = currentMenu->lastOn; +} + + +// +// M_Ticker +// +void M_Ticker(void) +{ + if (--skullAnimCounter <= 0) + { + whichSkull ^= 1; + skullAnimCounter = 8; + } +} + + +// +// M_Init +// +void M_Init(void) +{ + doom_boolean hide_mouse = (doom_flags & DOOM_FLAG_HIDE_MOUSE_OPTIONS) ? doom_true : doom_false; + doom_boolean hide_sound = ((doom_flags & DOOM_FLAG_HIDE_MUSIC_OPTIONS) && (doom_flags & DOOM_FLAG_HIDE_SOUND_OPTIONS)) ? doom_true : doom_false; + + OptionsMenu = OptionsMenuFull; + if (hide_mouse && !hide_sound) + { + OptionsMenu = OptionsMenuNoMouse; + doom_memcpy(&OptionsDef, &OptionsNoMouseDef, sizeof(OptionsDef)); + } + else if (!hide_mouse && hide_sound) + { + OptionsMenu = OptionsMenuNoSound; + doom_memcpy(&OptionsDef, &OptionsNoSoundDef, sizeof(OptionsDef)); + } + else if (hide_mouse && hide_sound) + { + OptionsMenu = OptionsMenuNoSoundNoMouse; + doom_memcpy(&OptionsDef, &OptionsNoSoundNoMouseDef, sizeof(OptionsDef)); + } + + SoundMenu = SoundMenuFull; + if (doom_flags & DOOM_FLAG_HIDE_MUSIC_OPTIONS) + { + SoundMenu = SoundMenuNoMusic; + doom_memcpy(&SoundDef, &SoundNoMusicDef, sizeof(SoundDef)); + } + else if (doom_flags & DOOM_FLAG_HIDE_SOUND_OPTIONS) + { + SoundMenu = SoundMenuNoSFX; + doom_memcpy(&SoundDef, &SoundNoSFXDef, sizeof(SoundDef)); + } + + currentMenu = &MainDef; + menuactive = 0; + itemOn = currentMenu->lastOn; + whichSkull = 0; + skullAnimCounter = 10; + screenSize = screenblocks - 3; + messageToPrint = 0; + messageString = 0; + messageLastMenuActive = menuactive; + quickSaveSlot = -1; + + // Here we could catch other version dependencies, + // like HELP1/2, and four episodes. + + switch (gamemode) + { + case commercial: + // This is used because DOOM 2 had only one HELP + // page. I use CREDIT as second page now, but + // kept this hack for educational purposes. + MainMenu[readthis] = MainMenu[quitdoom]; + MainDef.numitems--; + MainDef.y += 8; + NewDef.prevMenu = &MainDef; + ReadDef1.routine = M_DrawReadThis1; + ReadDef1.x = 330; + ReadDef1.y = 165; + ReadMenu1[0].routine = M_FinishReadThis; + break; + case shareware: + // Episode 2 and 3 are handled, + // branching to an ad screen. + case registered: + // We need to remove the fourth episode. + EpiDef.numitems--; + break; + case retail: + // We are fine. + default: + break; + } +} +#ifndef O_BINARY +#define O_BINARY 0 +#endif +#define STRING_VALUE 0xFFFF + + +// +// SCREEN SHOTS +// +typedef struct +{ + char manufacturer; + char version; + char encoding; + char bits_per_pixel; + + unsigned short xmin; + unsigned short ymin; + unsigned short xmax; + unsigned short ymax; + + unsigned short hres; + unsigned short vres; + + unsigned char palette[48]; + + char reserved; + char color_planes; + unsigned short bytes_per_line; + unsigned short palette_type; + + char filler[58]; + unsigned char data; // unbounded +} pcx_t; + + +// +// M_DrawText +// Returns the final X coordinate +// HU_Init must have been called to init the font +// +extern patch_t* hu_font[HU_FONTSIZE]; + + +// +// DEFAULTS +// +extern int key_right; +extern int key_left; +extern int key_up; +extern int key_down; + +extern int key_strafeleft; +extern int key_straferight; + +extern int key_fire; +extern int key_use; +extern int key_strafe; +extern int key_speed; + +extern int mousebfire; +extern int mousebstrafe; +extern int mousebforward; +extern int mousemove; + +extern int joybfire; +extern int joybstrafe; +extern int joybuse; +extern int joybspeed; + +extern int viewwidth; +extern int viewheight; + +extern int mouseSensitivity; +extern int showMessages; + +extern int detailLevel; + +extern int screenblocks; + +extern int showMessages; + +// machine-independent sound params +extern int numChannels; + +extern char* chat_macros[]; + +extern byte scantokey[128]; + + +int usemouse; +int usejoystick; +int crosshair; +int always_run; + + +default_t defaults[] = +{ + {(char*)"mouse_sensitivity",&mouseSensitivity, 5}, + {(char*)"sfx_volume",&snd_SfxVolume, 8}, + {(char*)"music_volume",&snd_MusicVolume, 8}, + {(char*)"show_messages",&showMessages, 1}, + + {(char*)"key_right",&key_right, KEY_RIGHTARROW}, + {(char*)"key_left",&key_left, KEY_LEFTARROW}, + {(char*)"key_up",&key_up, KEY_UPARROW}, + {(char*)"key_down",&key_down, KEY_DOWNARROW}, + {(char*)"key_strafeleft",&key_strafeleft, ','}, + {(char*)"key_straferight",&key_straferight, '.'}, + + {(char*)"key_fire",&key_fire, KEY_RCTRL}, + {(char*)"key_use",&key_use, ' '}, + {(char*)"key_strafe",&key_strafe, KEY_RALT}, + {(char*)"key_speed",&key_speed, KEY_RSHIFT}, + + {(char*)"use_mouse",&usemouse, 1}, + {(char*)"mouseb_fire",&mousebfire,0}, + {(char*)"mouseb_strafe",&mousebstrafe,1}, + {(char*)"mouseb_forward",&mousebforward,2}, + {(char*)"mouse_move",&mousemove,0}, + + {(char*)"use_joystick",&usejoystick, 0}, + {(char*)"joyb_fire",&joybfire,0}, + {(char*)"joyb_strafe",&joybstrafe,1}, + {(char*)"joyb_use",&joybuse,3}, + {(char*)"joyb_speed",&joybspeed,2}, + + {(char*)"screenblocks",&screenblocks, 9}, + {(char*)"detaillevel",&detailLevel, 0}, + {(char*)"crosshair",&crosshair, 0}, + {(char*)"always_run",&always_run, 0}, + + {(char*)"snd_channels",&numChannels, 3}, + + {(char*)"usegamma",&usegamma, 0}, + + {(char*)"chatmacro0", 0, STRING_VALUE, 0, 0, &chat_macros[0], (char*)HUSTR_CHATMACRO0 }, + {(char*)"chatmacro1", 0, STRING_VALUE, 0, 0, &chat_macros[1], (char*)HUSTR_CHATMACRO1 }, + {(char*)"chatmacro2", 0, STRING_VALUE, 0, 0, &chat_macros[2], (char*)HUSTR_CHATMACRO2 }, + {(char*)"chatmacro3", 0, STRING_VALUE, 0, 0, &chat_macros[3], (char*)HUSTR_CHATMACRO3 }, + {(char*)"chatmacro4", 0, STRING_VALUE, 0, 0, &chat_macros[4], (char*)HUSTR_CHATMACRO4 }, + {(char*)"chatmacro5", 0, STRING_VALUE, 0, 0, &chat_macros[5], (char*)HUSTR_CHATMACRO5 }, + {(char*)"chatmacro6", 0, STRING_VALUE, 0, 0, &chat_macros[6], (char*)HUSTR_CHATMACRO6 }, + {(char*)"chatmacro7", 0, STRING_VALUE, 0, 0, &chat_macros[7], (char*)HUSTR_CHATMACRO7 }, + {(char*)"chatmacro8", 0, STRING_VALUE, 0, 0, &chat_macros[8], (char*)HUSTR_CHATMACRO8 }, + {(char*)"chatmacro9", 0, STRING_VALUE, 0, 0, &chat_macros[9], (char*)HUSTR_CHATMACRO9 } +}; + + +int numdefaults = sizeof(defaults) / sizeof(default_t);; +char* defaultfile; + + +int M_DrawText(int x, int y, doom_boolean direct, char* string) +{ + int c; + int w; + + while (*string) + { + c = doom_toupper(*string) - HU_FONTSTART; + string++; + if (c < 0 || c> HU_FONTSIZE) + { + x += 4; + continue; + } + + w = SHORT(hu_font[c]->width); + if (x + w > SCREENWIDTH) + break; + if (direct) + V_DrawPatchDirect(x, y, 0, hu_font[c]); + else + V_DrawPatch(x, y, 0, hu_font[c]); + x += w; + } + + return x; +} + + +// +// M_WriteFile +// +doom_boolean M_WriteFile(char const* name, void* source, int length) +{ + void* handle; + int count; + + handle = doom_open(name, "wb"); + + if (handle == 0) + return doom_false; + + count = doom_write(handle, source, length); + doom_close(handle); + + if (count < length) + return doom_false; + + return doom_true; +} + + +// +// M_ReadFile +// +int M_ReadFile(char const* name, byte** buffer) +{ + void* handle; + int count, length; + byte* buf; + + handle = doom_open(name, "rb"); + if (handle == 0) + { + //I_Error("Error: Couldn't read file %s", name); + + doom_strcpy(error_buf, "Error: Couldn't read file "); + doom_concat(error_buf, name); + I_Error(error_buf); + } + doom_seek(handle, 0, DOOM_SEEK_END); + length = doom_tell(handle); + doom_seek(handle, 0, DOOM_SEEK_SET); + buf = (byte*)Z_Malloc(length, PU_STATIC, 0); + count = doom_read(handle, buf, length); + doom_close(handle); + + if (count < length) + { + //I_Error("Error: Couldn't read file %s", name); + + doom_strcpy(error_buf, "Error: Couldn't read file "); + doom_concat(error_buf, name); + I_Error(error_buf); + } + + *buffer = buf; + return length; +} + + +// +// M_SaveDefaults +// +void M_SaveDefaults(void) +{ + int i; + int v; + void* f; + + f = doom_open(defaultfile, "w"); + if (!f) + return; // can't write the file, but don't complain + + for (i = 0; i < numdefaults; i++) + { + if (defaults[i].defaultvalue > -0xfff + && defaults[i].defaultvalue < 0xfff) + { + v = *defaults[i].location; + //fprintf(f, "%s\t\t%i\n", defaults[i].name, v); + doom_fprint(f, defaults[i].name); + doom_fprint(f, "\t\t"); + doom_fprint(f, doom_itoa(v, 10)); + doom_fprint(f, "\n"); + } + else + { + //fprintf(f, "%s\t\t\"%s\"\n", defaults[i].name, + // *(char**)(defaults[i].text_location)); + doom_fprint(f, defaults[i].name); + doom_fprint(f, "\t\t\""); + doom_fprint(f, *(char**)(defaults[i].text_location)); + doom_fprint(f, "\"\n"); + } + } + + doom_close(f); +} + + +// +// M_LoadDefaults +// +void M_LoadDefaults(void) +{ + int i; + int len; + void* f; + char def[80]; + char strparm[100]; + char* newstring; + int parm; + doom_boolean isstring; + + // set everything to base values + // numdefaults = sizeof(defaults)/sizeof(defaults[0]); + for (i = 0; i < numdefaults; i++) + { + if (defaults[i].defaultvalue == 0xFFFF) + *defaults[i].text_location = defaults[i].default_text_value; + else + *defaults[i].location = (int)defaults[i].defaultvalue; + } + + // check for a custom default file + i = M_CheckParm((char*)"-config"); + if (i && i < myargc - 1) + { + defaultfile = myargv[i + 1]; + //doom_print(" default file: %s\n", defaultfile); + doom_print(" default file: "); + doom_print(defaultfile); + doom_print("\n"); + } + else + defaultfile = basedefault; + + // read the file in, overriding any set defaults + f = doom_open(defaultfile, "r"); + if (f) + { + while (!doom_eof(f)) + { + // def + int arg_read = 0; + char c; + for (i = 0; i < 79; ++i) + { + doom_read(f, &c, 1); + if (c == ' ' || c == '\n' || c == '\t') + { + if (i > 0) arg_read++; + break; + } + def[i] = c; + } + def[i] = '\0'; + + // Ignore spaces + if (c != '\n') + { + while (1) + { + doom_read(f, &c, 1); + if (c != ' ' && c != '\t') break; + } + + // strparam + i = 0; + if (c != '\n') + { + for (; i < 260;) + { + strparm[i++] = c; + doom_read(f, &c, 1); + if (c == '\n') + { + if (i > 0) arg_read++; + break; + } + } + } + strparm[i] = '\0'; + } + + isstring = doom_false; + //if (fscanf(f, "%79s %[^\n]\n", def, strparm) == 2) + if (arg_read == 2) + { + if (strparm[0] == '"') + { + // get a string default + isstring = doom_true; + len = (int)doom_strlen(strparm); + newstring = (char*)doom_malloc(len); + strparm[len - 1] = 0; + doom_strcpy(newstring, strparm + 1); + } + else if (strparm[0] == '0' && strparm[1] == 'x') + { + //sscanf(strparm + 2, "%x", &parm); + parm = doom_atox(strparm + 2); + } + else + { + //sscanf(strparm, "%i", &parm); + parm = doom_atoi(strparm); + } + for (i = 0; i < numdefaults; i++) + if (!doom_strcmp(def, defaults[i].name)) + { + if (!isstring) + *defaults[i].location = parm; + else + *defaults[i].text_location = newstring; + break; + } + } + } + + doom_close(f); + } +} + + +// +// WritePCXfile +// +void WritePCXfile(char* filename, byte* data, int width, int height, byte* palette) +{ + int i; + int length; + pcx_t* pcx; + byte* pack; + + pcx = (pcx_t*)Z_Malloc(width * height * 2 + 1000, PU_STATIC, 0); + + pcx->manufacturer = 0x0a; // PCX id + pcx->version = 5; // 256 color + pcx->encoding = 1; // uncompressed + pcx->bits_per_pixel = 8; // 256 color + pcx->xmin = 0; + pcx->ymin = 0; + pcx->xmax = SHORT(width - 1); + pcx->ymax = SHORT(height - 1); + pcx->hres = SHORT(width); + pcx->vres = SHORT(height); + doom_memset(pcx->palette, 0, sizeof(pcx->palette)); + pcx->color_planes = 1; // chunky image + pcx->bytes_per_line = SHORT(width); + pcx->palette_type = SHORT(2); // not a grey scale + doom_memset(pcx->filler, 0, sizeof(pcx->filler)); + + // pack the image + pack = &pcx->data; + + for (i = 0; i < width * height; i++) + { + if ((*data & 0xc0) != 0xc0) + *pack++ = *data++; + else + { + *pack++ = 0xc1; + *pack++ = *data++; + } + } + + // write the palette + *pack++ = 0x0c; // palette ID byte + for (i = 0; i < 768; i++) + *pack++ = *palette++; + + // write output file + length = (int)(pack - (byte*)pcx); + M_WriteFile(filename, pcx, length); + + Z_Free(pcx); +} + + +// +// M_ScreenShot +// +void M_ScreenShot(void) +{ + int i; + byte* linear; + char lbmname[12]; + void* f; + + // munge planar buffer to linear + linear = screens[2]; + I_ReadScreen(linear); + + // find a file name to save it to + doom_strcpy(lbmname, "DOOM00.pcx"); + + for (i = 0; i <= 99; i++) + { + lbmname[4] = i / 10 + '0'; + lbmname[5] = i % 10 + '0'; + if ((f = doom_open(lbmname, "wb")) == 0) + break; // file doesn't exist + doom_close(f); + } + if (i == 100) + I_Error((char*)"Error: M_ScreenShot: Couldn't create a PCX"); + + // save the pcx file + WritePCXfile(lbmname, linear, + SCREENWIDTH, SCREENHEIGHT, + (byte*)W_CacheLumpName((char*)"PLAYPAL", PU_CACHE)); + + players[consoleplayer].message = (char*)"screen shot"; +} +unsigned char rndtable[256] = { + 0, 8, 109, 220, 222, 241, 149, 107, 75, 248, 254, 140, 16, 66 , + 74, 21, 211, 47, 80, 242, 154, 27, 205, 128, 161, 89, 77, 36 , + 95, 110, 85, 48, 212, 140, 211, 249, 22, 79, 200, 50, 28, 188 , + 52, 140, 202, 120, 68, 145, 62, 70, 184, 190, 91, 197, 152, 224 , + 149, 104, 25, 178, 252, 182, 202, 182, 141, 197, 4, 81, 181, 242 , + 145, 42, 39, 227, 156, 198, 225, 193, 219, 93, 122, 175, 249, 0 , + 175, 143, 70, 239, 46, 246, 163, 53, 163, 109, 168, 135, 2, 235 , + 25, 92, 20, 145, 138, 77, 69, 166, 78, 176, 173, 212, 166, 113 , + 94, 161, 41, 50, 239, 49, 111, 164, 70, 60, 2, 37, 171, 75 , + 136, 156, 11, 56, 42, 146, 138, 229, 73, 146, 77, 61, 98, 196 , + 135, 106, 63, 197, 195, 86, 96, 203, 113, 101, 170, 247, 181, 113 , + 80, 250, 108, 7, 255, 237, 129, 226, 79, 107, 112, 166, 103, 241 , + 24, 223, 239, 120, 198, 58, 60, 82, 128, 3, 184, 66, 143, 224 , + 145, 224, 81, 206, 163, 45, 63, 90, 168, 114, 59, 33, 159, 95 , + 28, 139, 123, 98, 125, 196, 15, 70, 194, 253, 54, 14, 109, 226 , + 71, 17, 161, 93, 186, 87, 244, 138, 20, 52, 123, 251, 26, 36 , + 17, 46, 52, 231, 232, 76, 31, 221, 84, 37, 216, 165, 212, 106 , + 197, 242, 98, 43, 39, 175, 254, 145, 190, 84, 118, 222, 187, 136 , + 120, 163, 236, 249 +}; + + +int rndindex = 0; +int prndindex = 0; + + +// Which one is deterministic? +int P_Random(void) +{ + prndindex = (prndindex + 1) & 0xff; + return rndtable[prndindex]; +} + + +int M_Random(void) +{ + rndindex = (rndindex + 1) & 0xff; + return rndtable[rndindex]; +} + + +void M_ClearRandom(void) +{ + rndindex = prndindex = 0; +} +#ifdef __BIG_ENDIAN__ + + +// Swap 16bit, that is, MSB and LSB byte. +unsigned short SwapSHORT(unsigned short x) +{ + // No masking with 0xFF should be necessary. + return (x >> 8) | (x << 8); +} + + +// Swapping 32bit. +unsigned long SwapLONG(unsigned long x) +{ + return + (x >> 24) + | ((x >> 8) & 0xff00) + | ((x << 8) & 0xff0000) + | (x << 24); +} + + +#endif +ceiling_t* activeceilings[MAXCEILINGS]; + + +// +// T_MoveCeiling +// +void T_MoveCeiling(ceiling_t* ceiling) +{ + result_e res; + + switch (ceiling->direction) + { + case 0: + // IN STASIS + break; + case 1: + // UP + res = T_MovePlane(ceiling->sector, + ceiling->speed, + ceiling->topheight, + doom_false, 1, ceiling->direction); + + if (!(leveltime & 7)) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + break; + default: + S_StartSound((mobj_t*)&ceiling->sector->soundorg, + sfx_stnmov); + // ? + break; + } + } + + if (res == pastdest) + { + switch (ceiling->type) + { + case raiseToHighest: + P_RemoveActiveCeiling(ceiling); + break; + + case silentCrushAndRaise: + S_StartSound((mobj_t*)&ceiling->sector->soundorg, + sfx_pstop); + case fastCrushAndRaise: + case crushAndRaise: + ceiling->direction = -1; + break; + + default: + break; + } + + } + break; + + case -1: + // DOWN + res = T_MovePlane(ceiling->sector, + ceiling->speed, + ceiling->bottomheight, + ceiling->crush, 1, ceiling->direction); + + if (!(leveltime & 7)) + { + switch (ceiling->type) + { + case silentCrushAndRaise: break; + default: + S_StartSound((mobj_t*)&ceiling->sector->soundorg, + sfx_stnmov); + } + } + + if (res == pastdest) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + S_StartSound((mobj_t*)&ceiling->sector->soundorg, + sfx_pstop); + case crushAndRaise: + ceiling->speed = CEILSPEED; + case fastCrushAndRaise: + ceiling->direction = 1; + break; + + case lowerAndCrush: + case lowerToFloor: + P_RemoveActiveCeiling(ceiling); + break; + + default: + break; + } + } + else // ( res != pastdest ) + { + if (res == crushed) + { + switch (ceiling->type) + { + case silentCrushAndRaise: + case crushAndRaise: + case lowerAndCrush: + ceiling->speed = CEILSPEED / 8; + break; + + default: + break; + } + } + } + break; + } +} + + +// +// EV_DoCeiling +// Move a ceiling up/down and all around! +// +int EV_DoCeiling(line_t* line, ceiling_e type) +{ + int secnum; + int rtn; + sector_t* sec; + ceiling_t* ceiling; + + secnum = -1; + rtn = 0; + + // Reactivate in-stasis ceilings...for certain types. + switch (type) + { + case fastCrushAndRaise: + case silentCrushAndRaise: + case crushAndRaise: + P_ActivateInStasisCeiling(line); + default: + break; + } + + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + sec = §ors[secnum]; + if (sec->specialdata) + continue; + + // new door thinker + rtn = 1; + ceiling = (ceiling_t*)Z_Malloc(sizeof(*ceiling), PU_LEVSPEC, 0); + P_AddThinker(&ceiling->thinker); + sec->specialdata = ceiling; + ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling; + ceiling->sector = sec; + ceiling->crush = doom_false; + + switch (type) + { + case fastCrushAndRaise: + ceiling->crush = doom_true; + ceiling->topheight = sec->ceilingheight; + ceiling->bottomheight = sec->floorheight + (8 * FRACUNIT); + ceiling->direction = -1; + ceiling->speed = CEILSPEED * 2; + break; + + case silentCrushAndRaise: + case crushAndRaise: + ceiling->crush = doom_true; + ceiling->topheight = sec->ceilingheight; + case lowerAndCrush: + case lowerToFloor: + ceiling->bottomheight = sec->floorheight; + if (type != lowerToFloor) + ceiling->bottomheight += 8 * FRACUNIT; + ceiling->direction = -1; + ceiling->speed = CEILSPEED; + break; + + case raiseToHighest: + ceiling->topheight = P_FindHighestCeilingSurrounding(sec); + ceiling->direction = 1; + ceiling->speed = CEILSPEED; + break; + } + + ceiling->tag = sec->tag; + ceiling->type = type; + P_AddActiveCeiling(ceiling); + } + + return rtn; +} + + +// +// Add an active ceiling +// +void P_AddActiveCeiling(ceiling_t* c) +{ + int i; + + for (i = 0; i < MAXCEILINGS; i++) + { + if (activeceilings[i] == 0) + { + activeceilings[i] = c; + return; + } + } +} + + +// +// Remove a ceiling's thinker +// +void P_RemoveActiveCeiling(ceiling_t* c) +{ + int i; + + for (i = 0; i < MAXCEILINGS; i++) + { + if (activeceilings[i] == c) + { + activeceilings[i]->sector->specialdata = 0; + P_RemoveThinker(&activeceilings[i]->thinker); + activeceilings[i] = 0; + break; + } + } +} + + +// +// Restart a ceiling that's in-stasis +// +void P_ActivateInStasisCeiling(line_t* line) +{ + int i; + + for (i = 0; i < MAXCEILINGS; i++) + { + if (activeceilings[i] + && (activeceilings[i]->tag == line->tag) + && (activeceilings[i]->direction == 0)) + { + activeceilings[i]->direction = activeceilings[i]->olddirection; + activeceilings[i]->thinker.function.acp1 + = (actionf_p1)T_MoveCeiling; + } + } +} + + +// +// EV_CeilingCrushStop +// Stop a ceiling from crushing! +// +int EV_CeilingCrushStop(line_t* line) +{ + int i; + int rtn; + + rtn = 0; + for (i = 0; i < MAXCEILINGS; i++) + { + if (activeceilings[i] + && (activeceilings[i]->tag == line->tag) + && (activeceilings[i]->direction != 0)) + { + activeceilings[i]->olddirection = activeceilings[i]->direction; + activeceilings[i]->thinker.function.acv = (actionf_v)0; + activeceilings[i]->direction = 0; // in-stasis + rtn = 1; + } + } + + return rtn; +} +void T_VerticalDoor(vldoor_t* door) +{ + result_e res; + + switch (door->direction) + { + case 0: + // WAITING + if (!--door->topcountdown) + { + switch (door->type) + { + case blazeRaise: + door->direction = -1; // time to go back down + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_bdcls); + break; + + case door_normal: + door->direction = -1; // time to go back down + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_dorcls); + break; + + case close30ThenOpen: + door->direction = 1; + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_doropn); + break; + + default: + break; + } + } + break; + + case 2: + // INITIAL WAIT + if (!--door->topcountdown) + { + switch (door->type) + { + case raiseIn5Mins: + door->direction = 1; + door->type = door_normal; + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_doropn); + break; + + default: + break; + } + } + break; + + case -1: + // DOWN + res = T_MovePlane(door->sector, + door->speed, + door->sector->floorheight, + doom_false, 1, door->direction); + if (res == pastdest) + { + switch (door->type) + { + case blazeRaise: + case blazeClose: + door->sector->specialdata = 0; + P_RemoveThinker(&door->thinker); // unlink and free + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_bdcls); + break; + + case door_normal: + case door_close: + door->sector->specialdata = 0; + P_RemoveThinker(&door->thinker); // unlink and free + break; + + case close30ThenOpen: + door->direction = 0; + door->topcountdown = 35 * 30; + break; + + default: + break; + } + } + else if (res == crushed) + { + switch (door->type) + { + case blazeClose: + case door_close: // DO NOT GO BACK UP! + break; + + default: + door->direction = 1; + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_doropn); + break; + } + } + break; + + case 1: + // UP + res = T_MovePlane(door->sector, + door->speed, + door->topheight, + doom_false, 1, door->direction); + + if (res == pastdest) + { + switch (door->type) + { + case blazeRaise: + case door_normal: + door->direction = 0; // wait at top + door->topcountdown = door->topwait; + break; + + case close30ThenOpen: + case blazeOpen: + case door_open: + door->sector->specialdata = 0; + P_RemoveThinker(&door->thinker); // unlink and free + break; + + default: + break; + } + } + break; + } +} + + +// +// EV_DoLockedDoor +// Move a locked door up/down +// +int EV_DoLockedDoor(line_t* line, vldoor_e type, mobj_t* thing) +{ + player_t* p; + + p = thing->player; + + if (!p) + return 0; + + switch (line->special) + { + case 99: // Blue Lock + case 133: + if (!p) + return 0; + if (!p->cards[it_bluecard] && !p->cards[it_blueskull]) + { + p->message = (char*)PD_BLUEO; + S_StartSound(0, sfx_oof); + return 0; + } + break; + + case 134: // Red Lock + case 135: + if (!p) + return 0; + if (!p->cards[it_redcard] && !p->cards[it_redskull]) + { + p->message = (char*)PD_REDO; + S_StartSound(0, sfx_oof); + return 0; + } + break; + + case 136: // Yellow Lock + case 137: + if (!p) + return 0; + if (!p->cards[it_yellowcard] && + !p->cards[it_yellowskull]) + { + p->message = (char*)PD_YELLOWO; + S_StartSound(0, sfx_oof); + return 0; + } + break; + } + + return EV_DoDoor(line, type); +} + + +int EV_DoDoor(line_t* line, vldoor_e type) +{ + int secnum, rtn; + sector_t* sec; + vldoor_t* door; + + secnum = -1; + rtn = 0; + + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + sec = §ors[secnum]; + if (sec->specialdata) + continue; + + + // new door thinker + rtn = 1; + door = (vldoor_t*)Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + P_AddThinker(&door->thinker); + sec->specialdata = door; + + door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + door->sector = sec; + door->type = type; + door->topwait = VDOORWAIT; + door->speed = VDOORSPEED; + + switch (type) + { + case blazeClose: + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->direction = -1; + door->speed = VDOORSPEED * 4; + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_bdcls); + break; + + case door_close: + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->direction = -1; + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_dorcls); + break; + + case close30ThenOpen: + door->topheight = sec->ceilingheight; + door->direction = -1; + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_dorcls); + break; + + case blazeRaise: + case blazeOpen: + door->direction = 1; + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->speed = VDOORSPEED * 4; + if (door->topheight != sec->ceilingheight) + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_bdopn); + break; + + case door_normal: + case door_open: + door->direction = 1; + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + if (door->topheight != sec->ceilingheight) + S_StartSound((mobj_t*)&door->sector->soundorg, + sfx_doropn); + break; + + default: + break; + } + } + + return rtn; +} + + +// +// EV_VerticalDoor : open a door manually, no tag value +// +void EV_VerticalDoor(line_t* line, mobj_t* thing) +{ + player_t* player; + int secnum; + sector_t* sec; + vldoor_t* door; + int side; + + side = 0; // only front sides can be used + + // Check for locks + player = thing->player; + + switch (line->special) + { + case 26: // Blue Lock + case 32: + if (!player) + return; + + if (!player->cards[it_bluecard] && !player->cards[it_blueskull]) + { + player->message = (char*)PD_BLUEK; + S_StartSound(0, sfx_oof); + return; + } + break; + + case 27: // Yellow Lock + case 34: + if (!player) + return; + + if (!player->cards[it_yellowcard] && + !player->cards[it_yellowskull]) + { + player->message = (char*)PD_YELLOWK; + S_StartSound(0, sfx_oof); + return; + } + break; + + case 28: // Red Lock + case 33: + if (!player) + return; + + if (!player->cards[it_redcard] && !player->cards[it_redskull]) + { + player->message = (char*)PD_REDK; + S_StartSound(0, sfx_oof); + return; + } + break; + } + + // if the sector has an active thinker, use it + sec = sides[line->sidenum[side ^ 1]].sector; + secnum = (int)(sec - sectors); + + if (sec->specialdata) + { + door = (vldoor_t*)sec->specialdata; + switch (line->special) + { + case 1: // ONLY FOR "RAISE" DOORS, NOT "OPEN"s + case 26: + case 27: + case 28: + case 117: + if (door->direction == -1) + door->direction = 1; // go back up + else + { + if (!thing->player) + return; // JDC: bad guys never close doors + + door->direction = -1; // start going down immediately + } + return; + } + } + + // for proper sound + switch (line->special) + { + case 117: // BLAZING DOOR RAISE + case 118: // BLAZING DOOR OPEN + S_StartSound((mobj_t*)&sec->soundorg, sfx_bdopn); + break; + + case 1: // NORMAL DOOR SOUND + case 31: + S_StartSound((mobj_t*)&sec->soundorg, sfx_doropn); + break; + + default: // LOCKED DOOR SOUND + S_StartSound((mobj_t*)&sec->soundorg, sfx_doropn); + break; + } + + + // new door thinker + door = (vldoor_t*)Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + P_AddThinker(&door->thinker); + sec->specialdata = door; + door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + door->sector = sec; + door->direction = 1; + door->speed = VDOORSPEED; + door->topwait = VDOORWAIT; + + switch (line->special) + { + case 1: + case 26: + case 27: + case 28: + door->type = door_normal; + break; + + case 31: + case 32: + case 33: + case 34: + door->type = door_open; + line->special = 0; + break; + + case 117: // blazing door raise + door->type = blazeRaise; + door->speed = VDOORSPEED * 4; + break; + case 118: // blazing door open + door->type = blazeOpen; + line->special = 0; + door->speed = VDOORSPEED * 4; + break; + } + + // find the top and bottom of the movement range + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; +} + + +// +// Spawn a door that closes after 30 seconds +// +void P_SpawnDoorCloseIn30(sector_t* sec) +{ + vldoor_t* door; + + door = (vldoor_t*)Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + + P_AddThinker(&door->thinker); + + sec->specialdata = door; + sec->special = 0; + + door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + door->sector = sec; + door->direction = 0; + door->type = door_normal; + door->speed = VDOORSPEED; + door->topcountdown = 30 * 35; +} + + +// +// Spawn a door that opens after 5 minutes +// +void P_SpawnDoorRaiseIn5Mins(sector_t* sec, int secnum) +{ + vldoor_t* door; + + door = (vldoor_t*)Z_Malloc(sizeof(*door), PU_LEVSPEC, 0); + + P_AddThinker(&door->thinker); + + sec->specialdata = door; + sec->special = 0; + + door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + door->sector = sec; + door->direction = 2; + door->type = raiseIn5Mins; + door->speed = VDOORSPEED; + door->topheight = P_FindLowestCeilingSurrounding(sec); + door->topheight -= 4 * FRACUNIT; + door->topwait = VDOORWAIT; + door->topcountdown = 5 * 60 * 35; +} +#define MAXSPECIALCROSS 8 +#define FATSPREAD (ANG90/8) +#define SKULLSPEED (20*FRACUNIT) + + +typedef enum +{ + DI_EAST, + DI_NORTHEAST, + DI_NORTH, + DI_NORTHWEST, + DI_WEST, + DI_SOUTHWEST, + DI_SOUTH, + DI_SOUTHEAST, + DI_NODIR, + NUMDIRS +} dirtype_t; + + +// +// P_NewChaseDir related LUT. +// +dirtype_t opposite[] = +{ + DI_WEST, DI_SOUTHWEST, DI_SOUTH, DI_SOUTHEAST, + DI_EAST, DI_NORTHEAST, DI_NORTH, DI_NORTHWEST, DI_NODIR +}; + +dirtype_t diags[] = +{ + DI_NORTHWEST, DI_NORTHEAST, DI_SOUTHWEST, DI_SOUTHEAST +}; + +mobj_t* soundtarget; +fixed_t xspeed[8] = { FRACUNIT,47000,0,-47000,-FRACUNIT,-47000,0,47000 }; +fixed_t yspeed[8] = { 0,47000,FRACUNIT,47000,0,-47000,-FRACUNIT,-47000 }; +int TRACEANGLE = 0xc000000; +mobj_t* corpsehit; +mobj_t* vileobj; +fixed_t viletryx; +fixed_t viletryy; +mobj_t* braintargets[32]; +int numbraintargets; +int braintargeton; + + +extern line_t* spechit[MAXSPECIALCROSS]; +extern int numspechit; + + +void A_Fall(mobj_t* actor); +void A_Fire(mobj_t* actor); +void A_ReFire(player_t* player, pspdef_t* psp); +void A_SpawnFly(mobj_t* mo); + + +// +// ENEMY THINKING +// Enemies are allways spawned +// with targetplayer = -1, threshold = 0 +// Most monsters are spawned unaware of all players, +// but some can be made preaware +// + + +// +// Called by P_NoiseAlert. +// Recursively traverse adjacent sectors, +// sound blocking lines cut off traversal. +// +void P_RecursiveSound(sector_t* sec, int soundblocks) +{ + int i; + line_t* check; + sector_t* other; + + // wake up all monsters in this sector + if (sec->validcount == validcount + && sec->soundtraversed <= soundblocks + 1) + { + return; // already flooded + } + + sec->validcount = validcount; + sec->soundtraversed = soundblocks + 1; + sec->soundtarget = soundtarget; + + for (i = 0; i < sec->linecount; i++) + { + check = sec->lines[i]; + if (!(check->flags & ML_TWOSIDED)) + continue; + + P_LineOpening(check); + + if (openrange <= 0) + continue; // closed door + + if (sides[check->sidenum[0]].sector == sec) + other = sides[check->sidenum[1]].sector; + else + other = sides[check->sidenum[0]].sector; + + if (check->flags & ML_SOUNDBLOCK) + { + if (!soundblocks) + P_RecursiveSound(other, 1); + } + else + P_RecursiveSound(other, soundblocks); + } +} + + +// +// P_NoiseAlert +// If a monster yells at a player, +// it will alert other monsters to the player. +// +void P_NoiseAlert(mobj_t* target, mobj_t* emmiter) +{ + soundtarget = target; + validcount++; + P_RecursiveSound(emmiter->subsector->sector, 0); +} + + +// +// P_CheckMeleeRange +// +doom_boolean P_CheckMeleeRange(mobj_t* actor) +{ + mobj_t* pl; + fixed_t dist; + + if (!actor->target) + return doom_false; + + pl = actor->target; + dist = P_AproxDistance(pl->x - actor->x, pl->y - actor->y); + + if (dist >= MELEERANGE - 20 * FRACUNIT + pl->info->radius) + return doom_false; + + if (!P_CheckSight(actor, actor->target)) + return doom_false; + + return doom_true; +} + + +// +// P_CheckMissileRange +// +doom_boolean P_CheckMissileRange(mobj_t* actor) +{ + fixed_t dist; + + if (!P_CheckSight(actor, actor->target)) + return doom_false; + + if (actor->flags & MF_JUSTHIT) + { + // the target just hit the enemy, + // so fight back! + actor->flags &= ~MF_JUSTHIT; + return doom_true; + } + + if (actor->reactiontime) + return doom_false; // do not attack yet + + // OPTIMIZE: get this from a global checksight + dist = P_AproxDistance(actor->x - actor->target->x, + actor->y - actor->target->y) - 64 * FRACUNIT; + + if (!actor->info->meleestate) + dist -= 128 * FRACUNIT; // no melee attack, so fire more + + dist >>= 16; + + if (actor->type == MT_VILE) + { + if (dist > 14 * 64) + return doom_false; // too far away + } + + + if (actor->type == MT_UNDEAD) + { + if (dist < 196) + return doom_false; // close for fist attack + dist >>= 1; + } + + if (actor->type == MT_CYBORG + || actor->type == MT_SPIDER + || actor->type == MT_SKULL) + { + dist >>= 1; + } + + if (dist > 200) + dist = 200; + + if (actor->type == MT_CYBORG && dist > 160) + dist = 160; + + if (P_Random() < dist) + return doom_false; + + return doom_true; +} + + +// +// P_Move +// Move in the current direction, +// returns doom_false if the move is blocked. +// +doom_boolean P_Move(mobj_t* actor) +{ + fixed_t tryx; + fixed_t tryy; + + line_t* ld; + + // warning: 'catch', 'throw', and 'try' + // are all C++ reserved words + doom_boolean try_ok; + doom_boolean good; + + if (actor->movedir == DI_NODIR) + return doom_false; + + if ((unsigned)actor->movedir >= 8) + I_Error((char*)"Error: Weird actor->movedir!"); + + tryx = actor->x + actor->info->speed * xspeed[actor->movedir]; + tryy = actor->y + actor->info->speed * yspeed[actor->movedir]; + + try_ok = P_TryMove(actor, tryx, tryy); + + if (!try_ok) + { + // open any specials + if (actor->flags & MF_FLOAT && floatok) + { + // must adjust height + if (actor->z < tmfloorz) + actor->z += FLOATSPEED; + else + actor->z -= FLOATSPEED; + + actor->flags |= MF_INFLOAT; + return doom_true; + } + + if (!numspechit) + return doom_false; + + actor->movedir = DI_NODIR; + good = doom_false; + while (numspechit--) + { + ld = spechit[numspechit]; + // if the special is not a door + // that can be opened, + // return doom_false + if (P_UseSpecialLine(actor, ld, 0)) + good = doom_true; + } + return good; + } + else + { + actor->flags &= ~MF_INFLOAT; + } + + if (!(actor->flags & MF_FLOAT)) + actor->z = actor->floorz; + + return doom_true; +} + + +// +// TryWalk +// Attempts to move actor on +// in its current (ob->moveangle) direction. +// If blocked by either a wall or an actor +// returns doom_false +// If move is either clear or blocked only by a door, +// returns doom_true and sets... +// If a door is in the way, +// an OpenDoor call is made to start it opening. +// +doom_boolean P_TryWalk(mobj_t* actor) +{ + if (!P_Move(actor)) + { + return doom_false; + } + + actor->movecount = P_Random() & 15; + return doom_true; +} + + +void P_NewChaseDir(mobj_t* actor) +{ + fixed_t deltax; + fixed_t deltay; + + dirtype_t d[3]; + + int tdir; + dirtype_t olddir; + + dirtype_t turnaround; + + if (!actor->target) + I_Error((char*)"Error: P_NewChaseDir: called with no target"); + + olddir = (dirtype_t)actor->movedir; + turnaround = opposite[olddir]; + + deltax = actor->target->x - actor->x; + deltay = actor->target->y - actor->y; + + if (deltax > 10 * FRACUNIT) + d[1] = DI_EAST; + else if (deltax < -10 * FRACUNIT) + d[1] = DI_WEST; + else + d[1] = DI_NODIR; + + if (deltay < -10 * FRACUNIT) + d[2] = DI_SOUTH; + else if (deltay > 10 * FRACUNIT) + d[2] = DI_NORTH; + else + d[2] = DI_NODIR; + + // try direct route + if (d[1] != DI_NODIR + && d[2] != DI_NODIR) + { + actor->movedir = diags[((deltay < 0) << 1) + (deltax > 0)]; + if (actor->movedir != turnaround && P_TryWalk(actor)) + return; + } + + // try other directions + if (P_Random() > 200 + || doom_abs(deltay) > doom_abs(deltax)) + { + tdir = d[1]; + d[1] = d[2]; + d[2] = (dirtype_t)tdir; + } + + if (d[1] == turnaround) + d[1] = DI_NODIR; + if (d[2] == turnaround) + d[2] = DI_NODIR; + + if (d[1] != DI_NODIR) + { + actor->movedir = d[1]; + if (P_TryWalk(actor)) + { + // either moved forward or attacked + return; + } + } + + if (d[2] != DI_NODIR) + { + actor->movedir = d[2]; + + if (P_TryWalk(actor)) + return; + } + + // there is no direct path to the player, + // so pick another direction. + if (olddir != DI_NODIR) + { + actor->movedir = olddir; + + if (P_TryWalk(actor)) + return; + } + + // randomly determine direction of search + if (P_Random() & 1) + { + for (tdir = DI_EAST; + tdir <= DI_SOUTHEAST; + tdir++) + { + if (tdir != turnaround) + { + actor->movedir = tdir; + + if (P_TryWalk(actor)) + return; + } + } + } + else + { + for (tdir = DI_SOUTHEAST; + tdir != (DI_EAST - 1); + tdir--) + { + if (tdir != turnaround) + { + actor->movedir = tdir; + + if (P_TryWalk(actor)) + return; + } + } + } + + if (turnaround != DI_NODIR) + { + actor->movedir = turnaround; + if (P_TryWalk(actor)) + return; + } + + actor->movedir = DI_NODIR; // can not move +} + + +// +// P_LookForPlayers +// If allaround is doom_false, only look 180 degrees in front. +// Returns doom_true if a player is targeted. +// +doom_boolean P_LookForPlayers(mobj_t* actor, doom_boolean allaround) +{ + int c; + int stop; + player_t* player; + sector_t* sector; + angle_t an; + fixed_t dist; + + sector = actor->subsector->sector; + + c = 0; + stop = (actor->lastlook - 1) & 3; + + for (; ; actor->lastlook = (actor->lastlook + 1) & 3) + { + if (!playeringame[actor->lastlook]) + continue; + + if (c++ == 2 + || actor->lastlook == stop) + { + // done looking + return doom_false; + } + + player = &players[actor->lastlook]; + + if (player->health <= 0) + continue; // dead + + if (!P_CheckSight(actor, player->mo)) + continue; // out of sight + + if (!allaround) + { + an = R_PointToAngle2(actor->x, + actor->y, + player->mo->x, + player->mo->y) + - actor->angle; + + if (an > ANG90 && an < ANG270) + { + dist = P_AproxDistance(player->mo->x - actor->x, + player->mo->y - actor->y); + // if real close, react anyway + if (dist > MELEERANGE) + continue; // behind back + } + } + + actor->target = player->mo; + return doom_true; + } + + return doom_false; +} + + +// +// A_KeenDie +// DOOM II special, map 32. +// Uses special tag 666. +// +void A_KeenDie(mobj_t* mo) +{ + thinker_t* th; + mobj_t* mo2; + line_t junk; + + A_Fall(mo); + + // scan the remaining thinkers + // to see if all Keens are dead + for (th = thinkercap.next; th != &thinkercap; th = th->next) + { + if (th->function.acp1 != (actionf_p1)P_MobjThinker) + continue; + + mo2 = (mobj_t*)th; + if (mo2 != mo + && mo2->type == mo->type + && mo2->health > 0) + { + // other Keen not dead + return; + } + } + + junk.tag = 666; + EV_DoDoor(&junk, door_open); +} + + +// +// ACTION ROUTINES +// + +// +// A_Look +// Stay in state until a player is sighted. +// +void A_Look(mobj_t* actor) +{ + mobj_t* targ; + + actor->threshold = 0; // any shot will wake up + targ = actor->subsector->sector->soundtarget; + + if (targ + && (targ->flags & MF_SHOOTABLE)) + { + actor->target = targ; + + if (actor->flags & MF_AMBUSH) + { + if (P_CheckSight(actor, actor->target)) + goto seeyou; + } + else + goto seeyou; + } + + + if (!P_LookForPlayers(actor, doom_false)) + return; + + // go into chase state +seeyou: + if (actor->info->seesound) + { + int sound; + + switch (actor->info->seesound) + { + case sfx_posit1: + case sfx_posit2: + case sfx_posit3: + sound = sfx_posit1 + P_Random() % 3; + break; + + case sfx_bgsit1: + case sfx_bgsit2: + sound = sfx_bgsit1 + P_Random() % 2; + break; + + default: + sound = actor->info->seesound; + break; + } + + if (actor->type == MT_SPIDER + || actor->type == MT_CYBORG) + { + // full volume + S_StartSound(0, sound); + } + else + S_StartSound(actor, sound); + } + + P_SetMobjState(actor, (statenum_t)actor->info->seestate); +} + + +// +// A_Chase +// Actor has a melee attack, +// so it tries to close as fast as possible +// +void A_Chase(mobj_t* actor) +{ + int delta; + + if (actor->reactiontime) + actor->reactiontime--; + + // modify target threshold + if (actor->threshold) + { + if (!actor->target + || actor->target->health <= 0) + { + actor->threshold = 0; + } + else + actor->threshold--; + } + + // turn towards movement direction if not there yet + if (actor->movedir < 8) + { + actor->angle &= (7 << 29); + delta = actor->angle - (actor->movedir << 29); + + if (delta > 0) + actor->angle -= ANG90 / 2; + else if (delta < 0) + actor->angle += ANG90 / 2; + } + + if (!actor->target + || !(actor->target->flags & MF_SHOOTABLE)) + { + // look for a new target + if (P_LookForPlayers(actor, doom_true)) + return; // got a new target + + P_SetMobjState(actor, (statenum_t)actor->info->spawnstate); + return; + } + + // do not attack twice in a row + if (actor->flags & MF_JUSTATTACKED) + { + actor->flags &= ~MF_JUSTATTACKED; + if (gameskill != sk_nightmare && !fastparm) + P_NewChaseDir(actor); + return; + } + + // check for melee attack + if (actor->info->meleestate + && P_CheckMeleeRange(actor)) + { + if (actor->info->attacksound) + S_StartSound(actor, actor->info->attacksound); + + P_SetMobjState(actor, (statenum_t)actor->info->meleestate); + return; + } + + // check for missile attack + if (actor->info->missilestate) + { + if (gameskill < sk_nightmare + && !fastparm && actor->movecount) + { + goto nomissile; + } + + if (!P_CheckMissileRange(actor)) + goto nomissile; + + P_SetMobjState(actor, (statenum_t)actor->info->missilestate); + actor->flags |= MF_JUSTATTACKED; + return; + } + + // ? +nomissile: + // possibly choose another target + if (netgame + && !actor->threshold + && !P_CheckSight(actor, actor->target)) + { + if (P_LookForPlayers(actor, doom_true)) + return; // got a new target + } + + // chase towards player + if (--actor->movecount < 0 + || !P_Move(actor)) + { + P_NewChaseDir(actor); + } + + // make active sound + if (actor->info->activesound + && P_Random() < 3) + { + S_StartSound(actor, actor->info->activesound); + } +} + + +// +// A_FaceTarget +// +void A_FaceTarget(mobj_t* actor) +{ + if (!actor->target) + return; + + actor->flags &= ~MF_AMBUSH; + + actor->angle = R_PointToAngle2(actor->x, + actor->y, + actor->target->x, + actor->target->y); + + if (actor->target->flags & MF_SHADOW) + actor->angle += (P_Random() - P_Random()) << 21; +} + + +// +// A_PosAttack +// +void A_PosAttack(mobj_t* actor) +{ + int angle; + int damage; + int slope; + + if (!actor->target) + return; + + A_FaceTarget(actor); + angle = actor->angle; + slope = P_AimLineAttack(actor, angle, MISSILERANGE); + + S_StartSound(actor, sfx_pistol); + angle += (P_Random() - P_Random()) << 20; + damage = ((P_Random() % 5) + 1) * 3; + P_LineAttack(actor, angle, MISSILERANGE, slope, damage); +} + + +void A_SPosAttack(mobj_t* actor) +{ + int i; + int angle; + int bangle; + int damage; + int slope; + + if (!actor->target) + return; + + S_StartSound(actor, sfx_shotgn); + A_FaceTarget(actor); + bangle = actor->angle; + slope = P_AimLineAttack(actor, bangle, MISSILERANGE); + + for (i = 0; i < 3; i++) + { + angle = bangle + ((P_Random() - P_Random()) << 20); + damage = ((P_Random() % 5) + 1) * 3; + P_LineAttack(actor, angle, MISSILERANGE, slope, damage); + } +} + + +void A_CPosAttack(mobj_t* actor) +{ + int angle; + int bangle; + int damage; + int slope; + + if (!actor->target) + return; + + S_StartSound(actor, sfx_shotgn); + A_FaceTarget(actor); + bangle = actor->angle; + slope = P_AimLineAttack(actor, bangle, MISSILERANGE); + + angle = bangle + ((P_Random() - P_Random()) << 20); + damage = ((P_Random() % 5) + 1) * 3; + P_LineAttack(actor, angle, MISSILERANGE, slope, damage); +} + + +void A_CPosRefire(mobj_t* actor) +{ + // keep firing unless target got out of sight + A_FaceTarget(actor); + + if (P_Random() < 40) + return; + + if (!actor->target + || actor->target->health <= 0 + || !P_CheckSight(actor, actor->target)) + { + P_SetMobjState(actor, (statenum_t)actor->info->seestate); + } +} + + +void A_SpidRefire(mobj_t* actor) +{ + // keep firing unless target got out of sight + A_FaceTarget(actor); + + if (P_Random() < 10) + return; + + if (!actor->target + || actor->target->health <= 0 + || !P_CheckSight(actor, actor->target)) + { + P_SetMobjState(actor, (statenum_t)actor->info->seestate); + } +} + + +void A_BspiAttack(mobj_t* actor) +{ + if (!actor->target) + return; + + A_FaceTarget(actor); + + // launch a missile + P_SpawnMissile(actor, actor->target, MT_ARACHPLAZ); +} + + +// +// A_TroopAttack +// +void A_TroopAttack(mobj_t* actor) +{ + int damage; + + if (!actor->target) + return; + + A_FaceTarget(actor); + if (P_CheckMeleeRange(actor)) + { + S_StartSound(actor, sfx_claw); + damage = (P_Random() % 8 + 1) * 3; + P_DamageMobj(actor->target, actor, actor, damage); + return; + } + + // launch a missile + P_SpawnMissile(actor, actor->target, MT_TROOPSHOT); +} + + +void A_SargAttack(mobj_t* actor) +{ + int damage; + + if (!actor->target) + return; + + A_FaceTarget(actor); + if (P_CheckMeleeRange(actor)) + { + damage = ((P_Random() % 10) + 1) * 4; + P_DamageMobj(actor->target, actor, actor, damage); + } +} + + +void A_HeadAttack(mobj_t* actor) +{ + int damage; + + if (!actor->target) + return; + + A_FaceTarget(actor); + if (P_CheckMeleeRange(actor)) + { + damage = (P_Random() % 6 + 1) * 10; + P_DamageMobj(actor->target, actor, actor, damage); + return; + } + + // launch a missile + P_SpawnMissile(actor, actor->target, MT_HEADSHOT); +} + + +void A_CyberAttack(mobj_t* actor) +{ + if (!actor->target) + return; + + A_FaceTarget(actor); + P_SpawnMissile(actor, actor->target, MT_ROCKET); +} + + +void A_BruisAttack(mobj_t* actor) +{ + int damage; + + if (!actor->target) + return; + + if (P_CheckMeleeRange(actor)) + { + S_StartSound(actor, sfx_claw); + damage = (P_Random() % 8 + 1) * 10; + P_DamageMobj(actor->target, actor, actor, damage); + return; + } + + // launch a missile + P_SpawnMissile(actor, actor->target, MT_BRUISERSHOT); +} + + +// +// A_SkelMissile +// +void A_SkelMissile(mobj_t* actor) +{ + mobj_t* mo; + + if (!actor->target) + return; + + A_FaceTarget(actor); + actor->z += 16 * FRACUNIT; // so missile spawns higher + mo = P_SpawnMissile(actor, actor->target, MT_TRACER); + actor->z -= 16 * FRACUNIT; // back to normal + + mo->x += mo->momx; + mo->y += mo->momy; + mo->tracer = actor->target; +} + + +void A_Tracer(mobj_t* actor) +{ + angle_t exact; + fixed_t dist; + fixed_t slope; + mobj_t* dest; + mobj_t* th; + + if (gametic & 3) + return; + + // spawn a puff of smoke behind the rocket + P_SpawnPuff(actor->x, actor->y, actor->z); + + th = P_SpawnMobj(actor->x - actor->momx, + actor->y - actor->momy, + actor->z, MT_SMOKE); + + th->momz = FRACUNIT; + th->tics -= P_Random() & 3; + if (th->tics < 1) + th->tics = 1; + + // adjust direction + dest = actor->tracer; + + if (!dest || dest->health <= 0) + return; + + // change angle + exact = R_PointToAngle2(actor->x, + actor->y, + dest->x, + dest->y); + + if (exact != actor->angle) + { + if (exact - actor->angle > 0x80000000) + { + actor->angle -= TRACEANGLE; + if (exact - actor->angle < 0x80000000) + actor->angle = exact; + } + else + { + actor->angle += TRACEANGLE; + if (exact - actor->angle > 0x80000000) + actor->angle = exact; + } + } + + exact = actor->angle >> ANGLETOFINESHIFT; + actor->momx = FixedMul(actor->info->speed, finecosine[exact]); + actor->momy = FixedMul(actor->info->speed, finesine[exact]); + + // change slope + dist = P_AproxDistance(dest->x - actor->x, + dest->y - actor->y); + + dist = dist / actor->info->speed; + + if (dist < 1) + dist = 1; + slope = (dest->z + 40 * FRACUNIT - actor->z) / dist; + + if (slope < actor->momz) + actor->momz -= FRACUNIT / 8; + else + actor->momz += FRACUNIT / 8; +} + + +void A_SkelWhoosh(mobj_t* actor) +{ + if (!actor->target) + return; + + A_FaceTarget(actor); + S_StartSound(actor, sfx_skeswg); +} + + +void A_SkelFist(mobj_t* actor) +{ + int damage; + + if (!actor->target) + return; + + A_FaceTarget(actor); + + if (P_CheckMeleeRange(actor)) + { + damage = ((P_Random() % 10) + 1) * 6; + S_StartSound(actor, sfx_skepch); + P_DamageMobj(actor->target, actor, actor, damage); + } +} + + +// +// PIT_VileCheck +// Detect a corpse that could be raised. +// +doom_boolean PIT_VileCheck(mobj_t* thing) +{ + int maxdist; + doom_boolean check; + + if (!(thing->flags & MF_CORPSE)) + return doom_true; // not a monster + + if (thing->tics != -1) + return doom_true; // not lying still yet + + if (thing->info->raisestate == S_NULL) + return doom_true; // monster doesn't have a raise state + + maxdist = thing->info->radius + mobjinfo[MT_VILE].radius; + + if (doom_abs(thing->x - viletryx) > maxdist + || doom_abs(thing->y - viletryy) > maxdist) + return doom_true; // not actually touching + + corpsehit = thing; + corpsehit->momx = corpsehit->momy = 0; + corpsehit->height <<= 2; + check = P_CheckPosition(corpsehit, corpsehit->x, corpsehit->y); + corpsehit->height >>= 2; + + if (!check) + return doom_true; // doesn't fit here + + return doom_false; // got one, so stop checking +} + + +// +// A_VileChase +// Check for ressurecting a body +// +void A_VileChase(mobj_t* actor) +{ + int xl; + int xh; + int yl; + int yh; + + int bx; + int by; + + mobjinfo_t* info; + mobj_t* temp; + + if (actor->movedir != DI_NODIR) + { + // check for corpses to raise + viletryx = + actor->x + actor->info->speed * xspeed[actor->movedir]; + viletryy = + actor->y + actor->info->speed * yspeed[actor->movedir]; + + xl = (viletryx - bmaporgx - MAXRADIUS * 2) >> MAPBLOCKSHIFT; + xh = (viletryx - bmaporgx + MAXRADIUS * 2) >> MAPBLOCKSHIFT; + yl = (viletryy - bmaporgy - MAXRADIUS * 2) >> MAPBLOCKSHIFT; + yh = (viletryy - bmaporgy + MAXRADIUS * 2) >> MAPBLOCKSHIFT; + + vileobj = actor; + for (bx = xl; bx <= xh; bx++) + { + for (by = yl; by <= yh; by++) + { + // Call PIT_VileCheck to check + // whether object is a corpse + // that canbe raised. + if (!P_BlockThingsIterator(bx, by, PIT_VileCheck)) + { + // got one! + temp = actor->target; + actor->target = corpsehit; + A_FaceTarget(actor); + actor->target = temp; + + P_SetMobjState(actor, S_VILE_HEAL1); + S_StartSound(corpsehit, sfx_slop); + info = corpsehit->info; + + P_SetMobjState(corpsehit, (statenum_t)info->raisestate); + corpsehit->height <<= 2; + corpsehit->flags = info->flags; + corpsehit->health = info->spawnhealth; + corpsehit->target = 0; + + return; + } + } + } + } + + // Return to normal attack. + A_Chase(actor); +} + + +// +// A_VileStart +// +void A_VileStart(mobj_t* actor) +{ + S_StartSound(actor, sfx_vilatk); +} + + +// +// A_Fire +// Keep fire in front of player unless out of sight +// +void A_StartFire(mobj_t* actor) +{ + S_StartSound(actor, sfx_flamst); + A_Fire(actor); +} + + +void A_FireCrackle(mobj_t* actor) +{ + S_StartSound(actor, sfx_flame); + A_Fire(actor); +} + + +void A_Fire(mobj_t* actor) +{ + mobj_t* dest; + unsigned an; + + dest = actor->tracer; + if (!dest) + return; + + // don't move it if the vile lost sight + if (!P_CheckSight(actor->target, dest)) + return; + + an = dest->angle >> ANGLETOFINESHIFT; + + P_UnsetThingPosition(actor); + actor->x = dest->x + FixedMul(24 * FRACUNIT, finecosine[an]); + actor->y = dest->y + FixedMul(24 * FRACUNIT, finesine[an]); + actor->z = dest->z; + P_SetThingPosition(actor); +} + + +// +// A_VileTarget +// Spawn the hellfire +// +void A_VileTarget(mobj_t* actor) +{ + mobj_t* fog; + + if (!actor->target) + return; + + A_FaceTarget(actor); + + fog = P_SpawnMobj(actor->target->x, + actor->target->x, + actor->target->z, MT_FIRE); + + actor->tracer = fog; + fog->target = actor; + fog->tracer = actor->target; + A_Fire(fog); +} + + +// +// A_VileAttack +// +void A_VileAttack(mobj_t* actor) +{ + mobj_t* fire; + int an; + + if (!actor->target) + return; + + A_FaceTarget(actor); + + if (!P_CheckSight(actor, actor->target)) + return; + + S_StartSound(actor, sfx_barexp); + P_DamageMobj(actor->target, actor, actor, 20); + actor->target->momz = 1000 * FRACUNIT / actor->target->info->mass; + + an = actor->angle >> ANGLETOFINESHIFT; + + fire = actor->tracer; + + if (!fire) + return; + + // move the fire between the vile and the player + fire->x = actor->target->x - FixedMul(24 * FRACUNIT, finecosine[an]); + fire->y = actor->target->y - FixedMul(24 * FRACUNIT, finesine[an]); + P_RadiusAttack(fire, actor, 70); +} + + +// +// Mancubus attack, +// firing three missiles (bruisers) +// in three different directions? +// Doesn't look like it. +// +void A_FatRaise(mobj_t* actor) +{ + A_FaceTarget(actor); + S_StartSound(actor, sfx_manatk); +} + + +void A_FatAttack1(mobj_t* actor) +{ + mobj_t* mo; + int an; + + A_FaceTarget(actor); + // Change direction to ... + actor->angle += FATSPREAD; + P_SpawnMissile(actor, actor->target, MT_FATSHOT); + + mo = P_SpawnMissile(actor, actor->target, MT_FATSHOT); + mo->angle += FATSPREAD; + an = mo->angle >> ANGLETOFINESHIFT; + mo->momx = FixedMul(mo->info->speed, finecosine[an]); + mo->momy = FixedMul(mo->info->speed, finesine[an]); +} + + +void A_FatAttack2(mobj_t* actor) +{ + mobj_t* mo; + int an; + + A_FaceTarget(actor); + // Now here choose opposite deviation. + actor->angle -= FATSPREAD; + P_SpawnMissile(actor, actor->target, MT_FATSHOT); + + mo = P_SpawnMissile(actor, actor->target, MT_FATSHOT); + mo->angle -= FATSPREAD * 2; + an = mo->angle >> ANGLETOFINESHIFT; + mo->momx = FixedMul(mo->info->speed, finecosine[an]); + mo->momy = FixedMul(mo->info->speed, finesine[an]); +} + + +void A_FatAttack3(mobj_t* actor) +{ + mobj_t* mo; + int an; + + A_FaceTarget(actor); + + mo = P_SpawnMissile(actor, actor->target, MT_FATSHOT); + mo->angle -= FATSPREAD / 2; + an = mo->angle >> ANGLETOFINESHIFT; + mo->momx = FixedMul(mo->info->speed, finecosine[an]); + mo->momy = FixedMul(mo->info->speed, finesine[an]); + + mo = P_SpawnMissile(actor, actor->target, MT_FATSHOT); + mo->angle += FATSPREAD / 2; + an = mo->angle >> ANGLETOFINESHIFT; + mo->momx = FixedMul(mo->info->speed, finecosine[an]); + mo->momy = FixedMul(mo->info->speed, finesine[an]); +} + + +// +// SkullAttack +// Fly at the player like a missile. +// +void A_SkullAttack(mobj_t* actor) +{ + mobj_t* dest; + angle_t an; + int dist; + + if (!actor->target) + return; + + dest = actor->target; + actor->flags |= MF_SKULLFLY; + + S_StartSound(actor, actor->info->attacksound); + A_FaceTarget(actor); + an = actor->angle >> ANGLETOFINESHIFT; + actor->momx = FixedMul(SKULLSPEED, finecosine[an]); + actor->momy = FixedMul(SKULLSPEED, finesine[an]); + dist = P_AproxDistance(dest->x - actor->x, dest->y - actor->y); + dist = dist / SKULLSPEED; + + if (dist < 1) + dist = 1; + actor->momz = (dest->z + (dest->height >> 1) - actor->z) / dist; +} + + +// +// A_PainShootSkull +// Spawn a lost soul and launch it at the target +// +void A_PainShootSkull(mobj_t* actor, angle_t angle) +{ + fixed_t x; + fixed_t y; + fixed_t z; + + mobj_t* newmobj; + angle_t an; + int prestep; + int count; + thinker_t* currentthinker; + + // count total number of skull currently on the level + count = 0; + + currentthinker = thinkercap.next; + while (currentthinker != &thinkercap) + { + if ((currentthinker->function.acp1 == (actionf_p1)P_MobjThinker) + && ((mobj_t*)currentthinker)->type == MT_SKULL) + count++; + currentthinker = currentthinker->next; + } + + // if there are allready 20 skulls on the level, + // don't spit another one + if (count > 20) + return; + + // okay, there's playe for another one + an = angle >> ANGLETOFINESHIFT; + + prestep = + 4 * FRACUNIT + + 3 * (actor->info->radius + mobjinfo[MT_SKULL].radius) / 2; + + x = actor->x + FixedMul(prestep, finecosine[an]); + y = actor->y + FixedMul(prestep, finesine[an]); + z = actor->z + 8 * FRACUNIT; + + newmobj = P_SpawnMobj(x, y, z, MT_SKULL); + + // Check for movements. + if (!P_TryMove(newmobj, newmobj->x, newmobj->y)) + { + // kill it immediately + P_DamageMobj(newmobj, actor, actor, 10000); + return; + } + + newmobj->target = actor->target; + A_SkullAttack(newmobj); +} + + +// +// A_PainAttack +// Spawn a lost soul and launch it at the target +// +void A_PainAttack(mobj_t* actor) +{ + if (!actor->target) + return; + + A_FaceTarget(actor); + A_PainShootSkull(actor, actor->angle); +} + + +void A_PainDie(mobj_t* actor) +{ + A_Fall(actor); + A_PainShootSkull(actor, actor->angle + ANG90); + A_PainShootSkull(actor, actor->angle + ANG180); + A_PainShootSkull(actor, actor->angle + ANG270); +} + + +void A_Scream(mobj_t* actor) +{ + int sound; + + switch (actor->info->deathsound) + { + case 0: + return; + + case sfx_podth1: + case sfx_podth2: + case sfx_podth3: + sound = sfx_podth1 + P_Random() % 3; + break; + + case sfx_bgdth1: + case sfx_bgdth2: + sound = sfx_bgdth1 + P_Random() % 2; + break; + + default: + sound = actor->info->deathsound; + break; + } + + // Check for bosses. + if (actor->type == MT_SPIDER + || actor->type == MT_CYBORG) + { + // full volume + S_StartSound(0, sound); + } + else + S_StartSound(actor, sound); +} + + +void A_XScream(mobj_t* actor) +{ + S_StartSound(actor, sfx_slop); +} + + +void A_Pain(mobj_t* actor) +{ + if (actor->info->painsound) + S_StartSound(actor, actor->info->painsound); +} + + +void A_Fall(mobj_t* actor) +{ + // actor is on ground, it can be walked over + actor->flags &= ~MF_SOLID; + + // So change this if corpse objects + // are meant to be obstacles. +} + + +// +// A_Explode +// +void A_Explode(mobj_t* thingy) +{ + P_RadiusAttack(thingy, thingy->target, 128); +} + + +// +// A_BossDeath +// Possibly trigger special effects +// if on first boss level +// +void A_BossDeath(mobj_t* mo) +{ + thinker_t* th; + mobj_t* mo2; + line_t junk; + int i; + + if (gamemode == commercial) + { + if (gamemap != 7) + return; + + if ((mo->type != MT_FATSO) + && (mo->type != MT_BABY)) + return; + } + else + { + switch (gameepisode) + { + case 1: + if (gamemap != 8) + return; + + if (mo->type != MT_BRUISER) + return; + break; + + case 2: + if (gamemap != 8) + return; + + if (mo->type != MT_CYBORG) + return; + break; + + case 3: + if (gamemap != 8) + return; + + if (mo->type != MT_SPIDER) + return; + + break; + + case 4: + switch (gamemap) + { + case 6: + if (mo->type != MT_CYBORG) + return; + break; + + case 8: + if (mo->type != MT_SPIDER) + return; + break; + + default: + return; + break; + } + break; + + default: + if (gamemap != 8) + return; + break; + } + } + + // make sure there is a player alive for victory + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i] && players[i].health > 0) + break; + + if (i == MAXPLAYERS) + return; // no one left alive, so do not end game + + // scan the remaining thinkers to see + // if all bosses are dead + for (th = thinkercap.next; th != &thinkercap; th = th->next) + { + if (th->function.acp1 != (actionf_p1)P_MobjThinker) + continue; + + mo2 = (mobj_t*)th; + if (mo2 != mo + && mo2->type == mo->type + && mo2->health > 0) + { + // other boss not dead + return; + } + } + + // victory! + if (gamemode == commercial) + { + if (gamemap == 7) + { + if (mo->type == MT_FATSO) + { + junk.tag = 666; + EV_DoFloor(&junk, lowerFloorToLowest); + return; + } + + if (mo->type == MT_BABY) + { + junk.tag = 667; + EV_DoFloor(&junk, raiseToTexture); + return; + } + } + } + else + { + switch (gameepisode) + { + case 1: + junk.tag = 666; + EV_DoFloor(&junk, lowerFloorToLowest); + return; + break; + + case 4: + switch (gamemap) + { + case 6: + junk.tag = 666; + EV_DoDoor(&junk, blazeOpen); + return; + break; + + case 8: + junk.tag = 666; + EV_DoFloor(&junk, lowerFloorToLowest); + return; + break; + } + } + } + + G_ExitLevel(); +} + + +void A_Hoof(mobj_t* mo) +{ + S_StartSound(mo, sfx_hoof); + A_Chase(mo); +} + + +void A_Metal(mobj_t* mo) +{ + S_StartSound(mo, sfx_metal); + A_Chase(mo); +} + + +void A_BabyMetal(mobj_t* mo) +{ + S_StartSound(mo, sfx_bspwlk); + A_Chase(mo); +} + + +void A_OpenShotgun2(player_t* player, pspdef_t* psp) +{ + S_StartSound(player->mo, sfx_dbopn); +} + + +void A_LoadShotgun2(player_t* player, pspdef_t* psp) +{ + S_StartSound(player->mo, sfx_dbload); +} + + +void A_CloseShotgun2(player_t* player, pspdef_t* psp) +{ + S_StartSound(player->mo, sfx_dbcls); + A_ReFire(player, psp); +} + + +void A_BrainAwake(mobj_t* mo) +{ + thinker_t* thinker; + mobj_t* m; + + // find all the target spots + numbraintargets = 0; + braintargeton = 0; + + thinker = thinkercap.next; + for (thinker = thinkercap.next; + thinker != &thinkercap; + thinker = thinker->next) + { + if (thinker->function.acp1 != (actionf_p1)P_MobjThinker) + continue; // not a mobj + + m = (mobj_t*)thinker; + + if (m->type == MT_BOSSTARGET) + { + braintargets[numbraintargets] = m; + numbraintargets++; + } + } + + S_StartSound(0, sfx_bossit); +} + + +void A_BrainPain(mobj_t* mo) +{ + S_StartSound(0, sfx_bospn); +} + + +void A_BrainScream(mobj_t* mo) +{ + int x; + int y; + int z; + mobj_t* th; + + for (x = mo->x - 196 * FRACUNIT; x < mo->x + 320 * FRACUNIT; x += FRACUNIT * 8) + { + y = mo->y - 320 * FRACUNIT; + z = 128 + P_Random() * 2 * FRACUNIT; + th = P_SpawnMobj(x, y, z, MT_ROCKET); + th->momz = P_Random() * 512; + + P_SetMobjState(th, S_BRAINEXPLODE1); + + th->tics -= P_Random() & 7; + if (th->tics < 1) + th->tics = 1; + } + + S_StartSound(0, sfx_bosdth); +} + + +void A_BrainExplode(mobj_t* mo) +{ + int x; + int y; + int z; + mobj_t* th; + + x = mo->x + (P_Random() - P_Random()) * 2048; + y = mo->y; + z = 128 + P_Random() * 2 * FRACUNIT; + th = P_SpawnMobj(x, y, z, MT_ROCKET); + th->momz = P_Random() * 512; + + P_SetMobjState(th, S_BRAINEXPLODE1); + + th->tics -= P_Random() & 7; + if (th->tics < 1) + th->tics = 1; +} + + +void A_BrainDie(mobj_t* mo) +{ + G_ExitLevel(); +} + + +void A_BrainSpit(mobj_t* mo) +{ + mobj_t* targ; + mobj_t* newmobj; + + static int easy = 0; + + easy ^= 1; + if (gameskill <= sk_easy && (!easy)) + return; + + // shoot a cube at current target + targ = braintargets[braintargeton]; + braintargeton = (braintargeton + 1) % numbraintargets; + + // spawn brain missile + newmobj = P_SpawnMissile(mo, targ, MT_SPAWNSHOT); + newmobj->target = targ; + newmobj->reactiontime = + ((targ->y - mo->y) / newmobj->momy) / newmobj->state->tics; + + S_StartSound(0, sfx_bospit); +} + + +// travelling cube sound +void A_SpawnSound(mobj_t* mo) +{ + S_StartSound(mo, sfx_boscub); + A_SpawnFly(mo); +} + + +void A_SpawnFly(mobj_t* mo) +{ + mobj_t* newmobj; + mobj_t* fog; + mobj_t* targ; + int r; + mobjtype_t type; + + if (--mo->reactiontime) + return; // still flying + + targ = mo->target; + + // First spawn teleport fog. + fog = P_SpawnMobj(targ->x, targ->y, targ->z, MT_SPAWNFIRE); + S_StartSound(fog, sfx_telept); + + // Randomly select monster to spawn. + r = P_Random(); + + // Probability distribution (kind of :), + // decreasing likelihood. + if (r < 50) + type = MT_TROOP; + else if (r < 90) + type = MT_SERGEANT; + else if (r < 120) + type = MT_SHADOWS; + else if (r < 130) + type = MT_PAIN; + else if (r < 160) + type = MT_HEAD; + else if (r < 162) + type = MT_VILE; + else if (r < 172) + type = MT_UNDEAD; + else if (r < 192) + type = MT_BABY; + else if (r < 222) + type = MT_FATSO; + else if (r < 246) + type = MT_KNIGHT; + else + type = MT_BRUISER; + + newmobj = P_SpawnMobj(targ->x, targ->y, targ->z, type); + if (P_LookForPlayers(newmobj, doom_true)) + P_SetMobjState(newmobj, (statenum_t)newmobj->info->seestate); + + // telefrag anything in this spot + P_TeleportMove(newmobj, newmobj->x, newmobj->y); + + // remove self (i.e., cube). + P_RemoveMobj(mo); +} + + +void A_PlayerScream(mobj_t* mo) +{ + // Default death sound. + int sound = sfx_pldeth; + + if ((gamemode == commercial) + && (mo->health < -50)) + { + // IF THE PLAYER DIES + // LESS THAN -50% WITHOUT GIBBING + sound = sfx_pdiehi; + } + + S_StartSound(mo, sound); +} +result_e T_MovePlane(sector_t* sector, + fixed_t speed, + fixed_t dest, + doom_boolean crush, + int floorOrCeiling, + int direction) +{ + doom_boolean flag; + fixed_t lastpos; + + switch (floorOrCeiling) + { + case 0: + // FLOOR + switch (direction) + { + case -1: + // DOWN + if (sector->floorheight - speed < dest) + { + lastpos = sector->floorheight; + sector->floorheight = dest; + flag = P_ChangeSector(sector, crush); + if (flag == doom_true) + { + sector->floorheight = lastpos; + P_ChangeSector(sector, crush); + //return crushed; + } + return pastdest; + } + else + { + lastpos = sector->floorheight; + sector->floorheight -= speed; + flag = P_ChangeSector(sector, crush); + if (flag == doom_true) + { + sector->floorheight = lastpos; + P_ChangeSector(sector, crush); + return crushed; + } + } + break; + + case 1: + // UP + if (sector->floorheight + speed > dest) + { + lastpos = sector->floorheight; + sector->floorheight = dest; + flag = P_ChangeSector(sector, crush); + if (flag == doom_true) + { + sector->floorheight = lastpos; + P_ChangeSector(sector, crush); + //return crushed; + } + return pastdest; + } + else + { + // COULD GET CRUSHED + lastpos = sector->floorheight; + sector->floorheight += speed; + flag = P_ChangeSector(sector, crush); + if (flag == doom_true) + { + if (crush == doom_true) + return crushed; + sector->floorheight = lastpos; + P_ChangeSector(sector, crush); + return crushed; + } + } + break; + } + break; + + case 1: + // CEILING + switch (direction) + { + case -1: + // DOWN + if (sector->ceilingheight - speed < dest) + { + lastpos = sector->ceilingheight; + sector->ceilingheight = dest; + flag = P_ChangeSector(sector, crush); + + if (flag == doom_true) + { + sector->ceilingheight = lastpos; + P_ChangeSector(sector, crush); + //return crushed; + } + return pastdest; + } + else + { + // COULD GET CRUSHED + lastpos = sector->ceilingheight; + sector->ceilingheight -= speed; + flag = P_ChangeSector(sector, crush); + + if (flag == doom_true) + { + if (crush == doom_true) + return crushed; + sector->ceilingheight = lastpos; + P_ChangeSector(sector, crush); + return crushed; + } + } + break; + + case 1: + // UP + if (sector->ceilingheight + speed > dest) + { + lastpos = sector->ceilingheight; + sector->ceilingheight = dest; + flag = P_ChangeSector(sector, crush); + if (flag == doom_true) + { + sector->ceilingheight = lastpos; + P_ChangeSector(sector, crush); + //return crushed; + } + return pastdest; + } + else + { + lastpos = sector->ceilingheight; + sector->ceilingheight += speed; + flag = P_ChangeSector(sector, crush); + // UNUSED +#if 0 + if (flag == doom_true) + { + sector->ceilingheight = lastpos; + P_ChangeSector(sector, crush); + return crushed; + } +#endif + } + break; + } + break; + } + + return ok; +} + + +// +// MOVE A FLOOR TO IT'S DESTINATION (UP OR DOWN) +// +void T_MoveFloor(floormove_t* floor) +{ + result_e res; + + res = T_MovePlane(floor->sector, + floor->speed, + floor->floordestheight, + floor->crush, 0, floor->direction); + + if (!(leveltime & 7)) + S_StartSound((mobj_t*)&floor->sector->soundorg, + sfx_stnmov); + + if (res == pastdest) + { + floor->sector->specialdata = 0; + + if (floor->direction == 1) + { + switch (floor->type) + { + case donutRaise: + floor->sector->special = floor->newspecial; + floor->sector->floorpic = floor->texture; + default: + break; + } + } + else if (floor->direction == -1) + { + switch (floor->type) + { + case lowerAndChange: + floor->sector->special = floor->newspecial; + floor->sector->floorpic = floor->texture; + default: + break; + } + } + P_RemoveThinker(&floor->thinker); + + S_StartSound((mobj_t*)&floor->sector->soundorg, + sfx_pstop); + } +} + + +// +// HANDLE FLOOR TYPES +// +int EV_DoFloor(line_t* line, floor_e floortype) +{ + int secnum; + int rtn; + int i; + sector_t* sec; + floormove_t* floor; + + secnum = -1; + rtn = 0; + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + sec = §ors[secnum]; + + // ALREADY MOVING? IF SO, KEEP GOING... + if (sec->specialdata) + continue; + + // new floor thinker + rtn = 1; + floor = (floormove_t*)Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0); + P_AddThinker(&floor->thinker); + sec->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; + floor->type = floortype; + floor->crush = doom_false; + + switch (floortype) + { + case lowerFloor: + floor->direction = -1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = + P_FindHighestFloorSurrounding(sec); + break; + + case lowerFloorToLowest: + floor->direction = -1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = + P_FindLowestFloorSurrounding(sec); + break; + + case turboLower: + floor->direction = -1; + floor->sector = sec; + floor->speed = FLOORSPEED * 4; + floor->floordestheight = + P_FindHighestFloorSurrounding(sec); + if (floor->floordestheight != sec->floorheight) + floor->floordestheight += 8 * FRACUNIT; + break; + + case raiseFloorCrush: + floor->crush = doom_true; + case raiseFloor: + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = + P_FindLowestCeilingSurrounding(sec); + if (floor->floordestheight > sec->ceilingheight) + floor->floordestheight = sec->ceilingheight; + floor->floordestheight -= (8 * FRACUNIT) * + (floortype == raiseFloorCrush); + break; + + case raiseFloorTurbo: + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED * 4; + floor->floordestheight = + P_FindNextHighestFloor(sec, sec->floorheight); + break; + + case raiseFloorToNearest: + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = + P_FindNextHighestFloor(sec, sec->floorheight); + break; + + case raiseFloor24: + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = floor->sector->floorheight + + 24 * FRACUNIT; + break; + case raiseFloor512: + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = floor->sector->floorheight + + 512 * FRACUNIT; + break; + + case raiseFloor24AndChange: + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = floor->sector->floorheight + + 24 * FRACUNIT; + sec->floorpic = line->frontsector->floorpic; + sec->special = line->frontsector->special; + break; + + case raiseToTexture: + { + int minsize = DOOM_MAXINT; + side_t* side; + + floor->direction = 1; + floor->sector = sec; + floor->speed = FLOORSPEED; + for (i = 0; i < sec->linecount; i++) + { + if (twoSided(secnum, i)) + { + side = getSide(secnum, i, 0); + if (side->bottomtexture >= 0) + if (textureheight[side->bottomtexture] < + minsize) + minsize = + textureheight[side->bottomtexture]; + side = getSide(secnum, i, 1); + if (side->bottomtexture >= 0) + if (textureheight[side->bottomtexture] < + minsize) + minsize = + textureheight[side->bottomtexture]; + } + } + floor->floordestheight = + floor->sector->floorheight + minsize; + } + break; + + case lowerAndChange: + floor->direction = -1; + floor->sector = sec; + floor->speed = FLOORSPEED; + floor->floordestheight = + P_FindLowestFloorSurrounding(sec); + floor->texture = sec->floorpic; + + for (i = 0; i < sec->linecount; i++) + { + if (twoSided(secnum, i)) + { + if (getSide(secnum, i, 0)->sector - sectors == secnum) + { + sec = getSector(secnum, i, 1); + + if (sec->floorheight == floor->floordestheight) + { + floor->texture = sec->floorpic; + floor->newspecial = sec->special; + break; + } + } + else + { + sec = getSector(secnum, i, 0); + + if (sec->floorheight == floor->floordestheight) + { + floor->texture = sec->floorpic; + floor->newspecial = sec->special; + break; + } + } + } + } + default: + break; + } + } + + return rtn; +} + + +// +// BUILD A STAIRCASE! +// +int EV_BuildStairs(line_t* line, stair_e type) +{ + int secnum; + int height; + int i; + int newsecnum; + int texture; + int ok; + int rtn; + + sector_t* sec; + sector_t* tsec; + + floormove_t* floor; + + fixed_t stairsize; + fixed_t speed; + + secnum = -1; + rtn = 0; + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + sec = §ors[secnum]; + + // ALREADY MOVING? IF SO, KEEP GOING... + if (sec->specialdata) + continue; + + // new floor thinker + rtn = 1; + floor = (floormove_t*)Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0); + P_AddThinker(&floor->thinker); + sec->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; + floor->direction = 1; + floor->sector = sec; + switch (type) + { + case build8: + speed = FLOORSPEED / 4; + stairsize = 8 * FRACUNIT; + break; + case turbo16: + speed = FLOORSPEED * 4; + stairsize = 16 * FRACUNIT; + break; + } + floor->speed = speed; + height = sec->floorheight + stairsize; + floor->floordestheight = height; + + texture = sec->floorpic; + + // Find next sector to raise + // 1. Find 2-sided line with same sector side[0] + // 2. Other side is the next sector to raise + do + { + ok = 0; + for (i = 0; i < sec->linecount; i++) + { + if (!((sec->lines[i])->flags & ML_TWOSIDED)) + continue; + + tsec = (sec->lines[i])->frontsector; + newsecnum = (int)(tsec - sectors); + + if (secnum != newsecnum) + continue; + + tsec = (sec->lines[i])->backsector; + newsecnum = (int)(tsec - sectors); + + if (tsec->floorpic != texture) + continue; + + height += stairsize; + + if (tsec->specialdata) + continue; + + sec = tsec; + secnum = newsecnum; + floor = (floormove_t*)Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0); + + P_AddThinker(&floor->thinker); + + sec->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; + floor->direction = 1; + floor->sector = sec; + floor->speed = speed; + floor->floordestheight = height; + ok = 1; + break; + } + } while (ok); + } + + return rtn; +} +#ifdef __GNUG__ +#pragma implementation "p_inter.h" +#endif +//#include "p_inter.h" + + +#define BONUSADD 6 + + + + +// a weapon is found with two clip loads, +// a big item has five clip loads +int maxammo[NUMAMMO] = {200, 50, 300, 50}; +int clipammo[NUMAMMO] = {10, 4, 20, 1}; + + +// +// GET STUFF +// + +// +// P_GiveAmmo +// Num is the number of clip loads, +// not the individual count (0= 1/2 clip). +// Returns doom_false if the ammo can't be picked up at all +// + +doom_boolean +P_GiveAmmo +( player_t* player, + ammotype_t ammo, + int num ) +{ + int oldammo; + + if (ammo == am_noammo) + return doom_false; + + if (ammo < 0 || ammo > NUMAMMO) + { + //I_Error ("P_GiveAmmo: bad type %i", ammo); + + doom_strcpy(error_buf, "P_GiveAmmo: bad type "); + doom_concat(error_buf, doom_itoa(ammo, 10)); + I_Error(error_buf); + } + + if ( player->ammo[ammo] == player->maxammo[ammo] ) + return doom_false; + + if (num) + num *= clipammo[ammo]; + else + num = clipammo[ammo]/2; + + if (gameskill == sk_baby + || gameskill == sk_nightmare) + { + // give double ammo in trainer mode, + // you'll need in nightmare + num <<= 1; + } + + + oldammo = player->ammo[ammo]; + player->ammo[ammo] += num; + + if (player->ammo[ammo] > player->maxammo[ammo]) + player->ammo[ammo] = player->maxammo[ammo]; + + // If non zero ammo, + // don't change up weapons, + // player was lower on purpose. + if (oldammo) + return doom_true; + + // We were down to zero, + // so select a new weapon. + // Preferences are not user selectable. + switch (ammo) + { + case am_clip: + if (player->readyweapon == wp_fist) + { + if (player->weaponowned[wp_chaingun]) + player->pendingweapon = wp_chaingun; + else + player->pendingweapon = wp_pistol; + } + break; + + case am_shell: + if (player->readyweapon == wp_fist + || player->readyweapon == wp_pistol) + { + if (player->weaponowned[wp_shotgun]) + player->pendingweapon = wp_shotgun; + } + break; + + case am_cell: + if (player->readyweapon == wp_fist + || player->readyweapon == wp_pistol) + { + if (player->weaponowned[wp_plasma]) + player->pendingweapon = wp_plasma; + } + break; + + case am_misl: + if (player->readyweapon == wp_fist) + { + if (player->weaponowned[wp_missile]) + player->pendingweapon = wp_missile; + } + default: + break; + } + + return doom_true; +} + + +// +// P_GiveWeapon +// The weapon name may have a MF_DROPPED flag ored in. +// +doom_boolean +P_GiveWeapon +( player_t* player, + weapontype_t weapon, + doom_boolean dropped ) +{ + doom_boolean gaveammo; + doom_boolean gaveweapon; + + if (netgame && (deathmatch != 2) && !dropped) + { + // leave placed weapons forever on net games + if (player->weaponowned[weapon]) + return doom_false; + + player->bonuscount += BONUSADD; + player->weaponowned[weapon] = doom_true; + + if (deathmatch) + P_GiveAmmo (player, weaponinfo[weapon].ammo, 5); + else + P_GiveAmmo (player, weaponinfo[weapon].ammo, 2); + player->pendingweapon = weapon; + + if (player == &players[consoleplayer]) + S_StartSound (0, sfx_wpnup); + return doom_false; + } + + if (weaponinfo[weapon].ammo != am_noammo) + { + // give one clip with a dropped weapon, + // two clips with a found weapon + if (dropped) + gaveammo = P_GiveAmmo (player, weaponinfo[weapon].ammo, 1); + else + gaveammo = P_GiveAmmo (player, weaponinfo[weapon].ammo, 2); + } + else + gaveammo = doom_false; + + if (player->weaponowned[weapon]) + gaveweapon = doom_false; + else + { + gaveweapon = doom_true; + player->weaponowned[weapon] = doom_true; + player->pendingweapon = weapon; + } + + return (gaveweapon || gaveammo); +} + + + +// +// P_GiveBody +// Returns doom_false if the body isn't needed at all +// +doom_boolean +P_GiveBody +( player_t* player, + int num ) +{ + if (player->health >= MAXHEALTH) + return doom_false; + + player->health += num; + if (player->health > MAXHEALTH) + player->health = MAXHEALTH; + player->mo->health = player->health; + + return doom_true; +} + + + +// +// P_GiveArmor +// Returns doom_false if the armor is worse +// than the current armor. +// +doom_boolean +P_GiveArmor +( player_t* player, + int armortype ) +{ + int hits; + + hits = armortype*100; + if (player->armorpoints >= hits) + return doom_false; // don't pick up + + player->armortype = armortype; + player->armorpoints = hits; + + return doom_true; +} + + + +// +// P_GiveCard +// +void +P_GiveCard +( player_t* player, + card_t card ) +{ + if (player->cards[card]) + return; + + player->bonuscount = BONUSADD; + player->cards[card] = 1; +} + + +// +// P_GivePower +// +doom_boolean +P_GivePower +( player_t* player, + int /*powertype_t*/ power ) +{ + if (power == pw_invulnerability) + { + player->powers[power] = INVULNTICS; + return doom_true; + } + + if (power == pw_invisibility) + { + player->powers[power] = INVISTICS; + player->mo->flags |= MF_SHADOW; + return doom_true; + } + + if (power == pw_infrared) + { + player->powers[power] = INFRATICS; + return doom_true; + } + + if (power == pw_ironfeet) + { + player->powers[power] = IRONTICS; + return doom_true; + } + + if (power == pw_strength) + { + P_GiveBody (player, 100); + player->powers[power] = 1; + return doom_true; + } + + if (player->powers[power]) + return doom_false; // already got it + + player->powers[power] = 1; + return doom_true; +} + + + +// +// P_TouchSpecialThing +// +void +P_TouchSpecialThing +( mobj_t* special, + mobj_t* toucher ) +{ + player_t* player; + int i; + fixed_t delta; + int sound; + + delta = special->z - toucher->z; + + if (delta > toucher->height + || delta < -8*FRACUNIT) + { + // out of reach + return; + } + + + sound = sfx_itemup; + player = toucher->player; + + // Dead thing touching. + // Can happen with a sliding player corpse. + if (toucher->health <= 0) + return; + + // Identify by sprite. + switch (special->sprite) + { + // armor + case SPR_ARM1: + if (!P_GiveArmor (player, 1)) + return; + player->message = (char*)GOTARMOR; + break; + + case SPR_ARM2: + if (!P_GiveArmor (player, 2)) + return; + player->message = (char*)GOTMEGA; + break; + + // bonus items + case SPR_BON1: + player->health++; // can go over 100% + if (player->health > 200) + player->health = 200; + player->mo->health = player->health; + player->message = (char*)GOTHTHBONUS; + break; + + case SPR_BON2: + player->armorpoints++; // can go over 100% + if (player->armorpoints > 200) + player->armorpoints = 200; + if (!player->armortype) + player->armortype = 1; + player->message = (char*)GOTARMBONUS; + break; + + case SPR_SOUL: + player->health += 100; + if (player->health > 200) + player->health = 200; + player->mo->health = player->health; + player->message = (char*)GOTSUPER; + sound = sfx_getpow; + break; + + case SPR_MEGA: + if (gamemode != commercial) + return; + player->health = 200; + player->mo->health = player->health; + P_GiveArmor (player,2); + player->message = (char*)GOTMSPHERE; + sound = sfx_getpow; + break; + + // cards + // leave cards for everyone + case SPR_BKEY: + if (!player->cards[it_bluecard]) + player->message = (char*)GOTBLUECARD; + P_GiveCard (player, it_bluecard); + if (!netgame) + break; + return; + + case SPR_YKEY: + if (!player->cards[it_yellowcard]) + player->message = (char*)GOTYELWCARD; + P_GiveCard (player, it_yellowcard); + if (!netgame) + break; + return; + + case SPR_RKEY: + if (!player->cards[it_redcard]) + player->message = (char*)GOTREDCARD; + P_GiveCard (player, it_redcard); + if (!netgame) + break; + return; + + case SPR_BSKU: + if (!player->cards[it_blueskull]) + player->message = (char*)GOTBLUESKUL; + P_GiveCard (player, it_blueskull); + if (!netgame) + break; + return; + + case SPR_YSKU: + if (!player->cards[it_yellowskull]) + player->message = (char*)GOTYELWSKUL; + P_GiveCard (player, it_yellowskull); + if (!netgame) + break; + return; + + case SPR_RSKU: + if (!player->cards[it_redskull]) + player->message = (char*)GOTREDSKULL; + P_GiveCard (player, it_redskull); + if (!netgame) + break; + return; + + // medikits, heals + case SPR_STIM: + if (!P_GiveBody (player, 10)) + return; + player->message = (char*)GOTSTIM; + break; + + case SPR_MEDI: + if (!P_GiveBody (player, 25)) + return; + + if (player->health < 25) + player->message = (char*)GOTMEDINEED; + else + player->message = (char*)GOTMEDIKIT; + break; + + + // power ups + case SPR_PINV: + if (!P_GivePower (player, pw_invulnerability)) + return; + player->message = (char*)GOTINVUL; + sound = sfx_getpow; + break; + + case SPR_PSTR: + if (!P_GivePower (player, pw_strength)) + return; + player->message = (char*)GOTBERSERK; + if (player->readyweapon != wp_fist) + player->pendingweapon = wp_fist; + sound = sfx_getpow; + break; + + case SPR_PINS: + if (!P_GivePower (player, pw_invisibility)) + return; + player->message = (char*)GOTINVIS; + sound = sfx_getpow; + break; + + case SPR_SUIT: + if (!P_GivePower (player, pw_ironfeet)) + return; + player->message = (char*)GOTSUIT; + sound = sfx_getpow; + break; + + case SPR_PMAP: + if (!P_GivePower (player, pw_allmap)) + return; + player->message = (char*)GOTMAP; + sound = sfx_getpow; + break; + + case SPR_PVIS: + if (!P_GivePower (player, pw_infrared)) + return; + player->message = (char*)GOTVISOR; + sound = sfx_getpow; + break; + + // ammo + case SPR_CLIP: + if (special->flags & MF_DROPPED) + { + if (!P_GiveAmmo (player,am_clip,0)) + return; + } + else + { + if (!P_GiveAmmo (player,am_clip,1)) + return; + } + player->message = (char*)GOTCLIP; + break; + + case SPR_AMMO: + if (!P_GiveAmmo (player, am_clip,5)) + return; + player->message = (char*)GOTCLIPBOX; + break; + + case SPR_ROCK: + if (!P_GiveAmmo (player, am_misl,1)) + return; + player->message = (char*)GOTROCKET; + break; + + case SPR_BROK: + if (!P_GiveAmmo (player, am_misl,5)) + return; + player->message = (char*)GOTROCKBOX; + break; + + case SPR_CELL: + if (!P_GiveAmmo (player, am_cell,1)) + return; + player->message = (char*)GOTCELL; + break; + + case SPR_CELP: + if (!P_GiveAmmo (player, am_cell,5)) + return; + player->message = (char*)GOTCELLBOX; + break; + + case SPR_SHEL: + if (!P_GiveAmmo (player, am_shell,1)) + return; + player->message = (char*)GOTSHELLS; + break; + + case SPR_SBOX: + if (!P_GiveAmmo (player, am_shell,5)) + return; + player->message = (char*)GOTSHELLBOX; + break; + + case SPR_BPAK: + if (!player->backpack) + { + for (i=0 ; imaxammo[i] *= 2; + player->backpack = doom_true; + } + for (i=0 ; imessage = (char*)GOTBACKPACK; + break; + + // weapons + case SPR_BFUG: + if (!P_GiveWeapon (player, wp_bfg, doom_false) ) + return; + player->message = (char*)GOTBFG9000; + sound = sfx_wpnup; + break; + + case SPR_MGUN: + if (!P_GiveWeapon (player, wp_chaingun, special->flags&MF_DROPPED) ) + return; + player->message = (char*)GOTCHAINGUN; + sound = sfx_wpnup; + break; + + case SPR_CSAW: + if (!P_GiveWeapon (player, wp_chainsaw, doom_false) ) + return; + player->message = (char*)GOTCHAINSAW; + sound = sfx_wpnup; + break; + + case SPR_LAUN: + if (!P_GiveWeapon (player, wp_missile, doom_false) ) + return; + player->message = (char*)GOTLAUNCHER; + sound = sfx_wpnup; + break; + + case SPR_PLAS: + if (!P_GiveWeapon (player, wp_plasma, doom_false) ) + return; + player->message = (char*)GOTPLASMA; + sound = sfx_wpnup; + break; + + case SPR_SHOT: + if (!P_GiveWeapon (player, wp_shotgun, special->flags&MF_DROPPED ) ) + return; + player->message = (char*)GOTSHOTGUN; + sound = sfx_wpnup; + break; + + case SPR_SGN2: + if (!P_GiveWeapon (player, wp_supershotgun, special->flags&MF_DROPPED ) ) + return; + player->message = (char*)GOTSHOTGUN2; + sound = sfx_wpnup; + break; + + default: + I_Error ((char*)"P_SpecialThing: Unknown gettable thing"); + } + + if (special->flags & MF_COUNTITEM) + player->itemcount++; + P_RemoveMobj (special); + player->bonuscount += BONUSADD; + if (player == &players[consoleplayer]) + S_StartSound (0, sound); +} + + +// +// KillMobj +// +void +P_KillMobj +( mobj_t* source, + mobj_t* target ) +{ + mobjtype_t item; + mobj_t* mo; + + target->flags &= ~(MF_SHOOTABLE|MF_FLOAT|MF_SKULLFLY); + + if (target->type != MT_SKULL) + target->flags &= ~MF_NOGRAVITY; + + target->flags |= MF_CORPSE|MF_DROPOFF; + target->height >>= 2; + + if (source && source->player) + { + // count for intermission + if (target->flags & MF_COUNTKILL) + source->player->killcount++; + + if (target->player) + source->player->frags[target->player-players]++; + } + else if (!netgame && (target->flags & MF_COUNTKILL) ) + { + // count all monster deaths, + // even those caused by other monsters + players[0].killcount++; + } + + if (target->player) + { + // count environment kills against you + if (!source) + target->player->frags[target->player-players]++; + + target->flags &= ~MF_SOLID; + target->player->playerstate = PST_DEAD; + P_DropWeapon (target->player); + + if (target->player == &players[consoleplayer] + && automapactive) + { + // don't die in auto map, + // switch view prior to dying + AM_Stop (); + } + + } + + if (target->health < -target->info->spawnhealth + && target->info->xdeathstate) + { + P_SetMobjState (target, (statenum_t)target->info->xdeathstate); + } + else + P_SetMobjState (target, (statenum_t)target->info->deathstate); + target->tics -= P_Random()&3; + + if (target->tics < 1) + target->tics = 1; + + // I_StartSound (&actor->r, actor->info->deathsound); + + + // Drop stuff. + // This determines the kind of object spawned + // during the death frame of a thing. + switch (target->type) + { + case MT_WOLFSS: + case MT_POSSESSED: + item = MT_CLIP; + break; + + case MT_SHOTGUY: + item = MT_SHOTGUN; + break; + + case MT_CHAINGUY: + item = MT_CHAINGUN; + break; + + default: + return; + } + + mo = P_SpawnMobj (target->x,target->y,ONFLOORZ, item); + mo->flags |= MF_DROPPED; // special versions of items +} + + + + +// +// P_DamageMobj +// Damages both enemies and players +// "inflictor" is the thing that caused the damage +// creature or missile, can be 0 (slime, etc) +// "source" is the thing to target after taking damage +// creature or 0 +// Source and inflictor are the same for melee attacks. +// Source can be 0 for slime, barrel explosions +// and other environmental stuff. +// +void +P_DamageMobj +( mobj_t* target, + mobj_t* inflictor, + mobj_t* source, + int damage ) +{ + unsigned ang; + int saved; + player_t* player; + fixed_t thrust; + int temp; + + if ( !(target->flags & MF_SHOOTABLE) ) + return; // shouldn't happen... + + if (target->health <= 0) + return; + + if ( target->flags & MF_SKULLFLY ) + { + target->momx = target->momy = target->momz = 0; + } + + player = target->player; + if (player && gameskill == sk_baby) + damage >>= 1; // take half damage in trainer mode + + + // Some close combat weapons should not + // inflict thrust and push the victim out of reach, + // thus kick away unless using the chainsaw. + if (inflictor + && !(target->flags & MF_NOCLIP) + && (!source + || !source->player + || source->player->readyweapon != wp_chainsaw)) + { + ang = R_PointToAngle2 ( inflictor->x, + inflictor->y, + target->x, + target->y); + + thrust = damage*(FRACUNIT>>3)*100/target->info->mass; + + // make fall forwards sometimes + if ( damage < 40 + && damage > target->health + && target->z - inflictor->z > 64*FRACUNIT + && (P_Random ()&1) ) + { + ang += ANG180; + thrust *= 4; + } + + ang >>= ANGLETOFINESHIFT; + target->momx += FixedMul (thrust, finecosine[ang]); + target->momy += FixedMul (thrust, finesine[ang]); + } + + // player specific + if (player) + { + // end of game hell hack + if (target->subsector->sector->special == 11 + && damage >= target->health) + { + damage = target->health - 1; + } + + + // Below certain threshold, + // ignore damage in GOD mode, or with INVUL power. + if ( damage < 1000 + && ( (player->cheats&CF_GODMODE) + || player->powers[pw_invulnerability] ) ) + { + return; + } + + if (player->armortype) + { + if (player->armortype == 1) + saved = damage/3; + else + saved = damage/2; + + if (player->armorpoints <= saved) + { + // armor is used up + saved = player->armorpoints; + player->armortype = 0; + } + player->armorpoints -= saved; + damage -= saved; + } + player->health -= damage; // mirror mobj health here for Dave + if (player->health < 0) + player->health = 0; + + player->attacker = source; + player->damagecount += damage; // add damage after armor / invuln + + if (player->damagecount > 100) + player->damagecount = 100; // teleport stomp does 10k points... + + temp = damage < 100 ? damage : 100; + + if (player == &players[consoleplayer]) + I_Tactile (40,10,40+temp*2); + } + + // do the damage + target->health -= damage; + if (target->health <= 0) + { + P_KillMobj (source, target); + return; + } + + if ( (P_Random () < target->info->painchance) + && !(target->flags&MF_SKULLFLY) ) + { + target->flags |= MF_JUSTHIT; // fight back! + + P_SetMobjState (target, (statenum_t)target->info->painstate); + } + + target->reactiontime = 0; // we're awake now... + + if ( (!target->threshold || target->type == MT_VILE) + && source && source != target + && source->type != MT_VILE) + { + // if not intent on another player, + // chase after this one + target->target = source; + target->threshold = BASETHRESHOLD; + if (target->state == &states[target->info->spawnstate] + && target->info->seestate != S_NULL) + P_SetMobjState (target, (statenum_t)target->info->seestate); + } + +} + +void T_FireFlicker(fireflicker_t* flick) +{ + int amount; + + if (--flick->count) + return; + + amount = (P_Random() & 3) * 16; + + if (flick->sector->lightlevel - amount < flick->minlight) + flick->sector->lightlevel = flick->minlight; + else + flick->sector->lightlevel = flick->maxlight - amount; + + flick->count = 4; +} + + +// +// P_SpawnFireFlicker +// +void P_SpawnFireFlicker(sector_t* sector) +{ + fireflicker_t* flick; + + // Note that we are resetting sector attributes. + // Nothing special about it during gameplay. + sector->special = 0; + + flick = (fireflicker_t*)Z_Malloc(sizeof(*flick), PU_LEVSPEC, 0); + + P_AddThinker(&flick->thinker); + + flick->thinker.function.acp1 = (actionf_p1)T_FireFlicker; + flick->sector = sector; + flick->maxlight = sector->lightlevel; + flick->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel) + 16; + flick->count = 4; +} + + +// +// BROKEN LIGHT FLASHING +// + +// +// T_LightFlash +// Do flashing lights. +// +void T_LightFlash(lightflash_t* flash) +{ + if (--flash->count) + return; + + if (flash->sector->lightlevel == flash->maxlight) + { + flash->sector->lightlevel = flash->minlight; + flash->count = (P_Random() & flash->mintime) + 1; + } + else + { + flash->sector->lightlevel = flash->maxlight; + flash->count = (P_Random() & flash->maxtime) + 1; + } +} + + +// +// P_SpawnLightFlash +// After the map has been loaded, scan each sector +// for specials that spawn thinkers +// +void P_SpawnLightFlash(sector_t* sector) +{ + lightflash_t* flash; + + // nothing special about it during gameplay + sector->special = 0; + + flash = (lightflash_t*)Z_Malloc(sizeof(*flash), PU_LEVSPEC, 0); + + P_AddThinker(&flash->thinker); + + flash->thinker.function.acp1 = (actionf_p1)T_LightFlash; + flash->sector = sector; + flash->maxlight = sector->lightlevel; + + flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel); + flash->maxtime = 64; + flash->mintime = 7; + flash->count = (P_Random() & flash->maxtime) + 1; +} + + +// +// STROBE LIGHT FLASHING +// + +// +// T_StrobeFlash +// +void T_StrobeFlash(strobe_t* flash) +{ + if (--flash->count) + return; + + if (flash->sector->lightlevel == flash->minlight) + { + flash->sector->lightlevel = flash->maxlight; + flash->count = flash->brighttime; + } + else + { + flash->sector->lightlevel = flash->minlight; + flash->count = flash->darktime; + } +} + + +// +// P_SpawnStrobeFlash +// After the map has been loaded, scan each sector +// for specials that spawn thinkers +// +void P_SpawnStrobeFlash(sector_t* sector, int fastOrSlow, int inSync) +{ + strobe_t* flash; + + flash = (strobe_t*)Z_Malloc(sizeof(*flash), PU_LEVSPEC, 0); + + P_AddThinker(&flash->thinker); + + flash->sector = sector; + flash->darktime = fastOrSlow; + flash->brighttime = STROBEBRIGHT; + flash->thinker.function.acp1 = (actionf_p1)T_StrobeFlash; + flash->maxlight = sector->lightlevel; + flash->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel); + + if (flash->minlight == flash->maxlight) + flash->minlight = 0; + + // nothing special about it during gameplay + sector->special = 0; + + if (!inSync) + flash->count = (P_Random() & 7) + 1; + else + flash->count = 1; +} + + +// +// Start strobing lights (usually from a trigger) +// +void EV_StartLightStrobing(line_t* line) +{ + int secnum; + sector_t* sec; + + secnum = -1; + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + sec = §ors[secnum]; + if (sec->specialdata) + continue; + + P_SpawnStrobeFlash(sec, SLOWDARK, 0); + } +} + + +// +// TURN LINE'S TAG LIGHTS OFF +// +void EV_TurnTagLightsOff(line_t* line) +{ + int i; + int j; + int min; + sector_t* sector; + sector_t* tsec; + line_t* templine; + + sector = sectors; + + for (j = 0; j < numsectors; j++, sector++) + { + if (sector->tag == line->tag) + { + min = sector->lightlevel; + for (i = 0; i < sector->linecount; i++) + { + templine = sector->lines[i]; + tsec = getNextSector(templine, sector); + if (!tsec) + continue; + if (tsec->lightlevel < min) + min = tsec->lightlevel; + } + sector->lightlevel = min; + } + } +} + + +// +// TURN LINE'S TAG LIGHTS ON +// +void EV_LightTurnOn(line_t* line, int bright) +{ + int i; + int j; + sector_t* sector; + sector_t* temp; + line_t* templine; + + sector = sectors; + + for (i = 0; i < numsectors; i++, sector++) + { + if (sector->tag == line->tag) + { + // bright = 0 means to search + // for highest light level + // surrounding sector + if (!bright) + { + for (j = 0; j < sector->linecount; j++) + { + templine = sector->lines[j]; + temp = getNextSector(templine, sector); + + if (!temp) + continue; + + if (temp->lightlevel > bright) + bright = temp->lightlevel; + } + } + sector->lightlevel = bright; + } + } +} + + +// +// Spawn glowing light +// +void T_Glow(glow_t* g) +{ + switch (g->direction) + { + case -1: + // DOWN + g->sector->lightlevel -= GLOWSPEED; + if (g->sector->lightlevel <= g->minlight) + { + g->sector->lightlevel += GLOWSPEED; + g->direction = 1; + } + break; + + case 1: + // UP + g->sector->lightlevel += GLOWSPEED; + if (g->sector->lightlevel >= g->maxlight) + { + g->sector->lightlevel -= GLOWSPEED; + g->direction = -1; + } + break; + } +} + + +void P_SpawnGlowingLight(sector_t* sector) +{ + glow_t* g; + + g = (glow_t*)Z_Malloc(sizeof(*g), PU_LEVSPEC, 0); + + P_AddThinker(&g->thinker); + + g->sector = sector; + g->minlight = P_FindMinSurroundingLight(sector, sector->lightlevel); + g->maxlight = sector->lightlevel; + g->thinker.function.acp1 = (actionf_p1)T_Glow; + g->direction = -1; + + sector->special = 0; +} +#define MAXSPECIALCROSS 8 + + +fixed_t tmbbox[4]; +mobj_t* tmthing; +int tmflags; +fixed_t tmx; +fixed_t tmy; + +// If "floatok" doom_true, move would be ok +// if within "tmfloorz - tmceilingz". +doom_boolean floatok; + +fixed_t tmfloorz; +fixed_t tmceilingz; +fixed_t tmdropoffz; + +// keep track of the line that lowers the ceiling, +// so missiles don't explode against sky hack walls +line_t* ceilingline; + +// keep track of special lines as they are hit, +// but don't process them until the move is proven valid + +line_t* spechit[MAXSPECIALCROSS]; +int numspechit; + +mobj_t* linetarget; // who got hit (or 0) +mobj_t* shootthing; + +// Height if not aiming up or down +// ???: use slope for monsters? +fixed_t shootz; + +int la_damage; +fixed_t attackrange; + +fixed_t aimslope; +mobj_t* usething; +doom_boolean crushchange; +doom_boolean nofit; + + +// slopes to top and bottom of target +extern fixed_t topslope; +extern fixed_t bottomslope; + + +// +// TELEPORT MOVE +// + +// +// PIT_StompThing +// +doom_boolean PIT_StompThing(mobj_t* thing) +{ + fixed_t blockdist; + + if (!(thing->flags & MF_SHOOTABLE)) + return doom_true; + + blockdist = thing->radius + tmthing->radius; + + if (doom_abs(thing->x - tmx) >= blockdist + || doom_abs(thing->y - tmy) >= blockdist) + { + // didn't hit it + return doom_true; + } + + // don't clip against self + if (thing == tmthing) + return doom_true; + + // monsters don't stomp things except on boss level + if (!tmthing->player && gamemap != 30) + return doom_false; + + P_DamageMobj(thing, tmthing, tmthing, 10000); + + return doom_true; +} + + +// +// P_TeleportMove +// +doom_boolean P_TeleportMove(mobj_t* thing, fixed_t x, fixed_t y) +{ + int xl; + int xh; + int yl; + int yh; + int bx; + int by; + + subsector_t* newsubsec; + + // kill anything occupying the position + tmthing = thing; + tmflags = thing->flags; + + tmx = x; + tmy = y; + + tmbbox[BOXTOP] = y + tmthing->radius; + tmbbox[BOXBOTTOM] = y - tmthing->radius; + tmbbox[BOXRIGHT] = x + tmthing->radius; + tmbbox[BOXLEFT] = x - tmthing->radius; + + newsubsec = R_PointInSubsector(x, y); + ceilingline = 0; + + // The base floor/ceiling is from the subsector + // that contains the point. + // Any contacted lines the step closer together + // will adjust them. + tmfloorz = tmdropoffz = newsubsec->sector->floorheight; + tmceilingz = newsubsec->sector->ceilingheight; + + validcount++; + numspechit = 0; + + // stomp on any things contacted + xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT; + xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT; + yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT; + yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT; + + for (bx = xl; bx <= xh; bx++) + for (by = yl; by <= yh; by++) + if (!P_BlockThingsIterator(bx, by, PIT_StompThing)) + return doom_false; + + // the move is ok, + // so link the thing into its new position + P_UnsetThingPosition(thing); + + thing->floorz = tmfloorz; + thing->ceilingz = tmceilingz; + thing->x = x; + thing->y = y; + + P_SetThingPosition(thing); + + return doom_true; +} + + +// +// MOVEMENT ITERATOR FUNCTIONS +// + +// +// PIT_CheckLine +// Adjusts tmfloorz and tmceilingz as lines are contacted +// +doom_boolean PIT_CheckLine(line_t* ld) +{ + if (tmbbox[BOXRIGHT] <= ld->bbox[BOXLEFT] + || tmbbox[BOXLEFT] >= ld->bbox[BOXRIGHT] + || tmbbox[BOXTOP] <= ld->bbox[BOXBOTTOM] + || tmbbox[BOXBOTTOM] >= ld->bbox[BOXTOP]) + return doom_true; + + if (P_BoxOnLineSide(tmbbox, ld) != -1) + return doom_true; + + // A line has been hit + + // The moving thing's destination position will cross + // the given line. + // If this should not be allowed, return doom_false. + // If the line is special, keep track of it + // to process later if the move is proven ok. + // NOTE: specials are NOT sorted by order, + // so two special lines that are only 8 pixels apart + // could be crossed in either order. + + if (!ld->backsector) + return doom_false; // one sided line + + if (!(tmthing->flags & MF_MISSILE)) + { + if (ld->flags & ML_BLOCKING) + return doom_false; // explicitly blocking everything + + if (!tmthing->player && ld->flags & ML_BLOCKMONSTERS) + return doom_false; // block monsters only + } + + // set openrange, opentop, openbottom + P_LineOpening(ld); + + // adjust floor / ceiling heights + if (opentop < tmceilingz) + { + tmceilingz = opentop; + ceilingline = ld; + } + + if (openbottom > tmfloorz) + tmfloorz = openbottom; + + if (lowfloor < tmdropoffz) + tmdropoffz = lowfloor; + + // if contacted a special line, add it to the list + if (ld->special) + { + spechit[numspechit] = ld; + numspechit++; + } + + return doom_true; +} + + +// +// PIT_CheckThing +// +doom_boolean PIT_CheckThing(mobj_t* thing) +{ + fixed_t blockdist; + doom_boolean solid; + int damage; + + if (!(thing->flags & (MF_SOLID | MF_SPECIAL | MF_SHOOTABLE))) + return doom_true; + + blockdist = thing->radius + tmthing->radius; + + if (doom_abs(thing->x - tmx) >= blockdist + || doom_abs(thing->y - tmy) >= blockdist) + { + // didn't hit it + return doom_true; + } + + // don't clip against self + if (thing == tmthing) + return doom_true; + + // check for skulls slamming into things + if (tmthing->flags & MF_SKULLFLY) + { + damage = ((P_Random() % 8) + 1) * tmthing->info->damage; + + P_DamageMobj(thing, tmthing, tmthing, damage); + + tmthing->flags &= ~MF_SKULLFLY; + tmthing->momx = tmthing->momy = tmthing->momz = 0; + + P_SetMobjState(tmthing, (statenum_t)tmthing->info->spawnstate); + + return doom_false; // stop moving + } + + + // missiles can hit other things + if (tmthing->flags & MF_MISSILE) + { + // see if it went over / under + if (tmthing->z > thing->z + thing->height) + return doom_true; // overhead + if (tmthing->z + tmthing->height < thing->z) + return doom_true; // underneath + + if (tmthing->target && ( + tmthing->target->type == thing->type || + (tmthing->target->type == MT_KNIGHT && thing->type == MT_BRUISER) || + (tmthing->target->type == MT_BRUISER && thing->type == MT_KNIGHT))) + { + // Don't hit same species as originator. + if (thing == tmthing->target) + return doom_true; + + if (thing->type != MT_PLAYER) + { + // Explode, but do no damage. + // Let players missile other players. + return doom_false; + } + } + + if (!(thing->flags & MF_SHOOTABLE)) + { + // didn't do any damage + return !(thing->flags & MF_SOLID); + } + + // damage / explode + damage = ((P_Random() % 8) + 1) * tmthing->info->damage; + P_DamageMobj(thing, tmthing, tmthing->target, damage); + + // don't traverse any more + return doom_false; + } + + // check for special pickup + if (thing->flags & MF_SPECIAL) + { + solid = thing->flags & MF_SOLID; + if (tmflags & MF_PICKUP) + { + // can remove thing + P_TouchSpecialThing(thing, tmthing); + } + return !solid; + } + + return !(thing->flags & MF_SOLID); +} + + +// +// MOVEMENT CLIPPING +// + +// +// P_CheckPosition +// This is purely informative, nothing is modified +// (except things picked up). +// +// in: +// a mobj_t (can be valid or invalid) +// a position to be checked +// (doesn't need to be related to the mobj_t->x,y) +// +// during: +// special things are touched if MF_PICKUP +// early out on solid lines? +// +// out: +// newsubsec +// floorz +// ceilingz +// tmdropoffz +// the lowest point contacted +// (monsters won't move to a dropoff) +// speciallines[] +// numspeciallines +// +doom_boolean P_CheckPosition(mobj_t* thing, fixed_t x, fixed_t y) +{ + int xl; + int xh; + int yl; + int yh; + int bx; + int by; + subsector_t* newsubsec; + + tmthing = thing; + tmflags = thing->flags; + + tmx = x; + tmy = y; + + tmbbox[BOXTOP] = y + tmthing->radius; + tmbbox[BOXBOTTOM] = y - tmthing->radius; + tmbbox[BOXRIGHT] = x + tmthing->radius; + tmbbox[BOXLEFT] = x - tmthing->radius; + + newsubsec = R_PointInSubsector(x, y); + ceilingline = 0; + + // The base floor / ceiling is from the subsector + // that contains the point. + // Any contacted lines the step closer together + // will adjust them. + tmfloorz = tmdropoffz = newsubsec->sector->floorheight; + tmceilingz = newsubsec->sector->ceilingheight; + + validcount++; + numspechit = 0; + + if (tmflags & MF_NOCLIP) + return doom_true; + + // Check things first, possibly picking things up. + // The bounding box is extended by MAXRADIUS + // because mobj_ts are grouped into mapblocks + // based on their origin point, and can overlap + // into adjacent blocks by up to MAXRADIUS units. + xl = (tmbbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT; + xh = (tmbbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT; + yl = (tmbbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT; + yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT; + + for (bx = xl; bx <= xh; bx++) + for (by = yl; by <= yh; by++) + if (!P_BlockThingsIterator(bx, by, PIT_CheckThing)) + return doom_false; + + // check lines + xl = (tmbbox[BOXLEFT] - bmaporgx) >> MAPBLOCKSHIFT; + xh = (tmbbox[BOXRIGHT] - bmaporgx) >> MAPBLOCKSHIFT; + yl = (tmbbox[BOXBOTTOM] - bmaporgy) >> MAPBLOCKSHIFT; + yh = (tmbbox[BOXTOP] - bmaporgy) >> MAPBLOCKSHIFT; + + for (bx = xl; bx <= xh; bx++) + for (by = yl; by <= yh; by++) + if (!P_BlockLinesIterator(bx, by, PIT_CheckLine)) + return doom_false; + + return doom_true; +} + + +// +// P_TryMove +// Attempt to move to a new position, +// crossing special lines unless MF_TELEPORT is set. +// +doom_boolean P_TryMove(mobj_t* thing, fixed_t x, fixed_t y) +{ + fixed_t oldx; + fixed_t oldy; + int side; + int oldside; + line_t* ld; + + floatok = doom_false; + if (!P_CheckPosition(thing, x, y)) + return doom_false; // solid wall or thing + + if (!(thing->flags & MF_NOCLIP)) + { + if (tmceilingz - tmfloorz < thing->height) + return doom_false; // doesn't fit + + floatok = doom_true; + + if (!(thing->flags & MF_TELEPORT) + && tmceilingz - thing->z < thing->height) + return doom_false; // mobj must lower itself to fit + + if (!(thing->flags & MF_TELEPORT) + && tmfloorz - thing->z > 24 * FRACUNIT) + return doom_false; // too big a step up + + if (!(thing->flags & (MF_DROPOFF | MF_FLOAT)) + && tmfloorz - tmdropoffz > 24 * FRACUNIT) + return doom_false; // don't stand over a dropoff + } + + // the move is ok, + // so link the thing into its new position + P_UnsetThingPosition(thing); + + oldx = thing->x; + oldy = thing->y; + thing->floorz = tmfloorz; + thing->ceilingz = tmceilingz; + thing->x = x; + thing->y = y; + + P_SetThingPosition(thing); + + // if any special lines were hit, do the effect + if (!(thing->flags & (MF_TELEPORT | MF_NOCLIP))) + { + while (numspechit--) + { + // see if the line was crossed + ld = spechit[numspechit]; + side = P_PointOnLineSide(thing->x, thing->y, ld); + oldside = P_PointOnLineSide(oldx, oldy, ld); + if (side != oldside) + { + if (ld->special) + P_CrossSpecialLine((int)(ld - lines), oldside, thing); + } + } + } + + return doom_true; +} + + +// +// P_ThingHeightClip +// Takes a valid thing and adjusts the thing->floorz, +// thing->ceilingz, and possibly thing->z. +// This is called for all nearby monsters +// whenever a sector changes height. +// If the thing doesn't fit, +// the z will be set to the lowest value +// and doom_false will be returned. +// +doom_boolean P_ThingHeightClip(mobj_t* thing) +{ + doom_boolean onfloor; + + onfloor = (thing->z == thing->floorz); + + P_CheckPosition(thing, thing->x, thing->y); + // what about stranding a monster partially off an edge? + + thing->floorz = tmfloorz; + thing->ceilingz = tmceilingz; + + if (onfloor) + { + // walking monsters rise and fall with the floor + thing->z = thing->floorz; + } + else + { + // don't adjust a floating monster unless forced to + if (thing->z + thing->height > thing->ceilingz) + thing->z = thing->ceilingz - thing->height; + } + + if (thing->ceilingz - thing->floorz < thing->height) + return doom_false; + + return doom_true; +} + + +// +// SLIDE MOVE +// Allows the player to slide along any angled walls. +// +fixed_t bestslidefrac; +fixed_t secondslidefrac; + +line_t* bestslideline; +line_t* secondslideline; + +mobj_t* slidemo; + +fixed_t tmxmove; +fixed_t tmymove; + + +// +// P_HitSlideLine +// Adjusts the xmove / ymove +// so that the next move will slide along the wall. +// +void P_HitSlideLine(line_t* ld) +{ + int side; + + angle_t lineangle; + angle_t moveangle; + angle_t deltaangle; + + fixed_t movelen; + fixed_t newlen; + + if (ld->slopetype == ST_HORIZONTAL) + { + tmymove = 0; + return; + } + + if (ld->slopetype == ST_VERTICAL) + { + tmxmove = 0; + return; + } + + side = P_PointOnLineSide(slidemo->x, slidemo->y, ld); + + lineangle = R_PointToAngle2(0, 0, ld->dx, ld->dy); + + if (side == 1) + lineangle += ANG180; + + moveangle = R_PointToAngle2(0, 0, tmxmove, tmymove); + deltaangle = moveangle - lineangle; + + if (deltaangle > ANG180) + deltaangle += ANG180; + + lineangle >>= ANGLETOFINESHIFT; + deltaangle >>= ANGLETOFINESHIFT; + + movelen = P_AproxDistance(tmxmove, tmymove); + newlen = FixedMul(movelen, finecosine[deltaangle]); + + tmxmove = FixedMul(newlen, finecosine[lineangle]); + tmymove = FixedMul(newlen, finesine[lineangle]); +} + + +// +// PTR_SlideTraverse +// +doom_boolean PTR_SlideTraverse(intercept_t* in) +{ + line_t* li; + + if (!in->isaline) + I_Error((char*)"Error: PTR_SlideTraverse: not a line?"); + + li = in->d.line; + + if (!(li->flags & ML_TWOSIDED)) + { + if (P_PointOnLineSide(slidemo->x, slidemo->y, li)) + { + // don't hit the back side + return doom_true; + } + goto isblocking; + } + + // set openrange, opentop, openbottom + P_LineOpening(li); + + if (openrange < slidemo->height) + goto isblocking; // doesn't fit + + if (opentop - slidemo->z < slidemo->height) + goto isblocking; // mobj is too high + + if (openbottom - slidemo->z > 24 * FRACUNIT) + goto isblocking; // too big a step up + + // this line doesn't block movement + return doom_true; + + // the line does block movement, + // see if it is closer than best so far +isblocking: + if (in->frac < bestslidefrac) + { + secondslidefrac = bestslidefrac; + secondslideline = bestslideline; + bestslidefrac = in->frac; + bestslideline = li; + } + + return doom_false; // stop +} + + +// +// P_SlideMove +// The momx / momy move is bad, so try to slide +// along a wall. +// Find the first line hit, move flush to it, +// and slide along it +// +// This is a kludgy mess. +// +void P_SlideMove(mobj_t* mo) +{ + fixed_t leadx; + fixed_t leady; + fixed_t trailx; + fixed_t traily; + fixed_t newx; + fixed_t newy; + int hitcount; + + slidemo = mo; + hitcount = 0; + +retry: + if (++hitcount == 3) + goto stairstep; // don't loop forever + + + // trace along the three leading corners + if (mo->momx > 0) + { + leadx = mo->x + mo->radius; + trailx = mo->x - mo->radius; + } + else + { + leadx = mo->x - mo->radius; + trailx = mo->x + mo->radius; + } + + if (mo->momy > 0) + { + leady = mo->y + mo->radius; + traily = mo->y - mo->radius; + } + else + { + leady = mo->y - mo->radius; + traily = mo->y + mo->radius; + } + + bestslidefrac = FRACUNIT + 1; + + P_PathTraverse(leadx, leady, leadx + mo->momx, leady + mo->momy, + PT_ADDLINES, PTR_SlideTraverse); + P_PathTraverse(trailx, leady, trailx + mo->momx, leady + mo->momy, + PT_ADDLINES, PTR_SlideTraverse); + P_PathTraverse(leadx, traily, leadx + mo->momx, traily + mo->momy, + PT_ADDLINES, PTR_SlideTraverse); + + // move up to the wall + if (bestslidefrac == FRACUNIT + 1) + { + // the move most have hit the middle, so stairstep +stairstep: + if (!P_TryMove(mo, mo->x, mo->y + mo->momy)) + P_TryMove(mo, mo->x + mo->momx, mo->y); + return; + } + + // fudge a bit to make sure it doesn't hit + bestslidefrac -= 0x800; + if (bestslidefrac > 0) + { + newx = FixedMul(mo->momx, bestslidefrac); + newy = FixedMul(mo->momy, bestslidefrac); + + if (!P_TryMove(mo, mo->x + newx, mo->y + newy)) + goto stairstep; + } + + // Now continue along the wall. + // First calculate remainder. + bestslidefrac = FRACUNIT - (bestslidefrac + 0x800); + + if (bestslidefrac > FRACUNIT) + bestslidefrac = FRACUNIT; + + if (bestslidefrac <= 0) + return; + + tmxmove = FixedMul(mo->momx, bestslidefrac); + tmymove = FixedMul(mo->momy, bestslidefrac); + + P_HitSlideLine(bestslideline); // clip the moves + + mo->momx = tmxmove; + mo->momy = tmymove; + + if (!P_TryMove(mo, mo->x + tmxmove, mo->y + tmymove)) + { + goto retry; + } +} + + +// +// P_LineAttack +// + +// +// PTR_AimTraverse +// Sets linetaget and aimslope when a target is aimed at. +// +doom_boolean +PTR_AimTraverse(intercept_t* in) +{ + line_t* li; + mobj_t* th; + fixed_t slope; + fixed_t thingtopslope; + fixed_t thingbottomslope; + fixed_t dist; + + if (in->isaline) + { + li = in->d.line; + + if (!(li->flags & ML_TWOSIDED)) + return doom_false; // stop + + // Crosses a two sided line. + // A two sided line will restrict + // the possible target ranges. + P_LineOpening(li); + + if (openbottom >= opentop) + return doom_false; // stop + + dist = FixedMul(attackrange, in->frac); + + if (li->frontsector->floorheight != li->backsector->floorheight) + { + slope = FixedDiv(openbottom - shootz, dist); + if (slope > bottomslope) + bottomslope = slope; + } + + if (li->frontsector->ceilingheight != li->backsector->ceilingheight) + { + slope = FixedDiv(opentop - shootz, dist); + if (slope < topslope) + topslope = slope; + } + + if (topslope <= bottomslope) + return doom_false; // stop + + return doom_true; // shot continues + } + + // shoot a thing + th = in->d.thing; + if (th == shootthing) + return doom_true; // can't shoot self + + if (!(th->flags & MF_SHOOTABLE)) + return doom_true; // corpse or something + + // check angles to see if the thing can be aimed at + dist = FixedMul(attackrange, in->frac); + thingtopslope = FixedDiv(th->z + th->height - shootz, dist); + + if (thingtopslope < bottomslope) + return doom_true; // shot over the thing + + thingbottomslope = FixedDiv(th->z - shootz, dist); + + if (thingbottomslope > topslope) + return doom_true; // shot under the thing + + // this thing can be hit! + if (thingtopslope > topslope) + thingtopslope = topslope; + + if (thingbottomslope < bottomslope) + thingbottomslope = bottomslope; + + aimslope = (thingtopslope + thingbottomslope) / 2; + linetarget = th; + + return doom_false; // don't go any farther +} + + +// +// PTR_ShootTraverse +// +doom_boolean PTR_ShootTraverse(intercept_t* in) +{ + fixed_t x; + fixed_t y; + fixed_t z; + fixed_t frac; + + line_t* li; + + mobj_t* th; + + fixed_t slope; + fixed_t dist; + fixed_t thingtopslope; + fixed_t thingbottomslope; + + if (in->isaline) + { + li = in->d.line; + + if (li->special) + P_ShootSpecialLine(shootthing, li); + + if (!(li->flags & ML_TWOSIDED)) + goto hitline; + + // crosses a two sided line + P_LineOpening(li); + + dist = FixedMul(attackrange, in->frac); + + if (li->frontsector->floorheight != li->backsector->floorheight) + { + slope = FixedDiv(openbottom - shootz, dist); + if (slope > aimslope) + goto hitline; + } + + if (li->frontsector->ceilingheight != li->backsector->ceilingheight) + { + slope = FixedDiv(opentop - shootz, dist); + if (slope < aimslope) + goto hitline; + } + + // shot continues + return doom_true; + + + // hit line +hitline: + // position a bit closer + frac = in->frac - FixedDiv(4 * FRACUNIT, attackrange); + x = trace.x + FixedMul(trace.dx, frac); + y = trace.y + FixedMul(trace.dy, frac); + z = shootz + FixedMul(aimslope, FixedMul(frac, attackrange)); + + if (li->frontsector->ceilingpic == skyflatnum) + { + // don't shoot the sky! + if (z > li->frontsector->ceilingheight) + return doom_false; + + // it's a sky hack wall + if (li->backsector && li->backsector->ceilingpic == skyflatnum) + return doom_false; + } + + // Spawn bullet puffs. + P_SpawnPuff(x, y, z); + + // don't go any farther + return doom_false; + } + + // shoot a thing + th = in->d.thing; + if (th == shootthing) + return doom_true; // can't shoot self + + if (!(th->flags & MF_SHOOTABLE)) + return doom_true; // corpse or something + + // check angles to see if the thing can be aimed at + dist = FixedMul(attackrange, in->frac); + thingtopslope = FixedDiv(th->z + th->height - shootz, dist); + + if (thingtopslope < aimslope) + return doom_true; // shot over the thing + + thingbottomslope = FixedDiv(th->z - shootz, dist); + + if (thingbottomslope > aimslope) + return doom_true; // shot under the thing + + + // hit thing + // position a bit closer + frac = in->frac - FixedDiv(10 * FRACUNIT, attackrange); + + x = trace.x + FixedMul(trace.dx, frac); + y = trace.y + FixedMul(trace.dy, frac); + z = shootz + FixedMul(aimslope, FixedMul(frac, attackrange)); + + // Spawn bullet puffs or blod spots, + // depending on target type. + if (in->d.thing->flags & MF_NOBLOOD) + P_SpawnPuff(x, y, z); + else + P_SpawnBlood(x, y, z, la_damage); + + if (la_damage) + P_DamageMobj(th, shootthing, shootthing, la_damage); + + // don't go any farther + return doom_false; +} + + +// +// P_AimLineAttack +// +fixed_t P_AimLineAttack(mobj_t* t1, angle_t angle, fixed_t distance) +{ + fixed_t x2; + fixed_t y2; + + angle >>= ANGLETOFINESHIFT; + shootthing = t1; + + x2 = t1->x + (distance >> FRACBITS) * finecosine[angle]; + y2 = t1->y + (distance >> FRACBITS) * finesine[angle]; + shootz = t1->z + (t1->height >> 1) + 8 * FRACUNIT; + + // can't shoot outside view angles + topslope = 100 * FRACUNIT / 160; + bottomslope = -100 * FRACUNIT / 160; + + attackrange = distance; + linetarget = 0; + + P_PathTraverse(t1->x, t1->y, + x2, y2, + PT_ADDLINES | PT_ADDTHINGS, + PTR_AimTraverse); + + if (linetarget) + return aimslope; + + return 0; +} + + +// +// P_LineAttack +// If damage == 0, it is just a test trace +// that will leave linetarget set. +// +void P_LineAttack(mobj_t* t1, angle_t angle, fixed_t distance, fixed_t slope, int damage) +{ + fixed_t x2; + fixed_t y2; + + angle >>= ANGLETOFINESHIFT; + shootthing = t1; + la_damage = damage; + x2 = t1->x + (distance >> FRACBITS) * finecosine[angle]; + y2 = t1->y + (distance >> FRACBITS) * finesine[angle]; + shootz = t1->z + (t1->height >> 1) + 8 * FRACUNIT; + attackrange = distance; + aimslope = slope; + + P_PathTraverse(t1->x, t1->y, + x2, y2, + PT_ADDLINES | PT_ADDTHINGS, + PTR_ShootTraverse); +} + + +// +// USE LINES +// +doom_boolean PTR_UseTraverse(intercept_t* in) +{ + int side; + + if (!in->d.line->special) + { + P_LineOpening(in->d.line); + if (openrange <= 0) + { + S_StartSound(usething, sfx_noway); + + // can't use through a wall + return doom_false; + } + // not a special line, but keep checking + return doom_true; + } + + side = 0; + if (P_PointOnLineSide(usething->x, usething->y, in->d.line) == 1) + side = 1; + + P_UseSpecialLine(usething, in->d.line, side); + + // can't use for than one special line in a row + return doom_false; +} + + +// +// P_UseLines +// Looks for special lines in front of the player to activate. +// +void P_UseLines(player_t* player) +{ + int angle; + fixed_t x1; + fixed_t y1; + fixed_t x2; + fixed_t y2; + + usething = player->mo; + + angle = player->mo->angle >> ANGLETOFINESHIFT; + + x1 = player->mo->x; + y1 = player->mo->y; + x2 = x1 + (USERANGE >> FRACBITS) * finecosine[angle]; + y2 = y1 + (USERANGE >> FRACBITS) * finesine[angle]; + + P_PathTraverse(x1, y1, x2, y2, PT_ADDLINES, PTR_UseTraverse); +} + + +// +// RADIUS ATTACK +// +mobj_t* bombsource; +mobj_t* bombspot; +int bombdamage; + + +// +// PIT_RadiusAttack +// "bombsource" is the creature +// that caused the explosion at "bombspot". +// +doom_boolean PIT_RadiusAttack(mobj_t* thing) +{ + fixed_t dx; + fixed_t dy; + fixed_t dist; + + if (!(thing->flags & MF_SHOOTABLE)) + return doom_true; + + // Boss spider and cyborg + // take no damage from concussion. + if (thing->type == MT_CYBORG + || thing->type == MT_SPIDER) + return doom_true; + + dx = doom_abs(thing->x - bombspot->x); + dy = doom_abs(thing->y - bombspot->y); + + dist = dx > dy ? dx : dy; + dist = (dist - thing->radius) >> FRACBITS; + + if (dist < 0) + dist = 0; + + if (dist >= bombdamage) + return doom_true; // out of range + + if (P_CheckSight(thing, bombspot)) + { + // must be in direct path + P_DamageMobj(thing, bombspot, bombsource, bombdamage - dist); + } + + return doom_true; +} + + +// +// P_RadiusAttack +// Source is the creature that caused the explosion at spot. +// +void P_RadiusAttack(mobj_t* spot, mobj_t* source, int damage) +{ + int x; + int y; + + int xl; + int xh; + int yl; + int yh; + + fixed_t dist; + + dist = (damage + MAXRADIUS) << FRACBITS; + yh = (spot->y + dist - bmaporgy) >> MAPBLOCKSHIFT; + yl = (spot->y - dist - bmaporgy) >> MAPBLOCKSHIFT; + xh = (spot->x + dist - bmaporgx) >> MAPBLOCKSHIFT; + xl = (spot->x - dist - bmaporgx) >> MAPBLOCKSHIFT; + bombspot = spot; + bombsource = source; + bombdamage = damage; + + for (y = yl; y <= yh; y++) + for (x = xl; x <= xh; x++) + P_BlockThingsIterator(x, y, PIT_RadiusAttack); +} + + +// +// SECTOR HEIGHT CHANGING +// After modifying a sectors floor or ceiling height, +// call this routine to adjust the positions +// of all things that touch the sector. +// +// If anything doesn't fit anymore, doom_true will be returned. +// If crunch is doom_true, they will take damage +// as they are being crushed. +// If Crunch is doom_false, you should set the sector height back +// the way it was and call P_ChangeSector again +// to undo the changes. +// + +// +// PIT_ChangeSector +// +doom_boolean PIT_ChangeSector(mobj_t* thing) +{ + mobj_t* mo; + + if (P_ThingHeightClip(thing)) + { + // keep checking + return doom_true; + } + + + // crunch bodies to giblets + if (thing->health <= 0) + { + P_SetMobjState(thing, S_GIBS); + + thing->flags &= ~MF_SOLID; + thing->height = 0; + thing->radius = 0; + + // keep checking + return doom_true; + } + + // crunch dropped items + if (thing->flags & MF_DROPPED) + { + P_RemoveMobj(thing); + + // keep checking + return doom_true; + } + + if (!(thing->flags & MF_SHOOTABLE)) + { + // assume it is bloody gibs or something + return doom_true; + } + + nofit = doom_true; + + if (crushchange && !(leveltime & 3)) + { + P_DamageMobj(thing, 0, 0, 10); + + // spray blood in a random direction + mo = P_SpawnMobj(thing->x, + thing->y, + thing->z + thing->height / 2, MT_BLOOD); + + mo->momx = (P_Random() - P_Random()) << 12; + mo->momy = (P_Random() - P_Random()) << 12; + } + + // keep checking (crush other things) + return doom_true; +} + + +// +// P_ChangeSector +// +doom_boolean P_ChangeSector(sector_t* sector, doom_boolean crunch) +{ + int x; + int y; + + nofit = doom_false; + crushchange = crunch; + + // re-check heights for all things near the moving sector + for (x = sector->blockbox[BOXLEFT]; x <= sector->blockbox[BOXRIGHT]; x++) + for (y = sector->blockbox[BOXBOTTOM]; y <= sector->blockbox[BOXTOP]; y++) + P_BlockThingsIterator(x, y, PIT_ChangeSector); + + return nofit; +} +fixed_t opentop; +fixed_t openbottom; +fixed_t openrange; +fixed_t lowfloor; +intercept_t intercepts[MAXINTERCEPTS]; +intercept_t* intercept_p; +divline_t trace; +doom_boolean earlyout; +int ptflags; + + +// +// P_AproxDistance +// Gives an estimation of distance (not exact) +// +fixed_t P_AproxDistance(fixed_t dx, fixed_t dy) +{ + dx = doom_abs(dx); + dy = doom_abs(dy); + if (dx < dy) + return dx + dy - (dx >> 1); + return dx + dy - (dy >> 1); +} + + +// +// P_PointOnLineSide +// Returns 0 or 1 +// +int P_PointOnLineSide(fixed_t x, fixed_t y, line_t* line) +{ + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + if (!line->dx) + { + if (x <= line->v1->x) + return line->dy > 0; + + return line->dy < 0; + } + if (!line->dy) + { + if (y <= line->v1->y) + return line->dx < 0; + + return line->dx > 0; + } + + dx = (x - line->v1->x); + dy = (y - line->v1->y); + + left = FixedMul(line->dy >> FRACBITS, dx); + right = FixedMul(dy, line->dx >> FRACBITS); + + if (right < left) + return 0; // front side + return 1; // back side +} + + +// +// P_BoxOnLineSide +// Considers the line to be infinite +// Returns side 0 or 1, -1 if box crosses the line. +// +int P_BoxOnLineSide(fixed_t* tmbox, line_t* ld) +{ + int p1; + int p2; + + switch (ld->slopetype) + { + case ST_HORIZONTAL: + p1 = tmbox[BOXTOP] > ld->v1->y; + p2 = tmbox[BOXBOTTOM] > ld->v1->y; + if (ld->dx < 0) + { + p1 ^= 1; + p2 ^= 1; + } + break; + + case ST_VERTICAL: + p1 = tmbox[BOXRIGHT] < ld->v1->x; + p2 = tmbox[BOXLEFT] < ld->v1->x; + if (ld->dy < 0) + { + p1 ^= 1; + p2 ^= 1; + } + break; + + case ST_POSITIVE: + p1 = P_PointOnLineSide(tmbox[BOXLEFT], tmbox[BOXTOP], ld); + p2 = P_PointOnLineSide(tmbox[BOXRIGHT], tmbox[BOXBOTTOM], ld); + break; + + case ST_NEGATIVE: + p1 = P_PointOnLineSide(tmbox[BOXRIGHT], tmbox[BOXTOP], ld); + p2 = P_PointOnLineSide(tmbox[BOXLEFT], tmbox[BOXBOTTOM], ld); + break; + } + + if (p1 == p2) + return p1; + return -1; +} + + +// +// P_PointOnDivlineSide +// Returns 0 or 1. +// +int P_PointOnDivlineSide(fixed_t x, fixed_t y, divline_t* line) +{ + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + if (!line->dx) + { + if (x <= line->x) + return line->dy > 0; + + return line->dy < 0; + } + if (!line->dy) + { + if (y <= line->y) + return line->dx < 0; + + return line->dx > 0; + } + + dx = (x - line->x); + dy = (y - line->y); + + // try to quickly decide by looking at sign bits + if ((line->dy ^ line->dx ^ dx ^ dy) & 0x80000000) + { + if ((line->dy ^ dx) & 0x80000000) + return 1; // (left is negative) + return 0; + } + + left = FixedMul(line->dy >> 8, dx >> 8); + right = FixedMul(dy >> 8, line->dx >> 8); + + if (right < left) + return 0; // front side + return 1; // back side +} + + +// +// P_MakeDivline +// +void P_MakeDivline(line_t* li, divline_t* dl) +{ + dl->x = li->v1->x; + dl->y = li->v1->y; + dl->dx = li->dx; + dl->dy = li->dy; +} + + +// +// P_InterceptVector +// Returns the fractional intercept point +// along the first divline. +// This is only called by the addthings +// and addlines traversers. +// +fixed_t P_InterceptVector(divline_t* v2, divline_t* v1) +{ + fixed_t frac; + fixed_t num; + fixed_t den; + + den = FixedMul(v1->dy >> 8, v2->dx) - FixedMul(v1->dx >> 8, v2->dy); + + if (den == 0) + return 0; + // I_Error ("P_InterceptVector: parallel"); + + num = + FixedMul((v1->x - v2->x) >> 8, v1->dy) + + FixedMul((v2->y - v1->y) >> 8, v1->dx); + + frac = FixedDiv(num, den); + + return frac; +} + + +// +// P_LineOpening +// Sets opentop and openbottom to the window +// through a two sided line. +// OPTIMIZE: keep this precalculated +// +void P_LineOpening(line_t* linedef) +{ + sector_t* front; + sector_t* back; + + if (linedef->sidenum[1] == -1) + { + // single sided line + openrange = 0; + return; + } + + front = linedef->frontsector; + back = linedef->backsector; + + if (front->ceilingheight < back->ceilingheight) + opentop = front->ceilingheight; + else + opentop = back->ceilingheight; + + if (front->floorheight > back->floorheight) + { + openbottom = front->floorheight; + lowfloor = back->floorheight; + } + else + { + openbottom = back->floorheight; + lowfloor = front->floorheight; + } + + openrange = opentop - openbottom; +} + + +// +// THING POSITION SETTING +// + +// +// P_UnsetThingPosition +// Unlinks a thing from block map and sectors. +// On each position change, BLOCKMAP and other +// lookups maintaining lists ot things inside +// these structures need to be updated. +// +void P_UnsetThingPosition(mobj_t* thing) +{ + int blockx; + int blocky; + + if (!(thing->flags & MF_NOSECTOR)) + { + // inert things don't need to be in blockmap? + // unlink from subsector + if (thing->snext) + thing->snext->sprev = thing->sprev; + + if (thing->sprev) + thing->sprev->snext = thing->snext; + else + thing->subsector->sector->thinglist = thing->snext; + } + + if (!(thing->flags & MF_NOBLOCKMAP)) + { + // inert things don't need to be in blockmap + // unlink from block map + if (thing->bnext) + thing->bnext->bprev = thing->bprev; + + if (thing->bprev) + thing->bprev->bnext = thing->bnext; + else + { + blockx = (thing->x - bmaporgx) >> MAPBLOCKSHIFT; + blocky = (thing->y - bmaporgy) >> MAPBLOCKSHIFT; + + if (blockx >= 0 && blockx < bmapwidth + && blocky >= 0 && blocky < bmapheight) + { + blocklinks[blocky * bmapwidth + blockx] = thing->bnext; + } + } + } +} + + +// +// P_SetThingPosition +// Links a thing into both a block and a subsector +// based on it's x y. +// Sets thing->subsector properly +// +void P_SetThingPosition(mobj_t* thing) +{ + subsector_t* ss; + sector_t* sec; + int blockx; + int blocky; + mobj_t** link; + + + // link into subsector + ss = R_PointInSubsector(thing->x, thing->y); + thing->subsector = ss; + + if (!(thing->flags & MF_NOSECTOR)) + { + // invisible things don't go into the sector links + sec = ss->sector; + + thing->sprev = 0; + thing->snext = sec->thinglist; + + if (sec->thinglist) + sec->thinglist->sprev = thing; + + sec->thinglist = thing; + } + + // link into blockmap + if (!(thing->flags & MF_NOBLOCKMAP)) + { + // inert things don't need to be in blockmap + blockx = (thing->x - bmaporgx) >> MAPBLOCKSHIFT; + blocky = (thing->y - bmaporgy) >> MAPBLOCKSHIFT; + + if (blockx >= 0 + && blockx < bmapwidth + && blocky >= 0 + && blocky < bmapheight) + { + link = &blocklinks[blocky * bmapwidth + blockx]; + thing->bprev = 0; + thing->bnext = *link; + if (*link) + (*link)->bprev = thing; + + *link = thing; + } + else + { + // thing is off the map + thing->bnext = thing->bprev = 0; + } + } +} + + +// +// BLOCK MAP ITERATORS +// For each line/thing in the given mapblock, +// call the passed PIT_* function. +// If the function returns doom_false, +// exit with doom_false without checking anything else. +// + +// +// P_BlockLinesIterator +// The validcount flags are used to avoid checking lines +// that are marked in multiple mapblocks, +// so increment validcount before the first call +// to P_BlockLinesIterator, then make one or more calls +// to it. +// +doom_boolean P_BlockLinesIterator(int x, int y, doom_boolean(*func)(line_t*)) +{ + int offset; + short* list; + line_t* ld; + + if (x < 0 + || y < 0 + || x >= bmapwidth + || y >= bmapheight) + { + return doom_true; + } + + offset = y * bmapwidth + x; + + offset = *(blockmap + offset); + + for (list = blockmaplump + offset; *list != -1; list++) + { + ld = &lines[*list]; + + if (ld->validcount == validcount) + continue; // line has already been checked + + ld->validcount = validcount; + + if (!func(ld)) + return doom_false; + } + return doom_true; // everything was checked +} + + +// +// P_BlockThingsIterator +// +doom_boolean P_BlockThingsIterator(int x, int y, doom_boolean(*func)(mobj_t*)) +{ + mobj_t* mobj; + + if (x < 0 + || y < 0 + || x >= bmapwidth + || y >= bmapheight) + { + return doom_true; + } + + + for (mobj = blocklinks[y * bmapwidth + x]; + mobj; + mobj = mobj->bnext) + { + if (!func(mobj)) + return doom_false; + } + return doom_true; +} + + +// +// INTERCEPT ROUTINES +// + +// +// PIT_AddLineIntercepts. +// Looks for lines in the given block +// that intercept the given trace +// to add to the intercepts list. +// +// A line is crossed if its endpoints +// are on opposite sides of the trace. +// Returns doom_true if earlyout and a solid line hit. +// +doom_boolean PIT_AddLineIntercepts(line_t* ld) +{ + int s1; + int s2; + fixed_t frac; + divline_t dl; + + // avoid precision problems with two routines + if (trace.dx > FRACUNIT * 16 + || trace.dy > FRACUNIT * 16 + || trace.dx < -FRACUNIT * 16 + || trace.dy < -FRACUNIT * 16) + { + s1 = P_PointOnDivlineSide(ld->v1->x, ld->v1->y, &trace); + s2 = P_PointOnDivlineSide(ld->v2->x, ld->v2->y, &trace); + } + else + { + s1 = P_PointOnLineSide(trace.x, trace.y, ld); + s2 = P_PointOnLineSide(trace.x + trace.dx, trace.y + trace.dy, ld); + } + + if (s1 == s2) + return doom_true; // line isn't crossed + + // hit the line + P_MakeDivline(ld, &dl); + frac = P_InterceptVector(&trace, &dl); + + if (frac < 0) + return doom_true; // behind source + + // try to early out the check + if (earlyout + && frac < FRACUNIT + && !ld->backsector) + { + return doom_false; // stop checking + } + + intercept_p->frac = frac; + intercept_p->isaline = doom_true; + intercept_p->d.line = ld; + intercept_p++; + + return doom_true; // continue +} + + +// +// PIT_AddThingIntercepts +// +doom_boolean PIT_AddThingIntercepts(mobj_t* thing) +{ + fixed_t x1; + fixed_t y1; + fixed_t x2; + fixed_t y2; + + int s1; + int s2; + + doom_boolean tracepositive; + + divline_t dl; + + fixed_t frac; + + tracepositive = (trace.dx ^ trace.dy) > 0; + + // check a corner to corner crossection for hit + if (tracepositive) + { + x1 = thing->x - thing->radius; + y1 = thing->y + thing->radius; + + x2 = thing->x + thing->radius; + y2 = thing->y - thing->radius; + } + else + { + x1 = thing->x - thing->radius; + y1 = thing->y - thing->radius; + + x2 = thing->x + thing->radius; + y2 = thing->y + thing->radius; + } + + s1 = P_PointOnDivlineSide(x1, y1, &trace); + s2 = P_PointOnDivlineSide(x2, y2, &trace); + + if (s1 == s2) + return doom_true; // line isn't crossed + + dl.x = x1; + dl.y = y1; + dl.dx = x2 - x1; + dl.dy = y2 - y1; + + frac = P_InterceptVector(&trace, &dl); + + if (frac < 0) + return doom_true; // behind source + + intercept_p->frac = frac; + intercept_p->isaline = doom_false; + intercept_p->d.thing = thing; + intercept_p++; + + return doom_true; // keep going +} + + +// +// P_TraverseIntercepts +// Returns doom_true if the traverser function returns doom_true +// for all lines. +// +doom_boolean P_TraverseIntercepts(traverser_t func, fixed_t maxfrac) +{ + int count; + fixed_t dist; + intercept_t* scan; + intercept_t* in; + + count = (int)(intercept_p - intercepts); + + in = 0; // shut up compiler warning + + while (count--) + { + dist = DOOM_MAXINT; + for (scan = intercepts; scan < intercept_p; scan++) + { + if (scan->frac < dist) + { + dist = scan->frac; + in = scan; + } + } + + if (dist > maxfrac) + return doom_true; // checked everything in range + +#if 0 // UNUSED + { + // don't check these yet, there may be others inserted + in = scan = intercepts; + for (scan = intercepts; scan < intercept_p; scan++) + if (scan->frac > maxfrac) + *in++ = *scan; + intercept_p = in; + return doom_false; + } +#endif + + if (!func(in)) + return doom_false; // don't bother going farther + + in->frac = DOOM_MAXINT; + } + + return doom_true; // everything was traversed +} + + +// +// P_PathTraverse +// Traces a line from x1,y1 to x2,y2, +// calling the traverser function for each. +// Returns doom_true if the traverser function returns doom_true +// for all lines. +// +doom_boolean P_PathTraverse(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2, int flags, doom_boolean(*trav) (intercept_t*)) +{ + fixed_t xt1; + fixed_t yt1; + fixed_t xt2; + fixed_t yt2; + + fixed_t xstep; + fixed_t ystep; + + fixed_t partial; + + fixed_t xintercept; + fixed_t yintercept; + + int mapx; + int mapy; + + int mapxstep; + int mapystep; + + int count; + + earlyout = flags & PT_EARLYOUT; + + validcount++; + intercept_p = intercepts; + + if (((x1 - bmaporgx) & (MAPBLOCKSIZE - 1)) == 0) + x1 += FRACUNIT; // don't side exactly on a line + + if (((y1 - bmaporgy) & (MAPBLOCKSIZE - 1)) == 0) + y1 += FRACUNIT; // don't side exactly on a line + + trace.x = x1; + trace.y = y1; + trace.dx = x2 - x1; + trace.dy = y2 - y1; + + x1 -= bmaporgx; + y1 -= bmaporgy; + xt1 = x1 >> MAPBLOCKSHIFT; + yt1 = y1 >> MAPBLOCKSHIFT; + + x2 -= bmaporgx; + y2 -= bmaporgy; + xt2 = x2 >> MAPBLOCKSHIFT; + yt2 = y2 >> MAPBLOCKSHIFT; + + if (xt2 > xt1) + { + mapxstep = 1; + partial = FRACUNIT - ((x1 >> MAPBTOFRAC) & (FRACUNIT - 1)); + ystep = FixedDiv(y2 - y1, doom_abs(x2 - x1)); + } + else if (xt2 < xt1) + { + mapxstep = -1; + partial = (x1 >> MAPBTOFRAC) & (FRACUNIT - 1); + ystep = FixedDiv(y2 - y1, doom_abs(x2 - x1)); + } + else + { + mapxstep = 0; + partial = FRACUNIT; + ystep = 256 * FRACUNIT; + } + + yintercept = (y1 >> MAPBTOFRAC) + FixedMul(partial, ystep); + + + if (yt2 > yt1) + { + mapystep = 1; + partial = FRACUNIT - ((y1 >> MAPBTOFRAC) & (FRACUNIT - 1)); + xstep = FixedDiv(x2 - x1, doom_abs(y2 - y1)); + } + else if (yt2 < yt1) + { + mapystep = -1; + partial = (y1 >> MAPBTOFRAC) & (FRACUNIT - 1); + xstep = FixedDiv(x2 - x1, doom_abs(y2 - y1)); + } + else + { + mapystep = 0; + partial = FRACUNIT; + xstep = 256 * FRACUNIT; + } + xintercept = (x1 >> MAPBTOFRAC) + FixedMul(partial, xstep); + + // Step through map blocks. + // Count is present to prevent a round off error + // from skipping the break. + mapx = xt1; + mapy = yt1; + + for (count = 0; count < 64; count++) + { + if (flags & PT_ADDLINES) + { + if (!P_BlockLinesIterator(mapx, mapy, PIT_AddLineIntercepts)) + return doom_false; // early out + } + + if (flags & PT_ADDTHINGS) + { + if (!P_BlockThingsIterator(mapx, mapy, PIT_AddThingIntercepts)) + return doom_false; // early out + } + + if (mapx == xt2 + && mapy == yt2) + { + break; + } + + if ((yintercept >> FRACBITS) == mapy) + { + yintercept += ystep; + mapx += mapxstep; + } + else if ((xintercept >> FRACBITS) == mapx) + { + xintercept += xstep; + mapy += mapystep; + } + } + + // go through the sorted list + return P_TraverseIntercepts(trav, FRACUNIT); +} +#define STOPSPEED 0x1000 +#define FRICTION 0xe800 + + +// +// P_SetMobjState +// Returns doom_true if the mobj is still present. +// +mapthing_t itemrespawnque[ITEMQUESIZE]; +int itemrespawntime[ITEMQUESIZE]; +int iquehead; +int iquetail; + + +extern fixed_t attackrange; + + +void G_PlayerReborn(int player); +void P_SpawnMapThing(mapthing_t* mthing); + + +doom_boolean P_SetMobjState(mobj_t* mobj, statenum_t state) +{ + state_t* st; + + do + { + if (state == S_NULL) + { + mobj->state = (state_t*)S_NULL; + P_RemoveMobj(mobj); + return doom_false; + } + + st = &states[state]; + mobj->state = st; + mobj->tics = st->tics; + mobj->sprite = st->sprite; + mobj->frame = st->frame; + + // Modified handling. + // Call action functions when the state is set + if (st->action.acp1) + st->action.acp1(mobj); + + state = st->nextstate; + } while (!mobj->tics); + + return doom_true; +} + + +// +// P_ExplodeMissile +// +void P_ExplodeMissile(mobj_t* mo) +{ + mo->momx = mo->momy = mo->momz = 0; + + P_SetMobjState(mo, (statenum_t)mobjinfo[mo->type].deathstate); + + mo->tics -= P_Random() & 3; + + if (mo->tics < 1) + mo->tics = 1; + + mo->flags &= ~MF_MISSILE; + + if (mo->info->deathsound) + S_StartSound(mo, mo->info->deathsound); +} + + +// +// P_XYMovement +// +void P_XYMovement(mobj_t* mo) +{ + fixed_t ptryx; + fixed_t ptryy; + player_t* player; + fixed_t xmove; + fixed_t ymove; + + if (!mo->momx && !mo->momy) + { + if (mo->flags & MF_SKULLFLY) + { + // the skull slammed into something + mo->flags &= ~MF_SKULLFLY; + mo->momx = mo->momy = mo->momz = 0; + + P_SetMobjState(mo, (statenum_t)mo->info->spawnstate); + } + return; + } + + player = mo->player; + + if (mo->momx > MAXMOVE) + mo->momx = MAXMOVE; + else if (mo->momx < -MAXMOVE) + mo->momx = -MAXMOVE; + + if (mo->momy > MAXMOVE) + mo->momy = MAXMOVE; + else if (mo->momy < -MAXMOVE) + mo->momy = -MAXMOVE; + + xmove = mo->momx; + ymove = mo->momy; + + do + { + if (xmove > MAXMOVE / 2 || ymove > MAXMOVE / 2) + { + ptryx = mo->x + xmove / 2; + ptryy = mo->y + ymove / 2; + xmove >>= 1; + ymove >>= 1; + } + else + { + ptryx = mo->x + xmove; + ptryy = mo->y + ymove; + xmove = ymove = 0; + } + + if (!P_TryMove(mo, ptryx, ptryy)) + { + // blocked move + if (mo->player) + { // try to slide along it + P_SlideMove(mo); + } + else if (mo->flags & MF_MISSILE) + { + // explode a missile + if (ceilingline && + ceilingline->backsector && + ceilingline->backsector->ceilingpic == skyflatnum) + { + // Hack to prevent missiles exploding + // against the sky. + // Does not handle sky floors. + P_RemoveMobj(mo); + return; + } + P_ExplodeMissile(mo); + } + else + mo->momx = mo->momy = 0; + } + } while (xmove || ymove); + + // slow down + if (player && player->cheats & CF_NOMOMENTUM) + { + // debug option for no sliding at all + mo->momx = mo->momy = 0; + return; + } + + if (mo->flags & (MF_MISSILE | MF_SKULLFLY)) + return; // no friction for missiles ever + + if (mo->z > mo->floorz) + return; // no friction when airborne + + if (mo->flags & MF_CORPSE) + { + // do not stop sliding + // if halfway off a step with some momentum + if (mo->momx > FRACUNIT / 4 + || mo->momx < -FRACUNIT / 4 + || mo->momy > FRACUNIT / 4 + || mo->momy < -FRACUNIT / 4) + { + if (mo->floorz != mo->subsector->sector->floorheight) + return; + } + } + + if (mo->momx > -STOPSPEED + && mo->momx < STOPSPEED + && mo->momy > -STOPSPEED + && mo->momy < STOPSPEED + && (!player + || (player->cmd.forwardmove == 0 + && player->cmd.sidemove == 0))) + { + // if in a walking frame, stop moving + if (player && (unsigned)((player->mo->state - states) - S_PLAY_RUN1) < 4) + P_SetMobjState(player->mo, S_PLAY); + + mo->momx = 0; + mo->momy = 0; + } + else + { + mo->momx = FixedMul(mo->momx, FRICTION); + mo->momy = FixedMul(mo->momy, FRICTION); + } +} + + +// +// P_ZMovement +// +void P_ZMovement(mobj_t* mo) +{ + fixed_t dist; + fixed_t delta; + + // check for smooth step up + if (mo->player && mo->z < mo->floorz) + { + mo->player->viewheight -= mo->floorz - mo->z; + + mo->player->deltaviewheight + = (VIEWHEIGHT - mo->player->viewheight) >> 3; + } + + // adjust height + mo->z += mo->momz; + + if (mo->flags & MF_FLOAT + && mo->target) + { + // float down towards target if too close + if (!(mo->flags & MF_SKULLFLY) + && !(mo->flags & MF_INFLOAT)) + { + dist = P_AproxDistance(mo->x - mo->target->x, + mo->y - mo->target->y); + + delta = (mo->target->z + (mo->height >> 1)) - mo->z; + + if (delta < 0 && dist < -(delta * 3)) + mo->z -= FLOATSPEED; + else if (delta > 0 && dist < (delta * 3)) + mo->z += FLOATSPEED; + } + + } + + // clip movement + if (mo->z <= mo->floorz) + { + // hit the floor + + // Note (id): + // somebody left this after the setting momz to 0, + // kinda useless there. + if (mo->flags & MF_SKULLFLY) + { + // the skull slammed into something + mo->momz = -mo->momz; + } + + if (mo->momz < 0) + { + if (mo->player + && mo->momz < -GRAVITY * 8) + { + // Squat down. + // Decrease viewheight for a moment + // after hitting the ground (hard), + // and utter appropriate sound. + mo->player->deltaviewheight = mo->momz >> 3; + S_StartSound(mo, sfx_oof); + } + mo->momz = 0; + } + mo->z = mo->floorz; + + if ((mo->flags & MF_MISSILE) + && !(mo->flags & MF_NOCLIP)) + { + P_ExplodeMissile(mo); + return; + } + } + else if (!(mo->flags & MF_NOGRAVITY)) + { + if (mo->momz == 0) + mo->momz = -GRAVITY * 2; + else + mo->momz -= GRAVITY; + } + + if (mo->z + mo->height > mo->ceilingz) + { + // hit the ceiling + if (mo->momz > 0) + mo->momz = 0; + { + mo->z = mo->ceilingz - mo->height; + } + + if (mo->flags & MF_SKULLFLY) + { // the skull slammed into something + mo->momz = -mo->momz; + } + + if ((mo->flags & MF_MISSILE) + && !(mo->flags & MF_NOCLIP)) + { + P_ExplodeMissile(mo); + return; + } + } +} + + +// +// P_NightmareRespawn +// +void P_NightmareRespawn(mobj_t* mobj) +{ + fixed_t x; + fixed_t y; + fixed_t z; + subsector_t* ss; + mobj_t* mo; + mapthing_t* mthing; + + x = mobj->spawnpoint.x << FRACBITS; + y = mobj->spawnpoint.y << FRACBITS; + + // somthing is occupying it's position? + if (!P_CheckPosition(mobj, x, y)) + return; // no respwan + + // spawn a teleport fog at old spot + // because of removal of the body? + mo = P_SpawnMobj(mobj->x, + mobj->y, + mobj->subsector->sector->floorheight, MT_TFOG); + // initiate teleport sound + S_StartSound(mo, sfx_telept); + + // spawn a teleport fog at the new spot + ss = R_PointInSubsector(x, y); + + mo = P_SpawnMobj(x, y, ss->sector->floorheight, MT_TFOG); + + S_StartSound(mo, sfx_telept); + + // spawn the new monster + mthing = &mobj->spawnpoint; + + // spawn it + if (mobj->info->flags & MF_SPAWNCEILING) + z = ONCEILINGZ; + else + z = ONFLOORZ; + + // inherit attributes from deceased one + mo = P_SpawnMobj(x, y, z, mobj->type); + mo->spawnpoint = mobj->spawnpoint; + mo->angle = ANG45 * (mthing->angle / 45); + + if (mthing->options & MTF_AMBUSH) + mo->flags |= MF_AMBUSH; + + mo->reactiontime = 18; + + // remove the old monster, + P_RemoveMobj(mobj); +} + + +// +// P_MobjThinker +// +void P_MobjThinker(mobj_t* mobj) +{ + // momentum movement + if (mobj->momx + || mobj->momy + || (mobj->flags & MF_SKULLFLY)) + { + P_XYMovement(mobj); + + // FIXME: decent NOP/0/Nil function pointer please. + if (mobj->thinker.function.acv == (actionf_v)(-1)) + return; // mobj was removed + } + if ((mobj->z != mobj->floorz) + || mobj->momz) + { + P_ZMovement(mobj); + + // FIXME: decent NOP/0/Nil function pointer please. + if (mobj->thinker.function.acv == (actionf_v)(-1)) + return; // mobj was removed + } + + + // cycle through states, + // calling action functions at transitions + if (mobj->tics != -1) + { + mobj->tics--; + + // you can cycle through multiple states in a tic + if (!mobj->tics) + if (!P_SetMobjState(mobj, mobj->state->nextstate)) + return; // freed itself + } + else + { + // check for nightmare respawn + if (!(mobj->flags & MF_COUNTKILL)) + return; + + if (!respawnmonsters) + return; + + mobj->movecount++; + + if (mobj->movecount < 12 * 35) + return; + + if (leveltime & 31) + return; + + if (P_Random() > 4) + return; + + P_NightmareRespawn(mobj); + } +} + + +// +// P_SpawnMobj +// +mobj_t* P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) +{ + mobj_t* mobj; + state_t* st; + mobjinfo_t* info; + + mobj = (mobj_t*)Z_Malloc(sizeof(*mobj), PU_LEVEL, 0); + doom_memset(mobj, 0, sizeof(*mobj)); + info = &mobjinfo[type]; + + mobj->type = type; + mobj->info = info; + mobj->x = x; + mobj->y = y; + mobj->radius = info->radius; + mobj->height = info->height; + mobj->flags = info->flags; + mobj->health = info->spawnhealth; + + if (gameskill != sk_nightmare) + mobj->reactiontime = info->reactiontime; + + mobj->lastlook = P_Random() % MAXPLAYERS; + // do not set the state with P_SetMobjState, + // because action routines can not be called yet + st = &states[info->spawnstate]; + + mobj->state = st; + mobj->tics = st->tics; + mobj->sprite = st->sprite; + mobj->frame = st->frame; + + // set subsector and/or block links + P_SetThingPosition(mobj); + + mobj->floorz = mobj->subsector->sector->floorheight; + mobj->ceilingz = mobj->subsector->sector->ceilingheight; + + if (z == ONFLOORZ) + mobj->z = mobj->floorz; + else if (z == ONCEILINGZ) + mobj->z = mobj->ceilingz - mobj->info->height; + else + mobj->z = z; + + mobj->thinker.function.acp1 = (actionf_p1)P_MobjThinker; + + P_AddThinker(&mobj->thinker); + + return mobj; +} + + +// +// P_RemoveMobj +// +void P_RemoveMobj(mobj_t* mobj) +{ + if ((mobj->flags & MF_SPECIAL) + && !(mobj->flags & MF_DROPPED) + && (mobj->type != MT_INV) + && (mobj->type != MT_INS)) + { + itemrespawnque[iquehead] = mobj->spawnpoint; + itemrespawntime[iquehead] = leveltime; + iquehead = (iquehead + 1) & (ITEMQUESIZE - 1); + + // lose one off the end? + if (iquehead == iquetail) + iquetail = (iquetail + 1) & (ITEMQUESIZE - 1); + } + + // unlink from sector and block lists + P_UnsetThingPosition(mobj); + + // stop any playing sound + S_StopSound(mobj); + + // free block + P_RemoveThinker((thinker_t*)mobj); +} + + +// +// P_RespawnSpecials +// +void P_RespawnSpecials(void) +{ + fixed_t x; + fixed_t y; + fixed_t z; + + subsector_t* ss; + mobj_t* mo; + mapthing_t* mthing; + + int i; + + // only respawn items in deathmatch + if (deathmatch != 2) + return; // + + // nothing left to respawn? + if (iquehead == iquetail) + return; + + // wait at least 30 seconds + if (leveltime - itemrespawntime[iquetail] < 30 * 35) + return; + + mthing = &itemrespawnque[iquetail]; + + x = mthing->x << FRACBITS; + y = mthing->y << FRACBITS; + + // spawn a teleport fog at the new spot + ss = R_PointInSubsector(x, y); + mo = P_SpawnMobj(x, y, ss->sector->floorheight, MT_IFOG); + S_StartSound(mo, sfx_itmbk); + + // find which type to spawn + for (i = 0; i < NUMMOBJTYPES; i++) + { + if (mthing->type == mobjinfo[i].doomednum) + break; + } + + // spawn it + if (mobjinfo[i].flags & MF_SPAWNCEILING) + z = ONCEILINGZ; + else + z = ONFLOORZ; + + mo = P_SpawnMobj(x, y, z, (mobjtype_t)i); + mo->spawnpoint = *mthing; + mo->angle = ANG45 * (mthing->angle / 45); + + // pull it from the que + iquetail = (iquetail + 1) & (ITEMQUESIZE - 1); +} + + +// +// P_SpawnPlayer +// Called when a player is spawned on the level. +// Most of the player structure stays unchanged +// between levels. +// +void P_SpawnPlayer(mapthing_t* mthing) +{ + player_t* p; + fixed_t x; + fixed_t y; + fixed_t z; + + mobj_t* mobj; + + int i; + + // not playing? + if (!playeringame[mthing->type - 1]) + return; + + p = &players[mthing->type - 1]; + + if (p->playerstate == PST_REBORN) + G_PlayerReborn(mthing->type - 1); + + x = mthing->x << FRACBITS; + y = mthing->y << FRACBITS; + z = ONFLOORZ; + mobj = P_SpawnMobj(x, y, z, MT_PLAYER); + + // set color translations for player sprites + if (mthing->type > 1) + mobj->flags |= (mthing->type - 1) << MF_TRANSSHIFT; + + mobj->angle = ANG45 * (mthing->angle / 45); + mobj->player = p; + mobj->health = p->health; + + p->mo = mobj; + p->playerstate = PST_LIVE; + p->refire = 0; + p->message = 0; + p->damagecount = 0; + p->bonuscount = 0; + p->extralight = 0; + p->fixedcolormap = 0; + p->viewheight = VIEWHEIGHT; + + // setup gun psprite + P_SetupPsprites(p); + + // give all cards in death match mode + if (deathmatch) + for (i = 0; i < NUMCARDS; i++) + p->cards[i] = doom_true; + + if (mthing->type - 1 == consoleplayer) + { + // wake up the status bar + ST_Start(); + // wake up the heads up text + HU_Start(); + } +} + + +// +// P_SpawnMapThing +// The fields of the mapthing should +// already be in host byte order. +// +void P_SpawnMapThing(mapthing_t* mthing) +{ + int i; + int bit; + mobj_t* mobj; + fixed_t x; + fixed_t y; + fixed_t z; + + // count deathmatch start positions + if (mthing->type == 11) + { + if (deathmatch_p < &deathmatchstarts[10]) + { + doom_memcpy(deathmatch_p, mthing, sizeof(*mthing)); + deathmatch_p++; + } + return; + } + + // check for players specially + if (mthing->type <= 4) + { + // save spots for respawning in network games + playerstarts[mthing->type - 1] = *mthing; + if (!deathmatch) + P_SpawnPlayer(mthing); + + return; + } + + // check for apropriate skill level + if (!netgame && (mthing->options & 16)) + return; + + if (gameskill == sk_baby) + bit = 1; + else if (gameskill == sk_nightmare) + bit = 4; + else + bit = 1 << (gameskill - 1); + + if (!(mthing->options & bit)) + return; + + // find which type to spawn + for (i = 0; i < NUMMOBJTYPES; i++) + if (mthing->type == mobjinfo[i].doomednum) + break; + + if (i == NUMMOBJTYPES) + { + //I_Error("Error: P_SpawnMapThing: Unknown type %i at (%i, %i)", + // mthing->type, + // mthing->x, mthing->y); + + + doom_strcpy(error_buf, "Error: P_SpawnMapThing: Unknown type "); + doom_concat(error_buf, doom_itoa(mthing->type, 10)); + doom_concat(error_buf, " at ("); + doom_concat(error_buf, doom_itoa(mthing->x, 10)); + doom_concat(error_buf, ", "); + doom_concat(error_buf, doom_itoa(mthing->y, 10)); + doom_concat(error_buf, ")"); + I_Error(error_buf); + } + + // don't spawn keycards and players in deathmatch + if (deathmatch && mobjinfo[i].flags & MF_NOTDMATCH) + return; + + // don't spawn any monsters if -nomonsters + if (nomonsters + && (i == MT_SKULL + || (mobjinfo[i].flags & MF_COUNTKILL))) + { + return; + } + + // spawn it + x = mthing->x << FRACBITS; + y = mthing->y << FRACBITS; + + if (mobjinfo[i].flags & MF_SPAWNCEILING) + z = ONCEILINGZ; + else + z = ONFLOORZ; + + mobj = P_SpawnMobj(x, y, z, (mobjtype_t)i); + mobj->spawnpoint = *mthing; + + if (mobj->tics > 0) + mobj->tics = 1 + (P_Random() % mobj->tics); + if (mobj->flags & MF_COUNTKILL) + totalkills++; + if (mobj->flags & MF_COUNTITEM) + totalitems++; + + mobj->angle = ANG45 * (mthing->angle / 45); + if (mthing->options & MTF_AMBUSH) + mobj->flags |= MF_AMBUSH; +} + + +// +// GAME SPAWN FUNCTIONS +// + +// +// P_SpawnPuff +// +void P_SpawnPuff(fixed_t x, fixed_t y, fixed_t z) +{ + mobj_t* th; + + z += ((P_Random() - P_Random()) << 10); + + th = P_SpawnMobj(x, y, z, MT_PUFF); + th->momz = FRACUNIT; + th->tics -= P_Random() & 3; + + if (th->tics < 1) + th->tics = 1; + + // don't make punches spark on the wall + if (attackrange == MELEERANGE) + P_SetMobjState(th, S_PUFF3); +} + + +// +// P_SpawnBlood +// +void P_SpawnBlood(fixed_t x, fixed_t y, fixed_t z, int damage) +{ + mobj_t* th; + + z += ((P_Random() - P_Random()) << 10); + th = P_SpawnMobj(x, y, z, MT_BLOOD); + th->momz = FRACUNIT * 2; + th->tics -= P_Random() & 3; + + if (th->tics < 1) + th->tics = 1; + + if (damage <= 12 && damage >= 9) + P_SetMobjState(th, S_BLOOD2); + else if (damage < 9) + P_SetMobjState(th, S_BLOOD3); +} + + +// +// P_CheckMissileSpawn +// Moves the missile forward a bit +// and possibly explodes it right there. +// +void P_CheckMissileSpawn(mobj_t* th) +{ + th->tics -= P_Random() & 3; + if (th->tics < 1) + th->tics = 1; + + // move a little forward so an angle can + // be computed if it immediately explodes + th->x += (th->momx >> 1); + th->y += (th->momy >> 1); + th->z += (th->momz >> 1); + + if (!P_TryMove(th, th->x, th->y)) + P_ExplodeMissile(th); +} + + +// +// P_SpawnMissile +// +mobj_t* P_SpawnMissile(mobj_t* source, mobj_t* dest, mobjtype_t type) +{ + mobj_t* th; + angle_t an; + int dist; + + th = P_SpawnMobj(source->x, + source->y, + source->z + 4 * 8 * FRACUNIT, type); + + if (th->info->seesound) + S_StartSound(th, th->info->seesound); + + th->target = source; // where it came from + an = R_PointToAngle2(source->x, source->y, dest->x, dest->y); + + // fuzzy player + if (dest->flags & MF_SHADOW) + an += (P_Random() - P_Random()) << 20; + + th->angle = an; + an >>= ANGLETOFINESHIFT; + th->momx = FixedMul(th->info->speed, finecosine[an]); + th->momy = FixedMul(th->info->speed, finesine[an]); + + dist = P_AproxDistance(dest->x - source->x, dest->y - source->y); + dist = dist / th->info->speed; + + if (dist < 1) + dist = 1; + + th->momz = (dest->z - source->z) / dist; + P_CheckMissileSpawn(th); + + return th; +} + + +// +// P_SpawnPlayerMissile +// Tries to aim at a nearby monster +// +void P_SpawnPlayerMissile(mobj_t* source, mobjtype_t type) +{ + mobj_t* th; + angle_t an; + + fixed_t x; + fixed_t y; + fixed_t z; + fixed_t slope; + + // see which target is to be aimed at + an = source->angle; + slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT); + + if (!linetarget) + { + an += 1 << 26; + slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT); + + if (!linetarget) + { + an -= 2 << 26; + slope = P_AimLineAttack(source, an, 16 * 64 * FRACUNIT); + } + + if (!linetarget) + { + an = source->angle; + slope = 0; + } + } + + x = source->x; + y = source->y; + z = source->z + 4 * 8 * FRACUNIT; + + th = P_SpawnMobj(x, y, z, type); + + if (th->info->seesound) + S_StartSound(th, th->info->seesound); + + th->target = source; + th->angle = an; + th->momx = FixedMul(th->info->speed, + finecosine[an >> ANGLETOFINESHIFT]); + th->momy = FixedMul(th->info->speed, + finesine[an >> ANGLETOFINESHIFT]); + th->momz = FixedMul(th->info->speed, slope); + + P_CheckMissileSpawn(th); +} +plat_t* activeplats[MAXPLATS]; + + +// +// Move a plat up and down +// +void T_PlatRaise(plat_t* plat) +{ + result_e res; + + switch (plat->status) + { + case up: + res = T_MovePlane(plat->sector, + plat->speed, + plat->high, + plat->crush, 0, 1); + + if (plat->type == raiseAndChange + || plat->type == raiseToNearestAndChange) + { + if (!(leveltime & 7)) + S_StartSound((mobj_t*)&plat->sector->soundorg, + sfx_stnmov); + } + + if (res == crushed && (!plat->crush)) + { + plat->count = plat->wait; + plat->status = down; + S_StartSound((mobj_t*)&plat->sector->soundorg, + sfx_pstart); + } + else + { + if (res == pastdest) + { + plat->count = plat->wait; + plat->status = waiting; + S_StartSound((mobj_t*)&plat->sector->soundorg, + sfx_pstop); + + switch (plat->type) + { + case blazeDWUS: + case downWaitUpStay: + P_RemoveActivePlat(plat); + break; + + case raiseAndChange: + case raiseToNearestAndChange: + P_RemoveActivePlat(plat); + break; + + default: + break; + } + } + } + break; + + case down: + res = T_MovePlane(plat->sector, plat->speed, plat->low, doom_false, 0, -1); + + if (res == pastdest) + { + plat->count = plat->wait; + plat->status = waiting; + S_StartSound((mobj_t*)&plat->sector->soundorg, sfx_pstop); + } + break; + + case waiting: + if (!--plat->count) + { + if (plat->sector->floorheight == plat->low) + plat->status = up; + else + plat->status = down; + S_StartSound((mobj_t*)&plat->sector->soundorg, sfx_pstart); + } + + case in_stasis: + break; + } +} + + +// +// Do Platforms +// "amount" is only used for SOME platforms. +// +int EV_DoPlat(line_t* line, plattype_e type, int amount) +{ + plat_t* plat; + int secnum; + int rtn; + sector_t* sec; + + secnum = -1; + rtn = 0; + + // Activate all plats that are in_stasis + switch (type) + { + case perpetualRaise: + P_ActivateInStasis(line->tag); + break; + default: + break; + } + + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + sec = §ors[secnum]; + + if (sec->specialdata) + continue; + + // Find lowest & highest floors around sector + rtn = 1; + plat = (plat_t*)Z_Malloc(sizeof(*plat), PU_LEVSPEC, 0); + P_AddThinker(&plat->thinker); + + plat->type = type; + plat->sector = sec; + plat->sector->specialdata = plat; + plat->thinker.function.acp1 = (actionf_p1)T_PlatRaise; + plat->crush = doom_false; + plat->tag = line->tag; + + switch (type) + { + case raiseToNearestAndChange: + plat->speed = PLATSPEED / 2; + sec->floorpic = sides[line->sidenum[0]].sector->floorpic; + plat->high = P_FindNextHighestFloor(sec, sec->floorheight); + plat->wait = 0; + plat->status = up; + // NO MORE DAMAGE, IF APPLICABLE + sec->special = 0; + + S_StartSound((mobj_t*)&sec->soundorg, sfx_stnmov); + break; + + case raiseAndChange: + plat->speed = PLATSPEED / 2; + sec->floorpic = sides[line->sidenum[0]].sector->floorpic; + plat->high = sec->floorheight + amount * FRACUNIT; + plat->wait = 0; + plat->status = up; + + S_StartSound((mobj_t*)&sec->soundorg, sfx_stnmov); + break; + + case downWaitUpStay: + plat->speed = PLATSPEED * 4; + plat->low = P_FindLowestFloorSurrounding(sec); + + if (plat->low > sec->floorheight) + plat->low = sec->floorheight; + + plat->high = sec->floorheight; + plat->wait = 35 * PLATWAIT; + plat->status = down; + S_StartSound((mobj_t*)&sec->soundorg, sfx_pstart); + break; + + case blazeDWUS: + plat->speed = PLATSPEED * 8; + plat->low = P_FindLowestFloorSurrounding(sec); + + if (plat->low > sec->floorheight) + plat->low = sec->floorheight; + + plat->high = sec->floorheight; + plat->wait = 35 * PLATWAIT; + plat->status = down; + S_StartSound((mobj_t*)&sec->soundorg, sfx_pstart); + break; + + case perpetualRaise: + plat->speed = PLATSPEED; + plat->low = P_FindLowestFloorSurrounding(sec); + + if (plat->low > sec->floorheight) + plat->low = sec->floorheight; + + plat->high = P_FindHighestFloorSurrounding(sec); + + if (plat->high < sec->floorheight) + plat->high = sec->floorheight; + + plat->wait = 35 * PLATWAIT; + plat->status = (plat_e)(P_Random() & 1); + + S_StartSound((mobj_t*)&sec->soundorg, sfx_pstart); + break; + } + P_AddActivePlat(plat); + } + + return rtn; +} + +void P_ActivateInStasis(int tag) +{ + int i; + + for (i = 0; i < MAXPLATS; i++) + if (activeplats[i] + && (activeplats[i])->tag == tag + && (activeplats[i])->status == in_stasis) + { + (activeplats[i])->status = (activeplats[i])->oldstatus; + (activeplats[i])->thinker.function.acp1 = (actionf_p1)T_PlatRaise; + } +} + +void EV_StopPlat(line_t* line) +{ + int j; + + for (j = 0; j < MAXPLATS; j++) + if (activeplats[j] + && ((activeplats[j])->status != in_stasis) + && ((activeplats[j])->tag == line->tag)) + { + (activeplats[j])->oldstatus = (activeplats[j])->status; + (activeplats[j])->status = in_stasis; + (activeplats[j])->thinker.function.acv = (actionf_v)0; + } +} + +void P_AddActivePlat(plat_t* plat) +{ + int i; + + for (i = 0; i < MAXPLATS; i++) + if (activeplats[i] == 0) + { + activeplats[i] = plat; + return; + } + I_Error((char*)"Error: P_AddActivePlat: no more plats!"); +} + +void P_RemoveActivePlat(plat_t* plat) +{ + int i; + for (i = 0; i < MAXPLATS; i++) + if (plat == activeplats[i]) + { + (activeplats[i])->sector->specialdata = 0; + P_RemoveThinker(&(activeplats[i])->thinker); + activeplats[i] = 0; + + return; + } + I_Error((char*)"Error: P_RemoveActivePlat: can't find plat!"); +} +#define LOWERSPEED (FRACUNIT*6) +#define RAISESPEED (FRACUNIT*6) + +#define WEAPONBOTTOM (128*FRACUNIT) +#define WEAPONTOP (32*FRACUNIT) + +// plasma cells for a bfg attack +#define BFGCELLS 40 + + +fixed_t swingx; +fixed_t swingy; +fixed_t bulletslope; + + +// +// P_SetPsprite +// +void P_SetPsprite(player_t* player, int position, statenum_t stnum) +{ + pspdef_t* psp; + state_t* state; + + psp = &player->psprites[position]; + + do + { + if (!stnum) + { + // object removed itself + psp->state = 0; + break; + } + + state = &states[stnum]; + psp->state = state; + psp->tics = state->tics; // could be 0 + + if (state->misc1) + { + // coordinate set + psp->sx = state->misc1 << FRACBITS; + psp->sy = state->misc2 << FRACBITS; + } + + // Call action routine. + // Modified handling. + if (state->action.acp2) + { + state->action.acp2(player, psp); + if (!psp->state) + break; + } + + stnum = psp->state->nextstate; + + } while (!psp->tics); + // an initial state of 0 could cycle through +} + + +// +// P_BringUpWeapon +// Starts bringing the pending weapon up +// from the bottom of the screen. +// Uses player +// +void P_BringUpWeapon(player_t* player) +{ + statenum_t newstate; + + if (player->pendingweapon == wp_nochange) + player->pendingweapon = player->readyweapon; + + if (player->pendingweapon == wp_chainsaw) + S_StartSound(player->mo, sfx_sawup); + + newstate = (statenum_t)weaponinfo[player->pendingweapon].upstate; + + player->pendingweapon = wp_nochange; + player->psprites[ps_weapon].sy = WEAPONBOTTOM; + + P_SetPsprite(player, ps_weapon, newstate); +} + + +// +// P_CheckAmmo +// Returns doom_true if there is enough ammo to shoot. +// If not, selects the next weapon to use. +// +doom_boolean P_CheckAmmo(player_t* player) +{ + ammotype_t ammo; + int count; + + ammo = weaponinfo[player->readyweapon].ammo; + + // Minimal amount for one shot varies. + if (player->readyweapon == wp_bfg) + count = BFGCELLS; + else if (player->readyweapon == wp_supershotgun) + count = 2; // Double barrel. + else + count = 1; // Regular. + + // Some do not need ammunition anyway. + // Return if current ammunition sufficient. + if (ammo == am_noammo || player->ammo[ammo] >= count) + return doom_true; + + // Out of ammo, pick a weapon to change to. + // Preferences are set here. + do + { + if (player->weaponowned[wp_plasma] + && player->ammo[am_cell] + && (gamemode != shareware)) + { + player->pendingweapon = wp_plasma; + } + else if (player->weaponowned[wp_supershotgun] + && player->ammo[am_shell] > 2 + && (gamemode == commercial)) + { + player->pendingweapon = wp_supershotgun; + } + else if (player->weaponowned[wp_chaingun] + && player->ammo[am_clip]) + { + player->pendingweapon = wp_chaingun; + } + else if (player->weaponowned[wp_shotgun] + && player->ammo[am_shell]) + { + player->pendingweapon = wp_shotgun; + } + else if (player->ammo[am_clip]) + { + player->pendingweapon = wp_pistol; + } + else if (player->weaponowned[wp_chainsaw]) + { + player->pendingweapon = wp_chainsaw; + } + else if (player->weaponowned[wp_missile] + && player->ammo[am_misl]) + { + player->pendingweapon = wp_missile; + } + else if (player->weaponowned[wp_bfg] + && player->ammo[am_cell] > 40 + && (gamemode != shareware)) + { + player->pendingweapon = wp_bfg; + } + else + { + // If everything fails. + player->pendingweapon = wp_fist; + } + + } while (player->pendingweapon == wp_nochange); + + // Now set appropriate weapon overlay. + P_SetPsprite(player, + ps_weapon, + (statenum_t)weaponinfo[player->readyweapon].downstate); + + return doom_false; +} + + +// +// P_FireWeapon. +// +void P_FireWeapon(player_t* player) +{ + statenum_t newstate; + + if (!P_CheckAmmo(player)) + return; + + P_SetMobjState(player->mo, S_PLAY_ATK1); + newstate = (statenum_t)weaponinfo[player->readyweapon].atkstate; + P_SetPsprite(player, ps_weapon, newstate); + P_NoiseAlert(player->mo, player->mo); + + // [pd] Stop gun bobbing when shooting + pspdef_t* psp; + psp = &player->psprites[ps_weapon]; + psp->sx = FRACUNIT; + psp->sy = WEAPONTOP; +} + + +// +// P_DropWeapon +// Player died, so put the weapon away. +// +void P_DropWeapon(player_t* player) +{ + P_SetPsprite(player, + ps_weapon, + (statenum_t)weaponinfo[player->readyweapon].downstate); +} + + +// +// A_WeaponReady +// The player can fire the weapon +// or change to another weapon at this time. +// Follows after getting weapon up, +// or after previous attack/fire sequence. +// +void A_WeaponReady(player_t* player, pspdef_t* psp) +{ + statenum_t newstate; + int angle; + + // get out of attack state + if (player->mo->state == &states[S_PLAY_ATK1] + || player->mo->state == &states[S_PLAY_ATK2]) + { + P_SetMobjState(player->mo, S_PLAY); + } + + if (player->readyweapon == wp_chainsaw + && psp->state == &states[S_SAW]) + { + S_StartSound(player->mo, sfx_sawidl); + } + + // check for change + // if player is dead, put the weapon away + if (player->pendingweapon != wp_nochange || !player->health) + { + // change weapon + // (pending weapon should allready be validated) + newstate = (statenum_t)weaponinfo[player->readyweapon].downstate; + P_SetPsprite(player, ps_weapon, newstate); + return; + } + + // check for fire + // the missile launcher and bfg do not auto fire + if (player->cmd.buttons & BT_ATTACK) + { + if (!player->attackdown + || (player->readyweapon != wp_missile + && player->readyweapon != wp_bfg)) + { + player->attackdown = doom_true; + P_FireWeapon(player); + return; + } + } + else + player->attackdown = doom_false; + + // bob the weapon based on movement speed + angle = (128 * leveltime) & FINEMASK; + psp->sx = FRACUNIT + FixedMul(player->bob, finecosine[angle]); + angle &= FINEANGLES / 2 - 1; + psp->sy = WEAPONTOP + FixedMul(player->bob, finesine[angle]); +} + + +// +// A_ReFire +// The player can re-fire the weapon +// without lowering it entirely. +// +void A_ReFire(player_t* player, pspdef_t* psp) +{ + // check for fire + // (if a weaponchange is pending, let it go through instead) + if ((player->cmd.buttons & BT_ATTACK) + && player->pendingweapon == wp_nochange + && player->health) + { + player->refire++; + P_FireWeapon(player); + } + else + { + player->refire = 0; + P_CheckAmmo(player); + } +} + + +void A_CheckReload(player_t* player, pspdef_t* psp) +{ + P_CheckAmmo(player); +} + + +// +// A_Lower +// Lowers current weapon, +// and changes weapon at bottom. +// +void A_Lower(player_t* player, pspdef_t* psp) +{ + psp->sy += LOWERSPEED; + + // Is already down. + if (psp->sy < WEAPONBOTTOM) + return; + + // Player is dead. + if (player->playerstate == PST_DEAD) + { + psp->sy = WEAPONBOTTOM; + + // don't bring weapon back up + return; + } + + // The old weapon has been lowered off the screen, + // so change the weapon and start raising it + if (!player->health) + { + // Player is dead, so keep the weapon off screen. + P_SetPsprite(player, ps_weapon, S_NULL); + return; + } + + player->readyweapon = player->pendingweapon; + + P_BringUpWeapon(player); +} + + +// +// A_Raise +// +void A_Raise(player_t* player, pspdef_t* psp) +{ + statenum_t newstate; + + psp->sy -= RAISESPEED; + + if (psp->sy > WEAPONTOP) + return; + + psp->sy = WEAPONTOP; + + // The weapon has been raised all the way, + // so change to the ready state. + newstate = (statenum_t)weaponinfo[player->readyweapon].readystate; + + P_SetPsprite(player, ps_weapon, newstate); +} + + +// +// A_GunFlash +// +void A_GunFlash(player_t* player, pspdef_t* psp) +{ + P_SetMobjState(player->mo, S_PLAY_ATK2); + P_SetPsprite(player, ps_flash, (statenum_t)weaponinfo[player->readyweapon].flashstate); +} + + +// +// WEAPON ATTACKS +// + +// +// A_Punch +// +void A_Punch(player_t* player, pspdef_t* psp) +{ + angle_t angle; + int damage; + int slope; + + damage = (P_Random() % 10 + 1) << 1; + + if (player->powers[pw_strength]) + damage *= 10; + + angle = player->mo->angle; + angle += (P_Random() - P_Random()) << 18; + slope = P_AimLineAttack(player->mo, angle, MELEERANGE); + P_LineAttack(player->mo, angle, MELEERANGE, slope, damage); + + // turn to face target + if (linetarget) + { + S_StartSound(player->mo, sfx_punch); + player->mo->angle = R_PointToAngle2(player->mo->x, + player->mo->y, + linetarget->x, + linetarget->y); + } +} + + +// +// A_Saw +// +void A_Saw(player_t* player, pspdef_t* psp) +{ + angle_t angle; + int damage; + int slope; + + damage = 2 * (P_Random() % 10 + 1); + angle = player->mo->angle; + angle += (P_Random() - P_Random()) << 18; + + // use meleerange + 1 se the puff doesn't skip the flash + slope = P_AimLineAttack(player->mo, angle, MELEERANGE + 1); + P_LineAttack(player->mo, angle, MELEERANGE + 1, slope, damage); + + if (!linetarget) + { + S_StartSound(player->mo, sfx_sawful); + return; + } + S_StartSound(player->mo, sfx_sawhit); + + // turn to face target + angle = R_PointToAngle2(player->mo->x, player->mo->y, + linetarget->x, linetarget->y); + if (angle - player->mo->angle > ANG180) + { + if (angle - player->mo->angle < -ANG90 / 20) + player->mo->angle = angle + ANG90 / 21; + else + player->mo->angle -= ANG90 / 20; + } + else + { + if (angle - player->mo->angle > ANG90 / 20) + player->mo->angle = angle - ANG90 / 21; + else + player->mo->angle += ANG90 / 20; + } + player->mo->flags |= MF_JUSTATTACKED; +} + + +// +// A_FireMissile +// +void A_FireMissile(player_t* player, pspdef_t* psp) +{ + player->ammo[weaponinfo[player->readyweapon].ammo]--; + P_SpawnPlayerMissile(player->mo, MT_ROCKET); +} + + +// +// A_FireBFG +// +void A_FireBFG(player_t* player, pspdef_t* psp) +{ + player->ammo[weaponinfo[player->readyweapon].ammo] -= BFGCELLS; + P_SpawnPlayerMissile(player->mo, MT_BFG); +} + + +// +// A_FirePlasma +// +void A_FirePlasma(player_t* player, pspdef_t* psp) +{ + player->ammo[weaponinfo[player->readyweapon].ammo]--; + + P_SetPsprite(player, + ps_flash, + (statenum_t)(weaponinfo[player->readyweapon].flashstate + (P_Random() & 1))); + + P_SpawnPlayerMissile(player->mo, MT_PLASMA); +} + + +// +// P_BulletSlope +// Sets a slope so a near miss is at aproximately +// the height of the intended target +// +void P_BulletSlope(mobj_t* mo) +{ + angle_t an; + + // see which target is to be aimed at + an = mo->angle; + bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT); + + if (!linetarget) + { + an += 1 << 26; + bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT); + if (!linetarget) + { + an -= 2 << 26; + bulletslope = P_AimLineAttack(mo, an, 16 * 64 * FRACUNIT); + } + } +} + + +// +// P_GunShot +// +void P_GunShot(mobj_t* mo, doom_boolean accurate) +{ + angle_t angle; + int damage; + + damage = 5 * (P_Random() % 3 + 1); + angle = mo->angle; + + if (!accurate) + angle += (P_Random() - P_Random()) << 18; + + P_LineAttack(mo, angle, MISSILERANGE, bulletslope, damage); +} + + +// +// A_FirePistol +// +void A_FirePistol(player_t* player, pspdef_t* psp) +{ + S_StartSound(player->mo, sfx_pistol); + + P_SetMobjState(player->mo, S_PLAY_ATK2); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + + P_SetPsprite(player, + ps_flash, + (statenum_t)weaponinfo[player->readyweapon].flashstate); + + P_BulletSlope(player->mo); + P_GunShot(player->mo, !player->refire); +} + + +// +// A_FireShotgun +// +void A_FireShotgun(player_t* player, pspdef_t* psp) +{ + int i; + + S_StartSound(player->mo, sfx_shotgn); + P_SetMobjState(player->mo, S_PLAY_ATK2); + + player->ammo[weaponinfo[player->readyweapon].ammo]--; + + P_SetPsprite(player, + ps_flash, + (statenum_t)weaponinfo[player->readyweapon].flashstate); + + P_BulletSlope(player->mo); + + for (i = 0; i < 7; i++) + P_GunShot(player->mo, doom_false); +} + + +// +// A_FireShotgun2 +// +void A_FireShotgun2(player_t* player, pspdef_t* psp) +{ + int i; + angle_t angle; + int damage; + + + S_StartSound(player->mo, sfx_dshtgn); + P_SetMobjState(player->mo, S_PLAY_ATK2); + + player->ammo[weaponinfo[player->readyweapon].ammo] -= 2; + + P_SetPsprite(player, + ps_flash, + (statenum_t)weaponinfo[player->readyweapon].flashstate); + + P_BulletSlope(player->mo); + + for (i = 0; i < 20; i++) + { + damage = 5 * (P_Random() % 3 + 1); + angle = player->mo->angle; + angle += (P_Random() - P_Random()) << 19; + P_LineAttack(player->mo, + angle, + MISSILERANGE, + bulletslope + ((P_Random() - P_Random()) << 5), damage); + } +} + + +// +// A_FireCGun +// +void A_FireCGun(player_t* player, pspdef_t* psp) +{ + S_StartSound(player->mo, sfx_pistol); + + if (!player->ammo[weaponinfo[player->readyweapon].ammo]) + return; + + P_SetMobjState(player->mo, S_PLAY_ATK2); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + + P_SetPsprite(player, + ps_flash, + (statenum_t)(weaponinfo[player->readyweapon].flashstate + + psp->state + - &states[S_CHAIN1])); + + P_BulletSlope(player->mo); + + P_GunShot(player->mo, !player->refire); +} + + +// +// ? +// +void A_Light0(player_t* player, pspdef_t* psp) +{ + player->extralight = 0; +} + +void A_Light1(player_t* player, pspdef_t* psp) +{ + player->extralight = 1; +} + +void A_Light2(player_t* player, pspdef_t* psp) +{ + player->extralight = 2; +} + + +// +// A_BFGSpray +// Spawn a BFG explosion on every monster in view +// +void A_BFGSpray(mobj_t* mo) +{ + int i; + int j; + int damage; + angle_t an; + + // offset angles from its attack angle + for (i = 0; i < 40; i++) + { + an = mo->angle - ANG90 / 2 + ANG90 / 40 * i; + + // mo->target is the originator (player) + // of the missile + P_AimLineAttack(mo->target, an, 16 * 64 * FRACUNIT); + + if (!linetarget) + continue; + + P_SpawnMobj(linetarget->x, + linetarget->y, + linetarget->z + (linetarget->height >> 2), + MT_EXTRABFG); + + damage = 0; + for (j = 0; j < 15; j++) + damage += (P_Random() & 7) + 1; + + P_DamageMobj(linetarget, mo->target, mo->target, damage); + } +} + + +// +// A_BFGsound +// +void A_BFGsound(player_t* player, pspdef_t* psp) +{ + S_StartSound(player->mo, sfx_bfg); +} + + +// +// P_SetupPsprites +// Called at start of level for each player. +// +void P_SetupPsprites(player_t* player) +{ + int i; + + // remove all psprites + for (i = 0; i < NUMPSPRITES; i++) + player->psprites[i].state = 0; + + // spawn the gun + player->pendingweapon = player->readyweapon; + P_BringUpWeapon(player); +} + + +// +// P_MovePsprites +// Called every tic by player thinking routine. +// +void P_MovePsprites(player_t* player) +{ + int i; + pspdef_t* psp; + state_t* state; + + psp = &player->psprites[0]; + for (i = 0; i < NUMPSPRITES; i++, psp++) + { + // a null state means not active + if ((state = psp->state)) + { + // drop tic count and possibly change state + + // a -1 tic count never changes + if (psp->tics != -1) + { + psp->tics--; + if (!psp->tics) + P_SetPsprite(player, i, psp->state->nextstate); + } + } + } + + player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx; + player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy; +} +#define PADSAVEP() save_p += (4 - ((long long)save_p & 3)) & 3 + + +byte* save_p; + + +// TODO: [pd] We are loading/saving raw pointers. It will not work with saves from 32bits system. We need to rewrite those functions. +// +// P_ArchivePlayers +// +void P_ArchivePlayers(void) +{ + int i; + int j; + player_t* dest; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + PADSAVEP(); + + dest = (player_t*)save_p; + doom_memcpy(dest, &players[i], sizeof(player_t)); + save_p += sizeof(player_t); + for (j = 0; j < NUMPSPRITES; j++) + { + if (dest->psprites[j].state) + { + dest->psprites[j].state + = (state_t*)(dest->psprites[j].state - states); + } + } + } +} + + +// +// P_UnArchivePlayers +// +void P_UnArchivePlayers(void) +{ + int i; + int j; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + PADSAVEP(); + + doom_memcpy(&players[i], save_p, sizeof(player_t)); + save_p += sizeof(player_t); + + // will be set when unarc thinker + players[i].mo = 0; + players[i].message = 0; + players[i].attacker = 0; + + for (j = 0; j < NUMPSPRITES; j++) + { + if (players[i].psprites[j].state) + { + players[i].psprites[j].state + = &states[(long long)players[i].psprites[j].state]; + } + } + } +} + + +// +// P_ArchiveWorld +// +void P_ArchiveWorld(void) +{ + int i; + int j; + sector_t* sec; + line_t* li; + side_t* si; + short* put; + + put = (short*)save_p; + + // do sectors + for (i = 0, sec = sectors; i < numsectors; i++, sec++) + { + *put++ = sec->floorheight >> FRACBITS; + *put++ = sec->ceilingheight >> FRACBITS; + *put++ = sec->floorpic; + *put++ = sec->ceilingpic; + *put++ = sec->lightlevel; + *put++ = sec->special; // needed? + *put++ = sec->tag; // needed? + } + + + // do lines + for (i = 0, li = lines; i < numlines; i++, li++) + { + *put++ = li->flags; + *put++ = li->special; + *put++ = li->tag; + for (j = 0; j < 2; j++) + { + if (li->sidenum[j] == -1) + continue; + + si = &sides[li->sidenum[j]]; + + *put++ = si->textureoffset >> FRACBITS; + *put++ = si->rowoffset >> FRACBITS; + *put++ = si->toptexture; + *put++ = si->bottomtexture; + *put++ = si->midtexture; + } + } + + save_p = (byte*)put; +} + + +// +// P_UnArchiveWorld +// +void P_UnArchiveWorld(void) +{ + int i; + int j; + sector_t* sec; + line_t* li; + side_t* si; + short* get; + + get = (short*)save_p; + + // do sectors + for (i = 0, sec = sectors; i < numsectors; i++, sec++) + { + sec->floorheight = *get++ << FRACBITS; + sec->ceilingheight = *get++ << FRACBITS; + sec->floorpic = *get++; + sec->ceilingpic = *get++; + sec->lightlevel = *get++; + sec->special = *get++; // needed? + sec->tag = *get++; // needed? + sec->specialdata = 0; + sec->soundtarget = 0; + } + + // do lines + for (i = 0, li = lines; i < numlines; i++, li++) + { + li->flags = *get++; + li->special = *get++; + li->tag = *get++; + for (j = 0; j < 2; j++) + { + if (li->sidenum[j] == -1) + continue; + si = &sides[li->sidenum[j]]; + si->textureoffset = *get++ << FRACBITS; + si->rowoffset = *get++ << FRACBITS; + si->toptexture = *get++; + si->bottomtexture = *get++; + si->midtexture = *get++; + } + } + + save_p = (byte*)get; +} + + +// +// Thinkers +// +typedef enum +{ + tc_end, + tc_mobj +} thinkerclass_t; + + +// +// P_ArchiveThinkers +// +void P_ArchiveThinkers(void) +{ + thinker_t* th; + mobj_t* mobj; + + // save off the current thinkers + for (th = thinkercap.next; th != &thinkercap; th = th->next) + { + if (th->function.acp1 == (actionf_p1)P_MobjThinker) + { + *save_p++ = tc_mobj; + PADSAVEP(); + mobj = (mobj_t*)save_p; + doom_memcpy(mobj, th, sizeof(*mobj)); + save_p += sizeof(*mobj); + mobj->state = (state_t*)(mobj->state - states); + + if (mobj->player) + mobj->player = (player_t*)((mobj->player - players) + 1); + continue; + } + + // I_Error ("P_ArchiveThinkers: Unknown thinker function"); + } + + // add a terminating marker + *save_p++ = tc_end; +} + + +// +// P_UnArchiveThinkers +// +void P_UnArchiveThinkers(void) +{ + byte tclass; + thinker_t* currentthinker; + thinker_t* next; + mobj_t* mobj; + + // remove all the current thinkers + currentthinker = thinkercap.next; + while (currentthinker != &thinkercap) + { + next = currentthinker->next; + + if (currentthinker->function.acp1 == (actionf_p1)P_MobjThinker) + P_RemoveMobj((mobj_t*)currentthinker); + else + Z_Free(currentthinker); + + currentthinker = next; + } + P_InitThinkers(); + + // read in saved thinkers + while (1) + { + tclass = *save_p++; + switch (tclass) + { + case tc_end: + return; // end of list + + case tc_mobj: + PADSAVEP(); + mobj = (mobj_t*)Z_Malloc(sizeof(*mobj), PU_LEVEL, 0); + doom_memcpy(mobj, save_p, sizeof(*mobj)); + save_p += sizeof(*mobj); + mobj->state = &states[(long long)mobj->state]; + mobj->target = 0; + if (mobj->player) + { + mobj->player = &players[(long long)mobj->player - 1]; + mobj->player->mo = mobj; + } + P_SetThingPosition(mobj); + mobj->info = &mobjinfo[mobj->type]; + mobj->floorz = mobj->subsector->sector->floorheight; + mobj->ceilingz = mobj->subsector->sector->ceilingheight; + mobj->thinker.function.acp1 = (actionf_p1)P_MobjThinker; + P_AddThinker(&mobj->thinker); + break; + + default: + { + //I_Error("Error: Unknown tclass %i in savegame", tclass); + + doom_strcpy(error_buf, "Error: Unknown tclass "); + doom_concat(error_buf, doom_itoa(tclass, 10)); + doom_concat(error_buf, " in savegame"); + I_Error(error_buf); + } + } + } +} + + +// +// P_ArchiveSpecials +// +enum +{ + tc_ceiling, + tc_door, + tc_floor, + tc_plat, + tc_flash, + tc_strobe, + tc_glow, + tc_endspecials +} specials_e; + + +// +// Things to handle: +// +// T_MoveCeiling, (ceiling_t: sector_t * swizzle), - active list +// T_VerticalDoor, (vldoor_t: sector_t * swizzle), +// T_MoveFloor, (floormove_t: sector_t * swizzle), +// T_LightFlash, (lightflash_t: sector_t * swizzle), +// T_StrobeFlash, (strobe_t: sector_t *), +// T_Glow, (glow_t: sector_t *), +// T_PlatRaise, (plat_t: sector_t *), - active list +// +void P_ArchiveSpecials(void) +{ + thinker_t* th; + ceiling_t* ceiling; + vldoor_t* door; + floormove_t* floor; + plat_t* plat; + lightflash_t* flash; + strobe_t* strobe; + glow_t* glow; + int i; + + // save off the current thinkers + for (th = thinkercap.next; th != &thinkercap; th = th->next) + { + if (th->function.acv == (actionf_v)0) + { + for (i = 0; i < MAXCEILINGS; i++) + if (activeceilings[i] == (ceiling_t*)th) + break; + + if (i < MAXCEILINGS) + { + *save_p++ = tc_ceiling; + PADSAVEP(); + ceiling = (ceiling_t*)save_p; + doom_memcpy(ceiling, th, sizeof(*ceiling)); + save_p += sizeof(*ceiling); + ceiling->sector = (sector_t*)(ceiling->sector - sectors); + } + continue; + } + + if (th->function.acp1 == (actionf_p1)T_MoveCeiling) + { + *save_p++ = tc_ceiling; + PADSAVEP(); + ceiling = (ceiling_t*)save_p; + doom_memcpy(ceiling, th, sizeof(*ceiling)); + save_p += sizeof(*ceiling); + ceiling->sector = (sector_t*)(ceiling->sector - sectors); + continue; + } + + if (th->function.acp1 == (actionf_p1)T_VerticalDoor) + { + *save_p++ = tc_door; + PADSAVEP(); + door = (vldoor_t*)save_p; + doom_memcpy(door, th, sizeof(*door)); + save_p += sizeof(*door); + door->sector = (sector_t*)(door->sector - sectors); + continue; + } + + if (th->function.acp1 == (actionf_p1)T_MoveFloor) + { + *save_p++ = tc_floor; + PADSAVEP(); + floor = (floormove_t*)save_p; + doom_memcpy(floor, th, sizeof(*floor)); + save_p += sizeof(*floor); + floor->sector = (sector_t*)(floor->sector - sectors); + continue; + } + + if (th->function.acp1 == (actionf_p1)T_PlatRaise) + { + *save_p++ = tc_plat; + PADSAVEP(); + plat = (plat_t*)save_p; + doom_memcpy(plat, th, sizeof(*plat)); + save_p += sizeof(*plat); + plat->sector = (sector_t*)(plat->sector - sectors); + continue; + } + + if (th->function.acp1 == (actionf_p1)T_LightFlash) + { + *save_p++ = tc_flash; + PADSAVEP(); + flash = (lightflash_t*)save_p; + doom_memcpy(flash, th, sizeof(*flash)); + save_p += sizeof(*flash); + flash->sector = (sector_t*)(flash->sector - sectors); + continue; + } + + if (th->function.acp1 == (actionf_p1)T_StrobeFlash) + { + *save_p++ = tc_strobe; + PADSAVEP(); + strobe = (strobe_t*)save_p; + doom_memcpy(strobe, th, sizeof(*strobe)); + save_p += sizeof(*strobe); + strobe->sector = (sector_t*)(strobe->sector - sectors); + continue; + } + + if (th->function.acp1 == (actionf_p1)T_Glow) + { + *save_p++ = tc_glow; + PADSAVEP(); + glow = (glow_t*)save_p; + doom_memcpy(glow, th, sizeof(*glow)); + save_p += sizeof(*glow); + glow->sector = (sector_t*)(glow->sector - sectors); + continue; + } + } + + // add a terminating marker + *save_p++ = tc_endspecials; +} + + +// +// P_UnArchiveSpecials +// +void P_UnArchiveSpecials(void) +{ + byte tclass; + ceiling_t* ceiling; + vldoor_t* door; + floormove_t* floor; + plat_t* plat; + lightflash_t* flash; + strobe_t* strobe; + glow_t* glow; + + + // read in saved thinkers + while (1) + { + tclass = *save_p++; + switch (tclass) + { + case tc_endspecials: + return; // end of list + + case tc_ceiling: + PADSAVEP(); + ceiling = (ceiling_t*)Z_Malloc(sizeof(*ceiling), PU_LEVEL, 0); + doom_memcpy(ceiling, save_p, sizeof(*ceiling)); + save_p += sizeof(*ceiling); + ceiling->sector = §ors[(long long)ceiling->sector]; + ceiling->sector->specialdata = ceiling; + + if (ceiling->thinker.function.acp1) + ceiling->thinker.function.acp1 = (actionf_p1)T_MoveCeiling; + + P_AddThinker(&ceiling->thinker); + P_AddActiveCeiling(ceiling); + break; + + case tc_door: + PADSAVEP(); + door = (vldoor_t*)Z_Malloc(sizeof(*door), PU_LEVEL, 0); + doom_memcpy(door, save_p, sizeof(*door)); + save_p += sizeof(*door); + door->sector = §ors[(long long)door->sector]; + door->sector->specialdata = door; + door->thinker.function.acp1 = (actionf_p1)T_VerticalDoor; + P_AddThinker(&door->thinker); + break; + + case tc_floor: + PADSAVEP(); + floor = (floormove_t*)Z_Malloc(sizeof(*floor), PU_LEVEL, 0); + doom_memcpy(floor, save_p, sizeof(*floor)); + save_p += sizeof(*floor); + floor->sector = §ors[(long long)floor->sector]; + floor->sector->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; + P_AddThinker(&floor->thinker); + break; + + case tc_plat: + PADSAVEP(); + plat = (plat_t*)Z_Malloc(sizeof(*plat), PU_LEVEL, 0); + doom_memcpy(plat, save_p, sizeof(*plat)); + save_p += sizeof(*plat); + plat->sector = §ors[(long long)plat->sector]; + plat->sector->specialdata = plat; + + if (plat->thinker.function.acp1) + plat->thinker.function.acp1 = (actionf_p1)T_PlatRaise; + + P_AddThinker(&plat->thinker); + P_AddActivePlat(plat); + break; + + case tc_flash: + PADSAVEP(); + flash = (lightflash_t*)Z_Malloc(sizeof(*flash), PU_LEVEL, 0); + doom_memcpy(flash, save_p, sizeof(*flash)); + save_p += sizeof(*flash); + flash->sector = §ors[(long long)flash->sector]; + flash->thinker.function.acp1 = (actionf_p1)T_LightFlash; + P_AddThinker(&flash->thinker); + break; + + case tc_strobe: + PADSAVEP(); + strobe = (strobe_t*)Z_Malloc(sizeof(*strobe), PU_LEVEL, 0); + doom_memcpy(strobe, save_p, sizeof(*strobe)); + save_p += sizeof(*strobe); + strobe->sector = §ors[(long long)strobe->sector]; + strobe->thinker.function.acp1 = (actionf_p1)T_StrobeFlash; + P_AddThinker(&strobe->thinker); + break; + + case tc_glow: + PADSAVEP(); + glow = (glow_t*)Z_Malloc(sizeof(*glow), PU_LEVEL, 0); + doom_memcpy(glow, save_p, sizeof(*glow)); + save_p += sizeof(*glow); + glow->sector = §ors[(long long)glow->sector]; + glow->thinker.function.acp1 = (actionf_p1)T_Glow; + P_AddThinker(&glow->thinker); + break; + + default: + { + //I_Error("Error: P_UnarchiveSpecials:Unknown tclass %i " + // "in savegame", tclass); + + doom_strcpy(error_buf, "Error: P_UnarchiveSpecials:Unknown tclass "); + doom_concat(error_buf, doom_itoa(tclass, 10)); + doom_concat(error_buf, " in savegame"); + I_Error(error_buf); + } + } + } +} +#define MAX_DEATHMATCH_STARTS 10 + + +// +// MAP related Lookup tables. +// Store VERTEXES, LINEDEFS, SIDEDEFS, etc. +// +int numvertexes; +vertex_t* vertexes; + +int numsegs; +seg_t* segs; + +int numsectors; +sector_t* sectors; + +int numsubsectors; +subsector_t* subsectors; + +int numnodes; +node_t* nodes; + +int numlines; +line_t* lines; + +int numsides; +side_t* sides; + +// BLOCKMAP +// Created from axis aligned bounding box +// of the map, a rectangular array of +// blocks of size ... +// Used to speed up collision detection +// by spatial subdivision in 2D. +// +// Blockmap size. +int bmapwidth; +int bmapheight; // size in mapblocks +short* blockmap; // int for larger maps +// offsets in blockmap are from here +short* blockmaplump; +// origin of block map +fixed_t bmaporgx; +fixed_t bmaporgy; +// for thing chains +mobj_t** blocklinks; + +// REJECT +// For fast sight rejection. +// Speeds up enemy AI by skipping detailed +// LineOf Sight calculation. +// Without special effect, this could be +// used as a PVS lookup as well. +// +byte* rejectmatrix; + +mapthing_t deathmatchstarts[MAX_DEATHMATCH_STARTS]; +mapthing_t* deathmatch_p; +mapthing_t playerstarts[MAXPLAYERS]; + + +void P_SpawnMapThing(mapthing_t* mthing); + + +// +// P_LoadVertexes +// +void P_LoadVertexes(int lump) +{ + byte* data; + int i; + mapvertex_t* ml; + vertex_t* li; + + // Determine number of lumps: + // total lump length / vertex record length. + numvertexes = W_LumpLength(lump) / sizeof(mapvertex_t); + + // Allocate zone memory for buffer. + vertexes = (vertex_t*)Z_Malloc(numvertexes * sizeof(vertex_t), PU_LEVEL, 0); + + // Load data into cache. + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + ml = (mapvertex_t*)data; + li = vertexes; + + // Copy and convert vertex coordinates, + // internal representation as fixed. + for (i = 0; i < numvertexes; i++, li++, ml++) + { + li->x = SHORT(ml->x) << FRACBITS; + li->y = SHORT(ml->y) << FRACBITS; + } + + // Free buffer memory. + Z_Free(data); +} + + +// +// P_LoadSegs +// +void P_LoadSegs(int lump) +{ + byte* data; + int i; + mapseg_t* ml; + seg_t* li; + line_t* ldef; + int linedef; + int side; + + numsegs = W_LumpLength(lump) / sizeof(mapseg_t); + segs = (seg_t*)Z_Malloc(numsegs * sizeof(seg_t), PU_LEVEL, 0); + doom_memset(segs, 0, numsegs * sizeof(seg_t)); + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + ml = (mapseg_t*)data; + li = segs; + for (i = 0; i < numsegs; i++, li++, ml++) + { + li->v1 = &vertexes[SHORT(ml->v1)]; + li->v2 = &vertexes[SHORT(ml->v2)]; + + li->angle = (SHORT(ml->angle)) << 16; + li->offset = (SHORT(ml->offset)) << 16; + linedef = SHORT(ml->linedef); + ldef = &lines[linedef]; + li->linedef = ldef; + side = SHORT(ml->side); + li->sidedef = &sides[ldef->sidenum[side]]; + li->frontsector = sides[ldef->sidenum[side]].sector; + if (ldef->flags & ML_TWOSIDED) + li->backsector = sides[ldef->sidenum[side ^ 1]].sector; + else + li->backsector = 0; + } + + Z_Free(data); +} + + +// +// P_LoadSubsectors +// +void P_LoadSubsectors(int lump) +{ + byte* data; + int i; + mapsubsector_t* ms; + subsector_t* ss; + + numsubsectors = W_LumpLength(lump) / sizeof(mapsubsector_t); + subsectors = (subsector_t*)Z_Malloc(numsubsectors * sizeof(subsector_t), PU_LEVEL, 0); + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + ms = (mapsubsector_t*)data; + doom_memset(subsectors, 0, numsubsectors * sizeof(subsector_t)); + ss = subsectors; + + for (i = 0; i < numsubsectors; i++, ss++, ms++) + { + ss->numlines = SHORT(ms->numsegs); + ss->firstline = SHORT(ms->firstseg); + } + + Z_Free(data); +} + + +// +// P_LoadSectors +// +void P_LoadSectors(int lump) +{ + byte* data; + int i; + mapsector_t* ms; + sector_t* ss; + + numsectors = W_LumpLength(lump) / sizeof(mapsector_t); + sectors = (sector_t*)Z_Malloc(numsectors * sizeof(sector_t), PU_LEVEL, 0); + doom_memset(sectors, 0, numsectors * sizeof(sector_t)); + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + ms = (mapsector_t*)data; + ss = sectors; + for (i = 0; i < numsectors; i++, ss++, ms++) + { + ss->floorheight = SHORT(ms->floorheight) << FRACBITS; + ss->ceilingheight = SHORT(ms->ceilingheight) << FRACBITS; + ss->floorpic = R_FlatNumForName(ms->floorpic); + ss->ceilingpic = R_FlatNumForName(ms->ceilingpic); + ss->lightlevel = SHORT(ms->lightlevel); + ss->special = SHORT(ms->special); + ss->tag = SHORT(ms->tag); + ss->thinglist = 0; + } + + Z_Free(data); +} + + +// +// P_LoadNodes +// +void P_LoadNodes(int lump) +{ + byte* data; + int i; + int j; + int k; + mapnode_t* mn; + node_t* no; + + numnodes = W_LumpLength(lump) / sizeof(mapnode_t); + nodes = (node_t*)Z_Malloc(numnodes * sizeof(node_t), PU_LEVEL, 0); + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + mn = (mapnode_t*)data; + no = nodes; + + for (i = 0; i < numnodes; i++, no++, mn++) + { + no->x = SHORT(mn->x) << FRACBITS; + no->y = SHORT(mn->y) << FRACBITS; + no->dx = SHORT(mn->dx) << FRACBITS; + no->dy = SHORT(mn->dy) << FRACBITS; + for (j = 0; j < 2; j++) + { + no->children[j] = SHORT(mn->children[j]); + for (k = 0; k < 4; k++) + no->bbox[j][k] = SHORT(mn->bbox[j][k]) << FRACBITS; + } + } + + Z_Free(data); +} + + +// +// P_LoadThings +// +void P_LoadThings(int lump) +{ + byte* data; + int i; + mapthing_t* mt; + int numthings; + doom_boolean spawn; + + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + numthings = W_LumpLength(lump) / sizeof(mapthing_t); + + mt = (mapthing_t*)data; + for (i = 0; i < numthings; i++, mt++) + { + spawn = doom_true; + + // Do not spawn cool, new monsters if !commercial + if (gamemode != commercial) + { + switch (mt->type) + { + case 68: // Arachnotron + case 64: // Archvile + case 88: // Boss Brain + case 89: // Boss Shooter + case 69: // Hell Knight + case 67: // Mancubus + case 71: // Pain Elemental + case 65: // Former Human Commando + case 66: // Revenant + case 84: // Wolf SS + spawn = doom_false; + break; + } + } + if (spawn == doom_false) + break; + + // Do spawn all other stuff. + mt->x = SHORT(mt->x); + mt->y = SHORT(mt->y); + mt->angle = SHORT(mt->angle); + mt->type = SHORT(mt->type); + mt->options = SHORT(mt->options); + + P_SpawnMapThing(mt); + } + + Z_Free(data); +} + + +// +// P_LoadLineDefs +// Also counts secret lines for intermissions. +// +void P_LoadLineDefs(int lump) +{ + byte* data; + int i; + maplinedef_t* mld; + line_t* ld; + vertex_t* v1; + vertex_t* v2; + + numlines = W_LumpLength(lump) / sizeof(maplinedef_t); + lines = (line_t*)Z_Malloc(numlines * sizeof(line_t), PU_LEVEL, 0); + doom_memset(lines, 0, numlines * sizeof(line_t)); + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + mld = (maplinedef_t*)data; + ld = lines; + for (i = 0; i < numlines; i++, mld++, ld++) + { + ld->flags = SHORT(mld->flags); + ld->special = SHORT(mld->special); + ld->tag = SHORT(mld->tag); + v1 = ld->v1 = &vertexes[SHORT(mld->v1)]; + v2 = ld->v2 = &vertexes[SHORT(mld->v2)]; + ld->dx = v2->x - v1->x; + ld->dy = v2->y - v1->y; + + if (!ld->dx) + ld->slopetype = ST_VERTICAL; + else if (!ld->dy) + ld->slopetype = ST_HORIZONTAL; + else + { + if (FixedDiv(ld->dy, ld->dx) > 0) + ld->slopetype = ST_POSITIVE; + else + ld->slopetype = ST_NEGATIVE; + } + + if (v1->x < v2->x) + { + ld->bbox[BOXLEFT] = v1->x; + ld->bbox[BOXRIGHT] = v2->x; + } + else + { + ld->bbox[BOXLEFT] = v2->x; + ld->bbox[BOXRIGHT] = v1->x; + } + + if (v1->y < v2->y) + { + ld->bbox[BOXBOTTOM] = v1->y; + ld->bbox[BOXTOP] = v2->y; + } + else + { + ld->bbox[BOXBOTTOM] = v2->y; + ld->bbox[BOXTOP] = v1->y; + } + + ld->sidenum[0] = SHORT(mld->sidenum[0]); + ld->sidenum[1] = SHORT(mld->sidenum[1]); + + if (ld->sidenum[0] != -1) + ld->frontsector = sides[ld->sidenum[0]].sector; + else + ld->frontsector = 0; + + if (ld->sidenum[1] != -1) + ld->backsector = sides[ld->sidenum[1]].sector; + else + ld->backsector = 0; + } + + Z_Free(data); +} + + +// +// P_LoadSideDefs +// +void P_LoadSideDefs(int lump) +{ + byte* data; + int i; + mapsidedef_t* msd; + side_t* sd; + + numsides = W_LumpLength(lump) / sizeof(mapsidedef_t); + sides = (side_t*)Z_Malloc(numsides * sizeof(side_t), PU_LEVEL, 0); + doom_memset(sides, 0, numsides * sizeof(side_t)); + data = (byte*)W_CacheLumpNum(lump, PU_STATIC); + + msd = (mapsidedef_t*)data; + sd = sides; + for (i = 0; i < numsides; i++, msd++, sd++) + { + sd->textureoffset = SHORT(msd->textureoffset) << FRACBITS; + sd->rowoffset = SHORT(msd->rowoffset) << FRACBITS; + sd->toptexture = R_TextureNumForName(msd->toptexture); + sd->bottomtexture = R_TextureNumForName(msd->bottomtexture); + sd->midtexture = R_TextureNumForName(msd->midtexture); + sd->sector = §ors[SHORT(msd->sector)]; + } + + Z_Free(data); +} + + +// +// P_LoadBlockMap +// +void P_LoadBlockMap(int lump) +{ + int i; + int count; + + blockmaplump = (short*)W_CacheLumpNum(lump, PU_LEVEL); + blockmap = blockmaplump + 4; + count = W_LumpLength(lump) / 2; + + for (i = 0; i < count; i++) + blockmaplump[i] = SHORT(blockmaplump[i]); + + bmaporgx = blockmaplump[0] << FRACBITS; + bmaporgy = blockmaplump[1] << FRACBITS; + bmapwidth = blockmaplump[2]; + bmapheight = blockmaplump[3]; + + // clear out mobj chains + count = sizeof(*blocklinks) * bmapwidth * bmapheight; + blocklinks = (mobj_t**)Z_Malloc(count, PU_LEVEL, 0); + doom_memset(blocklinks, 0, count); +} + + +// +// P_GroupLines +// Builds sector line lists and subsector sector numbers. +// Finds block bounding boxes for sectors. +// +void P_GroupLines(void) +{ + line_t** linebuffer; + int i; + int j; + int total; + line_t* li; + sector_t* sector; + subsector_t* ss; + seg_t* seg; + fixed_t bbox[4]; + int block; + + // look up sector number for each subsector + ss = subsectors; + for (i = 0; i < numsubsectors; i++, ss++) + { + seg = &segs[ss->firstline]; + ss->sector = seg->sidedef->sector; + } + + // count number of lines in each sector + li = lines; + total = 0; + for (i = 0; i < numlines; i++, li++) + { + total++; + li->frontsector->linecount++; + + if (li->backsector && li->backsector != li->frontsector) + { + li->backsector->linecount++; + total++; + } + } + + // build line tables for each sector + linebuffer = (line_t**)Z_Malloc(total * sizeof(line_t*), PU_LEVEL, 0); + sector = sectors; + for (i = 0; i < numsectors; i++, sector++) + { + M_ClearBox(bbox); + sector->lines = linebuffer; + li = lines; + for (j = 0; j < numlines; j++, li++) + { + if (li->frontsector == sector || li->backsector == sector) + { + *linebuffer++ = li; + M_AddToBox(bbox, li->v1->x, li->v1->y); + M_AddToBox(bbox, li->v2->x, li->v2->y); + } + } + if (linebuffer - sector->lines != sector->linecount) + I_Error((char*)"Error: P_GroupLines: miscounted"); + + // set the degenmobj_t to the middle of the bounding box + sector->soundorg.x = (bbox[BOXRIGHT] + bbox[BOXLEFT]) / 2; + sector->soundorg.y = (bbox[BOXTOP] + bbox[BOXBOTTOM]) / 2; + + // adjust bounding box to map blocks + block = (bbox[BOXTOP] - bmaporgy + MAXRADIUS) >> MAPBLOCKSHIFT; + block = block >= bmapheight ? bmapheight - 1 : block; + sector->blockbox[BOXTOP] = block; + + block = (bbox[BOXBOTTOM] - bmaporgy - MAXRADIUS) >> MAPBLOCKSHIFT; + block = block < 0 ? 0 : block; + sector->blockbox[BOXBOTTOM] = block; + + block = (bbox[BOXRIGHT] - bmaporgx + MAXRADIUS) >> MAPBLOCKSHIFT; + block = block >= bmapwidth ? bmapwidth - 1 : block; + sector->blockbox[BOXRIGHT] = block; + + block = (bbox[BOXLEFT] - bmaporgx - MAXRADIUS) >> MAPBLOCKSHIFT; + block = block < 0 ? 0 : block; + sector->blockbox[BOXLEFT] = block; + } +} + + +// +// P_SetupLevel +// +void P_SetupLevel(int episode, int map, int playermask, skill_t skill) +{ + int i; + char lumpname[9]; + int lumpnum; + + totalkills = totalitems = totalsecret = wminfo.maxfrags = 0; + wminfo.partime = 180; + for (i = 0; i < MAXPLAYERS; i++) + { + players[i].killcount = players[i].secretcount + = players[i].itemcount = 0; + } + + // Initial height of PointOfView + // will be set by player think. + players[consoleplayer].viewz = 1; + + // Make sure all sounds are stopped before Z_FreeTags. + S_Start(); + + Z_FreeTags(PU_LEVEL, PU_PURGELEVEL - 1); + + // UNUSED W_Profile (); + P_InitThinkers(); + + // if working with a devlopment map, reload it + W_Reload(); + + // find map name + if (gamemode == commercial) + { + if (map < 10) + { + //doom_sprintf(lumpname, "map0%i", map); + doom_strcpy(lumpname, "map0"); + doom_concat(lumpname, doom_itoa(map, 10)); + } + else + { + //doom_sprintf(lumpname, "map%i", map); + doom_strcpy(lumpname, "map"); + doom_concat(lumpname, doom_itoa(map, 10)); + } + } + else + { + lumpname[0] = 'E'; + lumpname[1] = '0' + episode; + lumpname[2] = 'M'; + lumpname[3] = '0' + map; + lumpname[4] = 0; + } + + lumpnum = W_GetNumForName(lumpname); + + leveltime = 0; + + // note: most of this ordering is important + P_LoadBlockMap(lumpnum + ML_BLOCKMAP); + P_LoadVertexes(lumpnum + ML_VERTEXES); + P_LoadSectors(lumpnum + ML_SECTORS); + P_LoadSideDefs(lumpnum + ML_SIDEDEFS); + + P_LoadLineDefs(lumpnum + ML_LINEDEFS); + P_LoadSubsectors(lumpnum + ML_SSECTORS); + P_LoadNodes(lumpnum + ML_NODES); + P_LoadSegs(lumpnum + ML_SEGS); + + rejectmatrix = (byte*)W_CacheLumpNum(lumpnum + ML_REJECT, PU_LEVEL); + P_GroupLines(); + + bodyqueslot = 0; + deathmatch_p = deathmatchstarts; + P_LoadThings(lumpnum + ML_THINGS); + + // if deathmatch, randomly spawn the active players + if (deathmatch) + { + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i]) + { + players[i].mo = 0; + G_DeathMatchSpawnPlayer(i); + } + } + + // clear special respawning que + iquehead = iquetail = 0; + + // set up world state + P_SpawnSpecials(); + + // preload graphics + if (precache) + R_PrecacheLevel(); +} + + +// +// P_Init +// +void P_Init(void) +{ + P_InitSwitchList(); + P_InitPicAnims(); + R_InitSprites(sprnames); +} +fixed_t sightzstart; // eye z of looker +fixed_t topslope; +fixed_t bottomslope; // slopes to top and bottom of target + +divline_t strace; // from t1 to t2 +fixed_t t2x; +fixed_t t2y; + +int sightcounts[2]; + + +// +// P_DivlineSide +// Returns side 0 (front), 1 (back), or 2 (on). +// +int P_DivlineSide(fixed_t x, fixed_t y, divline_t* node) +{ + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + if (!node->dx) + { + if (x == node->x) + return 2; + + if (x <= node->x) + return node->dy > 0; + + return node->dy < 0; + } + + if (!node->dy) + { + if (x == node->y) + return 2; + + if (y <= node->y) + return node->dx < 0; + + return node->dx > 0; + } + + dx = (x - node->x); + dy = (y - node->y); + + left = (node->dy >> FRACBITS) * (dx >> FRACBITS); + right = (dy >> FRACBITS) * (node->dx >> FRACBITS); + + if (right < left) + return 0; // front side + + if (left == right) + return 2; + return 1; // back side +} + + +// +// P_InterceptVector2 +// Returns the fractional intercept point +// along the first divline. +// This is only called by the addthings and addlines traversers. +// +fixed_t P_InterceptVector2(divline_t* v2, divline_t* v1) +{ + fixed_t frac; + fixed_t num; + fixed_t den; + + den = FixedMul(v1->dy >> 8, v2->dx) - FixedMul(v1->dx >> 8, v2->dy); + + if (den == 0) + return 0; + + num = FixedMul((v1->x - v2->x) >> 8, v1->dy) + + FixedMul((v2->y - v1->y) >> 8, v1->dx); + frac = FixedDiv(num, den); + + return frac; +} + + +// +// P_CrossSubsector +// Returns doom_true +// if strace crosses the given subsector successfully. +// +doom_boolean P_CrossSubsector(int num) +{ + seg_t* seg; + line_t* line; + int s1; + int s2; + int count; + subsector_t* sub; + sector_t* front; + sector_t* back; + fixed_t opentop; + fixed_t openbottom; + divline_t divl; + vertex_t* v1; + vertex_t* v2; + fixed_t frac; + fixed_t slope; + +#ifdef RANGECHECK + if (num >= numsubsectors) + { + //I_Error("Error: P_CrossSubsector: ss %i with numss = %i", + // num, + // numsubsectors); + + doom_strcpy(error_buf, "Error: P_CrossSubsector: ss "); + doom_concat(error_buf, doom_itoa(num, 10)); + doom_concat(error_buf, " with numss = "); + doom_concat(error_buf, doom_itoa(numsubsectors, 10)); + I_Error(error_buf); + } +#endif + + sub = &subsectors[num]; + + // check lines + count = sub->numlines; + seg = &segs[sub->firstline]; + + for (; count; seg++, count--) + { + line = seg->linedef; + + // allready checked other side? + if (line->validcount == validcount) + continue; + + line->validcount = validcount; + + v1 = line->v1; + v2 = line->v2; + s1 = P_DivlineSide(v1->x, v1->y, &strace); + s2 = P_DivlineSide(v2->x, v2->y, &strace); + + // line isn't crossed? + if (s1 == s2) + continue; + + divl.x = v1->x; + divl.y = v1->y; + divl.dx = v2->x - v1->x; + divl.dy = v2->y - v1->y; + s1 = P_DivlineSide(strace.x, strace.y, &divl); + s2 = P_DivlineSide(t2x, t2y, &divl); + + // line isn't crossed? + if (s1 == s2) + continue; + + // stop because it is not two sided anyway + // might do this after updating validcount? + if (!(line->flags & ML_TWOSIDED)) + return doom_false; + + // crosses a two sided line + front = seg->frontsector; + back = seg->backsector; + + // no wall to block sight with? + if (front->floorheight == back->floorheight + && front->ceilingheight == back->ceilingheight) + continue; + + // possible occluder + // because of ceiling height differences + if (front->ceilingheight < back->ceilingheight) + opentop = front->ceilingheight; + else + opentop = back->ceilingheight; + + // because of ceiling height differences + if (front->floorheight > back->floorheight) + openbottom = front->floorheight; + else + openbottom = back->floorheight; + + // quick test for totally closed doors + if (openbottom >= opentop) + return doom_false; // stop + + frac = P_InterceptVector2(&strace, &divl); + + if (front->floorheight != back->floorheight) + { + slope = FixedDiv(openbottom - sightzstart, frac); + if (slope > bottomslope) + bottomslope = slope; + } + + if (front->ceilingheight != back->ceilingheight) + { + slope = FixedDiv(opentop - sightzstart, frac); + if (slope < topslope) + topslope = slope; + } + + if (topslope <= bottomslope) + return doom_false; // stop + } + + // passed the subsector ok + return doom_true; +} + + +// +// P_CrossBSPNode +// Returns doom_true +// if strace crosses the given node successfully. +// +doom_boolean P_CrossBSPNode(int bspnum) +{ + node_t* bsp; + int side; + + if (bspnum & NF_SUBSECTOR) + { + if (bspnum == -1) + return P_CrossSubsector(0); + else + return P_CrossSubsector(bspnum & (~NF_SUBSECTOR)); + } + + bsp = &nodes[bspnum]; + + // decide which side the start point is on + side = P_DivlineSide(strace.x, strace.y, (divline_t*)bsp); + if (side == 2) + side = 0; // an "on" should cross both sides + + // cross the starting side + if (!P_CrossBSPNode(bsp->children[side])) + return doom_false; + + // the partition plane is crossed here + if (side == P_DivlineSide(t2x, t2y, (divline_t*)bsp)) + { + // the line doesn't touch the other side + return doom_true; + } + + // cross the ending side + return P_CrossBSPNode(bsp->children[side ^ 1]); +} + + +// +// P_CheckSight +// Returns doom_true +// if a straight line between t1 and t2 is unobstructed. +// Uses REJECT. +// +doom_boolean P_CheckSight(mobj_t* t1, mobj_t* t2) +{ + int s1; + int s2; + int pnum; + int bytenum; + int bitnum; + + // First check for trivial rejection. + + // Determine subsector entries in REJECT table. + s1 = (int)(t1->subsector->sector - sectors); + s2 = (int)(t2->subsector->sector - sectors); + pnum = s1 * numsectors + s2; + bytenum = pnum >> 3; + bitnum = 1 << (pnum & 7); + + // Check in REJECT table. + if (rejectmatrix[bytenum] & bitnum) + { + sightcounts[0]++; + + // can't possibly be connected + return doom_false; + } + + // An unobstructed LOS is possible. + // Now look from eyes of t1 to any part of t2. + sightcounts[1]++; + + validcount++; + + sightzstart = t1->z + t1->height - (t1->height >> 2); + topslope = (t2->z + t2->height) - sightzstart; + bottomslope = (t2->z) - sightzstart; + + strace.x = t1->x; + strace.y = t1->y; + t2x = t2->x; + t2y = t2->y; + strace.dx = t2->x - t1->x; + strace.dy = t2->y - t1->y; + + // the head node is the last node output + return P_CrossBSPNode(numnodes - 1); +} +#define MAXANIMS 32 +#define MAXLINEANIMS 64 + +// 20 adjoining sectors max! [dsl] Useless comment is useless +#define MAX_ADJOINING_SECTORS 20 + + +// +// Animating textures and planes +// There is another anim_t used in wi_stuff, unrelated. +// +typedef struct +{ + doom_boolean istexture; + int picnum; + int basepic; + int numpics; + int speed; +} anim_t; + +// +// source animation definition +// +typedef struct +{ + doom_boolean istexture; // if doom_false, it is a flat + char endname[9]; + char startname[9]; + int speed; +} animdef_t; + + +doom_boolean levelTimer; +int levelTimeCount; +short numlinespecials; +line_t* linespeciallist[MAXLINEANIMS]; + + +extern anim_t anims[MAXANIMS]; +extern anim_t* lastanim; + + +// +// P_InitPicAnims +// + +// Floor/ceiling animation sequences, +// defined by first and last frame, +// i.e. the flat (64x64 tile) name to +// be used. +// The full animation sequence is given +// using all the flats between the start +// and end entry, in the order found in +// the WAD file. +// +animdef_t animdefs[] = +{ + {doom_false, "NUKAGE3", "NUKAGE1", 8}, + {doom_false, "FWATER4", "FWATER1", 8}, + {doom_false, "SWATER4", "SWATER1", 8}, + {doom_false, "LAVA4", "LAVA1", 8}, + {doom_false, "BLOOD3", "BLOOD1", 8}, + + // DOOM II flat animations. + {doom_false, "RROCK08", "RROCK05", 8}, + {doom_false, "SLIME04", "SLIME01", 8}, + {doom_false, "SLIME08", "SLIME05", 8}, + {doom_false, "SLIME12", "SLIME09", 8}, + + {doom_true, "BLODGR4", "BLODGR1", 8}, + {doom_true, "SLADRIP3", "SLADRIP1", 8}, + + {doom_true, "BLODRIP4", "BLODRIP1", 8}, + {doom_true, "FIREWALL", "FIREWALA", 8}, + {doom_true, "GSTFONT3", "GSTFONT1", 8}, + {doom_true, "FIRELAVA", "FIRELAV3", 8}, + {doom_true, "FIREMAG3", "FIREMAG1", 8}, + {doom_true, "FIREBLU2", "FIREBLU1", 8}, + {doom_true, "ROCKRED3", "ROCKRED1", 8}, + + {doom_true, "BFALL4", "BFALL1", 8}, + {doom_true, "SFALL4", "SFALL1", 8}, + {doom_true, "WFALL4", "WFALL1", 8}, + {doom_true, "DBRAIN4", "DBRAIN1", 8}, + + {(doom_boolean)-1} +}; + +anim_t anims[MAXANIMS]; +anim_t* lastanim; + + +// +// Animating line specials +// + +extern short numlinespecials; +extern line_t* linespeciallist[MAXLINEANIMS]; + + +void P_InitPicAnims(void) +{ + int i; + + // Init animation + lastanim = anims; + for (i = 0; animdefs[i].istexture != (doom_boolean)-1; i++) + { + if (animdefs[i].istexture) + { + // different episode ? + if (R_CheckTextureNumForName(animdefs[i].startname) == -1) + continue; + + lastanim->picnum = R_TextureNumForName(animdefs[i].endname); + lastanim->basepic = R_TextureNumForName(animdefs[i].startname); + } + else + { + if (W_CheckNumForName(animdefs[i].startname) == -1) + continue; + + lastanim->picnum = R_FlatNumForName(animdefs[i].endname); + lastanim->basepic = R_FlatNumForName(animdefs[i].startname); + } + + lastanim->istexture = animdefs[i].istexture; + lastanim->numpics = lastanim->picnum - lastanim->basepic + 1; + + if (lastanim->numpics < 2) + { + //I_Error("Error: P_InitPicAnims: bad cycle from %s to %s", + // animdefs[i].startname, + // animdefs[i].endname); + + doom_strcpy(error_buf, "Error: P_InitPicAnims: bad cycle from "); + doom_concat(error_buf, animdefs[i].startname); + doom_concat(error_buf, " to "); + doom_concat(error_buf, animdefs[i].endname); + I_Error(error_buf); + } + + lastanim->speed = animdefs[i].speed; + lastanim++; + } +} + + +// +// UTILITIES +// + +// +// getSide() +// Will return a side_t* +// given the number of the current sector, +// the line number, and the side (0/1) that you want. +// +side_t* getSide(int currentSector, int line, int side) +{ + return &sides[(sectors[currentSector].lines[line])->sidenum[side]]; +} + + +// +// getSector() +// Will return a sector_t* +// given the number of the current sector, +// the line number and the side (0/1) that you want. +// +sector_t* getSector(int currentSector, int line, int side) +{ + return sides[(sectors[currentSector].lines[line])->sidenum[side]].sector; +} + + +// +// twoSided() +// Given the sector number and the line number, +// it will tell you whether the line is two-sided or not. +// +int twoSided(int sector, int line) +{ + return (sectors[sector].lines[line])->flags & ML_TWOSIDED; +} + + +// +// getNextSector() +// Return sector_t * of sector next to current. +// 0 if not two-sided line +// +sector_t* getNextSector(line_t* line, sector_t* sec) +{ + if (!(line->flags & ML_TWOSIDED)) + return 0; + + if (line->frontsector == sec) + return line->backsector; + + return line->frontsector; +} + + +// +// P_FindLowestFloorSurrounding() +// FIND LOWEST FLOOR HEIGHT IN SURROUNDING SECTORS +// +fixed_t P_FindLowestFloorSurrounding(sector_t* sec) +{ + int i; + line_t* check; + sector_t* other; + fixed_t floor = sec->floorheight; + + for (i = 0; i < sec->linecount; i++) + { + check = sec->lines[i]; + other = getNextSector(check, sec); + + if (!other) + continue; + + if (other->floorheight < floor) + floor = other->floorheight; + } + + return floor; +} + + +// +// P_FindHighestFloorSurrounding() +// FIND HIGHEST FLOOR HEIGHT IN SURROUNDING SECTORS +// +fixed_t P_FindHighestFloorSurrounding(sector_t* sec) +{ + int i; + line_t* check; + sector_t* other; + fixed_t floor = -500 * FRACUNIT; + + for (i = 0; i < sec->linecount; i++) + { + check = sec->lines[i]; + other = getNextSector(check, sec); + + if (!other) + continue; + + if (other->floorheight > floor) + floor = other->floorheight; + } + + return floor; +} + + +// +// P_FindNextHighestFloor +// FIND NEXT HIGHEST FLOOR IN SURROUNDING SECTORS +// Note: this should be doable w/o a fixed array. +fixed_t P_FindNextHighestFloor(sector_t* sec, int currentheight) +{ + int i; + int h; + int min; + line_t* check; + sector_t* other; + fixed_t height = currentheight; + + fixed_t heightlist[MAX_ADJOINING_SECTORS]; + + for (i = 0, h = 0; i < sec->linecount; i++) + { + check = sec->lines[i]; + other = getNextSector(check, sec); + + if (!other) + continue; + + if (other->floorheight > height) + heightlist[h++] = other->floorheight; + + // Check for overflow. Exit. + if (h >= MAX_ADJOINING_SECTORS) + { + doom_print( + "Sector with more than 20 adjoining sectors\n"); + break; + } + } + + // Find lowest height in list + if (!h) + return currentheight; + + min = heightlist[0]; + + // Range checking? + for (i = 1; i < h; i++) + if (heightlist[i] < min) + min = heightlist[i]; + + return min; +} + + +// +// FIND LOWEST CEILING IN THE SURROUNDING SECTORS +// +fixed_t P_FindLowestCeilingSurrounding(sector_t* sec) +{ + int i; + line_t* check; + sector_t* other; + fixed_t height = DOOM_MAXINT; + + for (i = 0; i < sec->linecount; i++) + { + check = sec->lines[i]; + other = getNextSector(check, sec); + + if (!other) + continue; + + if (other->ceilingheight < height) + height = other->ceilingheight; + } + + return height; +} + + +// +// FIND HIGHEST CEILING IN THE SURROUNDING SECTORS +// +fixed_t P_FindHighestCeilingSurrounding(sector_t* sec) +{ + int i; + line_t* check; + sector_t* other; + fixed_t height = 0; + + for (i = 0; i < sec->linecount; i++) + { + check = sec->lines[i]; + other = getNextSector(check, sec); + + if (!other) + continue; + + if (other->ceilingheight > height) + height = other->ceilingheight; + } + + return height; +} + + +// +// RETURN NEXT SECTOR # THAT LINE TAG REFERS TO +// +int P_FindSectorFromLineTag(line_t* line, int start) +{ + int i; + + for (i = start + 1; i < numsectors; i++) + if (sectors[i].tag == line->tag) + return i; + + return -1; +} + + +// +// Find minimum light from an adjacent sector +// +int P_FindMinSurroundingLight(sector_t* sector, int max) +{ + int i; + int min; + line_t* line; + sector_t* check; + + min = max; + for (i = 0; i < sector->linecount; i++) + { + line = sector->lines[i]; + check = getNextSector(line, sector); + + if (!check) + continue; + + if (check->lightlevel < min) + min = check->lightlevel; + } + + return min; +} + + +// +// EVENTS +// Events are operations triggered by using, crossing, +// or shooting special lines, or by timed thinkers. +// + +// +// P_CrossSpecialLine - TRIGGER +// Called every time a thing origin is about +// to cross a line with a non 0 special. +// +void P_CrossSpecialLine(int linenum, int side, mobj_t* thing) +{ + line_t* line; + int ok; + + line = &lines[linenum]; + + // Triggers that other things can activate + if (!thing->player) + { + // Things that should NOT trigger specials... + switch (thing->type) + { + case MT_ROCKET: + case MT_PLASMA: + case MT_BFG: + case MT_TROOPSHOT: + case MT_HEADSHOT: + case MT_BRUISERSHOT: + return; + break; + + default: break; + } + + ok = 0; + switch (line->special) + { + case 39: // TELEPORT TRIGGER + case 97: // TELEPORT RETRIGGER + case 125: // TELEPORT MONSTERONLY TRIGGER + case 126: // TELEPORT MONSTERONLY RETRIGGER + case 4: // RAISE DOOR + case 10: // PLAT DOWN-WAIT-UP-STAY TRIGGER + case 88: // PLAT DOWN-WAIT-UP-STAY RETRIGGER + ok = 1; + break; + } + if (!ok) + return; + } + + // Note: could use some const's here. + switch (line->special) + { + // TRIGGERS. + // All from here to RETRIGGERS. + case 2: + // Open Door + EV_DoDoor(line, door_open); + line->special = 0; + break; + + case 3: + // Close Door + EV_DoDoor(line, door_close); + line->special = 0; + break; + + case 4: + // Raise Door + EV_DoDoor(line, door_normal); + line->special = 0; + break; + + case 5: + // Raise Floor + EV_DoFloor(line, raiseFloor); + line->special = 0; + break; + + case 6: + // Fast Ceiling Crush & Raise + EV_DoCeiling(line, fastCrushAndRaise); + line->special = 0; + break; + + case 8: + // Build Stairs + EV_BuildStairs(line, build8); + line->special = 0; + break; + + case 10: + // PlatDownWaitUp + EV_DoPlat(line, downWaitUpStay, 0); + line->special = 0; + break; + + case 12: + // Light Turn On - brightest near + EV_LightTurnOn(line, 0); + line->special = 0; + break; + + case 13: + // Light Turn On 255 + EV_LightTurnOn(line, 255); + line->special = 0; + break; + + case 16: + // Close Door 30 + EV_DoDoor(line, close30ThenOpen); + line->special = 0; + break; + + case 17: + // Start Light Strobing + EV_StartLightStrobing(line); + line->special = 0; + break; + + case 19: + // Lower Floor + EV_DoFloor(line, lowerFloor); + line->special = 0; + break; + + case 22: + // Raise floor to nearest height and change texture + EV_DoPlat(line, raiseToNearestAndChange, 0); + line->special = 0; + break; + + case 25: + // Ceiling Crush and Raise + EV_DoCeiling(line, crushAndRaise); + line->special = 0; + break; + + case 30: + // Raise floor to shortest texture height + // on either side of lines. + EV_DoFloor(line, raiseToTexture); + line->special = 0; + break; + + case 35: + // Lights Very Dark + EV_LightTurnOn(line, 35); + line->special = 0; + break; + + case 36: + // Lower Floor (TURBO) + EV_DoFloor(line, turboLower); + line->special = 0; + break; + + case 37: + // LowerAndChange + EV_DoFloor(line, lowerAndChange); + line->special = 0; + break; + + case 38: + // Lower Floor To Lowest + EV_DoFloor(line, lowerFloorToLowest); + line->special = 0; + break; + + case 39: + // TELEPORT! + EV_Teleport(line, side, thing); + line->special = 0; + break; + + case 40: + // RaiseCeilingLowerFloor + EV_DoCeiling(line, raiseToHighest); + EV_DoFloor(line, lowerFloorToLowest); + line->special = 0; + break; + + case 44: + // Ceiling Crush + EV_DoCeiling(line, lowerAndCrush); + line->special = 0; + break; + + case 52: + // EXIT! + G_ExitLevel(); + break; + + case 53: + // Perpetual Platform Raise + EV_DoPlat(line, perpetualRaise, 0); + line->special = 0; + break; + + case 54: + // Platform Stop + EV_StopPlat(line); + line->special = 0; + break; + + case 56: + // Raise Floor Crush + EV_DoFloor(line, raiseFloorCrush); + line->special = 0; + break; + + case 57: + // Ceiling Crush Stop + EV_CeilingCrushStop(line); + line->special = 0; + break; + + case 58: + // Raise Floor 24 + EV_DoFloor(line, raiseFloor24); + line->special = 0; + break; + + case 59: + // Raise Floor 24 And Change + EV_DoFloor(line, raiseFloor24AndChange); + line->special = 0; + break; + + case 104: + // Turn lights off in sector(tag) + EV_TurnTagLightsOff(line); + line->special = 0; + break; + + case 108: + // Blazing Door Raise (faster than TURBO!) + EV_DoDoor(line, blazeRaise); + line->special = 0; + break; + + case 109: + // Blazing Door Open (faster than TURBO!) + EV_DoDoor(line, blazeOpen); + line->special = 0; + break; + + case 100: + // Build Stairs Turbo 16 + EV_BuildStairs(line, turbo16); + line->special = 0; + break; + + case 110: + // Blazing Door Close (faster than TURBO!) + EV_DoDoor(line, blazeClose); + line->special = 0; + break; + + case 119: + // Raise floor to nearest surr. floor + EV_DoFloor(line, raiseFloorToNearest); + line->special = 0; + break; + + case 121: + // Blazing PlatDownWaitUpStay + EV_DoPlat(line, blazeDWUS, 0); + line->special = 0; + break; + + case 124: + // Secret EXIT + G_SecretExitLevel(); + break; + + case 125: + // TELEPORT MonsterONLY + if (!thing->player) + { + EV_Teleport(line, side, thing); + line->special = 0; + } + break; + + case 130: + // Raise Floor Turbo + EV_DoFloor(line, raiseFloorTurbo); + line->special = 0; + break; + + case 141: + // Silent Ceiling Crush & Raise + EV_DoCeiling(line, silentCrushAndRaise); + line->special = 0; + break; + + // RETRIGGERS. All from here till end. + case 72: + // Ceiling Crush + EV_DoCeiling(line, lowerAndCrush); + break; + + case 73: + // Ceiling Crush and Raise + EV_DoCeiling(line, crushAndRaise); + break; + + case 74: + // Ceiling Crush Stop + EV_CeilingCrushStop(line); + break; + + case 75: + // Close Door + EV_DoDoor(line, door_close); + break; + + case 76: + // Close Door 30 + EV_DoDoor(line, close30ThenOpen); + break; + + case 77: + // Fast Ceiling Crush & Raise + EV_DoCeiling(line, fastCrushAndRaise); + break; + + case 79: + // Lights Very Dark + EV_LightTurnOn(line, 35); + break; + + case 80: + // Light Turn On - brightest near + EV_LightTurnOn(line, 0); + break; + + case 81: + // Light Turn On 255 + EV_LightTurnOn(line, 255); + break; + + case 82: + // Lower Floor To Lowest + EV_DoFloor(line, lowerFloorToLowest); + break; + + case 83: + // Lower Floor + EV_DoFloor(line, lowerFloor); + break; + + case 84: + // LowerAndChange + EV_DoFloor(line, lowerAndChange); + break; + + case 86: + // Open Door + EV_DoDoor(line, door_open); + break; + + case 87: + // Perpetual Platform Raise + EV_DoPlat(line, perpetualRaise, 0); + break; + + case 88: + // PlatDownWaitUp + EV_DoPlat(line, downWaitUpStay, 0); + break; + + case 89: + // Platform Stop + EV_StopPlat(line); + break; + + case 90: + // Raise Door + EV_DoDoor(line, door_normal); + break; + + case 91: + // Raise Floor + EV_DoFloor(line, raiseFloor); + break; + + case 92: + // Raise Floor 24 + EV_DoFloor(line, raiseFloor24); + break; + + case 93: + // Raise Floor 24 And Change + EV_DoFloor(line, raiseFloor24AndChange); + break; + + case 94: + // Raise Floor Crush + EV_DoFloor(line, raiseFloorCrush); + break; + + case 95: + // Raise floor to nearest height + // and change texture. + EV_DoPlat(line, raiseToNearestAndChange, 0); + break; + + case 96: + // Raise floor to shortest texture height + // on either side of lines. + EV_DoFloor(line, raiseToTexture); + break; + + case 97: + // TELEPORT! + EV_Teleport(line, side, thing); + break; + + case 98: + // Lower Floor (TURBO) + EV_DoFloor(line, turboLower); + break; + + case 105: + // Blazing Door Raise (faster than TURBO!) + EV_DoDoor(line, blazeRaise); + break; + + case 106: + // Blazing Door Open (faster than TURBO!) + EV_DoDoor(line, blazeOpen); + break; + + case 107: + // Blazing Door Close (faster than TURBO!) + EV_DoDoor(line, blazeClose); + break; + + case 120: + // Blazing PlatDownWaitUpStay. + EV_DoPlat(line, blazeDWUS, 0); + break; + + case 126: + // TELEPORT MonsterONLY. + if (!thing->player) + EV_Teleport(line, side, thing); + break; + + case 128: + // Raise To Nearest Floor + EV_DoFloor(line, raiseFloorToNearest); + break; + + case 129: + // Raise Floor Turbo + EV_DoFloor(line, raiseFloorTurbo); + break; + } +} + + +// +// P_ShootSpecialLine - IMPACT SPECIALS +// Called when a thing shoots a special line. +// +void P_ShootSpecialLine(mobj_t* thing, line_t* line) +{ + int ok; + + // Impacts that other things can activate. + if (!thing->player) + { + ok = 0; + switch (line->special) + { + case 46: + // OPEN DOOR IMPACT + ok = 1; + break; + } + if (!ok) + return; + } + + switch (line->special) + { + case 24: + // RAISE FLOOR + EV_DoFloor(line, raiseFloor); + P_ChangeSwitchTexture(line, 0); + break; + + case 46: + // OPEN DOOR + EV_DoDoor(line, door_open); + P_ChangeSwitchTexture(line, 1); + break; + + case 47: + // RAISE FLOOR NEAR AND CHANGE + EV_DoPlat(line, raiseToNearestAndChange, 0); + P_ChangeSwitchTexture(line, 0); + break; + } +} + + +// +// P_PlayerInSpecialSector +// Called every tic frame +// that the player origin is in a special sector +// +void P_PlayerInSpecialSector(player_t* player) +{ + sector_t* sector; + + sector = player->mo->subsector->sector; + + // Falling, not all the way down yet? + if (player->mo->z != sector->floorheight) + return; + + // Has hitten ground. + switch (sector->special) + { + case 5: + // HELLSLIME DAMAGE + if (!player->powers[pw_ironfeet]) + if (!(leveltime & 0x1f)) + P_DamageMobj(player->mo, 0, 0, 10); + break; + + case 7: + // NUKAGE DAMAGE + if (!player->powers[pw_ironfeet]) + if (!(leveltime & 0x1f)) + P_DamageMobj(player->mo, 0, 0, 5); + break; + + case 16: + // SUPER HELLSLIME DAMAGE + case 4: + // STROBE HURT + if (!player->powers[pw_ironfeet] + || (P_Random() < 5)) + { + if (!(leveltime & 0x1f)) + P_DamageMobj(player->mo, 0, 0, 20); + } + break; + + case 9: + // SECRET SECTOR + player->secretcount++; + player->message = (char*)"A secret is revealed!"; + S_StartSound(0, sfx_getpow); + sector->special = 0; + break; + + case 11: + // EXIT SUPER DAMAGE! (for E1M8 finale) + player->cheats &= ~CF_GODMODE; + + if (!(leveltime & 0x1f)) + P_DamageMobj(player->mo, 0, 0, 20); + + if (player->health <= 10) + G_ExitLevel(); + break; + + default: + { + //I_Error("Error: P_PlayerInSpecialSector: " + // "unknown special %i", + // sector->special); + + + doom_strcpy(error_buf, "Error: P_PlayerInSpecialSector: unknown special "); + doom_concat(error_buf, doom_itoa(sector->special, 10)); + I_Error(error_buf); + break; + } + }; +} + + +// +// P_UpdateSpecials +// Animate planes, scroll walls, etc. +// +void P_UpdateSpecials(void) +{ + anim_t* anim; + int pic; + int i; + line_t* line; + + // LEVEL TIMER + if (levelTimer == doom_true) + { + levelTimeCount--; + if (!levelTimeCount) + G_ExitLevel(); + } + + // ANIMATE FLATS AND TEXTURES GLOBALLY + for (anim = anims; anim < lastanim; anim++) + { + for (i = anim->basepic; i < anim->basepic + anim->numpics; i++) + { + pic = anim->basepic + ((leveltime / anim->speed + i) % anim->numpics); + if (anim->istexture) + texturetranslation[i] = pic; + else + flattranslation[i] = pic; + } + } + + // ANIMATE LINE SPECIALS + for (i = 0; i < numlinespecials; i++) + { + line = linespeciallist[i]; + switch (line->special) + { + case 48: + // EFFECT FIRSTCOL SCROLL + + sides[line->sidenum[0]].textureoffset += FRACUNIT; + break; + } + } + + // DO BUTTONS + for (i = 0; i < MAXBUTTONS; i++) + if (buttonlist[i].btimer) + { + buttonlist[i].btimer--; + if (!buttonlist[i].btimer) + { + switch (buttonlist[i].where) + { + case top: + sides[buttonlist[i].line->sidenum[0]].toptexture = + buttonlist[i].btexture; + break; + + case middle: + sides[buttonlist[i].line->sidenum[0]].midtexture = + buttonlist[i].btexture; + break; + + case bottom: + sides[buttonlist[i].line->sidenum[0]].bottomtexture = + buttonlist[i].btexture; + break; + } + S_StartSound((mobj_t*)&buttonlist[i].soundorg, sfx_swtchn); + doom_memset(&buttonlist[i], 0, sizeof(button_t)); + } + } +} + + +// +// Special Stuff that can not be categorized +// +int EV_DoDonut(line_t* line) +{ + sector_t* s1; + sector_t* s2; + sector_t* s3; + int secnum; + int rtn; + int i; + floormove_t* floor; + + secnum = -1; + rtn = 0; + while ((secnum = P_FindSectorFromLineTag(line, secnum)) >= 0) + { + s1 = §ors[secnum]; + + // ALREADY MOVING? IF SO, KEEP GOING... + if (s1->specialdata) + continue; + + rtn = 1; + s2 = getNextSector(s1->lines[0], s1); + for (i = 0; i < s2->linecount; i++) + { + if ((!(s2->lines[i]->flags & ML_TWOSIDED)) || + (s2->lines[i]->backsector == s1)) + continue; + s3 = s2->lines[i]->backsector; + + // Spawn rising slime + floor = (floormove_t*)Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0); + P_AddThinker(&floor->thinker); + s2->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; + floor->type = donutRaise; + floor->crush = doom_false; + floor->direction = 1; + floor->sector = s2; + floor->speed = FLOORSPEED / 2; + floor->texture = s3->floorpic; + floor->newspecial = 0; + floor->floordestheight = s3->floorheight; + + // Spawn lowering donut-hole + floor = (floormove_t*)Z_Malloc(sizeof(*floor), PU_LEVSPEC, 0); + P_AddThinker(&floor->thinker); + s1->specialdata = floor; + floor->thinker.function.acp1 = (actionf_p1)T_MoveFloor; + floor->type = lowerFloor; + floor->crush = doom_false; + floor->direction = -1; + floor->sector = s1; + floor->speed = FLOORSPEED / 2; + floor->floordestheight = s3->floorheight; + break; + } + } + + return rtn; +} + + +// +// SPECIAL SPAWNING +// + +// +// P_SpawnSpecials +// After the map has been loaded, scan for specials +// that spawn thinkers +// + +// Parses command line parameters. +void P_SpawnSpecials(void) +{ + sector_t* sector; + int i; + int episode; + + episode = 1; + if (W_CheckNumForName((char*)"texture2") >= 0) + episode = 2; + + + // See if -TIMER needs to be used. + levelTimer = doom_false; + + i = M_CheckParm((char*)"-avg"); + if (i && deathmatch) + { + levelTimer = doom_true; + levelTimeCount = 20 * 60 * 35; + } + + i = M_CheckParm((char*)"-timer"); + if (i && deathmatch) + { + int time; + time = doom_atoi(myargv[i + 1]) * 60 * 35; + levelTimer = doom_true; + levelTimeCount = time; + } + + // Init special SECTORs. + sector = sectors; + for (i = 0; i < numsectors; i++, sector++) + { + if (!sector->special) + continue; + + switch (sector->special) + { + case 1: + // FLICKERING LIGHTS + P_SpawnLightFlash(sector); + break; + + case 2: + // STROBE FAST + P_SpawnStrobeFlash(sector, FASTDARK, 0); + break; + + case 3: + // STROBE SLOW + P_SpawnStrobeFlash(sector, SLOWDARK, 0); + break; + + case 4: + // STROBE FAST/DEATH SLIME + P_SpawnStrobeFlash(sector, FASTDARK, 0); + sector->special = 4; + break; + + case 8: + // GLOWING LIGHT + P_SpawnGlowingLight(sector); + break; + case 9: + // SECRET SECTOR + totalsecret++; + break; + + case 10: + // DOOR CLOSE IN 30 SECONDS + P_SpawnDoorCloseIn30(sector); + break; + + case 12: + // SYNC STROBE SLOW + P_SpawnStrobeFlash(sector, SLOWDARK, 1); + break; + + case 13: + // SYNC STROBE FAST + P_SpawnStrobeFlash(sector, FASTDARK, 1); + break; + + case 14: + // DOOR RAISE IN 5 MINUTES + P_SpawnDoorRaiseIn5Mins(sector, i); + break; + + case 17: + P_SpawnFireFlicker(sector); + break; + } + } + + + // Init line EFFECTs + numlinespecials = 0; + for (i = 0; i < numlines; i++) + { + switch (lines[i].special) + { + case 48: + // EFFECT FIRSTCOL SCROLL+ + linespeciallist[numlinespecials] = &lines[i]; + numlinespecials++; + break; + } + } + + + // Init other misc stuff + for (i = 0; i < MAXCEILINGS; i++) + activeceilings[i] = 0; + + for (i = 0; i < MAXPLATS; i++) + activeplats[i] = 0; + + for (i = 0; i < MAXBUTTONS; i++) + doom_memset(&buttonlist[i], 0, sizeof(button_t)); +} +switchlist_t alphSwitchList[] = +{ + // Doom shareware episode 1 switches + {"SW1BRCOM", "SW2BRCOM", 1}, + {"SW1BRN1", "SW2BRN1", 1}, + {"SW1BRN2", "SW2BRN2", 1}, + {"SW1BRNGN", "SW2BRNGN", 1}, + {"SW1BROWN", "SW2BROWN", 1}, + {"SW1COMM", "SW2COMM", 1}, + {"SW1COMP", "SW2COMP", 1}, + {"SW1DIRT", "SW2DIRT", 1}, + {"SW1EXIT", "SW2EXIT", 1}, + {"SW1GRAY", "SW2GRAY", 1}, + {"SW1GRAY1", "SW2GRAY1", 1}, + {"SW1METAL", "SW2METAL", 1}, + {"SW1PIPE", "SW2PIPE", 1}, + {"SW1SLAD", "SW2SLAD", 1}, + {"SW1STARG", "SW2STARG", 1}, + {"SW1STON1", "SW2STON1", 1}, + {"SW1STON2", "SW2STON2", 1}, + {"SW1STONE", "SW2STONE", 1}, + {"SW1STRTN", "SW2STRTN", 1}, + + // Doom registered episodes 2&3 switches + {"SW1BLUE", "SW2BLUE", 2}, + {"SW1CMT", "SW2CMT", 2}, + {"SW1GARG", "SW2GARG", 2}, + {"SW1GSTON", "SW2GSTON", 2}, + {"SW1HOT", "SW2HOT", 2}, + {"SW1LION", "SW2LION", 2}, + {"SW1SATYR", "SW2SATYR", 2}, + {"SW1SKIN", "SW2SKIN", 2}, + {"SW1VINE", "SW2VINE", 2}, + {"SW1WOOD", "SW2WOOD", 2}, + + // Doom II switches + {"SW1PANEL", "SW2PANEL", 3}, + {"SW1ROCK", "SW2ROCK", 3}, + {"SW1MET2", "SW2MET2", 3}, + {"SW1WDMET", "SW2WDMET", 3}, + {"SW1BRIK", "SW2BRIK", 3}, + {"SW1MOD1", "SW2MOD1", 3}, + {"SW1ZIM", "SW2ZIM", 3}, + {"SW1STON6", "SW2STON6", 3}, + {"SW1TEK", "SW2TEK", 3}, + {"SW1MARB", "SW2MARB", 3}, + {"SW1SKULL", "SW2SKULL", 3}, + + {"\0", "\0", 0} +}; + +int switchlist[MAXSWITCHES * 2]; +int numswitches; +button_t buttonlist[MAXBUTTONS]; + + +// +// P_InitSwitchList +// Only called at game initialization. +// +void P_InitSwitchList(void) +{ + int i; + int index; + int episode; + + episode = 1; + + if (gamemode == registered) + episode = 2; + else + if (gamemode == commercial) + episode = 3; + + for (index = 0, i = 0; i < MAXSWITCHES; i++) + { + if (!alphSwitchList[i].episode) + { + numswitches = index / 2; + switchlist[index] = -1; + break; + } + + if (alphSwitchList[i].episode <= episode) + { + switchlist[index++] = R_TextureNumForName(alphSwitchList[i].name1); + switchlist[index++] = R_TextureNumForName(alphSwitchList[i].name2); + } + } +} + + +// +// Start a button counting down till it turns off. +// +void P_StartButton(line_t* line, bwhere_e w, int texture, int time) +{ + int i; + + // See if button is already pressed + for (i = 0; i < MAXBUTTONS; i++) + { + if (buttonlist[i].btimer + && buttonlist[i].line == line) + { + + return; + } + } + + for (i = 0; i < MAXBUTTONS; i++) + { + if (!buttonlist[i].btimer) + { + buttonlist[i].line = line; + buttonlist[i].where = w; + buttonlist[i].btexture = texture; + buttonlist[i].btimer = time; + buttonlist[i].soundorg = (mobj_t*)&line->frontsector->soundorg; + return; + } + } + + I_Error((char*)"Error: P_StartButton: no button slots left!"); +} + + +// +// Function that changes wall texture. +// Tell it if switch is ok to use again (1=yes, it's a button). +// +void P_ChangeSwitchTexture(line_t* line, int useAgain) +{ + int texTop; + int texMid; + int texBot; + int i; + int sound; + + if (!useAgain) + line->special = 0; + + texTop = sides[line->sidenum[0]].toptexture; + texMid = sides[line->sidenum[0]].midtexture; + texBot = sides[line->sidenum[0]].bottomtexture; + + sound = sfx_swtchn; + + // EXIT SWITCH? + if (line->special == 11) + sound = sfx_swtchx; + + for (i = 0; i < numswitches * 2; i++) + { + if (switchlist[i] == texTop) + { + S_StartSound(buttonlist->soundorg, sound); + sides[line->sidenum[0]].toptexture = switchlist[i ^ 1]; + + if (useAgain) + P_StartButton(line, top, switchlist[i], BUTTONTIME); + + return; + } + else + { + if (switchlist[i] == texMid) + { + S_StartSound(buttonlist->soundorg, sound); + sides[line->sidenum[0]].midtexture = switchlist[i ^ 1]; + + if (useAgain) + P_StartButton(line, middle, switchlist[i], BUTTONTIME); + + return; + } + else + { + if (switchlist[i] == texBot) + { + S_StartSound(buttonlist->soundorg, sound); + sides[line->sidenum[0]].bottomtexture = switchlist[i ^ 1]; + + if (useAgain) + P_StartButton(line, bottom, switchlist[i], BUTTONTIME); + + return; + } + } + } + } +} + + +// +// P_UseSpecialLine +// Called when a thing uses a special line. +// Only the front sides of lines are usable. +// +doom_boolean P_UseSpecialLine(mobj_t* thing, line_t* line, int side) +{ + // Err... + // Use the back sides of VERY SPECIAL lines... + if (side) + { + switch (line->special) + { + case 124: + // Sliding door open&close + // UNUSED? + break; + + default: + return doom_false; + break; + } + } + + + // Switches that other things can activate. + if (!thing->player) + { + // never open secret doors + if (line->flags & ML_SECRET) + return doom_false; + + switch (line->special) + { + case 1: // MANUAL DOOR RAISE + case 32: // MANUAL BLUE + case 33: // MANUAL RED + case 34: // MANUAL YELLOW + break; + + default: + return doom_false; + break; + } + } + + + // do something + switch (line->special) + { + // MANUALS + case 1: // Vertical Door + case 26: // Blue Door/Locked + case 27: // Yellow Door /Locked + case 28: // Red Door /Locked + + case 31: // Manual door open + case 32: // Blue locked door open + case 33: // Red locked door open + case 34: // Yellow locked door open + + case 117: // Blazing door raise + case 118: // Blazing door open + EV_VerticalDoor(line, thing); + break; + + //UNUSED - Door Slide Open&Close + // case 124: + // EV_SlidingDoor (line, thing); + // break; + + // SWITCHES + case 7: + // Build Stairs + if (EV_BuildStairs(line, build8)) + P_ChangeSwitchTexture(line, 0); + break; + + case 9: + // Change Donut + if (EV_DoDonut(line)) + P_ChangeSwitchTexture(line, 0); + break; + + case 11: + // Exit level + P_ChangeSwitchTexture(line, 0); + G_ExitLevel(); + break; + + case 14: + // Raise Floor 32 and change texture + if (EV_DoPlat(line, raiseAndChange, 32)) + P_ChangeSwitchTexture(line, 0); + break; + + case 15: + // Raise Floor 24 and change texture + if (EV_DoPlat(line, raiseAndChange, 24)) + P_ChangeSwitchTexture(line, 0); + break; + + case 18: + // Raise Floor to next highest floor + if (EV_DoFloor(line, raiseFloorToNearest)) + P_ChangeSwitchTexture(line, 0); + break; + + case 20: + // Raise Plat next highest floor and change texture + if (EV_DoPlat(line, raiseToNearestAndChange, 0)) + P_ChangeSwitchTexture(line, 0); + break; + + case 21: + // PlatDownWaitUpStay + if (EV_DoPlat(line, downWaitUpStay, 0)) + P_ChangeSwitchTexture(line, 0); + break; + + case 23: + // Lower Floor to Lowest + if (EV_DoFloor(line, lowerFloorToLowest)) + P_ChangeSwitchTexture(line, 0); + break; + + case 29: + // Raise Door + if (EV_DoDoor(line, door_normal)) + P_ChangeSwitchTexture(line, 0); + break; + + case 41: + // Lower Ceiling to Floor + if (EV_DoCeiling(line, lowerToFloor)) + P_ChangeSwitchTexture(line, 0); + break; + + case 71: + // Turbo Lower Floor + if (EV_DoFloor(line, turboLower)) + P_ChangeSwitchTexture(line, 0); + break; + + case 49: + // Ceiling Crush And Raise + if (EV_DoCeiling(line, crushAndRaise)) + P_ChangeSwitchTexture(line, 0); + break; + + case 50: + // Close Door + if (EV_DoDoor(line, door_close)) + P_ChangeSwitchTexture(line, 0); + break; + + case 51: + // Secret EXIT + P_ChangeSwitchTexture(line, 0); + G_SecretExitLevel(); + break; + + case 55: + // Raise Floor Crush + if (EV_DoFloor(line, raiseFloorCrush)) + P_ChangeSwitchTexture(line, 0); + break; + + case 101: + // Raise Floor + if (EV_DoFloor(line, raiseFloor)) + P_ChangeSwitchTexture(line, 0); + break; + + case 102: + // Lower Floor to Surrounding floor height + if (EV_DoFloor(line, lowerFloor)) + P_ChangeSwitchTexture(line, 0); + break; + + case 103: + // Open Door + if (EV_DoDoor(line, door_open)) + P_ChangeSwitchTexture(line, 0); + break; + + case 111: + // Blazing Door Raise (faster than TURBO!) + if (EV_DoDoor(line, blazeRaise)) + P_ChangeSwitchTexture(line, 0); + break; + + case 112: + // Blazing Door Open (faster than TURBO!) + if (EV_DoDoor(line, blazeOpen)) + P_ChangeSwitchTexture(line, 0); + break; + + case 113: + // Blazing Door Close (faster than TURBO!) + if (EV_DoDoor(line, blazeClose)) + P_ChangeSwitchTexture(line, 0); + break; + + case 122: + // Blazing PlatDownWaitUpStay + if (EV_DoPlat(line, blazeDWUS, 0)) + P_ChangeSwitchTexture(line, 0); + break; + + case 127: + // Build Stairs Turbo 16 + if (EV_BuildStairs(line, turbo16)) + P_ChangeSwitchTexture(line, 0); + break; + + case 131: + // Raise Floor Turbo + if (EV_DoFloor(line, raiseFloorTurbo)) + P_ChangeSwitchTexture(line, 0); + break; + + case 133: + // BlzOpenDoor BLUE + case 135: + // BlzOpenDoor RED + case 137: + // BlzOpenDoor YELLOW + if (EV_DoLockedDoor(line, blazeOpen, thing)) + P_ChangeSwitchTexture(line, 0); + break; + + case 140: + // Raise Floor 512 + if (EV_DoFloor(line, raiseFloor512)) + P_ChangeSwitchTexture(line, 0); + break; + + // BUTTONS + case 42: + // Close Door + if (EV_DoDoor(line, door_close)) + P_ChangeSwitchTexture(line, 1); + break; + + case 43: + // Lower Ceiling to Floor + if (EV_DoCeiling(line, lowerToFloor)) + P_ChangeSwitchTexture(line, 1); + break; + + case 45: + // Lower Floor to Surrounding floor height + if (EV_DoFloor(line, lowerFloor)) + P_ChangeSwitchTexture(line, 1); + break; + + case 60: + // Lower Floor to Lowest + if (EV_DoFloor(line, lowerFloorToLowest)) + P_ChangeSwitchTexture(line, 1); + break; + + case 61: + // Open Door + if (EV_DoDoor(line, door_open)) + P_ChangeSwitchTexture(line, 1); + break; + + case 62: + // PlatDownWaitUpStay + if (EV_DoPlat(line, downWaitUpStay, 1)) + P_ChangeSwitchTexture(line, 1); + break; + + case 63: + // Raise Door + if (EV_DoDoor(line, door_normal)) + P_ChangeSwitchTexture(line, 1); + break; + + case 64: + // Raise Floor to ceiling + if (EV_DoFloor(line, raiseFloor)) + P_ChangeSwitchTexture(line, 1); + break; + + case 66: + // Raise Floor 24 and change texture + if (EV_DoPlat(line, raiseAndChange, 24)) + P_ChangeSwitchTexture(line, 1); + break; + + case 67: + // Raise Floor 32 and change texture + if (EV_DoPlat(line, raiseAndChange, 32)) + P_ChangeSwitchTexture(line, 1); + break; + + case 65: + // Raise Floor Crush + if (EV_DoFloor(line, raiseFloorCrush)) + P_ChangeSwitchTexture(line, 1); + break; + + case 68: + // Raise Plat to next highest floor and change texture + if (EV_DoPlat(line, raiseToNearestAndChange, 0)) + P_ChangeSwitchTexture(line, 1); + break; + + case 69: + // Raise Floor to next highest floor + if (EV_DoFloor(line, raiseFloorToNearest)) + P_ChangeSwitchTexture(line, 1); + break; + + case 70: + // Turbo Lower Floor + if (EV_DoFloor(line, turboLower)) + P_ChangeSwitchTexture(line, 1); + break; + + case 114: + // Blazing Door Raise (faster than TURBO!) + if (EV_DoDoor(line, blazeRaise)) + P_ChangeSwitchTexture(line, 1); + break; + + case 115: + // Blazing Door Open (faster than TURBO!) + if (EV_DoDoor(line, blazeOpen)) + P_ChangeSwitchTexture(line, 1); + break; + + case 116: + // Blazing Door Close (faster than TURBO!) + if (EV_DoDoor(line, blazeClose)) + P_ChangeSwitchTexture(line, 1); + break; + + case 123: + // Blazing PlatDownWaitUpStay + if (EV_DoPlat(line, blazeDWUS, 0)) + P_ChangeSwitchTexture(line, 1); + break; + + case 132: + // Raise Floor Turbo + if (EV_DoFloor(line, raiseFloorTurbo)) + P_ChangeSwitchTexture(line, 1); + break; + + case 99: + // BlzOpenDoor BLUE + case 134: + // BlzOpenDoor RED + case 136: + // BlzOpenDoor YELLOW + if (EV_DoLockedDoor(line, blazeOpen, thing)) + P_ChangeSwitchTexture(line, 1); + break; + + case 138: + // Light Turn On + EV_LightTurnOn(line, 255); + P_ChangeSwitchTexture(line, 1); + break; + + case 139: + // Light Turn Off + EV_LightTurnOn(line, 35); + P_ChangeSwitchTexture(line, 1); + break; + } + + return doom_true; +} +int EV_Teleport(line_t* line, int side, mobj_t* thing) +{ + int i; + int tag; + mobj_t* m; + mobj_t* fog; + unsigned an; + thinker_t* thinker; + sector_t* sector; + fixed_t oldx; + fixed_t oldy; + fixed_t oldz; + + // don't teleport missiles + if (thing->flags & MF_MISSILE) + return 0; + + // Don't teleport if hit back of line, + // so you can get out of teleporter. + if (side == 1) + return 0; + + tag = line->tag; + for (i = 0; i < numsectors; i++) + { + if (sectors[i].tag == tag) + { + thinker = thinkercap.next; + for (thinker = thinkercap.next; + thinker != &thinkercap; + thinker = thinker->next) + { + // not a mobj + if (thinker->function.acp1 != (actionf_p1)P_MobjThinker) + continue; + + m = (mobj_t*)thinker; + + // not a teleportman + if (m->type != MT_TELEPORTMAN) + continue; + + sector = m->subsector->sector; + // wrong sector + if (sector - sectors != i) + continue; + + oldx = thing->x; + oldy = thing->y; + oldz = thing->z; + + if (!P_TeleportMove(thing, m->x, m->y)) + return 0; + + thing->z = thing->floorz; //fixme: not needed? + if (thing->player) + thing->player->viewz = thing->z + thing->player->viewheight; + + // spawn teleport fog at source and destination + fog = P_SpawnMobj(oldx, oldy, oldz, MT_TFOG); + S_StartSound(fog, sfx_telept); + an = m->angle >> ANGLETOFINESHIFT; + fog = P_SpawnMobj(m->x + 20 * finecosine[an], m->y + 20 * finesine[an] + , thing->z, MT_TFOG); + + // emit sound, where? + S_StartSound(fog, sfx_telept); + + // don't move for a bit + if (thing->player) + thing->reactiontime = 18; + + thing->angle = m->angle; + thing->momx = thing->momy = thing->momz = 0; + return 1; + } + } + } + + return 0; +} +int leveltime; + +// +// THINKERS +// All thinkers should be allocated by Z_Malloc +// so they can be operated on uniformly. +// The actual structures will vary in size, +// but the first element must be thinker_t. +// + +// Both the head and tail of the thinker list. +thinker_t thinkercap; + + +// +// P_InitThinkers +// +void P_InitThinkers(void) +{ + thinkercap.prev = thinkercap.next = &thinkercap; +} + + +// +// P_AddThinker +// Adds a new thinker at the end of the list. +// +void P_AddThinker(thinker_t* thinker) +{ + thinkercap.prev->next = thinker; + thinker->next = &thinkercap; + thinker->prev = thinkercap.prev; + thinkercap.prev = thinker; +} + + +// +// P_RemoveThinker +// Deallocation is lazy -- it will not actually be freed +// until its thinking turn comes up. +// +void P_RemoveThinker(thinker_t* thinker) +{ + // FIXME: NOP. + thinker->function.acv = (actionf_v)(-1); +} + + +// +// P_RunThinkers +// +void P_RunThinkers(void) +{ + thinker_t* currentthinker; + + currentthinker = thinkercap.next; + while (currentthinker != &thinkercap) + { + if (currentthinker->function.acv == (actionf_v)(-1)) + { + // time to remove it + currentthinker->next->prev = currentthinker->prev; + currentthinker->prev->next = currentthinker->next; + Z_Free(currentthinker); + } + else + { + if (currentthinker->function.acp1) + currentthinker->function.acp1(currentthinker); + } + currentthinker = currentthinker->next; + } +} + + +// +// P_Ticker +// +void P_Ticker(void) +{ + int i; + + // run the tic + if (paused) + return; + + // pause if in menu and at least one tic has been run + if (!netgame + && menuactive + && !demoplayback + && players[consoleplayer].viewz != 1) + { + return; + } + + for (i = 0; i < MAXPLAYERS; i++) + if (playeringame[i]) + P_PlayerThink(&players[i]); + + P_RunThinkers(); + P_UpdateSpecials(); + P_RespawnSpecials(); + + // for par times + leveltime++; +} +#define INVERSECOLORMAP 32 + +// 16 pixels of bob +#define MAXBOB 0x100000 + +#define ANG5 (ANG90/18) + + +// +// Movement. +// + +doom_boolean onground; + + +// +// P_Thrust +// Moves the given origin along a given angle. +// +void P_Thrust(player_t* player, angle_t angle, fixed_t move) +{ + angle >>= ANGLETOFINESHIFT; + + player->mo->momx += FixedMul(move, finecosine[angle]); + player->mo->momy += FixedMul(move, finesine[angle]); +} + + +// +// P_CalcHeight +// Calculate the walking / running height adjustment +// +void P_CalcHeight(player_t* player) +{ + int angle; + fixed_t bob; + + // Regular movement bobbing + // (needs to be calculated for gun swing + // even if not on ground) + // OPTIMIZE: tablify angle + // Note: a LUT allows for effects + // like a ramp with low health. + player->bob = + FixedMul(player->mo->momx, player->mo->momx) + + FixedMul(player->mo->momy, player->mo->momy); + + player->bob >>= 2; + + if (player->bob > MAXBOB) + player->bob = MAXBOB; + + if ((player->cheats & CF_NOMOMENTUM) || !onground) + { + player->viewz = player->mo->z + VIEWHEIGHT; + + if (player->viewz > player->mo->ceilingz - 4 * FRACUNIT) + player->viewz = player->mo->ceilingz - 4 * FRACUNIT; + + player->viewz = player->mo->z + player->viewheight; + return; + } + + angle = (FINEANGLES / 20 * leveltime) & FINEMASK; + bob = FixedMul(player->bob / 2, finesine[angle]); + + + // move viewheight + if (player->playerstate == PST_LIVE) + { + player->viewheight += player->deltaviewheight; + + if (player->viewheight > VIEWHEIGHT) + { + player->viewheight = VIEWHEIGHT; + player->deltaviewheight = 0; + } + + if (player->viewheight < VIEWHEIGHT / 2) + { + player->viewheight = VIEWHEIGHT / 2; + if (player->deltaviewheight <= 0) + player->deltaviewheight = 1; + } + + if (player->deltaviewheight) + { + player->deltaviewheight += FRACUNIT / 4; + if (!player->deltaviewheight) + player->deltaviewheight = 1; + } + } + player->viewz = player->mo->z + player->viewheight + bob; + + if (player->viewz > player->mo->ceilingz - 4 * FRACUNIT) + player->viewz = player->mo->ceilingz - 4 * FRACUNIT; +} + + +// +// P_MovePlayer +// +void P_MovePlayer(player_t* player) +{ + ticcmd_t* cmd; + + cmd = &player->cmd; + + player->mo->angle += (cmd->angleturn << 16); + + // Do not let the player control movement + // if not onground. + onground = (player->mo->z <= player->mo->floorz); + + if (cmd->forwardmove && onground) + P_Thrust(player, player->mo->angle, cmd->forwardmove * 2048); + + if (cmd->sidemove && onground) + P_Thrust(player, player->mo->angle - ANG90, cmd->sidemove * 2048); + + if ((cmd->forwardmove || cmd->sidemove) + && player->mo->state == &states[S_PLAY]) + { + P_SetMobjState(player->mo, S_PLAY_RUN1); + } +} + + +// +// P_DeathThink +// Fall on your face when dying. +// Decrease POV height to floor height. +// +void P_DeathThink(player_t* player) +{ + angle_t angle; + angle_t delta; + + P_MovePsprites(player); + + // fall to the ground + if (player->viewheight > 6 * FRACUNIT) + player->viewheight -= FRACUNIT; + + if (player->viewheight < 6 * FRACUNIT) + player->viewheight = 6 * FRACUNIT; + + player->deltaviewheight = 0; + onground = (player->mo->z <= player->mo->floorz); + P_CalcHeight(player); + + if (player->attacker && player->attacker != player->mo) + { + angle = R_PointToAngle2(player->mo->x, + player->mo->y, + player->attacker->x, + player->attacker->y); + + delta = angle - player->mo->angle; + + if (delta < ANG5 || delta >(unsigned) - ANG5) + { + // Looking at killer, + // so fade damage flash down. + player->mo->angle = angle; + + if (player->damagecount) + player->damagecount--; + } + else if (delta < ANG180) + player->mo->angle += ANG5; + else + player->mo->angle -= ANG5; + } + else if (player->damagecount) + player->damagecount--; + + + if (player->cmd.buttons & BT_USE) + player->playerstate = PST_REBORN; +} + + +// +// P_PlayerThink +// +void P_PlayerThink(player_t* player) +{ + ticcmd_t* cmd; + weapontype_t newweapon; + + // fixme: do this in the cheat code + if (player->cheats & CF_NOCLIP) + player->mo->flags |= MF_NOCLIP; + else + player->mo->flags &= ~MF_NOCLIP; + + // chain saw run forward + cmd = &player->cmd; + if (player->mo->flags & MF_JUSTATTACKED) + { + cmd->angleturn = 0; + cmd->forwardmove = 0xc800 / 512; + cmd->sidemove = 0; + player->mo->flags &= ~MF_JUSTATTACKED; + } + + + if (player->playerstate == PST_DEAD) + { + P_DeathThink(player); + return; + } + + // Move around. + // Reactiontime is used to prevent movement + // for a bit after a teleport. + if (player->mo->reactiontime) + player->mo->reactiontime--; + else + P_MovePlayer(player); + + P_CalcHeight(player); + + if (player->mo->subsector->sector->special) + P_PlayerInSpecialSector(player); + + // Check for weapon change. + + // A special event has no other buttons. + if (cmd->buttons & BT_SPECIAL) + cmd->buttons = 0; + + if (cmd->buttons & BT_CHANGE) + { + // The actual changing of the weapon is done + // when the weapon psprite can do it + // (read: not in the middle of an attack). + newweapon = (weapontype_t)((cmd->buttons & BT_WEAPONMASK) >> BT_WEAPONSHIFT); + + if (newweapon == wp_fist + && player->weaponowned[wp_chainsaw] + && !(player->readyweapon == wp_chainsaw + && player->powers[pw_strength])) + { + newweapon = wp_chainsaw; + } + + if ((gamemode == commercial) + && newweapon == wp_shotgun + && player->weaponowned[wp_supershotgun] + && player->readyweapon != wp_supershotgun) + { + newweapon = wp_supershotgun; + } + + + if (player->weaponowned[newweapon] + && newweapon != player->readyweapon) + { + // Do not go to plasma or BFG in shareware, + // even if cheated. + if ((newweapon != wp_plasma + && newweapon != wp_bfg) + || (gamemode != shareware)) + { + player->pendingweapon = newweapon; + } + } + } + + // check for use + if (cmd->buttons & BT_USE) + { + if (!player->usedown) + { + P_UseLines(player); + player->usedown = doom_true; + } + } + else + player->usedown = doom_false; + + // cycle psprites + P_MovePsprites(player); + + // Counters, time dependend power ups. + + // Strength counts up to diminish fade. + if (player->powers[pw_strength]) + player->powers[pw_strength]++; + + if (player->powers[pw_invulnerability]) + player->powers[pw_invulnerability]--; + + if (player->powers[pw_invisibility]) + if (!--player->powers[pw_invisibility]) + player->mo->flags &= ~MF_SHADOW; + + if (player->powers[pw_infrared]) + player->powers[pw_infrared]--; + + if (player->powers[pw_ironfeet]) + player->powers[pw_ironfeet]--; + + if (player->damagecount) + player->damagecount--; + + if (player->bonuscount) + player->bonuscount--; + + + // Handling colormaps. + if (player->powers[pw_invulnerability]) + { + if (player->powers[pw_invulnerability] > 4 * 32 + || (player->powers[pw_invulnerability] & 8)) + player->fixedcolormap = INVERSECOLORMAP; + else + player->fixedcolormap = 0; + } + else if (player->powers[pw_infrared]) + { + if (player->powers[pw_infrared] > 4 * 32 + || (player->powers[pw_infrared] & 8)) + { + // almost full bright + player->fixedcolormap = 1; + } + else + player->fixedcolormap = 0; + } + else + player->fixedcolormap = 0; +} +#define MAXSEGS 32 + + +// +// ClipWallSegment +// Clips the given range of columns +// and includes it in the new clip list. +// +typedef struct +{ + int first; + int last; +} cliprange_t; + + +seg_t* curline; +side_t* sidedef; +line_t* linedef; +sector_t* frontsector; +sector_t* backsector; + +drawseg_t drawsegs[MAXDRAWSEGS]; +drawseg_t* ds_p; + +// newend is one past the last valid seg +cliprange_t* newend; +cliprange_t solidsegs[MAXSEGS]; + +int checkcoord[12][4] = +{ + {3,0,2,1}, + {3,0,2,0}, + {3,1,2,0}, + {0}, + {2,0,2,1}, + {0,0,0,0}, + {3,1,3,0}, + {0}, + {2,0,3,1}, + {2,1,3,1}, + {2,1,3,0} +}; + + +void R_StoreWallRange(int start, int stop); + + +// +// R_ClearDrawSegs +// +void R_ClearDrawSegs(void) +{ + ds_p = drawsegs; +} + + +// +// R_ClipSolidWallSegment +// Does handle solid walls, +// e.g. single sided LineDefs (middle texture) +// that entirely block the view. +// +void R_ClipSolidWallSegment(int first, int last) +{ + cliprange_t* next; + cliprange_t* start; + + // Find the first range that touches the range + // (adjacent pixels are touching). + start = solidsegs; + while (start->last < first - 1) + start++; + + if (first < start->first) + { + if (last < start->first - 1) + { + // Post is entirely visible (above start), + // so insert a new clippost. + R_StoreWallRange(first, last); + next = newend; + newend++; + + while (next != start) + { + *next = *(next - 1); + next--; + } + next->first = first; + next->last = last; + return; + } + + // There is a fragment above *start. + R_StoreWallRange(first, start->first - 1); + // Now adjust the clip size. + start->first = first; + } + + // Bottom contained in start? + if (last <= start->last) + return; + + next = start; + while (last >= (next + 1)->first - 1) + { + // There is a fragment between two posts. + R_StoreWallRange(next->last + 1, (next + 1)->first - 1); + next++; + + if (last <= next->last) + { + // Bottom is contained in next. + // Adjust the clip size. + start->last = next->last; + goto crunch; + } + } + + // There is a fragment after *next. + R_StoreWallRange(next->last + 1, last); + // Adjust the clip size. + start->last = last; + + // Remove start+1 to next from the clip list, + // because start now covers their area. +crunch: + if (next == start) + { + // Post just extended past the bottom of one post. + return; + } + + + while (next++ != newend) + { + // Remove a post. + *++start = *next; + } + + newend = start + 1; +} + + +// +// R_ClipPassWallSegment +// Clips the given range of columns, +// but does not includes it in the clip list. +// Does handle windows, +// e.g. LineDefs with upper and lower texture. +// +void R_ClipPassWallSegment(int first, int last) +{ + cliprange_t* start; + + // Find the first range that touches the range + // (adjacent pixels are touching). + start = solidsegs; + while (start->last < first - 1) + start++; + + if (first < start->first) + { + if (last < start->first - 1) + { + // Post is entirely visible (above start). + R_StoreWallRange(first, last); + return; + } + + // There is a fragment above *start. + R_StoreWallRange(first, start->first - 1); + } + + // Bottom contained in start? + if (last <= start->last) + return; + + while (last >= (start + 1)->first - 1) + { + // There is a fragment between two posts. + R_StoreWallRange(start->last + 1, (start + 1)->first - 1); + start++; + + if (last <= start->last) + return; + } + + // There is a fragment after *next. + R_StoreWallRange(start->last + 1, last); +} + + +// +// R_ClearClipSegs +// +void R_ClearClipSegs(void) +{ + solidsegs[0].first = -0x7fffffff; + solidsegs[0].last = -1; + solidsegs[1].first = viewwidth; + solidsegs[1].last = 0x7fffffff; + newend = solidsegs + 2; +} + + +// +// R_AddLine +// Clips the given segment +// and adds any visible pieces to the line list. +// +void R_AddLine(seg_t* line) +{ + int x1; + int x2; + angle_t angle1; + angle_t angle2; + angle_t span; + angle_t tspan; + + curline = line; + + // OPTIMIZE: quickly reject orthogonal back sides. + angle1 = R_PointToAngle(line->v1->x, line->v1->y); + angle2 = R_PointToAngle(line->v2->x, line->v2->y); + + // Clip to view edges. + // OPTIMIZE: make constant out of 2*clipangle (FIELDOFVIEW). + span = angle1 - angle2; + + // Back side? I.e. backface culling? + if (span >= ANG180) + return; + + // Global angle needed by segcalc. + rw_angle1 = angle1; + angle1 -= viewangle; + angle2 -= viewangle; + + tspan = angle1 + clipangle; + if (tspan > 2 * clipangle) + { + tspan -= 2 * clipangle; + + // Totally off the left edge? + if (tspan >= span) + return; + + angle1 = clipangle; + } + tspan = clipangle - angle2; + if (tspan > 2 * clipangle) + { + tspan -= 2 * clipangle; + + // Totally off the left edge? + if (tspan >= span) + return; +#pragma warning(push) +#pragma warning(disable : 4146) + angle2 = -clipangle; +#pragma warning(pop) + } + + // The seg is in the view range, + // but not necessarily visible. + angle1 = (angle1 + ANG90) >> ANGLETOFINESHIFT; + angle2 = (angle2 + ANG90) >> ANGLETOFINESHIFT; + x1 = viewangletox[angle1]; + x2 = viewangletox[angle2]; + + // Does not cross a pixel? + if (x1 == x2) + return; + + backsector = line->backsector; + + // Single sided line? + if (!backsector) + goto clipsolid; + + // Closed door. + if (backsector->ceilingheight <= frontsector->floorheight + || backsector->floorheight >= frontsector->ceilingheight) + goto clipsolid; + + // Window. + if (backsector->ceilingheight != frontsector->ceilingheight + || backsector->floorheight != frontsector->floorheight) + goto clippass; + + // Reject empty lines used for triggers + // and special events. + // Identical floor and ceiling on both sides, + // identical light levels on both sides, + // and no middle texture. + if (backsector->ceilingpic == frontsector->ceilingpic + && backsector->floorpic == frontsector->floorpic + && backsector->lightlevel == frontsector->lightlevel + && curline->sidedef->midtexture == 0) + { + return; + } + + +clippass: + R_ClipPassWallSegment(x1, x2 - 1); + return; + +clipsolid: + R_ClipSolidWallSegment(x1, x2 - 1); +} + + +// +// R_CheckBBox +// Checks BSP node/subtree bounding box. +// Returns doom_true +// if some part of the bbox might be visible. +// +doom_boolean R_CheckBBox(fixed_t* bspcoord) +{ + int boxx; + int boxy; + int boxpos; + + fixed_t x1; + fixed_t y1; + fixed_t x2; + fixed_t y2; + + angle_t angle1; + angle_t angle2; + angle_t span; + angle_t tspan; + + cliprange_t* start; + + int sx1; + int sx2; + + // Find the corners of the box + // that define the edges from current viewpoint. + if (viewx <= bspcoord[BOXLEFT]) + boxx = 0; + else if (viewx < bspcoord[BOXRIGHT]) + boxx = 1; + else + boxx = 2; + + if (viewy >= bspcoord[BOXTOP]) + boxy = 0; + else if (viewy > bspcoord[BOXBOTTOM]) + boxy = 1; + else + boxy = 2; + + boxpos = (boxy << 2) + boxx; + if (boxpos == 5) + return doom_true; + + x1 = bspcoord[checkcoord[boxpos][0]]; + y1 = bspcoord[checkcoord[boxpos][1]]; + x2 = bspcoord[checkcoord[boxpos][2]]; + y2 = bspcoord[checkcoord[boxpos][3]]; + + // check clip list for an open space + angle1 = R_PointToAngle(x1, y1) - viewangle; + angle2 = R_PointToAngle(x2, y2) - viewangle; + + span = angle1 - angle2; + + // Sitting on a line? + if (span >= ANG180) + return doom_true; + + tspan = angle1 + clipangle; + + if (tspan > 2 * clipangle) + { + tspan -= 2 * clipangle; + + // Totally off the left edge? + if (tspan >= span) + return doom_false; + + angle1 = clipangle; + } + tspan = clipangle - angle2; + if (tspan > 2 * clipangle) + { + tspan -= 2 * clipangle; + + // Totally off the left edge? + if (tspan >= span) + return doom_false; + +#pragma warning(push) +#pragma warning(disable : 4146) + angle2 = -clipangle; +#pragma warning(pop) + } + + + // Find the first clippost + // that touches the source post + // (adjacent pixels are touching). + angle1 = (angle1 + ANG90) >> ANGLETOFINESHIFT; + angle2 = (angle2 + ANG90) >> ANGLETOFINESHIFT; + sx1 = viewangletox[angle1]; + sx2 = viewangletox[angle2]; + + // Does not cross a pixel. + if (sx1 == sx2) + return doom_false; + sx2--; + + start = solidsegs; + while (start->last < sx2) + start++; + + if (sx1 >= start->first + && sx2 <= start->last) + { + // The clippost contains the new span. + return doom_false; + } + + return doom_true; +} + + +// +// R_Subsector +// Determine floor/ceiling planes. +// Add sprites of things in sector. +// Draw one or more line segments. +// +void R_Subsector(int num) +{ + int count; + seg_t* line; + subsector_t* sub; + +#ifdef RANGECHECK + if (num >= numsubsectors) + { + //I_Error("Error: R_Subsector: ss %i with numss = %i", + // num, + // numsubsectors); + + + doom_strcpy(error_buf, "Error: R_Subsector: ss "); + doom_concat(error_buf, doom_itoa(num, 10)); + doom_concat(error_buf, " with numss = "); + doom_concat(error_buf, doom_itoa(numsubsectors, 10)); + I_Error(error_buf); + } +#endif + + sscount++; + sub = &subsectors[num]; + frontsector = sub->sector; + count = sub->numlines; + line = &segs[sub->firstline]; + + if (frontsector->floorheight < viewz) + { + floorplane = R_FindPlane(frontsector->floorheight, + frontsector->floorpic, + frontsector->lightlevel); + } + else + floorplane = 0; + + if (frontsector->ceilingheight > viewz + || frontsector->ceilingpic == skyflatnum) + { + ceilingplane = R_FindPlane(frontsector->ceilingheight, + frontsector->ceilingpic, + frontsector->lightlevel); + } + else + ceilingplane = 0; + + R_AddSprites(frontsector); + + while (count--) + { + R_AddLine(line); + line++; + } +} + + +// +// RenderBSPNode +// Renders all subsectors below a given node, +// traversing subtree recursively. +// Just call with BSP root. +void R_RenderBSPNode(int bspnum) +{ + node_t* bsp; + int side; + + // Found a subsector? + if (bspnum & NF_SUBSECTOR) + { + if (bspnum == -1) + R_Subsector(0); + else + R_Subsector(bspnum & (~NF_SUBSECTOR)); + return; + } + + bsp = &nodes[bspnum]; + + // Decide which side the view point is on. + side = R_PointOnSide(viewx, viewy, bsp); + + // Recursively divide front space. + R_RenderBSPNode(bsp->children[side]); + + // Possibly divide back space. + if (R_CheckBBox(bsp->bbox[side ^ 1])) + R_RenderBSPNode(bsp->children[side ^ 1]); +} +#if defined(DOOM_WIN32) + +// #define strncasecmp strnicmp +#elif defined(DOOM_APPLE) + +#else +#ifdef LINUX +//#include +#endif +#endif +//#include "r_data.h" + + +// +// Graphics. +// DOOM graphics for walls and sprites +// is stored in vertical runs of opaque pixels (posts). +// A column is composed of zero or more posts, +// a patch or sprite is composed of zero or more columns. +// + + +// +// Texture definition. +// Each texture is composed of one or more patches, +// with patches being lumps stored in the WAD. +// The lumps are referenced by number, and patched +// into the rectangular texture space using origin +// and possibly other attributes. +// +typedef struct +{ + short originx; + short originy; + short patch; + short stepdir; + short colormap; +} mappatch_t; + + +// +// Texture definition. +// A DOOM wall texture is a list of patches +// which are to be combined in a predefined order. +// +typedef struct +{ + char name[8]; + doom_boolean masked; + short width; + short height; + //void **columndirectory; // OBSOLETE + int columndirectory; // [pd] If it's not used, at least make sure it's the right size! Pointers are 8 bytes in x64 + short patchcount; + mappatch_t patches[1]; +} maptexture_t; + + +// A single patch from a texture definition, +// basically a rectangular area within +// the texture rectangle. +typedef struct +{ + // Block origin (allways UL), + // which has allready accounted + // for the internal origin of the patch. + int originx; + int originy; + int patch; +} texpatch_t; + + +// A maptexturedef_t describes a rectangular texture, +// which is composed of one or more mappatch_t structures +// that arrange graphic patches. +typedef struct +{ + // Keep name for switch changing, etc. + char name[8]; + short width; + short height; + + // All the patches[patchcount] + // are drawn back to front into the cached texture. + short patchcount; + texpatch_t patches[1]; +} texture_t; + + +int firstflat; +int lastflat; +int numflats; + +int firstpatch; +int lastpatch; +int numpatches; + +int firstspritelump; +int lastspritelump; +int numspritelumps; + +int numtextures; +texture_t** textures; + +int* texturewidthmask; +// needed for texture pegging +fixed_t* textureheight; +int* texturecompositesize; +short** texturecolumnlump; +unsigned short** texturecolumnofs; +byte** texturecomposite; + +// for global animation +int* flattranslation; +int* texturetranslation; + +// needed for pre rendering +fixed_t* spritewidth; +fixed_t* spriteoffset; +fixed_t* spritetopoffset; + +lighttable_t* colormaps; + +int flatmemory; +int texturememory; +int spritememory; + + +// +// MAPTEXTURE_T CACHING +// When a texture is first needed, +// it counts the number of composite columns +// required in the texture and allocates space +// for a column directory and any new columns. +// The directory will simply point inside other patches +// if there is only one patch in a given column, +// but any columns with multiple patches +// will have new column_ts generated. +// + + +// +// R_DrawColumnInCache +// Clip and draw a column +// from a patch into a cached post. +// +void R_DrawColumnInCache(column_t* patch, byte* cache, int originy, int cacheheight) +{ + int count; + int position; + byte* source; + byte* dest; + + dest = (byte*)cache + 3; + + while (patch->topdelta != 0xff) + { + source = (byte*)patch + 3; + count = patch->length; + position = originy + patch->topdelta; + + if (position < 0) + { + count += position; + position = 0; + } + + if (position + count > cacheheight) + count = cacheheight - position; + + if (count > 0) + doom_memcpy(cache + position, source, count); + + patch = (column_t*)((byte*)patch + patch->length + 4); + } +} + + +// +// R_GenerateComposite +// Using the texture definition, +// the composite texture is created from the patches, +// and each column is cached. +// +void R_GenerateComposite(int texnum) +{ + byte* block; + texture_t* texture; + texpatch_t* patch; + patch_t* realpatch; + int x; + int x1; + int x2; + int i; + column_t* patchcol; + short* collump; + unsigned short* colofs; + + texture = textures[texnum]; + + block = (byte*)Z_Malloc(texturecompositesize[texnum], + PU_STATIC, + &texturecomposite[texnum]); + + collump = texturecolumnlump[texnum]; + colofs = texturecolumnofs[texnum]; + + // Composite the columns together. + patch = texture->patches; + + for (i = 0, patch = texture->patches; + i < texture->patchcount; + i++, patch++) + { + realpatch = (patch_t*)W_CacheLumpNum(patch->patch, PU_CACHE); + x1 = patch->originx; + x2 = x1 + SHORT(realpatch->width); + + if (x1 < 0) + x = 0; + else + x = x1; + + if (x2 > texture->width) + x2 = texture->width; + + for (; x < x2; x++) + { + // Column does not have multiple patches? + if (collump[x] >= 0) + continue; + + patchcol = (column_t*)((byte*)realpatch + + LONG(realpatch->columnofs[x - x1])); + R_DrawColumnInCache(patchcol, + block + colofs[x], + patch->originy, + texture->height); + } + } + + // Now that the texture has been built in column cache, + // it is purgable from zone memory. + Z_ChangeTag(block, PU_CACHE); +} + + +// +// R_GenerateLookup +// +void R_GenerateLookup(int texnum) +{ + texture_t* texture; + byte* patchcount; // patchcount[texture->width] + texpatch_t* patch; + patch_t* realpatch; + int x; + int x1; + int x2; + int i; + short* collump; + unsigned short* colofs; + + texture = textures[texnum]; + + // Composited texture not created yet. + texturecomposite[texnum] = 0; + + texturecompositesize[texnum] = 0; + collump = texturecolumnlump[texnum]; + colofs = texturecolumnofs[texnum]; + + // Now count the number of columns + // that are covered by more than one patch. + // Fill in the lump / offset, so columns + // with only a single patch are all done. + patchcount = (byte*)doom_malloc(texture->width); + doom_memset(patchcount, 0, texture->width); + patch = texture->patches; + + for (i = 0, patch = texture->patches; + i < texture->patchcount; + i++, patch++) + { + realpatch = (patch_t*)W_CacheLumpNum(patch->patch, PU_CACHE); + x1 = patch->originx; + x2 = x1 + SHORT(realpatch->width); + + if (x1 < 0) + x = 0; + else + x = x1; + + if (x2 > texture->width) + x2 = texture->width; + for (; x < x2; x++) + { + patchcount[x]++; + collump[x] = patch->patch; + colofs[x] = LONG(realpatch->columnofs[x - x1]) + 3; + } + } + + for (x = 0; x < texture->width; x++) + { + if (!patchcount[x]) + { + //doom_print("R_GenerateLookup: column without a patch (%s)\n", + // texture->name); + doom_print("R_GenerateLookup: column without a patch ("); + doom_print(texture->name); + doom_print(")\n"); + return; + } + // I_Error ("R_GenerateLookup: column without a patch"); + + if (patchcount[x] > 1) + { + // Use the cached block. + collump[x] = -1; + colofs[x] = texturecompositesize[texnum]; + + if (texturecompositesize[texnum] > 0x10000 - texture->height) + { + //I_Error("Error: R_GenerateLookup: texture %i is >64k", + // texnum); + + doom_strcpy(error_buf, "Error: R_GenerateLookup: texture "); + doom_concat(error_buf, doom_itoa(texnum, 10)); + doom_concat(error_buf, " is >64k"); + I_Error(error_buf); + } + + texturecompositesize[texnum] += texture->height; + } + } + + doom_free(patchcount); +} + + +// +// R_GetColumn +// +byte* R_GetColumn(int tex, int col) +{ + int lump; + int ofs; + + col &= texturewidthmask[tex]; + lump = texturecolumnlump[tex][col]; + ofs = texturecolumnofs[tex][col]; + + if (lump > 0) + return (byte*)W_CacheLumpNum(lump, PU_CACHE) + ofs; + + if (!texturecomposite[tex]) + R_GenerateComposite(tex); + + return texturecomposite[tex] + ofs; +} + + +// +// R_InitTextures +// Initializes the texture list +// with the textures from the world map. +// +void R_InitTextures(void) +{ + maptexture_t* mtexture; + texture_t* texture; + mappatch_t* mpatch; + texpatch_t* patch; + + int i; + int j; + + int* maptex; + int* maptex2; + int* maptex1; + + char name[9]; + char* names; + char* name_p; + + int* patchlookup; + + int totalwidth; + int nummappatches; + int offset; + int maxoff; + int maxoff2; + int numtextures1; + int numtextures2; + + int* directory; + + int temp1; + int temp2; + int temp3; + + // Load the patch names from pnames.lmp. + name[8] = 0; + names = (char*)W_CacheLumpName((char*)"PNAMES", PU_STATIC); + nummappatches = LONG(*((int*)names)); + name_p = names + 4; + patchlookup = (int*)doom_malloc(nummappatches * sizeof(*patchlookup)); + + for (i = 0; i < nummappatches; i++) + { + doom_strncpy(name, name_p + i * 8, 8); + patchlookup[i] = W_CheckNumForName(name); + } + Z_Free(names); + + // Load the map texture definitions from textures.lmp. + // The data is contained in one or two lumps, + // TEXTURE1 for shareware, plus TEXTURE2 for commercial. + maptex = maptex1 = (int*)W_CacheLumpName((char*)"TEXTURE1", PU_STATIC); + numtextures1 = LONG(*maptex); + maxoff = W_LumpLength(W_GetNumForName((char*)"TEXTURE1")); + directory = maptex + 1; + + if (W_CheckNumForName((char*)"TEXTURE2") != -1) + { + maptex2 = (int*)W_CacheLumpName((char*)"TEXTURE2", PU_STATIC); + numtextures2 = LONG(*maptex2); + maxoff2 = W_LumpLength(W_GetNumForName((char*)"TEXTURE2")); + } + else + { + maptex2 = 0; + numtextures2 = 0; + maxoff2 = 0; + } + numtextures = numtextures1 + numtextures2; + + textures = (texture_t**)Z_Malloc(numtextures * sizeof(texture_t*), PU_STATIC, 0); + texturecolumnlump = (short**)Z_Malloc(numtextures * sizeof(short*), PU_STATIC, 0); + texturecolumnofs = (unsigned short**)Z_Malloc(numtextures * sizeof(unsigned short*), PU_STATIC, 0); + texturecomposite = (byte**)Z_Malloc(numtextures * sizeof(byte*), PU_STATIC, 0); + texturecompositesize = (int*)Z_Malloc(numtextures * sizeof(int), PU_STATIC, 0); + texturewidthmask = (int*)Z_Malloc(numtextures * sizeof(int), PU_STATIC, 0); + textureheight = (fixed_t*) Z_Malloc(numtextures * sizeof(fixed_t), PU_STATIC, 0); + + totalwidth = 0; + + // Really complex printing shit... + temp1 = W_GetNumForName((char*)"S_START"); // P_??????? + temp2 = W_GetNumForName((char*)"S_END") - 1; + temp3 = ((temp2 - temp1 + 63) / 64) + ((numtextures + 63) / 64); + doom_print("["); + for (i = 0; i < temp3; i++) + doom_print(" "); + doom_print(" ]"); + for (i = 0; i < temp3; i++) + doom_print("\x8"); + doom_print("\x8\x8\x8\x8\x8\x8\x8\x8\x8\x8"); + + for (i = 0; i < numtextures; i++, directory++) + { + if (!(i & 63)) + doom_print("."); + + if (i == numtextures1) + { + // Start looking in second texture file. + maptex = maptex2; + maxoff = maxoff2; + directory = maptex + 1; + } + + offset = LONG(*directory); + + if (offset > maxoff) + I_Error((char*)"Error: R_InitTextures: bad texture directory"); + + mtexture = (maptexture_t*)((byte*)maptex + offset); + + texture = textures[i] = + (texture_t*)Z_Malloc(sizeof(texture_t) + + sizeof(texpatch_t) * (SHORT(mtexture->patchcount) - 1), + PU_STATIC, 0); + + texture->width = SHORT(mtexture->width); + texture->height = SHORT(mtexture->height); + texture->patchcount = SHORT(mtexture->patchcount); + + doom_memcpy(texture->name, mtexture->name, sizeof(texture->name)); + mpatch = &mtexture->patches[0]; + patch = &texture->patches[0]; + + for (j = 0; j < texture->patchcount; j++, mpatch++, patch++) + { + patch->originx = SHORT(mpatch->originx); + patch->originy = SHORT(mpatch->originy); + patch->patch = patchlookup[SHORT(mpatch->patch)]; + if (patch->patch == -1) + { + //I_Error("Error: R_InitTextures: Missing patch in texture %s", + // texture->name); + + doom_strcpy(error_buf, "Error: R_InitTextures: Missing patch in texture "); + doom_concat(error_buf, texture->name); + I_Error(error_buf); + } + } + texturecolumnlump[i] = (short*)Z_Malloc(texture->width * sizeof(short), PU_STATIC, 0); + texturecolumnofs[i] = (unsigned short*)Z_Malloc(texture->width * sizeof(unsigned short), PU_STATIC, 0); + + j = 1; + while (j * 2 <= texture->width) + j <<= 1; + + texturewidthmask[i] = j - 1; + textureheight[i] = texture->height << FRACBITS; + + totalwidth += texture->width; + } + + Z_Free(maptex1); + if (maptex2) + Z_Free(maptex2); + + // Precalculate whatever possible. + for (i = 0; i < numtextures; i++) + R_GenerateLookup(i); + + // Create translation table for global animation. + texturetranslation = (int*)Z_Malloc((numtextures + 1) * sizeof(int), PU_STATIC, 0); + + for (i = 0; i < numtextures; i++) + texturetranslation[i] = i; + + doom_free(patchlookup); +} + + +// +// R_InitFlats +// +void R_InitFlats(void) +{ + int i; + + firstflat = W_GetNumForName((char*)"F_START") + 1; + lastflat = W_GetNumForName((char*)"F_END") - 1; + numflats = lastflat - firstflat + 1; + + // Create translation table for global animation. + flattranslation = (int*)Z_Malloc((numflats + 1) * sizeof(int), PU_STATIC, 0); + + for (i = 0; i < numflats; i++) + flattranslation[i] = i; +} + + +// +// R_InitSpriteLumps +// Finds the width and hoffset of all sprites in the wad, +// so the sprite does not need to be cached completely +// just for having the header info ready during rendering. +// +void R_InitSpriteLumps(void) +{ + int i; + patch_t* patch; + + firstspritelump = W_GetNumForName((char*)"S_START") + 1; + lastspritelump = W_GetNumForName((char*)"S_END") - 1; + + numspritelumps = lastspritelump - firstspritelump + 1; + spritewidth = (fixed_t*)Z_Malloc(numspritelumps * sizeof(fixed_t), PU_STATIC, 0); + spriteoffset = (fixed_t*)Z_Malloc(numspritelumps * sizeof(fixed_t), PU_STATIC, 0); + spritetopoffset = (fixed_t*)Z_Malloc(numspritelumps * sizeof(fixed_t), PU_STATIC, 0); + + for (i = 0; i < numspritelumps; i++) + { + if (!(i & 63)) + doom_print("."); + + patch = (patch_t*)W_CacheLumpNum(firstspritelump + i, PU_CACHE); + spritewidth[i] = SHORT(patch->width) << FRACBITS; + spriteoffset[i] = SHORT(patch->leftoffset) << FRACBITS; + spritetopoffset[i] = SHORT(patch->topoffset) << FRACBITS; + } +} + + +// +// R_InitColormaps +// +void R_InitColormaps(void) +{ + int lump, length; + + // Load in the light tables, + // 256 byte align tables. + lump = W_GetNumForName((char*)"COLORMAP"); + length = W_LumpLength(lump) + 255; + colormaps = (lighttable_t*)Z_Malloc(length, PU_STATIC, 0); + colormaps = (byte*)(((unsigned long long)colormaps + 255) & ~0xff); + W_ReadLump(lump, colormaps); +} + + +// +// R_InitData +// Locates all the lumps +// that will be used by all views +// Must be called after W_Init. +// +void R_InitData(void) +{ + R_InitTextures(); + doom_print("\nInitTextures"); + R_InitFlats(); + doom_print("\nInitFlats"); + R_InitSpriteLumps(); + doom_print("\nInitSprites"); + R_InitColormaps(); + doom_print("\nInitColormaps"); +} + + +// +// R_FlatNumForName +// Retrieval, get a flat number for a flat name. +// +int R_FlatNumForName(char* name) +{ + int i; + char namet[9]; + + i = W_CheckNumForName(name); + + if (i == -1) + { + namet[8] = 0; + doom_memcpy(namet, name, 8); + //I_Error("Error: R_FlatNumForName: %s not found", namet); + + doom_strcpy(error_buf, "Error: R_FlatNumForName: "); + doom_concat(error_buf, namet); + doom_concat(error_buf, " not found"); + I_Error(error_buf); + } + return i - firstflat; +} + + +// +// R_CheckTextureNumForName +// Check whether texture is available. +// Filter out NoTexture indicator. +// +int R_CheckTextureNumForName(char* name) +{ + int i; + + // "NoTexture" marker. + if (name[0] == '-') + return 0; + + for (i = 0; i < numtextures; i++) + if (!doom_strncasecmp(textures[i]->name, name, 8)) + return i; + + return -1; +} + + +// +// R_TextureNumForName +// Calls R_CheckTextureNumForName, +// aborts with error message. +// +int R_TextureNumForName(char* name) +{ + int i; + + i = R_CheckTextureNumForName(name); + + if (i == -1) + { + //I_Error("Error: R_TextureNumForName: %s not found", + // name); + + doom_strcpy(error_buf, "Error: R_TextureNumForName: "); + doom_concat(error_buf, name); + doom_concat(error_buf, " not found"); + I_Error(error_buf); + } + return i; +} + + +// +// R_PrecacheLevel +// Preloads all relevant graphics for the level. +// +void R_PrecacheLevel(void) +{ + char* flatpresent; + char* texturepresent; + char* spritepresent; + + int i; + int j; + int k; + int lump; + + texture_t* texture; + thinker_t* th; + spriteframe_t* sf; + + if (demoplayback) + return; + + // Precache flats. + flatpresent = (char*)doom_malloc(numflats); + doom_memset(flatpresent, 0, numflats); + + for (i = 0; i < numsectors; i++) + { + flatpresent[sectors[i].floorpic] = 1; + flatpresent[sectors[i].ceilingpic] = 1; + } + + flatmemory = 0; + + for (i = 0; i < numflats; i++) + { + if (flatpresent[i]) + { + lump = firstflat + i; + flatmemory += lumpinfo[lump].size; + W_CacheLumpNum(lump, PU_CACHE); + } + } + + // Precache textures. + texturepresent = (char*)doom_malloc(numtextures); + doom_memset(texturepresent, 0, numtextures); + + for (i = 0; i < numsides; i++) + { + texturepresent[sides[i].toptexture] = 1; + texturepresent[sides[i].midtexture] = 1; + texturepresent[sides[i].bottomtexture] = 1; + } + + // Sky texture is always present. + // Note that F_SKY1 is the name used to + // indicate a sky floor/ceiling as a flat, + // while the sky texture is stored like + // a wall texture, with an episode dependend + // name. + texturepresent[skytexture] = 1; + + texturememory = 0; + for (i = 0; i < numtextures; i++) + { + if (!texturepresent[i]) + continue; + + texture = textures[i]; + + for (j = 0; j < texture->patchcount; j++) + { + lump = texture->patches[j].patch; + texturememory += lumpinfo[lump].size; + W_CacheLumpNum(lump, PU_CACHE); + } + } + + // Precache sprites. + spritepresent = (char*)doom_malloc(numsprites); + doom_memset(spritepresent, 0, numsprites); + + for (th = thinkercap.next; th != &thinkercap; th = th->next) + { + if (th->function.acp1 == (actionf_p1)P_MobjThinker) + spritepresent[((mobj_t*)th)->sprite] = 1; + } + + spritememory = 0; + for (i = 0; i < numsprites; i++) + { + if (!spritepresent[i]) + continue; + + for (j = 0; j < sprites[i].numframes; j++) + { + sf = &sprites[i].spriteframes[j]; + for (k = 0; k < 8; k++) + { + lump = firstspritelump + sf->lump[k]; + spritememory += lumpinfo[lump].size; + W_CacheLumpNum(lump, PU_CACHE); + } + } + } + + doom_free(texturepresent); + doom_free(flatpresent); + doom_free(spritepresent); +} +#define MAXWIDTH 1120 +#define MAXHEIGHT 832 + +// status bar height at bottom of screen +#define SBARHEIGHT 32 + +#define FUZZTABLE 50 +#define FUZZOFF (SCREENWIDTH) + + +// +// All drawing to the view buffer is accomplished in this file. +// The other refresh files only know about ccordinates, +// not the architecture of the frame buffer. +// Conveniently, the frame buffer is a linear one, +// and we need only the base address, +// and the total size == width*height*depth/8., +// + +byte* viewimage; +int viewwidth; +int scaledviewwidth; +int viewheight; +int viewwindowx; +int viewwindowy; +byte* ylookup[MAXHEIGHT]; +int columnofs[MAXWIDTH]; + +// Color tables for different players, +// translate a limited part to another +// (color ramps used for suit colors). +// +byte translations[3][256]; + +// +// R_DrawColumn +// Source is the top of the column to scale. +// +lighttable_t* dc_colormap; +int dc_x; +int dc_yl; +int dc_yh; +fixed_t dc_iscale; +fixed_t dc_texturemid; + +// first pixel in a column (possibly virtual) +byte* dc_source; + +// just for profiling +int dccount; + +int fuzzoffset[FUZZTABLE] = +{ + FUZZOFF,-FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, + FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, + FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF, + FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF, + FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF, + FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF, + FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF,FUZZOFF,-FUZZOFF,FUZZOFF +}; + +int fuzzpos = 0; + +byte* dc_translation; +byte* translationtables; + + +// +// A column is a vertical slice/span from a wall texture that, +// given the DOOM style restrictions on the view orientation, +// will always have constant z depth. +// Thus a special case loop for very fast rendering can +// be used. It has also been used with Wolfenstein 3D. +// +void R_DrawColumn(void) +{ + int count; + byte* dest; + fixed_t frac; + fixed_t fracstep; + + count = dc_yh - dc_yl; + + // Zero length, column does not exceed a pixel. + if (count < 0) + return; + +#ifdef RANGECHECK + if ((unsigned)dc_x >= SCREENWIDTH + || dc_yl < 0 + || dc_yh >= SCREENHEIGHT) + { + //I_Error("Error: R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); + + doom_strcpy(error_buf, "Error: R_DrawColumn: "); + doom_concat(error_buf, doom_itoa(dc_yl, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(dc_yh, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(dc_x, 10)); + I_Error(error_buf); + } +#endif + + // Framebuffer destination address. + // Use ylookup LUT to avoid multiply with ScreenWidth. + // Use columnofs LUT for subwindows? + dest = ylookup[dc_yl] + columnofs[dc_x]; + + // Determine scaling, + // which is the only mapping to be done. + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; + + // Inner loop that does the actual texture mapping, + // e.g. a DDA-lile scaling. + // This is as fast as it gets. + do + { + // Re-map color indices from wall texture column + // using a lighting/special effects LUT. + *dest = dc_colormap[dc_source[(frac >> FRACBITS) & 127]]; + + dest += SCREENWIDTH; + frac += fracstep; + + } while (count--); +} + + +void R_DrawColumnLow(void) +{ + int count; + byte* dest; + byte* dest2; + fixed_t frac; + fixed_t fracstep; + + count = dc_yh - dc_yl; + + // Zero length. + if (count < 0) + return; + +#ifdef RANGECHECK + if ((unsigned)dc_x >= SCREENWIDTH + || dc_yl < 0 + || dc_yh >= SCREENHEIGHT) + { + //I_Error("Error: R_DrawColumn: %i to %i at %i", dc_yl, dc_yh, dc_x); + + doom_strcpy(error_buf, "Error: R_DrawColumn: "); + doom_concat(error_buf, doom_itoa(dc_yl, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(dc_yh, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(dc_x, 10)); + I_Error(error_buf); + } +#endif + // Blocky mode, need to multiply by 2. + dc_x <<= 1; + + dest = ylookup[dc_yl] + columnofs[dc_x]; + dest2 = ylookup[dc_yl] + columnofs[dc_x + 1]; + + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; + + do + { + // Hack. Does not work corretly. + *dest2 = *dest = dc_colormap[dc_source[(frac >> FRACBITS) & 127]]; + dest += SCREENWIDTH; + dest2 += SCREENWIDTH; + frac += fracstep; + + } while (count--); +} + + +// +// Spectre/Invisibility. +// + +// +// Framebuffer postprocessing. +// Creates a fuzzy image by copying pixels +// from adjacent ones to left and right. +// Used with an all black colormap, this +// could create the SHADOW effect, +// i.e. spectres and invisible players. +// +void R_DrawFuzzColumn(void) +{ + int count; + byte* dest; + fixed_t frac; + fixed_t fracstep; + + // Adjust borders. Low... + if (!dc_yl) + dc_yl = 1; + + // .. and high. + if (dc_yh == viewheight - 1) + dc_yh = viewheight - 2; + + count = dc_yh - dc_yl; + + // Zero length. + if (count < 0) + return; + + +#ifdef RANGECHECK + if ((unsigned)dc_x >= SCREENWIDTH + || dc_yl < 0 || dc_yh >= SCREENHEIGHT) + { + //I_Error("Error: R_DrawFuzzColumn: %i to %i at %i", + // dc_yl, dc_yh, dc_x); + + doom_strcpy(error_buf, "Error: R_DrawFuzzColumn: "); + doom_concat(error_buf, doom_itoa(dc_yl, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(dc_yh, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(dc_x, 10)); + I_Error(error_buf); + } +#endif + + // Does not work with blocky mode. + dest = ylookup[dc_yl] + columnofs[dc_x]; + + // Looks familiar. + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; + + // Looks like an attempt at dithering, + // using the colormap #6 (of 0-31, a bit + // brighter than average). + do + { + // Lookup framebuffer, and retrieve + // a pixel that is either one column + // left or right of the current one. + // Add index from colormap to index. + *dest = colormaps[6 * 256 + dest[fuzzoffset[fuzzpos]]]; + + // Clamp table lookup index. + if (++fuzzpos == FUZZTABLE) + fuzzpos = 0; + + dest += SCREENWIDTH; + + frac += fracstep; + } while (count--); +} + + +// +// R_DrawTranslatedColumn +// Used to draw player sprites +// with the green colorramp mapped to others. +// Could be used with different translation +// tables, e.g. the lighter colored version +// of the BaronOfHell, the HellKnight, uses +// identical sprites, kinda brightened up. +// +void R_DrawTranslatedColumn(void) +{ + int count; + byte* dest; + fixed_t frac; + fixed_t fracstep; + + count = dc_yh - dc_yl; + if (count < 0) + return; + +#ifdef RANGECHECK + if ((unsigned)dc_x >= SCREENWIDTH + || dc_yl < 0 + || dc_yh >= SCREENHEIGHT) + { + //I_Error("Error: R_DrawColumn: %i to %i at %i", + // dc_yl, dc_yh, dc_x); + + doom_strcpy(error_buf, "Error: R_DrawColumn: "); + doom_concat(error_buf, doom_itoa(dc_yl, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(dc_yh, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(dc_x, 10)); + I_Error(error_buf); + } +#endif + + // FIXME. As above. + dest = ylookup[dc_yl] + columnofs[dc_x]; + + // Looks familiar. + fracstep = dc_iscale; + frac = dc_texturemid + (dc_yl - centery) * fracstep; + + // Here we do an additional index re-mapping. + do + { + // Translation tables are used + // to map certain colorramps to other ones, + // used with PLAY sprites. + // Thus the "green" ramp of the player 0 sprite + // is mapped to gray, red, black/indigo. + *dest = dc_colormap[dc_translation[dc_source[frac >> FRACBITS]]]; + dest += SCREENWIDTH; + + frac += fracstep; + } while (count--); +} + + +// +// R_InitTranslationTables +// Creates the translation tables to map +// the green color ramp to gray, brown, red. +// Assumes a given structure of the PLAYPAL. +// Could be read from a lump instead. +// +void R_InitTranslationTables(void) +{ + int i; + + translationtables = (byte*)Z_Malloc(256 * 3 + 255, PU_STATIC, 0); + translationtables = (byte*)(((unsigned long long)translationtables + 255) & ~255); + + // translate just the 16 green colors + for (i = 0; i < 256; i++) + { + if (i >= 0x70 && i <= 0x7f) + { + // map green ramp to gray, brown, red + translationtables[i] = 0x60 + (i & 0xf); + translationtables[i + 256] = 0x40 + (i & 0xf); + translationtables[i + 512] = 0x20 + (i & 0xf); + } + else + { + // Keep all other colors as is. + translationtables[i] = translationtables[i + 256] + = translationtables[i + 512] = i; + } + } +} + + +// +// R_DrawSpan +// With DOOM style restrictions on view orientation, +// the floors and ceilings consist of horizontal slices +// or spans with constant z depth. +// However, rotation around the world z axis is possible, +// thus this mapping, while simpler and faster than +// perspective correct texture mapping, has to traverse +// the texture at an angle in all but a few cases. +// In consequence, flats are not stored by column (like walls), +// and the inner loop has to step in texture space u and v. +// +int ds_y; +int ds_x1; +int ds_x2; + +lighttable_t* ds_colormap; + +fixed_t ds_xfrac; +fixed_t ds_yfrac; +fixed_t ds_xstep; +fixed_t ds_ystep; + +// start of a 64*64 tile image +byte* ds_source; + +// just for profiling +int dscount; + + +// +// Draws the actual span. +void R_DrawSpan(void) +{ + fixed_t xfrac; + fixed_t yfrac; + byte* dest; + int count; + int spot; + +#ifdef RANGECHECK + if (ds_x2 < ds_x1 + || ds_x1<0 + || ds_x2 >= SCREENWIDTH + || (unsigned)ds_y>SCREENHEIGHT) + { + //I_Error("Error: R_DrawSpan: %i to %i at %i", + // ds_x1, ds_x2, ds_y); + + doom_strcpy(error_buf, "Error: R_DrawSpan: "); + doom_concat(error_buf, doom_itoa(ds_x1, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(ds_x2, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(ds_y, 10)); + I_Error(error_buf); + } +#endif + + xfrac = ds_xfrac; + yfrac = ds_yfrac; + + dest = ylookup[ds_y] + columnofs[ds_x1]; + + // We do not check for zero spans here? + count = ds_x2 - ds_x1; + + do + { + // Current texture index in u,v. + spot = ((yfrac >> (16 - 6)) & (63 * 64)) + ((xfrac >> 16) & 63); + + // Lookup pixel from flat texture tile, + // re-index using light/colormap. + *dest++ = ds_colormap[ds_source[spot]]; + + // Next step in u,v. + xfrac += ds_xstep; + yfrac += ds_ystep; + + } while (count--); +} + + +// +// Again.. +// +void R_DrawSpanLow(void) +{ + fixed_t xfrac; + fixed_t yfrac; + byte* dest; + int count; + int spot; + +#ifdef RANGECHECK + if (ds_x2 < ds_x1 + || ds_x1<0 + || ds_x2 >= SCREENWIDTH + || (unsigned)ds_y>SCREENHEIGHT) + { + //I_Error("Error: R_DrawSpan: %i to %i at %i", + // ds_x1, ds_x2, ds_y); + + + doom_strcpy(error_buf, "Error: R_DrawSpan: "); + doom_concat(error_buf, doom_itoa(ds_x1, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(ds_x2, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(ds_y, 10)); + I_Error(error_buf); + } +#endif + + xfrac = ds_xfrac; + yfrac = ds_yfrac; + + // Blocky mode, need to multiply by 2. + ds_x1 <<= 1; + ds_x2 <<= 1; + + dest = ylookup[ds_y] + columnofs[ds_x1]; + + count = ds_x2 - ds_x1; + do + { + spot = ((yfrac >> (16 - 6)) & (63 * 64)) + ((xfrac >> 16) & 63); + // Lowres/blocky mode does it twice, + // while scale is adjusted appropriately. + *dest++ = ds_colormap[ds_source[spot]]; + *dest++ = ds_colormap[ds_source[spot]]; + + xfrac += ds_xstep; + yfrac += ds_ystep; + + } while (count--); +} + + +// +// R_InitBuffer +// Creats lookup tables that avoid +// multiplies and other hazzles +// for getting the framebuffer address +// of a pixel to draw. +// +void R_InitBuffer(int width, int height) +{ + int i; + + // Handle resize, + // e.g. smaller view windows + // with border and/or status bar. + viewwindowx = (SCREENWIDTH - width) >> 1; + + // Column offset. For windows. + for (i = 0; i < width; i++) + columnofs[i] = viewwindowx + i; + + // Samw with base row offset. + if (width == SCREENWIDTH) + viewwindowy = 0; + else + viewwindowy = (SCREENHEIGHT - SBARHEIGHT - height) >> 1; + + // Preclaculate all row offsets. + for (i = 0; i < height; i++) + ylookup[i] = screens[0] + (i + viewwindowy) * SCREENWIDTH; +} + + +// +// R_FillBackScreen +// Fills the back screen with a pattern +// for variable screen sizes +// Also draws a beveled edge. +// +void R_FillBackScreen(void) +{ + byte* src; + byte* dest; + int x; + int y; + patch_t* patch; + + // DOOM border patch. + char name1[] = "FLOOR7_2"; + + // DOOM II border patch. + char name2[] = "GRNROCK"; + + char* name; + + if (scaledviewwidth == 320) + return; + + if (gamemode == commercial) + name = name2; + else + name = name1; + + src = (byte*)W_CacheLumpName(name, PU_CACHE); + dest = screens[1]; + + for (y = 0; y < SCREENHEIGHT - SBARHEIGHT; y++) + { + for (x = 0; x < SCREENWIDTH / 64; x++) + { + doom_memcpy(dest, src + ((y & 63) << 6), 64); + dest += 64; + } + + if (SCREENWIDTH & 63) + { + doom_memcpy(dest, src + ((y & 63) << 6), SCREENWIDTH & 63); + dest += (SCREENWIDTH & 63); + } + } + + patch = (patch_t*)W_CacheLumpName((char*)"brdr_t", PU_CACHE); + + for (x = 0; x < scaledviewwidth; x += 8) + V_DrawPatch(viewwindowx + x, viewwindowy - 8, 1, patch); + patch = (patch_t*)W_CacheLumpName((char*)"brdr_b", PU_CACHE); + + for (x = 0; x < scaledviewwidth; x += 8) + V_DrawPatch(viewwindowx + x, viewwindowy + viewheight, 1, patch); + patch = (patch_t*)W_CacheLumpName((char*)"brdr_l", PU_CACHE); + + for (y = 0; y < viewheight; y += 8) + V_DrawPatch(viewwindowx - 8, viewwindowy + y, 1, patch); + patch = (patch_t*)W_CacheLumpName((char*)"brdr_r", PU_CACHE); + + for (y = 0; y < viewheight; y += 8) + V_DrawPatch(viewwindowx + scaledviewwidth, viewwindowy + y, 1, patch); + + + // Draw beveled edge. + V_DrawPatch(viewwindowx - 8, + viewwindowy - 8, + 1, + (patch_t*)W_CacheLumpName((char*)"brdr_tl", PU_CACHE)); + + V_DrawPatch(viewwindowx + scaledviewwidth, + viewwindowy - 8, + 1, + (patch_t*)W_CacheLumpName((char*)"brdr_tr", PU_CACHE)); + + V_DrawPatch(viewwindowx - 8, + viewwindowy + viewheight, + 1, + (patch_t*)W_CacheLumpName((char*)"brdr_bl", PU_CACHE)); + + V_DrawPatch(viewwindowx + scaledviewwidth, + viewwindowy + viewheight, + 1, + (patch_t*)W_CacheLumpName((char*)"brdr_br", PU_CACHE)); +} + + +// +// Copy a screen buffer. +// +void R_VideoErase(unsigned ofs, int count) +{ + // LFB copy. + // This might not be a good idea if memcpy + // is not optiomal, e.g. byte by byte on + // a 32bit CPU, as GNU GCC/Linux libc did + // at one point. + doom_memcpy(screens[0] + ofs, screens[1] + ofs, count); +} + + +// +// R_DrawViewBorder +// Draws the border around the view +// for different size windows? +// +void V_MarkRect(int x, int y, int width, int height); + +void R_DrawViewBorder(void) +{ + int top; + int side; + int ofs; + int i; + + if (scaledviewwidth == SCREENWIDTH) + return; + + top = ((SCREENHEIGHT - SBARHEIGHT) - viewheight) / 2; + side = (SCREENWIDTH - scaledviewwidth) / 2; + + // copy top and one line of left side + R_VideoErase(0, top * SCREENWIDTH + side); + + // copy one line of right side and bottom + ofs = (viewheight + top) * SCREENWIDTH - side; + R_VideoErase(ofs, top * SCREENWIDTH + side); + + // copy sides using wraparound + ofs = top * SCREENWIDTH + SCREENWIDTH - side; + side <<= 1; + + for (i = 1; i < viewheight; i++) + { + R_VideoErase(ofs, side); + ofs += SCREENWIDTH; + } + + // ? + V_MarkRect(0, 0, SCREENWIDTH, SCREENHEIGHT - SBARHEIGHT); +} +#define FIELDOFVIEW 2048 // Fineangles in the SCREENWIDTH wide window. +#define DISTMAP 2 + + +int viewangleoffset; + +// increment every time a check is made +int validcount = 1; + +lighttable_t* fixedcolormap; + +int centerx; +int centery; + +fixed_t centerxfrac; +fixed_t centeryfrac; +fixed_t projection; + +// just for profiling purposes +int framecount; + +int sscount; +int linecount; +int loopcount; + +fixed_t viewx; +fixed_t viewy; +fixed_t viewz; + +angle_t viewangle; + +fixed_t viewcos; +fixed_t viewsin; + +player_t* viewplayer; + +// 0 = high, 1 = low +int detailshift; + +// +// precalculated math tables +// +angle_t clipangle; + +// The viewangletox[viewangle + FINEANGLES/4] lookup +// maps the visible view angles to screen X coordinates, +// flattening the arc to a flat projection plane. +// There will be many angles mapped to the same X. +int viewangletox[FINEANGLES / 2]; + +// The xtoviewangleangle[] table maps a screen pixel +// to the lowest viewangle that maps back to x ranges +// from clipangle to -clipangle. +angle_t xtoviewangle[SCREENWIDTH + 1]; + +fixed_t* finecosine = &finesine[FINEANGLES / 4]; + +lighttable_t* scalelight[LIGHTLEVELS][MAXLIGHTSCALE]; +lighttable_t* scalelightfixed[MAXLIGHTSCALE]; +lighttable_t* zlight[LIGHTLEVELS][MAXLIGHTZ]; + +// bumped light from gun blasts +int extralight; + +doom_boolean setsizeneeded; +int setblocks; +int setdetail; + + +extern lighttable_t** walllights; +extern int detailLevel; +extern int screenblocks; + + +void (*colfunc) (void); +void (*basecolfunc) (void); +void (*fuzzcolfunc) (void); +void (*transcolfunc) (void); +void (*spanfunc) (void); + + +// +// R_AddPointToBox +// Expand a given bbox +// so that it encloses a given point. +// +void R_AddPointToBox(int x, int y, fixed_t* box) +{ + if (x < box[BOXLEFT]) + box[BOXLEFT] = x; + if (x > box[BOXRIGHT]) + box[BOXRIGHT] = x; + if (y < box[BOXBOTTOM]) + box[BOXBOTTOM] = y; + if (y > box[BOXTOP]) + box[BOXTOP] = y; +} + + +// +// R_PointOnSide +// Traverse BSP (sub) tree, +// check point against partition plane. +// Returns side 0 (front) or 1 (back). +// +int R_PointOnSide(fixed_t x, fixed_t y, node_t* node) +{ + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + if (!node->dx) + { + if (x <= node->x) + return node->dy > 0; + + return node->dy < 0; + } + if (!node->dy) + { + if (y <= node->y) + return node->dx < 0; + + return node->dx > 0; + } + + dx = (x - node->x); + dy = (y - node->y); + + // Try to quickly decide by looking at sign bits. + if ((node->dy ^ node->dx ^ dx ^ dy) & 0x80000000) + { + if ((node->dy ^ dx) & 0x80000000) + { + // (left is negative) + return 1; + } + return 0; + } + + left = FixedMul(node->dy >> FRACBITS, dx); + right = FixedMul(dy, node->dx >> FRACBITS); + + if (right < left) + { + // front side + return 0; + } + // back side + return 1; +} + + +int R_PointOnSegSide(fixed_t x, fixed_t y, seg_t* line) +{ + fixed_t lx; + fixed_t ly; + fixed_t ldx; + fixed_t ldy; + fixed_t dx; + fixed_t dy; + fixed_t left; + fixed_t right; + + lx = line->v1->x; + ly = line->v1->y; + + ldx = line->v2->x - lx; + ldy = line->v2->y - ly; + + if (!ldx) + { + if (x <= lx) + return ldy > 0; + + return ldy < 0; + } + if (!ldy) + { + if (y <= ly) + return ldx < 0; + + return ldx > 0; + } + + dx = (x - lx); + dy = (y - ly); + + // Try to quickly decide by looking at sign bits. + if ((ldy ^ ldx ^ dx ^ dy) & 0x80000000) + { + if ((ldy ^ dx) & 0x80000000) + { + // (left is negative) + return 1; + } + return 0; + } + + left = FixedMul(ldy >> FRACBITS, dx); + right = FixedMul(dy, ldx >> FRACBITS); + + if (right < left) + { + // front side + return 0; + } + // back side + return 1; +} + + +// +// R_PointToAngle +// To get a global angle from cartesian coordinates, +// the coordinates are flipped until they are in +// the first octant of the coordinate system, then +// the y (<=x) is scaled and divided by x to get a +// tangent (slope) value which is looked up in the +// tantoangle[] table. + +angle_t R_PointToAngle(fixed_t x, fixed_t y) +{ + x -= viewx; + y -= viewy; + + if ((!x) && (!y)) + return 0; + + if (x >= 0) + { + // x >=0 + if (y >= 0) + { + // y>= 0 + + if (x > y) + { + // octant 0 + return tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 1 + return ANG90 - 1 - tantoangle[SlopeDiv(x, y)]; + } + } + else + { + // y<0 + y = -y; + + if (x > y) + { + // octant 8 +#pragma warning(push) +#pragma warning(disable : 4146) + return -tantoangle[SlopeDiv(y, x)]; +#pragma warning(pop) + } + else + { + // octant 7 + return ANG270 + tantoangle[SlopeDiv(x, y)]; + } + } + } + else + { + // x<0 + x = -x; + + if (y >= 0) + { + // y>= 0 + if (x > y) + { + // octant 3 + return ANG180 - 1 - tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 2 + return ANG90 + tantoangle[SlopeDiv(x, y)]; + } + } + else + { + // y<0 + y = -y; + + if (x > y) + { + // octant 4 + return ANG180 + tantoangle[SlopeDiv(y, x)]; + } + else + { + // octant 5 + return ANG270 - 1 - tantoangle[SlopeDiv(x, y)]; + } + } + } + return 0; +} + + +angle_t R_PointToAngle2(fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2) +{ + viewx = x1; + viewy = y1; + + return R_PointToAngle(x2, y2); +} + + +fixed_t R_PointToDist(fixed_t x, fixed_t y) +{ + int angle; + fixed_t dx; + fixed_t dy; + fixed_t temp; + fixed_t dist; + + dx = doom_abs(x - viewx); + dy = doom_abs(y - viewy); + + if (dy > dx) + { + temp = dx; + dx = dy; + dy = temp; + } + + angle = (tantoangle[FixedDiv(dy, dx) >> DBITS] + ANG90) >> ANGLETOFINESHIFT; + + // use as cosine + dist = FixedDiv(dx, finesine[angle]); + + return dist; +} + + +// +// R_InitPointToAngle +// +void R_InitPointToAngle(void) +{ +} + + +// +// R_ScaleFromGlobalAngle +// Returns the texture mapping scale +// for the current line (horizontal span) +// at the given angle. +// rw_distance must be calculated first. +// +fixed_t R_ScaleFromGlobalAngle(angle_t visangle) +{ + fixed_t scale; + int anglea; + int angleb; + int sinea; + int sineb; + fixed_t num; + int den; + + anglea = ANG90 + (visangle - viewangle); + angleb = ANG90 + (visangle - rw_normalangle); + + // both sines are allways positive + sinea = finesine[anglea >> ANGLETOFINESHIFT]; + sineb = finesine[angleb >> ANGLETOFINESHIFT]; + num = FixedMul(projection, sineb) << detailshift; + den = FixedMul(rw_distance, sinea); + + if (den > num >> 16) + { + scale = FixedDiv(num, den); + + if (scale > 64 * FRACUNIT) + scale = 64 * FRACUNIT; + else if (scale < 256) + scale = 256; + } + else + scale = 64 * FRACUNIT; + + return scale; +} + + +// +// R_InitTables +// +void R_InitTables(void) +{ +} + + +// +// R_InitTextureMapping +// +void R_InitTextureMapping(void) +{ + int i; + int x; + int t; + fixed_t focallength; + + // Use tangent table to generate viewangletox: + // viewangletox will give the next greatest x + // after the view angle. + // + // Calc focallength + // so FIELDOFVIEW angles covers SCREENWIDTH. + focallength = FixedDiv(centerxfrac, + finetangent[FINEANGLES / 4 + FIELDOFVIEW / 2]); + + for (i = 0; i < FINEANGLES / 2; i++) + { + if (finetangent[i] > FRACUNIT * 2) + t = -1; + else if (finetangent[i] < -FRACUNIT * 2) + t = viewwidth + 1; + else + { + t = FixedMul(finetangent[i], focallength); + t = (centerxfrac - t + FRACUNIT - 1) >> FRACBITS; + + if (t < -1) + t = -1; + else if (t > viewwidth + 1) + t = viewwidth + 1; + } + viewangletox[i] = t; + } + + // Scan viewangletox[] to generate xtoviewangle[]: + // xtoviewangle will give the smallest view angle + // that maps to x. + for (x = 0; x <= viewwidth; x++) + { + i = 0; + while (viewangletox[i] > x) + i++; + xtoviewangle[x] = (i << ANGLETOFINESHIFT) - ANG90; + } + + // Take out the fencepost cases from viewangletox. + for (i = 0; i < FINEANGLES / 2; i++) + { + t = FixedMul(finetangent[i], focallength); + t = centerx - t; + + if (viewangletox[i] == -1) + viewangletox[i] = 0; + else if (viewangletox[i] == viewwidth + 1) + viewangletox[i] = viewwidth; + } + + clipangle = xtoviewangle[0]; +} + + +// +// R_InitLightTables +// Only inits the zlight table, +// because the scalelight table changes with view size. +// + +void R_InitLightTables(void) +{ + int i; + int j; + int level; + int startmap; + int scale; + + // Calculate the light levels to use + // for each level / distance combination. + for (i = 0; i < LIGHTLEVELS; i++) + { + startmap = ((LIGHTLEVELS - 1 - i) * 2) * NUMCOLORMAPS / LIGHTLEVELS; + for (j = 0; j < MAXLIGHTZ; j++) + { + scale = FixedDiv((SCREENWIDTH / 2 * FRACUNIT), (j + 1) << LIGHTZSHIFT); + scale >>= LIGHTSCALESHIFT; + level = startmap - scale / DISTMAP; + + if (level < 0) + level = 0; + + if (level >= NUMCOLORMAPS) + level = NUMCOLORMAPS - 1; + + zlight[i][j] = colormaps + level * 256; + } + } +} + + +// +// R_SetViewSize +// Do not really change anything here, +// because it might be in the middle of a refresh. +// The change will take effect next refresh. +// + +void R_SetViewSize(int blocks, int detail) +{ + setsizeneeded = doom_true; + setblocks = blocks; + setdetail = detail; +} + + +// +// R_ExecuteSetViewSize +// +void R_ExecuteSetViewSize(void) +{ + fixed_t cosadj; + fixed_t dy; + int i; + int j; + int level; + int startmap; + + setsizeneeded = doom_false; + + if (setblocks == 11) + { + scaledviewwidth = SCREENWIDTH; + viewheight = SCREENHEIGHT; + } + else + { + scaledviewwidth = setblocks * 32; + viewheight = (setblocks * 168 / 10) & ~7; + } + + detailshift = setdetail; + viewwidth = scaledviewwidth >> detailshift; + + centery = viewheight / 2; + centerx = viewwidth / 2; + centerxfrac = centerx << FRACBITS; + centeryfrac = centery << FRACBITS; + projection = centerxfrac; + + if (!detailshift) + { + colfunc = basecolfunc = R_DrawColumn; + fuzzcolfunc = R_DrawFuzzColumn; + transcolfunc = R_DrawTranslatedColumn; + spanfunc = R_DrawSpan; + } + else + { + colfunc = basecolfunc = R_DrawColumnLow; + fuzzcolfunc = R_DrawFuzzColumn; + transcolfunc = R_DrawTranslatedColumn; + spanfunc = R_DrawSpanLow; + } + + R_InitBuffer(scaledviewwidth, viewheight); + + R_InitTextureMapping(); + + // psprite scales + pspritescale = FRACUNIT * viewwidth / SCREENWIDTH; + pspriteiscale = FRACUNIT * SCREENWIDTH / viewwidth; + + // thing clipping + for (i = 0; i < viewwidth; i++) + screenheightarray[i] = viewheight; + + // planes + for (i = 0; i < viewheight; i++) + { + dy = ((i - viewheight / 2) << FRACBITS) + FRACUNIT / 2; + dy = doom_abs(dy); + yslope[i] = FixedDiv((viewwidth << detailshift) / 2 * FRACUNIT, dy); + } + + for (i = 0; i < viewwidth; i++) + { + cosadj = doom_abs(finecosine[xtoviewangle[i] >> ANGLETOFINESHIFT]); + distscale[i] = FixedDiv(FRACUNIT, cosadj); + } + + // Calculate the light levels to use + // for each level / scale combination. + for (i = 0; i < LIGHTLEVELS; i++) + { + startmap = ((LIGHTLEVELS - 1 - i) * 2) * NUMCOLORMAPS / LIGHTLEVELS; + for (j = 0; j < MAXLIGHTSCALE; j++) + { + level = startmap - j * SCREENWIDTH / (viewwidth << detailshift) / DISTMAP; + + if (level < 0) + level = 0; + + if (level >= NUMCOLORMAPS) + level = NUMCOLORMAPS - 1; + + scalelight[i][j] = colormaps + level * 256; + } + } +} + + +// +// R_Init +// +void R_Init(void) +{ + R_InitData(); + doom_print("\nR_InitData"); + R_InitPointToAngle(); + doom_print("\nR_InitPointToAngle"); + R_InitTables(); + // viewwidth / viewheight / detailLevel are set by the defaults + doom_print("\nR_InitTables"); + + R_SetViewSize(screenblocks, detailLevel); + R_InitPlanes(); + doom_print("\nR_InitPlanes"); + R_InitLightTables(); + doom_print("\nR_InitLightTables"); + R_InitSkyMap(); + doom_print("\nR_InitSkyMap"); + R_InitTranslationTables(); + doom_print("\nR_InitTranslationsTables"); + + framecount = 0; +} + + +// +// R_PointInSubsector +// +subsector_t* R_PointInSubsector(fixed_t x, fixed_t y) +{ + node_t* node; + int side; + int nodenum; + + // single subsector is a special case + if (!numnodes) + return subsectors; + + nodenum = numnodes - 1; + + while (!(nodenum & NF_SUBSECTOR)) + { + node = &nodes[nodenum]; + side = R_PointOnSide(x, y, node); + nodenum = node->children[side]; + } + + return &subsectors[nodenum & ~NF_SUBSECTOR]; +} + + +// +// R_SetupFrame +// +void R_SetupFrame(player_t* player) +{ + int i; + + viewplayer = player; + viewx = player->mo->x; + viewy = player->mo->y; + viewangle = player->mo->angle + viewangleoffset; + extralight = player->extralight; + + viewz = player->viewz; + + viewsin = finesine[viewangle >> ANGLETOFINESHIFT]; + viewcos = finecosine[viewangle >> ANGLETOFINESHIFT]; + + sscount = 0; + + if (player->fixedcolormap) + { + fixedcolormap = + colormaps + + player->fixedcolormap * 256 * sizeof(lighttable_t); + + walllights = scalelightfixed; + + for (i = 0; i < MAXLIGHTSCALE; i++) + scalelightfixed[i] = fixedcolormap; + } + else + fixedcolormap = 0; + + framecount++; + validcount++; +} + + +// +// R_RenderView +// +void R_RenderPlayerView(player_t* player) +{ + R_SetupFrame(player); + + // Clear buffers. + R_ClearClipSegs(); + R_ClearDrawSegs(); + R_ClearPlanes(); + R_ClearSprites(); + + // check for new console commands. + NetUpdate(); + + // The head node is the last node output. + R_RenderBSPNode(numnodes - 1); + + // Check for new console commands. + NetUpdate(); + + R_DrawPlanes(); + + // Check for new console commands. + NetUpdate(); + + R_DrawMasked(); + + // Check for new console commands. + NetUpdate(); +} +#define MAXVISPLANES 128 +#define MAXOPENINGS SCREENWIDTH*64 + + +planefunction_t floorfunc; +planefunction_t ceilingfunc; + +// +// opening +// + +// Here comes the obnoxious "visplane". +visplane_t visplanes[MAXVISPLANES]; +visplane_t* lastvisplane; +visplane_t* floorplane; +visplane_t* ceilingplane; + +// ? +short openings[MAXOPENINGS]; +short* lastopening; + +// +// Clip values are the solid pixel bounding the range. +// floorclip starts out SCREENHEIGHT +// ceilingclip starts out -1 +// +short floorclip[SCREENWIDTH]; +short ceilingclip[SCREENWIDTH]; + +// +// spanstart holds the start of a plane span +// initialized to 0 at start +// +int spanstart[SCREENHEIGHT]; +int spanstop[SCREENHEIGHT]; + +// +// texture mapping +// +lighttable_t** planezlight; +fixed_t planeheight; + +fixed_t yslope[SCREENHEIGHT]; +fixed_t distscale[SCREENWIDTH]; +fixed_t basexscale; +fixed_t baseyscale; + +fixed_t cachedheight[SCREENHEIGHT]; +fixed_t cacheddistance[SCREENHEIGHT]; +fixed_t cachedxstep[SCREENHEIGHT]; +fixed_t cachedystep[SCREENHEIGHT]; + + +// +// R_InitPlanes +// Only at game startup. +// +void R_InitPlanes(void) +{ + // Doh! +} + + +// +// R_MapPlane +// +// Uses global vars: +// planeheight +// ds_source +// basexscale +// baseyscale +// viewx +// viewy +// +// BASIC PRIMITIVE +// +void R_MapPlane(int y, int x1, int x2) +{ + angle_t angle; + fixed_t distance; + fixed_t length; + unsigned index; + +#ifdef RANGECHECK + if (x2 < x1 + || x1<0 + || x2 >= viewwidth + || (unsigned)y>(unsigned)viewheight) + { + //I_Error("Error: R_MapPlane: %i, %i at %i", x1, x2, y); + + doom_strcpy(error_buf, "Error: R_MapPlane: "); + doom_concat(error_buf, doom_itoa(x1, 10)); + doom_concat(error_buf, ", "); + doom_concat(error_buf, doom_itoa(x2, 10)); + doom_concat(error_buf, " at "); + doom_concat(error_buf, doom_itoa(y, 10)); + I_Error(error_buf); + } +#endif + + if (planeheight != cachedheight[y]) + { + cachedheight[y] = planeheight; + distance = cacheddistance[y] = FixedMul(planeheight, yslope[y]); + ds_xstep = cachedxstep[y] = FixedMul(distance, basexscale); + ds_ystep = cachedystep[y] = FixedMul(distance, baseyscale); + } + else + { + distance = cacheddistance[y]; + ds_xstep = cachedxstep[y]; + ds_ystep = cachedystep[y]; + } + + length = FixedMul(distance, distscale[x1]); + angle = (viewangle + xtoviewangle[x1]) >> ANGLETOFINESHIFT; + ds_xfrac = viewx + FixedMul(finecosine[angle], length); + ds_yfrac = -viewy - FixedMul(finesine[angle], length); + + if (fixedcolormap) + ds_colormap = fixedcolormap; + else + { + index = distance >> LIGHTZSHIFT; + + if (index >= MAXLIGHTZ) + index = MAXLIGHTZ - 1; + + ds_colormap = planezlight[index]; + } + + ds_y = y; + ds_x1 = x1; + ds_x2 = x2; + + // high or low detail + spanfunc(); +} + + +// +// R_ClearPlanes +// At begining of frame. +// +void R_ClearPlanes(void) +{ + int i; + angle_t angle; + + // opening / clipping determination + for (i = 0; i < viewwidth; i++) + { + floorclip[i] = viewheight; + ceilingclip[i] = -1; + } + + lastvisplane = visplanes; + lastopening = openings; + + // texture calculation + doom_memset(cachedheight, 0, sizeof(cachedheight)); + + // left to right mapping + angle = (viewangle - ANG90) >> ANGLETOFINESHIFT; + + // scale will be unit scale at SCREENWIDTH/2 distance + basexscale = FixedDiv(finecosine[angle], centerxfrac); + baseyscale = -FixedDiv(finesine[angle], centerxfrac); +} + + +// +// R_FindPlane +// +visplane_t* R_FindPlane(fixed_t height, int picnum, int lightlevel) +{ + visplane_t* check; + + if (picnum == skyflatnum) + { + height = 0; // all skys map together + lightlevel = 0; + } + + for (check = visplanes; check < lastvisplane; check++) + { + if (height == check->height + && picnum == check->picnum + && lightlevel == check->lightlevel) + { + break; + } + } + + if (check < lastvisplane) + return check; + + if (lastvisplane - visplanes == MAXVISPLANES) + I_Error((char*)"Error: R_FindPlane: no more visplanes"); + + lastvisplane++; + + check->height = height; + check->picnum = picnum; + check->lightlevel = lightlevel; + check->minx = SCREENWIDTH; + check->maxx = -1; + + doom_memset(check->top, 0xff, sizeof(check->top)); + + return check; +} + + +// +// R_CheckPlane +// +visplane_t* R_CheckPlane(visplane_t* pl, int start, int stop) +{ + int intrl; + int intrh; + int unionl; + int unionh; + int x; + + if (start < pl->minx) + { + intrl = pl->minx; + unionl = start; + } + else + { + unionl = pl->minx; + intrl = start; + } + + if (stop > pl->maxx) + { + intrh = pl->maxx; + unionh = stop; + } + else + { + unionh = pl->maxx; + intrh = stop; + } + + for (x = intrl; x <= intrh; x++) + if (pl->top[x] != 0xff) + break; + + if (x > intrh) + { + pl->minx = unionl; + pl->maxx = unionh; + + // use the same one + return pl; + } + + // make a new visplane + lastvisplane->height = pl->height; + lastvisplane->picnum = pl->picnum; + lastvisplane->lightlevel = pl->lightlevel; + + pl = lastvisplane++; + pl->minx = start; + pl->maxx = stop; + + doom_memset(pl->top, 0xff, sizeof(pl->top)); + + return pl; +} + + +// +// R_MakeSpans +// +void R_MakeSpans(int x, int t1, int b1, int t2, int b2) +{ + while (t1 < t2 && t1 <= b1) + { + R_MapPlane(t1, spanstart[t1], x - 1); + t1++; + } + while (b1 > b2 && b1 >= t1) + { + R_MapPlane(b1, spanstart[b1], x - 1); + b1--; + } + + while (t2 < t1 && t2 <= b2) + { + spanstart[t2] = x; + t2++; + } + while (b2 > b1 && b2 >= t2) + { + spanstart[b2] = x; + b2--; + } +} + + +// +// R_DrawPlanes +// At the end of each frame. +// +void R_DrawPlanes(void) +{ + visplane_t* pl; + int light; + int x; + int stop; + int angle; + +#ifdef RANGECHECK + if (ds_p - drawsegs > MAXDRAWSEGS) + { + //I_Error("Error: R_DrawPlanes: drawsegs overflow (%i)", + // ds_p - drawsegs); + + doom_strcpy(error_buf, "Error: R_DrawPlanes: drawsegs overflow ("); + doom_concat(error_buf, doom_itoa((int)(ds_p - drawsegs), 10)); + doom_concat(error_buf, ")"); + I_Error(error_buf); + } + + if (lastvisplane - visplanes > MAXVISPLANES) + { + //I_Error("Error: R_DrawPlanes: visplane overflow (%i)", + // lastvisplane - visplanes); + + doom_strcpy(error_buf, "Error: R_DrawPlanes: visplane overflow ("); + doom_concat(error_buf, doom_itoa((int)(lastvisplane - visplanes), 10)); + doom_concat(error_buf, ")"); + I_Error(error_buf); + } + + if (lastopening - openings > MAXOPENINGS) + { + //I_Error("Error: R_DrawPlanes: opening overflow (%i)", + // lastopening - openings); + + doom_strcpy(error_buf, "Error: R_DrawPlanes: opening overflow ("); + doom_concat(error_buf, doom_itoa((int)(lastopening - openings), 10)); + doom_concat(error_buf, ")"); + I_Error(error_buf); + } +#endif + + for (pl = visplanes; pl < lastvisplane; pl++) + { + if (pl->minx > pl->maxx) + continue; + + + // sky flat + if (pl->picnum == skyflatnum) + { + dc_iscale = pspriteiscale >> detailshift; + + // Sky is allways drawn full bright, + // i.e. colormaps[0] is used. + // Because of this hack, sky is not affected + // by INVUL inverse mapping. + dc_colormap = colormaps; + dc_texturemid = skytexturemid; + for (x = pl->minx; x <= pl->maxx; x++) + { + dc_yl = pl->top[x]; + dc_yh = pl->bottom[x]; + + if (dc_yl <= dc_yh) + { + angle = (viewangle + xtoviewangle[x]) >> ANGLETOSKYSHIFT; + dc_x = x; + dc_source = R_GetColumn(skytexture, angle); + colfunc(); + } + } + continue; + } + + // regular flat + ds_source = (byte*)W_CacheLumpNum(firstflat + + flattranslation[pl->picnum], + PU_STATIC); + + planeheight = doom_abs(pl->height - viewz); + light = (pl->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (light >= LIGHTLEVELS) + light = LIGHTLEVELS - 1; + + if (light < 0) + light = 0; + + planezlight = zlight[light]; + + pl->top[pl->maxx + 1] = 0xff; + pl->top[pl->minx - 1] = 0xff; + + stop = pl->maxx + 1; + + for (x = pl->minx; x <= stop; x++) + { + R_MakeSpans(x, pl->top[x - 1], + pl->bottom[x - 1], + pl->top[x], + pl->bottom[x]); + } + + Z_ChangeTag(ds_source, PU_CACHE); + } +} +#define HEIGHTBITS 12 +#define HEIGHTUNIT (1<curline; + frontsector = curline->frontsector; + backsector = curline->backsector; + texnum = texturetranslation[curline->sidedef->midtexture]; + + lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (curline->v1->y == curline->v2->y) + lightnum--; + else if (curline->v1->x == curline->v2->x) + lightnum++; + + if (lightnum < 0) + walllights = scalelight[0]; + else if (lightnum >= LIGHTLEVELS) + walllights = scalelight[LIGHTLEVELS - 1]; + else + walllights = scalelight[lightnum]; + + maskedtexturecol = ds->maskedtexturecol; + + rw_scalestep = ds->scalestep; + spryscale = ds->scale1 + (x1 - ds->x1) * rw_scalestep; + mfloorclip = ds->sprbottomclip; + mceilingclip = ds->sprtopclip; + + // find positioning + if (curline->linedef->flags & ML_DONTPEGBOTTOM) + { + dc_texturemid = frontsector->floorheight > backsector->floorheight + ? frontsector->floorheight : backsector->floorheight; + dc_texturemid = dc_texturemid + textureheight[texnum] - viewz; + } + else + { + dc_texturemid = frontsector->ceilingheight < backsector->ceilingheight + ? frontsector->ceilingheight : backsector->ceilingheight; + dc_texturemid = dc_texturemid - viewz; + } + dc_texturemid += curline->sidedef->rowoffset; + + if (fixedcolormap) + dc_colormap = fixedcolormap; + + // draw the columns + for (dc_x = x1; dc_x <= x2; dc_x++) + { + // calculate lighting + if (maskedtexturecol[dc_x] != DOOM_MAXSHORT) + { + if (!fixedcolormap) + { + index = spryscale >> LIGHTSCALESHIFT; + + if (index >= MAXLIGHTSCALE) + index = MAXLIGHTSCALE - 1; + + dc_colormap = walllights[index]; + } + + sprtopscreen = centeryfrac - FixedMul(dc_texturemid, spryscale); + dc_iscale = 0xffffffffu / (unsigned)spryscale; + + // draw the texture + col = (column_t*)( + (byte*)R_GetColumn(texnum, maskedtexturecol[dc_x]) - 3); + + R_DrawMaskedColumn(col); + maskedtexturecol[dc_x] = DOOM_MAXSHORT; + } + spryscale += rw_scalestep; + } +} + + +// +// R_RenderSegLoop +// Draws zero, one, or two textures (and possibly a masked +// texture) for walls. +// Can draw or mark the starting pixel of floor and ceiling +// textures. +// CALLED: CORE LOOPING ROUTINE. +// +void R_RenderSegLoop(void) +{ + angle_t angle; + unsigned index; + int yl; + int yh; + int mid; + fixed_t texturecolumn; + int top; + int bottom; + + for (; rw_x < rw_stopx; rw_x++) + { + // mark floor / ceiling areas + yl = (topfrac + HEIGHTUNIT - 1) >> HEIGHTBITS; + + // no space above wall? + if (yl < ceilingclip[rw_x] + 1) + yl = ceilingclip[rw_x] + 1; + + if (markceiling) + { + top = ceilingclip[rw_x] + 1; + bottom = yl - 1; + + if (bottom >= floorclip[rw_x]) + bottom = floorclip[rw_x] - 1; + + if (top <= bottom) + { + ceilingplane->top[rw_x] = top; + ceilingplane->bottom[rw_x] = bottom; + } + } + + yh = bottomfrac >> HEIGHTBITS; + + if (yh >= floorclip[rw_x]) + yh = floorclip[rw_x] - 1; + + if (markfloor) + { + top = yh + 1; + bottom = floorclip[rw_x] - 1; + if (top <= ceilingclip[rw_x]) + top = ceilingclip[rw_x] + 1; + if (top <= bottom) + { + floorplane->top[rw_x] = top; + floorplane->bottom[rw_x] = bottom; + } + } + + // texturecolumn and lighting are independent of wall tiers + if (segtextured) + { + // calculate texture offset + angle = (rw_centerangle + xtoviewangle[rw_x]) >> ANGLETOFINESHIFT; + texturecolumn = rw_offset - FixedMul(finetangent[angle], rw_distance); + texturecolumn >>= FRACBITS; + // calculate lighting + index = rw_scale >> LIGHTSCALESHIFT; + + if (index >= MAXLIGHTSCALE) + index = MAXLIGHTSCALE - 1; + + dc_colormap = walllights[index]; + dc_x = rw_x; + dc_iscale = 0xffffffffu / (unsigned)rw_scale; + } + + // draw the wall tiers + if (midtexture) + { + // single sided line + dc_yl = yl; + dc_yh = yh; + dc_texturemid = rw_midtexturemid; + dc_source = R_GetColumn(midtexture, texturecolumn); + colfunc(); + ceilingclip[rw_x] = viewheight; + floorclip[rw_x] = -1; + } + else + { + // two sided line + if (toptexture) + { + // top wall + mid = pixhigh >> HEIGHTBITS; + pixhigh += pixhighstep; + + if (mid >= floorclip[rw_x]) + mid = floorclip[rw_x] - 1; + + if (mid >= yl) + { + dc_yl = yl; + dc_yh = mid; + dc_texturemid = rw_toptexturemid; + dc_source = R_GetColumn(toptexture, texturecolumn); + colfunc(); + ceilingclip[rw_x] = mid; + } + else + ceilingclip[rw_x] = yl - 1; + } + else + { + // no top wall + if (markceiling) + ceilingclip[rw_x] = yl - 1; + } + + if (bottomtexture) + { + // bottom wall + mid = (pixlow + HEIGHTUNIT - 1) >> HEIGHTBITS; + pixlow += pixlowstep; + + // no space above wall? + if (mid <= ceilingclip[rw_x]) + mid = ceilingclip[rw_x] + 1; + + if (mid <= yh) + { + dc_yl = mid; + dc_yh = yh; + dc_texturemid = rw_bottomtexturemid; + dc_source = R_GetColumn(bottomtexture, + texturecolumn); + colfunc(); + floorclip[rw_x] = mid; + } + else + floorclip[rw_x] = yh + 1; + } + else + { + // no bottom wall + if (markfloor) + floorclip[rw_x] = yh + 1; + } + + if (maskedtexture) + { + // save texturecol + // for backdrawing of masked mid texture + maskedtexturecol[rw_x] = texturecolumn; + } + } + + rw_scale += rw_scalestep; + topfrac += topstep; + bottomfrac += bottomstep; + } +} + + +// +// R_StoreWallRange +// A wall segment will be drawn +// between start and stop pixels (inclusive). +// +void R_StoreWallRange(int start, int stop) +{ + fixed_t hyp; + fixed_t sineval; + angle_t distangle, offsetangle; + fixed_t vtop; + int lightnum; + + // don't overflow and crash + if (ds_p == &drawsegs[MAXDRAWSEGS]) + return; + +#ifdef RANGECHECK + if (start >= viewwidth || start > stop) + { + //I_Error("Error: Bad R_RenderWallRange: %i to %i", start, stop); + + doom_strcpy(error_buf, "Error: Bad R_RenderWallRange: "); + doom_concat(error_buf, doom_itoa(start, 10)); + doom_concat(error_buf, " to "); + doom_concat(error_buf, doom_itoa(stop, 10)); + I_Error(error_buf); + } +#endif + + sidedef = curline->sidedef; + linedef = curline->linedef; + + // mark the segment as visible for auto map + linedef->flags |= ML_MAPPED; + + // calculate rw_distance for scale calculation + rw_normalangle = curline->angle + ANG90; + offsetangle = (angle_t)doom_abs((int)rw_normalangle - (int)rw_angle1); + + if (offsetangle > ANG90) + offsetangle = ANG90; + + distangle = ANG90 - offsetangle; + hyp = R_PointToDist(curline->v1->x, curline->v1->y); + sineval = finesine[distangle >> ANGLETOFINESHIFT]; + rw_distance = FixedMul(hyp, sineval); + + + ds_p->x1 = rw_x = start; + ds_p->x2 = stop; + ds_p->curline = curline; + rw_stopx = stop + 1; + + // calculate scale at both ends and step + ds_p->scale1 = rw_scale = + R_ScaleFromGlobalAngle(viewangle + xtoviewangle[start]); + + if (stop > start) + { + ds_p->scale2 = R_ScaleFromGlobalAngle(viewangle + xtoviewangle[stop]); + ds_p->scalestep = rw_scalestep = + (ds_p->scale2 - rw_scale) / (stop - start); + } + else + { + // UNUSED: try to fix the stretched line bug +#if 0 + if (rw_distance < FRACUNIT / 2) + { + fixed_t trx, try; + fixed_t gxt, gyt; + + trx = curline->v1->x - viewx; + try = curline->v1->y - viewy; + + gxt = FixedMul(trx, viewcos); + gyt = -FixedMul(try, viewsin); + ds_p->scale1 = FixedDiv(projection, gxt - gyt) << detailshift; + } +#endif + ds_p->scale2 = ds_p->scale1; + } + + // calculate texture boundaries + // and decide if floor / ceiling marks are needed + worldtop = frontsector->ceilingheight - viewz; + worldbottom = frontsector->floorheight - viewz; + + midtexture = toptexture = bottomtexture = maskedtexture = 0; + ds_p->maskedtexturecol = 0; + + if (!backsector) + { + // single sided line + midtexture = texturetranslation[sidedef->midtexture]; + // a single sided line is terminal, so it must mark ends + markfloor = markceiling = doom_true; + if (linedef->flags & ML_DONTPEGBOTTOM) + { + vtop = frontsector->floorheight + + textureheight[sidedef->midtexture]; + // bottom of texture at bottom + rw_midtexturemid = vtop - viewz; + } + else + { + // top of texture at top + rw_midtexturemid = worldtop; + } + rw_midtexturemid += sidedef->rowoffset; + + ds_p->silhouette = SIL_BOTH; + ds_p->sprtopclip = screenheightarray; + ds_p->sprbottomclip = negonearray; + ds_p->bsilheight = DOOM_MAXINT; + ds_p->tsilheight = DOOM_MININT; + } + else + { + // two sided line + ds_p->sprtopclip = ds_p->sprbottomclip = 0; + ds_p->silhouette = 0; + + if (frontsector->floorheight > backsector->floorheight) + { + ds_p->silhouette = SIL_BOTTOM; + ds_p->bsilheight = frontsector->floorheight; + } + else if (backsector->floorheight > viewz) + { + ds_p->silhouette = SIL_BOTTOM; + ds_p->bsilheight = DOOM_MAXINT; + // ds_p->sprbottomclip = negonearray; + } + + if (frontsector->ceilingheight < backsector->ceilingheight) + { + ds_p->silhouette |= SIL_TOP; + ds_p->tsilheight = frontsector->ceilingheight; + } + else if (backsector->ceilingheight < viewz) + { + ds_p->silhouette |= SIL_TOP; + ds_p->tsilheight = DOOM_MININT; + // ds_p->sprtopclip = screenheightarray; + } + + if (backsector->ceilingheight <= frontsector->floorheight) + { + ds_p->sprbottomclip = negonearray; + ds_p->bsilheight = DOOM_MAXINT; + ds_p->silhouette |= SIL_BOTTOM; + } + + if (backsector->floorheight >= frontsector->ceilingheight) + { + ds_p->sprtopclip = screenheightarray; + ds_p->tsilheight = DOOM_MININT; + ds_p->silhouette |= SIL_TOP; + } + + worldhigh = backsector->ceilingheight - viewz; + worldlow = backsector->floorheight - viewz; + + // hack to allow height changes in outdoor areas + if (frontsector->ceilingpic == skyflatnum + && backsector->ceilingpic == skyflatnum) + { + worldtop = worldhigh; + } + + if (worldlow != worldbottom + || backsector->floorpic != frontsector->floorpic + || backsector->lightlevel != frontsector->lightlevel) + { + markfloor = doom_true; + } + else + { + // same plane on both sides + markfloor = doom_false; + } + + if (worldhigh != worldtop + || backsector->ceilingpic != frontsector->ceilingpic + || backsector->lightlevel != frontsector->lightlevel) + { + markceiling = doom_true; + } + else + { + // same plane on both sides + markceiling = doom_false; + } + + if (backsector->ceilingheight <= frontsector->floorheight + || backsector->floorheight >= frontsector->ceilingheight) + { + // closed door + markceiling = markfloor = doom_true; + } + + if (worldhigh < worldtop) + { + // top texture + toptexture = texturetranslation[sidedef->toptexture]; + if (linedef->flags & ML_DONTPEGTOP) + { + // top of texture at top + rw_toptexturemid = worldtop; + } + else + { + vtop = + backsector->ceilingheight + + textureheight[sidedef->toptexture]; + + // bottom of texture + rw_toptexturemid = vtop - viewz; + } + } + if (worldlow > worldbottom) + { + // bottom texture + bottomtexture = texturetranslation[sidedef->bottomtexture]; + + if (linedef->flags & ML_DONTPEGBOTTOM) + { + // bottom of texture at bottom + // top of texture at top + rw_bottomtexturemid = worldtop; + } + else // top of texture at top + rw_bottomtexturemid = worldlow; + } + rw_toptexturemid += sidedef->rowoffset; + rw_bottomtexturemid += sidedef->rowoffset; + + // allocate space for masked texture tables + if (sidedef->midtexture) + { + // masked midtexture + maskedtexture = doom_true; + ds_p->maskedtexturecol = maskedtexturecol = lastopening - rw_x; + lastopening += rw_stopx - rw_x; + } + } + + // calculate rw_offset (only needed for textured lines) + segtextured = midtexture | toptexture | bottomtexture | (int)maskedtexture; + + if (segtextured) + { + offsetangle = rw_normalangle - rw_angle1; + + if (offsetangle > ANG180) +#pragma warning(push) +#pragma warning(disable : 4146) + offsetangle = -offsetangle; +#pragma warning(pop) + + if (offsetangle > ANG90) + offsetangle = ANG90; + + sineval = finesine[offsetangle >> ANGLETOFINESHIFT]; + rw_offset = FixedMul(hyp, sineval); + + if (rw_normalangle - rw_angle1 < ANG180) + rw_offset = -rw_offset; + + rw_offset += sidedef->textureoffset + curline->offset; + rw_centerangle = ANG90 + viewangle - rw_normalangle; + + // calculate light table + // use different light tables + // for horizontal / vertical / diagonal + // OPTIMIZE: get rid of LIGHTSEGSHIFT globally + if (!fixedcolormap) + { + lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (curline->v1->y == curline->v2->y) + lightnum--; + else if (curline->v1->x == curline->v2->x) + lightnum++; + + if (lightnum < 0) + walllights = scalelight[0]; + else if (lightnum >= LIGHTLEVELS) + walllights = scalelight[LIGHTLEVELS - 1]; + else + walllights = scalelight[lightnum]; + } + } + + // if a floor / ceiling plane is on the wrong side + // of the view plane, it is definitely invisible + // and doesn't need to be marked. + + if (frontsector->floorheight >= viewz) + { + // above view plane + markfloor = doom_false; + } + + if (frontsector->ceilingheight <= viewz + && frontsector->ceilingpic != skyflatnum) + { + // below view plane + markceiling = doom_false; + } + + + // calculate incremental stepping values for texture edges + worldtop >>= 4; + worldbottom >>= 4; + + topstep = -FixedMul(rw_scalestep, worldtop); + topfrac = (centeryfrac >> 4) - FixedMul(worldtop, rw_scale); + + bottomstep = -FixedMul(rw_scalestep, worldbottom); + bottomfrac = (centeryfrac >> 4) - FixedMul(worldbottom, rw_scale); + + if (backsector) + { + worldhigh >>= 4; + worldlow >>= 4; + + if (worldhigh < worldtop) + { + pixhigh = (centeryfrac >> 4) - FixedMul(worldhigh, rw_scale); + pixhighstep = -FixedMul(rw_scalestep, worldhigh); + } + + if (worldlow > worldbottom) + { + pixlow = (centeryfrac >> 4) - FixedMul(worldlow, rw_scale); + pixlowstep = -FixedMul(rw_scalestep, worldlow); + } + } + + // render it + if (markceiling) + ceilingplane = R_CheckPlane(ceilingplane, rw_x, rw_stopx - 1); + + if (markfloor) + floorplane = R_CheckPlane(floorplane, rw_x, rw_stopx - 1); + + R_RenderSegLoop(); + + // save sprite clipping info + if (((ds_p->silhouette & SIL_TOP) || maskedtexture) + && !ds_p->sprtopclip) + { + doom_memcpy(lastopening, ceilingclip + start, 2 * (rw_stopx - start)); + ds_p->sprtopclip = lastopening - start; + lastopening += rw_stopx - start; + } + + if (((ds_p->silhouette & SIL_BOTTOM) || maskedtexture) + && !ds_p->sprbottomclip) + { + doom_memcpy(lastopening, floorclip + start, 2 * (rw_stopx - start)); + ds_p->sprbottomclip = lastopening - start; + lastopening += rw_stopx - start; + } + + if (maskedtexture && !(ds_p->silhouette & SIL_TOP)) + { + ds_p->silhouette |= SIL_TOP; + ds_p->tsilheight = DOOM_MININT; + } + if (maskedtexture && !(ds_p->silhouette & SIL_BOTTOM)) + { + ds_p->silhouette |= SIL_BOTTOM; + ds_p->bsilheight = DOOM_MAXINT; + } + ds_p++; +} +int skyflatnum; +int skytexture; +int skytexturemid; + + +// +// R_InitSkyMap +// Called whenever the view size changes. +// +void R_InitSkyMap(void) +{ + skytexturemid = 100 * FRACUNIT; +} +#define MINZ (FRACUNIT*4) +#define BASEYCENTER 100 + + +typedef struct +{ + int x1; + int x2; + + int column; + int topclip; + int bottomclip; +} maskdraw_t; + + +// +// Sprite rotation 0 is facing the viewer, +// rotation 1 is one angle turn CLOCKWISE around the axis. +// This is not the same as the angle, +// which increases counter clockwise (protractor). +// There was a lot of stuff grabbed wrong, so I changed it... +// +fixed_t pspritescale; +fixed_t pspriteiscale; + +lighttable_t** spritelights; + +// constant arrays +// used for psprite clipping and initializing clipping +short negonearray[SCREENWIDTH]; +short screenheightarray[SCREENWIDTH]; + +// variables used to look up +// and range check thing_t sprites patches +spritedef_t* sprites; +int numsprites; + +spriteframe_t sprtemp[29]; +int maxframe; +char* spritename; +vissprite_t vissprites[MAXVISSPRITES]; +vissprite_t* vissprite_p; +int newvissprite; +vissprite_t vsprsortedhead; + + +// +// INITIALIZATION FUNCTIONS +// + +// +// R_InstallSpriteLump +// Local function for R_InitSprites. +// +void R_InstallSpriteLump(int lump, unsigned frame, unsigned rotation, doom_boolean flipped) +{ + int r; + + if (frame >= 29 || rotation > 8) + { + //I_Error("Error: R_InstallSpriteLump: " + // "Bad frame characters in lump %i", lump); + doom_strcpy(error_buf, "Error: R_InstallSpriteLump: Bad frame characters in lump "); + doom_concat(error_buf, doom_itoa(lump, 10)); + I_Error(error_buf); + } + + if ((int)frame > maxframe) + maxframe = frame; + + if (rotation == 0) + { + // the lump should be used for all rotations + if (sprtemp[frame].rotate == doom_false) + { + //I_Error("Error: R_InitSprites: Sprite %s frame %c has " + // "multip rot=0 lump", spritename, 'A' + frame); + doom_strcpy(error_buf, "Error: R_InitSprites: Sprite "); + doom_concat(error_buf, spritename); + doom_concat(error_buf, " frame "); + doom_concat(error_buf, doom_ctoa('A' + frame)); + doom_concat(error_buf, " has multip rot=0 lump"); + I_Error(error_buf); + } + + if (sprtemp[frame].rotate == doom_true) + { + //I_Error("Error: R_InitSprites: Sprite %s frame %c has rotations " + // "and a rot=0 lump", spritename, 'A' + frame); + doom_strcpy(error_buf, "Error: R_InitSprites: Sprite "); + doom_concat(error_buf, spritename); + doom_concat(error_buf, " frame "); + doom_concat(error_buf, doom_ctoa('A' + frame)); + doom_concat(error_buf, " has rotations "); + I_Error(error_buf); + } + + sprtemp[frame].rotate = doom_false; + for (r = 0; r < 8; r++) + { + sprtemp[frame].lump[r] = lump - firstspritelump; + sprtemp[frame].flip[r] = (byte)flipped; + } + return; + } + + // the lump is only used for one rotation + if (sprtemp[frame].rotate == doom_false) + { + //I_Error("Error: R_InitSprites: Sprite %s frame %c has rotations " + // "and a rot=0 lump", spritename, 'A' + frame); + doom_strcpy(error_buf, "Error: R_InitSprites: Sprite "); + doom_concat(error_buf, spritename); + doom_concat(error_buf, " frame "); + doom_concat(error_buf, doom_ctoa('A' + frame)); + doom_concat(error_buf, " has rotations "); + I_Error(error_buf); + } + + sprtemp[frame].rotate = doom_true; + + // make 0 based + rotation--; + if (sprtemp[frame].lump[rotation] != -1) + { + //I_Error("Error: R_InitSprites: Sprite %s : %c : %c " + // "has two lumps mapped to it", + // spritename, 'A' + frame, '1' + rotation); + doom_strcpy(error_buf, "Error: R_InitSprites: Sprite "); + doom_concat(error_buf, spritename); + doom_concat(error_buf, " : "); + doom_concat(error_buf, doom_ctoa('A' + frame)); + doom_concat(error_buf, " : "); + doom_concat(error_buf, doom_ctoa('1' + rotation)); + doom_concat(error_buf, " "); + I_Error(error_buf); + } + + sprtemp[frame].lump[rotation] = lump - firstspritelump; + sprtemp[frame].flip[rotation] = (byte)flipped; +} + + +// +// R_InitSpriteDefs +// Pass a null terminated list of sprite names +// (4 chars exactly) to be used. +// Builds the sprite rotation matrixes to account +// for horizontally flipped sprites. +// Will report an error if the lumps are inconsistant. +// Only called at startup. +// +// Sprite lump names are 4 characters for the actor, +// a letter for the frame, and a number for the rotation. +// A sprite that is flippable will have an additional +// letter/number appended. +// The rotation character can be 0 to signify no rotations. +// +void R_InitSpriteDefs(char** namelist) +{ + char** check; + int i; + int l; + int intname; + int frame; + int rotation; + int start; + int end; + int patched; + + // count the number of sprite names + check = namelist; + while (*check != 0) + check++; + + numsprites = (int)(check - namelist); + + if (!numsprites) + return; + + sprites = (spritedef_t*)Z_Malloc(numsprites * sizeof(*sprites), PU_STATIC, 0); + + start = firstspritelump - 1; + end = lastspritelump + 1; + + // scan all the lump names for each of the names, + // noting the highest frame letter. + // Just compare 4 characters as ints + for (i = 0; i < numsprites; i++) + { + spritename = namelist[i]; + doom_memset(sprtemp, -1, sizeof(sprtemp)); + + maxframe = -1; + intname = *(int*)namelist[i]; + + // scan the lumps, + // filling in the frames for whatever is found + for (l = start + 1; l < end; l++) + { + if (*(int*)lumpinfo[l].name == intname) + { + frame = lumpinfo[l].name[4] - 'A'; + rotation = lumpinfo[l].name[5] - '0'; + + if (modifiedgame) + patched = W_GetNumForName(lumpinfo[l].name); + else + patched = l; + + R_InstallSpriteLump(patched, frame, rotation, doom_false); + + if (lumpinfo[l].name[6]) + { + frame = lumpinfo[l].name[6] - 'A'; + rotation = lumpinfo[l].name[7] - '0'; + R_InstallSpriteLump(l, frame, rotation, doom_true); + } + } + } + + // check the frames that were found for completeness + if (maxframe == -1) + { + sprites[i].numframes = 0; + continue; + } + + maxframe++; + + for (frame = 0; frame < maxframe; frame++) + { + switch ((int)sprtemp[frame].rotate) + { + case -1: + { + // no rotations were found for that frame at all + //I_Error("Error: R_InitSprites: No patches found " + // "for %s frame %c", namelist[i], frame + 'A'); + doom_strcpy(error_buf, "Error: R_InitSprites: No patches found for "); + doom_concat(error_buf, namelist[i]); + doom_concat(error_buf, " frame "); + doom_concat(error_buf, doom_ctoa(frame + 'A')); + I_Error(error_buf); + break; + } + + case 0: + // only the first rotation is needed + break; + + case 1: + // must have all 8 frames + for (rotation = 0; rotation < 8; rotation++) + if (sprtemp[frame].lump[rotation] == -1) + { + //I_Error("Error: R_InitSprites: Sprite %s frame %c " + // "is missing rotations", + // namelist[i], frame + 'A'); + doom_strcpy(error_buf, "Error: R_InitSprites: Sprite "); + doom_concat(error_buf, namelist[i]); + doom_concat(error_buf, " frame "); + doom_concat(error_buf, doom_ctoa(frame + 'A')); + doom_concat(error_buf, " is missing rotations"); + I_Error(error_buf); + } + break; + } + } + + // allocate space for the frames present and copy sprtemp to it + sprites[i].numframes = maxframe; + sprites[i].spriteframes = + (spriteframe_t*)Z_Malloc(maxframe * sizeof(spriteframe_t), PU_STATIC, 0); + doom_memcpy(sprites[i].spriteframes, sprtemp, maxframe * sizeof(spriteframe_t)); + } +} + + +// +// GAME FUNCTIONS +// + +// +// R_InitSprites +// Called at program start. +// +void R_InitSprites(char** namelist) +{ + int i; + + for (i = 0; i < SCREENWIDTH; i++) + { + negonearray[i] = -1; + } + + R_InitSpriteDefs(namelist); +} + + +// +// R_ClearSprites +// Called at frame start. +// +void R_ClearSprites(void) +{ + vissprite_p = vissprites; +} + + +// +// R_NewVisSprite +// +vissprite_t overflowsprite; + +vissprite_t* R_NewVisSprite(void) +{ + if (vissprite_p == &vissprites[MAXVISSPRITES]) + return &overflowsprite; + + vissprite_p++; + return vissprite_p - 1; +} + + +// +// R_DrawMaskedColumn +// Used for sprites and masked mid textures. +// Masked means: partly transparent, i.e. stored +// in posts/runs of opaque pixels. +// +short* mfloorclip; +short* mceilingclip; + +fixed_t spryscale; +fixed_t sprtopscreen; + +void R_DrawMaskedColumn(column_t* column) +{ + int topscreen; + int bottomscreen; + fixed_t basetexturemid; + + basetexturemid = dc_texturemid; + + for (; column->topdelta != 0xff; ) + { + // calculate unclipped screen coordinates + // for post + topscreen = sprtopscreen + spryscale * column->topdelta; + bottomscreen = topscreen + spryscale * column->length; + + dc_yl = (topscreen + FRACUNIT - 1) >> FRACBITS; + dc_yh = (bottomscreen - 1) >> FRACBITS; + + if (dc_yh >= mfloorclip[dc_x]) + dc_yh = mfloorclip[dc_x] - 1; + if (dc_yl <= mceilingclip[dc_x]) + dc_yl = mceilingclip[dc_x] + 1; + + if (dc_yl <= dc_yh) + { + dc_source = (byte*)column + 3; + dc_texturemid = basetexturemid - (column->topdelta << FRACBITS); + // dc_source = (byte *)column + 3 - column->topdelta; + + // Drawn by either R_DrawColumn + // or (SHADOW) R_DrawFuzzColumn. + colfunc(); + } + column = (column_t*)((byte*)column + column->length + 4); + } + + dc_texturemid = basetexturemid; +} + + +// +// R_DrawVisSprite +// mfloorclip and mceilingclip should also be set. +// +void R_DrawVisSprite(vissprite_t* vis, int x1, int x2) +{ + column_t* column; + int texturecolumn; + fixed_t frac; + patch_t* patch; + + patch = (patch_t*)W_CacheLumpNum(vis->patch + firstspritelump, PU_CACHE); + + dc_colormap = vis->colormap; + + if (!dc_colormap) + { + // 0 colormap = shadow draw + colfunc = fuzzcolfunc; + } + else if (vis->mobjflags & MF_TRANSLATION) + { + colfunc = R_DrawTranslatedColumn; + dc_translation = translationtables - 256 + + ((vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT - 8)); + } + + dc_iscale = doom_abs(vis->xiscale) >> detailshift; + dc_texturemid = vis->texturemid; + frac = vis->startfrac; + spryscale = vis->scale; + sprtopscreen = centeryfrac - FixedMul(dc_texturemid, spryscale); + + for (dc_x = vis->x1; dc_x <= vis->x2; dc_x++, frac += vis->xiscale) + { + texturecolumn = frac >> FRACBITS; +#ifdef RANGECHECK + if (texturecolumn < 0 || texturecolumn >= SHORT(patch->width)) + I_Error((char*)"Error: R_DrawSpriteRange: bad texturecolumn"); +#endif + column = (column_t*)((byte*)patch + + LONG(patch->columnofs[texturecolumn])); + R_DrawMaskedColumn(column); + } + + colfunc = basecolfunc; +} + + +// +// R_ProjectSprite +// Generates a vissprite for a thing +// if it might be visible. +// +void R_ProjectSprite(mobj_t* thing) +{ + fixed_t tr_x; + fixed_t tr_y; + + fixed_t gxt; + fixed_t gyt; + + fixed_t tx; + fixed_t tz; + + fixed_t xscale; + + int x1; + int x2; + + spritedef_t* sprdef; + spriteframe_t* sprframe; + int lump; + + unsigned rot; + doom_boolean flip; + + int index; + + vissprite_t* vis; + + angle_t ang; + fixed_t iscale; + + // transform the origin point + tr_x = thing->x - viewx; + tr_y = thing->y - viewy; + + gxt = FixedMul(tr_x, viewcos); + gyt = -FixedMul(tr_y, viewsin); + + tz = gxt - gyt; + + // thing is behind view plane? + if (tz < MINZ) + return; + + xscale = FixedDiv(projection, tz); + + gxt = -FixedMul(tr_x, viewsin); + gyt = FixedMul(tr_y, viewcos); + tx = -(gyt + gxt); + + // too far off the side? + if (doom_abs(tx) > (tz << 2)) + return; + + // decide which patch to use for sprite relative to player +#ifdef RANGECHECK + if ((unsigned)thing->sprite >= (unsigned)numsprites) + { + //I_Error("Error: R_ProjectSprite: invalid sprite number %i ", + // thing->sprite); + + doom_strcpy(error_buf, "Error: R_ProjectSprite: invalid sprite number "); + doom_concat(error_buf, doom_itoa(thing->sprite, 10)); + doom_concat(error_buf, " "); + I_Error(error_buf); + } +#endif + sprdef = &sprites[thing->sprite]; +#ifdef RANGECHECK + if ((thing->frame & FF_FRAMEMASK) >= sprdef->numframes) + { + //I_Error("Error: R_ProjectSprite: invalid sprite frame %i : %i ", + // thing->sprite, thing->frame); + + doom_strcpy(error_buf, "Error: R_ProjectSprite: invalid sprite frame "); + doom_concat(error_buf, doom_itoa(thing->sprite, 10)); + doom_concat(error_buf, " : "); + doom_concat(error_buf, doom_itoa(thing->frame, 10)); + doom_concat(error_buf, " "); + I_Error(error_buf); + } +#endif + sprframe = &sprdef->spriteframes[thing->frame & FF_FRAMEMASK]; + + if (sprframe->rotate) + { + // choose a different rotation based on player view + ang = R_PointToAngle(thing->x, thing->y); + rot = (ang - thing->angle + (unsigned)(ANG45 / 2) * 9) >> 29; + lump = sprframe->lump[rot]; + flip = (doom_boolean)sprframe->flip[rot]; + } + else + { + // use single rotation for all views + lump = sprframe->lump[0]; + flip = (doom_boolean)sprframe->flip[0]; + } + + // calculate edges of the shape + tx -= spriteoffset[lump]; + x1 = (centerxfrac + FixedMul(tx, xscale)) >> FRACBITS; + + // off the right side? + if (x1 > viewwidth) + return; + + tx += spritewidth[lump]; + x2 = ((centerxfrac + FixedMul(tx, xscale)) >> FRACBITS) - 1; + + // off the left side + if (x2 < 0) + return; + + // store information in a vissprite + vis = R_NewVisSprite(); + vis->mobjflags = thing->flags; + vis->scale = xscale << detailshift; + vis->gx = thing->x; + vis->gy = thing->y; + vis->gz = thing->z; + vis->gzt = thing->z + spritetopoffset[lump]; + vis->texturemid = vis->gzt - viewz; + vis->x1 = x1 < 0 ? 0 : x1; + vis->x2 = x2 >= viewwidth ? viewwidth - 1 : x2; + iscale = FixedDiv(FRACUNIT, xscale); + + if (flip) + { + vis->startfrac = spritewidth[lump] - 1; + vis->xiscale = -iscale; + } + else + { + vis->startfrac = 0; + vis->xiscale = iscale; + } + + if (vis->x1 > x1) + vis->startfrac += vis->xiscale * (vis->x1 - x1); + vis->patch = lump; + + // get light level + if (thing->flags & MF_SHADOW) + { + // shadow draw + vis->colormap = 0; + } + else if (fixedcolormap) + { + // fixed map + vis->colormap = fixedcolormap; + } + else if (thing->frame & FF_FULLBRIGHT) + { + // full bright + vis->colormap = colormaps; + } + + else + { + // diminished light + index = xscale >> (LIGHTSCALESHIFT - detailshift); + + if (index >= MAXLIGHTSCALE) + index = MAXLIGHTSCALE - 1; + + vis->colormap = spritelights[index]; + } +} + + +// +// R_AddSprites +// During BSP traversal, this adds sprites by sector. +// +void R_AddSprites(sector_t* sec) +{ + mobj_t* thing; + int lightnum; + + // BSP is traversed by subsector. + // A sector might have been split into several + // subsectors during BSP building. + // Thus we check whether its already added. + if (sec->validcount == validcount) + return; + + // Well, now it will be done. + sec->validcount = validcount; + + lightnum = (sec->lightlevel >> LIGHTSEGSHIFT) + extralight; + + if (lightnum < 0) + spritelights = scalelight[0]; + else if (lightnum >= LIGHTLEVELS) + spritelights = scalelight[LIGHTLEVELS - 1]; + else + spritelights = scalelight[lightnum]; + + // Handle all things in sector. + for (thing = sec->thinglist; thing; thing = thing->snext) + R_ProjectSprite(thing); +} + + +// +// R_DrawPSprite +// +void R_DrawPSprite(pspdef_t* psp) +{ + fixed_t tx; + int x1; + int x2; + spritedef_t* sprdef; + spriteframe_t* sprframe; + int lump; + doom_boolean flip; + vissprite_t* vis; + vissprite_t avis; + + // decide which patch to use +#ifdef RANGECHECK + if ((unsigned)psp->state->sprite >= (unsigned)numsprites) + { + //I_Error("Error: R_ProjectSprite: invalid sprite number %i ", + // psp->state->sprite); + doom_strcpy(error_buf, "Error: R_ProjectSprite: invalid sprite number "); + doom_concat(error_buf, doom_itoa(psp->state->sprite, 10)); + doom_concat(error_buf, " "); + I_Error(error_buf); + } +#endif + sprdef = &sprites[psp->state->sprite]; +#ifdef RANGECHECK + if ((psp->state->frame & FF_FRAMEMASK) >= sprdef->numframes) + { + //I_Error("Error: R_ProjectSprite: invalid sprite frame %i : %i ", + // psp->state->sprite, psp->state->frame); + doom_strcpy(error_buf, "Error: R_ProjectSprite: invalid sprite frame "); + doom_concat(error_buf, doom_itoa(psp->state->sprite, 10)); + doom_concat(error_buf, " : "); + doom_concat(error_buf, doom_itoa(psp->state->frame, 10)); + doom_concat(error_buf, " "); + I_Error(error_buf); + } +#endif + sprframe = &sprdef->spriteframes[psp->state->frame & FF_FRAMEMASK]; + + lump = sprframe->lump[0]; + flip = (doom_boolean)sprframe->flip[0]; + + // calculate edges of the shape + tx = psp->sx - 160 * FRACUNIT; + + tx -= spriteoffset[lump]; + x1 = (centerxfrac + FixedMul(tx, pspritescale)) >> FRACBITS; + + // off the right side + if (x1 > viewwidth) + return; + + tx += spritewidth[lump]; + x2 = ((centerxfrac + FixedMul(tx, pspritescale)) >> FRACBITS) - 1; + + // off the left side + if (x2 < 0) + return; + + // store information in a vissprite + vis = &avis; + vis->mobjflags = 0; + vis->texturemid = (BASEYCENTER << FRACBITS) + FRACUNIT / 2 - (psp->sy - spritetopoffset[lump]); + vis->x1 = x1 < 0 ? 0 : x1; + vis->x2 = x2 >= viewwidth ? viewwidth - 1 : x2; + vis->scale = pspritescale << detailshift; + + if (flip) + { + vis->xiscale = -pspriteiscale; + vis->startfrac = spritewidth[lump] - 1; + } + else + { + vis->xiscale = pspriteiscale; + vis->startfrac = 0; + } + + if (vis->x1 > x1) + vis->startfrac += vis->xiscale * (vis->x1 - x1); + + vis->patch = lump; + + if (viewplayer->powers[pw_invisibility] > 4 * 32 + || viewplayer->powers[pw_invisibility] & 8) + { + // shadow draw + vis->colormap = 0; + } + else if (fixedcolormap) + { + // fixed color + vis->colormap = fixedcolormap; + } + else if (psp->state->frame & FF_FULLBRIGHT) + { + // full bright + vis->colormap = colormaps; + } + else + { + // local light + vis->colormap = spritelights[MAXLIGHTSCALE - 1]; + } + + R_DrawVisSprite(vis, vis->x1, vis->x2); +} + + +// +// R_DrawPlayerSprites +// +void R_DrawPlayerSprites(void) +{ + int i; + int lightnum; + pspdef_t* psp; + + // get light level + lightnum = + (viewplayer->mo->subsector->sector->lightlevel >> LIGHTSEGSHIFT) + + extralight; + + if (lightnum < 0) + spritelights = scalelight[0]; + else if (lightnum >= LIGHTLEVELS) + spritelights = scalelight[LIGHTLEVELS - 1]; + else + spritelights = scalelight[lightnum]; + + // clip to screen bounds + mfloorclip = screenheightarray; + mceilingclip = negonearray; + + // add all active psprites + for (i = 0, psp = viewplayer->psprites; + i < NUMPSPRITES; + i++, psp++) + { + if (psp->state) + R_DrawPSprite(psp); + } +} + + +// +// R_SortVisSprites +// +void R_SortVisSprites(void) +{ + int i; + int count; + vissprite_t* ds; + vissprite_t* best; + vissprite_t unsorted; + fixed_t bestscale; + + count = (int)(vissprite_p - vissprites); + + unsorted.next = unsorted.prev = &unsorted; + + if (!count) + return; + + for (ds = vissprites; ds < vissprite_p; ds++) + { + ds->next = ds + 1; + ds->prev = ds - 1; + } + + vissprites[0].prev = &unsorted; + unsorted.next = &vissprites[0]; + (vissprite_p - 1)->next = &unsorted; + unsorted.prev = vissprite_p - 1; + + // pull the vissprites out by scale + //best = 0; // shut up the compiler warning + vsprsortedhead.next = vsprsortedhead.prev = &vsprsortedhead; + for (i = 0; i < count; i++) + { + bestscale = DOOM_MAXINT; + for (ds = unsorted.next; ds != &unsorted; ds = ds->next) + { + if (ds->scale < bestscale) + { + bestscale = ds->scale; + best = ds; + } + } + best->next->prev = best->prev; + best->prev->next = best->next; + best->next = &vsprsortedhead; + best->prev = vsprsortedhead.prev; + vsprsortedhead.prev->next = best; + vsprsortedhead.prev = best; + } +} + + +// +// R_DrawSprite +// +void R_DrawSprite(vissprite_t* spr) +{ + drawseg_t* ds; + short clipbot[SCREENWIDTH]; + short cliptop[SCREENWIDTH]; + int x; + int r1; + int r2; + fixed_t scale; + fixed_t lowscale; + int silhouette; + + for (x = spr->x1; x <= spr->x2; x++) + clipbot[x] = cliptop[x] = -2; + + // Scan drawsegs from end to start for obscuring segs. + // The first drawseg that has a greater scale + // is the clip seg. + for (ds = ds_p - 1; ds >= drawsegs; ds--) + { + // determine if the drawseg obscures the sprite + if (ds->x1 > spr->x2 + || ds->x2 < spr->x1 + || (!ds->silhouette + && !ds->maskedtexturecol)) + { + // does not cover sprite + continue; + } + + r1 = ds->x1 < spr->x1 ? spr->x1 : ds->x1; + r2 = ds->x2 > spr->x2 ? spr->x2 : ds->x2; + + if (ds->scale1 > ds->scale2) + { + lowscale = ds->scale2; + scale = ds->scale1; + } + else + { + lowscale = ds->scale1; + scale = ds->scale2; + } + + if (scale < spr->scale + || (lowscale < spr->scale + && !R_PointOnSegSide(spr->gx, spr->gy, ds->curline))) + { + // masked mid texture? + if (ds->maskedtexturecol) + R_RenderMaskedSegRange(ds, r1, r2); + // seg is behind sprite + continue; + } + + + // clip this piece of the sprite + silhouette = ds->silhouette; + + if (spr->gz >= ds->bsilheight) + silhouette &= ~SIL_BOTTOM; + + if (spr->gzt <= ds->tsilheight) + silhouette &= ~SIL_TOP; + + if (silhouette == 1) + { + // bottom sil + for (x = r1; x <= r2; x++) + if (clipbot[x] == -2) + clipbot[x] = ds->sprbottomclip[x]; + } + else if (silhouette == 2) + { + // top sil + for (x = r1; x <= r2; x++) + if (cliptop[x] == -2) + cliptop[x] = ds->sprtopclip[x]; + } + else if (silhouette == 3) + { + // both + for (x = r1; x <= r2; x++) + { + if (clipbot[x] == -2) + clipbot[x] = ds->sprbottomclip[x]; + if (cliptop[x] == -2) + cliptop[x] = ds->sprtopclip[x]; + } + } + } + + // all clipping has been performed, so draw the sprite + + // check for unclipped columns + for (x = spr->x1; x <= spr->x2; x++) + { + if (clipbot[x] == -2) + clipbot[x] = viewheight; + + if (cliptop[x] == -2) + cliptop[x] = -1; + } + + mfloorclip = clipbot; + mceilingclip = cliptop; + R_DrawVisSprite(spr, spr->x1, spr->x2); +} + + +// +// R_DrawMasked +// +void R_DrawMasked(void) +{ + vissprite_t* spr; + drawseg_t* ds; + + R_SortVisSprites(); + + if (vissprite_p > vissprites) + { + // draw all vissprites back to front + for (spr = vsprsortedhead.next; + spr != &vsprsortedhead; + spr = spr->next) + { + + R_DrawSprite(spr); + } + } + + // render any remaining masked mid textures + for (ds = ds_p - 1; ds >= drawsegs; ds--) + if (ds->maskedtexturecol) + R_RenderMaskedSegRange(ds, ds->x1, ds->x2); + + // draw the psprites on top of everything + // but does not draw on side views + if (!viewangleoffset) + R_DrawPlayerSprites(); +} +#define S_MAX_VOLUME 127 + +// when to clip out sounds +// Does not fit the large outdoor areas. +#define S_CLIPPING_DIST (1200*0x10000) + +// Distance tp origin when sounds should be maxed out. +// This should relate to movement clipping resolution +// (see BLOCKMAP handling). +// Originally: (200*0x10000). +#define S_CLOSE_DIST (160*0x10000) + +#define S_ATTENUATOR ((S_CLIPPING_DIST-S_CLOSE_DIST)>>FRACBITS) + +// Adjustable by menu. +#define NORM_VOLUME snd_MaxVolume + +#define NORM_PITCH 128 +#define NORM_PRIORITY 64 +#define NORM_SEP 128 + +#define S_PITCH_PERTURB 1 +#define S_STEREO_SWING (96*0x10000) + +// percent attenuation from front to back +#define S_IFRACVOL 30 + +#define NA 0 +#define S_NUMCHANNELS 2 + + +// Current music/sfx card - index useless +// w/o a reference LUT in a sound module. +extern int snd_MusicDevice; +extern int snd_SfxDevice; +// Config file? Same disclaimer as above. +extern int snd_DesiredMusicDevice; +extern int snd_DesiredSfxDevice; + + +typedef struct +{ + // sound information (if null, channel avail.) + sfxinfo_t* sfxinfo; + + // origin of sound + void* origin; + + // handle of the sound being played + int handle; +} channel_t; + + +// the set of channels available +static channel_t* channels_s_sound; + +// whether songs are mus_paused +static doom_boolean mus_paused; + +// music currently being played +static musicinfo_t* mus_playing_s_sound = 0; + +static int nextcleanup; + + +// These are not used, but should be (menu). +// Maximum volume of a sound effect. +// Internal default is max out of 0-15. +int snd_SfxVolume = 15; + +// Maximum volume of music. Useless so far. +int snd_MusicVolume = 15; + +// following is set +// by the defaults code in M_misc: +// number of channels available +int numChannels; + + +// +// Prototypes +// +int S_getChannel(void* origin, sfxinfo_t* sfxinfo); +int S_AdjustSoundParams(mobj_t* listener, mobj_t* source, int* vol, int* sep, int* pitch); +void S_StopChannel(int cnum); + + +// +// Initializes sound stuff, including volume +// Sets channels, SFX and music volume, +// allocates channel buffer, sets S_sfx lookup. +// +void S_Init(int sfxVolume, int musicVolume) +{ + int i; + + //doom_print("S_Init: default sfx volume %d\n", sfxVolume); + doom_print("S_Init: default sfx volume "); + doom_print(doom_itoa(sfxVolume, 10)); + doom_print("\n"); + + // Whatever these did with DMX, these are rather dummies now. + I_SetChannels(); + + S_SetSfxVolume(sfxVolume); + // No music with Linux - another dummy. + S_SetMusicVolume(musicVolume); + + // Allocating the internal channels for mixing + // (the maximum numer of sounds rendered + // simultaneously) within zone memory. + channels_s_sound = + (channel_t*)Z_Malloc(numChannels * sizeof(channel_t), PU_STATIC, 0); + + // Free all channels for use + for (i = 0; i < numChannels; i++) + channels_s_sound[i].sfxinfo = 0; + + // no sounds are playing, and they are not mus_paused + mus_paused = 0; + + // Note that sounds have not been cached (yet). + for (i = 1; i < NUMSFX; i++) + S_sfx[i].lumpnum = S_sfx[i].usefulness = -1; +} + + +// +// Per level startup code. +// Kills playing sounds at start of level, +// determines music if any, changes music. +// +void S_Start(void) +{ + int cnum; + int mnum; + + // kill all playing sounds at start of level + // (trust me - a good idea) + for (cnum = 0; cnum < numChannels; cnum++) + if (channels_s_sound[cnum].sfxinfo) + S_StopChannel(cnum); + + // start new music for the level + mus_paused = 0; + + if (gamemode == commercial) + mnum = mus_runnin + gamemap - 1; + else + { + int spmus[] = + { + // Song - Who? - Where? + + mus_e3m4, // American e4m1 + mus_e3m2, // Romero e4m2 + mus_e3m3, // Shawn e4m3 + mus_e1m5, // American e4m4 + mus_e2m7, // Tim e4m5 + mus_e2m4, // Romero e4m6 + mus_e2m6, // J.Anderson e4m7 CHIRON.WAD + mus_e2m5, // Shawn e4m8 + mus_e1m9 // Tim e4m9 + }; + + if (gameepisode < 4) + mnum = mus_e1m1 + (gameepisode - 1) * 9 + gamemap - 1; + else + mnum = spmus[gamemap - 1]; + } + + // HACK FOR COMMERCIAL + // if (commercial && mnum > mus_e3m9) + // mnum -= mus_e3m9; + + S_ChangeMusic(mnum, doom_true); + + nextcleanup = 15; +} + + +void S_StartSoundAtVolume(void* origin_p, int sfx_id, int volume) +{ + int rc; + int sep; + int pitch; + int priority; + sfxinfo_t* sfx; + int cnum; + + mobj_t* origin = (mobj_t*)origin_p; + + // check for bogus sound # + if (sfx_id < 1 || sfx_id > NUMSFX) + { + //I_Error("Error: Bad sfx #: %d", sfx_id); + doom_strcpy(error_buf, "Error: Bad sfx #: "); + doom_concat(error_buf, doom_itoa(sfx_id, 10)); + I_Error(error_buf); + } + + sfx = &S_sfx[sfx_id]; + + // Initialize sound parameters + if (sfx->link) + { + pitch = sfx->pitch; + priority = sfx->priority; + volume += sfx->volume; + + if (volume < 1) + return; + + if (volume > snd_SfxVolume) + volume = snd_SfxVolume; + } + else + { + pitch = NORM_PITCH; + priority = NORM_PRIORITY; + } + + // Check to see if it is audible, + // and if not, modify the params + if (origin && origin != players[consoleplayer].mo) + { + rc = S_AdjustSoundParams(players[consoleplayer].mo, + origin, + &volume, + &sep, + &pitch); + + if (origin->x == players[consoleplayer].mo->x + && origin->y == players[consoleplayer].mo->y) + { + sep = NORM_SEP; + } + + if (!rc) + return; + } + else + { + sep = NORM_SEP; + } + + // hacks to vary the sfx pitches + if (sfx_id >= sfx_sawup + && sfx_id <= sfx_sawhit) + { + pitch += 8 - (M_Random() & 15); + + if (pitch < 0) + pitch = 0; + else if (pitch > 255) + pitch = 255; + } + else if (sfx_id != sfx_itemup + && sfx_id != sfx_tink) + { + pitch += 16 - (M_Random() & 31); + + if (pitch < 0) + pitch = 0; + else if (pitch > 255) + pitch = 255; + } + + // kill old sound + S_StopSound(origin); + + // try to find a channel + cnum = S_getChannel(origin, sfx); + + if (cnum < 0) + return; + + // + // This is supposed to handle the loading/caching. + // For some odd reason, the caching is done nearly + // each time the sound is needed? + // + + // get lumpnum if necessary + if (sfx->lumpnum < 0) + sfx->lumpnum = I_GetSfxLumpNum(sfx); + +#ifndef SNDSRV + // cache data if necessary + if (!sfx->data) + { + doom_print( + "S_StartSoundAtVolume: 16bit and not pre-cached - wtf?\n"); + + // DOS remains, 8bit handling + //sfx->data = (void *) W_CacheLumpNum(sfx->lumpnum, PU_MUSIC); + // fprintf( stderr, + // "S_StartSoundAtVolume: loading %d (lump %d) : 0x%x\n", + // sfx_id, sfx->lumpnum, (int)sfx->data ); + + } +#endif + + // increase the usefulness + if (sfx->usefulness++ < 0) + sfx->usefulness = 1; + + // Assigns the handle to one of the channels in the + // mix/output buffer. + channels_s_sound[cnum].handle = I_StartSound(sfx_id, + /*sfx->data,*/ + volume, + sep, + pitch, + priority); +} + + +void S_StartSound(void* origin, int sfx_id) +{ + S_StartSoundAtVolume(origin, sfx_id, snd_SfxVolume); +} + + +void S_StopSound(void* origin) +{ + int cnum; + + for (cnum = 0; cnum < numChannels; cnum++) + { + if (channels_s_sound[cnum].sfxinfo && channels_s_sound[cnum].origin == origin) + { + S_StopChannel(cnum); + break; + } + } +} + + +// +// Stop and resume music, during game PAUSE. +// +void S_PauseSound(void) +{ + if (mus_playing_s_sound && !mus_paused) + { + I_PauseSong(mus_playing_s_sound->handle); + mus_paused = doom_true; + } +} + + +void S_ResumeSound(void) +{ + if (mus_playing_s_sound && mus_paused) + { + I_ResumeSong(mus_playing_s_sound->handle); + mus_paused = doom_false; + } +} + + +// +// Updates music & sounds +// +void S_UpdateSounds(void* listener_p) +{ + int audible; + int cnum; + int volume; + int sep; + int pitch; + sfxinfo_t* sfx; + channel_t* c; + + mobj_t* listener = (mobj_t*)listener_p; + + for (cnum = 0; cnum < numChannels; cnum++) + { + c = &channels_s_sound[cnum]; + sfx = c->sfxinfo; + + if (c->sfxinfo) + { + if (I_SoundIsPlaying(c->handle)) + { + // initialize parameters + volume = snd_SfxVolume; + pitch = NORM_PITCH; + sep = NORM_SEP; + + if (sfx->link) + { + pitch = sfx->pitch; + volume += sfx->volume; + if (volume < 1) + { + S_StopChannel(cnum); + continue; + } + else if (volume > snd_SfxVolume) + { + volume = snd_SfxVolume; + } + } + + // check non-local sounds for distance clipping + // or modify their params + if (c->origin && listener_p != c->origin) + { + audible = S_AdjustSoundParams(listener, + (mobj_t*)c->origin, + &volume, + &sep, + &pitch); + + if (!audible) + { + S_StopChannel(cnum); + } + else + I_UpdateSoundParams(c->handle, volume, sep, pitch); + } + } + else + { + // if channel is allocated but sound has stopped, + // free it + S_StopChannel(cnum); + } + } + } +} + + +void S_SetMusicVolume(int volume) +{ + if (volume < 0 || volume > 127) + { + //I_Error("Error: Attempt to set music volume at %d", + // volume); + doom_strcpy(error_buf, "Error: Attempt to set music volume at "); + doom_concat(error_buf, doom_itoa(volume, 10)); + I_Error(error_buf); + } + + I_SetMusicVolume(127); + I_SetMusicVolume(volume); + snd_MusicVolume = volume; +} + + +void S_SetSfxVolume(int volume) +{ + if (volume < 0 || volume > 127) + { + //I_Error("Error: Attempt to set sfx volume at %d", volume); + doom_strcpy(error_buf, "Error: Attempt to set sfx volume at "); + doom_concat(error_buf, doom_itoa(volume, 10)); + I_Error(error_buf); + } + + snd_SfxVolume = volume; +} + + +// +// Starts some music with the music id found in sounds.h. +// +void S_StartMusic(int m_id) +{ + S_ChangeMusic(m_id, doom_false); +} + + +void S_ChangeMusic(int musicnum, int looping) +{ + musicinfo_t* music; + char namebuf[9]; + + if ((musicnum <= mus_None) + || (musicnum >= NUMMUSIC)) + { + //I_Error("Error: Bad music number %d", musicnum); + doom_strcpy(error_buf, "Error: Bad music number "); + doom_concat(error_buf, doom_itoa(musicnum, 10)); + I_Error(error_buf); + } + else + music = &S_music[musicnum]; + + if (mus_playing_s_sound == music) + return; + + // shutdown old music + S_StopMusic(); + + // get lumpnum if neccessary + if (!music->lumpnum) + { + //doom_sprintf(namebuf, "d_%s", music->name); + doom_strcpy(namebuf, "d_"); + doom_concat(namebuf, music->name); + music->lumpnum = W_GetNumForName(namebuf); + } + + // load & register it + music->data = (void*)W_CacheLumpNum(music->lumpnum, PU_MUSIC); + music->handle = I_RegisterSong(music->data); + + // play it + I_PlaySong(music->handle, looping); + + mus_playing_s_sound = music; +} + + +void S_StopMusic(void) +{ + if (mus_playing_s_sound) + { + if (mus_paused) + I_ResumeSong(mus_playing_s_sound->handle); + + I_StopSong(mus_playing_s_sound->handle); + I_UnRegisterSong(mus_playing_s_sound->handle); + Z_ChangeTag(mus_playing_s_sound->data, PU_CACHE); + + mus_playing_s_sound->data = 0; + mus_playing_s_sound = 0; + } +} + + +void S_StopChannel(int cnum) +{ + int i; + channel_t* c = &channels_s_sound[cnum]; + + if (c->sfxinfo) + { + // stop the sound playing + if (I_SoundIsPlaying(c->handle)) + { +#ifdef SAWDEBUG + if (c->sfxinfo == &S_sfx[sfx_sawful]) + doom_print("stopped\n"); +#endif + I_StopSound(c->handle); + } + + // check to see + // if other channels are playing the sound + for (i = 0; i < numChannels; i++) + { + if (cnum != i + && c->sfxinfo == channels_s_sound[i].sfxinfo) + { + break; + } + } + + // degrade usefulness of sound data + c->sfxinfo->usefulness--; + + c->sfxinfo = 0; + } +} + + +// +// Changes volume, stereo-separation, and pitch variables +// from the norm of a sound effect to be played. +// If the sound is not audible, returns a 0. +// Otherwise, modifies parameters and returns 1. +// +int S_AdjustSoundParams(mobj_t* listener, mobj_t* source, int* vol, int* sep, int* pitch) +{ + fixed_t approx_dist; + fixed_t adx; + fixed_t ady; + angle_t angle; + + // calculate the distance to sound origin + // and clip it if necessary + adx = doom_abs(listener->x - source->x); + ady = doom_abs(listener->y - source->y); + + // From _GG1_ p.428. Appox. eucledian distance fast. + approx_dist = adx + ady - ((adx < ady ? adx : ady) >> 1); + + if (gamemap != 8 + && approx_dist > S_CLIPPING_DIST) + { + return 0; + } + + // angle of source to listener + angle = R_PointToAngle2(listener->x, + listener->y, + source->x, + source->y); + + if (angle > listener->angle) + angle = angle - listener->angle; + else + angle = angle + (0xffffffff - listener->angle); + + angle >>= ANGLETOFINESHIFT; + + // stereo separation + *sep = 128 - (FixedMul(S_STEREO_SWING, finesine[angle]) >> FRACBITS); + + // volume calculation + if (approx_dist < S_CLOSE_DIST) + { + *vol = snd_SfxVolume; + } + else if (gamemap == 8) + { + if (approx_dist > S_CLIPPING_DIST) + approx_dist = S_CLIPPING_DIST; + + *vol = 15 + ((snd_SfxVolume - 15) + * ((S_CLIPPING_DIST - approx_dist) >> FRACBITS)) + / S_ATTENUATOR; + } + else + { + // distance effect + *vol = (snd_SfxVolume + * ((S_CLIPPING_DIST - approx_dist) >> FRACBITS)) + / S_ATTENUATOR; + } + + return (*vol > 0); +} + + +// +// S_getChannel : +// If none available, return -1. Otherwise channel #. +// +int S_getChannel(void* origin, sfxinfo_t* sfxinfo) +{ + // channel number to use + int cnum; + + channel_t* c; + + // Find an open channel + for (cnum = 0; cnum < numChannels; cnum++) + { + if (!channels_s_sound[cnum].sfxinfo) + break; + else if (origin && channels_s_sound[cnum].origin == origin) + { + S_StopChannel(cnum); + break; + } + } + + // None available + if (cnum == numChannels) + { + // Look for lower priority + for (cnum = 0; cnum < numChannels; cnum++) + if (channels_s_sound[cnum].sfxinfo->priority >= sfxinfo->priority) break; + + if (cnum == numChannels) + { + // FUCK! No lower priority. Sorry, Charlie. + return -1; + } + else + { + // Otherwise, kick out lower priority. + S_StopChannel(cnum); + } + } + + c = &channels_s_sound[cnum]; + + // channel is decided to be cnum. + c->sfxinfo = sfxinfo; + c->origin = origin; + + return cnum; +} +musicinfo_t S_music[] = +{ + { 0 }, + { (char*)"e1m1", 0 }, + { (char*)"e1m2", 0 }, + { (char*)"e1m3", 0 }, + { (char*)"e1m4", 0 }, + { (char*)"e1m5", 0 }, + { (char*)"e1m6", 0 }, + { (char*)"e1m7", 0 }, + { (char*)"e1m8", 0 }, + { (char*)"e1m9", 0 }, + { (char*)"e2m1", 0 }, + { (char*)"e2m2", 0 }, + { (char*)"e2m3", 0 }, + { (char*)"e2m4", 0 }, + { (char*)"e2m5", 0 }, + { (char*)"e2m6", 0 }, + { (char*)"e2m7", 0 }, + { (char*)"e2m8", 0 }, + { (char*)"e2m9", 0 }, + { (char*)"e3m1", 0 }, + { (char*)"e3m2", 0 }, + { (char*)"e3m3", 0 }, + { (char*)"e3m4", 0 }, + { (char*)"e3m5", 0 }, + { (char*)"e3m6", 0 }, + { (char*)"e3m7", 0 }, + { (char*)"e3m8", 0 }, + { (char*)"e3m9", 0 }, + { (char*)"inter", 0 }, + { (char*)"intro", 0 }, + { (char*)"bunny", 0 }, + { (char*)"victor", 0 }, + { (char*)"introa", 0 }, + { (char*)"runnin", 0 }, + { (char*)"stalks", 0 }, + { (char*)"countd", 0 }, + { (char*)"betwee", 0 }, + { (char*)"doom", 0 }, + { (char*)"the_da", 0 }, + { (char*)"shawn", 0 }, + { (char*)"ddtblu", 0 }, + { (char*)"in_cit", 0 }, + { (char*)"dead", 0 }, + { (char*)"stlks2", 0 }, + { (char*)"theda2", 0 }, + { (char*)"doom2", 0 }, + { (char*)"ddtbl2", 0 }, + { (char*)"runni2", 0 }, + { (char*)"dead2", 0 }, + { (char*)"stlks3", 0 }, + { (char*)"romero", 0 }, + { (char*)"shawn2", 0 }, + { (char*)"messag", 0 }, + { (char*)"count2", 0 }, + { (char*)"ddtbl3", 0 }, + { (char*)"ampie", 0 }, + { (char*)"theda3", 0 }, + { (char*)"adrian", 0 }, + { (char*)"messg2", 0 }, + { (char*)"romer2", 0 }, + { (char*)"tense", 0 }, + { (char*)"shawn3", 0 }, + { (char*)"openin", 0 }, + { (char*)"evil", 0 }, + { (char*)"ultima", 0 }, + { (char*)"read_m", 0 }, + { (char*)"dm2ttl", 0 }, + { (char*)"dm2int", 0 } +}; + + +// +// Information about all the sfx +// +sfxinfo_t S_sfx[] = +{ + // S_sfx[0] needs to be a dummy for odd reasons. + { (char*)"none", doom_false, 0, 0, -1, -1, 0 }, + { (char*)"pistol", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"shotgn", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"sgcock", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"dshtgn", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"dbopn", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"dbcls", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"dbload", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"plasma", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"bfg", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"sawup", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"sawidl", doom_false, 118, 0, -1, -1, 0 }, + { (char*)"sawful", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"sawhit", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"rlaunc", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"rxplod", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"firsht", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"firxpl", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"pstart", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"pstop", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"doropn", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"dorcls", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"stnmov", doom_false, 119, 0, -1, -1, 0 }, + { (char*)"swtchn", doom_false, 78, 0, -1, -1, 0 }, + { (char*)"swtchx", doom_false, 78, 0, -1, -1, 0 }, + { (char*)"plpain", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"dmpain", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"popain", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"vipain", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"mnpain", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"pepain", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"slop", doom_false, 78, 0, -1, -1, 0 }, + { (char*)"itemup", doom_true, 78, 0, -1, -1, 0 }, + { (char*)"wpnup", doom_true, 78, 0, -1, -1, 0 }, + { (char*)"oof", doom_false, 96, 0, -1, -1, 0 }, + { (char*)"telept", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"posit1", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"posit2", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"posit3", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"bgsit1", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"bgsit2", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"sgtsit", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"cacsit", doom_true, 98, 0, -1, -1, 0 }, + { (char*)"brssit", doom_true, 94, 0, -1, -1, 0 }, + { (char*)"cybsit", doom_true, 92, 0, -1, -1, 0 }, + { (char*)"spisit", doom_true, 90, 0, -1, -1, 0 }, + { (char*)"bspsit", doom_true, 90, 0, -1, -1, 0 }, + { (char*)"kntsit", doom_true, 90, 0, -1, -1, 0 }, + { (char*)"vilsit", doom_true, 90, 0, -1, -1, 0 }, + { (char*)"mansit", doom_true, 90, 0, -1, -1, 0 }, + { (char*)"pesit", doom_true, 90, 0, -1, -1, 0 }, + { (char*)"sklatk", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"sgtatk", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"skepch", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"vilatk", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"claw", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"skeswg", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"pldeth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"pdiehi", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"podth1", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"podth2", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"podth3", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"bgdth1", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"bgdth2", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"sgtdth", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"cacdth", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"skldth", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"brsdth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"cybdth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"spidth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"bspdth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"vildth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"kntdth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"pedth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"skedth", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"posact", doom_true, 120, 0, -1, -1, 0 }, + { (char*)"bgact", doom_true, 120, 0, -1, -1, 0 }, + { (char*)"dmact", doom_true, 120, 0, -1, -1, 0 }, + { (char*)"bspact", doom_true, 100, 0, -1, -1, 0 }, + { (char*)"bspwlk", doom_true, 100, 0, -1, -1, 0 }, + { (char*)"vilact", doom_true, 100, 0, -1, -1, 0 }, + { (char*)"noway", doom_false, 78, 0, -1, -1, 0 }, + { (char*)"barexp", doom_false, 60, 0, -1, -1, 0 }, + { (char*)"punch", doom_false, 64, 0, -1, -1, 0 }, + { (char*)"hoof", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"metal", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"chgun", doom_false, 64, &S_sfx[sfx_pistol], 150, 0, 0 }, + { (char*)"tink", doom_false, 60, 0, -1, -1, 0 }, + { (char*)"bdopn", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"bdcls", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"itmbk", doom_false, 100, 0, -1, -1, 0 }, + { (char*)"flame", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"flamst", doom_false, 32, 0, -1, -1, 0 }, + { (char*)"getpow", doom_false, 60, 0, -1, -1, 0 }, + { (char*)"bospit", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"boscub", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"bossit", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"bospn", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"bosdth", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"manatk", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"mandth", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"sssit", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"ssdth", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"keenpn", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"keendt", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"skeact", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"skesit", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"skeatk", doom_false, 70, 0, -1, -1, 0 }, + { (char*)"radio", doom_false, 60, 0, -1, -1, 0 } +}; +extern doom_boolean automapactive; + + +// +// Hack display negative frags. +// Loads and store the stminus lump. +// +patch_t* sttminus; + + +void STlib_init(void) +{ + sttminus = (patch_t*)W_CacheLumpName((char*)"STTMINUS", PU_STATIC); +} + +// ? +void STlib_initNum(st_number_t* n, int x, int y, patch_t** pl, int* num, doom_boolean* on, int width) +{ + n->x = x; + n->y = y; + n->oldnum = 0; + n->width = width; + n->num = num; + n->on = on; + n->p = pl; +} + +// +// A fairly efficient way to draw a number +// based on differences from the old number. +// Note: worth the trouble? +// +void STlib_drawNum(st_number_t* n, doom_boolean refresh) +{ + int numdigits = n->width; + int num = *n->num; + + int w = SHORT(n->p[0]->width); + int h = SHORT(n->p[0]->height); + int x = n->x; + + int neg; + + n->oldnum = *n->num; + + neg = num < 0; + + if (neg) + { + if (numdigits == 2 && num < -9) + num = -9; + else if (numdigits == 3 && num < -99) + num = -99; + + num = -num; + } + + // clear the area + x = n->x - numdigits * w; + + if (n->y - ST_Y < 0) + I_Error((char*)"Error: drawNum: n->y - ST_Y < 0"); + + V_CopyRect(x, n->y - ST_Y, STLIB_BG, w * numdigits, h, x, n->y, STLIB_FG); + + // if non-number, do not draw it + if (num == 1994) + return; + + x = n->x; + + // in the special case of 0, you draw 0 + if (!num) + V_DrawPatch(x - w, n->y, STLIB_FG, n->p[0]); + + // draw the new number + while (num && numdigits--) + { + x -= w; + V_DrawPatch(x, n->y, STLIB_FG, n->p[num % 10]); + num /= 10; + } + + // draw a minus sign if necessary + if (neg) + V_DrawPatch(x - 8, n->y, STLIB_FG, sttminus); +} + +// +void STlib_updateNum(st_number_t* n, doom_boolean refresh) +{ + if (*n->on) STlib_drawNum(n, refresh); +} + +// +void STlib_initPercent(st_percent_t* p, int x, int y, patch_t** pl, int* num, doom_boolean* on, patch_t* percent) +{ + STlib_initNum(&p->n, x, y, pl, num, on, 3); + p->p = percent; +} + +void STlib_updatePercent(st_percent_t* per, int refresh) +{ + if (refresh && *per->n.on) + V_DrawPatch(per->n.x, per->n.y, STLIB_FG, per->p); + + STlib_updateNum(&per->n, refresh); +} + +void STlib_initMultIcon(st_multicon_t* i, int x, int y, patch_t** il, int* inum, doom_boolean* on) +{ + i->x = x; + i->y = y; + i->oldinum = -1; + i->inum = inum; + i->on = on; + i->p = il; +} + +void STlib_updateMultIcon(st_multicon_t* mi, doom_boolean refresh) +{ + int w; + int h; + int x; + int y; + + if (*mi->on + && (mi->oldinum != *mi->inum || refresh) + && (*mi->inum != -1)) + { + if (mi->oldinum != -1) + { + x = mi->x - SHORT(mi->p[mi->oldinum]->leftoffset); + y = mi->y - SHORT(mi->p[mi->oldinum]->topoffset); + w = SHORT(mi->p[mi->oldinum]->width); + h = SHORT(mi->p[mi->oldinum]->height); + + if (y - ST_Y < 0) + I_Error((char*)"Error: updateMultIcon: y - ST_Y < 0"); + + V_CopyRect(x, y - ST_Y, STLIB_BG, w, h, x, y, STLIB_FG); + } + V_DrawPatch(mi->x, mi->y, STLIB_FG, mi->p[*mi->inum]); + mi->oldinum = *mi->inum; + } +} + +void STlib_initBinIcon(st_binicon_t* b, int x, int y, patch_t* i, doom_boolean* val, doom_boolean* on) +{ + b->x = x; + b->y = y; + b->oldval = 0; + b->val = val; + b->on = on; + b->p = i; +} + +void STlib_updateBinIcon(st_binicon_t* bi, doom_boolean refresh) +{ + int x; + int y; + int w; + int h; + + if (*bi->on && ((doom_boolean)bi->oldval != *bi->val || refresh)) + { + x = bi->x - SHORT(bi->p->leftoffset); + y = bi->y - SHORT(bi->p->topoffset); + w = SHORT(bi->p->width); + h = SHORT(bi->p->height); + + if (y - ST_Y < 0) + I_Error((char*)"Error: updateBinIcon: y - ST_Y < 0"); + + if (*bi->val) + V_DrawPatch(bi->x, bi->y, STLIB_FG, bi->p); + else + V_CopyRect(x, y - ST_Y, STLIB_BG, w, h, x, y, STLIB_FG); + + bi->oldval = *bi->val; + } +} +#define STARTREDPALS 1 +#define STARTBONUSPALS 9 +#define NUMREDPALS 8 +#define NUMBONUSPALS 4 +// Radiation suit, green shift. +#define RADIATIONPAL 13 + +// N/256*100% probability +// that the normal face state will change +#define ST_FACEPROBABILITY 96 + +// For Responder +#define ST_TOGGLECHAT KEY_ENTER + +// Location of status bar +#define ST_X 0 +#define ST_X2 104 + +#define ST_FX 143 +#define ST_FY 169 + +// Should be set to patch width +// for tall numbers later on +#define ST_TALLNUMWIDTH (tallnum[0]->width) + +// Number of status faces. +#define ST_NUMPAINFACES 5 +#define ST_NUMSTRAIGHTFACES 3 +#define ST_NUMTURNFACES 2 +#define ST_NUMSPECIALFACES 3 + +#define ST_FACESTRIDE (ST_NUMSTRAIGHTFACES + ST_NUMTURNFACES + ST_NUMSPECIALFACES) + +#define ST_NUMEXTRAFACES 2 + +#define ST_NUMFACES (ST_FACESTRIDE * ST_NUMPAINFACES + ST_NUMEXTRAFACES) + +#define ST_TURNOFFSET (ST_NUMSTRAIGHTFACES) +#define ST_OUCHOFFSET (ST_TURNOFFSET + ST_NUMTURNFACES) +#define ST_EVILGRINOFFSET (ST_OUCHOFFSET + 1) +#define ST_RAMPAGEOFFSET (ST_EVILGRINOFFSET + 1) +#define ST_GODFACE (ST_NUMPAINFACES*ST_FACESTRIDE) +#define ST_DEADFACE (ST_GODFACE+1) + +#define ST_FACESX 143 +#define ST_FACESY 168 + +#define ST_EVILGRINCOUNT (2*TICRATE) +#define ST_STRAIGHTFACECOUNT (TICRATE/2) +#define ST_TURNCOUNT (1*TICRATE) +#define ST_OUCHCOUNT (1*TICRATE) +#define ST_RAMPAGEDELAY (2*TICRATE) + +#define ST_MUCHPAIN 20 + +// Location and size of statistics, +// justified according to widget type. +// Problem is, within which space? STbar? Screen? +// Note: this could be read in by a lump. +// Problem is, is the stuff rendered +// into a buffer, +// or into the frame buffer? + +// AMMO number pos. +#define ST_AMMOWIDTH 3 +#define ST_AMMOX 44 +#define ST_AMMOY 171 + +// HEALTH number pos. +#define ST_HEALTHWIDTH 3 +#define ST_HEALTHX 90 +#define ST_HEALTHY 171 + +// Weapon pos. +#define ST_ARMSX 111 +#define ST_ARMSY 172 +#define ST_ARMSBGX 104 +#define ST_ARMSBGY 168 +#define ST_ARMSXSPACE 12 +#define ST_ARMSYSPACE 10 + +// Frags pos. +#define ST_FRAGSX 138 +#define ST_FRAGSY 171 +#define ST_FRAGSWIDTH 2 + +// ARMOR number pos. +#define ST_ARMORWIDTH 3 +#define ST_ARMORX 221 +#define ST_ARMORY 171 + +// Key icon positions. +#define ST_KEY0WIDTH 8 +#define ST_KEY0HEIGHT 5 +#define ST_KEY0X 239 +#define ST_KEY0Y 171 +#define ST_KEY1WIDTH ST_KEY0WIDTH +#define ST_KEY1X 239 +#define ST_KEY1Y 181 +#define ST_KEY2WIDTH ST_KEY0WIDTH +#define ST_KEY2X 239 +#define ST_KEY2Y 191 + +// Ammunition counter. +#define ST_AMMO0WIDTH 3 +#define ST_AMMO0HEIGHT 6 +#define ST_AMMO0X 288 +#define ST_AMMO0Y 173 +#define ST_AMMO1WIDTH ST_AMMO0WIDTH +#define ST_AMMO1X 288 +#define ST_AMMO1Y 179 +#define ST_AMMO2WIDTH ST_AMMO0WIDTH +#define ST_AMMO2X 288 +#define ST_AMMO2Y 191 +#define ST_AMMO3WIDTH ST_AMMO0WIDTH +#define ST_AMMO3X 288 +#define ST_AMMO3Y 185 + +// Indicate maximum ammunition. +// Only needed because backpack exists. +#define ST_MAXAMMO0WIDTH 3 +#define ST_MAXAMMO0HEIGHT 5 +#define ST_MAXAMMO0X 314 +#define ST_MAXAMMO0Y 173 +#define ST_MAXAMMO1WIDTH ST_MAXAMMO0WIDTH +#define ST_MAXAMMO1X 314 +#define ST_MAXAMMO1Y 179 +#define ST_MAXAMMO2WIDTH ST_MAXAMMO0WIDTH +#define ST_MAXAMMO2X 314 +#define ST_MAXAMMO2Y 191 +#define ST_MAXAMMO3WIDTH ST_MAXAMMO0WIDTH +#define ST_MAXAMMO3X 314 +#define ST_MAXAMMO3Y 185 + +// pistol +#define ST_WEAPON0X 110 +#define ST_WEAPON0Y 172 + +// shotgun +#define ST_WEAPON1X 122 +#define ST_WEAPON1Y 172 + +// chain gun +#define ST_WEAPON2X 134 +#define ST_WEAPON2Y 172 + +// missile launcher +#define ST_WEAPON3X 110 +#define ST_WEAPON3Y 181 + +// plasma gun +#define ST_WEAPON4X 122 +#define ST_WEAPON4Y 181 + + // bfg +#define ST_WEAPON5X 134 +#define ST_WEAPON5Y 181 + +// WPNS title +#define ST_WPNSX 109 +#define ST_WPNSY 191 + + // DETH title +#define ST_DETHX 109 +#define ST_DETHY 191 + +//Incoming messages window location +#define ST_MSGTEXTX 0 +#define ST_MSGTEXTY 0 +// Dimensions given in characters. +#define ST_MSGWIDTH 52 +// Or shall I say, in lines? +#define ST_MSGHEIGHT 1 + +#define ST_OUTTEXTX 0 +#define ST_OUTTEXTY 6 + +// Width, in characters again. +#define ST_OUTWIDTH 52 + // Height, in lines. +#define ST_OUTHEIGHT 1 + +#define ST_MAPWIDTH (doom_strlen(mapnames[(gameepisode - 1) * 9 + (gamemap - 1)])) + +#define ST_MAPTITLEX (SCREENWIDTH - ST_MAPWIDTH * ST_CHATFONTWIDTH) + +#define ST_MAPTITLEY 0 +#define ST_MAPHEIGHT 1 + + +static player_t* plyr; // main player in game +static doom_boolean st_firsttime; // ST_Start() has just been called +static int veryfirsttime = 1; // used to execute ST_Init() only once +static int lu_palette; // lump number for PLAYPAL +static unsigned int st_clock; // used for timing +static int st_msgcounter = 0; // used for making messages go away +static st_chatstateenum_t st_chatstate; // used when in chat +static st_stateenum_t st_gamestate; // whether in automap or first-person +static doom_boolean st_statusbaron; // whether left-side main status bar is active +static doom_boolean st_chat; // whether status bar chat is active +static doom_boolean st_oldchat; // value of st_chat before message popped up +static doom_boolean st_cursoron; // whether chat window has the cursor on +static doom_boolean st_notdeathmatch; // !deathmatch +static doom_boolean st_armson; // !deathmatch && st_statusbaron +static doom_boolean st_fragson; // !deathmatch +static patch_t* sbar; // main bar left +static patch_t* tallnum[10]; // 0-9, tall numbers +static patch_t* tallpercent; // tall % sign +static patch_t* shortnum[10]; // 0-9, short, yellow (,different!) numbers +static patch_t* keys[NUMCARDS]; // 3 key-cards, 3 skulls +static patch_t* faces[ST_NUMFACES]; // face status patches +static patch_t* faceback; // face background +static patch_t* armsbg; // main bar right +static patch_t* arms[6][2]; // weapon ownership patches +static st_number_t w_ready; // ready-weapon widget +static st_number_t w_frags; // in deathmatch only, summary of frags stats +static st_percent_t w_health; // health widget +static st_binicon_t w_armsbg; // arms background +static st_multicon_t w_arms[6]; // weapon ownership widgets +static st_multicon_t w_faces; // face status widget +static st_multicon_t w_keyboxes[3]; // keycard widgets +static st_percent_t w_armor; // armor widget +static st_number_t w_ammo[4]; // ammo widgets +static st_number_t w_maxammo[4]; // max ammo widgets +static int st_fragscount; // number of frags so far in deathmatch +static int st_oldhealth = -1; // used to use appopriately pained face +static doom_boolean oldweaponsowned[NUMWEAPONS]; // used for evil grin +static int st_facecount = 0; // count until face changes +static int st_faceindex = 0; // current face index, used by w_faces +static int keyboxes[3]; // holds key-type for each key box on bar +static int st_randomnumber; // a random number per tick +static int st_palette = 0; +static doom_boolean st_stopped = doom_true; + + +// Massive bunches of cheat shit +// to keep it from being easy to figure them out. +// Yeah, right... +unsigned char cheat_mus_seq[] = +{ + 0xb2, 0x26, 0xb6, 0xae, 0xea, 1, 0, 0, 0xff +}; + +unsigned char cheat_choppers_seq[] = +{ + 0xb2, 0x26, 0xe2, 0x32, 0xf6, 0x2a, 0x2a, 0xa6, 0x6a, 0xea, 0xff // id... +}; + +unsigned char cheat_god_seq[] = +{ + 0xb2, 0x26, 0x26, 0xaa, 0x26, 0xff // iddqd +}; + +unsigned char cheat_ammo_seq[] = +{ + 0xb2, 0x26, 0xf2, 0x66, 0xa2, 0xff // idkfa +}; + +unsigned char cheat_ammonokey_seq[] = +{ + 0xb2, 0x26, 0x66, 0xa2, 0xff // idfa +}; + +// Smashing Pumpkins Into Samml Piles Of Putried Debris. +unsigned char cheat_noclip_seq[] = +{ + 0xb2, 0x26, 0xea, 0x2a, 0xb2, // idspispopd + 0xea, 0x2a, 0xf6, 0x2a, 0x26, 0xff +}; + +// +unsigned char cheat_commercial_noclip_seq[] = +{ + 0xb2, 0x26, 0xe2, 0x36, 0xb2, 0x2a, 0xff // idclip +}; + +unsigned char cheat_powerup_seq[7][10] = +{ + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0x6e, 0xff }, // beholdv + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0xea, 0xff }, // beholds + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0xb2, 0xff }, // beholdi + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0x6a, 0xff }, // beholdr + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0xa2, 0xff }, // beholda + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0x36, 0xff }, // beholdl + { 0xb2, 0x26, 0x62, 0xa6, 0x32, 0xf6, 0x36, 0x26, 0xff } // behold +}; + +unsigned char cheat_clev_seq[] = +{ + 0xb2, 0x26, 0xe2, 0x36, 0xa6, 0x6e, 1, 0, 0, 0xff // idclev +}; + +// my position cheat +unsigned char cheat_mypos_seq[] = +{ + 0xb2, 0x26, 0xb6, 0xba, 0x2a, 0xf6, 0xea, 0xff // idmypos +}; + +// Now what? +cheatseq_t cheat_mus = { cheat_mus_seq, 0 }; +cheatseq_t cheat_god = { cheat_god_seq, 0 }; +cheatseq_t cheat_ammo = { cheat_ammo_seq, 0 }; +cheatseq_t cheat_ammonokey = { cheat_ammonokey_seq, 0 }; +cheatseq_t cheat_noclip = { cheat_noclip_seq, 0 }; +cheatseq_t cheat_commercial_noclip = { cheat_commercial_noclip_seq, 0 }; + +cheatseq_t cheat_powerup[7] = +{ + { cheat_powerup_seq[0], 0 }, + { cheat_powerup_seq[1], 0 }, + { cheat_powerup_seq[2], 0 }, + { cheat_powerup_seq[3], 0 }, + { cheat_powerup_seq[4], 0 }, + { cheat_powerup_seq[5], 0 }, + { cheat_powerup_seq[6], 0 } +}; + +cheatseq_t cheat_choppers = { cheat_choppers_seq, 0 }; +cheatseq_t cheat_clev = { cheat_clev_seq, 0 }; +cheatseq_t cheat_mypos = { cheat_mypos_seq, 0 }; + + +extern char* mapnames[]; +extern int doom_flags; + + +void ST_Stop(void); + + +// +// STATUS BAR CODE +// + +void ST_refreshBackground(void) +{ + if (st_statusbaron) + { + V_DrawPatch(ST_X, 0, STLIB_BG, sbar); + + if (netgame) + V_DrawPatch(ST_FX, 0, STLIB_BG, faceback); + + V_CopyRect(ST_X, 0, STLIB_BG, ST_WIDTH, ST_HEIGHT, ST_X, ST_Y, STLIB_FG); + } +} + + +// Respond to keyboard input events, +// intercept cheats. +doom_boolean ST_Responder(event_t* ev) +{ + int i; + + // Filter automap on/off. + if (ev->type == ev_keyup + && ((ev->data1 & 0xffff0000) == AM_MSGHEADER)) + { + switch (ev->data1) + { + case AM_MSGENTERED: + st_gamestate = AutomapState; + st_firsttime = doom_true; + break; + + case AM_MSGEXITED: + // doom_print("AM exited\n"); + st_gamestate = FirstPersonState; + break; + } + } + + // if a user keypress... + else if (ev->type == ev_keydown) + { + if (!netgame) + { + // b. - enabled for more debug fun. + // if (gameskill != sk_nightmare) { + + // 'dqd' cheat for toggleable god mode + if (cht_CheckCheat(&cheat_god, ev->data1)) + { + plyr->cheats ^= CF_GODMODE; + if (plyr->cheats & CF_GODMODE) + { + if (plyr->mo) + plyr->mo->health = 100; + + plyr->health = 100; + plyr->message = (char*)STSTR_DQDON; + } + else + plyr->message = (char*)STSTR_DQDOFF; + } + // 'fa' cheat for killer fucking arsenal + else if (cht_CheckCheat(&cheat_ammonokey, ev->data1)) + { + plyr->armorpoints = 200; + plyr->armortype = 2; + + for (i = 0; i < NUMWEAPONS; i++) + plyr->weaponowned[i] = doom_true; + + for (i = 0; i < NUMAMMO; i++) + plyr->ammo[i] = plyr->maxammo[i]; + + plyr->message = (char*)STSTR_FAADDED; + } + // 'kfa' cheat for key full ammo + else if (cht_CheckCheat(&cheat_ammo, ev->data1)) + { + plyr->armorpoints = 200; + plyr->armortype = 2; + + for (i = 0; i < NUMWEAPONS; i++) + plyr->weaponowned[i] = doom_true; + + for (i = 0; i < NUMAMMO; i++) + plyr->ammo[i] = plyr->maxammo[i]; + + for (i = 0; i < NUMCARDS; i++) + plyr->cards[i] = doom_true; + + plyr->message = (char*)STSTR_KFAADDED; + } + // 'mus' cheat for changing music + else if (cht_CheckCheat(&cheat_mus, ev->data1)) + { + char buf[3]; + int musnum; + + plyr->message = (char*)STSTR_MUS; + cht_GetParam(&cheat_mus, buf); + + if (gamemode == commercial) + { + musnum = mus_runnin + (buf[0] - '0') * 10 + buf[1] - '0' - 1; + + if (((buf[0] - '0') * 10 + buf[1] - '0') > 35) + plyr->message = (char*)STSTR_NOMUS; + else + S_ChangeMusic(musnum, 1); + } + else + { + musnum = mus_e1m1 + (buf[0] - '1') * 9 + (buf[1] - '1'); + + if (((buf[0] - '1') * 9 + buf[1] - '1') > 31) + plyr->message = (char*)STSTR_NOMUS; + else + S_ChangeMusic(musnum, 1); + } + } + // Simplified, accepting both "noclip" and "idspispopd". + // no clipping mode cheat + else if (cht_CheckCheat(&cheat_noclip, ev->data1) + || cht_CheckCheat(&cheat_commercial_noclip, ev->data1)) + { + plyr->cheats ^= CF_NOCLIP; + + if (plyr->cheats & CF_NOCLIP) + plyr->message = (char*)STSTR_NCON; + else + plyr->message = (char*)STSTR_NCOFF; + } + // 'behold?' power-up cheats + for (i = 0; i < 6; i++) + { + if (cht_CheckCheat(&cheat_powerup[i], ev->data1)) + { + if (!plyr->powers[i]) + P_GivePower(plyr, i); + else if (i != pw_strength) + plyr->powers[i] = 1; + else + plyr->powers[i] = 0; + + plyr->message = (char*)STSTR_BEHOLDX; + } + } + + // 'behold' power-up menu + if (cht_CheckCheat(&cheat_powerup[6], ev->data1)) + { + plyr->message = (char*)STSTR_BEHOLD; + } + // 'choppers' invulnerability & chainsaw + else if (cht_CheckCheat(&cheat_choppers, ev->data1)) + { + plyr->weaponowned[wp_chainsaw] = doom_true; + plyr->powers[pw_invulnerability] = doom_true; + plyr->message = (char*)STSTR_CHOPPERS; + } + // 'mypos' for player position + else if (cht_CheckCheat(&cheat_mypos, ev->data1)) + { + static char buf[ST_MSGWIDTH]; + //doom_sprintf(buf, "ang=0x%x;x,y=(0x%x,0x%x)", + // players[consoleplayer].mo->angle, + // players[consoleplayer].mo->x, + // players[consoleplayer].mo->y); + doom_strcpy(buf, "ang=0x"); + doom_concat(buf, doom_itoa(players[consoleplayer].mo->angle, 16)); + doom_concat(buf, ";x,y=(0x"); + doom_concat(buf, doom_itoa(players[consoleplayer].mo->x, 16)); + doom_concat(buf, ",0x"); + doom_concat(buf, doom_itoa(players[consoleplayer].mo->y, 16)); + doom_concat(buf, ")"); + plyr->message = buf; + } + } + + // 'clev' change-level cheat + if (cht_CheckCheat(&cheat_clev, ev->data1)) + { + char buf[3]; + int epsd; + int map; + + cht_GetParam(&cheat_clev, buf); + + if (gamemode == commercial) + { + epsd = 0; + map = (buf[0] - '0') * 10 + buf[1] - '0'; + } + else + { + epsd = buf[0] - '0'; + map = buf[1] - '0'; + } + + // Catch invalid maps. + if (epsd < 1) + return doom_false; + + if (map < 1) + return doom_false; + + // Ohmygod - this is not going to work. + if ((gamemode == retail) + && ((epsd > 4) || (map > 9))) + return doom_false; + + if ((gamemode == registered) + && ((epsd > 3) || (map > 9))) + return doom_false; + + if ((gamemode == shareware) + && ((epsd > 1) || (map > 9))) + return doom_false; + + if ((gamemode == commercial) + && ((epsd > 1) || (map > 34))) + return doom_false; + + // So be it. + plyr->message = (char*)STSTR_CLEV; + G_DeferedInitNew(gameskill, epsd, map); + } + } + return doom_false; +} + + +int ST_calcPainOffset(void) +{ + int health; + static int lastcalc; + static int oldhealth = -1; + + health = plyr->health > 100 ? 100 : plyr->health; + + if (health != oldhealth) + { + lastcalc = ST_FACESTRIDE * (((100 - health) * ST_NUMPAINFACES) / 101); + oldhealth = health; + } + return lastcalc; +} + + +// +// This is a not-very-pretty routine which handles +// the face states and their timing. +// the precedence of expressions is: +// dead > evil grin > turned head > straight ahead +// +void ST_updateFaceWidget(void) +{ + int i; + angle_t badguyangle; + angle_t diffang; + static int lastattackdown = -1; + static int priority = 0; + doom_boolean doevilgrin; + + if (priority < 10) + { + // dead + if (!plyr->health) + { + priority = 9; + st_faceindex = ST_DEADFACE; + st_facecount = 1; + } + } + + if (priority < 9) + { + if (plyr->bonuscount) + { + // picking up bonus + doevilgrin = doom_false; + + for (i = 0; i < NUMWEAPONS; i++) + { + if (oldweaponsowned[i] != plyr->weaponowned[i]) + { + doevilgrin = doom_true; + oldweaponsowned[i] = plyr->weaponowned[i]; + } + } + if (doevilgrin) + { + // evil grin if just picked up weapon + priority = 8; + st_facecount = ST_EVILGRINCOUNT; + st_faceindex = ST_calcPainOffset() + ST_EVILGRINOFFSET; + } + } + + } + + if (priority < 8) + { + if (plyr->damagecount + && plyr->attacker + && plyr->attacker != plyr->mo) + { + // being attacked + priority = 7; + + if (plyr->health - st_oldhealth > ST_MUCHPAIN) + { + st_facecount = ST_TURNCOUNT; + st_faceindex = ST_calcPainOffset() + ST_OUCHOFFSET; + } + else + { + badguyangle = R_PointToAngle2(plyr->mo->x, + plyr->mo->y, + plyr->attacker->x, + plyr->attacker->y); + + if (badguyangle > plyr->mo->angle) + { + // whether right or left + diffang = badguyangle - plyr->mo->angle; + i = diffang > ANG180; + } + else + { + // whether left or right + diffang = plyr->mo->angle - badguyangle; + i = diffang <= ANG180; + } // confusing, aint it? + + + st_facecount = ST_TURNCOUNT; + st_faceindex = ST_calcPainOffset(); + + if (diffang < ANG45) + { + // head-on + st_faceindex += ST_RAMPAGEOFFSET; + } + else if (i) + { + // turn face right + st_faceindex += ST_TURNOFFSET; + } + else + { + // turn face left + st_faceindex += ST_TURNOFFSET + 1; + } + } + } + } + + if (priority < 7) + { + // getting hurt because of your own damn stupidity + if (plyr->damagecount) + { + if (plyr->health - st_oldhealth > ST_MUCHPAIN) + { + priority = 7; + st_facecount = ST_TURNCOUNT; + st_faceindex = ST_calcPainOffset() + ST_OUCHOFFSET; + } + else + { + priority = 6; + st_facecount = ST_TURNCOUNT; + st_faceindex = ST_calcPainOffset() + ST_RAMPAGEOFFSET; + } + + } + + } + + if (priority < 6) + { + // rapid firing + if (plyr->attackdown) + { + if (lastattackdown == -1) + lastattackdown = ST_RAMPAGEDELAY; + else if (!--lastattackdown) + { + priority = 5; + st_faceindex = ST_calcPainOffset() + ST_RAMPAGEOFFSET; + st_facecount = 1; + lastattackdown = 1; + } + } + else + lastattackdown = -1; + + } + + if (priority < 5) + { + // invulnerability + if ((plyr->cheats & CF_GODMODE) + || plyr->powers[pw_invulnerability]) + { + priority = 4; + + st_faceindex = ST_GODFACE; + st_facecount = 1; + } + } + + // look left or look right if the facecount has timed out + if (!st_facecount) + { + st_faceindex = ST_calcPainOffset() + (st_randomnumber % 3); + st_facecount = ST_STRAIGHTFACECOUNT; + priority = 0; + } + + st_facecount--; +} + + +void ST_updateWidgets(void) +{ + static int largeammo = 1994; // means "n/a" + int i; + + if (weaponinfo[plyr->readyweapon].ammo == am_noammo) + w_ready.num = &largeammo; + else + w_ready.num = &plyr->ammo[weaponinfo[plyr->readyweapon].ammo]; + + w_ready.data = plyr->readyweapon; + + // update keycard multiple widgets + for (i = 0; i < 3; i++) + { + keyboxes[i] = plyr->cards[i] ? i : -1; + + if (plyr->cards[i + 3]) + keyboxes[i] = i + 3; + } + + // refresh everything if this is him coming back to life + ST_updateFaceWidget(); + + // used by the w_armsbg widget + st_notdeathmatch = !deathmatch; + + // used by w_arms[] widgets + st_armson = st_statusbaron && !deathmatch; + + // used by w_frags widget + st_fragson = deathmatch && st_statusbaron; + st_fragscount = 0; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (i != consoleplayer) + st_fragscount += plyr->frags[i]; + else + st_fragscount -= plyr->frags[i]; + } + + // get rid of chat window if up because of message + if (!--st_msgcounter) + st_chat = st_oldchat; +} + + +void ST_Ticker(void) +{ + st_clock++; + st_randomnumber = M_Random(); + ST_updateWidgets(); + st_oldhealth = plyr->health; +} + + +void ST_doPaletteStuff(void) +{ + int palette; + byte* pal; + int cnt; + int bzc; + + cnt = plyr->damagecount; + + if (plyr->powers[pw_strength]) + { + // slowly fade the berzerk out + bzc = 12 - (plyr->powers[pw_strength] >> 6); + + if (bzc > cnt) + cnt = bzc; + } + + if (cnt) + { + palette = (cnt + 7) >> 3; + + if (palette >= NUMREDPALS) + palette = NUMREDPALS - 1; + + palette += STARTREDPALS; + } + + else if (plyr->bonuscount) + { + palette = (plyr->bonuscount + 7) >> 3; + + if (palette >= NUMBONUSPALS) + palette = NUMBONUSPALS - 1; + + palette += STARTBONUSPALS; + } + + else if (plyr->powers[pw_ironfeet] > 4 * 32 + || plyr->powers[pw_ironfeet] & 8) + palette = RADIATIONPAL; + else + palette = 0; + + if (palette != st_palette) + { + st_palette = palette; + pal = (byte*)W_CacheLumpNum(lu_palette, PU_CACHE) + palette * 768; + I_SetPalette(pal); + } +} + + +void ST_drawWidgets(doom_boolean refresh) +{ + int i; + + // used by w_arms[] widgets + st_armson = st_statusbaron && !deathmatch; + + // used by w_frags widget + st_fragson = deathmatch && st_statusbaron; + + STlib_updateNum(&w_ready, refresh); + + for (i = 0; i < 4; i++) + { + STlib_updateNum(&w_ammo[i], refresh); + STlib_updateNum(&w_maxammo[i], refresh); + } + + STlib_updatePercent(&w_health, refresh); + STlib_updatePercent(&w_armor, refresh); + + STlib_updateBinIcon(&w_armsbg, refresh); + + for (i = 0; i < 6; i++) + STlib_updateMultIcon(&w_arms[i], refresh); + + STlib_updateMultIcon(&w_faces, refresh); + + for (i = 0; i < 3; i++) + STlib_updateMultIcon(&w_keyboxes[i], refresh); + + STlib_updateNum(&w_frags, refresh); +} + + +void ST_doRefresh(void) +{ + st_firsttime = doom_false; + + // draw status bar background to off-screen buff + ST_refreshBackground(); + + // and refresh all widgets + ST_drawWidgets(doom_true); +} + + +void ST_diffDraw(void) +{ + // update all widgets + ST_drawWidgets(doom_false); +} + + +void ST_Drawer(doom_boolean fullscreen, doom_boolean refresh) +{ + st_statusbaron = (!fullscreen) || automapactive; + st_firsttime = st_firsttime || refresh; + + // Do red-/gold-shifts from damage/items + ST_doPaletteStuff(); + + // If just after ST_Start(), refresh all + if (doom_flags & DOOM_FLAG_MENU_DARKEN_BG) + { + ST_doRefresh(); + } + else + { + if (st_firsttime) ST_doRefresh(); + // Otherwise, update as little as possible + else ST_diffDraw(); + } +} + + +void ST_loadGraphics(void) +{ + int i; + int j; + int facenum; + + char namebuf[9]; + + // Load the numbers, tall and short + for (i = 0; i < 10; i++) + { + //doom_sprintf(namebuf, "STTNUM%d", i); + doom_strcpy(namebuf, "STTNUM"); + doom_concat(namebuf, doom_itoa(i, 10)); + tallnum[i] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + + //doom_sprintf(namebuf, "STYSNUM%d", i); + doom_strcpy(namebuf, "STYSNUM"); + doom_concat(namebuf, doom_itoa(i, 10)); + shortnum[i] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + } + + // Load percent key. + //Note: why not load STMINUS here, too? + tallpercent = (patch_t*)W_CacheLumpName((char*)"STTPRCNT", PU_STATIC); + + // key cards + for (i = 0; i < NUMCARDS; i++) + { + //doom_sprintf(namebuf, "STKEYS%d", i); + doom_strcpy(namebuf, "STKEYS"); + doom_concat(namebuf, doom_itoa(i, 10)); + keys[i] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + } + + // arms background + armsbg = (patch_t*)W_CacheLumpName((char*)"STARMS", PU_STATIC); + + // arms ownership widgets + for (i = 0; i < 6; i++) + { + //doom_sprintf(namebuf, "STGNUM%d", i + 2); + doom_strcpy(namebuf, "STGNUM"); + doom_concat(namebuf, doom_itoa(i + 2, 10)); + + // gray # + arms[i][0] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + + // yellow # + arms[i][1] = shortnum[i + 2]; + } + + // face backgrounds for different color players + //doom_sprintf(namebuf, "STFB%d", consoleplayer); + doom_strcpy(namebuf, "STFB"); + doom_concat(namebuf, doom_itoa(consoleplayer, 10)); + faceback = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + + // status bar background bits + sbar = (patch_t*)W_CacheLumpName((char*)"STBAR", PU_STATIC); + + // face states + facenum = 0; + for (i = 0; i < ST_NUMPAINFACES; i++) + { + for (j = 0; j < ST_NUMSTRAIGHTFACES; j++) + { + //doom_sprintf(namebuf, "STFST%d%d", i, j); + doom_strcpy(namebuf, "STFST"); + doom_concat(namebuf, doom_itoa(i, 10)); + doom_concat(namebuf, doom_itoa(j, 10)); + faces[facenum++] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + } + //doom_sprintf(namebuf, "STFTR%d0", i); // turn right + doom_strcpy(namebuf, "STFTR"); + doom_concat(namebuf, doom_itoa(i, 10)); + doom_concat(namebuf, "0"); + faces[facenum++] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + //doom_sprintf(namebuf, "STFTL%d0", i); // turn left + doom_strcpy(namebuf, "STFTL"); + doom_concat(namebuf, doom_itoa(i, 10)); + doom_concat(namebuf, "0"); + faces[facenum++] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + //doom_sprintf(namebuf, "STFOUCH%d", i); // ouch! + doom_strcpy(namebuf, "STFOUCH"); + doom_concat(namebuf, doom_itoa(i, 10)); + faces[facenum++] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + //doom_sprintf(namebuf, "STFEVL%d", i); // evil grin ;) + doom_strcpy(namebuf, "STFEVL"); + doom_concat(namebuf, doom_itoa(i, 10)); + faces[facenum++] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + //doom_sprintf(namebuf, "STFKILL%d", i); // pissed off + doom_strcpy(namebuf, "STFKILL"); + doom_concat(namebuf, doom_itoa(i, 10)); + faces[facenum++] = (patch_t*)W_CacheLumpName(namebuf, PU_STATIC); + } + faces[facenum++] = (patch_t*)W_CacheLumpName((char*)"STFGOD0", PU_STATIC); + faces[facenum++] = (patch_t*)W_CacheLumpName((char*)"STFDEAD0", PU_STATIC); +} + +void ST_loadData(void) +{ + lu_palette = W_GetNumForName((char*)"PLAYPAL"); + ST_loadGraphics(); +} + +void ST_unloadGraphics(void) +{ + int i; + + // unload the numbers, tall and short + for (i = 0; i < 10; i++) + { + Z_ChangeTag(tallnum[i], PU_CACHE); + Z_ChangeTag(shortnum[i], PU_CACHE); + } + // unload tall percent + Z_ChangeTag(tallpercent, PU_CACHE); + + // unload arms background + Z_ChangeTag(armsbg, PU_CACHE); + + // unload gray #'s + for (i = 0; i < 6; i++) + Z_ChangeTag(arms[i][0], PU_CACHE); + + // unload the key cards + for (i = 0; i < NUMCARDS; i++) + Z_ChangeTag(keys[i], PU_CACHE); + + Z_ChangeTag(sbar, PU_CACHE); + Z_ChangeTag(faceback, PU_CACHE); + + for (i = 0; i < ST_NUMFACES; i++) + Z_ChangeTag(faces[i], PU_CACHE); + + // Note: nobody ain't seen no unloading + // of stminus yet. Dude. +} + +void ST_unloadData(void) +{ + ST_unloadGraphics(); +} + +void ST_initData(void) +{ + int i; + + st_firsttime = doom_true; + plyr = &players[consoleplayer]; + + st_clock = 0; + st_chatstate = StartChatState; + st_gamestate = FirstPersonState; + + st_statusbaron = doom_true; + st_oldchat = st_chat = doom_false; + st_cursoron = doom_false; + + st_faceindex = 0; + st_palette = -1; + + st_oldhealth = -1; + + for (i = 0; i < NUMWEAPONS; i++) + oldweaponsowned[i] = plyr->weaponowned[i]; + + for (i = 0; i < 3; i++) + keyboxes[i] = -1; + + STlib_init(); +} + +void ST_createWidgets(void) +{ + int i; + + // ready weapon ammo + STlib_initNum(&w_ready, + ST_AMMOX, + ST_AMMOY, + tallnum, + &plyr->ammo[weaponinfo[plyr->readyweapon].ammo], + &st_statusbaron, + ST_AMMOWIDTH); + + // the last weapon type + w_ready.data = plyr->readyweapon; + + // health percentage + STlib_initPercent(&w_health, + ST_HEALTHX, + ST_HEALTHY, + tallnum, + &plyr->health, + &st_statusbaron, + tallpercent); + + // arms background + STlib_initBinIcon(&w_armsbg, + ST_ARMSBGX, + ST_ARMSBGY, + armsbg, + &st_notdeathmatch, + &st_statusbaron); + + // weapons owned + for (i = 0; i < 6; i++) + { + STlib_initMultIcon(&w_arms[i], + ST_ARMSX + (i % 3) * ST_ARMSXSPACE, + ST_ARMSY + (i / 3) * ST_ARMSYSPACE, + arms[i], (int*)&plyr->weaponowned[i + 1], + &st_armson); + } + + // frags sum + STlib_initNum(&w_frags, + ST_FRAGSX, + ST_FRAGSY, + tallnum, + &st_fragscount, + &st_fragson, + ST_FRAGSWIDTH); + + // faces + STlib_initMultIcon(&w_faces, + ST_FACESX, + ST_FACESY, + faces, + &st_faceindex, + &st_statusbaron); + + // armor percentage - should be colored later + STlib_initPercent(&w_armor, + ST_ARMORX, + ST_ARMORY, + tallnum, + &plyr->armorpoints, + &st_statusbaron, tallpercent); + + // keyboxes 0-2 + STlib_initMultIcon(&w_keyboxes[0], + ST_KEY0X, + ST_KEY0Y, + keys, + &keyboxes[0], + &st_statusbaron); + + STlib_initMultIcon(&w_keyboxes[1], + ST_KEY1X, + ST_KEY1Y, + keys, + &keyboxes[1], + &st_statusbaron); + + STlib_initMultIcon(&w_keyboxes[2], + ST_KEY2X, + ST_KEY2Y, + keys, + &keyboxes[2], + &st_statusbaron); + + // ammo count (all four kinds) + STlib_initNum(&w_ammo[0], + ST_AMMO0X, + ST_AMMO0Y, + shortnum, + &plyr->ammo[0], + &st_statusbaron, + ST_AMMO0WIDTH); + + STlib_initNum(&w_ammo[1], + ST_AMMO1X, + ST_AMMO1Y, + shortnum, + &plyr->ammo[1], + &st_statusbaron, + ST_AMMO1WIDTH); + + STlib_initNum(&w_ammo[2], + ST_AMMO2X, + ST_AMMO2Y, + shortnum, + &plyr->ammo[2], + &st_statusbaron, + ST_AMMO2WIDTH); + + STlib_initNum(&w_ammo[3], + ST_AMMO3X, + ST_AMMO3Y, + shortnum, + &plyr->ammo[3], + &st_statusbaron, + ST_AMMO3WIDTH); + + // max ammo count (all four kinds) + STlib_initNum(&w_maxammo[0], + ST_MAXAMMO0X, + ST_MAXAMMO0Y, + shortnum, + &plyr->maxammo[0], + &st_statusbaron, + ST_MAXAMMO0WIDTH); + + STlib_initNum(&w_maxammo[1], + ST_MAXAMMO1X, + ST_MAXAMMO1Y, + shortnum, + &plyr->maxammo[1], + &st_statusbaron, + ST_MAXAMMO1WIDTH); + + STlib_initNum(&w_maxammo[2], + ST_MAXAMMO2X, + ST_MAXAMMO2Y, + shortnum, + &plyr->maxammo[2], + &st_statusbaron, + ST_MAXAMMO2WIDTH); + + STlib_initNum(&w_maxammo[3], + ST_MAXAMMO3X, + ST_MAXAMMO3Y, + shortnum, + &plyr->maxammo[3], + &st_statusbaron, + ST_MAXAMMO3WIDTH); +} + +void ST_Start(void) +{ + if (!st_stopped) + ST_Stop(); + + ST_initData(); + ST_createWidgets(); + st_stopped = doom_false; +} + +void ST_Stop(void) +{ + if (st_stopped) + return; + + I_SetPalette((byte*)W_CacheLumpNum(lu_palette, PU_CACHE)); + + st_stopped = doom_true; +} + +void ST_Init(void) +{ + veryfirsttime = 0; + ST_loadData(); + screens[4] = (byte*)Z_Malloc(ST_WIDTH * ST_HEIGHT, PU_STATIC, 0); +} +int +SlopeDiv +( unsigned num, + unsigned den) +{ + unsigned ans; + + if (den < 512) + return SLOPERANGE; + + ans = (num<<3)/(den>>8); + + return ans <= SLOPERANGE ? ans : SLOPERANGE; +} + + + + +int finetangent[4096] = +{ + -170910304,-56965752,-34178904,-24413316,-18988036,-15535599,-13145455,-11392683, + -10052327,-8994149,-8137527,-7429880,-6835455,-6329090,-5892567,-5512368, + -5178251,-4882318,-4618375,-4381502,-4167737,-3973855,-3797206,-3635590, + -3487165,-3350381,-3223918,-3106651,-2997613,-2895966,-2800983,-2712030, + -2628549,-2550052,-2476104,-2406322,-2340362,-2277919,-2218719,-2162516, + -2109087,-2058233,-2009771,-1963536,-1919378,-1877161,-1836758,-1798063, + -1760956,-1725348,-1691149,-1658278,-1626658,-1596220,-1566898,-1538632, + -1511367,-1485049,-1459630,-1435065,-1411312,-1388330,-1366084,-1344537, + -1323658,-1303416,-1283783,-1264730,-1246234,-1228269,-1210813,-1193846, + -1177345,-1161294,-1145673,-1130465,-1115654,-1101225,-1087164,-1073455, + -1060087,-1047046,-1034322,-1021901,-1009774,-997931,-986361,-975054, + -964003,-953199,-942633,-932298,-922186,-912289,-902602,-893117, + -883829,-874730,-865817,-857081,-848520,-840127,-831898,-823827, + -815910,-808143,-800521,-793041,-785699,-778490,-771411,-764460, + -757631,-750922,-744331,-737853,-731486,-725227,-719074,-713023, + -707072,-701219,-695462,-689797,-684223,-678737,-673338,-668024, + -662792,-657640,-652568,-647572,-642651,-637803,-633028,-628323, + -623686,-619117,-614613,-610174,-605798,-601483,-597229,-593033, + -588896,-584815,-580789,-576818,-572901,-569035,-565221,-561456, + -557741,-554074,-550455,-546881,-543354,-539870,-536431,-533034, + -529680,-526366,-523094,-519861,-516667,-513512,-510394,-507313, + -504269,-501261,-498287,-495348,-492443,-489571,-486732,-483925, + -481150,-478406,-475692,-473009,-470355,-467730,-465133,-462565, + -460024,-457511,-455024,-452564,-450129,-447720,-445337,-442978, + -440643,-438332,-436045,-433781,-431540,-429321,-427125,-424951, + -422798,-420666,-418555,-416465,-414395,-412344,-410314,-408303, + -406311,-404338,-402384,-400448,-398530,-396630,-394747,-392882, + -391034,-389202,-387387,-385589,-383807,-382040,-380290,-378555, + -376835,-375130,-373440,-371765,-370105,-368459,-366826,-365208, + -363604,-362013,-360436,-358872,-357321,-355783,-354257,-352744, + -351244,-349756,-348280,-346816,-345364,-343924,-342495,-341078, + -339671,-338276,-336892,-335519,-334157,-332805,-331464,-330133, + -328812,-327502,-326201,-324910,-323629,-322358,-321097,-319844, + -318601,-317368,-316143,-314928,-313721,-312524,-311335,-310154, + -308983,-307819,-306664,-305517,-304379,-303248,-302126,-301011, + -299904,-298805,-297714,-296630,-295554,-294485,-293423,-292369, + -291322,-290282,-289249,-288223,-287204,-286192,-285186,-284188, + -283195,-282210,-281231,-280258,-279292,-278332,-277378,-276430, + -275489,-274553,-273624,-272700,-271782,-270871,-269965,-269064, + -268169,-267280,-266397,-265519,-264646,-263779,-262917,-262060, + -261209,-260363,-259522,-258686,-257855,-257029,-256208,-255392, + -254581,-253774,-252973,-252176,-251384,-250596,-249813,-249035, + -248261,-247492,-246727,-245966,-245210,-244458,-243711,-242967, + -242228,-241493,-240763,-240036,-239314,-238595,-237881,-237170, + -236463,-235761,-235062,-234367,-233676,-232988,-232304,-231624, + -230948,-230275,-229606,-228941,-228279,-227621,-226966,-226314, + -225666,-225022,-224381,-223743,-223108,-222477,-221849,-221225, + -220603,-219985,-219370,-218758,-218149,-217544,-216941,-216341, + -215745,-215151,-214561,-213973,-213389,-212807,-212228,-211652, + -211079,-210509,-209941,-209376,-208815,-208255,-207699,-207145, + -206594,-206045,-205500,-204956,-204416,-203878,-203342,-202809, + -202279,-201751,-201226,-200703,-200182,-199664,-199149,-198636, + -198125,-197616,-197110,-196606,-196105,-195606,-195109,-194614, + -194122,-193631,-193143,-192658,-192174,-191693,-191213,-190736, + -190261,-189789,-189318,-188849,-188382,-187918,-187455,-186995, + -186536,-186080,-185625,-185173,-184722,-184274,-183827,-183382, + -182939,-182498,-182059,-181622,-181186,-180753,-180321,-179891, + -179463,-179037,-178612,-178190,-177769,-177349,-176932,-176516, + -176102,-175690,-175279,-174870,-174463,-174057,-173653,-173251, + -172850,-172451,-172053,-171657,-171263,-170870,-170479,-170089, + -169701,-169315,-168930,-168546,-168164,-167784,-167405,-167027, + -166651,-166277,-165904,-165532,-165162,-164793,-164426,-164060, + -163695,-163332,-162970,-162610,-162251,-161893,-161537,-161182, + -160828,-160476,-160125,-159775,-159427,-159079,-158734,-158389, + -158046,-157704,-157363,-157024,-156686,-156349,-156013,-155678, + -155345,-155013,-154682,-154352,-154024,-153697,-153370,-153045, + -152722,-152399,-152077,-151757,-151438,-151120,-150803,-150487, + -150172,-149859,-149546,-149235,-148924,-148615,-148307,-148000, + -147693,-147388,-147084,-146782,-146480,-146179,-145879,-145580, + -145282,-144986,-144690,-144395,-144101,-143808,-143517,-143226, + -142936,-142647,-142359,-142072,-141786,-141501,-141217,-140934, + -140651,-140370,-140090,-139810,-139532,-139254,-138977,-138701, + -138426,-138152,-137879,-137607,-137335,-137065,-136795,-136526, + -136258,-135991,-135725,-135459,-135195,-134931,-134668,-134406, + -134145,-133884,-133625,-133366,-133108,-132851,-132594,-132339, + -132084,-131830,-131576,-131324,-131072,-130821,-130571,-130322, + -130073,-129825,-129578,-129332,-129086,-128841,-128597,-128353, + -128111,-127869,-127627,-127387,-127147,-126908,-126669,-126432, + -126195,-125959,-125723,-125488,-125254,-125020,-124787,-124555, + -124324,-124093,-123863,-123633,-123404,-123176,-122949,-122722, + -122496,-122270,-122045,-121821,-121597,-121374,-121152,-120930, + -120709,-120489,-120269,-120050,-119831,-119613,-119396,-119179, + -118963,-118747,-118532,-118318,-118104,-117891,-117678,-117466, + -117254,-117044,-116833,-116623,-116414,-116206,-115998,-115790, + -115583,-115377,-115171,-114966,-114761,-114557,-114354,-114151, + -113948,-113746,-113545,-113344,-113143,-112944,-112744,-112546, + -112347,-112150,-111952,-111756,-111560,-111364,-111169,-110974, + -110780,-110586,-110393,-110200,-110008,-109817,-109626,-109435, + -109245,-109055,-108866,-108677,-108489,-108301,-108114,-107927, + -107741,-107555,-107369,-107184,-107000,-106816,-106632,-106449, + -106266,-106084,-105902,-105721,-105540,-105360,-105180,-105000, + -104821,-104643,-104465,-104287,-104109,-103933,-103756,-103580, + -103404,-103229,-103054,-102880,-102706,-102533,-102360,-102187, + -102015,-101843,-101671,-101500,-101330,-101159,-100990,-100820, + -100651,-100482,-100314,-100146,-99979,-99812,-99645,-99479, + -99313,-99148,-98982,-98818,-98653,-98489,-98326,-98163, + -98000,-97837,-97675,-97513,-97352,-97191,-97030,-96870, + -96710,-96551,-96391,-96233,-96074,-95916,-95758,-95601, + -95444,-95287,-95131,-94975,-94819,-94664,-94509,-94354, + -94200,-94046,-93892,-93739,-93586,-93434,-93281,-93129, + -92978,-92826,-92675,-92525,-92375,-92225,-92075,-91926, + -91777,-91628,-91480,-91332,-91184,-91036,-90889,-90742, + -90596,-90450,-90304,-90158,-90013,-89868,-89724,-89579, + -89435,-89292,-89148,-89005,-88862,-88720,-88577,-88435, + -88294,-88152,-88011,-87871,-87730,-87590,-87450,-87310, + -87171,-87032,-86893,-86755,-86616,-86479,-86341,-86204, + -86066,-85930,-85793,-85657,-85521,-85385,-85250,-85114, + -84980,-84845,-84710,-84576,-84443,-84309,-84176,-84043, + -83910,-83777,-83645,-83513,-83381,-83250,-83118,-82987, + -82857,-82726,-82596,-82466,-82336,-82207,-82078,-81949, + -81820,-81691,-81563,-81435,-81307,-81180,-81053,-80925, + -80799,-80672,-80546,-80420,-80294,-80168,-80043,-79918, + -79793,-79668,-79544,-79420,-79296,-79172,-79048,-78925, + -78802,-78679,-78557,-78434,-78312,-78190,-78068,-77947, + -77826,-77705,-77584,-77463,-77343,-77223,-77103,-76983, + -76864,-76744,-76625,-76506,-76388,-76269,-76151,-76033, + -75915,-75797,-75680,-75563,-75446,-75329,-75213,-75096, + -74980,-74864,-74748,-74633,-74517,-74402,-74287,-74172, + -74058,-73944,-73829,-73715,-73602,-73488,-73375,-73262, + -73149,-73036,-72923,-72811,-72699,-72587,-72475,-72363, + -72252,-72140,-72029,-71918,-71808,-71697,-71587,-71477, + -71367,-71257,-71147,-71038,-70929,-70820,-70711,-70602, + -70494,-70385,-70277,-70169,-70061,-69954,-69846,-69739, + -69632,-69525,-69418,-69312,-69205,-69099,-68993,-68887, + -68781,-68676,-68570,-68465,-68360,-68255,-68151,-68046, + -67942,-67837,-67733,-67629,-67526,-67422,-67319,-67216, + -67113,-67010,-66907,-66804,-66702,-66600,-66498,-66396, + -66294,-66192,-66091,-65989,-65888,-65787,-65686,-65586, + -65485,-65385,-65285,-65185,-65085,-64985,-64885,-64786, + -64687,-64587,-64488,-64389,-64291,-64192,-64094,-63996, + -63897,-63799,-63702,-63604,-63506,-63409,-63312,-63215, + -63118,-63021,-62924,-62828,-62731,-62635,-62539,-62443, + -62347,-62251,-62156,-62060,-61965,-61870,-61775,-61680, + -61585,-61491,-61396,-61302,-61208,-61114,-61020,-60926, + -60833,-60739,-60646,-60552,-60459,-60366,-60273,-60181, + -60088,-59996,-59903,-59811,-59719,-59627,-59535,-59444, + -59352,-59261,-59169,-59078,-58987,-58896,-58805,-58715, + -58624,-58534,-58443,-58353,-58263,-58173,-58083,-57994, + -57904,-57815,-57725,-57636,-57547,-57458,-57369,-57281, + -57192,-57104,-57015,-56927,-56839,-56751,-56663,-56575, + -56487,-56400,-56312,-56225,-56138,-56051,-55964,-55877, + -55790,-55704,-55617,-55531,-55444,-55358,-55272,-55186, + -55100,-55015,-54929,-54843,-54758,-54673,-54587,-54502, + -54417,-54333,-54248,-54163,-54079,-53994,-53910,-53826, + -53741,-53657,-53574,-53490,-53406,-53322,-53239,-53156, + -53072,-52989,-52906,-52823,-52740,-52657,-52575,-52492, + -52410,-52327,-52245,-52163,-52081,-51999,-51917,-51835, + -51754,-51672,-51591,-51509,-51428,-51347,-51266,-51185, + -51104,-51023,-50942,-50862,-50781,-50701,-50621,-50540, + -50460,-50380,-50300,-50221,-50141,-50061,-49982,-49902, + -49823,-49744,-49664,-49585,-49506,-49427,-49349,-49270, + -49191,-49113,-49034,-48956,-48878,-48799,-48721,-48643, + -48565,-48488,-48410,-48332,-48255,-48177,-48100,-48022, + -47945,-47868,-47791,-47714,-47637,-47560,-47484,-47407, + -47331,-47254,-47178,-47102,-47025,-46949,-46873,-46797, + -46721,-46646,-46570,-46494,-46419,-46343,-46268,-46193, + -46118,-46042,-45967,-45892,-45818,-45743,-45668,-45593, + -45519,-45444,-45370,-45296,-45221,-45147,-45073,-44999, + -44925,-44851,-44778,-44704,-44630,-44557,-44483,-44410, + -44337,-44263,-44190,-44117,-44044,-43971,-43898,-43826, + -43753,-43680,-43608,-43535,-43463,-43390,-43318,-43246, + -43174,-43102,-43030,-42958,-42886,-42814,-42743,-42671, + -42600,-42528,-42457,-42385,-42314,-42243,-42172,-42101, + -42030,-41959,-41888,-41817,-41747,-41676,-41605,-41535, + -41465,-41394,-41324,-41254,-41184,-41113,-41043,-40973, + -40904,-40834,-40764,-40694,-40625,-40555,-40486,-40416, + -40347,-40278,-40208,-40139,-40070,-40001,-39932,-39863, + -39794,-39726,-39657,-39588,-39520,-39451,-39383,-39314, + -39246,-39178,-39110,-39042,-38973,-38905,-38837,-38770, + -38702,-38634,-38566,-38499,-38431,-38364,-38296,-38229, + -38161,-38094,-38027,-37960,-37893,-37826,-37759,-37692, + -37625,-37558,-37491,-37425,-37358,-37291,-37225,-37158, + -37092,-37026,-36959,-36893,-36827,-36761,-36695,-36629, + -36563,-36497,-36431,-36365,-36300,-36234,-36168,-36103, + -36037,-35972,-35907,-35841,-35776,-35711,-35646,-35580, + -35515,-35450,-35385,-35321,-35256,-35191,-35126,-35062, + -34997,-34932,-34868,-34803,-34739,-34675,-34610,-34546, + -34482,-34418,-34354,-34289,-34225,-34162,-34098,-34034, + -33970,-33906,-33843,-33779,-33715,-33652,-33588,-33525, + -33461,-33398,-33335,-33272,-33208,-33145,-33082,-33019, + -32956,-32893,-32830,-32767,-32705,-32642,-32579,-32516, + -32454,-32391,-32329,-32266,-32204,-32141,-32079,-32017, + -31955,-31892,-31830,-31768,-31706,-31644,-31582,-31520, + -31458,-31396,-31335,-31273,-31211,-31150,-31088,-31026, + -30965,-30904,-30842,-30781,-30719,-30658,-30597,-30536, + -30474,-30413,-30352,-30291,-30230,-30169,-30108,-30048, + -29987,-29926,-29865,-29805,-29744,-29683,-29623,-29562, + -29502,-29441,-29381,-29321,-29260,-29200,-29140,-29080, + -29020,-28959,-28899,-28839,-28779,-28719,-28660,-28600, + -28540,-28480,-28420,-28361,-28301,-28241,-28182,-28122, + -28063,-28003,-27944,-27884,-27825,-27766,-27707,-27647, + -27588,-27529,-27470,-27411,-27352,-27293,-27234,-27175, + -27116,-27057,-26998,-26940,-26881,-26822,-26763,-26705, + -26646,-26588,-26529,-26471,-26412,-26354,-26295,-26237, + -26179,-26120,-26062,-26004,-25946,-25888,-25830,-25772, + -25714,-25656,-25598,-25540,-25482,-25424,-25366,-25308, + -25251,-25193,-25135,-25078,-25020,-24962,-24905,-24847, + -24790,-24732,-24675,-24618,-24560,-24503,-24446,-24389, + -24331,-24274,-24217,-24160,-24103,-24046,-23989,-23932, + -23875,-23818,-23761,-23704,-23647,-23591,-23534,-23477, + -23420,-23364,-23307,-23250,-23194,-23137,-23081,-23024, + -22968,-22911,-22855,-22799,-22742,-22686,-22630,-22573, + -22517,-22461,-22405,-22349,-22293,-22237,-22181,-22125, + -22069,-22013,-21957,-21901,-21845,-21789,-21733,-21678, + -21622,-21566,-21510,-21455,-21399,-21343,-21288,-21232, + -21177,-21121,-21066,-21010,-20955,-20900,-20844,-20789, + -20734,-20678,-20623,-20568,-20513,-20457,-20402,-20347, + -20292,-20237,-20182,-20127,-20072,-20017,-19962,-19907, + -19852,-19797,-19742,-19688,-19633,-19578,-19523,-19469, + -19414,-19359,-19305,-19250,-19195,-19141,-19086,-19032, + -18977,-18923,-18868,-18814,-18760,-18705,-18651,-18597, + -18542,-18488,-18434,-18380,-18325,-18271,-18217,-18163, + -18109,-18055,-18001,-17946,-17892,-17838,-17784,-17731, + -17677,-17623,-17569,-17515,-17461,-17407,-17353,-17300, + -17246,-17192,-17138,-17085,-17031,-16977,-16924,-16870, + -16817,-16763,-16710,-16656,-16603,-16549,-16496,-16442, + -16389,-16335,-16282,-16229,-16175,-16122,-16069,-16015, + -15962,-15909,-15856,-15802,-15749,-15696,-15643,-15590, + -15537,-15484,-15431,-15378,-15325,-15272,-15219,-15166, + -15113,-15060,-15007,-14954,-14901,-14848,-14795,-14743, + -14690,-14637,-14584,-14531,-14479,-14426,-14373,-14321, + -14268,-14215,-14163,-14110,-14057,-14005,-13952,-13900, + -13847,-13795,-13742,-13690,-13637,-13585,-13533,-13480, + -13428,-13375,-13323,-13271,-13218,-13166,-13114,-13062, + -13009,-12957,-12905,-12853,-12800,-12748,-12696,-12644, + -12592,-12540,-12488,-12436,-12383,-12331,-12279,-12227, + -12175,-12123,-12071,-12019,-11967,-11916,-11864,-11812, + -11760,-11708,-11656,-11604,-11552,-11501,-11449,-11397, + -11345,-11293,-11242,-11190,-11138,-11086,-11035,-10983, + -10931,-10880,-10828,-10777,-10725,-10673,-10622,-10570, + -10519,-10467,-10415,-10364,-10312,-10261,-10209,-10158, + -10106,-10055,-10004,-9952,-9901,-9849,-9798,-9747, + -9695,-9644,-9592,-9541,-9490,-9438,-9387,-9336, + -9285,-9233,-9182,-9131,-9080,-9028,-8977,-8926, + -8875,-8824,-8772,-8721,-8670,-8619,-8568,-8517, + -8466,-8414,-8363,-8312,-8261,-8210,-8159,-8108, + -8057,-8006,-7955,-7904,-7853,-7802,-7751,-7700, + -7649,-7598,-7547,-7496,-7445,-7395,-7344,-7293, + -7242,-7191,-7140,-7089,-7038,-6988,-6937,-6886, + -6835,-6784,-6733,-6683,-6632,-6581,-6530,-6480, + -6429,-6378,-6327,-6277,-6226,-6175,-6124,-6074, + -6023,-5972,-5922,-5871,-5820,-5770,-5719,-5668, + -5618,-5567,-5517,-5466,-5415,-5365,-5314,-5264, + -5213,-5162,-5112,-5061,-5011,-4960,-4910,-4859, + -4808,-4758,-4707,-4657,-4606,-4556,-4505,-4455, + -4404,-4354,-4303,-4253,-4202,-4152,-4101,-4051, + -4001,-3950,-3900,-3849,-3799,-3748,-3698,-3648, + -3597,-3547,-3496,-3446,-3395,-3345,-3295,-3244, + -3194,-3144,-3093,-3043,-2992,-2942,-2892,-2841, + -2791,-2741,-2690,-2640,-2590,-2539,-2489,-2439, + -2388,-2338,-2288,-2237,-2187,-2137,-2086,-2036, + -1986,-1935,-1885,-1835,-1784,-1734,-1684,-1633, + -1583,-1533,-1483,-1432,-1382,-1332,-1281,-1231, + -1181,-1131,-1080,-1030,-980,-929,-879,-829, + -779,-728,-678,-628,-578,-527,-477,-427, + -376,-326,-276,-226,-175,-125,-75,-25, + 25,75,125,175,226,276,326,376, + 427,477,527,578,628,678,728,779, + 829,879,929,980,1030,1080,1131,1181, + 1231,1281,1332,1382,1432,1483,1533,1583, + 1633,1684,1734,1784,1835,1885,1935,1986, + 2036,2086,2137,2187,2237,2288,2338,2388, + 2439,2489,2539,2590,2640,2690,2741,2791, + 2841,2892,2942,2992,3043,3093,3144,3194, + 3244,3295,3345,3395,3446,3496,3547,3597, + 3648,3698,3748,3799,3849,3900,3950,4001, + 4051,4101,4152,4202,4253,4303,4354,4404, + 4455,4505,4556,4606,4657,4707,4758,4808, + 4859,4910,4960,5011,5061,5112,5162,5213, + 5264,5314,5365,5415,5466,5517,5567,5618, + 5668,5719,5770,5820,5871,5922,5972,6023, + 6074,6124,6175,6226,6277,6327,6378,6429, + 6480,6530,6581,6632,6683,6733,6784,6835, + 6886,6937,6988,7038,7089,7140,7191,7242, + 7293,7344,7395,7445,7496,7547,7598,7649, + 7700,7751,7802,7853,7904,7955,8006,8057, + 8108,8159,8210,8261,8312,8363,8414,8466, + 8517,8568,8619,8670,8721,8772,8824,8875, + 8926,8977,9028,9080,9131,9182,9233,9285, + 9336,9387,9438,9490,9541,9592,9644,9695, + 9747,9798,9849,9901,9952,10004,10055,10106, + 10158,10209,10261,10312,10364,10415,10467,10519, + 10570,10622,10673,10725,10777,10828,10880,10931, + 10983,11035,11086,11138,11190,11242,11293,11345, + 11397,11449,11501,11552,11604,11656,11708,11760, + 11812,11864,11916,11967,12019,12071,12123,12175, + 12227,12279,12331,12383,12436,12488,12540,12592, + 12644,12696,12748,12800,12853,12905,12957,13009, + 13062,13114,13166,13218,13271,13323,13375,13428, + 13480,13533,13585,13637,13690,13742,13795,13847, + 13900,13952,14005,14057,14110,14163,14215,14268, + 14321,14373,14426,14479,14531,14584,14637,14690, + 14743,14795,14848,14901,14954,15007,15060,15113, + 15166,15219,15272,15325,15378,15431,15484,15537, + 15590,15643,15696,15749,15802,15856,15909,15962, + 16015,16069,16122,16175,16229,16282,16335,16389, + 16442,16496,16549,16603,16656,16710,16763,16817, + 16870,16924,16977,17031,17085,17138,17192,17246, + 17300,17353,17407,17461,17515,17569,17623,17677, + 17731,17784,17838,17892,17946,18001,18055,18109, + 18163,18217,18271,18325,18380,18434,18488,18542, + 18597,18651,18705,18760,18814,18868,18923,18977, + 19032,19086,19141,19195,19250,19305,19359,19414, + 19469,19523,19578,19633,19688,19742,19797,19852, + 19907,19962,20017,20072,20127,20182,20237,20292, + 20347,20402,20457,20513,20568,20623,20678,20734, + 20789,20844,20900,20955,21010,21066,21121,21177, + 21232,21288,21343,21399,21455,21510,21566,21622, + 21678,21733,21789,21845,21901,21957,22013,22069, + 22125,22181,22237,22293,22349,22405,22461,22517, + 22573,22630,22686,22742,22799,22855,22911,22968, + 23024,23081,23137,23194,23250,23307,23364,23420, + 23477,23534,23591,23647,23704,23761,23818,23875, + 23932,23989,24046,24103,24160,24217,24274,24331, + 24389,24446,24503,24560,24618,24675,24732,24790, + 24847,24905,24962,25020,25078,25135,25193,25251, + 25308,25366,25424,25482,25540,25598,25656,25714, + 25772,25830,25888,25946,26004,26062,26120,26179, + 26237,26295,26354,26412,26471,26529,26588,26646, + 26705,26763,26822,26881,26940,26998,27057,27116, + 27175,27234,27293,27352,27411,27470,27529,27588, + 27647,27707,27766,27825,27884,27944,28003,28063, + 28122,28182,28241,28301,28361,28420,28480,28540, + 28600,28660,28719,28779,28839,28899,28959,29020, + 29080,29140,29200,29260,29321,29381,29441,29502, + 29562,29623,29683,29744,29805,29865,29926,29987, + 30048,30108,30169,30230,30291,30352,30413,30474, + 30536,30597,30658,30719,30781,30842,30904,30965, + 31026,31088,31150,31211,31273,31335,31396,31458, + 31520,31582,31644,31706,31768,31830,31892,31955, + 32017,32079,32141,32204,32266,32329,32391,32454, + 32516,32579,32642,32705,32767,32830,32893,32956, + 33019,33082,33145,33208,33272,33335,33398,33461, + 33525,33588,33652,33715,33779,33843,33906,33970, + 34034,34098,34162,34225,34289,34354,34418,34482, + 34546,34610,34675,34739,34803,34868,34932,34997, + 35062,35126,35191,35256,35321,35385,35450,35515, + 35580,35646,35711,35776,35841,35907,35972,36037, + 36103,36168,36234,36300,36365,36431,36497,36563, + 36629,36695,36761,36827,36893,36959,37026,37092, + 37158,37225,37291,37358,37425,37491,37558,37625, + 37692,37759,37826,37893,37960,38027,38094,38161, + 38229,38296,38364,38431,38499,38566,38634,38702, + 38770,38837,38905,38973,39042,39110,39178,39246, + 39314,39383,39451,39520,39588,39657,39726,39794, + 39863,39932,40001,40070,40139,40208,40278,40347, + 40416,40486,40555,40625,40694,40764,40834,40904, + 40973,41043,41113,41184,41254,41324,41394,41465, + 41535,41605,41676,41747,41817,41888,41959,42030, + 42101,42172,42243,42314,42385,42457,42528,42600, + 42671,42743,42814,42886,42958,43030,43102,43174, + 43246,43318,43390,43463,43535,43608,43680,43753, + 43826,43898,43971,44044,44117,44190,44263,44337, + 44410,44483,44557,44630,44704,44778,44851,44925, + 44999,45073,45147,45221,45296,45370,45444,45519, + 45593,45668,45743,45818,45892,45967,46042,46118, + 46193,46268,46343,46419,46494,46570,46646,46721, + 46797,46873,46949,47025,47102,47178,47254,47331, + 47407,47484,47560,47637,47714,47791,47868,47945, + 48022,48100,48177,48255,48332,48410,48488,48565, + 48643,48721,48799,48878,48956,49034,49113,49191, + 49270,49349,49427,49506,49585,49664,49744,49823, + 49902,49982,50061,50141,50221,50300,50380,50460, + 50540,50621,50701,50781,50862,50942,51023,51104, + 51185,51266,51347,51428,51509,51591,51672,51754, + 51835,51917,51999,52081,52163,52245,52327,52410, + 52492,52575,52657,52740,52823,52906,52989,53072, + 53156,53239,53322,53406,53490,53574,53657,53741, + 53826,53910,53994,54079,54163,54248,54333,54417, + 54502,54587,54673,54758,54843,54929,55015,55100, + 55186,55272,55358,55444,55531,55617,55704,55790, + 55877,55964,56051,56138,56225,56312,56400,56487, + 56575,56663,56751,56839,56927,57015,57104,57192, + 57281,57369,57458,57547,57636,57725,57815,57904, + 57994,58083,58173,58263,58353,58443,58534,58624, + 58715,58805,58896,58987,59078,59169,59261,59352, + 59444,59535,59627,59719,59811,59903,59996,60088, + 60181,60273,60366,60459,60552,60646,60739,60833, + 60926,61020,61114,61208,61302,61396,61491,61585, + 61680,61775,61870,61965,62060,62156,62251,62347, + 62443,62539,62635,62731,62828,62924,63021,63118, + 63215,63312,63409,63506,63604,63702,63799,63897, + 63996,64094,64192,64291,64389,64488,64587,64687, + 64786,64885,64985,65085,65185,65285,65385,65485, + 65586,65686,65787,65888,65989,66091,66192,66294, + 66396,66498,66600,66702,66804,66907,67010,67113, + 67216,67319,67422,67526,67629,67733,67837,67942, + 68046,68151,68255,68360,68465,68570,68676,68781, + 68887,68993,69099,69205,69312,69418,69525,69632, + 69739,69846,69954,70061,70169,70277,70385,70494, + 70602,70711,70820,70929,71038,71147,71257,71367, + 71477,71587,71697,71808,71918,72029,72140,72252, + 72363,72475,72587,72699,72811,72923,73036,73149, + 73262,73375,73488,73602,73715,73829,73944,74058, + 74172,74287,74402,74517,74633,74748,74864,74980, + 75096,75213,75329,75446,75563,75680,75797,75915, + 76033,76151,76269,76388,76506,76625,76744,76864, + 76983,77103,77223,77343,77463,77584,77705,77826, + 77947,78068,78190,78312,78434,78557,78679,78802, + 78925,79048,79172,79296,79420,79544,79668,79793, + 79918,80043,80168,80294,80420,80546,80672,80799, + 80925,81053,81180,81307,81435,81563,81691,81820, + 81949,82078,82207,82336,82466,82596,82726,82857, + 82987,83118,83250,83381,83513,83645,83777,83910, + 84043,84176,84309,84443,84576,84710,84845,84980, + 85114,85250,85385,85521,85657,85793,85930,86066, + 86204,86341,86479,86616,86755,86893,87032,87171, + 87310,87450,87590,87730,87871,88011,88152,88294, + 88435,88577,88720,88862,89005,89148,89292,89435, + 89579,89724,89868,90013,90158,90304,90450,90596, + 90742,90889,91036,91184,91332,91480,91628,91777, + 91926,92075,92225,92375,92525,92675,92826,92978, + 93129,93281,93434,93586,93739,93892,94046,94200, + 94354,94509,94664,94819,94975,95131,95287,95444, + 95601,95758,95916,96074,96233,96391,96551,96710, + 96870,97030,97191,97352,97513,97675,97837,98000, + 98163,98326,98489,98653,98818,98982,99148,99313, + 99479,99645,99812,99979,100146,100314,100482,100651, + 100820,100990,101159,101330,101500,101671,101843,102015, + 102187,102360,102533,102706,102880,103054,103229,103404, + 103580,103756,103933,104109,104287,104465,104643,104821, + 105000,105180,105360,105540,105721,105902,106084,106266, + 106449,106632,106816,107000,107184,107369,107555,107741, + 107927,108114,108301,108489,108677,108866,109055,109245, + 109435,109626,109817,110008,110200,110393,110586,110780, + 110974,111169,111364,111560,111756,111952,112150,112347, + 112546,112744,112944,113143,113344,113545,113746,113948, + 114151,114354,114557,114761,114966,115171,115377,115583, + 115790,115998,116206,116414,116623,116833,117044,117254, + 117466,117678,117891,118104,118318,118532,118747,118963, + 119179,119396,119613,119831,120050,120269,120489,120709, + 120930,121152,121374,121597,121821,122045,122270,122496, + 122722,122949,123176,123404,123633,123863,124093,124324, + 124555,124787,125020,125254,125488,125723,125959,126195, + 126432,126669,126908,127147,127387,127627,127869,128111, + 128353,128597,128841,129086,129332,129578,129825,130073, + 130322,130571,130821,131072,131324,131576,131830,132084, + 132339,132594,132851,133108,133366,133625,133884,134145, + 134406,134668,134931,135195,135459,135725,135991,136258, + 136526,136795,137065,137335,137607,137879,138152,138426, + 138701,138977,139254,139532,139810,140090,140370,140651, + 140934,141217,141501,141786,142072,142359,142647,142936, + 143226,143517,143808,144101,144395,144690,144986,145282, + 145580,145879,146179,146480,146782,147084,147388,147693, + 148000,148307,148615,148924,149235,149546,149859,150172, + 150487,150803,151120,151438,151757,152077,152399,152722, + 153045,153370,153697,154024,154352,154682,155013,155345, + 155678,156013,156349,156686,157024,157363,157704,158046, + 158389,158734,159079,159427,159775,160125,160476,160828, + 161182,161537,161893,162251,162610,162970,163332,163695, + 164060,164426,164793,165162,165532,165904,166277,166651, + 167027,167405,167784,168164,168546,168930,169315,169701, + 170089,170479,170870,171263,171657,172053,172451,172850, + 173251,173653,174057,174463,174870,175279,175690,176102, + 176516,176932,177349,177769,178190,178612,179037,179463, + 179891,180321,180753,181186,181622,182059,182498,182939, + 183382,183827,184274,184722,185173,185625,186080,186536, + 186995,187455,187918,188382,188849,189318,189789,190261, + 190736,191213,191693,192174,192658,193143,193631,194122, + 194614,195109,195606,196105,196606,197110,197616,198125, + 198636,199149,199664,200182,200703,201226,201751,202279, + 202809,203342,203878,204416,204956,205500,206045,206594, + 207145,207699,208255,208815,209376,209941,210509,211079, + 211652,212228,212807,213389,213973,214561,215151,215745, + 216341,216941,217544,218149,218758,219370,219985,220603, + 221225,221849,222477,223108,223743,224381,225022,225666, + 226314,226966,227621,228279,228941,229606,230275,230948, + 231624,232304,232988,233676,234367,235062,235761,236463, + 237170,237881,238595,239314,240036,240763,241493,242228, + 242967,243711,244458,245210,245966,246727,247492,248261, + 249035,249813,250596,251384,252176,252973,253774,254581, + 255392,256208,257029,257855,258686,259522,260363,261209, + 262060,262917,263779,264646,265519,266397,267280,268169, + 269064,269965,270871,271782,272700,273624,274553,275489, + 276430,277378,278332,279292,280258,281231,282210,283195, + 284188,285186,286192,287204,288223,289249,290282,291322, + 292369,293423,294485,295554,296630,297714,298805,299904, + 301011,302126,303248,304379,305517,306664,307819,308983, + 310154,311335,312524,313721,314928,316143,317368,318601, + 319844,321097,322358,323629,324910,326201,327502,328812, + 330133,331464,332805,334157,335519,336892,338276,339671, + 341078,342495,343924,345364,346816,348280,349756,351244, + 352744,354257,355783,357321,358872,360436,362013,363604, + 365208,366826,368459,370105,371765,373440,375130,376835, + 378555,380290,382040,383807,385589,387387,389202,391034, + 392882,394747,396630,398530,400448,402384,404338,406311, + 408303,410314,412344,414395,416465,418555,420666,422798, + 424951,427125,429321,431540,433781,436045,438332,440643, + 442978,445337,447720,450129,452564,455024,457511,460024, + 462565,465133,467730,470355,473009,475692,478406,481150, + 483925,486732,489571,492443,495348,498287,501261,504269, + 507313,510394,513512,516667,519861,523094,526366,529680, + 533034,536431,539870,543354,546881,550455,554074,557741, + 561456,565221,569035,572901,576818,580789,584815,588896, + 593033,597229,601483,605798,610174,614613,619117,623686, + 628323,633028,637803,642651,647572,652568,657640,662792, + 668024,673338,678737,684223,689797,695462,701219,707072, + 713023,719074,725227,731486,737853,744331,750922,757631, + 764460,771411,778490,785699,793041,800521,808143,815910, + 823827,831898,840127,848520,857081,865817,874730,883829, + 893117,902602,912289,922186,932298,942633,953199,964003, + 975054,986361,997931,1009774,1021901,1034322,1047046,1060087, + 1073455,1087164,1101225,1115654,1130465,1145673,1161294,1177345, + 1193846,1210813,1228269,1246234,1264730,1283783,1303416,1323658, + 1344537,1366084,1388330,1411312,1435065,1459630,1485049,1511367, + 1538632,1566898,1596220,1626658,1658278,1691149,1725348,1760956, + 1798063,1836758,1877161,1919378,1963536,2009771,2058233,2109087, + 2162516,2218719,2277919,2340362,2406322,2476104,2550052,2628549, + 2712030,2800983,2895966,2997613,3106651,3223918,3350381,3487165, + 3635590,3797206,3973855,4167737,4381502,4618375,4882318,5178251, + 5512368,5892567,6329090,6835455,7429880,8137527,8994149,10052327, + 11392683,13145455,15535599,18988036,24413316,34178904,56965752,170910304 +}; + + +int finesine[10240] = +{ + 25,75,125,175,226,276,326,376, + 427,477,527,578,628,678,728,779, + 829,879,929,980,1030,1080,1130,1181, + 1231,1281,1331,1382,1432,1482,1532,1583, + 1633,1683,1733,1784,1834,1884,1934,1985, + 2035,2085,2135,2186,2236,2286,2336,2387, + 2437,2487,2537,2587,2638,2688,2738,2788, + 2839,2889,2939,2989,3039,3090,3140,3190, + 3240,3291,3341,3391,3441,3491,3541,3592, + 3642,3692,3742,3792,3843,3893,3943,3993, + 4043,4093,4144,4194,4244,4294,4344,4394, + 4445,4495,4545,4595,4645,4695,4745,4796, + 4846,4896,4946,4996,5046,5096,5146,5197, + 5247,5297,5347,5397,5447,5497,5547,5597, + 5647,5697,5748,5798,5848,5898,5948,5998, + 6048,6098,6148,6198,6248,6298,6348,6398, + 6448,6498,6548,6598,6648,6698,6748,6798, + 6848,6898,6948,6998,7048,7098,7148,7198, + 7248,7298,7348,7398,7448,7498,7548,7598, + 7648,7697,7747,7797,7847,7897,7947,7997, + 8047,8097,8147,8196,8246,8296,8346,8396, + 8446,8496,8545,8595,8645,8695,8745,8794, + 8844,8894,8944,8994,9043,9093,9143,9193, + 9243,9292,9342,9392,9442,9491,9541,9591, + 9640,9690,9740,9790,9839,9889,9939,9988, + 10038,10088,10137,10187,10237,10286,10336,10386, + 10435,10485,10534,10584,10634,10683,10733,10782, + 10832,10882,10931,10981,11030,11080,11129,11179, + 11228,11278,11327,11377,11426,11476,11525,11575, + 11624,11674,11723,11773,11822,11872,11921,11970, + 12020,12069,12119,12168,12218,12267,12316,12366, + 12415,12464,12514,12563,12612,12662,12711,12760, + 12810,12859,12908,12957,13007,13056,13105,13154, + 13204,13253,13302,13351,13401,13450,13499,13548, + 13597,13647,13696,13745,13794,13843,13892,13941, + 13990,14040,14089,14138,14187,14236,14285,14334, + 14383,14432,14481,14530,14579,14628,14677,14726, + 14775,14824,14873,14922,14971,15020,15069,15118, + 15167,15215,15264,15313,15362,15411,15460,15509, + 15557,15606,15655,15704,15753,15802,15850,15899, + 15948,15997,16045,16094,16143,16191,16240,16289, + 16338,16386,16435,16484,16532,16581,16629,16678, + 16727,16775,16824,16872,16921,16970,17018,17067, + 17115,17164,17212,17261,17309,17358,17406,17455, + 17503,17551,17600,17648,17697,17745,17793,17842, + 17890,17939,17987,18035,18084,18132,18180,18228, + 18277,18325,18373,18421,18470,18518,18566,18614, + 18663,18711,18759,18807,18855,18903,18951,19000, + 19048,19096,19144,19192,19240,19288,19336,19384, + 19432,19480,19528,19576,19624,19672,19720,19768, + 19816,19864,19912,19959,20007,20055,20103,20151, + 20199,20246,20294,20342,20390,20438,20485,20533, + 20581,20629,20676,20724,20772,20819,20867,20915, + 20962,21010,21057,21105,21153,21200,21248,21295, + 21343,21390,21438,21485,21533,21580,21628,21675, + 21723,21770,21817,21865,21912,21960,22007,22054, + 22102,22149,22196,22243,22291,22338,22385,22433, + 22480,22527,22574,22621,22668,22716,22763,22810, + 22857,22904,22951,22998,23045,23092,23139,23186, + 23233,23280,23327,23374,23421,23468,23515,23562, + 23609,23656,23703,23750,23796,23843,23890,23937, + 23984,24030,24077,24124,24171,24217,24264,24311, + 24357,24404,24451,24497,24544,24591,24637,24684, + 24730,24777,24823,24870,24916,24963,25009,25056, + 25102,25149,25195,25241,25288,25334,25381,25427, + 25473,25520,25566,25612,25658,25705,25751,25797, + 25843,25889,25936,25982,26028,26074,26120,26166, + 26212,26258,26304,26350,26396,26442,26488,26534, + 26580,26626,26672,26718,26764,26810,26856,26902, + 26947,26993,27039,27085,27131,27176,27222,27268, + 27313,27359,27405,27450,27496,27542,27587,27633, + 27678,27724,27770,27815,27861,27906,27952,27997, + 28042,28088,28133,28179,28224,28269,28315,28360, + 28405,28451,28496,28541,28586,28632,28677,28722, + 28767,28812,28858,28903,28948,28993,29038,29083, + 29128,29173,29218,29263,29308,29353,29398,29443, + 29488,29533,29577,29622,29667,29712,29757,29801, + 29846,29891,29936,29980,30025,30070,30114,30159, + 30204,30248,30293,30337,30382,30426,30471,30515, + 30560,30604,30649,30693,30738,30782,30826,30871, + 30915,30959,31004,31048,31092,31136,31181,31225, + 31269,31313,31357,31402,31446,31490,31534,31578, + 31622,31666,31710,31754,31798,31842,31886,31930, + 31974,32017,32061,32105,32149,32193,32236,32280, + 32324,32368,32411,32455,32499,32542,32586,32630, + 32673,32717,32760,32804,32847,32891,32934,32978, + 33021,33065,33108,33151,33195,33238,33281,33325, + 33368,33411,33454,33498,33541,33584,33627,33670, + 33713,33756,33799,33843,33886,33929,33972,34015, + 34057,34100,34143,34186,34229,34272,34315,34358, + 34400,34443,34486,34529,34571,34614,34657,34699, + 34742,34785,34827,34870,34912,34955,34997,35040, + 35082,35125,35167,35210,35252,35294,35337,35379, + 35421,35464,35506,35548,35590,35633,35675,35717, + 35759,35801,35843,35885,35927,35969,36011,36053, + 36095,36137,36179,36221,36263,36305,36347,36388, + 36430,36472,36514,36555,36597,36639,36681,36722, + 36764,36805,36847,36889,36930,36972,37013,37055, + 37096,37137,37179,37220,37262,37303,37344,37386, + 37427,37468,37509,37551,37592,37633,37674,37715, + 37756,37797,37838,37879,37920,37961,38002,38043, + 38084,38125,38166,38207,38248,38288,38329,38370, + 38411,38451,38492,38533,38573,38614,38655,38695, + 38736,38776,38817,38857,38898,38938,38979,39019, + 39059,39100,39140,39180,39221,39261,39301,39341, + 39382,39422,39462,39502,39542,39582,39622,39662, + 39702,39742,39782,39822,39862,39902,39942,39982, + 40021,40061,40101,40141,40180,40220,40260,40300, + 40339,40379,40418,40458,40497,40537,40576,40616, + 40655,40695,40734,40773,40813,40852,40891,40931, + 40970,41009,41048,41087,41127,41166,41205,41244, + 41283,41322,41361,41400,41439,41478,41517,41556, + 41595,41633,41672,41711,41750,41788,41827,41866, + 41904,41943,41982,42020,42059,42097,42136,42174, + 42213,42251,42290,42328,42366,42405,42443,42481, + 42520,42558,42596,42634,42672,42711,42749,42787, + 42825,42863,42901,42939,42977,43015,43053,43091, + 43128,43166,43204,43242,43280,43317,43355,43393, + 43430,43468,43506,43543,43581,43618,43656,43693, + 43731,43768,43806,43843,43880,43918,43955,43992, + 44029,44067,44104,44141,44178,44215,44252,44289, + 44326,44363,44400,44437,44474,44511,44548,44585, + 44622,44659,44695,44732,44769,44806,44842,44879, + 44915,44952,44989,45025,45062,45098,45135,45171, + 45207,45244,45280,45316,45353,45389,45425,45462, + 45498,45534,45570,45606,45642,45678,45714,45750, + 45786,45822,45858,45894,45930,45966,46002,46037, + 46073,46109,46145,46180,46216,46252,46287,46323, + 46358,46394,46429,46465,46500,46536,46571,46606, + 46642,46677,46712,46747,46783,46818,46853,46888, + 46923,46958,46993,47028,47063,47098,47133,47168, + 47203,47238,47273,47308,47342,47377,47412,47446, + 47481,47516,47550,47585,47619,47654,47688,47723, + 47757,47792,47826,47860,47895,47929,47963,47998, + 48032,48066,48100,48134,48168,48202,48237,48271, + 48305,48338,48372,48406,48440,48474,48508,48542, + 48575,48609,48643,48676,48710,48744,48777,48811, + 48844,48878,48911,48945,48978,49012,49045,49078, + 49112,49145,49178,49211,49244,49278,49311,49344, + 49377,49410,49443,49476,49509,49542,49575,49608, + 49640,49673,49706,49739,49771,49804,49837,49869, + 49902,49935,49967,50000,50032,50065,50097,50129, + 50162,50194,50226,50259,50291,50323,50355,50387, + 50420,50452,50484,50516,50548,50580,50612,50644, + 50675,50707,50739,50771,50803,50834,50866,50898, + 50929,50961,50993,51024,51056,51087,51119,51150, + 51182,51213,51244,51276,51307,51338,51369,51401, + 51432,51463,51494,51525,51556,51587,51618,51649, + 51680,51711,51742,51773,51803,51834,51865,51896, + 51926,51957,51988,52018,52049,52079,52110,52140, + 52171,52201,52231,52262,52292,52322,52353,52383, + 52413,52443,52473,52503,52534,52564,52594,52624, + 52653,52683,52713,52743,52773,52803,52832,52862, + 52892,52922,52951,52981,53010,53040,53069,53099, + 53128,53158,53187,53216,53246,53275,53304,53334, + 53363,53392,53421,53450,53479,53508,53537,53566, + 53595,53624,53653,53682,53711,53739,53768,53797, + 53826,53854,53883,53911,53940,53969,53997,54026, + 54054,54082,54111,54139,54167,54196,54224,54252, + 54280,54308,54337,54365,54393,54421,54449,54477, + 54505,54533,54560,54588,54616,54644,54672,54699, + 54727,54755,54782,54810,54837,54865,54892,54920, + 54947,54974,55002,55029,55056,55084,55111,55138, + 55165,55192,55219,55246,55274,55300,55327,55354, + 55381,55408,55435,55462,55489,55515,55542,55569, + 55595,55622,55648,55675,55701,55728,55754,55781, + 55807,55833,55860,55886,55912,55938,55965,55991, + 56017,56043,56069,56095,56121,56147,56173,56199, + 56225,56250,56276,56302,56328,56353,56379,56404, + 56430,56456,56481,56507,56532,56557,56583,56608, + 56633,56659,56684,56709,56734,56760,56785,56810, + 56835,56860,56885,56910,56935,56959,56984,57009, + 57034,57059,57083,57108,57133,57157,57182,57206, + 57231,57255,57280,57304,57329,57353,57377,57402, + 57426,57450,57474,57498,57522,57546,57570,57594, + 57618,57642,57666,57690,57714,57738,57762,57785, + 57809,57833,57856,57880,57903,57927,57950,57974, + 57997,58021,58044,58067,58091,58114,58137,58160, + 58183,58207,58230,58253,58276,58299,58322,58345, + 58367,58390,58413,58436,58459,58481,58504,58527, + 58549,58572,58594,58617,58639,58662,58684,58706, + 58729,58751,58773,58795,58818,58840,58862,58884, + 58906,58928,58950,58972,58994,59016,59038,59059, + 59081,59103,59125,59146,59168,59190,59211,59233, + 59254,59276,59297,59318,59340,59361,59382,59404, + 59425,59446,59467,59488,59509,59530,59551,59572, + 59593,59614,59635,59656,59677,59697,59718,59739, + 59759,59780,59801,59821,59842,59862,59883,59903, + 59923,59944,59964,59984,60004,60025,60045,60065, + 60085,60105,60125,60145,60165,60185,60205,60225, + 60244,60264,60284,60304,60323,60343,60363,60382, + 60402,60421,60441,60460,60479,60499,60518,60537, + 60556,60576,60595,60614,60633,60652,60671,60690, + 60709,60728,60747,60766,60785,60803,60822,60841, + 60859,60878,60897,60915,60934,60952,60971,60989, + 61007,61026,61044,61062,61081,61099,61117,61135, + 61153,61171,61189,61207,61225,61243,61261,61279, + 61297,61314,61332,61350,61367,61385,61403,61420, + 61438,61455,61473,61490,61507,61525,61542,61559, + 61577,61594,61611,61628,61645,61662,61679,61696, + 61713,61730,61747,61764,61780,61797,61814,61831, + 61847,61864,61880,61897,61913,61930,61946,61963, + 61979,61995,62012,62028,62044,62060,62076,62092, + 62108,62125,62141,62156,62172,62188,62204,62220, + 62236,62251,62267,62283,62298,62314,62329,62345, + 62360,62376,62391,62407,62422,62437,62453,62468, + 62483,62498,62513,62528,62543,62558,62573,62588, + 62603,62618,62633,62648,62662,62677,62692,62706, + 62721,62735,62750,62764,62779,62793,62808,62822, + 62836,62850,62865,62879,62893,62907,62921,62935, + 62949,62963,62977,62991,63005,63019,63032,63046, + 63060,63074,63087,63101,63114,63128,63141,63155, + 63168,63182,63195,63208,63221,63235,63248,63261, + 63274,63287,63300,63313,63326,63339,63352,63365, + 63378,63390,63403,63416,63429,63441,63454,63466, + 63479,63491,63504,63516,63528,63541,63553,63565, + 63578,63590,63602,63614,63626,63638,63650,63662, + 63674,63686,63698,63709,63721,63733,63745,63756, + 63768,63779,63791,63803,63814,63825,63837,63848, + 63859,63871,63882,63893,63904,63915,63927,63938, + 63949,63960,63971,63981,63992,64003,64014,64025, + 64035,64046,64057,64067,64078,64088,64099,64109, + 64120,64130,64140,64151,64161,64171,64181,64192, + 64202,64212,64222,64232,64242,64252,64261,64271, + 64281,64291,64301,64310,64320,64330,64339,64349, + 64358,64368,64377,64387,64396,64405,64414,64424, + 64433,64442,64451,64460,64469,64478,64487,64496, + 64505,64514,64523,64532,64540,64549,64558,64566, + 64575,64584,64592,64601,64609,64617,64626,64634, + 64642,64651,64659,64667,64675,64683,64691,64699, + 64707,64715,64723,64731,64739,64747,64754,64762, + 64770,64777,64785,64793,64800,64808,64815,64822, + 64830,64837,64844,64852,64859,64866,64873,64880, + 64887,64895,64902,64908,64915,64922,64929,64936, + 64943,64949,64956,64963,64969,64976,64982,64989, + 64995,65002,65008,65015,65021,65027,65033,65040, + 65046,65052,65058,65064,65070,65076,65082,65088, + 65094,65099,65105,65111,65117,65122,65128,65133, + 65139,65144,65150,65155,65161,65166,65171,65177, + 65182,65187,65192,65197,65202,65207,65212,65217, + 65222,65227,65232,65237,65242,65246,65251,65256, + 65260,65265,65270,65274,65279,65283,65287,65292, + 65296,65300,65305,65309,65313,65317,65321,65325, + 65329,65333,65337,65341,65345,65349,65352,65356, + 65360,65363,65367,65371,65374,65378,65381,65385, + 65388,65391,65395,65398,65401,65404,65408,65411, + 65414,65417,65420,65423,65426,65429,65431,65434, + 65437,65440,65442,65445,65448,65450,65453,65455, + 65458,65460,65463,65465,65467,65470,65472,65474, + 65476,65478,65480,65482,65484,65486,65488,65490, + 65492,65494,65496,65497,65499,65501,65502,65504, + 65505,65507,65508,65510,65511,65513,65514,65515, + 65516,65518,65519,65520,65521,65522,65523,65524, + 65525,65526,65527,65527,65528,65529,65530,65530, + 65531,65531,65532,65532,65533,65533,65534,65534, + 65534,65535,65535,65535,65535,65535,65535,65535, + 65535,65535,65535,65535,65535,65535,65535,65534, + 65534,65534,65533,65533,65532,65532,65531,65531, + 65530,65530,65529,65528,65527,65527,65526,65525, + 65524,65523,65522,65521,65520,65519,65518,65516, + 65515,65514,65513,65511,65510,65508,65507,65505, + 65504,65502,65501,65499,65497,65496,65494,65492, + 65490,65488,65486,65484,65482,65480,65478,65476, + 65474,65472,65470,65467,65465,65463,65460,65458, + 65455,65453,65450,65448,65445,65442,65440,65437, + 65434,65431,65429,65426,65423,65420,65417,65414, + 65411,65408,65404,65401,65398,65395,65391,65388, + 65385,65381,65378,65374,65371,65367,65363,65360, + 65356,65352,65349,65345,65341,65337,65333,65329, + 65325,65321,65317,65313,65309,65305,65300,65296, + 65292,65287,65283,65279,65274,65270,65265,65260, + 65256,65251,65246,65242,65237,65232,65227,65222, + 65217,65212,65207,65202,65197,65192,65187,65182, + 65177,65171,65166,65161,65155,65150,65144,65139, + 65133,65128,65122,65117,65111,65105,65099,65094, + 65088,65082,65076,65070,65064,65058,65052,65046, + 65040,65033,65027,65021,65015,65008,65002,64995, + 64989,64982,64976,64969,64963,64956,64949,64943, + 64936,64929,64922,64915,64908,64902,64895,64887, + 64880,64873,64866,64859,64852,64844,64837,64830, + 64822,64815,64808,64800,64793,64785,64777,64770, + 64762,64754,64747,64739,64731,64723,64715,64707, + 64699,64691,64683,64675,64667,64659,64651,64642, + 64634,64626,64617,64609,64600,64592,64584,64575, + 64566,64558,64549,64540,64532,64523,64514,64505, + 64496,64487,64478,64469,64460,64451,64442,64433, + 64424,64414,64405,64396,64387,64377,64368,64358, + 64349,64339,64330,64320,64310,64301,64291,64281, + 64271,64261,64252,64242,64232,64222,64212,64202, + 64192,64181,64171,64161,64151,64140,64130,64120, + 64109,64099,64088,64078,64067,64057,64046,64035, + 64025,64014,64003,63992,63981,63971,63960,63949, + 63938,63927,63915,63904,63893,63882,63871,63859, + 63848,63837,63825,63814,63803,63791,63779,63768, + 63756,63745,63733,63721,63709,63698,63686,63674, + 63662,63650,63638,63626,63614,63602,63590,63578, + 63565,63553,63541,63528,63516,63504,63491,63479, + 63466,63454,63441,63429,63416,63403,63390,63378, + 63365,63352,63339,63326,63313,63300,63287,63274, + 63261,63248,63235,63221,63208,63195,63182,63168, + 63155,63141,63128,63114,63101,63087,63074,63060, + 63046,63032,63019,63005,62991,62977,62963,62949, + 62935,62921,62907,62893,62879,62865,62850,62836, + 62822,62808,62793,62779,62764,62750,62735,62721, + 62706,62692,62677,62662,62648,62633,62618,62603, + 62588,62573,62558,62543,62528,62513,62498,62483, + 62468,62453,62437,62422,62407,62391,62376,62360, + 62345,62329,62314,62298,62283,62267,62251,62236, + 62220,62204,62188,62172,62156,62141,62125,62108, + 62092,62076,62060,62044,62028,62012,61995,61979, + 61963,61946,61930,61913,61897,61880,61864,61847, + 61831,61814,61797,61780,61764,61747,61730,61713, + 61696,61679,61662,61645,61628,61611,61594,61577, + 61559,61542,61525,61507,61490,61473,61455,61438, + 61420,61403,61385,61367,61350,61332,61314,61297, + 61279,61261,61243,61225,61207,61189,61171,61153, + 61135,61117,61099,61081,61062,61044,61026,61007, + 60989,60971,60952,60934,60915,60897,60878,60859, + 60841,60822,60803,60785,60766,60747,60728,60709, + 60690,60671,60652,60633,60614,60595,60576,60556, + 60537,60518,60499,60479,60460,60441,60421,60402, + 60382,60363,60343,60323,60304,60284,60264,60244, + 60225,60205,60185,60165,60145,60125,60105,60085, + 60065,60045,60025,60004,59984,59964,59944,59923, + 59903,59883,59862,59842,59821,59801,59780,59759, + 59739,59718,59697,59677,59656,59635,59614,59593, + 59572,59551,59530,59509,59488,59467,59446,59425, + 59404,59382,59361,59340,59318,59297,59276,59254, + 59233,59211,59190,59168,59146,59125,59103,59081, + 59059,59038,59016,58994,58972,58950,58928,58906, + 58884,58862,58840,58818,58795,58773,58751,58729, + 58706,58684,58662,58639,58617,58594,58572,58549, + 58527,58504,58481,58459,58436,58413,58390,58367, + 58345,58322,58299,58276,58253,58230,58207,58183, + 58160,58137,58114,58091,58067,58044,58021,57997, + 57974,57950,57927,57903,57880,57856,57833,57809, + 57785,57762,57738,57714,57690,57666,57642,57618, + 57594,57570,57546,57522,57498,57474,57450,57426, + 57402,57377,57353,57329,57304,57280,57255,57231, + 57206,57182,57157,57133,57108,57083,57059,57034, + 57009,56984,56959,56935,56910,56885,56860,56835, + 56810,56785,56760,56734,56709,56684,56659,56633, + 56608,56583,56557,56532,56507,56481,56456,56430, + 56404,56379,56353,56328,56302,56276,56250,56225, + 56199,56173,56147,56121,56095,56069,56043,56017, + 55991,55965,55938,55912,55886,55860,55833,55807, + 55781,55754,55728,55701,55675,55648,55622,55595, + 55569,55542,55515,55489,55462,55435,55408,55381, + 55354,55327,55300,55274,55246,55219,55192,55165, + 55138,55111,55084,55056,55029,55002,54974,54947, + 54920,54892,54865,54837,54810,54782,54755,54727, + 54699,54672,54644,54616,54588,54560,54533,54505, + 54477,54449,54421,54393,54365,54337,54308,54280, + 54252,54224,54196,54167,54139,54111,54082,54054, + 54026,53997,53969,53940,53911,53883,53854,53826, + 53797,53768,53739,53711,53682,53653,53624,53595, + 53566,53537,53508,53479,53450,53421,53392,53363, + 53334,53304,53275,53246,53216,53187,53158,53128, + 53099,53069,53040,53010,52981,52951,52922,52892, + 52862,52832,52803,52773,52743,52713,52683,52653, + 52624,52594,52564,52534,52503,52473,52443,52413, + 52383,52353,52322,52292,52262,52231,52201,52171, + 52140,52110,52079,52049,52018,51988,51957,51926, + 51896,51865,51834,51803,51773,51742,51711,51680, + 51649,51618,51587,51556,51525,51494,51463,51432, + 51401,51369,51338,51307,51276,51244,51213,51182, + 51150,51119,51087,51056,51024,50993,50961,50929, + 50898,50866,50834,50803,50771,50739,50707,50675, + 50644,50612,50580,50548,50516,50484,50452,50420, + 50387,50355,50323,50291,50259,50226,50194,50162, + 50129,50097,50065,50032,50000,49967,49935,49902, + 49869,49837,49804,49771,49739,49706,49673,49640, + 49608,49575,49542,49509,49476,49443,49410,49377, + 49344,49311,49278,49244,49211,49178,49145,49112, + 49078,49045,49012,48978,48945,48911,48878,48844, + 48811,48777,48744,48710,48676,48643,48609,48575, + 48542,48508,48474,48440,48406,48372,48338,48304, + 48271,48237,48202,48168,48134,48100,48066,48032, + 47998,47963,47929,47895,47860,47826,47792,47757, + 47723,47688,47654,47619,47585,47550,47516,47481, + 47446,47412,47377,47342,47308,47273,47238,47203, + 47168,47133,47098,47063,47028,46993,46958,46923, + 46888,46853,46818,46783,46747,46712,46677,46642, + 46606,46571,46536,46500,46465,46429,46394,46358, + 46323,46287,46252,46216,46180,46145,46109,46073, + 46037,46002,45966,45930,45894,45858,45822,45786, + 45750,45714,45678,45642,45606,45570,45534,45498, + 45462,45425,45389,45353,45316,45280,45244,45207, + 45171,45135,45098,45062,45025,44989,44952,44915, + 44879,44842,44806,44769,44732,44695,44659,44622, + 44585,44548,44511,44474,44437,44400,44363,44326, + 44289,44252,44215,44178,44141,44104,44067,44029, + 43992,43955,43918,43880,43843,43806,43768,43731, + 43693,43656,43618,43581,43543,43506,43468,43430, + 43393,43355,43317,43280,43242,43204,43166,43128, + 43091,43053,43015,42977,42939,42901,42863,42825, + 42787,42749,42711,42672,42634,42596,42558,42520, + 42481,42443,42405,42366,42328,42290,42251,42213, + 42174,42136,42097,42059,42020,41982,41943,41904, + 41866,41827,41788,41750,41711,41672,41633,41595, + 41556,41517,41478,41439,41400,41361,41322,41283, + 41244,41205,41166,41127,41088,41048,41009,40970, + 40931,40891,40852,40813,40773,40734,40695,40655, + 40616,40576,40537,40497,40458,40418,40379,40339, + 40300,40260,40220,40180,40141,40101,40061,40021, + 39982,39942,39902,39862,39822,39782,39742,39702, + 39662,39622,39582,39542,39502,39462,39422,39382, + 39341,39301,39261,39221,39180,39140,39100,39059, + 39019,38979,38938,38898,38857,38817,38776,38736, + 38695,38655,38614,38573,38533,38492,38451,38411, + 38370,38329,38288,38248,38207,38166,38125,38084, + 38043,38002,37961,37920,37879,37838,37797,37756, + 37715,37674,37633,37592,37551,37509,37468,37427, + 37386,37344,37303,37262,37220,37179,37137,37096, + 37055,37013,36972,36930,36889,36847,36805,36764, + 36722,36681,36639,36597,36556,36514,36472,36430, + 36388,36347,36305,36263,36221,36179,36137,36095, + 36053,36011,35969,35927,35885,35843,35801,35759, + 35717,35675,35633,35590,35548,35506,35464,35421, + 35379,35337,35294,35252,35210,35167,35125,35082, + 35040,34997,34955,34912,34870,34827,34785,34742, + 34699,34657,34614,34571,34529,34486,34443,34400, + 34358,34315,34272,34229,34186,34143,34100,34057, + 34015,33972,33929,33886,33843,33799,33756,33713, + 33670,33627,33584,33541,33498,33454,33411,33368, + 33325,33281,33238,33195,33151,33108,33065,33021, + 32978,32934,32891,32847,32804,32760,32717,32673, + 32630,32586,32542,32499,32455,32411,32368,32324, + 32280,32236,32193,32149,32105,32061,32017,31974, + 31930,31886,31842,31798,31754,31710,31666,31622, + 31578,31534,31490,31446,31402,31357,31313,31269, + 31225,31181,31136,31092,31048,31004,30959,30915, + 30871,30826,30782,30738,30693,30649,30604,30560, + 30515,30471,30426,30382,30337,30293,30248,30204, + 30159,30114,30070,30025,29980,29936,29891,29846, + 29801,29757,29712,29667,29622,29577,29533,29488, + 29443,29398,29353,29308,29263,29218,29173,29128, + 29083,29038,28993,28948,28903,28858,28812,28767, + 28722,28677,28632,28586,28541,28496,28451,28405, + 28360,28315,28269,28224,28179,28133,28088,28042, + 27997,27952,27906,27861,27815,27770,27724,27678, + 27633,27587,27542,27496,27450,27405,27359,27313, + 27268,27222,27176,27131,27085,27039,26993,26947, + 26902,26856,26810,26764,26718,26672,26626,26580, + 26534,26488,26442,26396,26350,26304,26258,26212, + 26166,26120,26074,26028,25982,25936,25889,25843, + 25797,25751,25705,25658,25612,25566,25520,25473, + 25427,25381,25334,25288,25241,25195,25149,25102, + 25056,25009,24963,24916,24870,24823,24777,24730, + 24684,24637,24591,24544,24497,24451,24404,24357, + 24311,24264,24217,24171,24124,24077,24030,23984, + 23937,23890,23843,23796,23750,23703,23656,23609, + 23562,23515,23468,23421,23374,23327,23280,23233, + 23186,23139,23092,23045,22998,22951,22904,22857, + 22810,22763,22716,22668,22621,22574,22527,22480, + 22433,22385,22338,22291,22243,22196,22149,22102, + 22054,22007,21960,21912,21865,21817,21770,21723, + 21675,21628,21580,21533,21485,21438,21390,21343, + 21295,21248,21200,21153,21105,21057,21010,20962, + 20915,20867,20819,20772,20724,20676,20629,20581, + 20533,20485,20438,20390,20342,20294,20246,20199, + 20151,20103,20055,20007,19959,19912,19864,19816, + 19768,19720,19672,19624,19576,19528,19480,19432, + 19384,19336,19288,19240,19192,19144,19096,19048, + 19000,18951,18903,18855,18807,18759,18711,18663, + 18614,18566,18518,18470,18421,18373,18325,18277, + 18228,18180,18132,18084,18035,17987,17939,17890, + 17842,17793,17745,17697,17648,17600,17551,17503, + 17455,17406,17358,17309,17261,17212,17164,17115, + 17067,17018,16970,16921,16872,16824,16775,16727, + 16678,16629,16581,16532,16484,16435,16386,16338, + 16289,16240,16191,16143,16094,16045,15997,15948, + 15899,15850,15802,15753,15704,15655,15606,15557, + 15509,15460,15411,15362,15313,15264,15215,15167, + 15118,15069,15020,14971,14922,14873,14824,14775, + 14726,14677,14628,14579,14530,14481,14432,14383, + 14334,14285,14236,14187,14138,14089,14040,13990, + 13941,13892,13843,13794,13745,13696,13646,13597, + 13548,13499,13450,13401,13351,13302,13253,13204, + 13154,13105,13056,13007,12957,12908,12859,12810, + 12760,12711,12662,12612,12563,12514,12464,12415, + 12366,12316,12267,12218,12168,12119,12069,12020, + 11970,11921,11872,11822,11773,11723,11674,11624, + 11575,11525,11476,11426,11377,11327,11278,11228, + 11179,11129,11080,11030,10981,10931,10882,10832, + 10782,10733,10683,10634,10584,10534,10485,10435, + 10386,10336,10286,10237,10187,10137,10088,10038, + 9988,9939,9889,9839,9790,9740,9690,9640, + 9591,9541,9491,9442,9392,9342,9292,9243, + 9193,9143,9093,9043,8994,8944,8894,8844, + 8794,8745,8695,8645,8595,8545,8496,8446, + 8396,8346,8296,8246,8196,8147,8097,8047, + 7997,7947,7897,7847,7797,7747,7697,7648, + 7598,7548,7498,7448,7398,7348,7298,7248, + 7198,7148,7098,7048,6998,6948,6898,6848, + 6798,6748,6698,6648,6598,6548,6498,6448, + 6398,6348,6298,6248,6198,6148,6098,6048, + 5998,5948,5898,5848,5798,5748,5697,5647, + 5597,5547,5497,5447,5397,5347,5297,5247, + 5197,5146,5096,5046,4996,4946,4896,4846, + 4796,4745,4695,4645,4595,4545,4495,4445, + 4394,4344,4294,4244,4194,4144,4093,4043, + 3993,3943,3893,3843,3792,3742,3692,3642, + 3592,3541,3491,3441,3391,3341,3291,3240, + 3190,3140,3090,3039,2989,2939,2889,2839, + 2788,2738,2688,2638,2587,2537,2487,2437, + 2387,2336,2286,2236,2186,2135,2085,2035, + 1985,1934,1884,1834,1784,1733,1683,1633, + 1583,1532,1482,1432,1382,1331,1281,1231, + 1181,1130,1080,1030,980,929,879,829, + 779,728,678,628,578,527,477,427, + 376,326,276,226,175,125,75,25, + -25,-75,-125,-175,-226,-276,-326,-376, + -427,-477,-527,-578,-628,-678,-728,-779, + -829,-879,-929,-980,-1030,-1080,-1130,-1181, + -1231,-1281,-1331,-1382,-1432,-1482,-1532,-1583, + -1633,-1683,-1733,-1784,-1834,-1884,-1934,-1985, + -2035,-2085,-2135,-2186,-2236,-2286,-2336,-2387, + -2437,-2487,-2537,-2588,-2638,-2688,-2738,-2788, + -2839,-2889,-2939,-2989,-3039,-3090,-3140,-3190, + -3240,-3291,-3341,-3391,-3441,-3491,-3541,-3592, + -3642,-3692,-3742,-3792,-3843,-3893,-3943,-3993, + -4043,-4093,-4144,-4194,-4244,-4294,-4344,-4394, + -4445,-4495,-4545,-4595,-4645,-4695,-4745,-4796, + -4846,-4896,-4946,-4996,-5046,-5096,-5146,-5197, + -5247,-5297,-5347,-5397,-5447,-5497,-5547,-5597, + -5647,-5697,-5748,-5798,-5848,-5898,-5948,-5998, + -6048,-6098,-6148,-6198,-6248,-6298,-6348,-6398, + -6448,-6498,-6548,-6598,-6648,-6698,-6748,-6798, + -6848,-6898,-6948,-6998,-7048,-7098,-7148,-7198, + -7248,-7298,-7348,-7398,-7448,-7498,-7548,-7598, + -7648,-7697,-7747,-7797,-7847,-7897,-7947,-7997, + -8047,-8097,-8147,-8196,-8246,-8296,-8346,-8396, + -8446,-8496,-8545,-8595,-8645,-8695,-8745,-8794, + -8844,-8894,-8944,-8994,-9043,-9093,-9143,-9193, + -9243,-9292,-9342,-9392,-9442,-9491,-9541,-9591, + -9640,-9690,-9740,-9790,-9839,-9889,-9939,-9988, + -10038,-10088,-10137,-10187,-10237,-10286,-10336,-10386, + -10435,-10485,-10534,-10584,-10634,-10683,-10733,-10782, + -10832,-10882,-10931,-10981,-11030,-11080,-11129,-11179, + -11228,-11278,-11327,-11377,-11426,-11476,-11525,-11575, + -11624,-11674,-11723,-11773,-11822,-11872,-11921,-11970, + -12020,-12069,-12119,-12168,-12218,-12267,-12316,-12366, + -12415,-12464,-12514,-12563,-12612,-12662,-12711,-12760, + -12810,-12859,-12908,-12957,-13007,-13056,-13105,-13154, + -13204,-13253,-13302,-13351,-13401,-13450,-13499,-13548, + -13597,-13647,-13696,-13745,-13794,-13843,-13892,-13941, + -13990,-14040,-14089,-14138,-14187,-14236,-14285,-14334, + -14383,-14432,-14481,-14530,-14579,-14628,-14677,-14726, + -14775,-14824,-14873,-14922,-14971,-15020,-15069,-15118, + -15167,-15215,-15264,-15313,-15362,-15411,-15460,-15509, + -15557,-15606,-15655,-15704,-15753,-15802,-15850,-15899, + -15948,-15997,-16045,-16094,-16143,-16191,-16240,-16289, + -16338,-16386,-16435,-16484,-16532,-16581,-16629,-16678, + -16727,-16775,-16824,-16872,-16921,-16970,-17018,-17067, + -17115,-17164,-17212,-17261,-17309,-17358,-17406,-17455, + -17503,-17551,-17600,-17648,-17697,-17745,-17793,-17842, + -17890,-17939,-17987,-18035,-18084,-18132,-18180,-18228, + -18277,-18325,-18373,-18421,-18470,-18518,-18566,-18614, + -18663,-18711,-18759,-18807,-18855,-18903,-18951,-19000, + -19048,-19096,-19144,-19192,-19240,-19288,-19336,-19384, + -19432,-19480,-19528,-19576,-19624,-19672,-19720,-19768, + -19816,-19864,-19912,-19959,-20007,-20055,-20103,-20151, + -20199,-20246,-20294,-20342,-20390,-20438,-20485,-20533, + -20581,-20629,-20676,-20724,-20772,-20819,-20867,-20915, + -20962,-21010,-21057,-21105,-21153,-21200,-21248,-21295, + -21343,-21390,-21438,-21485,-21533,-21580,-21628,-21675, + -21723,-21770,-21817,-21865,-21912,-21960,-22007,-22054, + -22102,-22149,-22196,-22243,-22291,-22338,-22385,-22433, + -22480,-22527,-22574,-22621,-22668,-22716,-22763,-22810, + -22857,-22904,-22951,-22998,-23045,-23092,-23139,-23186, + -23233,-23280,-23327,-23374,-23421,-23468,-23515,-23562, + -23609,-23656,-23703,-23750,-23796,-23843,-23890,-23937, + -23984,-24030,-24077,-24124,-24171,-24217,-24264,-24311, + -24357,-24404,-24451,-24497,-24544,-24591,-24637,-24684, + -24730,-24777,-24823,-24870,-24916,-24963,-25009,-25056, + -25102,-25149,-25195,-25241,-25288,-25334,-25381,-25427, + -25473,-25520,-25566,-25612,-25658,-25705,-25751,-25797, + -25843,-25889,-25936,-25982,-26028,-26074,-26120,-26166, + -26212,-26258,-26304,-26350,-26396,-26442,-26488,-26534, + -26580,-26626,-26672,-26718,-26764,-26810,-26856,-26902, + -26947,-26993,-27039,-27085,-27131,-27176,-27222,-27268, + -27313,-27359,-27405,-27450,-27496,-27542,-27587,-27633, + -27678,-27724,-27770,-27815,-27861,-27906,-27952,-27997, + -28042,-28088,-28133,-28179,-28224,-28269,-28315,-28360, + -28405,-28451,-28496,-28541,-28586,-28632,-28677,-28722, + -28767,-28812,-28858,-28903,-28948,-28993,-29038,-29083, + -29128,-29173,-29218,-29263,-29308,-29353,-29398,-29443, + -29488,-29533,-29577,-29622,-29667,-29712,-29757,-29801, + -29846,-29891,-29936,-29980,-30025,-30070,-30114,-30159, + -30204,-30248,-30293,-30337,-30382,-30426,-30471,-30515, + -30560,-30604,-30649,-30693,-30738,-30782,-30826,-30871, + -30915,-30959,-31004,-31048,-31092,-31136,-31181,-31225, + -31269,-31313,-31357,-31402,-31446,-31490,-31534,-31578, + -31622,-31666,-31710,-31754,-31798,-31842,-31886,-31930, + -31974,-32017,-32061,-32105,-32149,-32193,-32236,-32280, + -32324,-32368,-32411,-32455,-32499,-32542,-32586,-32630, + -32673,-32717,-32760,-32804,-32847,-32891,-32934,-32978, + -33021,-33065,-33108,-33151,-33195,-33238,-33281,-33325, + -33368,-33411,-33454,-33498,-33541,-33584,-33627,-33670, + -33713,-33756,-33799,-33843,-33886,-33929,-33972,-34015, + -34057,-34100,-34143,-34186,-34229,-34272,-34315,-34358, + -34400,-34443,-34486,-34529,-34571,-34614,-34657,-34699, + -34742,-34785,-34827,-34870,-34912,-34955,-34997,-35040, + -35082,-35125,-35167,-35210,-35252,-35294,-35337,-35379, + -35421,-35464,-35506,-35548,-35590,-35633,-35675,-35717, + -35759,-35801,-35843,-35885,-35927,-35969,-36011,-36053, + -36095,-36137,-36179,-36221,-36263,-36305,-36347,-36388, + -36430,-36472,-36514,-36555,-36597,-36639,-36681,-36722, + -36764,-36805,-36847,-36889,-36930,-36972,-37013,-37055, + -37096,-37137,-37179,-37220,-37262,-37303,-37344,-37386, + -37427,-37468,-37509,-37551,-37592,-37633,-37674,-37715, + -37756,-37797,-37838,-37879,-37920,-37961,-38002,-38043, + -38084,-38125,-38166,-38207,-38248,-38288,-38329,-38370, + -38411,-38451,-38492,-38533,-38573,-38614,-38655,-38695, + -38736,-38776,-38817,-38857,-38898,-38938,-38979,-39019, + -39059,-39100,-39140,-39180,-39221,-39261,-39301,-39341, + -39382,-39422,-39462,-39502,-39542,-39582,-39622,-39662, + -39702,-39742,-39782,-39822,-39862,-39902,-39942,-39982, + -40021,-40061,-40101,-40141,-40180,-40220,-40260,-40299, + -40339,-40379,-40418,-40458,-40497,-40537,-40576,-40616, + -40655,-40695,-40734,-40773,-40813,-40852,-40891,-40931, + -40970,-41009,-41048,-41087,-41127,-41166,-41205,-41244, + -41283,-41322,-41361,-41400,-41439,-41478,-41517,-41556, + -41595,-41633,-41672,-41711,-41750,-41788,-41827,-41866, + -41904,-41943,-41982,-42020,-42059,-42097,-42136,-42174, + -42213,-42251,-42290,-42328,-42366,-42405,-42443,-42481, + -42520,-42558,-42596,-42634,-42672,-42711,-42749,-42787, + -42825,-42863,-42901,-42939,-42977,-43015,-43053,-43091, + -43128,-43166,-43204,-43242,-43280,-43317,-43355,-43393, + -43430,-43468,-43506,-43543,-43581,-43618,-43656,-43693, + -43731,-43768,-43806,-43843,-43880,-43918,-43955,-43992, + -44029,-44067,-44104,-44141,-44178,-44215,-44252,-44289, + -44326,-44363,-44400,-44437,-44474,-44511,-44548,-44585, + -44622,-44659,-44695,-44732,-44769,-44806,-44842,-44879, + -44915,-44952,-44989,-45025,-45062,-45098,-45135,-45171, + -45207,-45244,-45280,-45316,-45353,-45389,-45425,-45462, + -45498,-45534,-45570,-45606,-45642,-45678,-45714,-45750, + -45786,-45822,-45858,-45894,-45930,-45966,-46002,-46037, + -46073,-46109,-46145,-46180,-46216,-46252,-46287,-46323, + -46358,-46394,-46429,-46465,-46500,-46536,-46571,-46606, + -46642,-46677,-46712,-46747,-46783,-46818,-46853,-46888, + -46923,-46958,-46993,-47028,-47063,-47098,-47133,-47168, + -47203,-47238,-47273,-47308,-47342,-47377,-47412,-47446, + -47481,-47516,-47550,-47585,-47619,-47654,-47688,-47723, + -47757,-47792,-47826,-47860,-47895,-47929,-47963,-47998, + -48032,-48066,-48100,-48134,-48168,-48202,-48236,-48271, + -48304,-48338,-48372,-48406,-48440,-48474,-48508,-48542, + -48575,-48609,-48643,-48676,-48710,-48744,-48777,-48811, + -48844,-48878,-48911,-48945,-48978,-49012,-49045,-49078, + -49112,-49145,-49178,-49211,-49244,-49278,-49311,-49344, + -49377,-49410,-49443,-49476,-49509,-49542,-49575,-49608, + -49640,-49673,-49706,-49739,-49771,-49804,-49837,-49869, + -49902,-49935,-49967,-50000,-50032,-50065,-50097,-50129, + -50162,-50194,-50226,-50259,-50291,-50323,-50355,-50387, + -50420,-50452,-50484,-50516,-50548,-50580,-50612,-50644, + -50675,-50707,-50739,-50771,-50803,-50834,-50866,-50898, + -50929,-50961,-50993,-51024,-51056,-51087,-51119,-51150, + -51182,-51213,-51244,-51276,-51307,-51338,-51369,-51401, + -51432,-51463,-51494,-51525,-51556,-51587,-51618,-51649, + -51680,-51711,-51742,-51773,-51803,-51834,-51865,-51896, + -51926,-51957,-51988,-52018,-52049,-52079,-52110,-52140, + -52171,-52201,-52231,-52262,-52292,-52322,-52353,-52383, + -52413,-52443,-52473,-52503,-52534,-52564,-52594,-52624, + -52653,-52683,-52713,-52743,-52773,-52803,-52832,-52862, + -52892,-52922,-52951,-52981,-53010,-53040,-53069,-53099, + -53128,-53158,-53187,-53216,-53246,-53275,-53304,-53334, + -53363,-53392,-53421,-53450,-53479,-53508,-53537,-53566, + -53595,-53624,-53653,-53682,-53711,-53739,-53768,-53797, + -53826,-53854,-53883,-53911,-53940,-53969,-53997,-54026, + -54054,-54082,-54111,-54139,-54167,-54196,-54224,-54252, + -54280,-54308,-54337,-54365,-54393,-54421,-54449,-54477, + -54505,-54533,-54560,-54588,-54616,-54644,-54672,-54699, + -54727,-54755,-54782,-54810,-54837,-54865,-54892,-54920, + -54947,-54974,-55002,-55029,-55056,-55084,-55111,-55138, + -55165,-55192,-55219,-55246,-55274,-55300,-55327,-55354, + -55381,-55408,-55435,-55462,-55489,-55515,-55542,-55569, + -55595,-55622,-55648,-55675,-55701,-55728,-55754,-55781, + -55807,-55833,-55860,-55886,-55912,-55938,-55965,-55991, + -56017,-56043,-56069,-56095,-56121,-56147,-56173,-56199, + -56225,-56250,-56276,-56302,-56328,-56353,-56379,-56404, + -56430,-56456,-56481,-56507,-56532,-56557,-56583,-56608, + -56633,-56659,-56684,-56709,-56734,-56760,-56785,-56810, + -56835,-56860,-56885,-56910,-56935,-56959,-56984,-57009, + -57034,-57059,-57083,-57108,-57133,-57157,-57182,-57206, + -57231,-57255,-57280,-57304,-57329,-57353,-57377,-57402, + -57426,-57450,-57474,-57498,-57522,-57546,-57570,-57594, + -57618,-57642,-57666,-57690,-57714,-57738,-57762,-57785, + -57809,-57833,-57856,-57880,-57903,-57927,-57950,-57974, + -57997,-58021,-58044,-58067,-58091,-58114,-58137,-58160, + -58183,-58207,-58230,-58253,-58276,-58299,-58322,-58345, + -58367,-58390,-58413,-58436,-58459,-58481,-58504,-58527, + -58549,-58572,-58594,-58617,-58639,-58662,-58684,-58706, + -58729,-58751,-58773,-58795,-58818,-58840,-58862,-58884, + -58906,-58928,-58950,-58972,-58994,-59016,-59038,-59059, + -59081,-59103,-59125,-59146,-59168,-59190,-59211,-59233, + -59254,-59276,-59297,-59318,-59340,-59361,-59382,-59404, + -59425,-59446,-59467,-59488,-59509,-59530,-59551,-59572, + -59593,-59614,-59635,-59656,-59677,-59697,-59718,-59739, + -59759,-59780,-59801,-59821,-59842,-59862,-59883,-59903, + -59923,-59944,-59964,-59984,-60004,-60025,-60045,-60065, + -60085,-60105,-60125,-60145,-60165,-60185,-60205,-60225, + -60244,-60264,-60284,-60304,-60323,-60343,-60363,-60382, + -60402,-60421,-60441,-60460,-60479,-60499,-60518,-60537, + -60556,-60576,-60595,-60614,-60633,-60652,-60671,-60690, + -60709,-60728,-60747,-60766,-60785,-60803,-60822,-60841, + -60859,-60878,-60897,-60915,-60934,-60952,-60971,-60989, + -61007,-61026,-61044,-61062,-61081,-61099,-61117,-61135, + -61153,-61171,-61189,-61207,-61225,-61243,-61261,-61279, + -61297,-61314,-61332,-61350,-61367,-61385,-61403,-61420, + -61438,-61455,-61473,-61490,-61507,-61525,-61542,-61559, + -61577,-61594,-61611,-61628,-61645,-61662,-61679,-61696, + -61713,-61730,-61747,-61764,-61780,-61797,-61814,-61831, + -61847,-61864,-61880,-61897,-61913,-61930,-61946,-61963, + -61979,-61995,-62012,-62028,-62044,-62060,-62076,-62092, + -62108,-62125,-62141,-62156,-62172,-62188,-62204,-62220, + -62236,-62251,-62267,-62283,-62298,-62314,-62329,-62345, + -62360,-62376,-62391,-62407,-62422,-62437,-62453,-62468, + -62483,-62498,-62513,-62528,-62543,-62558,-62573,-62588, + -62603,-62618,-62633,-62648,-62662,-62677,-62692,-62706, + -62721,-62735,-62750,-62764,-62779,-62793,-62808,-62822, + -62836,-62850,-62865,-62879,-62893,-62907,-62921,-62935, + -62949,-62963,-62977,-62991,-63005,-63019,-63032,-63046, + -63060,-63074,-63087,-63101,-63114,-63128,-63141,-63155, + -63168,-63182,-63195,-63208,-63221,-63235,-63248,-63261, + -63274,-63287,-63300,-63313,-63326,-63339,-63352,-63365, + -63378,-63390,-63403,-63416,-63429,-63441,-63454,-63466, + -63479,-63491,-63504,-63516,-63528,-63541,-63553,-63565, + -63578,-63590,-63602,-63614,-63626,-63638,-63650,-63662, + -63674,-63686,-63698,-63709,-63721,-63733,-63745,-63756, + -63768,-63779,-63791,-63803,-63814,-63825,-63837,-63848, + -63859,-63871,-63882,-63893,-63904,-63915,-63927,-63938, + -63949,-63960,-63971,-63981,-63992,-64003,-64014,-64025, + -64035,-64046,-64057,-64067,-64078,-64088,-64099,-64109, + -64120,-64130,-64140,-64151,-64161,-64171,-64181,-64192, + -64202,-64212,-64222,-64232,-64242,-64252,-64261,-64271, + -64281,-64291,-64301,-64310,-64320,-64330,-64339,-64349, + -64358,-64368,-64377,-64387,-64396,-64405,-64414,-64424, + -64433,-64442,-64451,-64460,-64469,-64478,-64487,-64496, + -64505,-64514,-64523,-64532,-64540,-64549,-64558,-64566, + -64575,-64584,-64592,-64601,-64609,-64617,-64626,-64634, + -64642,-64651,-64659,-64667,-64675,-64683,-64691,-64699, + -64707,-64715,-64723,-64731,-64739,-64747,-64754,-64762, + -64770,-64777,-64785,-64793,-64800,-64808,-64815,-64822, + -64830,-64837,-64844,-64852,-64859,-64866,-64873,-64880, + -64887,-64895,-64902,-64908,-64915,-64922,-64929,-64936, + -64943,-64949,-64956,-64963,-64969,-64976,-64982,-64989, + -64995,-65002,-65008,-65015,-65021,-65027,-65033,-65040, + -65046,-65052,-65058,-65064,-65070,-65076,-65082,-65088, + -65094,-65099,-65105,-65111,-65117,-65122,-65128,-65133, + -65139,-65144,-65150,-65155,-65161,-65166,-65171,-65177, + -65182,-65187,-65192,-65197,-65202,-65207,-65212,-65217, + -65222,-65227,-65232,-65237,-65242,-65246,-65251,-65256, + -65260,-65265,-65270,-65274,-65279,-65283,-65287,-65292, + -65296,-65300,-65305,-65309,-65313,-65317,-65321,-65325, + -65329,-65333,-65337,-65341,-65345,-65349,-65352,-65356, + -65360,-65363,-65367,-65371,-65374,-65378,-65381,-65385, + -65388,-65391,-65395,-65398,-65401,-65404,-65408,-65411, + -65414,-65417,-65420,-65423,-65426,-65429,-65431,-65434, + -65437,-65440,-65442,-65445,-65448,-65450,-65453,-65455, + -65458,-65460,-65463,-65465,-65467,-65470,-65472,-65474, + -65476,-65478,-65480,-65482,-65484,-65486,-65488,-65490, + -65492,-65494,-65496,-65497,-65499,-65501,-65502,-65504, + -65505,-65507,-65508,-65510,-65511,-65513,-65514,-65515, + -65516,-65518,-65519,-65520,-65521,-65522,-65523,-65524, + -65525,-65526,-65527,-65527,-65528,-65529,-65530,-65530, + -65531,-65531,-65532,-65532,-65533,-65533,-65534,-65534, + -65534,-65535,-65535,-65535,-65535,-65535,-65535,-65535, + -65535,-65535,-65535,-65535,-65535,-65535,-65535,-65534, + -65534,-65534,-65533,-65533,-65532,-65532,-65531,-65531, + -65530,-65530,-65529,-65528,-65527,-65527,-65526,-65525, + -65524,-65523,-65522,-65521,-65520,-65519,-65518,-65516, + -65515,-65514,-65513,-65511,-65510,-65508,-65507,-65505, + -65504,-65502,-65501,-65499,-65497,-65496,-65494,-65492, + -65490,-65488,-65486,-65484,-65482,-65480,-65478,-65476, + -65474,-65472,-65470,-65467,-65465,-65463,-65460,-65458, + -65455,-65453,-65450,-65448,-65445,-65442,-65440,-65437, + -65434,-65431,-65429,-65426,-65423,-65420,-65417,-65414, + -65411,-65408,-65404,-65401,-65398,-65395,-65391,-65388, + -65385,-65381,-65378,-65374,-65371,-65367,-65363,-65360, + -65356,-65352,-65349,-65345,-65341,-65337,-65333,-65329, + -65325,-65321,-65317,-65313,-65309,-65305,-65300,-65296, + -65292,-65287,-65283,-65279,-65274,-65270,-65265,-65260, + -65256,-65251,-65246,-65242,-65237,-65232,-65227,-65222, + -65217,-65212,-65207,-65202,-65197,-65192,-65187,-65182, + -65177,-65171,-65166,-65161,-65155,-65150,-65144,-65139, + -65133,-65128,-65122,-65117,-65111,-65105,-65099,-65094, + -65088,-65082,-65076,-65070,-65064,-65058,-65052,-65046, + -65040,-65033,-65027,-65021,-65015,-65008,-65002,-64995, + -64989,-64982,-64976,-64969,-64963,-64956,-64949,-64943, + -64936,-64929,-64922,-64915,-64908,-64902,-64895,-64887, + -64880,-64873,-64866,-64859,-64852,-64844,-64837,-64830, + -64822,-64815,-64808,-64800,-64793,-64785,-64777,-64770, + -64762,-64754,-64747,-64739,-64731,-64723,-64715,-64707, + -64699,-64691,-64683,-64675,-64667,-64659,-64651,-64642, + -64634,-64626,-64617,-64609,-64601,-64592,-64584,-64575, + -64566,-64558,-64549,-64540,-64532,-64523,-64514,-64505, + -64496,-64487,-64478,-64469,-64460,-64451,-64442,-64433, + -64424,-64414,-64405,-64396,-64387,-64377,-64368,-64358, + -64349,-64339,-64330,-64320,-64310,-64301,-64291,-64281, + -64271,-64261,-64252,-64242,-64232,-64222,-64212,-64202, + -64192,-64181,-64171,-64161,-64151,-64140,-64130,-64120, + -64109,-64099,-64088,-64078,-64067,-64057,-64046,-64035, + -64025,-64014,-64003,-63992,-63981,-63971,-63960,-63949, + -63938,-63927,-63915,-63904,-63893,-63882,-63871,-63859, + -63848,-63837,-63825,-63814,-63803,-63791,-63779,-63768, + -63756,-63745,-63733,-63721,-63709,-63698,-63686,-63674, + -63662,-63650,-63638,-63626,-63614,-63602,-63590,-63578, + -63565,-63553,-63541,-63528,-63516,-63504,-63491,-63479, + -63466,-63454,-63441,-63429,-63416,-63403,-63390,-63378, + -63365,-63352,-63339,-63326,-63313,-63300,-63287,-63274, + -63261,-63248,-63235,-63221,-63208,-63195,-63182,-63168, + -63155,-63141,-63128,-63114,-63101,-63087,-63074,-63060, + -63046,-63032,-63019,-63005,-62991,-62977,-62963,-62949, + -62935,-62921,-62907,-62893,-62879,-62865,-62850,-62836, + -62822,-62808,-62793,-62779,-62764,-62750,-62735,-62721, + -62706,-62692,-62677,-62662,-62648,-62633,-62618,-62603, + -62588,-62573,-62558,-62543,-62528,-62513,-62498,-62483, + -62468,-62453,-62437,-62422,-62407,-62391,-62376,-62360, + -62345,-62329,-62314,-62298,-62283,-62267,-62251,-62236, + -62220,-62204,-62188,-62172,-62156,-62141,-62125,-62108, + -62092,-62076,-62060,-62044,-62028,-62012,-61995,-61979, + -61963,-61946,-61930,-61913,-61897,-61880,-61864,-61847, + -61831,-61814,-61797,-61780,-61764,-61747,-61730,-61713, + -61696,-61679,-61662,-61645,-61628,-61611,-61594,-61577, + -61559,-61542,-61525,-61507,-61490,-61473,-61455,-61438, + -61420,-61403,-61385,-61367,-61350,-61332,-61314,-61297, + -61279,-61261,-61243,-61225,-61207,-61189,-61171,-61153, + -61135,-61117,-61099,-61081,-61062,-61044,-61026,-61007, + -60989,-60971,-60952,-60934,-60915,-60897,-60878,-60859, + -60841,-60822,-60803,-60785,-60766,-60747,-60728,-60709, + -60690,-60671,-60652,-60633,-60614,-60595,-60576,-60556, + -60537,-60518,-60499,-60479,-60460,-60441,-60421,-60402, + -60382,-60363,-60343,-60323,-60304,-60284,-60264,-60244, + -60225,-60205,-60185,-60165,-60145,-60125,-60105,-60085, + -60065,-60045,-60025,-60004,-59984,-59964,-59944,-59923, + -59903,-59883,-59862,-59842,-59821,-59801,-59780,-59759, + -59739,-59718,-59697,-59677,-59656,-59635,-59614,-59593, + -59572,-59551,-59530,-59509,-59488,-59467,-59446,-59425, + -59404,-59382,-59361,-59340,-59318,-59297,-59276,-59254, + -59233,-59211,-59189,-59168,-59146,-59125,-59103,-59081, + -59059,-59038,-59016,-58994,-58972,-58950,-58928,-58906, + -58884,-58862,-58840,-58818,-58795,-58773,-58751,-58729, + -58706,-58684,-58662,-58639,-58617,-58594,-58572,-58549, + -58527,-58504,-58481,-58459,-58436,-58413,-58390,-58367, + -58345,-58322,-58299,-58276,-58253,-58230,-58207,-58183, + -58160,-58137,-58114,-58091,-58067,-58044,-58021,-57997, + -57974,-57950,-57927,-57903,-57880,-57856,-57833,-57809, + -57785,-57762,-57738,-57714,-57690,-57666,-57642,-57618, + -57594,-57570,-57546,-57522,-57498,-57474,-57450,-57426, + -57402,-57377,-57353,-57329,-57304,-57280,-57255,-57231, + -57206,-57182,-57157,-57133,-57108,-57083,-57059,-57034, + -57009,-56984,-56959,-56935,-56910,-56885,-56860,-56835, + -56810,-56785,-56760,-56734,-56709,-56684,-56659,-56633, + -56608,-56583,-56557,-56532,-56507,-56481,-56456,-56430, + -56404,-56379,-56353,-56328,-56302,-56276,-56250,-56225, + -56199,-56173,-56147,-56121,-56095,-56069,-56043,-56017, + -55991,-55965,-55938,-55912,-55886,-55860,-55833,-55807, + -55781,-55754,-55728,-55701,-55675,-55648,-55622,-55595, + -55569,-55542,-55515,-55489,-55462,-55435,-55408,-55381, + -55354,-55327,-55300,-55274,-55246,-55219,-55192,-55165, + -55138,-55111,-55084,-55056,-55029,-55002,-54974,-54947, + -54920,-54892,-54865,-54837,-54810,-54782,-54755,-54727, + -54699,-54672,-54644,-54616,-54588,-54560,-54533,-54505, + -54477,-54449,-54421,-54393,-54365,-54337,-54308,-54280, + -54252,-54224,-54196,-54167,-54139,-54111,-54082,-54054, + -54026,-53997,-53969,-53940,-53911,-53883,-53854,-53826, + -53797,-53768,-53739,-53711,-53682,-53653,-53624,-53595, + -53566,-53537,-53508,-53479,-53450,-53421,-53392,-53363, + -53334,-53304,-53275,-53246,-53216,-53187,-53158,-53128, + -53099,-53069,-53040,-53010,-52981,-52951,-52922,-52892, + -52862,-52832,-52803,-52773,-52743,-52713,-52683,-52653, + -52624,-52594,-52564,-52534,-52503,-52473,-52443,-52413, + -52383,-52353,-52322,-52292,-52262,-52231,-52201,-52171, + -52140,-52110,-52079,-52049,-52018,-51988,-51957,-51926, + -51896,-51865,-51834,-51803,-51773,-51742,-51711,-51680, + -51649,-51618,-51587,-51556,-51525,-51494,-51463,-51432, + -51401,-51369,-51338,-51307,-51276,-51244,-51213,-51182, + -51150,-51119,-51087,-51056,-51024,-50993,-50961,-50929, + -50898,-50866,-50834,-50803,-50771,-50739,-50707,-50675, + -50644,-50612,-50580,-50548,-50516,-50484,-50452,-50420, + -50387,-50355,-50323,-50291,-50259,-50226,-50194,-50162, + -50129,-50097,-50065,-50032,-50000,-49967,-49935,-49902, + -49869,-49837,-49804,-49771,-49739,-49706,-49673,-49640, + -49608,-49575,-49542,-49509,-49476,-49443,-49410,-49377, + -49344,-49311,-49278,-49244,-49211,-49178,-49145,-49112, + -49078,-49045,-49012,-48978,-48945,-48911,-48878,-48844, + -48811,-48777,-48744,-48710,-48676,-48643,-48609,-48575, + -48542,-48508,-48474,-48440,-48406,-48372,-48338,-48305, + -48271,-48237,-48202,-48168,-48134,-48100,-48066,-48032, + -47998,-47963,-47929,-47895,-47860,-47826,-47792,-47757, + -47723,-47688,-47654,-47619,-47585,-47550,-47516,-47481, + -47446,-47412,-47377,-47342,-47307,-47273,-47238,-47203, + -47168,-47133,-47098,-47063,-47028,-46993,-46958,-46923, + -46888,-46853,-46818,-46783,-46747,-46712,-46677,-46642, + -46606,-46571,-46536,-46500,-46465,-46429,-46394,-46358, + -46323,-46287,-46251,-46216,-46180,-46145,-46109,-46073, + -46037,-46002,-45966,-45930,-45894,-45858,-45822,-45786, + -45750,-45714,-45678,-45642,-45606,-45570,-45534,-45498, + -45462,-45425,-45389,-45353,-45316,-45280,-45244,-45207, + -45171,-45135,-45098,-45062,-45025,-44989,-44952,-44915, + -44879,-44842,-44806,-44769,-44732,-44695,-44659,-44622, + -44585,-44548,-44511,-44474,-44437,-44400,-44363,-44326, + -44289,-44252,-44215,-44178,-44141,-44104,-44067,-44029, + -43992,-43955,-43918,-43880,-43843,-43806,-43768,-43731, + -43693,-43656,-43618,-43581,-43543,-43506,-43468,-43430, + -43393,-43355,-43317,-43280,-43242,-43204,-43166,-43128, + -43091,-43053,-43015,-42977,-42939,-42901,-42863,-42825, + -42787,-42749,-42711,-42672,-42634,-42596,-42558,-42520, + -42481,-42443,-42405,-42366,-42328,-42290,-42251,-42213, + -42174,-42136,-42097,-42059,-42020,-41982,-41943,-41904, + -41866,-41827,-41788,-41750,-41711,-41672,-41633,-41595, + -41556,-41517,-41478,-41439,-41400,-41361,-41322,-41283, + -41244,-41205,-41166,-41127,-41087,-41048,-41009,-40970, + -40931,-40891,-40852,-40813,-40773,-40734,-40695,-40655, + -40616,-40576,-40537,-40497,-40458,-40418,-40379,-40339, + -40299,-40260,-40220,-40180,-40141,-40101,-40061,-40021, + -39982,-39942,-39902,-39862,-39822,-39782,-39742,-39702, + -39662,-39622,-39582,-39542,-39502,-39462,-39422,-39382, + -39341,-39301,-39261,-39221,-39180,-39140,-39100,-39059, + -39019,-38979,-38938,-38898,-38857,-38817,-38776,-38736, + -38695,-38655,-38614,-38573,-38533,-38492,-38451,-38411, + -38370,-38329,-38288,-38248,-38207,-38166,-38125,-38084, + -38043,-38002,-37961,-37920,-37879,-37838,-37797,-37756, + -37715,-37674,-37633,-37592,-37550,-37509,-37468,-37427, + -37386,-37344,-37303,-37262,-37220,-37179,-37137,-37096, + -37055,-37013,-36972,-36930,-36889,-36847,-36805,-36764, + -36722,-36681,-36639,-36597,-36556,-36514,-36472,-36430, + -36388,-36347,-36305,-36263,-36221,-36179,-36137,-36095, + -36053,-36011,-35969,-35927,-35885,-35843,-35801,-35759, + -35717,-35675,-35633,-35590,-35548,-35506,-35464,-35421, + -35379,-35337,-35294,-35252,-35210,-35167,-35125,-35082, + -35040,-34997,-34955,-34912,-34870,-34827,-34785,-34742, + -34699,-34657,-34614,-34571,-34529,-34486,-34443,-34400, + -34358,-34315,-34272,-34229,-34186,-34143,-34100,-34057, + -34015,-33972,-33929,-33886,-33843,-33799,-33756,-33713, + -33670,-33627,-33584,-33541,-33498,-33454,-33411,-33368, + -33325,-33281,-33238,-33195,-33151,-33108,-33065,-33021, + -32978,-32934,-32891,-32847,-32804,-32760,-32717,-32673, + -32630,-32586,-32542,-32499,-32455,-32411,-32368,-32324, + -32280,-32236,-32193,-32149,-32105,-32061,-32017,-31974, + -31930,-31886,-31842,-31798,-31754,-31710,-31666,-31622, + -31578,-31534,-31490,-31446,-31402,-31357,-31313,-31269, + -31225,-31181,-31136,-31092,-31048,-31004,-30959,-30915, + -30871,-30826,-30782,-30738,-30693,-30649,-30604,-30560, + -30515,-30471,-30426,-30382,-30337,-30293,-30248,-30204, + -30159,-30114,-30070,-30025,-29980,-29936,-29891,-29846, + -29801,-29757,-29712,-29667,-29622,-29577,-29533,-29488, + -29443,-29398,-29353,-29308,-29263,-29218,-29173,-29128, + -29083,-29038,-28993,-28948,-28903,-28858,-28812,-28767, + -28722,-28677,-28632,-28586,-28541,-28496,-28451,-28405, + -28360,-28315,-28269,-28224,-28179,-28133,-28088,-28042, + -27997,-27952,-27906,-27861,-27815,-27770,-27724,-27678, + -27633,-27587,-27542,-27496,-27450,-27405,-27359,-27313, + -27268,-27222,-27176,-27131,-27085,-27039,-26993,-26947, + -26902,-26856,-26810,-26764,-26718,-26672,-26626,-26580, + -26534,-26488,-26442,-26396,-26350,-26304,-26258,-26212, + -26166,-26120,-26074,-26028,-25982,-25936,-25889,-25843, + -25797,-25751,-25705,-25658,-25612,-25566,-25520,-25473, + -25427,-25381,-25334,-25288,-25241,-25195,-25149,-25102, + -25056,-25009,-24963,-24916,-24870,-24823,-24777,-24730, + -24684,-24637,-24591,-24544,-24497,-24451,-24404,-24357, + -24311,-24264,-24217,-24171,-24124,-24077,-24030,-23984, + -23937,-23890,-23843,-23796,-23750,-23703,-23656,-23609, + -23562,-23515,-23468,-23421,-23374,-23327,-23280,-23233, + -23186,-23139,-23092,-23045,-22998,-22951,-22904,-22857, + -22810,-22763,-22716,-22668,-22621,-22574,-22527,-22480, + -22432,-22385,-22338,-22291,-22243,-22196,-22149,-22102, + -22054,-22007,-21960,-21912,-21865,-21817,-21770,-21723, + -21675,-21628,-21580,-21533,-21485,-21438,-21390,-21343, + -21295,-21248,-21200,-21153,-21105,-21057,-21010,-20962, + -20915,-20867,-20819,-20772,-20724,-20676,-20629,-20581, + -20533,-20485,-20438,-20390,-20342,-20294,-20246,-20199, + -20151,-20103,-20055,-20007,-19959,-19912,-19864,-19816, + -19768,-19720,-19672,-19624,-19576,-19528,-19480,-19432, + -19384,-19336,-19288,-19240,-19192,-19144,-19096,-19048, + -19000,-18951,-18903,-18855,-18807,-18759,-18711,-18663, + -18614,-18566,-18518,-18470,-18421,-18373,-18325,-18277, + -18228,-18180,-18132,-18084,-18035,-17987,-17939,-17890, + -17842,-17793,-17745,-17697,-17648,-17600,-17551,-17503, + -17455,-17406,-17358,-17309,-17261,-17212,-17164,-17115, + -17067,-17018,-16970,-16921,-16872,-16824,-16775,-16727, + -16678,-16629,-16581,-16532,-16484,-16435,-16386,-16338, + -16289,-16240,-16191,-16143,-16094,-16045,-15997,-15948, + -15899,-15850,-15802,-15753,-15704,-15655,-15606,-15557, + -15509,-15460,-15411,-15362,-15313,-15264,-15215,-15167, + -15118,-15069,-15020,-14971,-14922,-14873,-14824,-14775, + -14726,-14677,-14628,-14579,-14530,-14481,-14432,-14383, + -14334,-14285,-14236,-14187,-14138,-14089,-14040,-13990, + -13941,-13892,-13843,-13794,-13745,-13696,-13647,-13597, + -13548,-13499,-13450,-13401,-13351,-13302,-13253,-13204, + -13154,-13105,-13056,-13007,-12957,-12908,-12859,-12810, + -12760,-12711,-12662,-12612,-12563,-12514,-12464,-12415, + -12366,-12316,-12267,-12217,-12168,-12119,-12069,-12020, + -11970,-11921,-11872,-11822,-11773,-11723,-11674,-11624, + -11575,-11525,-11476,-11426,-11377,-11327,-11278,-11228, + -11179,-11129,-11080,-11030,-10981,-10931,-10882,-10832, + -10782,-10733,-10683,-10634,-10584,-10534,-10485,-10435, + -10386,-10336,-10286,-10237,-10187,-10137,-10088,-10038, + -9988,-9939,-9889,-9839,-9790,-9740,-9690,-9640, + -9591,-9541,-9491,-9442,-9392,-9342,-9292,-9243, + -9193,-9143,-9093,-9043,-8994,-8944,-8894,-8844, + -8794,-8745,-8695,-8645,-8595,-8545,-8496,-8446, + -8396,-8346,-8296,-8246,-8196,-8147,-8097,-8047, + -7997,-7947,-7897,-7847,-7797,-7747,-7697,-7648, + -7598,-7548,-7498,-7448,-7398,-7348,-7298,-7248, + -7198,-7148,-7098,-7048,-6998,-6948,-6898,-6848, + -6798,-6748,-6698,-6648,-6598,-6548,-6498,-6448, + -6398,-6348,-6298,-6248,-6198,-6148,-6098,-6048, + -5998,-5948,-5898,-5848,-5798,-5747,-5697,-5647, + -5597,-5547,-5497,-5447,-5397,-5347,-5297,-5247, + -5197,-5146,-5096,-5046,-4996,-4946,-4896,-4846, + -4796,-4745,-4695,-4645,-4595,-4545,-4495,-4445, + -4394,-4344,-4294,-4244,-4194,-4144,-4093,-4043, + -3993,-3943,-3893,-3843,-3792,-3742,-3692,-3642, + -3592,-3541,-3491,-3441,-3391,-3341,-3291,-3240, + -3190,-3140,-3090,-3039,-2989,-2939,-2889,-2839, + -2788,-2738,-2688,-2638,-2588,-2537,-2487,-2437, + -2387,-2336,-2286,-2236,-2186,-2135,-2085,-2035, + -1985,-1934,-1884,-1834,-1784,-1733,-1683,-1633, + -1583,-1532,-1482,-1432,-1382,-1331,-1281,-1231, + -1181,-1130,-1080,-1030,-980,-929,-879,-829, + -779,-728,-678,-628,-578,-527,-477,-427, + -376,-326,-276,-226,-175,-125,-75,-25, + 25,75,125,175,226,276,326,376, + 427,477,527,578,628,678,728,779, + 829,879,929,980,1030,1080,1130,1181, + 1231,1281,1331,1382,1432,1482,1532,1583, + 1633,1683,1733,1784,1834,1884,1934,1985, + 2035,2085,2135,2186,2236,2286,2336,2387, + 2437,2487,2537,2587,2638,2688,2738,2788, + 2839,2889,2939,2989,3039,3090,3140,3190, + 3240,3291,3341,3391,3441,3491,3542,3592, + 3642,3692,3742,3792,3843,3893,3943,3993, + 4043,4093,4144,4194,4244,4294,4344,4394, + 4445,4495,4545,4595,4645,4695,4745,4796, + 4846,4896,4946,4996,5046,5096,5146,5197, + 5247,5297,5347,5397,5447,5497,5547,5597, + 5647,5697,5747,5798,5848,5898,5948,5998, + 6048,6098,6148,6198,6248,6298,6348,6398, + 6448,6498,6548,6598,6648,6698,6748,6798, + 6848,6898,6948,6998,7048,7098,7148,7198, + 7248,7298,7348,7398,7448,7498,7548,7598, + 7648,7697,7747,7797,7847,7897,7947,7997, + 8047,8097,8147,8196,8246,8296,8346,8396, + 8446,8496,8545,8595,8645,8695,8745,8794, + 8844,8894,8944,8994,9043,9093,9143,9193, + 9243,9292,9342,9392,9442,9491,9541,9591, + 9640,9690,9740,9790,9839,9889,9939,9988, + 10038,10088,10137,10187,10237,10286,10336,10386, + 10435,10485,10534,10584,10634,10683,10733,10782, + 10832,10882,10931,10981,11030,11080,11129,11179, + 11228,11278,11327,11377,11426,11476,11525,11575, + 11624,11674,11723,11773,11822,11872,11921,11970, + 12020,12069,12119,12168,12218,12267,12316,12366, + 12415,12464,12514,12563,12612,12662,12711,12760, + 12810,12859,12908,12957,13007,13056,13105,13154, + 13204,13253,13302,13351,13401,13450,13499,13548, + 13597,13647,13696,13745,13794,13843,13892,13941, + 13990,14040,14089,14138,14187,14236,14285,14334, + 14383,14432,14481,14530,14579,14628,14677,14726, + 14775,14824,14873,14922,14971,15020,15069,15118, + 15167,15215,15264,15313,15362,15411,15460,15509, + 15557,15606,15655,15704,15753,15802,15850,15899, + 15948,15997,16045,16094,16143,16191,16240,16289, + 16338,16386,16435,16484,16532,16581,16629,16678, + 16727,16775,16824,16872,16921,16970,17018,17067, + 17115,17164,17212,17261,17309,17358,17406,17455, + 17503,17551,17600,17648,17697,17745,17793,17842, + 17890,17939,17987,18035,18084,18132,18180,18228, + 18277,18325,18373,18421,18470,18518,18566,18614, + 18663,18711,18759,18807,18855,18903,18951,19000, + 19048,19096,19144,19192,19240,19288,19336,19384, + 19432,19480,19528,19576,19624,19672,19720,19768, + 19816,19864,19912,19959,20007,20055,20103,20151, + 20199,20246,20294,20342,20390,20438,20485,20533, + 20581,20629,20676,20724,20772,20819,20867,20915, + 20962,21010,21057,21105,21153,21200,21248,21295, + 21343,21390,21438,21485,21533,21580,21628,21675, + 21723,21770,21817,21865,21912,21960,22007,22054, + 22102,22149,22196,22243,22291,22338,22385,22432, + 22480,22527,22574,22621,22668,22716,22763,22810, + 22857,22904,22951,22998,23045,23092,23139,23186, + 23233,23280,23327,23374,23421,23468,23515,23562, + 23609,23656,23703,23750,23796,23843,23890,23937, + 23984,24030,24077,24124,24171,24217,24264,24311, + 24357,24404,24451,24497,24544,24591,24637,24684, + 24730,24777,24823,24870,24916,24963,25009,25056, + 25102,25149,25195,25241,25288,25334,25381,25427, + 25473,25520,25566,25612,25658,25705,25751,25797, + 25843,25889,25936,25982,26028,26074,26120,26166, + 26212,26258,26304,26350,26396,26442,26488,26534, + 26580,26626,26672,26718,26764,26810,26856,26902, + 26947,26993,27039,27085,27131,27176,27222,27268, + 27313,27359,27405,27450,27496,27542,27587,27633, + 27678,27724,27770,27815,27861,27906,27952,27997, + 28042,28088,28133,28179,28224,28269,28315,28360, + 28405,28451,28496,28541,28586,28632,28677,28722, + 28767,28812,28858,28903,28948,28993,29038,29083, + 29128,29173,29218,29263,29308,29353,29398,29443, + 29488,29533,29577,29622,29667,29712,29757,29801, + 29846,29891,29936,29980,30025,30070,30114,30159, + 30204,30248,30293,30337,30382,30427,30471,30516, + 30560,30604,30649,30693,30738,30782,30826,30871, + 30915,30959,31004,31048,31092,31136,31181,31225, + 31269,31313,31357,31402,31446,31490,31534,31578, + 31622,31666,31710,31754,31798,31842,31886,31930, + 31974,32017,32061,32105,32149,32193,32236,32280, + 32324,32368,32411,32455,32499,32542,32586,32630, + 32673,32717,32760,32804,32847,32891,32934,32978, + 33021,33065,33108,33151,33195,33238,33281,33325, + 33368,33411,33454,33498,33541,33584,33627,33670, + 33713,33756,33799,33843,33886,33929,33972,34015, + 34057,34100,34143,34186,34229,34272,34315,34358, + 34400,34443,34486,34529,34571,34614,34657,34699, + 34742,34785,34827,34870,34912,34955,34997,35040, + 35082,35125,35167,35210,35252,35294,35337,35379, + 35421,35464,35506,35548,35590,35633,35675,35717, + 35759,35801,35843,35885,35927,35969,36011,36053, + 36095,36137,36179,36221,36263,36305,36347,36388, + 36430,36472,36514,36556,36597,36639,36681,36722, + 36764,36805,36847,36889,36930,36972,37013,37055, + 37096,37137,37179,37220,37262,37303,37344,37386, + 37427,37468,37509,37551,37592,37633,37674,37715, + 37756,37797,37838,37879,37920,37961,38002,38043, + 38084,38125,38166,38207,38248,38288,38329,38370, + 38411,38451,38492,38533,38573,38614,38655,38695, + 38736,38776,38817,38857,38898,38938,38979,39019, + 39059,39100,39140,39180,39221,39261,39301,39341, + 39382,39422,39462,39502,39542,39582,39622,39662, + 39702,39742,39782,39822,39862,39902,39942,39982, + 40021,40061,40101,40141,40180,40220,40260,40299, + 40339,40379,40418,40458,40497,40537,40576,40616, + 40655,40695,40734,40773,40813,40852,40891,40931, + 40970,41009,41048,41087,41127,41166,41205,41244, + 41283,41322,41361,41400,41439,41478,41517,41556, + 41595,41633,41672,41711,41750,41788,41827,41866, + 41904,41943,41982,42020,42059,42097,42136,42174, + 42213,42251,42290,42328,42366,42405,42443,42481, + 42520,42558,42596,42634,42672,42711,42749,42787, + 42825,42863,42901,42939,42977,43015,43053,43091, + 43128,43166,43204,43242,43280,43317,43355,43393, + 43430,43468,43506,43543,43581,43618,43656,43693, + 43731,43768,43806,43843,43880,43918,43955,43992, + 44029,44067,44104,44141,44178,44215,44252,44289, + 44326,44363,44400,44437,44474,44511,44548,44585, + 44622,44659,44695,44732,44769,44806,44842,44879, + 44915,44952,44989,45025,45062,45098,45135,45171, + 45207,45244,45280,45316,45353,45389,45425,45462, + 45498,45534,45570,45606,45642,45678,45714,45750, + 45786,45822,45858,45894,45930,45966,46002,46037, + 46073,46109,46145,46180,46216,46252,46287,46323, + 46358,46394,46429,46465,46500,46536,46571,46606, + 46642,46677,46712,46747,46783,46818,46853,46888, + 46923,46958,46993,47028,47063,47098,47133,47168, + 47203,47238,47273,47308,47342,47377,47412,47446, + 47481,47516,47550,47585,47619,47654,47688,47723, + 47757,47792,47826,47861,47895,47929,47963,47998, + 48032,48066,48100,48134,48168,48202,48237,48271, + 48305,48338,48372,48406,48440,48474,48508,48542, + 48575,48609,48643,48676,48710,48744,48777,48811, + 48844,48878,48911,48945,48978,49012,49045,49078, + 49112,49145,49178,49211,49244,49278,49311,49344, + 49377,49410,49443,49476,49509,49542,49575,49608, + 49640,49673,49706,49739,49771,49804,49837,49869, + 49902,49935,49967,50000,50032,50064,50097,50129, + 50162,50194,50226,50259,50291,50323,50355,50387, + 50420,50452,50484,50516,50548,50580,50612,50644, + 50675,50707,50739,50771,50803,50834,50866,50898, + 50929,50961,50993,51024,51056,51087,51119,51150, + 51182,51213,51244,51276,51307,51338,51369,51401, + 51432,51463,51494,51525,51556,51587,51618,51649, + 51680,51711,51742,51773,51803,51834,51865,51896, + 51926,51957,51988,52018,52049,52079,52110,52140, + 52171,52201,52231,52262,52292,52322,52353,52383, + 52413,52443,52473,52503,52534,52564,52594,52624, + 52653,52683,52713,52743,52773,52803,52832,52862, + 52892,52922,52951,52981,53010,53040,53069,53099, + 53128,53158,53187,53216,53246,53275,53304,53334, + 53363,53392,53421,53450,53479,53508,53537,53566, + 53595,53624,53653,53682,53711,53739,53768,53797, + 53826,53854,53883,53912,53940,53969,53997,54026, + 54054,54082,54111,54139,54167,54196,54224,54252, + 54280,54309,54337,54365,54393,54421,54449,54477, + 54505,54533,54560,54588,54616,54644,54672,54699, + 54727,54755,54782,54810,54837,54865,54892,54920, + 54947,54974,55002,55029,55056,55084,55111,55138, + 55165,55192,55219,55246,55274,55300,55327,55354, + 55381,55408,55435,55462,55489,55515,55542,55569, + 55595,55622,55648,55675,55701,55728,55754,55781, + 55807,55833,55860,55886,55912,55938,55965,55991, + 56017,56043,56069,56095,56121,56147,56173,56199, + 56225,56250,56276,56302,56328,56353,56379,56404, + 56430,56456,56481,56507,56532,56557,56583,56608, + 56633,56659,56684,56709,56734,56760,56785,56810, + 56835,56860,56885,56910,56935,56959,56984,57009, + 57034,57059,57083,57108,57133,57157,57182,57206, + 57231,57255,57280,57304,57329,57353,57377,57402, + 57426,57450,57474,57498,57522,57546,57570,57594, + 57618,57642,57666,57690,57714,57738,57762,57785, + 57809,57833,57856,57880,57903,57927,57950,57974, + 57997,58021,58044,58067,58091,58114,58137,58160, + 58183,58207,58230,58253,58276,58299,58322,58345, + 58367,58390,58413,58436,58459,58481,58504,58527, + 58549,58572,58594,58617,58639,58662,58684,58706, + 58729,58751,58773,58795,58818,58840,58862,58884, + 58906,58928,58950,58972,58994,59016,59038,59059, + 59081,59103,59125,59146,59168,59190,59211,59233, + 59254,59276,59297,59318,59340,59361,59382,59404, + 59425,59446,59467,59488,59509,59530,59551,59572, + 59593,59614,59635,59656,59677,59697,59718,59739, + 59759,59780,59801,59821,59842,59862,59883,59903, + 59923,59944,59964,59984,60004,60025,60045,60065, + 60085,60105,60125,60145,60165,60185,60205,60225, + 60244,60264,60284,60304,60323,60343,60363,60382, + 60402,60421,60441,60460,60479,60499,60518,60537, + 60556,60576,60595,60614,60633,60652,60671,60690, + 60709,60728,60747,60766,60785,60803,60822,60841, + 60859,60878,60897,60915,60934,60952,60971,60989, + 61007,61026,61044,61062,61081,61099,61117,61135, + 61153,61171,61189,61207,61225,61243,61261,61279, + 61297,61314,61332,61350,61367,61385,61403,61420, + 61438,61455,61473,61490,61507,61525,61542,61559, + 61577,61594,61611,61628,61645,61662,61679,61696, + 61713,61730,61747,61764,61780,61797,61814,61831, + 61847,61864,61880,61897,61913,61930,61946,61963, + 61979,61995,62012,62028,62044,62060,62076,62092, + 62108,62125,62141,62156,62172,62188,62204,62220, + 62236,62251,62267,62283,62298,62314,62329,62345, + 62360,62376,62391,62407,62422,62437,62453,62468, + 62483,62498,62513,62528,62543,62558,62573,62588, + 62603,62618,62633,62648,62662,62677,62692,62706, + 62721,62735,62750,62764,62779,62793,62808,62822, + 62836,62850,62865,62879,62893,62907,62921,62935, + 62949,62963,62977,62991,63005,63019,63032,63046, + 63060,63074,63087,63101,63114,63128,63141,63155, + 63168,63182,63195,63208,63221,63235,63248,63261, + 63274,63287,63300,63313,63326,63339,63352,63365, + 63378,63390,63403,63416,63429,63441,63454,63466, + 63479,63491,63504,63516,63528,63541,63553,63565, + 63578,63590,63602,63614,63626,63638,63650,63662, + 63674,63686,63698,63709,63721,63733,63745,63756, + 63768,63779,63791,63803,63814,63825,63837,63848, + 63859,63871,63882,63893,63904,63915,63927,63938, + 63949,63960,63971,63981,63992,64003,64014,64025, + 64035,64046,64057,64067,64078,64088,64099,64109, + 64120,64130,64140,64151,64161,64171,64181,64192, + 64202,64212,64222,64232,64242,64252,64261,64271, + 64281,64291,64301,64310,64320,64330,64339,64349, + 64358,64368,64377,64387,64396,64405,64414,64424, + 64433,64442,64451,64460,64469,64478,64487,64496, + 64505,64514,64523,64532,64540,64549,64558,64566, + 64575,64584,64592,64600,64609,64617,64626,64634, + 64642,64651,64659,64667,64675,64683,64691,64699, + 64707,64715,64723,64731,64739,64747,64754,64762, + 64770,64777,64785,64793,64800,64808,64815,64822, + 64830,64837,64844,64852,64859,64866,64873,64880, + 64887,64895,64902,64908,64915,64922,64929,64936, + 64943,64949,64956,64963,64969,64976,64982,64989, + 64995,65002,65008,65015,65021,65027,65033,65040, + 65046,65052,65058,65064,65070,65076,65082,65088, + 65094,65099,65105,65111,65117,65122,65128,65133, + 65139,65144,65150,65155,65161,65166,65171,65177, + 65182,65187,65192,65197,65202,65207,65212,65217, + 65222,65227,65232,65237,65242,65246,65251,65256, + 65260,65265,65270,65274,65279,65283,65287,65292, + 65296,65300,65305,65309,65313,65317,65321,65325, + 65329,65333,65337,65341,65345,65349,65352,65356, + 65360,65363,65367,65371,65374,65378,65381,65385, + 65388,65391,65395,65398,65401,65404,65408,65411, + 65414,65417,65420,65423,65426,65429,65431,65434, + 65437,65440,65442,65445,65448,65450,65453,65455, + 65458,65460,65463,65465,65467,65470,65472,65474, + 65476,65478,65480,65482,65484,65486,65488,65490, + 65492,65494,65496,65497,65499,65501,65502,65504, + 65505,65507,65508,65510,65511,65513,65514,65515, + 65516,65518,65519,65520,65521,65522,65523,65524, + 65525,65526,65527,65527,65528,65529,65530,65530, + 65531,65531,65532,65532,65533,65533,65534,65534, + 65534,65535,65535,65535,65535,65535,65535,65535 +}; + + + +angle_t tantoangle[2049] = +{ + 0,333772,667544,1001315,1335086,1668857,2002626,2336395, + 2670163,3003929,3337694,3671457,4005219,4338979,4672736,5006492, + 5340245,5673995,6007743,6341488,6675230,7008968,7342704,7676435, + 8010164,8343888,8677609,9011325,9345037,9678744,10012447,10346145, + 10679838,11013526,11347209,11680887,12014558,12348225,12681885,13015539, + 13349187,13682829,14016464,14350092,14683714,15017328,15350936,15684536, + 16018129,16351714,16685291,17018860,17352422,17685974,18019518,18353054, + 18686582,19020100,19353610,19687110,20020600,20354080,20687552,21021014, + 21354466,21687906,22021338,22354758,22688168,23021568,23354956,23688332, + 24021698,24355052,24688396,25021726,25355046,25688352,26021648,26354930, + 26688200,27021456,27354702,27687932,28021150,28354356,28687548,29020724, + 29353888,29687038,30020174,30353296,30686404,31019496,31352574,31685636, + 32018684,32351718,32684734,33017736,33350722,33683692,34016648,34349584, + 34682508,35015412,35348300,35681172,36014028,36346868,36679688,37012492, + 37345276,37678044,38010792,38343524,38676240,39008936,39341612,39674272, + 40006912,40339532,40672132,41004716,41337276,41669820,42002344,42334848, + 42667332,42999796,43332236,43664660,43997060,44329444,44661800,44994140, + 45326456,45658752,45991028,46323280,46655512,46987720,47319908,47652072, + 47984212,48316332,48648428,48980500,49312548,49644576,49976580,50308556, + 50640512,50972444,51304352,51636236,51968096,52299928,52631740,52963524, + 53295284,53627020,53958728,54290412,54622068,54953704,55285308,55616888, + 55948444,56279972,56611472,56942948,57274396,57605816,57937212,58268576, + 58599916,58931228,59262512,59593768,59924992,60256192,60587364,60918508, + 61249620,61580704,61911760,62242788,62573788,62904756,63235692,63566604, + 63897480,64228332,64559148,64889940,65220696,65551424,65882120,66212788, + 66543420,66874024,67204600,67535136,67865648,68196120,68526568,68856984, + 69187360,69517712,69848024,70178304,70508560,70838776,71168960,71499112, + 71829224,72159312,72489360,72819376,73149360,73479304,73809216,74139096, + 74468936,74798744,75128520,75458264,75787968,76117632,76447264,76776864, + 77106424,77435952,77765440,78094888,78424304,78753688,79083032,79412336, + 79741608,80070840,80400032,80729192,81058312,81387392,81716432,82045440, + 82374408,82703336,83032224,83361080,83689896,84018664,84347400,84676096, + 85004760,85333376,85661952,85990488,86318984,86647448,86975864,87304240, + 87632576,87960872,88289128,88617344,88945520,89273648,89601736,89929792, + 90257792,90585760,90913688,91241568,91569408,91897200,92224960,92552672, + 92880336,93207968,93535552,93863088,94190584,94518040,94845448,95172816, + 95500136,95827416,96154648,96481832,96808976,97136080,97463136,97790144, + 98117112,98444032,98770904,99097736,99424520,99751256,100077944,100404592, + 100731192,101057744,101384248,101710712,102037128,102363488,102689808,103016080, + 103342312,103668488,103994616,104320696,104646736,104972720,105298656,105624552, + 105950392,106276184,106601928,106927624,107253272,107578872,107904416,108229920, + 108555368,108880768,109206120,109531416,109856664,110181872,110507016,110832120, + 111157168,111482168,111807112,112132008,112456856,112781648,113106392,113431080, + 113755720,114080312,114404848,114729328,115053760,115378136,115702464,116026744, + 116350960,116675128,116999248,117323312,117647320,117971272,118295176,118619024, + 118942816,119266560,119590248,119913880,120237456,120560984,120884456,121207864, + 121531224,121854528,122177784,122500976,122824112,123147200,123470224,123793200, + 124116120,124438976,124761784,125084528,125407224,125729856,126052432,126374960, + 126697424,127019832,127342184,127664472,127986712,128308888,128631008,128953072, + 129275080,129597024,129918912,130240744,130562520,130884232,131205888,131527480, + 131849016,132170496,132491912,132813272,133134576,133455816,133776992,134098120, + 134419184,134740176,135061120,135382000,135702816,136023584,136344272,136664912, + 136985488,137306016,137626464,137946864,138267184,138587456,138907664,139227808, + 139547904,139867920,140187888,140507776,140827616,141147392,141467104,141786752, + 142106336,142425856,142745312,143064720,143384048,143703312,144022512,144341664, + 144660736,144979744,145298704,145617584,145936400,146255168,146573856,146892480, + 147211040,147529536,147847968,148166336,148484640,148802880,149121056,149439152, + 149757200,150075168,150393072,150710912,151028688,151346400,151664048,151981616, + 152299136,152616576,152933952,153251264,153568496,153885680,154202784,154519824, + 154836784,155153696,155470528,155787296,156104000,156420624,156737200,157053696, + 157370112,157686480,158002768,158318976,158635136,158951216,159267232,159583168, + 159899040,160214848,160530592,160846256,161161840,161477376,161792832,162108208, + 162423520,162738768,163053952,163369040,163684080,163999040,164313936,164628752, + 164943504,165258176,165572784,165887312,166201776,166516160,166830480,167144736, + 167458912,167773008,168087040,168400992,168714880,169028688,169342432,169656096, + 169969696,170283216,170596672,170910032,171223344,171536576,171849728,172162800, + 172475808,172788736,173101600,173414384,173727104,174039728,174352288,174664784, + 174977200,175289536,175601792,175913984,176226096,176538144,176850096,177161984, + 177473792,177785536,178097200,178408784,178720288,179031728,179343088,179654368, + 179965568,180276704,180587744,180898720,181209616,181520448,181831184,182141856, + 182452448,182762960,183073408,183383760,183694048,184004240,184314368,184624416, + 184934400,185244288,185554096,185863840,186173504,186483072,186792576,187102000, + 187411344,187720608,188029808,188338912,188647936,188956896,189265760,189574560, + 189883264,190191904,190500448,190808928,191117312,191425632,191733872,192042016, + 192350096,192658096,192966000,193273840,193581584,193889264,194196848,194504352, + 194811792,195119136,195426400,195733584,196040688,196347712,196654656,196961520, + 197268304,197574992,197881616,198188144,198494592,198800960,199107248,199413456, + 199719584,200025616,200331584,200637456,200943248,201248960,201554576,201860128, + 202165584,202470960,202776256,203081456,203386592,203691632,203996592,204301472, + 204606256,204910976,205215600,205520144,205824592,206128960,206433248,206737456, + 207041584,207345616,207649568,207953424,208257216,208560912,208864512,209168048, + 209471488,209774832,210078112,210381296,210684384,210987408,211290336,211593184, + 211895936,212198608,212501184,212803680,213106096,213408432,213710672,214012816, + 214314880,214616864,214918768,215220576,215522288,215823920,216125472,216426928, + 216728304,217029584,217330784,217631904,217932928,218233856,218534704,218835472, + 219136144,219436720,219737216,220037632,220337952,220638192,220938336,221238384, + 221538352,221838240,222138032,222437728,222737344,223036880,223336304,223635664, + 223934912,224234096,224533168,224832160,225131072,225429872,225728608,226027232, + 226325776,226624240,226922608,227220880,227519056,227817152,228115168,228413088, + 228710912,229008640,229306288,229603840,229901312,230198688,230495968,230793152, + 231090256,231387280,231684192,231981024,232277760,232574416,232870960,233167440, + 233463808,233760096,234056288,234352384,234648384,234944304,235240128,235535872, + 235831504,236127056,236422512,236717888,237013152,237308336,237603424,237898416, + 238193328,238488144,238782864,239077488,239372016,239666464,239960816,240255072, + 240549232,240843312,241137280,241431168,241724960,242018656,242312256,242605776, + 242899200,243192512,243485744,243778896,244071936,244364880,244657744,244950496, + 245243168,245535744,245828224,246120608,246412912,246705104,246997216,247289216, + 247581136,247872960,248164688,248456320,248747856,249039296,249330640,249621904, + 249913056,250204128,250495088,250785968,251076736,251367424,251658016,251948512, + 252238912,252529200,252819408,253109520,253399536,253689456,253979280,254269008, + 254558640,254848176,255137632,255426976,255716224,256005376,256294432,256583392, + 256872256,257161024,257449696,257738272,258026752,258315136,258603424,258891600, + 259179696,259467696,259755600,260043392,260331104,260618704,260906224,261193632, + 261480960,261768176,262055296,262342320,262629248,262916080,263202816,263489456, + 263776000,264062432,264348784,264635024,264921168,265207216,265493168,265779024, + 266064784,266350448,266636000,266921472,267206832,267492096,267777264,268062336, + 268347312,268632192,268916960,269201632,269486208,269770688,270055072,270339360, + 270623552,270907616,271191616,271475488,271759296,272042976,272326560,272610048, + 272893440,273176736,273459936,273743040,274026048,274308928,274591744,274874432, + 275157024,275439520,275721920,276004224,276286432,276568512,276850528,277132416, + 277414240,277695936,277977536,278259040,278540448,278821728,279102944,279384032, + 279665056,279945952,280226752,280507456,280788064,281068544,281348960,281629248, + 281909472,282189568,282469568,282749440,283029248,283308960,283588544,283868032, + 284147424,284426720,284705920,284985024,285264000,285542912,285821696,286100384, + 286378976,286657440,286935840,287214112,287492320,287770400,288048384,288326240, + 288604032,288881696,289159264,289436768,289714112,289991392,290268576,290545632, + 290822592,291099456,291376224,291652896,291929440,292205888,292482272,292758528, + 293034656,293310720,293586656,293862496,294138240,294413888,294689440,294964864, + 295240192,295515424,295790560,296065600,296340512,296615360,296890080,297164704, + 297439200,297713632,297987936,298262144,298536256,298810240,299084160,299357952, + 299631648,299905248,300178720,300452128,300725408,300998592,301271680,301544640, + 301817536,302090304,302362976,302635520,302908000,303180352,303452608,303724768, + 303996800,304268768,304540608,304812320,305083968,305355520,305626944,305898272, + 306169472,306440608,306711616,306982528,307253344,307524064,307794656,308065152, + 308335552,308605856,308876032,309146112,309416096,309685984,309955744,310225408, + 310494976,310764448,311033824,311303072,311572224,311841280,312110208,312379040, + 312647776,312916416,313184960,313453376,313721696,313989920,314258016,314526016, + 314793920,315061728,315329408,315597024,315864512,316131872,316399168,316666336, + 316933408,317200384,317467232,317733984,318000640,318267200,318533632,318799968, + 319066208,319332352,319598368,319864288,320130112,320395808,320661408,320926912, + 321192320,321457632,321722816,321987904,322252864,322517760,322782528,323047200, + 323311744,323576192,323840544,324104800,324368928,324632992,324896928,325160736, + 325424448,325688096,325951584,326215008,326478304,326741504,327004608,327267584, + 327530464,327793248,328055904,328318496,328580960,328843296,329105568,329367712, + 329629760,329891680,330153536,330415264,330676864,330938400,331199808,331461120, + 331722304,331983392,332244384,332505280,332766048,333026752,333287296,333547776, + 333808128,334068384,334328544,334588576,334848512,335108352,335368064,335627712, + 335887200,336146624,336405920,336665120,336924224,337183200,337442112,337700864, + 337959552,338218112,338476576,338734944,338993184,339251328,339509376,339767296, + 340025120,340282848,340540480,340797984,341055392,341312704,341569888,341826976, + 342083968,342340832,342597600,342854272,343110848,343367296,343623648,343879904, + 344136032,344392064,344648000,344903808,345159520,345415136,345670656,345926048, + 346181344,346436512,346691616,346946592,347201440,347456224,347710880,347965440, + 348219872,348474208,348728448,348982592,349236608,349490528,349744320,349998048, + 350251648,350505152,350758528,351011808,351264992,351518048,351771040,352023872, + 352276640,352529280,352781824,353034272,353286592,353538816,353790944,354042944, + 354294880,354546656,354798368,355049952,355301440,355552800,355804096,356055264, + 356306304,356557280,356808128,357058848,357309504,357560032,357810464,358060768, + 358311008,358561088,358811104,359060992,359310784,359560480,359810048,360059520, + 360308896,360558144,360807296,361056352,361305312,361554144,361802880,362051488, + 362300032,362548448,362796736,363044960,363293056,363541024,363788928,364036704, + 364284384,364531936,364779392,365026752,365274016,365521152,365768192,366015136, + 366261952,366508672,366755296,367001792,367248192,367494496,367740704,367986784, + 368232768,368478656,368724416,368970080,369215648,369461088,369706432,369951680, + 370196800,370441824,370686752,370931584,371176288,371420896,371665408,371909792, + 372154080,372398272,372642336,372886304,373130176,373373952,373617600,373861152, + 374104608,374347936,374591168,374834304,375077312,375320224,375563040,375805760, + 376048352,376290848,376533248,376775520,377017696,377259776,377501728,377743584, + 377985344,378227008,378468544,378709984,378951328,379192544,379433664,379674688, + 379915584,380156416,380397088,380637696,380878176,381118560,381358848,381599040, + 381839104,382079072,382318912,382558656,382798304,383037856,383277280,383516640, + 383755840,383994976,384233984,384472896,384711712,384950400,385188992,385427488, + 385665888,385904160,386142336,386380384,386618368,386856224,387093984,387331616, + 387569152,387806592,388043936,388281152,388518272,388755296,388992224,389229024, + 389465728,389702336,389938816,390175200,390411488,390647680,390883744,391119712, + 391355584,391591328,391826976,392062528,392297984,392533312,392768544,393003680, + 393238720,393473632,393708448,393943168,394177760,394412256,394646656,394880960, + 395115136,395349216,395583200,395817088,396050848,396284512,396518080,396751520, + 396984864,397218112,397451264,397684288,397917248,398150080,398382784,398615424, + 398847936,399080320,399312640,399544832,399776928,400008928,400240832,400472608, + 400704288,400935872,401167328,401398720,401629984,401861120,402092192,402323136, + 402553984,402784736,403015360,403245888,403476320,403706656,403936896,404167008, + 404397024,404626944,404856736,405086432,405316032,405545536,405774912,406004224, + 406233408,406462464,406691456,406920320,407149088,407377760,407606336,407834784, + 408063136,408291392,408519520,408747584,408975520,409203360,409431072,409658720, + 409886240,410113664,410340992,410568192,410795296,411022304,411249216,411476032, + 411702720,411929312,412155808,412382176,412608480,412834656,413060736,413286720, + 413512576,413738336,413964000,414189568,414415040,414640384,414865632,415090784, + 415315840,415540800,415765632,415990368,416215008,416439552,416663968,416888288, + 417112512,417336640,417560672,417784576,418008384,418232096,418455712,418679200, + 418902624,419125920,419349120,419572192,419795200,420018080,420240864,420463552, + 420686144,420908608,421130976,421353280,421575424,421797504,422019488,422241344, + 422463104,422684768,422906336,423127776,423349120,423570400,423791520,424012576, + 424233536,424454368,424675104,424895744,425116288,425336736,425557056,425777280, + 425997408,426217440,426437376,426657184,426876928,427096544,427316064,427535488, + 427754784,427974016,428193120,428412128,428631040,428849856,429068544,429287168, + 429505664,429724064,429942368,430160576,430378656,430596672,430814560,431032352, + 431250048,431467616,431685120,431902496,432119808,432336992,432554080,432771040, + 432987936,433204736,433421408,433637984,433854464,434070848,434287104,434503296, + 434719360,434935360,435151232,435367008,435582656,435798240,436013696,436229088, + 436444352,436659520,436874592,437089568,437304416,437519200,437733856,437948416, + 438162880,438377248,438591520,438805696,439019744,439233728,439447584,439661344, + 439875008,440088576,440302048,440515392,440728672,440941824,441154880,441367872, + 441580736,441793472,442006144,442218720,442431168,442643552,442855808,443067968, + 443280032,443492000,443703872,443915648,444127296,444338880,444550336,444761696, + 444972992,445184160,445395232,445606176,445817056,446027840,446238496,446449088, + 446659552,446869920,447080192,447290400,447500448,447710432,447920320,448130112, + 448339776,448549376,448758848,448968224,449177536,449386720,449595808,449804800, + 450013664,450222464,450431168,450639776,450848256,451056640,451264960,451473152, + 451681248,451889248,452097152,452304960,452512672,452720288,452927808,453135232, + 453342528,453549760,453756864,453963904,454170816,454377632,454584384,454791008, + 454997536,455203968,455410304,455616544,455822688,456028704,456234656,456440512, + 456646240,456851904,457057472,457262912,457468256,457673536,457878688,458083744, + 458288736,458493600,458698368,458903040,459107616,459312096,459516480,459720768, + 459924960,460129056,460333056,460536960,460740736,460944448,461148064,461351584, + 461554976,461758304,461961536,462164640,462367680,462570592,462773440,462976160, + 463178816,463381344,463583776,463786144,463988384,464190560,464392608,464594560, + 464796448,464998208,465199872,465401472,465602944,465804320,466005600,466206816, + 466407904,466608896,466809824,467010624,467211328,467411936,467612480,467812896, + 468013216,468213440,468413600,468613632,468813568,469013440,469213184,469412832, + 469612416,469811872,470011232,470210528,470409696,470608800,470807776,471006688, + 471205472,471404192,471602784,471801312,471999712,472198048,472396288,472594400, + 472792448,472990400,473188256,473385984,473583648,473781216,473978688,474176064, + 474373344,474570528,474767616,474964608,475161504,475358336,475555040,475751648, + 475948192,476144608,476340928,476537184,476733312,476929376,477125344,477321184, + 477516960,477712640,477908224,478103712,478299104,478494400,478689600,478884704, + 479079744,479274656,479469504,479664224,479858880,480053408,480247872,480442240, + 480636512,480830656,481024736,481218752,481412640,481606432,481800128,481993760, + 482187264,482380704,482574016,482767264,482960416,483153472,483346432,483539296, + 483732064,483924768,484117344,484309856,484502240,484694560,484886784,485078912, + 485270944,485462880,485654720,485846464,486038144,486229696,486421184,486612576, + 486803840,486995040,487186176,487377184,487568096,487758912,487949664,488140320, + 488330880,488521312,488711712,488901984,489092160,489282240,489472256,489662176, + 489851968,490041696,490231328,490420896,490610336,490799712,490988960,491178144, + 491367232,491556224,491745120,491933920,492122656,492311264,492499808,492688256, + 492876608,493064864,493253056,493441120,493629120,493817024,494004832,494192544, + 494380160,494567712,494755136,494942496,495129760,495316928,495504000,495691008, + 495877888,496064704,496251424,496438048,496624608,496811040,496997408,497183680, + 497369856,497555936,497741920,497927840,498113632,498299360,498484992,498670560, + 498856000,499041376,499226656,499411840,499596928,499781920,499966848,500151680, + 500336416,500521056,500705600,500890080,501074464,501258752,501442944,501627040, + 501811072,501995008,502178848,502362592,502546240,502729824,502913312,503096704, + 503280000,503463232,503646368,503829408,504012352,504195200,504377984,504560672, + 504743264,504925760,505108192,505290496,505472736,505654912,505836960,506018944, + 506200832,506382624,506564320,506745952,506927488,507108928,507290272,507471552, + 507652736,507833824,508014816,508195744,508376576,508557312,508737952,508918528, + 509099008,509279392,509459680,509639904,509820032,510000064,510180000,510359872, + 510539648,510719328,510898944,511078432,511257856,511437216,511616448,511795616, + 511974688,512153664,512332576,512511392,512690112,512868768,513047296,513225792, + 513404160,513582432,513760640,513938784,514116800,514294752,514472608,514650368, + 514828064,515005664,515183168,515360608,515537952,515715200,515892352,516069440, + 516246432,516423328,516600160,516776896,516953536,517130112,517306592,517482976, + 517659264,517835488,518011616,518187680,518363648,518539520,518715296,518891008, + 519066624,519242144,519417600,519592960,519768256,519943424,520118528,520293568, + 520468480,520643328,520818112,520992800,521167392,521341888,521516320,521690656, + 521864896,522039072,522213152,522387168,522561056,522734912,522908640,523082304, + 523255872,523429376,523602784,523776096,523949312,524122464,524295552,524468512, + 524641440,524814240,524986976,525159616,525332192,525504640,525677056,525849344, + 526021568,526193728,526365792,526537760,526709632,526881440,527053152,527224800, + 527396352,527567840,527739200,527910528,528081728,528252864,528423936,528594880, + 528765760,528936576,529107296,529277920,529448480,529618944,529789344,529959648, + 530129856,530300000,530470048,530640000,530809888,530979712,531149440,531319072, + 531488608,531658080,531827488,531996800,532166016,532335168,532504224,532673184, + 532842080,533010912,533179616,533348288,533516832,533685312,533853728,534022048, + 534190272,534358432,534526496,534694496,534862400,535030240,535197984,535365632, + 535533216,535700704,535868128,536035456,536202720,536369888,536536992,536704000, + 536870912 +}; + +byte* screens[5]; + +int dirtybox[4]; + +// Now where did these came from? +byte gammatable[5][256] = +{ + {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, + 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, + 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96, + 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128, + 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, + 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, + 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, + 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, + 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255}, + + {2,4,5,7,8,10,11,12,14,15,16,18,19,20,21,23,24,25,26,27,29,30,31, + 32,33,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,54,55, + 56,57,58,59,60,61,62,63,64,65,66,67,69,70,71,72,73,74,75,76,77, + 78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98, + 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,129, + 130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145, + 146,147,148,148,149,150,151,152,153,154,155,156,157,158,159,160, + 161,162,163,163,164,165,166,167,168,169,170,171,172,173,174,175, + 175,176,177,178,179,180,181,182,183,184,185,186,186,187,188,189, + 190,191,192,193,194,195,196,196,197,198,199,200,201,202,203,204, + 205,205,206,207,208,209,210,211,212,213,214,214,215,216,217,218, + 219,220,221,222,222,223,224,225,226,227,228,229,230,230,231,232, + 233,234,235,236,237,237,238,239,240,241,242,243,244,245,245,246, + 247,248,249,250,251,252,252,253,254,255}, + + {4,7,9,11,13,15,17,19,21,22,24,26,27,29,30,32,33,35,36,38,39,40,42, + 43,45,46,47,48,50,51,52,54,55,56,57,59,60,61,62,63,65,66,67,68,69, + 70,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93, + 94,95,96,97,98,100,101,102,103,104,105,106,107,108,109,110,111,112, + 113,114,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128, + 129,130,131,132,133,133,134,135,136,137,138,139,140,141,142,143,144, + 144,145,146,147,148,149,150,151,152,153,153,154,155,156,157,158,159, + 160,160,161,162,163,164,165,166,166,167,168,169,170,171,172,172,173, + 174,175,176,177,178,178,179,180,181,182,183,183,184,185,186,187,188, + 188,189,190,191,192,193,193,194,195,196,197,197,198,199,200,201,201, + 202,203,204,205,206,206,207,208,209,210,210,211,212,213,213,214,215, + 216,217,217,218,219,220,221,221,222,223,224,224,225,226,227,228,228, + 229,230,231,231,232,233,234,235,235,236,237,238,238,239,240,241,241, + 242,243,244,244,245,246,247,247,248,249,250,251,251,252,253,254,254, + 255}, + + {8,12,16,19,22,24,27,29,31,34,36,38,40,41,43,45,47,49,50,52,53,55, + 57,58,60,61,63,64,65,67,68,70,71,72,74,75,76,77,79,80,81,82,84,85, + 86,87,88,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107, + 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134,135,135,136,137,138,139,140, + 141,142,143,143,144,145,146,147,148,149,150,150,151,152,153,154,155, + 155,156,157,158,159,160,160,161,162,163,164,165,165,166,167,168,169, + 169,170,171,172,173,173,174,175,176,176,177,178,179,180,180,181,182, + 183,183,184,185,186,186,187,188,189,189,190,191,192,192,193,194,195, + 195,196,197,197,198,199,200,200,201,202,202,203,204,205,205,206,207, + 207,208,209,210,210,211,212,212,213,214,214,215,216,216,217,218,219, + 219,220,221,221,222,223,223,224,225,225,226,227,227,228,229,229,230, + 231,231,232,233,233,234,235,235,236,237,237,238,238,239,240,240,241, + 242,242,243,244,244,245,246,246,247,247,248,249,249,250,251,251,252, + 253,253,254,254,255}, + + {16,23,28,32,36,39,42,45,48,50,53,55,57,60,62,64,66,68,69,71,73,75,76, + 78,80,81,83,84,86,87,89,90,92,93,94,96,97,98,100,101,102,103,105,106, + 107,108,109,110,112,113,114,115,116,117,118,119,120,121,122,123,124, + 125,126,128,128,129,130,131,132,133,134,135,136,137,138,139,140,141, + 142,143,143,144,145,146,147,148,149,150,150,151,152,153,154,155,155, + 156,157,158,159,159,160,161,162,163,163,164,165,166,166,167,168,169, + 169,170,171,172,172,173,174,175,175,176,177,177,178,179,180,180,181, + 182,182,183,184,184,185,186,187,187,188,189,189,190,191,191,192,193, + 193,194,195,195,196,196,197,198,198,199,200,200,201,202,202,203,203, + 204,205,205,206,207,207,208,208,209,210,210,211,211,212,213,213,214, + 214,215,216,216,217,217,218,219,219,220,220,221,221,222,223,223,224, + 224,225,225,226,227,227,228,228,229,229,230,230,231,232,232,233,233, + 234,234,235,235,236,236,237,237,238,239,239,240,240,241,241,242,242, + 243,243,244,244,245,245,246,246,247,247,248,248,249,249,250,250,251, + 251,252,252,253,254,254,255,255} +}; + +int usegamma; + + +// +// V_MarkRect +// +void V_MarkRect(int x, int y, int width, int height) +{ + M_AddToBox(dirtybox, x, y); + M_AddToBox(dirtybox, x + width - 1, y + height - 1); +} + + +// +// V_CopyRect +// +void V_CopyRect(int srcx, + int srcy, + int srcscrn, + int width, + int height, + int destx, + int desty, + int destscrn) +{ + byte* src; + byte* dest; + +#ifdef RANGECHECK + if (srcx<0 + || srcx + width >SCREENWIDTH + || srcy<0 + || srcy + height>SCREENHEIGHT + || destx<0 || destx + width >SCREENWIDTH + || desty<0 + || desty + height>SCREENHEIGHT + || (unsigned)srcscrn > 4 + || (unsigned)destscrn > 4) + { + I_Error((char*)"Error: Bad V_CopyRect"); + } +#endif + V_MarkRect(destx, desty, width, height); + + src = screens[srcscrn] + SCREENWIDTH * srcy + srcx; + dest = screens[destscrn] + SCREENWIDTH * desty + destx; + + for (; height > 0; height--) + { + doom_memcpy(dest, src, width); + src += SCREENWIDTH; + dest += SCREENWIDTH; + } +} + + +// +// V_DrawPatch +// Masks a column based masked pic to the screen. +// +void V_DrawPatch(int x, int y, int scrn, patch_t* patch) +{ + int count; + int col; + column_t* column; + byte* desttop; + byte* dest; + byte* source; + int w; + + y -= SHORT(patch->topoffset); + x -= SHORT(patch->leftoffset); +#ifdef RANGECHECK + if (x<0 + || x + SHORT(patch->width) >SCREENWIDTH + || y<0 + || y + SHORT(patch->height)>SCREENHEIGHT + || (unsigned)scrn > 4) + { + //doom_print("Patch at %d,%d exceeds LFB\n", x, y); + doom_print("Patch at "); + doom_print(doom_itoa(x, 10)); + doom_print(","); + doom_print(doom_itoa(y, 10)); + doom_print(" exceeds LFB\n"); + // No I_Error abort - what is up with TNT.WAD? + doom_print("V_DrawPatch: bad patch (ignored)\n"); + return; + } +#endif + + if (!scrn) + V_MarkRect(x, y, SHORT(patch->width), SHORT(patch->height)); + + col = 0; + desttop = screens[scrn] + y * SCREENWIDTH + x; + + w = SHORT(patch->width); + + for (; col < w; x++, col++, desttop++) + { + column = (column_t*)((byte*)patch + LONG(patch->columnofs[col])); + + // step through the posts in a column + while (column->topdelta != 0xff) + { + source = (byte*)column + 3; + dest = desttop + column->topdelta * SCREENWIDTH; + count = column->length; + + while (count--) + { + *dest = *source++; + dest += SCREENWIDTH; + } + column = (column_t*)((byte*)column + column->length + + 4); + } + } +} + + +// +// V_DrawPatchFlipped +// Masks a column based masked pic to the screen. +// Flips horizontally, e.g. to mirror face. +// +void V_DrawPatchFlipped(int x, int y, int scrn, patch_t* patch) +{ + int count; + int col; + column_t* column; + byte* desttop; + byte* dest; + byte* source; + int w; + + y -= SHORT(patch->topoffset); + x -= SHORT(patch->leftoffset); +#ifdef RANGECHECK + if (x<0 + || x + SHORT(patch->width) >SCREENWIDTH + || y<0 + || y + SHORT(patch->height)>SCREENHEIGHT + || (unsigned)scrn > 4) + { + //doom_print("Patch origin %d,%d exceeds LFB\n", x, y); + doom_print("Patch origin "); + doom_print(doom_itoa(x, 10)); + doom_print(","); + doom_print(doom_itoa(y, 10)); + doom_print(" exceeds LFB\n"); + I_Error((char*)"Error: Bad V_DrawPatch in V_DrawPatchFlipped"); + } +#endif + + if (!scrn) + V_MarkRect(x, y, SHORT(patch->width), SHORT(patch->height)); + + col = 0; + desttop = screens[scrn] + y * SCREENWIDTH + x; + + w = SHORT(patch->width); + + for (; col < w; x++, col++, desttop++) + { + column = (column_t*)((byte*)patch + LONG(patch->columnofs[w - 1 - col])); + + // step through the posts in a column + while (column->topdelta != 0xff) + { + source = (byte*)column + 3; + dest = desttop + column->topdelta * SCREENWIDTH; + count = column->length; + + while (count--) + { + *dest = *source++; + dest += SCREENWIDTH; + } + column = (column_t*)((byte*)column + column->length + + 4); + } + } +} + + +void V_DrawPatchRectDirect(int x, int y, int scrn, patch_t* patch, int src_x, int src_w) +{ + int count; + int col; + column_t* column; + byte* desttop; + byte* dest; + byte* source; + int w; + + y -= SHORT(patch->topoffset); + x -= SHORT(patch->leftoffset); +#ifdef RANGECHECK + if (x<0 + || x + SHORT(src_w) >SCREENWIDTH + || y<0 + || y + SHORT(patch->height)>SCREENHEIGHT + || (unsigned)scrn > 4) + { + //doom_print("Patch at %d,%d exceeds LFB\n", x, y); + doom_print("Patch at "); + doom_print(doom_itoa(x, 10)); + doom_print(","); + doom_print(doom_itoa(y, 10)); + doom_print(" exceeds LFB\n"); + // No I_Error abort - what is up with TNT.WAD? + doom_print("V_DrawPatch: bad patch (ignored)\n"); + return; + } +#endif + + if (!scrn) + V_MarkRect(x, y, SHORT(src_w), SHORT(patch->height)); + + col = 0; + desttop = screens[scrn] + y * SCREENWIDTH + x; + + w = SHORT(src_w); + + for (; col < w; x++, col++, desttop++) + { + column = (column_t*)((byte*)patch + LONG(patch->columnofs[col + src_x])); + + // step through the posts in a column + while (column->topdelta != 0xff) + { + source = (byte*)column + 3; + dest = desttop + column->topdelta * SCREENWIDTH; + count = column->length; + + while (count--) + { + *dest = *source++; + dest += SCREENWIDTH; + } + column = (column_t*)((byte*)column + column->length + + 4); + } + } +} + + +// +// V_DrawPatchDirect +// Draws directly to the screen on the pc. +// +void V_DrawPatchDirect(int x, int y, int scrn, patch_t* patch) +{ + V_DrawPatch(x, y, scrn, patch); +} + + +// +// V_DrawBlock +// Draw a linear block of pixels into the view buffer. +// +void V_DrawBlock(int x, int y, int scrn, int width, int height, byte* src) +{ + byte* dest; + +#ifdef RANGECHECK + if (x<0 + || x + width >SCREENWIDTH + || y<0 + || y + height>SCREENHEIGHT + || (unsigned)scrn > 4) + { + I_Error((char*)"Error: Bad V_DrawBlock"); + } +#endif + + V_MarkRect(x, y, width, height); + + dest = screens[scrn] + y * SCREENWIDTH + x; + + while (height--) + { + doom_memcpy(dest, src, width); + src += width; + dest += SCREENWIDTH; + } +} + + +// +// V_GetBlock +// Gets a linear block of pixels from the view buffer. +// +void V_GetBlock(int x, int y, int scrn, int width, int height, byte* dest) +{ + byte* src; + +#ifdef RANGECHECK + if (x<0 + || x + width >SCREENWIDTH + || y<0 + || y + height>SCREENHEIGHT + || (unsigned)scrn > 4) + { + I_Error((char*)"Error: Bad V_DrawBlock"); + } +#endif + + src = screens[scrn] + y * SCREENWIDTH + x; + + while (height--) + { + doom_memcpy(dest, src, width); + src += SCREENWIDTH; + dest += width; + } +} + + +// +// V_Init +// +void V_Init(void) +{ + int i; + byte* base; + + // stick these in low dos memory on PCs + + base = I_AllocLow(SCREENWIDTH * SCREENHEIGHT * 4); + + for (i = 0; i < 4; i++) + screens[i] = base + i * SCREENWIDTH * SCREENHEIGHT; +} +lumpinfo_t* lumpinfo; +int numlumps; +void** lumpcache; +int reloadlump; +char* reloadname; +int info[2500][10]; +int profilecount; + + +void doom_strupr(char* s) +{ + while (*s) + { + *s = doom_toupper(*s); s++; + } +} + + +void ExtractFileBase(char* path, char* dest) +{ + char* src; + int length; + + src = path + doom_strlen(path) - 1; + + // back up until a \ or the start + while (src != path + && *(src - 1) != '\\' + && *(src - 1) != '/') + { + src--; + } + + // copy up to eight characters + doom_memset(dest, 0, 8); + length = 0; + + while (*src && *src != '.') + { + if (++length == 9) + { + //I_Error("Error: Filename base of %s >8 chars", path); + doom_strcpy(error_buf, "Error: Filename base of "); + doom_concat(error_buf, path); + doom_concat(error_buf, " >8 chars"); + I_Error(error_buf); + } + + *dest++ = doom_toupper((int)*src++); + } +} + + +// +// LUMP BASED ROUTINES. +// + +// +// W_AddFile +// All files are optional, but at least one file must be +// found (PWAD, if all required lumps are present). +// Files with a .wad extension are wadlink files +// with multiple lumps. +// Other files are single lumps with the base filename +// for the lump name. +// +// If filename starts with a tilde, the file is handled +// specially to allow map reloads. +// But: the reload feature is a fragile hack... +void W_AddFile(char* filename) +{ + wadinfo_t header; + lumpinfo_t* lump_p; + unsigned i; + void* handle; + int length; + int startlump; + filelump_t* fileinfo; + filelump_t singleinfo; + void* storehandle; + void* allocated = 0; + + // open the file and add to directory + + // handle reload indicator. + if (filename[0] == '~') + { + filename++; + reloadname = filename; + reloadlump = numlumps; + } + + if ((handle = doom_open(filename, "rb")) == 0) + { + //doom_print(" couldn't open %s\n", filename); + doom_print(" couldn't open "); + doom_print(filename); + doom_print("\n"); + return; + } + + //doom_print(" adding %s\n", filename); + doom_print(" adding "); + doom_print(filename); + doom_print("\n"); + startlump = numlumps; + + if (doom_strcasecmp(filename + doom_strlen(filename) - 3, "wad")) + { + // single lump file + fileinfo = &singleinfo; + singleinfo.filepos = 0; + //singleinfo.size = LONG(filelength(handle)); + doom_seek(handle, 0, DOOM_SEEK_END); + singleinfo.size = doom_tell(handle); + doom_seek(handle, 0, DOOM_SEEK_SET); + ExtractFileBase(filename, singleinfo.name); + numlumps++; + } + else + { + // WAD file + doom_read(handle, &header, sizeof(header)); + if (doom_strncmp(header.identification, "IWAD", 4)) + { + // Homebrew levels? + if (doom_strncmp(header.identification, "PWAD", 4)) + { + //I_Error("Error: Wad file %s doesn't have IWAD " + // "or PWAD id\n", filename); + doom_strcpy(error_buf, "Error: Wad file "); + doom_concat(error_buf, filename); + doom_concat(error_buf, " doesn't have IWAD or PWAD id\n"); + I_Error(error_buf); + } + + // ???modifiedgame = doom_true; + } + header.numlumps = LONG(header.numlumps); + header.infotableofs = LONG(header.infotableofs); + length = header.numlumps * sizeof(filelump_t); + allocated = (filelump_t*)doom_malloc(length); + fileinfo = (filelump_t*)allocated; + doom_seek(handle, header.infotableofs, DOOM_SEEK_SET); + doom_read(handle, fileinfo, length); + numlumps += header.numlumps; + } + + + // Fill in lumpinfo + static int previous_realloc_size = 1; + void* new_lumpinfo = doom_malloc(numlumps * sizeof(lumpinfo_t)); + doom_memcpy(new_lumpinfo, lumpinfo, previous_realloc_size); + previous_realloc_size = numlumps * sizeof(lumpinfo_t); + lumpinfo = (lumpinfo_t*)new_lumpinfo; + + if (!lumpinfo) + I_Error((char*)"Error: Couldn't realloc lumpinfo"); + + lump_p = &lumpinfo[startlump]; + + storehandle = reloadname ? 0 : handle; + + for (i = startlump; i < (unsigned)numlumps; i++, lump_p++, fileinfo++) + { + lump_p->handle = storehandle; + lump_p->position = LONG(fileinfo->filepos); + lump_p->size = LONG(fileinfo->size); + doom_strncpy(lump_p->name, fileinfo->name, 8); + } + + if (reloadname) + doom_close(handle); + + if (allocated) doom_free(allocated); +} + + +// +// W_Reload +// Flushes any of the reloadable lumps in memory +// and reloads the directory. +// +void W_Reload(void) +{ + wadinfo_t header; + int lumpcount; + lumpinfo_t* lump_p; + unsigned i; + void* handle; + int length; + filelump_t* fileinfo; + + if (!reloadname) + return; + + if ((handle = doom_open(reloadname, "rb")) == 0) + { + //I_Error("Error: W_Reload: couldn't open %s", reloadname); + doom_strcpy(error_buf, "Error: W_Reload: couldn't open "); + doom_concat(error_buf, reloadname); + I_Error(error_buf); + } + + doom_read(handle, &header, sizeof(header)); + lumpcount = LONG(header.numlumps); + header.infotableofs = LONG(header.infotableofs); + length = lumpcount * sizeof(filelump_t); + fileinfo = (filelump_t*)doom_malloc(length); + doom_seek(handle, header.infotableofs, DOOM_SEEK_SET); + doom_read(handle, fileinfo, length); + + // Fill in lumpinfo + lump_p = &lumpinfo[reloadlump]; + + for (i = reloadlump; + i < (unsigned)(reloadlump + lumpcount); + i++, lump_p++, fileinfo++) + { + if (lumpcache[i]) + Z_Free(lumpcache[i]); + + lump_p->position = LONG(fileinfo->filepos); + lump_p->size = LONG(fileinfo->size); + } + + doom_close(handle); + + doom_free(fileinfo); +} + + +// +// W_InitMultipleFiles +// Pass a null terminated list of files to use. +// All files are optional, but at least one file +// must be found. +// Files with a .wad extension are idlink files +// with multiple lumps. +// Other files are single lumps with the base filename +// for the lump name. +// Lump names can appear multiple times. +// The name searcher looks backwards, so a later file +// does override all earlier ones. +// +void W_InitMultipleFiles(char** filenames) +{ + int size; + + // open all the files, load headers, and count lumps + numlumps = 0; + + // will be realloced as lumps are added + lumpinfo = (lumpinfo_t*)doom_malloc(1); + + for (; *filenames; filenames++) + W_AddFile(*filenames); + + if (!numlumps) + I_Error((char*)"Error: W_InitFiles: no files found"); + + // set up caching + size = numlumps * sizeof(*lumpcache); + lumpcache = (void**)doom_malloc(size); + + if (!lumpcache) + I_Error((char*)"Error: Couldn't allocate lumpcache"); + + doom_memset(lumpcache, 0, size); +} + + +// +// W_InitFile +// Just initialize from a single file. +// +void W_InitFile(char* filename) +{ + char* names[2]; + + names[0] = filename; + names[1] = 0; + W_InitMultipleFiles(names); +} + + +// +// W_NumLumps +// +int W_NumLumps(void) +{ + return numlumps; +} + + +// +// W_CheckNumForName +// Returns -1 if name not found. +// +int W_CheckNumForName(char* name) +{ + union + { + char s[9]; + int x[2]; + } name8; + + int v1; + int v2; + lumpinfo_t* lump_p; + + // make the name into two integers for easy compares + doom_strncpy(name8.s, name, 8); + + // in case the name was a fill 8 chars + name8.s[8] = 0; + + // case insensitive + doom_strupr(name8.s); + + v1 = name8.x[0]; + v2 = name8.x[1]; + + + // scan backwards so patch lump files take precedence + lump_p = lumpinfo + numlumps; + + while (lump_p-- != lumpinfo) + { + if (*(int*)lump_p->name == v1 + && *(int*)&lump_p->name[4] == v2) + { + return (int)(lump_p - lumpinfo); + } + } + + // TFB. Not found. + return -1; +} + + +// +// W_GetNumForName +// Calls W_CheckNumForName, but bombs out if not found. +// +int W_GetNumForName(char* name) +{ + int i; + + i = W_CheckNumForName(name); + + if (i == -1) + { + if (doom_strcmp(name, "HELP2") == 0) + { + name = (char*)"HELP1"; // Ultimate Doom EXE was modified to use this instead + i = W_CheckNumForName(name); + } + if (i == -1) + { + //I_Error("Error: W_GetNumForName, %s not found!", name); + doom_strcpy(error_buf, "Error: W_GetNumForName, "); + doom_concat(error_buf, name); + doom_concat(error_buf, " not found!"); + I_Error(error_buf); + } + } + + return i; +} + + +// +// W_LumpLength +// Returns the buffer size needed to load the given lump. +// +int W_LumpLength(int lump) +{ + if (lump >= numlumps) + { + //I_Error("Error: W_LumpLength: %i >= numlumps", lump); + doom_strcpy(error_buf, "Error: W_LumpLength: "); + doom_concat(error_buf, doom_itoa(lump, 10)); + doom_concat(error_buf, " >= numlumps"); + I_Error(error_buf); + } + + return lumpinfo[lump].size; +} + + +// +// W_ReadLump +// Loads the lump into the given buffer, +// which must be >= W_LumpLength(). +// +void W_ReadLump(int lump, void* dest) +{ + int c; + lumpinfo_t* l; + void* handle; + + if (lump >= numlumps) + { + //I_Error("Error: W_ReadLump: %i >= numlumps", lump); + doom_strcpy(error_buf, "Error: W_ReadLump: "); + doom_concat(error_buf, doom_itoa(lump, 10)); + doom_concat(error_buf, " >= numlump"); + I_Error(error_buf); + } + + l = lumpinfo + lump; + + // ??? I_BeginRead (); + + if (l->handle == 0) + { + // reloadable file, so use open / read / close + if ((handle = doom_open(reloadname, "rb")) == 0) + { + //I_Error("Error: W_ReadLump: couldn't open %s", reloadname); + doom_strcpy(error_buf, "Error: W_ReadLump: couldn't open "); + doom_concat(error_buf, reloadname); + I_Error(error_buf); + } + } + else + handle = l->handle; + + doom_seek(handle, l->position, DOOM_SEEK_SET); + c = doom_read(handle, dest, l->size); + + if (c < l->size) + { + //I_Error("Error: W_ReadLump: only read %i of %i on lump %i", + // c, l->size, lump); + doom_strcpy(error_buf, "Error: W_ReadLump: only read "); + doom_concat(error_buf, doom_itoa(c, 10)); + doom_concat(error_buf, " of "); + doom_concat(error_buf, doom_itoa(l->size, 10)); + doom_concat(error_buf, " on lump "); + doom_concat(error_buf, doom_itoa(lump, 10)); + I_Error(error_buf); + } + + if (l->handle == 0) + doom_close(handle); + + // ??? I_EndRead (); +} + + +// +// W_CacheLumpNum +// +void* W_CacheLumpNum(int lump, int tag) +{ + byte* ptr; + + if ((unsigned)lump >= (unsigned)numlumps) + { + //I_Error("Error: W_CacheLumpNum: %i >= numlumps", lump); + doom_strcpy(error_buf, "Error: W_CacheLumpNum: "); + doom_concat(error_buf, doom_itoa(lump, 10)); + doom_concat(error_buf, " >= numlumps"); + I_Error(error_buf); + } + + if (!lumpcache[lump]) + { + // read the lump in + + //doom_print ("cache miss on lump %i\n",lump); + ptr = (byte*)Z_Malloc(W_LumpLength(lump), tag, &lumpcache[lump]); + W_ReadLump(lump, lumpcache[lump]); + } + else + { + //doom_print ("cache hit on lump %i\n",lump); + Z_ChangeTag(lumpcache[lump], tag); + } + + return lumpcache[lump]; +} + + +// +// W_CacheLumpName +// +void* W_CacheLumpName(char* name, int tag) +{ + return W_CacheLumpNum(W_GetNumForName(name), tag); +} + + +// +// W_Profile +// +void W_Profile(void) +{ + int i; + memblock_t* block; + void* ptr; + char ch; + void* f; + int j; + char name[9]; + + for (i = 0; i < numlumps; i++) + { + ptr = lumpcache[i]; + if (!ptr) + { + ch = ' '; + continue; + } + else + { + block = (memblock_t*)((byte*)ptr - sizeof(memblock_t)); + if (block->tag < PU_PURGELEVEL) + ch = 'S'; + else + ch = 'P'; + } + info[i][profilecount] = ch; + } + profilecount++; + + f = doom_open("waddump.txt", "w"); + name[8] = 0; + + for (i = 0; i < numlumps; i++) + { + doom_memcpy(name, lumpinfo[i].name, 8); + + for (j = 0; j < 8; j++) + if (!name[j]) + break; + + for (; j < 8; j++) + name[j] = ' '; + + doom_fprint(f, name); + doom_fprint(f, " "); + + for (j = 0; j < profilecount; j++) + { + //fprintf(f, " %c", info[i][j]); + doom_fprint(f, " "); + doom_fprint(f, doom_ctoa(info[i][j])); + } + + doom_fprint(f, "\n"); + } + + doom_close(f); +} +#define NUMEPISODES 4 +#define NUMMAPS 9 + +// GLOBAL LOCATIONS +#define WI_TITLEY 2 +#define WI_SPACINGY 33 + +// SINGPLE-PLAYER STUFF +#define SP_STATSX 50 +#define SP_STATSY 50 + +#define SP_TIMEX 16 +#define SP_TIMEY (SCREENHEIGHT-32) + +// NET GAME STUFF +#define NG_STATSY 50 +#define NG_STATSX (32 + SHORT(star->width)/2 + 32*!dofrags) + +#define NG_SPACINGX 64 + +// DEATHMATCH STUFF +#define DM_MATRIXX 42 +#define DM_MATRIXY 68 + +#define DM_SPACINGX 40 + +#define DM_TOTALSX 269 + +#define DM_KILLERSX 10 +#define DM_KILLERSY 100 +#define DM_VICTIMSX 5 +#define DM_VICTIMSY 50 + +#define FB 0 + +// States for single-player +#define SP_KILLS 0 +#define SP_ITEMS 2 +#define SP_SECRET 4 +#define SP_FRAGS 6 +#define SP_TIME 8 +#define SP_PAR ST_TIME + +#define SP_PAUSE 1 + +// in seconds +#define SHOWNEXTLOCDELAY 4 +//#define SHOWLASTLOCDELAY SHOWNEXTLOCDELAY + + +typedef enum +{ + ANIM_ALWAYS, + ANIM_RANDOM, + ANIM_LEVEL +} animenum_t; + + +typedef struct +{ + int x; + int y; +} point_t; + + +// +// Animation. +// There is another anim_t used in p_spec. +// +typedef struct +{ + animenum_t type; + + // period in tics between animations + int period; + + // number of animation frames + int nanims; + + // location of animation + point_t loc; + + // ALWAYS: n/a, + // RANDOM: period deviation (<256), + // LEVEL: level + int data1; + + // ALWAYS: n/a, + // RANDOM: random base period, + // LEVEL: n/a + int data2; + + // actual graphics for frames of animations + patch_t* p[3]; + + // following must be initialized to zero before use! + + // next value of bcnt (used in conjunction with period) + int nexttic; + + // last drawn animation frame + int lastdrawn; + + // next frame number to animate + int ctr; + + // used by RANDOM and LEVEL when animating + int state; +} anim_t_wi_stuff; + + +static point_t lnodes[NUMEPISODES][NUMMAPS] = +{ + // Episode 0 World Map + { + { 185, 164 }, // location of level 0 (CJ) + { 148, 143 }, // location of level 1 (CJ) + { 69, 122 }, // location of level 2 (CJ) + { 209, 102 }, // location of level 3 (CJ) + { 116, 89 }, // location of level 4 (CJ) + { 166, 55 }, // location of level 5 (CJ) + { 71, 56 }, // location of level 6 (CJ) + { 135, 29 }, // location of level 7 (CJ) + { 71, 24 } // location of level 8 (CJ) + }, + + // Episode 1 World Map should go here + { + { 254, 25 }, // location of level 0 (CJ) + { 97, 50 }, // location of level 1 (CJ) + { 188, 64 }, // location of level 2 (CJ) + { 128, 78 }, // location of level 3 (CJ) + { 214, 92 }, // location of level 4 (CJ) + { 133, 130 }, // location of level 5 (CJ) + { 208, 136 }, // location of level 6 (CJ) + { 148, 140 }, // location of level 7 (CJ) + { 235, 158 } // location of level 8 (CJ) + }, + + // Episode 2 World Map should go here + { + { 156, 168 }, // location of level 0 (CJ) + { 48, 154 }, // location of level 1 (CJ) + { 174, 95 }, // location of level 2 (CJ) + { 265, 75 }, // location of level 3 (CJ) + { 130, 48 }, // location of level 4 (CJ) + { 279, 23 }, // location of level 5 (CJ) + { 198, 48 }, // location of level 6 (CJ) + { 140, 25 }, // location of level 7 (CJ) + { 281, 136 } // location of level 8 (CJ) + } +}; + + +// +// Animation locations for episode 0 (1). +// Using patches saves a lot of space, +// as they replace 320x200 full screen frames. +// +static anim_t_wi_stuff epsd0animinfo[] = +{ + { ANIM_ALWAYS, TICRATE / 3, 3, { 224, 104 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 184, 160 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 112, 136 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 72, 112 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 88, 96 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 64, 48 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 192, 40 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 136, 16 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 80, 16 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 64, 24 } } +}; + +static anim_t_wi_stuff epsd1animinfo[] = +{ + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 1 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 2 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 3 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 4 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 5 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 6 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 7 }, + { ANIM_LEVEL, TICRATE / 3, 3, { 192, 144 }, 8 }, + { ANIM_LEVEL, TICRATE / 3, 1, { 128, 136 }, 8 } +}; + +static anim_t_wi_stuff epsd2animinfo[] = +{ + { ANIM_ALWAYS, TICRATE / 3, 3, { 104, 168 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 40, 136 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 160, 96 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 104, 80 } }, + { ANIM_ALWAYS, TICRATE / 3, 3, { 120, 32 } }, + { ANIM_ALWAYS, TICRATE / 4, 3, { 40, 0 } } +}; + +static int NUMANIMS[NUMEPISODES] = +{ + sizeof(epsd0animinfo) / sizeof(anim_t_wi_stuff), + sizeof(epsd1animinfo) / sizeof(anim_t_wi_stuff), + sizeof(epsd2animinfo) / sizeof(anim_t_wi_stuff) +}; + +static anim_t_wi_stuff* anims_wi_stuff[NUMEPISODES] = +{ + epsd0animinfo, + epsd1animinfo, + epsd2animinfo +}; + + +// +// GENERAL DATA +// + +// +// Locally used stuff. +// + +// used to accelerate or skip a stage +static int acceleratestage; + +// wbs->pnum +static int me; + +// specifies current state +static stateenum_t state; + +// contains information passed into intermission +static wbstartstruct_t* wbs; + +static wbplayerstruct_t* plrs; // wbs->plyr[] + +// used for general timing +static int cnt; + +// used for timing of background animation +static int bcnt; + +// signals to refresh everything for one frame +static int firstrefresh; + +static int cnt_kills[MAXPLAYERS]; +static int cnt_items[MAXPLAYERS]; +static int cnt_secret[MAXPLAYERS]; +static int cnt_time; +static int cnt_par; +static int cnt_pause; + +// # of commercial levels +static int NUMCMAPS; + + +// +// GRAPHICS +// + +// background (map of levels). +static patch_t* bg; + +// You Are Here graphic +static patch_t* yah[2]; + +// splat +static patch_t* splat; + +// %, : graphics +static patch_t* percent; +static patch_t* colon; + +// 0-9 graphic +static patch_t* num[10]; + +// minus sign +static patch_t* wiminus; + +// "Finished!" graphics +static patch_t* finished; + +// "Entering" graphic +static patch_t* entering; + +// "secret" +static patch_t* sp_secret; + +// "Kills", "Scrt", "Items", "Frags" +static patch_t* kills; +static patch_t* secret; +static patch_t* items; +static patch_t* frags; + +// Time sucks. +static patch_t* time_patch; +static patch_t* par; +static patch_t* sucks; + +// "killers", "victims" +static patch_t* killers; +static patch_t* victims; + +// "Total", your face, your dead face +static patch_t* total; +static patch_t* star; +static patch_t* bstar; + +// "red P[1..MAXPLAYERS]" +static patch_t* p[MAXPLAYERS]; + +// "gray P[1..MAXPLAYERS]" +static patch_t* bp[MAXPLAYERS]; + +// Name graphics of each level (centered) +static patch_t** lnames; + +static doom_boolean snl_pointeron = doom_false; +static int dm_state; +static int dm_frags[MAXPLAYERS][MAXPLAYERS]; +static int dm_totals[MAXPLAYERS]; +static int cnt_frags[MAXPLAYERS]; +static int dofrags; +static int ng_state; +static int sp_state; + + +// +// CODE +// + +void WI_slamBackground(void) +{ + doom_memcpy(screens[0], screens[1], SCREENWIDTH * SCREENHEIGHT); + V_MarkRect(0, 0, SCREENWIDTH, SCREENHEIGHT); +} + + +// The ticker is used to detect keys +// because of timing issues in netgames. +doom_boolean WI_Responder(event_t* ev) +{ + return doom_false; +} + + +// Draws " Finished!" +void WI_drawLF(void) +{ + int y = WI_TITLEY; + + // draw + V_DrawPatch((SCREENWIDTH - SHORT(lnames[wbs->last]->width)) / 2, + y, FB, lnames[wbs->last]); + + // draw "Finished!" + y += (5 * SHORT(lnames[wbs->last]->height)) / 4; + + V_DrawPatch((SCREENWIDTH - SHORT(finished->width)) / 2, + y, FB, finished); +} + + +// Draws "Entering " +void WI_drawEL(void) +{ + int y = WI_TITLEY; + + // draw "Entering" + V_DrawPatch((SCREENWIDTH - SHORT(entering->width)) / 2, + y, FB, entering); + + // draw level + y += (5 * SHORT(lnames[wbs->next]->height)) / 4; + + V_DrawPatch((SCREENWIDTH - SHORT(lnames[wbs->next]->width)) / 2, + y, FB, lnames[wbs->next]); +} + + +void WI_drawOnLnode(int n, patch_t* c[]) +{ + int i; + int left; + int top; + int right; + int bottom; + doom_boolean fits = doom_false; + + i = 0; + do + { + left = lnodes[wbs->epsd][n].x - SHORT(c[i]->leftoffset); + top = lnodes[wbs->epsd][n].y - SHORT(c[i]->topoffset); + right = left + SHORT(c[i]->width); + bottom = top + SHORT(c[i]->height); + + if (left >= 0 + && right < SCREENWIDTH + && top >= 0 + && bottom < SCREENHEIGHT) + { + fits = doom_true; + } + else + { + i++; + } + } while (!fits && i != 2); + + if (fits && i < 2) + { + V_DrawPatch(lnodes[wbs->epsd][n].x, lnodes[wbs->epsd][n].y, + FB, c[i]); + } + else + { + // DEBUG + //doom_print("Could not place patch on level %d", n + 1); + doom_print("Could not place patch on level "); + doom_print(doom_itoa(n + 1, 10)); + } +} + + +void WI_initAnimatedBack(void) +{ + int i; + anim_t_wi_stuff* a; + + if (gamemode == commercial) + return; + + if (wbs->epsd > 2) + return; + + for (i = 0; i < NUMANIMS[wbs->epsd]; i++) + { + a = &anims_wi_stuff[wbs->epsd][i]; + + // init variables + a->ctr = -1; + + // specify the next time to draw it + if (a->type == ANIM_ALWAYS) + a->nexttic = bcnt + 1 + (M_Random() % a->period); + else if (a->type == ANIM_RANDOM) + a->nexttic = bcnt + 1 + a->data2 + (M_Random() % a->data1); + else if (a->type == ANIM_LEVEL) + a->nexttic = bcnt + 1; + } +} + + +void WI_updateAnimatedBack(void) +{ + int i; + anim_t_wi_stuff* a; + + if (gamemode == commercial) + return; + + if (wbs->epsd > 2) + return; + + for (i = 0; i < NUMANIMS[wbs->epsd]; i++) + { + a = &anims_wi_stuff[wbs->epsd][i]; + + if (bcnt == a->nexttic) + { + switch (a->type) + { + case ANIM_ALWAYS: + if (++a->ctr >= a->nanims) a->ctr = 0; + a->nexttic = bcnt + a->period; + break; + + case ANIM_RANDOM: + a->ctr++; + if (a->ctr == a->nanims) + { + a->ctr = -1; + a->nexttic = bcnt + a->data2 + (M_Random() % a->data1); + } + else a->nexttic = bcnt + a->period; + break; + + case ANIM_LEVEL: + // gawd-awful hack for level anims + if (!(state == StatCount && i == 7) + && wbs->next == a->data1) + { + a->ctr++; + if (a->ctr == a->nanims) a->ctr--; + a->nexttic = bcnt + a->period; + } + break; + } + } + } +} + + +void WI_drawAnimatedBack(void) +{ + int i; + anim_t_wi_stuff* a; + + if (commercial) + return; + + if (wbs->epsd > 2) + return; + + for (i = 0; i < NUMANIMS[wbs->epsd]; i++) + { + a = &anims_wi_stuff[wbs->epsd][i]; + + if (a->ctr >= 0) + V_DrawPatch(a->loc.x, a->loc.y, FB, a->p[a->ctr]); + } +} + + +// +// Draws a number. +// If digits > 0, then use that many digits minimum, +// otherwise only use as many as necessary. +// Returns new x position. +// +int WI_drawNum(int x, int y, int n, int digits) +{ + int fontwidth = SHORT(num[0]->width); + int neg; + int temp; + + if (digits < 0) + { + if (!n) + { + // make variable-length zeros 1 digit long + digits = 1; + } + else + { + // figure out # of digits in # + digits = 0; + temp = n; + + while (temp) + { + temp /= 10; + digits++; + } + } + } + + neg = n < 0; + if (neg) + n = -n; + + // if non-number, do not draw it + if (n == 1994) + return 0; + + // draw the new number + while (digits--) + { + x -= fontwidth; + V_DrawPatch(x, y, FB, num[n % 10]); + n /= 10; + } + + // draw a minus sign if necessary + if (neg) + V_DrawPatch(x -= 8, y, FB, wiminus); + + return x; +} + + +void WI_drawPercent(int x, int y, int p) +{ + if (p < 0) + return; + + V_DrawPatch(x, y, FB, percent); + WI_drawNum(x, y, p, -1); +} + + +// +// Display level completion time and par, +// or "sucks" message if overflow. +// +void WI_drawTime(int x, int y, int t) +{ + int div; + int n; + + if (t < 0) + return; + + if (t <= 61 * 59) + { + div = 1; + + do + { + n = (t / div) % 60; + x = WI_drawNum(x, y, n, 2) - SHORT(colon->width); + div *= 60; + + // draw + if (div == 60 || t / div) + V_DrawPatch(x, y, FB, colon); + + } while (t / div); + } + else + { + // "sucks" + V_DrawPatch(x - SHORT(sucks->width), y, FB, sucks); + } +} + + +void WI_End(void) +{ + void WI_unloadData(void); + WI_unloadData(); +} + + +void WI_initNoState(void) +{ + state = NoState; + acceleratestage = 0; + cnt = 10; +} + + +void WI_updateNoState(void) +{ + WI_updateAnimatedBack(); + + if (!--cnt) + { + WI_End(); + G_WorldDone(); + } +} + + +void WI_initShowNextLoc(void) +{ + state = ShowNextLoc; + acceleratestage = 0; + cnt = SHOWNEXTLOCDELAY * TICRATE; + + WI_initAnimatedBack(); +} + + +void WI_updateShowNextLoc(void) +{ + WI_updateAnimatedBack(); + + if (!--cnt || acceleratestage) + WI_initNoState(); + else + snl_pointeron = (cnt & 31) < 20; +} + + +void WI_drawShowNextLoc(void) +{ + int i; + int last; + + WI_slamBackground(); + + // draw animated background + WI_drawAnimatedBack(); + + if (gamemode != commercial) + { + if (wbs->epsd > 2) + { + WI_drawEL(); + return; + } + + last = (wbs->last == 8) ? wbs->next - 1 : wbs->last; + + // draw a splat on taken cities. + for (i = 0; i <= last; i++) + WI_drawOnLnode(i, &splat); + + // splat the secret level? + if (wbs->didsecret) + WI_drawOnLnode(8, &splat); + + // draw flashing ptr + if (snl_pointeron) + WI_drawOnLnode(wbs->next, yah); + } + + // draws which level you are entering.. + if ((gamemode != commercial) + || wbs->next != 30) + WI_drawEL(); +} + + +void WI_drawNoState(void) +{ + snl_pointeron = doom_true; + WI_drawShowNextLoc(); +} + + +int WI_fragSum(int playernum) +{ + int i; + int frags = 0; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] + && i != playernum) + { + frags += plrs[playernum].frags[i]; + } + } + + // JDC hack - negative frags. + frags -= plrs[playernum].frags[playernum]; + // UNUSED if (frags < 0) + // frags = 0; + + return frags; +} + + +void WI_initDeathmatchStats(void) +{ + int i; + int j; + + state = StatCount; + acceleratestage = 0; + dm_state = 1; + + cnt_pause = TICRATE; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i]) + { + for (j = 0; j < MAXPLAYERS; j++) + if (playeringame[j]) + dm_frags[i][j] = 0; + + dm_totals[i] = 0; + } + } + + WI_initAnimatedBack(); +} + + +void WI_updateDeathmatchStats(void) +{ + int i; + int j; + + doom_boolean stillticking; + + WI_updateAnimatedBack(); + + if (acceleratestage && dm_state != 4) + { + acceleratestage = 0; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i]) + { + for (j = 0; j < MAXPLAYERS; j++) + if (playeringame[j]) + dm_frags[i][j] = plrs[i].frags[j]; + + dm_totals[i] = WI_fragSum(i); + } + } + + + S_StartSound(0, sfx_barexp); + dm_state = 4; + } + + + if (dm_state == 2) + { + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + stillticking = doom_false; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i]) + { + for (j = 0; j < MAXPLAYERS; j++) + { + if (playeringame[j] + && dm_frags[i][j] != plrs[i].frags[j]) + { + if (plrs[i].frags[j] < 0) + dm_frags[i][j]--; + else + dm_frags[i][j]++; + + if (dm_frags[i][j] > 99) + dm_frags[i][j] = 99; + + if (dm_frags[i][j] < -99) + dm_frags[i][j] = -99; + + stillticking = doom_true; + } + } + dm_totals[i] = WI_fragSum(i); + + if (dm_totals[i] > 99) + dm_totals[i] = 99; + + if (dm_totals[i] < -99) + dm_totals[i] = -99; + } + + } + if (!stillticking) + { + S_StartSound(0, sfx_barexp); + dm_state++; + } + + } + else if (dm_state == 4) + { + if (acceleratestage) + { + S_StartSound(0, sfx_slop); + + if (gamemode == commercial) + WI_initNoState(); + else + WI_initShowNextLoc(); + } + } + else if (dm_state & 1) + { + if (!--cnt_pause) + { + dm_state++; + cnt_pause = TICRATE; + } + } +} + + +void WI_drawDeathmatchStats(void) +{ + int i; + int j; + int x; + int y; + int w; + + int lh; // line height + + lh = WI_SPACINGY; + + WI_slamBackground(); + + // draw animated background + WI_drawAnimatedBack(); + WI_drawLF(); + + // draw stat titles (top line) + V_DrawPatch(DM_TOTALSX - SHORT(total->width) / 2, + DM_MATRIXY - WI_SPACINGY + 10, + FB, + total); + + V_DrawPatch(DM_KILLERSX, DM_KILLERSY, FB, killers); + V_DrawPatch(DM_VICTIMSX, DM_VICTIMSY, FB, victims); + + // draw P? + x = DM_MATRIXX + DM_SPACINGX; + y = DM_MATRIXY; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i]) + { + V_DrawPatch(x - SHORT(p[i]->width) / 2, + DM_MATRIXY - WI_SPACINGY, + FB, + p[i]); + + V_DrawPatch(DM_MATRIXX - SHORT(p[i]->width) / 2, + y, + FB, + p[i]); + + if (i == me) + { + V_DrawPatch(x - SHORT(p[i]->width) / 2, + DM_MATRIXY - WI_SPACINGY, + FB, + bstar); + + V_DrawPatch(DM_MATRIXX - SHORT(p[i]->width) / 2, + y, + FB, + star); + } + } + else + { + // V_DrawPatch(x-SHORT(bp[i]->width)/2, + // DM_MATRIXY - WI_SPACINGY, FB, bp[i]); + // V_DrawPatch(DM_MATRIXX-SHORT(bp[i]->width)/2, + // y, FB, bp[i]); + } + x += DM_SPACINGX; + y += WI_SPACINGY; + } + + // draw stats + y = DM_MATRIXY + 10; + w = SHORT(num[0]->width); + + for (i = 0; i < MAXPLAYERS; i++) + { + x = DM_MATRIXX + DM_SPACINGX; + + if (playeringame[i]) + { + for (j = 0; j < MAXPLAYERS; j++) + { + if (playeringame[j]) + WI_drawNum(x + w, y, dm_frags[i][j], 2); + + x += DM_SPACINGX; + } + WI_drawNum(DM_TOTALSX + w, y, dm_totals[i], 2); + } + y += WI_SPACINGY; + } +} + + +void WI_initNetgameStats(void) +{ + int i; + + state = StatCount; + acceleratestage = 0; + ng_state = 1; + + cnt_pause = TICRATE; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + cnt_kills[i] = cnt_items[i] = cnt_secret[i] = cnt_frags[i] = 0; + + dofrags += WI_fragSum(i); + } + + dofrags = !!dofrags; + + WI_initAnimatedBack(); +} + + +void WI_updateNetgameStats(void) +{ + int i; + int fsum; + + doom_boolean stillticking; + + WI_updateAnimatedBack(); + + if (acceleratestage && ng_state != 10) + { + acceleratestage = 0; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + cnt_kills[i] = (plrs[i].skills * 100) / wbs->maxkills; + cnt_items[i] = (plrs[i].sitems * 100) / wbs->maxitems; + cnt_secret[i] = (plrs[i].ssecret * 100) / wbs->maxsecret; + + if (dofrags) + cnt_frags[i] = WI_fragSum(i); + } + S_StartSound(0, sfx_barexp); + ng_state = 10; + } + + if (ng_state == 2) + { + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + stillticking = doom_false; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + cnt_kills[i] += 2; + + if (cnt_kills[i] >= (plrs[i].skills * 100) / wbs->maxkills) + cnt_kills[i] = (plrs[i].skills * 100) / wbs->maxkills; + else + stillticking = doom_true; + } + + if (!stillticking) + { + S_StartSound(0, sfx_barexp); + ng_state++; + } + } + else if (ng_state == 4) + { + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + stillticking = doom_false; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + cnt_items[i] += 2; + if (cnt_items[i] >= (plrs[i].sitems * 100) / wbs->maxitems) + cnt_items[i] = (plrs[i].sitems * 100) / wbs->maxitems; + else + stillticking = doom_true; + } + if (!stillticking) + { + S_StartSound(0, sfx_barexp); + ng_state++; + } + } + else if (ng_state == 6) + { + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + stillticking = doom_false; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + cnt_secret[i] += 2; + + if (cnt_secret[i] >= (plrs[i].ssecret * 100) / wbs->maxsecret) + cnt_secret[i] = (plrs[i].ssecret * 100) / wbs->maxsecret; + else + stillticking = doom_true; + } + + if (!stillticking) + { + S_StartSound(0, sfx_barexp); + ng_state += 1 + 2 * !dofrags; + } + } + else if (ng_state == 8) + { + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + stillticking = doom_false; + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + cnt_frags[i] += 1; + + if (cnt_frags[i] >= (fsum = WI_fragSum(i))) + cnt_frags[i] = fsum; + else + stillticking = doom_true; + } + + if (!stillticking) + { + S_StartSound(0, sfx_pldeth); + ng_state++; + } + } + else if (ng_state == 10) + { + if (acceleratestage) + { + S_StartSound(0, sfx_sgcock); + if (gamemode == commercial) + WI_initNoState(); + else + WI_initShowNextLoc(); + } + } + else if (ng_state & 1) + { + if (!--cnt_pause) + { + ng_state++; + cnt_pause = TICRATE; + } + } +} + + +void WI_drawNetgameStats(void) +{ + int i; + int x; + int y; + int pwidth = SHORT(percent->width); + + WI_slamBackground(); + + // draw animated background + WI_drawAnimatedBack(); + + WI_drawLF(); + + // draw stat titles (top line) + V_DrawPatch(NG_STATSX + NG_SPACINGX - SHORT(kills->width), + NG_STATSY, FB, kills); + + V_DrawPatch(NG_STATSX + 2 * NG_SPACINGX - SHORT(items->width), + NG_STATSY, FB, items); + + V_DrawPatch(NG_STATSX + 3 * NG_SPACINGX - SHORT(secret->width), + NG_STATSY, FB, secret); + + if (dofrags) + V_DrawPatch(NG_STATSX + 4 * NG_SPACINGX - SHORT(frags->width), + NG_STATSY, FB, frags); + + // draw stats + y = NG_STATSY + SHORT(kills->height); + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + + x = NG_STATSX; + V_DrawPatch(x - SHORT(p[i]->width), y, FB, p[i]); + + if (i == me) + V_DrawPatch(x - SHORT(p[i]->width), y, FB, star); + + x += NG_SPACINGX; + WI_drawPercent(x - pwidth, y + 10, cnt_kills[i]); x += NG_SPACINGX; + WI_drawPercent(x - pwidth, y + 10, cnt_items[i]); x += NG_SPACINGX; + WI_drawPercent(x - pwidth, y + 10, cnt_secret[i]); x += NG_SPACINGX; + + if (dofrags) + WI_drawNum(x, y + 10, cnt_frags[i], -1); + + y += WI_SPACINGY; + } +} + + +void WI_initStats(void) +{ + state = StatCount; + acceleratestage = 0; + sp_state = 1; + cnt_kills[0] = cnt_items[0] = cnt_secret[0] = -1; + cnt_time = cnt_par = -1; + cnt_pause = TICRATE; + + WI_initAnimatedBack(); +} + + +void WI_updateStats(void) +{ + WI_updateAnimatedBack(); + + if (acceleratestage && sp_state != 10) + { + acceleratestage = 0; + cnt_kills[0] = (plrs[me].skills * 100) / wbs->maxkills; + cnt_items[0] = (plrs[me].sitems * 100) / wbs->maxitems; + cnt_secret[0] = (plrs[me].ssecret * 100) / wbs->maxsecret; + cnt_time = plrs[me].stime / TICRATE; + cnt_par = wbs->partime / TICRATE; + S_StartSound(0, sfx_barexp); + sp_state = 10; + } + + if (sp_state == 2) + { + cnt_kills[0] += 2; + + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + if (cnt_kills[0] >= (plrs[me].skills * 100) / wbs->maxkills) + { + cnt_kills[0] = (plrs[me].skills * 100) / wbs->maxkills; + S_StartSound(0, sfx_barexp); + sp_state++; + } + } + else if (sp_state == 4) + { + cnt_items[0] += 2; + + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + if (cnt_items[0] >= (plrs[me].sitems * 100) / wbs->maxitems) + { + cnt_items[0] = (plrs[me].sitems * 100) / wbs->maxitems; + S_StartSound(0, sfx_barexp); + sp_state++; + } + } + else if (sp_state == 6) + { + cnt_secret[0] += 2; + + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + if (cnt_secret[0] >= (plrs[me].ssecret * 100) / wbs->maxsecret) + { + cnt_secret[0] = (plrs[me].ssecret * 100) / wbs->maxsecret; + S_StartSound(0, sfx_barexp); + sp_state++; + } + } + + else if (sp_state == 8) + { + if (!(bcnt & 3)) + S_StartSound(0, sfx_pistol); + + cnt_time += 3; + + if (cnt_time >= plrs[me].stime / TICRATE) + cnt_time = plrs[me].stime / TICRATE; + + cnt_par += 3; + + if (cnt_par >= wbs->partime / TICRATE) + { + cnt_par = wbs->partime / TICRATE; + + if (cnt_time >= plrs[me].stime / TICRATE) + { + S_StartSound(0, sfx_barexp); + sp_state++; + } + } + } + else if (sp_state == 10) + { + if (acceleratestage) + { + S_StartSound(0, sfx_sgcock); + + if (gamemode == commercial) + WI_initNoState(); + else + WI_initShowNextLoc(); + } + } + else if (sp_state & 1) + { + if (!--cnt_pause) + { + sp_state++; + cnt_pause = TICRATE; + } + } +} + + +void WI_drawStats(void) +{ + // line height + int lh; + + lh = (3 * SHORT(num[0]->height)) / 2; + + WI_slamBackground(); + + // draw animated background + WI_drawAnimatedBack(); + + WI_drawLF(); + + V_DrawPatch(SP_STATSX, SP_STATSY, FB, kills); + WI_drawPercent(SCREENWIDTH - SP_STATSX, SP_STATSY, cnt_kills[0]); + + V_DrawPatch(SP_STATSX, SP_STATSY + lh, FB, items); + WI_drawPercent(SCREENWIDTH - SP_STATSX, SP_STATSY + lh, cnt_items[0]); + + V_DrawPatch(SP_STATSX, SP_STATSY + 2 * lh, FB, sp_secret); + WI_drawPercent(SCREENWIDTH - SP_STATSX, SP_STATSY + 2 * lh, cnt_secret[0]); + + V_DrawPatch(SP_TIMEX, SP_TIMEY, FB, time_patch); + WI_drawTime(SCREENWIDTH / 2 - SP_TIMEX, SP_TIMEY, cnt_time); + + if (wbs->epsd < 3) + { + V_DrawPatch(SCREENWIDTH / 2 + SP_TIMEX, SP_TIMEY, FB, par); + WI_drawTime(SCREENWIDTH - SP_TIMEX, SP_TIMEY, cnt_par); + } +} + + +void WI_checkForAccelerate(void) +{ + int i; + player_t* player; + + // check for button presses to skip delays + for (i = 0, player = players; i < MAXPLAYERS; i++, player++) + { + if (playeringame[i]) + { + if (player->cmd.buttons & BT_ATTACK) + { + if (!player->attackdown) + acceleratestage = 1; + player->attackdown = doom_true; + } + else + player->attackdown = doom_false; + if (player->cmd.buttons & BT_USE) + { + if (!player->usedown) + acceleratestage = 1; + player->usedown = doom_true; + } + else + player->usedown = doom_false; + } + } +} + + +// Updates stuff each tick +void WI_Ticker(void) +{ + // counter for general background animation + bcnt++; + + if (bcnt == 1) + { + // intermission music + if (gamemode == commercial) + S_ChangeMusic(mus_dm2int, doom_true); + else + S_ChangeMusic(mus_inter, doom_true); + } + + WI_checkForAccelerate(); + + switch (state) + { + case StatCount: + if (deathmatch) WI_updateDeathmatchStats(); + else if (netgame) WI_updateNetgameStats(); + else WI_updateStats(); + break; + + case ShowNextLoc: + WI_updateShowNextLoc(); + break; + + case NoState: + WI_updateNoState(); + break; + } +} + + +void WI_loadData(void) +{ + int i; + int j; + char name[9]; + anim_t_wi_stuff* a; + + if (gamemode == commercial) + doom_strcpy(name, "INTERPIC"); + else + { + //doom_sprintf(name, "WIMAP%d", wbs->epsd); + doom_strcpy(name, "WIMAP"); + doom_concat(name, doom_itoa(wbs->epsd, 10)); + } + + if (gamemode == retail) + { + if (wbs->epsd == 3) + doom_strcpy(name, "INTERPIC"); + } + + // background + bg = (patch_t*)W_CacheLumpName(name, PU_CACHE); + V_DrawPatch(0, 0, 1, bg); + + if (gamemode == commercial) + { + NUMCMAPS = 32; + lnames = (patch_t**)Z_Malloc(sizeof(patch_t*) * NUMCMAPS, + PU_STATIC, 0); + for (i = 0; i < NUMCMAPS; i++) + { + //doom_sprintf(name, "CWILV%2.2d", i); + doom_strcpy(name, "CWILV"); + if (i < 10) doom_concat(name, "0"); + doom_concat(name, doom_itoa(i, 10)); + lnames[i] = (patch_t*)W_CacheLumpName(name, PU_STATIC); + } + } + else + { + lnames = (patch_t**)Z_Malloc(sizeof(patch_t*) * NUMMAPS, + PU_STATIC, 0); + for (i = 0; i < NUMMAPS; i++) + { + //doom_sprintf(name, "WILV%d%d", wbs->epsd, i); + doom_strcpy(name, "WILV"); + doom_concat(name, doom_itoa(wbs->epsd, 10)); + doom_concat(name, doom_itoa(i, 10)); + lnames[i] = (patch_t*)W_CacheLumpName(name, PU_STATIC); + } + + // you are here + yah[0] = (patch_t*)W_CacheLumpName((char*)"WIURH0", PU_STATIC); + + // you are here (alt.) + yah[1] = (patch_t*)W_CacheLumpName((char*)"WIURH1", PU_STATIC); + + // splat + splat = (patch_t*)W_CacheLumpName((char*)"WISPLAT", PU_STATIC); + + if (wbs->epsd < 3) + { + for (j = 0; j < NUMANIMS[wbs->epsd]; j++) + { + a = &anims_wi_stuff[wbs->epsd][j]; + for (i = 0; i < a->nanims; i++) + { + // MONDO HACK! + if (wbs->epsd != 1 || j != 8) + { + // animations + //doom_sprintf(name, "WIA%d%.2d%.2d", wbs->epsd, j, i); + doom_strcpy(name, "WIA"); + doom_concat(name, doom_itoa(wbs->epsd, 10)); + if (j < 10) doom_concat(name, "0"); + doom_concat(name, doom_itoa(j, 10)); + if (i < 10) doom_concat(name, "0"); + doom_concat(name, doom_itoa(i, 10)); + a->p[i] = (patch_t*)W_CacheLumpName(name, PU_STATIC); + } + else + { + // HACK ALERT! + a->p[i] = anims_wi_stuff[1][4].p[i]; + } + } + } + } + } + + // More hacks on minus sign. + wiminus = (patch_t*)W_CacheLumpName((char*)"WIMINUS", PU_STATIC); + + for (i = 0; i < 10; i++) + { + // numbers 0-9 + //doom_sprintf(name, "WINUM%d", i); + doom_strcpy(name, "WINUM"); + doom_concat(name, doom_itoa(i, 10)); + num[i] = (patch_t*)W_CacheLumpName(name, PU_STATIC); + } + + // percent sign + percent = (patch_t*)W_CacheLumpName((char*)"WIPCNT", PU_STATIC); + + // "finished" + finished = (patch_t*)W_CacheLumpName((char*)"WIF", PU_STATIC); + + // "entering" + entering = (patch_t*)W_CacheLumpName((char*)"WIENTER", PU_STATIC); + + // "kills" + kills = (patch_t*)W_CacheLumpName((char*)"WIOSTK", PU_STATIC); + + // "scrt" + secret = (patch_t*)W_CacheLumpName((char*)"WIOSTS", PU_STATIC); + + // "secret" + sp_secret = (patch_t*)W_CacheLumpName((char*)"WISCRT2", PU_STATIC); + + // Yuck. + if (french) + { + // "items" + if (netgame && !deathmatch) + items = (patch_t*)W_CacheLumpName((char*)"WIOBJ", PU_STATIC); + else + items = (patch_t*)W_CacheLumpName((char*)"WIOSTI", PU_STATIC); + } + else + items = (patch_t*)W_CacheLumpName((char*)"WIOSTI", PU_STATIC); + + // "frgs" + frags = (patch_t*)W_CacheLumpName((char*)"WIFRGS", PU_STATIC); + + // ":" + colon = (patch_t*)W_CacheLumpName((char*)"WICOLON", PU_STATIC); + + // "time" + time_patch = (patch_t*)W_CacheLumpName((char*)"WITIME", PU_STATIC); + + // "sucks" + sucks = (patch_t*)W_CacheLumpName((char*)"WISUCKS", PU_STATIC); + + // "par" + par = (patch_t*)W_CacheLumpName((char*)"WIPAR", PU_STATIC); + + // "killers" (vertical) + killers = (patch_t*)W_CacheLumpName((char*)"WIKILRS", PU_STATIC); + + // "victims" (horiz) + victims = (patch_t*)W_CacheLumpName((char*)"WIVCTMS", PU_STATIC); + + // "total" + total = (patch_t*)W_CacheLumpName((char*)"WIMSTT", PU_STATIC); + + // your face + star = (patch_t*)W_CacheLumpName((char*)"STFST01", PU_STATIC); + + // dead face + bstar = (patch_t*)W_CacheLumpName((char*)"STFDEAD0", PU_STATIC); + + for (i = 0; i < MAXPLAYERS; i++) + { + // "1,2,3,4" + //doom_sprintf(name, "STPB%d", i); + doom_strcpy(name, "STPB"); + doom_concat(name, doom_itoa(i, 10)); + p[i] = (patch_t*)W_CacheLumpName(name, PU_STATIC); + + // "1,2,3,4" + //doom_sprintf(name, "WIBP%d", i + 1); + doom_strcpy(name, "WIBP"); + doom_concat(name, doom_itoa(i + 1, 10)); + bp[i] = (patch_t*)W_CacheLumpName(name, PU_STATIC); + } +} + + +void WI_unloadData(void) +{ + int i; + int j; + + Z_ChangeTag(wiminus, PU_CACHE); + + for (i = 0; i < 10; i++) + Z_ChangeTag(num[i], PU_CACHE); + + if (gamemode == commercial) + { + for (i = 0; i < NUMCMAPS; i++) + Z_ChangeTag(lnames[i], PU_CACHE); + } + else + { + Z_ChangeTag(yah[0], PU_CACHE); + Z_ChangeTag(yah[1], PU_CACHE); + + Z_ChangeTag(splat, PU_CACHE); + + for (i = 0; i < NUMMAPS; i++) + Z_ChangeTag(lnames[i], PU_CACHE); + + if (wbs->epsd < 3) + { + for (j = 0; j < NUMANIMS[wbs->epsd]; j++) + { + if (wbs->epsd != 1 || j != 8) + for (i = 0; i < anims_wi_stuff[wbs->epsd][j].nanims; i++) + Z_ChangeTag(anims_wi_stuff[wbs->epsd][j].p[i], PU_CACHE); + } + } + } + + Z_Free(lnames); + + Z_ChangeTag(percent, PU_CACHE); + Z_ChangeTag(colon, PU_CACHE); + Z_ChangeTag(finished, PU_CACHE); + Z_ChangeTag(entering, PU_CACHE); + Z_ChangeTag(kills, PU_CACHE); + Z_ChangeTag(secret, PU_CACHE); + Z_ChangeTag(sp_secret, PU_CACHE); + Z_ChangeTag(items, PU_CACHE); + Z_ChangeTag(frags, PU_CACHE); + Z_ChangeTag(time_patch, PU_CACHE); + Z_ChangeTag(sucks, PU_CACHE); + Z_ChangeTag(par, PU_CACHE); + + Z_ChangeTag(victims, PU_CACHE); + Z_ChangeTag(killers, PU_CACHE); + Z_ChangeTag(total, PU_CACHE); + // Z_ChangeTag(star, PU_CACHE); + // Z_ChangeTag(bstar, PU_CACHE); + + for (i = 0; i < MAXPLAYERS; i++) + Z_ChangeTag(p[i], PU_CACHE); + + for (i = 0; i < MAXPLAYERS; i++) + Z_ChangeTag(bp[i], PU_CACHE); +} + + +void WI_Drawer(void) +{ + switch (state) + { + case StatCount: + if (deathmatch) + WI_drawDeathmatchStats(); + else if (netgame) + WI_drawNetgameStats(); + else + WI_drawStats(); + break; + + case ShowNextLoc: + WI_drawShowNextLoc(); + break; + + case NoState: + WI_drawNoState(); + break; + } +} + + +void WI_initVariables(wbstartstruct_t* wbstartstruct) +{ + wbs = wbstartstruct; + +#ifdef RANGECHECKING + if (gamemode != commercial) + { + if (gamemode == retail) + RNGCHECK(wbs->epsd, 0, 3); + else + RNGCHECK(wbs->epsd, 0, 2); + } + else + { + RNGCHECK(wbs->last, 0, 8); + RNGCHECK(wbs->next, 0, 8); + } + RNGCHECK(wbs->pnum, 0, MAXPLAYERS); + RNGCHECK(wbs->pnum, 0, MAXPLAYERS); +#endif + + acceleratestage = 0; + cnt = bcnt = 0; + firstrefresh = 1; + me = wbs->pnum; + plrs = wbs->plyr; + + if (!wbs->maxkills) + wbs->maxkills = 1; + + if (!wbs->maxitems) + wbs->maxitems = 1; + + if (!wbs->maxsecret) + wbs->maxsecret = 1; + + if (gamemode != retail) + if (wbs->epsd > 2) + wbs->epsd -= 3; +} + + +void WI_Start(wbstartstruct_t* wbstartstruct) +{ + + WI_initVariables(wbstartstruct); + WI_loadData(); + + if (deathmatch) + WI_initDeathmatchStats(); + else if (netgame) + WI_initNetgameStats(); + else + WI_initStats(); +} +#define ZONEID 0x1d4a11 +#define MINFRAGMENT 64 + + +typedef struct +{ + // total bytes malloced, including header + int size; + + // start / end cap for linked list + memblock_t blocklist; + + memblock_t* rover; +} memzone_t; + + +memzone_t* mainzone; + + +// +// Z_ClearZone +// +void Z_ClearZone(memzone_t* zone) +{ + memblock_t* block; + + // set the entire zone to one free block + zone->blocklist.next = + zone->blocklist.prev = + block = (memblock_t*)((byte*)zone + sizeof(memzone_t)); + + zone->blocklist.user = (void**)zone; + zone->blocklist.tag = PU_STATIC; + zone->rover = block; + + block->prev = block->next = &zone->blocklist; + + // 0 indicates a free block. + block->user = 0; + + block->size = zone->size - sizeof(memzone_t); +} + + +// +// Z_Init +// +void Z_Init(void) +{ + memblock_t* block; + int size; + + mainzone = (memzone_t*)I_ZoneBase(&size); + mainzone->size = size; + + // set the entire zone to one free block + mainzone->blocklist.next = + mainzone->blocklist.prev = + block = (memblock_t*)((byte*)mainzone + sizeof(memzone_t)); + + mainzone->blocklist.user = (void**)mainzone; + mainzone->blocklist.tag = PU_STATIC; + mainzone->rover = block; + + block->prev = block->next = &mainzone->blocklist; + + // 0 indicates a free block. + block->user = 0; + + block->size = mainzone->size - sizeof(memzone_t); +} + + +// +// Z_Free +// +void Z_Free(void* ptr) +{ + memblock_t* block; + memblock_t* other; + + block = (memblock_t*)((byte*)ptr - sizeof(memblock_t)); + + if (block->id != ZONEID) + I_Error((char*)"Error: Z_Free: freed a pointer without ZONEID"); + + if (block->user > (void**)0x100) + { + // smaller values are not pointers + // Note: OS-dependend? + + // clear the user's mark + *block->user = 0; + } + + // mark as free + block->user = 0; + block->tag = 0; + block->id = 0; + + other = block->prev; + + if (!other->user) + { + // merge with previous free block + other->size += block->size; + other->next = block->next; + other->next->prev = other; + + if (block == mainzone->rover) + mainzone->rover = other; + + block = other; + } + + other = block->next; + if (!other->user) + { + // merge the next free block onto the end + block->size += other->size; + block->next = other->next; + block->next->prev = block; + + if (other == mainzone->rover) + mainzone->rover = block; + } +} + + +// +// Z_Malloc +// You can pass a 0 user if the tag is < PU_PURGELEVEL. +// +void* Z_Malloc(int size, int tag, void* user) +{ + int extra; + memblock_t* start; + memblock_t* rover; + memblock_t* newblock; + memblock_t* base; + + size = (size + 3) & ~3; + + // scan through the block list, + // looking for the first free block + // of sufficient size, + // throwing out any purgable blocks along the way. + + // account for size of block header + size += sizeof(memblock_t); + + // if there is a free block behind the rover, + // back up over them + base = mainzone->rover; + + if (!base->prev->user) + base = base->prev; + + rover = base; + start = base->prev; + + do + { + if (rover == start) + { + // scanned all the way around the list + //I_Error("Error: Z_Malloc: failed on allocation of %i bytes", size); + doom_strcpy(error_buf, "Error: Z_Malloc: failed on allocation of "); + doom_concat(error_buf, doom_itoa(size, 10)); + doom_concat(error_buf, " bytes"); + I_Error(error_buf); + } + + if (rover->user) + { + if (rover->tag < PU_PURGELEVEL) + { + // hit a block that can't be purged, + // so move base past it + base = rover = rover->next; + } + else + { + // free the rover block (adding the size to base) + + // the rover can be the base block + base = base->prev; + Z_Free((byte*)rover + sizeof(memblock_t)); + base = base->next; + rover = base->next; + } + } + else + rover = rover->next; + } while (base->user || base->size < size); + + + // found a block big enough + extra = base->size - size; + + if (extra > MINFRAGMENT) + { + // there will be a free fragment after the allocated block + newblock = (memblock_t*)((byte*)base + size); + newblock->size = extra; + + // 0 indicates free block. + newblock->user = 0; + newblock->tag = 0; + newblock->prev = base; + newblock->next = base->next; + newblock->next->prev = newblock; + + base->next = newblock; + base->size = size; + } + + if (user) + { + // mark as an in use block + base->user = (void**)user; + *(void**)user = (void*)((byte*)base + sizeof(memblock_t)); + } + else + { + if (tag >= PU_PURGELEVEL) + I_Error((char*)"Error: Z_Malloc: an owner is required for purgable blocks"); + + // mark as in use, but unowned + base->user = (void**)2; + } + base->tag = tag; + + // next allocation will start looking here + mainzone->rover = base->next; + + base->id = ZONEID; + + return (void*)((byte*)base + sizeof(memblock_t)); +} + + +// +// Z_FreeTags +// +void Z_FreeTags(int lowtag, int hightag) +{ + memblock_t* block; + memblock_t* next; + + for (block = mainzone->blocklist.next; + block != &mainzone->blocklist; + block = next) + { + // get link before freeing + next = block->next; + + // free block? + if (!block->user) + continue; + + if (block->tag >= lowtag && block->tag <= hightag) + Z_Free((byte*)block + sizeof(memblock_t)); + } +} + + +// +// Z_DumpHeap +// Note: TFileDumpHeap( stdout ) ? +// +void Z_DumpHeap(int lowtag, int hightag) +{ + memblock_t* block; + + //doom_print("zone size: %i location: %p\n", + // mainzone->size, mainzone); + doom_print("zone size: "); + doom_print(doom_itoa(mainzone->size, 10)); + doom_print(" location: "); + doom_print(doom_ptoa(mainzone)); + doom_print("\n"); + + //doom_print("tag range: %i to %i\n", + // lowtag, hightag); + doom_print("tag range: "); + doom_print(doom_itoa(lowtag, 10)); + doom_print(" to "); + doom_print(doom_itoa(hightag, 10)); + doom_print("\n"); + + for (block = mainzone->blocklist.next; ; block = block->next) + { + if (block->tag >= lowtag && block->tag <= hightag) + { + //doom_print("block:%p size:%7i user:%p tag:%3i\n", block, block->size, block->user, block->tag); + doom_print("block"); + doom_print(doom_ptoa(block)); + doom_print(" size:"); + doom_print(doom_itoa(block->size, 10)); + doom_print(" user:"); + doom_print(doom_ptoa(block->user)); + doom_print(" tag:"); + doom_print(doom_itoa(block->tag, 10)); + doom_print("\n"); + } + + if (block->next == &mainzone->blocklist) + { + // all blocks have been hit + break; + } + + if ((byte*)block + block->size != (byte*)block->next) + doom_print("ERROR: block size does not touch the next block\n"); + + if (block->next->prev != block) + doom_print("ERROR: next block doesn't have proper back link\n"); + + if (!block->user && !block->next->user) + doom_print("ERROR: two consecutive free blocks\n"); + } +} + + +// +// Z_FileDumpHeap +// +void Z_FileDumpHeap(void* f) +{ + memblock_t* block; + + //fprintf(f, "zone size: %i location: %p\n", mainzone->size, mainzone); + doom_fprint(f, "zone size: "); + doom_fprint(f, doom_itoa(mainzone->size, 10)); + doom_fprint(f, " location: "); + doom_fprint(f, doom_ptoa(mainzone)); + doom_fprint(f, "\n"); + + for (block = mainzone->blocklist.next; ; block = block->next) + { + //fprintf(f, "block:%p size:%7i user:%p tag:%3i\n", + // block, block->size, block->user, block->tag); + doom_fprint(f, "block:"); + doom_fprint(f, doom_ptoa(block)); + doom_fprint(f, " size:"); + doom_fprint(f, doom_itoa(block->size, 10)); // Supposed to alignt 7, this is not worth the trouble + doom_fprint(f, " user:"); + doom_fprint(f, doom_ptoa(block->user)); + doom_fprint(f, " tag:"); + doom_fprint(f, doom_itoa(block->tag, 10)); + doom_fprint(f, "\n"); + + + if (block->next == &mainzone->blocklist) + { + // all blocks have been hit + break; + } + + if ((byte*)block + block->size != (byte*)block->next) + doom_fprint(f, "ERROR: block size does not touch the next block\n"); + + if (block->next->prev != block) + doom_fprint(f, "ERROR: next block doesn't have proper back link\n"); + + if (!block->user && !block->next->user) + doom_fprint(f, "ERROR: two consecutive free blocks\n"); + } +} + + +// +// Z_CheckHeap +// +void Z_CheckHeap(void) +{ + memblock_t* block; + + for (block = mainzone->blocklist.next; ; block = block->next) + { + if (block->next == &mainzone->blocklist) + { + // all blocks have been hit + break; + } + + if ((byte*)block + block->size != (byte*)block->next) + I_Error((char*)"Error: Z_CheckHeap: block size does not touch the next block\n"); + + if (block->next->prev != block) + I_Error((char*)"Error: Z_CheckHeap: next block doesn't have proper back link\n"); + + if (!block->user && !block->next->user) + I_Error((char*)"Error: Z_CheckHeap: two consecutive free blocks\n"); + } +} + + +// +// Z_ChangeTag +// +void Z_ChangeTag2(void* ptr, int tag) +{ + memblock_t* block; + + block = (memblock_t*)((byte*)ptr - sizeof(memblock_t)); + + if (block->id != ZONEID) + I_Error((char*)"Error: Z_ChangeTag: freed a pointer without ZONEID"); + + if (tag >= PU_PURGELEVEL && (unsigned long long)block->user < 0x100) + I_Error((char*)"Error: Z_ChangeTag: an owner is required for purgable blocks"); + + block->tag = tag; +} + + +// +// Z_FreeMemory +// +int Z_FreeMemory(void) +{ + memblock_t* block; + int free; + + free = 0; + + for (block = mainzone->blocklist.next; + block != &mainzone->blocklist; + block = block->next) + { + if (!block->user || block->tag >= PU_PURGELEVEL) + free += block->size; + } + return free; +} + +#endif // DOOM_IMPLEMENTATION diff --git a/code/doom/doom.c b/code/doom/doom.c new file mode 100644 index 0000000..dcad46a --- /dev/null +++ b/code/doom/doom.c @@ -0,0 +1,329 @@ +// doom.c — NT-Lite port of PureDOOM +// Win32 personality carrying all the weight, just like the real ntoskrnl does. +// Drop doom1.wad (or doom.wad) next to this binary on your FAT32 volume. + +#include +#define DOOM_IMPLEMENTATION +#include "PureDOOM.h" +#include +#include +#include +#include +int _fltused; + +// --------------------------------------------------------------------------- +// Globals +// --------------------------------------------------------------------------- +static HANDLE g_stdout; + +// --------------------------------------------------------------------------- +// doom_print_fn +// --------------------------------------------------------------------------- +static void doom_print_wrapper(const char* msg) +{ + UINT len = (UINT)strlen(msg); + WriteConsoleA(g_stdout, msg, len, 0, 0); +} + +// --------------------------------------------------------------------------- +// doom_malloc_fn / doom_free_fn +// Heap handle 0, same convention as video.c. +// --------------------------------------------------------------------------- +static void* doom_malloc_wrapper(int size) +{ + return HeapAlloc(0, HEAP_ZERO_MEMORY, size); +} + +static void doom_free_wrapper(void* ptr) +{ + HeapFree(0, 0, ptr); +} + +// --------------------------------------------------------------------------- +// File I/O wrappers +// --------------------------------------------------------------------------- +static void* doom_open_wrapper(const char* path, const char* mode) +{ + DWORD access = GENERIC_READ; + DWORD disp = OPEN_EXISTING; + + if (mode[0] == 'w') { + access = GENERIC_WRITE; + disp = CREATE_ALWAYS; + } else if (mode[0] == 'r' && mode[1] == '+') { + access = GENERIC_READ | GENERIC_WRITE; + } + + HANDLE h = CreateFileA(path, access, FILE_SHARE_READ, 0, disp, 0, 0); + return (h == INVALID_HANDLE_VALUE) ? 0 : h; +} + +static void doom_close_wrapper(void* handle) +{ + CloseHandle((HANDLE)handle); +} + +static int doom_read_wrapper(void* handle, void* buf, int count) +{ + DWORD read = 0; + ReadFile((HANDLE)handle, buf, (DWORD)count, &read, 0); + return (int)read; +} + +static int doom_write_wrapper(void* handle, const void* buf, int count) +{ + DWORD written = 0; + WriteFile((HANDLE)handle, buf, (DWORD)count, &written, 0); + return (int)written; +} + +static int doom_seek_wrapper(void* handle, int offset, doom_seek_t origin) +{ + DWORD method; + switch (origin) { + case DOOM_SEEK_SET: method = FILE_BEGIN; break; + case DOOM_SEEK_CUR: method = FILE_CURRENT; break; + case DOOM_SEEK_END: method = FILE_END; break; + default: method = FILE_BEGIN; break; + } + SetFilePointer((HANDLE)handle, (LONG)offset, 0, method); + return 0; +} + +static int doom_tell_wrapper(void* handle) +{ + return (int)SetFilePointer((HANDLE)handle, 0, 0, FILE_CURRENT); +} + +static int doom_eof_wrapper(void* handle) +{ + DWORD size = GetFileSize((HANDLE)handle, 0); + DWORD pos = (DWORD)doom_tell_wrapper(handle); + return (pos >= size) ? 1 : 0; +} + +// --------------------------------------------------------------------------- +// doom_gettime_fn +// --------------------------------------------------------------------------- +static void doom_gettime_wrapper(int* sec, int* usec) +{ + DWORD t = GetTickCount(); // milliseconds + *sec = (int)(t / 1000); + *usec = (int)((t % 1000) * 1000); // ms remainder → us +} + +// --------------------------------------------------------------------------- +// doom_exit_fn +// --------------------------------------------------------------------------- +static void doom_exit_wrapper(int code) +{ + ExitProcess((UINT)code); +} + +// --------------------------------------------------------------------------- +// doom_getenv_fn — we don't have environment variables +// --------------------------------------------------------------------------- +static char* doom_getenv_wrapper(const char* name) +{ + if (strcmp(name, "HOME") == 0) { + static char home[] = "fs0:\\"; + doom_print_wrapper("getenv: Returning HOME="); doom_print_wrapper(home); doom_print_wrapper("\n"); + return home; + } + doom_print_wrapper("getenv: Unknown variable "); doom_print_wrapper(name); doom_print_wrapper("\n"); + return NULL; +} + +// --------------------------------------------------------------------------- +// Input — poll GetAsyncKeyState every frame +// Generates key_down / key_up edge events, not held-key spam. +// --------------------------------------------------------------------------- +typedef struct { int vk; doom_key_t key; } KeyMap; + +// NOTE: Win32 VK codes for letters are uppercase ASCII (e.g. 'W' = 0x57). +// DOOM_KEY_* for letters are lowercase ASCII (e.g. DOOM_KEY_W = 'w' = 0x77). +// These are different values — the VK column is what GetAsyncKeyState takes, +// the doom_key column is what PureDOOM wants. Don't collapse them. +static const KeyMap g_keymap[] = { + // Letters — VK is uppercase, DOOM key is lowercase + { 'W', DOOM_KEY_W }, + { 'A', DOOM_KEY_A }, + { 'S', DOOM_KEY_S }, + { 'D', DOOM_KEY_D }, + { 'E', DOOM_KEY_E }, + { 'Q', DOOM_KEY_Q }, + { 'Y', DOOM_KEY_Y }, // yes/no menus + { 'N', DOOM_KEY_N }, + + // Arrow keys + { VK_UP, DOOM_KEY_UP_ARROW }, + { VK_DOWN, DOOM_KEY_DOWN_ARROW }, + { VK_LEFT, DOOM_KEY_LEFT_ARROW }, + { VK_RIGHT, DOOM_KEY_RIGHT_ARROW }, + + // Action keys — Ctrl=fire, Shift=run, Alt=strafe + { VK_CONTROL, DOOM_KEY_CTRL }, + { VK_SPACE, DOOM_KEY_SPACE }, + { VK_SHIFT, DOOM_KEY_SHIFT }, + { VK_MENU, DOOM_KEY_ALT }, + + // Navigation + { VK_ESCAPE, DOOM_KEY_ESCAPE }, + { VK_RETURN, DOOM_KEY_ENTER }, + { VK_TAB, DOOM_KEY_TAB }, + { VK_BACK, DOOM_KEY_BACKSPACE }, + { VK_PAUSE, DOOM_KEY_PAUSE }, + + // Weapon slots + { '1', DOOM_KEY_1 }, + { '2', DOOM_KEY_2 }, + { '3', DOOM_KEY_3 }, + { '4', DOOM_KEY_4 }, + { '5', DOOM_KEY_5 }, + { '6', DOOM_KEY_6 }, + { '7', DOOM_KEY_7 }, + + // Misc + { '-', DOOM_KEY_MINUS }, + { '=', DOOM_KEY_EQUALS }, + { ',', DOOM_KEY_COMMA }, // default strafe left + { '.', DOOM_KEY_PERIOD }, // default strafe right + + // Function keys — save/load/volume/etc + { VK_F1, DOOM_KEY_F1 }, + { VK_F2, DOOM_KEY_F2 }, + { VK_F3, DOOM_KEY_F3 }, + { VK_F4, DOOM_KEY_F4 }, + { VK_F5, DOOM_KEY_F5 }, + { VK_F6, DOOM_KEY_F6 }, + { VK_F7, DOOM_KEY_F7 }, + { VK_F8, DOOM_KEY_F8 }, + { VK_F9, DOOM_KEY_F9 }, + { VK_F10, DOOM_KEY_F10 }, + { VK_F11, DOOM_KEY_F11 }, + { VK_F12, DOOM_KEY_F12 }, +}; + +#define KEYMAP_COUNT (sizeof(g_keymap) / sizeof(g_keymap[0])) + +static short g_prev_key[256]; + +static void poll_input(void) +{ + for (int i = 0; i < (int)KEYMAP_COUNT; i++) { + int vk = g_keymap[i].vk; + short cur = GetAsyncKeyState(vk); + int cur_down = (cur & 0x8000) != 0; + int prev_down = (g_prev_key[vk] & 0x8000) != 0; + + if (cur_down && !prev_down) doom_key_down(g_keymap[i].key); + if (!cur_down && prev_down) doom_key_up (g_keymap[i].key); + + g_prev_key[vk] = cur; + } +} + +// --------------------------------------------------------------------------- +// Render — StretchDIBits to screen, same pipeline as video.c. +// +// NOTE: PureDOOM's framebuffer is RGBA; Win32 StretchDIBits with BI_RGB/32bpp +// expects BGRA. Channels will be swapped (red ↔ blue) until you either: +// a) swap in the blit loop below, or +// b) tell PureDOOM to give you BGRA if a future version supports it. +// For a first boot, blue-tinted demons are still demons. +// --------------------------------------------------------------------------- +#define DOOM_W 320 +#define DOOM_H 200 +#define SCALE 3 +#define DISP_W (DOOM_W * SCALE) +#define DISP_H (DOOM_H * SCALE) + +static BITMAPINFO g_bmi; +static uint32_t g_blit_buf[DOOM_W * DOOM_H]; // BGRA-swapped copy + +static void render_frame(const uint8_t* rgba) +{ + // Swap R <-> B so Win32 GDI sees correct colours + const uint32_t* src = (const uint32_t*)rgba; + for (int i = 0; i < DOOM_W * DOOM_H; i++) { + uint32_t p = src[i]; + // RGBA -> BGRA: swap byte 0 (R) and byte 2 (B) + g_blit_buf[i] = (p & 0xFF00FF00u) + | ((p & 0x00FF0000u) >> 16) + | ((p & 0x000000FFu) << 16); + } + + PAINTSTRUCT ps; + HDC hdc = BeginPaint((HWND)0, &ps); + StretchDIBits( + hdc, + 0, 0, DISP_W, DISP_H, // destination — scaled up + 0, 0, DOOM_W, DOOM_H, // source — native 320×200 + g_blit_buf, + &g_bmi, + DIB_RGB_COLORS, + SRCCOPY + ); + EndPaint((HWND)0, &ps); +} + +// --------------------------------------------------------------------------- +// main +// --------------------------------------------------------------------------- +int main(const char* cmdline) +{ + (void)cmdline; + + g_stdout = GetStdHandle(STD_OUTPUT_HANDLE); + WriteConsoleA(g_stdout, "doom: starting\n", 15, 0, 0); + + // Prepare the BMI header once (top-down, like video.c) + memset(&g_bmi, 0, sizeof(g_bmi)); + g_bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + g_bmi.bmiHeader.biWidth = DOOM_W; + g_bmi.bmiHeader.biHeight = -DOOM_H; // negative = top-down + g_bmi.bmiHeader.biPlanes = 1; + g_bmi.bmiHeader.biBitCount = 32; + g_bmi.bmiHeader.biCompression = BI_RGB; + + // Wire up PureDOOM + doom_set_print(doom_print_wrapper); + doom_set_malloc(doom_malloc_wrapper, doom_free_wrapper); + doom_set_file_io( + doom_open_wrapper, + doom_close_wrapper, + doom_read_wrapper, + doom_write_wrapper, + doom_seek_wrapper, + doom_tell_wrapper, + doom_eof_wrapper + ); + doom_set_gettime(doom_gettime_wrapper); + doom_set_exit(doom_exit_wrapper); + doom_set_getenv(doom_getenv_wrapper); + + // Resolution + modern WASD bindings + doom_set_resolution(DOOM_W, DOOM_H); + doom_set_default_int("key_up", DOOM_KEY_W); + doom_set_default_int("key_down", DOOM_KEY_S); + doom_set_default_int("key_strafeleft", DOOM_KEY_A); + doom_set_default_int("key_straferight", DOOM_KEY_D); + doom_set_default_int("key_use", DOOM_KEY_E); + doom_set_default_int("mouse_move", 0); + + // No extra args — PureDOOM will scan for doom1.wad / doom.wad + const char* args[] = { "doom" }; + doom_init(1, (char**)args, 0); + + WriteConsoleA(g_stdout, "doom: entering game loop\n", 25, 0, 0); + + // Game loop — identical shape to video.c's Bink loop + while (1) { + poll_input(); + doom_update(); + render_frame((const uint8_t*)doom_get_framebuffer(4 /* RGBA */)); + } + + // Unreachable: doom_exit() -> ExitProcess() handles clean shutdown + ExitProcess(0); +} diff --git a/code/doom/doom1.wad b/code/doom/doom1.wad new file mode 100644 index 0000000000000000000000000000000000000000..1a58f66277d6bc869dfeb701591bd39f25eaacd0 GIT binary patch literal 4196020 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

2c>ay}*lPKx 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

mHH+%1s#$?NE0BluxC`JbI)QhKO59_6*AWWB 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�FJg6(5uelm#YI;3> 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

<~!H=_=k(Ja-f)!yY)xYW-La6 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


{bggA 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%0A}lV)1<0iL3`ryI8(Fr2-!a| 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

  • UeC8pAJ;Et_r$n< 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\t{6^4EN0nO~CPge8$++Gr9?ty;26h|yNDb*-+c z01p$jKrDIjQM+L*T|Z(K_=rz z+O1>Wru;bF2_{4{naMV`q?v{#6lZLCquVZN@)OT+kT^MnPD4D_%2l8!%co&ky{LD z`Pl2aj@LduHmdJfby^8+9p*XS%%`Dxz87~L|$xY2^|RRuNaNx>fWo;n1FUeQe%@ng>Rq zxys*=Kau|$=P_6LkOzsf^!!~^A?Dari@y?``!pvHF5%CC9AIzsiHUwZ#LW_I?)lKi zIE+7$VN}fUfD#j&@Zpii!)J35ZQ+>V3yqgu&Z3CZ_$y@sAY;&@%<5A$$L_7_NLj zS2^#aw!`VP2(yNhhMTn0_f!K+Ge|Rq;WbmD5Z^r( z=3wIT%B#MQsln<)FNrd0{-Un3NWj>b7JnfgC+%Gscm5@i<)<#evS98QRl@gj%||0a zTAkpehYDlC(0RXd9Nd26LrRj~nNfDPM`O^3Fq|MAH?$UH1v46 z-%=-#?Xn|t-WZu^H`E8SV{%;7yyf~Q=Wf_j&0TS?P;WY{Hr!0U%>sXEuDHzkihCL1 zO_?^C&^XQ6EAA!K)p(Z|6I1Dmdy!v@WANY1to#-C4JtRQj2vdI5rIR#W@p#Bucx#d zo-%$%Ol-dT+%!_|4=XgZ z*bsoC##7BLq@)0WVPOkBh~Z?qU{*X`kY{h6EYBt~)`B6HjHq%fDO$WwJcHC*kX^Ud z5lOG3XzCR|Cr&Lp@HNkByb(1S3>_(5L~E!?Tl}F~%taCt9w7C1mC@`1hc!%R?#}$`hd+e@_8z0*|_5Xe3?o3N2 zlj-2U8JXKMy_q?gxtT{YXEJ}3`Cl@BoH?6$BlBkFPcm<3{@2X^mRX&d(f-Na{>%)l z!2bN|jt}+}Gc;yzF~7R=ojs+@3|1#f`P;kR-Loe1$Qrk4O@7Bfrgy*{9LTR;o4IYR z+q*WudR=DDI=6RS{`U2mx$E8D_4yt5WqR*(dw-taF)g#I{U?Ljg&prdnVa2NdD7ka z#^oocW$w)`$o2fUzG>}0+1~N~U}t6Ujmv|#X6|kOcyo3^$9s?DdOH8|5!d&|rAMY^ zmbd@p>FoTD_xI&ybyoJdxo=$F7vI0N{U=X$yuYopvh9t_+emHyWIOMFFv$Dw4D$ZF zgTDT~s(+8_-=q5XP*YO>C)>$RX3P4|Pm=Y+ZDbwVM%MSX-I`h5{>c;BMI9eJp6l&= z=W#dxjdvgSh3--0n~t6^~(yDks<_g0qQ z>yKSyTAtFhY}d4GrvdM7=WvS};4^Wk@9g}JS65{<(KQp*b$O3(C%swItRWy^>@J%-_wAFPdj9My~o z7ydAJ;d{9YZ{;uidG^9zxC?)kyKpIg;ltd8f6QLE;x7Dqw*BKhNW*(uk%qtA>gIP{ z+A5r$Q+V(Ah5tKCC(1uQ<}Un$D!nj79E|~9cHz${Fn8hgoC-gazwif*7hawC>hfk3 zPm-}mlCejUL4OaF-#^@Pb^$jswn-$mYd{7i5`z*l#Mw)(>njf(#05Q8{%FgXwz+&c z_w16k_MhzNcz=6mW&0bKw|ik6IqT(%C$fc)UMOEW)q>Nlky$cMGrwOm|FmZQX{p!K zQ~73V`J-dmSXXb0>TqY5j2~IYC%ZJUJ2kO8HL*MO!L!1pQ{|5iamN`~c&Q5d;V1TK z_2X&va%cJCp|NMX+j;w5hHwEj_b}ysI)nGoNp2E7)vONb)mACU6H<`J zr67+>K^~_Yl-*W-f2WfM*U!`8(CQOo{9Fm2RnoO)tT1$dcXH*A4vg_VWoTO4f3mgX z{U__hMC)xd znX+Br6etBoO$`}MA9rcmc4^vxn$6{p4s)-At^#E^UtN{6N!y`G+aWyK!AJVWo$YQ_ z84?du#i7Ah?`2oFZtgt0q`h5QxErJc=gJp%Gl+bH{8WyS3EH=v;)b?M`-B0AiGP(@ zT*A$)$GnCl>PJg1{6+3+8aSVsp2bYhmHN#^_sSm~ME}se9Eyj^wasnoMeW*_3|G8t zxtmTjzq-7s{NurF`zJf4f;*&wJEVei@fku{&`Y~I=?P~3{ zT$Bv-$6GX^k7+_5(}X^z!&D!=5IU{#lKyR%{tZh125G|OL1dREjt}E}I8JPN=oH^^ zXPgBL|WTNSH=U#(fIQFn{j(iNgu^kABd~o5m&vtx6qwP?*axD8TP6;lA(?E zp$}QsOx__sd6HYebGRY#@itA|R!!ViP25&}&cqMVVO%HcEpxX^bGK7-w^MVs(@Ph< zNR;E4e+QMH%VvDdTT)Ngjb!h5F4jllcQPp_Fx{jMT zhKg2oEbN>uAUvUrWg!HUC=nP&fxV2JCS5OaeDQcv>gx87pAymS64C7v(e2`D#lJqm ze4lIrjP78*C5z=B9BVu~NA6(&%#%4LXceQfkU^Qvn9zb#pk#wh${xwUZh^{f2NUd0 zCxw5J{l^a zRx(`Wp_8%O?LXPl@&03-mB-$={Fqm$J(`H!QmEZhsNFIY<}y&I6AeS1L@dlbT^Vix zhG|Drv&w%oYExUSHcg|+elj$vA4(sF1hDUMvjpFAIn^ThQvXNSrh|z#$y9w`rfLOK zRpLag&{4=AaV-3J zL;0gk&23BCmPpu_(PwXvT*Z_&odVkgh@hd+AXzCo|_!gI*pOgUou^!F0xO#%zA$@-BH1b%2PK;irEP)`zS8 zz%YTsWKk6jA;i5Mv7(D7{aYt}m&8%fn}H%mW_d_V&T2%EE0k;Gd{Q0~pxZ>fZXHDo zJDAju_e!z$NU`=vvG&lT!Viv>|Jo4dL?bpW`W4^o=0)s~?EKuU|2DU^ydc~DulqXw zesAaHyv47$hdUGO!Is z#>_IKuo)!4h9c7jGYB*xB&UxgsW=xL*~MY6W_4sz5jck7-$U|ayPKP z2k<4lb9O^Au`0PRH6xf;=--dcZ8Ydaj;k{LeS7B1w(LM#?gsq88jujIN`KpyT$uTy zH8msK-x|!zU1zC7NJdLxpcx5tVb>UL^Zjma^W|=CGq9W6+}O>n$Mn_LgxfJxoxihz zx3D8~Wt#q4R9(8En44k4hr8Kuu!jw=_ORitp8TCnoI7L6P_4^#=yL74T)QrZpEDyE z?!?B((k4Ws6~^!q#In9cRq2O2GlQMktDU)9omc`B{O0sOwX)RR9W3?P4wm|2hsoic zH~D@GIRkGqK}M<*tNC_v3Exl6Vuj!pTjM#YN2D64DGT z?|ZNW`Aa|CB^Gyy#a+R?-`?tCr~*Qd(e-*o&38o2cSOy1_&(Pg7wssUO1J5qUPoNM zHah*VJu}#rz1o($h2Xv~L1(3Z+9}?4inpEOZKvcy8m08lnQbk*w-cYVX5{9g&Vy{P^xdZ|$|l$SC}Rz0ij+r^|dF{w>V zBELCOxP6%Q`HjA!q3jW#dc>z5y8vp(1NCF0jd+pJ?e{p?*uDi7=pkB&4oU+rVpfTQ z;R*cODSmZ`UmfCCM~-X!ra38V%st}FQo2*)Eq^`VEiB*~@S`&Q@SV(HYxZhu?pCXX ztu^@tP~zdw#UNSP&tzr4XfJT-`U-x!I_O)#zfv5en5RwoJ+fY!rlrn5N}d0gRQlUp zQmj@fR;v`NHD5pFe{lTYG`l1%71l-MASsR1EC`DuwZBQuJ$>|mQuzFaI;w%Brhg<=7*jMB6o>ReR0sBxVg?D4ttlQpuk#kF6O ze~0NB#(0s1m#PKC>ttmMYX_01C}p!iC)^uVjAFnHQ9S7n*)+NI*+DB9E+-snAR3xZ zFf^MTmzp_tA(2`BFm)SV8`MR2MzM3*;*m4BT~RK6_N!f1N@-Wf8B4;;mevln7pD5` zuR2O?NaS{i{@X?W?V|tovc}r4@RLu?=2&X5Lo%)E(Sa%jXBKD?few%QL|eSKTn;ss zP1;@2=x(&I24oIi3W};!$61 z$z9!ccCbZ};>ahlJ-%FWk1B?>#q@hl(It5k;NgN?{TRCPfZ7V23` zqLdQVr?Ct0GhMi0Dd5P=bop-vam%)OQ5d)qX`9=dwk|!Z33x zDS=9Skl5WZ4GuL&?BlMII&2^o5c`MqJNwm6a;Prl@WTr+VjT4eQgbEGVInm`DMlJh zphSR3z&)%o$|4A_0wqLfziBV=>o{oJ2x;d)*%u(}4CuO$t<2}4u_}L1{w04@`QuuL zG`7?3k8Bt2u1nS|B8{w+fN&{gktWe2TC=DoEG^POirJ*H;V7HL%$t$Fqte(@HQ1_O zB8FwssPAxmLyRX#b=gP6ak!w&-Q|`tUs3s#;?CK@PAd;QsjzUp(Eq;Ee4k{R*+6?s zO8DlYY6r<3m1#zZ3Yr_{n#O&fYj#l8qozkiulB1Bmu_Z}QA&FfgYDAa7U^$`^tVM~ zpdx_OKT0`$05qhk9ED|4PF3XwS`mdWbqcFf9EsE`T~My6(!ijM@l|0H=Y>sN+6BE7 zH(^t6QHLb>Y{(`Sr|)h`&dhwaF*POohmFDXT>r+hhT1PSkxiM5ElJKwJr~rMy@Gqv z_p19Eh;_zMlAs_#If7zD?U#tIGT1DiC)xO}%AudB9Qp^9L;G9V_zR?#N^t}7lT9p1 z4{lA)%3R%&dMmK7FM;sh3CKu5qvKt{ktYQN+zA?5D2h*R6dscquaHYoQ+OJH&J zf*SFuO?+wPg`xhoGV(7;J$Y3g4AD zp+%Hs#G@F%C>{~HS|OsyA}ZFmvFHl~uTcx75(*Ru5Li3Z>NGMo>Sh@r z+SDo@?GTT4h(|l5O@y_FB;S}vlo&p>i%)IhQ=9nICO#=Xvj{_K8DkbYjO0D3PcF7_ zI*j1LG@&X$M|jzG=~M>_Tq|CQWVeJyUlJO9ZHIW}Gmu1)S4c&}D5RnxjmHCc0CoU$ zkf*D!QN9F|+QpVY7>*%!2%jMBc_6Kwj7mom?VFmlKg2(@@JCdv*!>d6}7wd z9_PYBWcV+{Wn7^l$=ZXRtbMhEwa<63_N5Nirhqh+m07Y%makphY7@8G#I3fnhO=L^ zKclb5_(Y{ui>DD35P0x+(D$=ng5$!PZDP$M z+Ql4jR$16=p`YCQ7E-BAQX!j8Heh0hDJ}Ram6%(Kv!NT@X%lza#GN*Ahk&y|y#n_) zi#ug1Hgg{1&)K0CBLUp$5O>@5`z* zkWW&(s}HP7G)2U@)Xnt}rXlpk*jYgx-X9qz|wFoyJ4xj199m;x5EJk*zn(pA$@8k2^pV0$z*dqi&DSj&! zf>emJV2&p`4isA{W{BdH5$fLX{T^Tw_+W#tpsT2c(V-$lQB6kYRT&*`l%AGhhiosG zk$Y>cEU4N4xQ;5{lt zLl7*-SkpC(*=`xL-7;poWz2TVnC&)Q!;PWf*o2zG-TlUFg_buIT7II?@+zUFG7F$s zbqy$&U}RH8nOD;f)xR;Q{*9~Z-%u=gRQ8TqtSXofHc`^Lvyqb4m5r3NZf=Ce`8%zJ zf%ovBXt165^`49+u770fNF zU~X0gbF(U#n-MIFLYmXx>KI?>82viN^^JH~3h(%!JDXH8)@=l#KU9o3s2K68V#Hf) zrQ2k<3C>`#oWV>vgNEN;qE2g|1rhloYW_9o2<~;J-0Kv%*Xg)dSKC9BzER?MQwaX2 zLhwJ^R)9TsHYjZjGc=_CHQ~_nr64Z~!k=XjzIhKRh9c4u$WrwlR#|EFan7Ka^f1CH z^b!~OidFB(&hbDysV({qwjo>OlLg4zwhFZxccStQ@8D_>hz);CWj zJctcIH6qgiAE##Xciwyo&kHlEEEAPO9+}%NOovtCHq8#OO5CQ|;Uck`XO+(?70$zL zShZQK+ALOy+k}3jIlz5!`Zqt)f_v-j*6PkZ_wZoy%YTVNtw~D%3 zMcok!ygktNeh;+0)D3MPbwk?`ns=-=*s0AswRwj&?+`&$;0+0qAF;r@BgT7I;N7m1 zZP&?Kbg~vZS$@OKolDb9C@^Bv-RRNxKw9l5|8Z9DPm2nF6Y2|}9$p;dy=S~c@` z*Wv}83-uHO5x^JSz3>(iL}!on2yQ*Kl@H1jygnBU540%~tAXt-IGg{*$%|58F_wXMCl1 zhZwp;4Bake}{;_UButcI_iNdX%_Ou-k}zew?*XLCh~6MqBFvf zRSiSZ;9hBPuQa$WJ++Vw;ZG=2co1U;Mx8#dVED5`kS3fi8(amqfsqe1U92eqh6`3L3BZ?yS4FbNnZr z6CQT{?y9T#c1Qq9jX8~$PpSDnDeV)l7HhuY#v|5zi-ItbZfe(JBn|aN-;qS(sYPGC zHh8F88of&zy$g*VXoK-I8|AOK#$wlNMCgc1F`Jb`FuKhQSePi+%#^h|n$>nOG%m9MJ%wyk2u z`2N<)Hzqu8t(rISdTaHXNe|mBpi--h8j@f;>fms8uKoRPu061uYyW9C*S^tR-8|{h zZdh%xcYyIgPND>9_}1}wR6G` zofB{En)F8*Fe@6Ug^AVwsg>0~+rjGpyo1%hXlM05(NaN#5j8VectZ=3nwiR1vtGq4 zR;>I>)~tGE;;kLkZ`iu;*#$Xuw@%%yQ}5ELcj?p}I<@Mb$RRC8fZb|v;)t%nNi5nT z7Ht-bHj72=V$l{{49CqWQtpK-4}0Ot)py{^5AVR0TjI(ed#&loI?H-Ye{mY(rGn@Y z57XlgbCKQ;wLirL%b$-%ADyqlTA=Dyjh`{$jfpo}Cas|l3NBlB+h(14v(Egs&ir5d|xS30g;#Vp~pvR7sg23sNOzy77*r3bLpR1>uODB;Ft8q^jEWMK0*oS(1#qgfPY$Qn?UZPBO0+s9S`yqp z?Q~MAUMgC*TpU52TfI~@2-vqB2pAq~mOR#9%45AUaSrnJP+_BMstPReK3t}$oR^`D zA_^MZSVQ$p3Cb=B$}R~?mjtCN5)@isti6in{HVQZ1X&Hm!!;_znWF47)@_B+!en8v zkZ&_qCLHQtu3b%2#YS)q|$hdzd6fo}KhH%0+ zZppOlkZIX2)3RNrrA?-Vc-VDmqRo=4?jkEwUm|6U6g2Mfzg9o@mE_X{Lnh_R>!12k`_tj z)r_W&F^K!{=aLcmxqp_Q`(itM{o~KAcdVS=v9eIjsoZ^|nb5cd6TK+W&Zojxo-D!3Al`CCRuJlN`(zTtF9{3VQe1J%CZ%GM*NU*x;qwm_D$!m5a zj0LM#x;C}2XThAT7|D=1u!*0UXkG`{7hP6DjDgbU(0K7v1@D2sQt<@_h-S-6z zD@mxJVNr0mqTp^t!AiOxDu}z-^NK_p|tM)x`>1W*Q`2tWzoqwier z8mCy!A*OSNH5_3!CulOUAF05xQ-s*51fWw1K&OfcJ4J|i7ErwsUmEtJg)u2*j$Pzl zWM1T56R++1=m7(~lp@<%5#1v@YEyR9rtGM_x@pow${nh*5dxJ?Chb50@9z-Pwu@=o z#k3tL-~(Uuu-253a`6sU{mxZBiqlF_Z`(-Oh?s#1P=i~1Zb_`TFIHUIrR-@Jthgpt zJb20kQ;&$&BcgSSXx$=OkBHV2%O@o|Bg`|k)ZJ?t|H-xq54TOc+VatNElOjD+JEG* z!{?h!c;1olyd&W$X3_6Rc%CSX=olkRJH;y_lfF}NMEDP~Pr9hYS|_@%WbTrZxkpOo zsEw@r=z%YgSS6~MJr?QEEvBeSqPX=5T`HZ0y5CuMzjOShjtP%CNLMF4@YRxNDoVon zt%S2*!ueRjc^%=L^l*fdNx0pLbR+WAh&a7~G_69IW*|$;t!Is9YelfcHohy4>bCES zd#VIr%VT3w|6b0IFf{dquDa2wtz!LF8I3J68e3#Ewn|O`OZKWLEUOV!Pj-s$JH_`- z8I4XEjh*7VG7zM?I8GI}8S#;-;m5F&=u@~o>A|pC3MGEi#@$kY-BN(vQh?o3fZb96 zO%TU-b}7880~?y-EHw5R>x^yw=)ulsNnK<&Myimuh}rSdiW$$Rl~!akR9~@-i9R|G z`6_3e#u1x2;Y=38kYRx0(^z3Q9c*ZX3opQgRq$X2ELe`!w5(1YbrKL2Aup*2`A9{` zYn?I?#VX6wX0x7dVxP1YzPHXr@FkTN{F8YnQ_mkY7*9@aslJQ7DseSElA0&0E@ri? z4(94EsEc~-D8N#FrT9AWYUfAaxoNH+5t@6qReklV`Tiq-vSACy zPzzN*YJODwCJwYrx=-6t5$sk|9>=&VROAmrMZOg((%;50?x6?1GcPAle{1=Yy1}g# z&y7F7rEFa7 z(Ho@(d#W(Z3v%M|cJX+-c-$f$w}{8v#p7ZVUy;Y$F(@pkLJ}9yfwT>X27m^5X5zrM zN%u))i=BL8Z;RNwP3+w!_O?LZdo5+;QKUiY1sH4-bKAt+Rx!6#%xx2M>FG0D7~^dL zpup`+S6^M@_!lOunm9x5k?NM~>yxb*(Zj@>`;4zoHvolt>vLNkV{5F(55Bg7f`Ea5 zfKWA@^f1=uXZ=IUAc>9ZRhC|>vh*Cq#?1;Wtk;i0+A-GaXM?m)kGriWt)$^kYOC9w zm;byk|9J`j`O()qlli;7>iV+|C2PrS5ldUd(rsetHnFrtER}#EQ?B(G?!#SU4YJhxHdrXw_W^g6Mx&p z-*)j=p{(+~JpE%OJa*3j?d7Q`AmZUC|4DKAb6R;Dg6L174UZ^K&b?t#-Zo8P6gCQ`5e-RQzJY4hU?-al zcCyL&4mP>p!6uhfgZSDt3$nIr78H-$#p5>dxJ^86uU_`iz4m8VCuWx697M$+Ley5W zJaRlTJo3Ab?(>Eubq$K2+r-bU;^$WJbDQ{yK0nbqD28^3q3vR5yBOLbhWh?NdLFHR zkR3^VgCcMLZkaj=pRgD5WodXS#P43ac-k(Wwuz^0;%U2h+D;>tYb6vGgk zr<=u7^%L6UVT`GH04a5=sRe5oS3i2#;+yRdBzW2(p090Be|{e{`6zc7%XtG!UWDa|JeW;dnzM8VCRo(4mV zK6P6f3|%bo;Y?n&(v3C2mS9PKceQ)6QA!PlqQfxk$Tb+kXT`ZA1QWlzt_DN(BJ*_| zknT($0S-ua1{z}QR{PVW;f&vhv(;dTr@~L+rSMV3NsoJ5<&m~3j^3g;dW+&{jD*~m zC%Ll2O`LOR6C}E@5fXjB5fTANs0q&|0+bV!+O*$Y+UZuH#n8F+52ue!54O||wv0c& zZNmL+6EC?I!>5NQ%9nhLp<2d=wjr`~5#VuPWgM?tdvf@B{HlD)2gN3=GvQG+3TAC6OCafUP;>>BufD(lYD3gvD30$G$2-OG z&Z_#~4fqa2@p^}Nyufvv+^db^Rm`iXX~hro>Q^Cg+>0UMTOLD zDx_}1LtDn77DMt9vXimaVyIgC7S-A}tJYr9V#o^L>KOex#^aG%4Aq(UP(kfO1+`Zd z)c$~mS){=s28CMUG-k?atpDHcx2I^RD_F}Jkecf-glPEcDe~3J@zs8!Lmh^Q(l_cp z`c&OV|D+B>d-((1X4bgp`wRJ5R`laV^~0>D9|rYSbRk37A-#yTJeaWR9YJa^gap1} z&d48nFe))>22HAC z&UF}yQ(MHT&Ek}p?fV1oOXlv2*_XuZN9r(C6Nc}%iy90eDXg9@R<9AOt-(;Qlqh92 z@d1orf2u*STMVPYaAbxT8w`gtT-mfBV%J}YV2`r?!r>gRpMc(u$Z!QQcec1AKm*N+ z+Bl7CFdW8j8Vn1IqGz>Rp+09FhAv#@m6&=bX6L@8iE`eDS?Ax0`BusMFi#~;C(a~( zn>fpRG5;ZYGiE{W##|9}uPA#y-G9*DklDSmtiAYp%yS2MNoG^xEqg=eetSLU_U5v2 zyxs904Ee{=paZ%pY*p1yvtDp8+$me)Pb0A#3{dTb8W$GypP|GwFnw-cKnf_vyFjc}JgDBOK7m6?NVyS0`ikMZtJ zro5*@3L4_>Cae3FJd>_J^K7)zG2V^Ie{;l1Mw9fF!`Z^&{Kdm~4ZeK(=HXOfh}WM9 z&`$O>j!V1@4N`e{jTcWQ=R39>e>Qb&4!Srt-T!X(+`D;P%g|m3{jMW)Un2*RrE~0; zF@y0aL#8nFelk69H2Zs&qo*F3I(_3P4_DPRO0#Di|4H%~ZxiZ2m_2t81fC@iR@*ss zv8m(ydI}SV4%nKGv5m*(;JnAA`#ZAd2sifgQ3u;))7Oq>KSoMFu;bmv8%qw3&8g6K znZ)dLe{bsf>^V9Vj;4|ePG9fMD1LU&l%+pAn*GC3^#KkYKK%vWsF5p;PRu&~90#N$ zK6{RU_C2=JD`&FlD+jZMgL!_!eTZ_LmdM;Zcx+BJw2+g0`FK8gY<`Lpo;lZ{=5s9IFy=5fb-;+JpBR`ZM+H?APkI6?$mt$ygw7WW~ zyx+|83vR&Q!^zC;qyDx!q~2LF`}p&zW4zL(-w{Q8Hbl!FOU`i|Gg6{pA( zlwPQaj1=)W!mrbZd_ghiphs09OHw}x+0V7+abG6^x}uyHr1cU2UnIWT2xXVh>1J{O zAmpMGgN>t|5{X3Gv(PBMps}j*Vjmn!LV262&8Uuq5|`xhNRQwM>fjhJ1+EX`btv#;(pFue7MXF7^%T28tI1O6xo#vQW#azs2&|e~ zxPhNDP7xWK28k8olzK753`ZeTpmF&|FMh_SUMChcSRm8~17(&=XFJH1OvW6SFtLT9 zLm{I?yG&w+7-eUZ{h1fj9qxl+Fh*d18YQt_8u%gt!A9eymPYzO3K9FQc#X+i$h9@%(zKpp-Lj8Q5-COTkGwm_}E zm(6~&;kJ*56h zN48+C4ce*0vCEvNL^5qhG`Dv1T}l&aBXIuK;q>Q6v*gJa-^ak~-EvpP&f~v`7`1CuxI$uKqJx3``zd#7g_J1w4gB zY@fu%4i^SAN0al#33ZgI=2qk96dSzll&vF@3ym|PVc%w3X_&v5!UkO|V%JfH5{Z{F z?-oNCyK0>2xbkjtfg>RczdPC#Nb1F6QZGoDxe17H#E}pJmTrYFv8{??XzUV4-0dC1 zGIn`q{`FaM5w|GOWs9-u3%Bt6Hzo2M*9BH~FUMu<)XjIz!NV|>U>wu(2yzmJ>02Tv z?`;p|Vt+EZnD1Z`o%KI9KS+OmIE%%W#2b5XLaKqAemVA-bYST1VkUp+5{+S8EN7DFLtA5- zZf4zuywYZ@ag04&MCuIAL8oC-=9q@rZXK$%7s(i@7(#hdp2Z1X{?<`c44=qkg-qBT z>KTrXlGl)s9~jGs07I@wpOs*UkojAOV5hT|QZgrt;;4Dqo7h+!W+~4ueh_EcSXo8X zEC?-*sMSNI#)nrC&(IFt?GDvTl&-$gD^>KpL;9XXpKB58T{}puhgHNi&NrJVol2)) z%KnA!nwje)n}eTMs4ka6)MlwhW6In% zE;kkiwBnm3^BM2b({>Ws|ICejgo~D65pWQ!`_PY|TM7iqN31TXp4wz_F8C&2ok=zSUn6mda)bIuM|zHeSK_r_+r4J@PnX(=)oMA z@+*S$Fu>6lO$RAG81;YfrB|!(O#MfN@qF|-V1?5Dw7)V0qC~nhPpokqs z8aRg#(Y}T!xXvp;QFBGakl0ya#cps7L(IM58IQZN#t{?r%yqnRm;hi~pyL5$ddfu| z9hFvuOUkvx4~ZCXy1fB+V>0wvON|e>IMHPzv9#FbbZBNVr&F+yAEM^rwnH^ZeI-8% zecjdUTNbSnngbsX?GYibX|s*Y4+pqd z>hu?6onqQ3i{p>I!lhl}t`kbWUA9VM=8S-Tih*1jBcQ0G(a-x~JK>D7Eeq3-LFHS$ zF6LHXZK`GEAty(O3MMtogB5Xs8}rgWA}*_2m^I)mVF-_Sg|Z;6Q3e#&xg39BYs8;; zaIM(iw2Cao*q0tSlKnmAeUAd(8%IJ>N3GcI-Q+x_8B{F!mP>#ndPoBqbeIRTVo!zN zO?j}g6US90!E(oB+VRxMo0?E+qx8=zKlCfE0&#ZI#dLtM3j|O$UZgd+F_#P6ECwD2m@sh z$1$f%aIHnKt7zpDR1zW(21TUG+7vwPaT^V9p1_$?+0e?BD8pE=XlMlC-Y!h*t z^jD=3wg_$FUJ1x;d?cio`zQU9Qn|8)Y?Evusigao6`G)-z7+DyvaeL~l~AQ@uTZ6w zR!gf?YEb%s9h3;0vqp8LON5SC5fo`3gpxObPBqHLT^49|3E9@YtgtIzBX&{3QEqSM z3bRiM?+=2k3s*rR>yyWy9n&{6$eyEnVl>Y~6`mS({Migokz2aIjmw_fBw3otf8yR! zeKW_MIrk?2kv{XR{y%$e1J@d(52x11FV<`Inwj==&6#K2dL&tt>u>TZi_iC9)wtgL zWZzuA46f5sUHH5;iNIgq3uh|(=JFdm71?udY8|aIv#fBPHp0(%Y04~quIS9UR;{U@ z8BpE%aQ?HSh0Co}#8Z6ya$pzXx|`hL-chX$wqvl?^?ftbXU?@~w=?Iq`1K;fu#_XrC~h+o(nJJ-p4|0-{*FzZ&n>A+9;zyQ zejvpiAv>h13a`0|(~aW$$Dge#TnE

    `0|~=iXG`EC^AlMKbv-hYFt^O=i#SCHtt> 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�&9FTx*x<%w`jU$UkqndecWZ@)y_6$Kj} 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

    X@XMH*Gf$QD#wwx6~i<+Us47{5px#IIq4l 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⁣KatI{?*uYdb4NgduH+-DCeqBew0IuhD#FqjGA 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 z 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

    l}PLEd;!&W`N2c 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

    ZNvSmW7X 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 z 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

    cOCQeVZ5C&3cR>q(RuKMl~ z3QgNl(m#UGpCxI#3hz0sh;{0mA#~!x30%@P9^n>%pjus}7+pUP$Q9Jh& z!NKnkzS6f|VHIj{-t`WzNZ+1gRx6k-G#qbWf9U#99pBc*(66z_|7+ymBa`gyJ|u~( zAv?%>kUd0xF7Z8mJMyE*r;*=7GVK5FM*b}FHxThMjH3fwL4?cti^z{4zk%e@2ks!> ziu|95d|K~Az7hF{m-@jvdch&`y~uAN*U$%~AN+0PcaUrNt`3mzLq3ND@m*~rd&r+d zz8U#0_RpY>JHB$aY9xndE^1Ayr> z3JlwJB8~}IEEX>=>`@d~zV*$5mJdb}*&;T=cO$2bwX#=AL6&W zI8EI1He76W*yRfFzNnXed7ZauiNlhMMGgQ}!Sed4dWoZ^!J9OgqI@%-1u**5`HrxV zLEad~_Rdta^X>!FF@sTk0$2#;%;C1&+nZZr#-=$>cF%x644^BQTW3#sy#E*#6&(29 zULb+9N4C6UtHvvs9JW7frDE~MRIR3!S!+&zhy^P^MhXq7>lj}0vbDLDRS<@z_Qq7T z+HF66(UQwcNKHX)S;1q5!U2HG8&T%o^%>}Tt6N%w*o^u^LATqTERdt&P|-W!Uh=bb zkhY=pomc1ZUhpE+STCf}!?ekg3$R-sJIEHp4(N7;+13lM&apzllia8^@EVzc!3#&r z;J2b_3ZGRuP2?=n&I_&ybxmJKIF!*pXYKapbS)}LqZBzjL&!Q2J%5|kI*Um0$w1r^l!||}KrJ2rp{4XyFk^$8%{n(SyymY+y=qM%ELKr^4wOvbr zB-#PsD6_Xwh^5R1^O75+1xp!=A^Yw?$)W3T^6p*kGE2DZQgHK0@~0q+=4{!P&>Dp! zZnw+a7WNQUR`?!K1a93jREsR-BO}bQ$KzR{xG+pv(*t&#nh91cTha|mXKfZ&Zl-)$ zO-{PR6Jc|yvhYd+W_=t7g2g@1+m;{4=!@zD&&~VAhc;pG^p^k=7=xv*ld&9Y`H`>J}#5Zt17Dkb&@L_ zzj}HK03G`o{1V$Fm&VMnOC?L-D)pq_HpewbU6Y0&Jq@N%{P%%Gz=Ds0u5?a-sZ5rO z7T2?``p@g=1Uv>hLa$0?AMPo+lLJ$1^yUMES)T>!rWt?^JMxd>QpND;s{hrDt(oP3M za27XCPM)6lc$;E&k}A@s1UjBIJGQyHx(ep8-q@AznfZb1vk7zzWD-DplOjoB2D%?T zJ>m3mgM}i%_?cJfqC>`{Xeq07qNo6C7t0HJW4l%t<*i<3V@!>&o}3&Xoq#WP5-dq7 z^js*XiwQdv$8WLSu6LWOt5wQf8`VMpNxV2<*Sa_9-=DaCdP>{_@O~moS|^o;>6^B} z(BtJ++pf7~{7E-nCH@~;?6&%nf-?N{>C-7n@SdLAxojzyfRiO1pIewuG;pyc#S`o%GHdGnW1V};?rSwokL3{{7I8y)WVka6@f>2Zox zR*?51&yY_dKY=JVX``o!U*OLnKY;uT#D$JlK^`IBhWtFD9Jw~~pCQ8352L45kQ3y4 z5OHgz(9_UPqK4_ji!rMOM+--bRF}{~2Ti9c>+Xf~Y>7IJbTW zi4b#KN4m%z{3-CKc0F8ev-@i8F*n)#xK*)C`cwY z?!i__WNola9NEbi&()&0ivvkYk(_ocJnldw62x&~8;6NgJ~v8cuSZRlwaHrTiS!(r zEpf)_pdVk9f@Mm-Hr_714<~4itJ7MPOo)xfi!=_(6B!_pjK&lhgK`1&k{6U~y*>l@ zwA!jk)1vjlJgvPn_gmyhvEe7A51-?Ie)jA&YI8vTUawKYL~X~&Z{VyK=Fv&mc-fKU zrzw?|u~(lxOO2W=h}UKt4eD2sFTq3oTZ?*ly7iLv|P!5qSdFcndIDw^8g!4>3m=+us+1!~C4+ndPj{ zQ{=i-y1FQQI3)wRtu5?1W6O<>J${U%Yhr#De+e65SQ!T8^2r{~7ZI!#j^a82-MpvT#`ED9A_=F_X8>YS|wRx!rzT(+PB5deAr? zB~l3hoXmA=Yi8KkE}wGji#FLa%A;)`-Ax)xf4Ww zg5c^CphTu3z$Op1n zr6w7Amg1O@A#=TiBFwR`qx_)0kX7e#MYKf+0v4$E1ipY&Hi3p9;5nJ)I%~# zw$&7{8F@uL196m6@qxg85+pO!W5@lLEhVbHwz)Rwr~o$ir`Ka+;*g^yQYPbNWlZ{_ zs18_UcpZXDr(a!LUE5xh#wR_Va1W10itK2CWaY(H_RxqN&E87VR0PU1BPJj1%#4$wndGY(p!q$FIO9$x)4Nca0V0rdc4S7Pta}Usg!V7D*aT z$dcQR)dcO2(u7QQJs`YIxU0CHZud1dkv8fb`jn1KI13G)M}$wAkCjAsMHAc9`=u8J zwS|+GHpnJKX7FzBrut2T&>#(n>>akun9Wi|vh8+7ek(jy%2~vw;nif7CE-UQJ5oEQ zG=U;92MmiH17*KSc_Ch>Mtgg$&JB^$16KM7v7rM@Jz7 zK^R12PwQb7OBo$QH9k2zo0%diM9%`2c`8cRtvWCMIu@6dX+=y89AI!MqvJv)sTVjN za#Ax`=oxY*DLFv8!6ua^6i${09V3PfnG`w02{Syc-*v zdjJnIN#)iD1& zIXZ-H;y`e&VL7D6C?|Y)pnuPf92@}t8s}js+%}8xrMwRd4Q;f-+zbv z9puxyL%bkdv%fZ z1cgSvcDyOfo{9doC5$tkJvAIi6ua3qZ+~pkani{G&oo!|^GI3gRmTcH1iB3qZ_p|- zODns8Ly?>vbm1^9cd=;5i8mXRmM@mh%hus}i~TyC&Phd91)F@d)2Wl?14cnKAY?PI zsRsa;%N{|E=fl?IO{8$7en)G41 zbXapqc+zI4$xTHS!G-wCi-Y(@QWT7;xs+G()Javw&4BG?`skARm=_gyzPUX<__0Xs z4{~alse}SlSAtCy6$F=yUeQ4({$%;WM8)&u%X4b!lH&UfEo4 zX(8k3^E&egXy;KoKG8_J?6)F8qxC=`(5|z=a<=A4vBkNmfMVk(WXtfS{XuHxNIhc5 zYzx<=X2wn9ra&Ifft=%N+)d_1{&aeOKN!nWGX{JR#b)rOKtdLwxQlKoL^j&c6;p+_0mY1Cd2nxWj+Cq>0o4`6 zkg;u4LR@j$`e}bljq?<>)_Cl}WMHCxgadZe?ZH^!9vjjh}%h zuk%6e;%uV0@uWN8G7jUiNhdss3_XCNQk9#@h@OGFhgq+ax*`Q8i8hQ@Vr(#qD&y7j zB^*l{0g3ZXF1yxJWDso+Wlg6I?TBTlSADUeoUy`~9@W&n_g zZLMh(rfz@wRjwqT!brkfjiZ)Lns)|kDVk5+ly*Y^Y~a)*F%a$5yfx+(=uf}K?E|xb zjTNR69RJ{DDB}^wfGywD`o)_pv=aA{Xetv^+oIXF`_tFiZVTx=8lN!!I-m%l@`hrr ze6zz^1N8<<0!p-TeQ5sU=8=P_KV6}7Hl1K%L`gsfZb-0!wDfWrf;!&zn>$JoU6XoI ztO&yiqX8)y-$?s$J1j&#Ce%)IP;uscg7dki=bMP+l#?C0#ynl(}g(SdaS z3Mu5>Iw=YUEik_prtW}cz*Am*<6Ii}l^j`)N_`Y3^{Zk#fzhwd)bi%0?H zEahOrE*czYW&z9m@nhf)vE``fc*?JMa6|RlvYym-x78c8oHaFH7tz!FfQ=pQ#w#A+ zLs)q@oD6cadD(K%21*>-Twg?!VAgZ8)H)lCq~EzP^ZWWNzjwdjw@JnG!%0G4)hVs^ zbkUV9>U%HTUZqk^3;2s~dGYqlbqmD&th6Jv=-*(XX7eD;7~nN`9sH+1WTC z^y{^!hbO1J7U?*Sq=6_00;*XGdPKjcJYd<`E z`t+DDH`6RD9Cz{L1P?2hI_N|Sr_KPo%)@s`fP-{JXy0OW1 zo1+8U=RB*er`!wabPH!^C-gr$thNr1j!&h*fv`H#kZS<{&(0P=>)=uwokr<9 zb$1ZuMEr9kg+6y5`J2dZAve(Hz8d*SWD#AiiabOr%BkCA_c45QD9`!s=w_g|Q^ zcOeguuSS$B@z;n9tDQR244i7jd<;sY}L(AKH|PBL1_@R@Ki&7!EZ@kOY3=h1GvNJ|P3JB9qE| zPE+o-QKyZ80Z7B4i5OSVURZ+q1Y$8R;SgBcs<)sLl=cMPS;yh8B#m=|Gz&u96b%Bc za1(!nWklg4I_#otp-<|=+5{b43~W$3G^T~t z@kWif0H;K!n>fXJGreTdM?-jF@-VMDDGxSSAQlm4qX`bMc4C>}w&KnKTabGKpw_^a z^^m+zv@i`nU<~?CAkHN`x!gCdz(AMi+-ui2QHf1Iod!_}VM+ULd`BTKF)a8wVq`)P zDUK8i_BsY>2fj1RD?Sb0Ku(-f=X|9zbO#4^trA^l10w{>yG&pMIJbADfVNO+v}?@@ zfDC*&HU1o2Hww6t+b<980t26R(joTE0JzO;iEIMC5O)P`oNZov^{#Vl@XKgjOaN(1 zm&abZ5e{2nTe&0UQoiUwL6yq|k_8?R-BsVrIAw6lfVpS;;sL4u%>lfvzjQ;^XJ8p4 zK)V+>nOHCf1dF2+#j0>r^mcS{_EBRO7$vgFE~Et)xJ`w-g?EQRmP>^aLqOgU3FKmd z5)n=|Jv!rT!=bqW*at^pmvUr0I_L!Ck!6Ir4Ms45VZUoxZuTO1m-h%9F+?EM3_^C z!@$X1yGAa~>>(}k_`f}tgICcJ9Bj+sn& zIqG<){EqG_Lh6>pYTF&q9-`$_UEgr|+hhMxlV+QNC0K6~{rswwe-`p1%9aWOsv^B+=1(DF; z$62XgOg5HYA_`52e;AZrGc)`9_tDtNuPSD^ zr-yGJuOCtNuU9rZI2$ux(FXW8^nGVb1IG>e!?F2RKHzh0_9Kg=#Z_>{$_(tWO{@Eo z`EKhNy;Dmg&}O_mIH8_aw~n5YgT#yi6wP)o*Vj=5C4nm9$29EJ2_T_ra2WZws?Fo0 zPWSj2cbZFzmr-EQBC5^p<70X#uWxjgA*}7A6H@umu$D}_(OEOX$=Uhwk@$3A# zj^6NJAi|#&(HlOD{4^3oPk1l#SCG#jUUYyi^0kQcg5N-r=mB4ed=&ZX$WI}^iu?{T zg-<7hILLKm3wf1LZDpJNv^XgW7b;oydaq0hq*}onagExY1t}Cd_AWnI=wBq58$)+P^8){-)P#YWcGP_8fYMZ!h8+G1h zdM&-otLX{S+PPfz3wfMC#VBD5S#0$R{gl_j?yufm&g(KfH=B5w{?6$rB!mGG+my5u-;K;46JG#kX5TVSaSfy#geF))W2;R&43EPGZ2Z8|mF`^u-{SkeUxJDmkw%AGt=Y}nYb8gQ#h>~3HHvp9{nSw}W2P5Dl^u_6P~ zd704w-4=;)fU>u%Xd+yk24k#lt402xcEXK%r`o*5qH0#Uu^lrQkujEW&S$WH@)xEQ z&c_tHaMmJ3T3y38rduUFlKqZr)o|+@%wI2dUY7%Ocv0{D`#hn*FaywR=WUa ziH8rjB1L`~5RXBoK!T?z&B0~!Uh2bSzj@uK3f(*t&aKhitoQ1@%Mpj<;~#xVp@PQo zdYC~AVZV6n3M&wm>B2cp9?al*7YZ89d{(^-iLJn}U7QoWI#+DYaX1Yw_xPZ4jCFZ> zUN||A!>f%)CXY=cxCP@CN-Hbu;iG2Tzd<^bLe`wBpyW6W7>Ii}lwrd>Jw6B%ZPiLlV2`*A(I z_-4hc%<~9$S?uY*Yl3NGnS+DVQxKx8P%Emcg@$8!??ub->#>XvRy)(TI?Fb)+v?sV zNky;8q%vaw*k;RVpI#5n^PU~yQq6PV3-Bx}oVNOPG0~b@NYqc@St6t)TL<*g^WPrO zhcVVQ7L?`rB5*RktO%PkbO$bR88n=PIhx)fa-v9IHlO`OA~9Pmk~&!;u~jJ= zwQ2g`7`{9p@D5@1Lf)cXxJwt`82cH$k~3!2;<4*Yw>Hrs)^9T^fr-%4#@weh$hx zDnGeeHbpfpJ3@mh^W8O~Q&6+hl{lch)=m%ot2KajOw&lOzJ5MC*h*p%ZPL<3!O^()mI?@ zIr2lu1bS5u`3B@?ks!L&`;ku~zk=k^ug(y0uqytxiJT$dhx|H{MYnnb`6TjB5gUC< zv9^yRKZ*Q%L~%9oReT-tqsYHTqTs-4$Q#JVknci%8u?AcHB0Oc*+t$&E|9-~d^0jO zhKkC~ni)Af6q&^gOcT~Ix6C-YXXP=mX+Gyhcf~h%2;sq&Kr;H0hcb+B?(n$6`=L)Sk5;onCLqT>Jf_{* zGjeCOi)uga5BX?ZK?{erT}icCXL&#Mi{BisdTb&v9oY3D%0myh{3#MWJUQOj>ay_> z2TCLf*5|PwhETwDW$Rm9?z3levqYR=2_Sud<)Y9ZnKYL#9exgY0HGcOhGO+v0k5Us z_+=ijor|J1TG;sXN5;7kG8-0WaO30!Ycc@u34FiOdv{+`(el+%coBAYE9gZ`SCpd> z6C8F;x!snPB36kdP1+yIQj7%l3v z~!t@4NyitQS1o#DUn8N-E zj0hzaNAD)_7*HW>sf^*;z)Xfp6%V?wh@1#@jx4Zdkuq>1uAUJzzyPpQM}<=?6r6CU zD$7_yELG$2LBuHyzkDiFa#HzJ!BSRWIxmn$T`q4k20qPJT~2I9sodD^pg*%8n=ydX zkuo3@6eI%Bab&^zr$YGllOP6l(fSy-sF*y>=LVGB(l&q)np^6Mgb79AN-V{w zK#;Mp|1HLd=c$>p2}~SFt{w?NT}s{aPa?Y&jq!y15{~WxqRfL2Kny4@y6Y~y#UfQiZ~~f>uqz5;J~Or0Aa5>Pb1&Okk4 ziDHT*XvpK=G|hpR@z);08}ERs{b-elQLQWMRb2jxPVROSR_Hc-;JXDDC# z6#cqPK0*U zc}o6tQAbZcNamBINiZW>9UbQ-3&fwVP!-V~6gLab|(v zGbKbE=c?Q7E{dN^p)A&+f)77~dNZw+ahtW%s{>AF&_KHov-H8}+Y>;C@Z63|#L9js_6Mtv-K z?CG#doe2C5fDoy?!4pu23BP~u?mgBr{~W-OAjCj=)FfuFl4h>;3M+&%Kln+dUD7@r z-n)BW?a_JR)+UjwT*U93&);xiAJe|Y8(3>7$=Rr)<9mDe@7|^Tf@MWxgukhprl^PG ztS!llAy-nBye0t7YCk=C|2~**{~}v6V3>R%#08^w<8@uYtY@>WqOTArQDc?tiSmpo zvtVNb@x+{sc~UIuaQ(894Mq&jvp5~E4nqD^(K2`ZR^1I_K;Ee#W$)tyRavk^e2 zj#HHLVv`zZRn{<&nC4J1vLH((;1_Y_@#Rf+$0lI(Dz?TpwvonJo=zs0K@u;=ajWK0 zKhDUNyr|9am}o@)xoNaCXcUfT9W-6^-iwQ^DOv898(Ulr;44Q5IzIs*e@27tNy2a1 z`8Y~q5n3BcgTzij&@wGiiyD{-cq8;{azWId0i3IKUO4?I%WrTeQUXi`*Xz4fckAh= z7Ex+*Qt3IW%4`CXlL{af=HsGJL zhiXGn^zJmG8b{L6ZzE^O#}RRI{3P-@WD;FGiBysIB74Y3k-vca*T}ac-;GFT|6h=w zL&QJVM^s1Q735DNA4a|l`79z`{!bxakNg6XL5F`6`4sYth!6dJ7g0?GhApZoJM~AN?;wJtP8~X6*>D$%q1MGPL5$EM#UR-?o^zCq!uWIds!-Hz{ z;GjQ^@_Bl?u=Mol!P_^0Q6AUZCkKRh%}>G$%;D^oAL?z=%Bb(bi`8blSsxCEBgQ^> z8~hdvXKM%dgN`)gM>{^kp`nny`H2m;-L@ETQsMk*e&-`1Ib!X?pKINv_c25!n0cqN z=N5^)A9F}1r}>SGn#6>|g2SR)fH_Y;;sr+6&;?HthR08?;patocgSUKhif&QgMC9d zH>Y4cwu@^DE5hxk1RTH2aOo!}9;#thYUYb^4KQQgK=%aeW3^_(Pv@qAFBD^~>$`|r zxZGdxcMqB-Be^D_W&moWzb_H(K${7p%IhBHDxT0aIr2jHDJQyRbSqbwE=DZi&5-W8EUqu92jfu!-TDR}8z? z<>_iDXs6gl(`6sar-z-}0il{?U)3GR68c!C0%#_l=lKrf-f_Dp=05BKh2ICBWpu3m@KsbSbSywYhDNabFjGc-!IzpR$`H3O$MaUc zql!5%uD;uAHv7X@25%XM#7PX19sSBVy$U(@031Fe}`Rke|YGA&~-xZc`Q{XWJ=?iQbA@p;WYam}KFCp`kXt#OAg-NA zl;V~kGPk&4suO#A?@3y=xdphF)x-|6s!(*RxRNe2PnaN-=g_;O@e8+a-+6QIiSfAd zFaf3l5;VmYuw#jeQ2&x}LBbY5R_!Nm-~P&X-F?Coo~HCHX|a~v3PBP}6e7+L7cbZj z&h041oKA_VOG6X4Z@=gE-6xhcoxv}kDf0i?;0)@xu#0Xj2j{CeAh;r`uJZVb-v>9z0O#vap?_ht7-C z-+XB$Q!1|{(j}Y5E$rY+1sN52CeLCG8rO;wF~}C9mIIiA3(1^O_Y`eLlw>lQby~D8 zgSqpCmxJ*XaKAjZIx~Z3jmh3_ot!f^hOxp>oRH~3pV^n__om9$7o}EF& zz=@rs>l^Hpu8ReCn>1lScIqf{yurFOKhL`p04%JO{35Hfl{=-{DWKxsvvY-c^)aWZ z3kL4b`bdGBUeBy*^YdC9C~^nnne`c^9M!g3X>UOPNrEcPu-kZr_z*5sqF9p!TOlge zSBN;&AL@W0V2dcVnRtav|4yC$rxzF4sD`sj7Nqjh1Tos&kh$J|^hlfU0#PFn!MLTO zX(!9-o=8-hK-YRg4CG?m_Cdi~?sh{7fdr)SFKx2TJbd_&<1d0G4#uOD@l6LP55yKl z1_P5uy-gx%kxT?R1#qOnfdH5VR)kKaQKP&1FF^$435J8<+)0e0;*&S9(_O*CSPpQ` z=wjfY!8Wm>b}RJQ+uLJzbGf-`;GlVK5PK{^`;lc&y6WLZqXz)ATZd~;ZTB9~TKR#Z zEu<-_j$VJ7wkA*Y8fKSN@(vhlozY-$kDjNStVneUpvkPw3T|1^1wRB~+xJrFmB@K0{CRZ!KZSfF@^gslqJ9AR z1oBxVj*kCT$X~hC_m|M`l^dg6?{7hV2>A^1Z;?fG{UqWyi9+5nz$bkAo(T-cx7W8w z9&%3}9i1M1sMa_*h>~M;c-VJMp}QZv{h@mE;2=DPa=(G9J*NQ{NsW4XqjB)|+gt6o z4-V?|=`RS-@*(IM4j_;|Is)Uw5c8(>!ok6Z_=WhpGWlcyEMQ1z@O3i}I{IqH&{;1C zD?=vN0iFn^$kE$65oyji#oYr1{OyBHtwPfMYdRtP`bQt)Jl`f&7rljfb)rtQ?vs;~ zr%$mYZV>L#N@BjA0Ur!D=8z_bhxK;1hsr!Hd@msjj(mI)l1j~YqToI~KLwn8cIFv} zbO;?T*PjsZXIdd3fwIujBc-n7y$w=FCO9 zC!r9-tx!lNakw*vVgH`i-`rH_Wi;seGFUZyF)L0C_hgD<&U}lhV9wwRznC43M9@*p zSM-F`8QuEMoi`smn4F^YdKugbAJ|O0jR5-zV_a1d8xlTlu}cB^t0@lh6-6 zBB!Z%OYqK}cfa{C8x7dRB8%m{@P2}dEe{Ws0auX+onkTijZK8990w}Hi-cW4hok>M)p^gG#jbt zp*wf}^an1naarojs>{lt!fV;mQzw+TbN=l4^9`bi4~;<(zH{e&AAGDsDQ-*j+f*c# zW0SM8rjL(Ne!(kpTI&x(<^i5&Ij&2Hk+xV6T~7?ij`v3)zXxnrg)WbbqryrH6@v(@7fJ}o&^fMhv4X34I-PihgBoiU8&9 zJLCq1^d{&-NnheDB7Ryaa1mYOhVFK+zz$$69UQ}khSHqM^$0k@Zdg!Ojp8;A-3T#Wr+RUS=fuBmTqJLrA8}k_i_}&#Ar^Tw%y%sKG?f|ADVkJ z0%`>$o*ID^B$T9FbnqlJ0+%i;Z*VQ#Rh@yR<`&)W-{(^LGwVbZPz2x(ArFs_^lDCk zM=3Y09-xM}Necr)wpz7j_ts8t&@WsdM5>6WLsez)gwR2QDp%s1+LK96^*JfGx4LxT zI1%!=my<-&M0tf9qzM{-yVV8TtbY;c;~&_^Vt;%@^H>H?2ZRj<>?lB>!5@k!a?@mK z$`m00!Hdveh804HI-@h=7?c)T6>yM~(5xXZBP1jtu|(8A6FTMu`R5k+PvQf~03Iv6 z33zr$*%Ti|y-w(fi(^k9Jq98bHOShj}tm)AR4u|sr9|+%F86${_ zQQ5yr?ObbU(_mtM0bNmb=)?mgol!hM(iv|cA3(ka`CjBRi0YG+koP01Ng}+g{K4XL zmOglf$PfI_kP!OcyO56~KaWJw|866nKt7GQ(f>NgN0IMG6lfXlQT8GZ0z|MBDK%*n~dHjbnh^?L8!```mq?&(o9 zo_sz!eR5LYFe`{QWdm*=zjyC8!Oq7M!(PTI?#?kMjZ_T zKjTwysFdUR)Slx=ldS<~j83zFryW)%2$uUpb2{$hm<{@s?Zokn<5b@193F;eSQD@i z^2M%c$3NeC$i`j>;pv&9K8Cfo=SBt93%YR_j^M=L#TVdX#_xw;pWQwH1H{~@WxbJ3 zyJ-0o;)iaBdfkJjq_!=>1d<>*fncJXGgu=ooZu?HLQV7p`vS=dD=W2;M~`HP#91iG zG-PQakDRwXq7AU@_jy85B78YXw!! zEdoRM5K%NrcyN@?38jlKK;>RH;9alqr`PAUwzLw875LGhLon!rF4=*DMT$ENlP?&^S?U1~BNvOA3KdL3P7^+_E{Hyk;+36Vjk~I& z48t-MBpjC}F$Izw!6KmfflP6rhM;t#QophUT%fu^YH+QkY!K6P1iBV0loSmorYpyR zAIR;((A7RukQtFt4C1Pb6$!*Pxzvg8WJY=1DI5Nq-VO6YvQ(H4G>5Bwh7c0oss;nFo-yTuWw%k{_p0tzH3Nqu}Z# z4<%zT2&uw>2+jnz*Y-xKP+?#I1;@#z(zdEL2pV4}wAt&K+#WLmZz*YT>dy$$St9U) zy8U)IM1H$OwoMLDAP$KUKRmew2D`O-d}g1&k<{j-aV)JZaquHd@;X;4G7~ z97ZJ85r=CB!n{_;Ki=9ROQ}{DXi0Yw-{SNuIAKtEVRuQSEC3KH-VMwPpJkEl1+E_O z=JmB3mC6=L()ifr{_iy!{b`ULP)RdgcwKN?QFXj>#Y*2xdyDYv*zbwfV~CMRs6&w>a1Mxb zV#@4!v|oaP#}~EHrI*2xr>qFuFKDU?z<)>pj04k@iIHpFlOilaY9x>ii@HC9b7<67 z(M{McQBt@D>9&=D!G-A;x8h0=1D(Z2%(KAi-;q~TtPf(`*=M=ZTp$sWmYgI?1pX}c zXmLCe3fSP@ce|^TozBo;-t?^?FO^!M(kMe=W0R~4ZrKLv{cE6OQIXC3LZL{Y>=D!; z)sr#giKLm?_IL1fp~=b`>Dw{fnm7sd*i9N9FA!c%G<=+nG~n!#lwY9@Kcg(jDL-f- z3Px_B21&^Yec1wSjTSLVndrlpGE)q9P;mw z8FU>B5yn-uEM7;>kxwE22hvB%=soX36fgfC^ede16yANdyKr;u@UpDOYk`4ObA zf202>kLZVxe}iPvecq3J1M=g@zd__1Q{M3*@=4?$A${Z}bRBWZd;#O3O9KCb1-mdC#q!hzoYxd~pv5K{1(wU`*!}x=@zyRvFqq2Y zNx?KvDhDGzMqApYM=ns{Hl$P-b7N%U{{8p8{^ZG{N1`!|WAD)?3^)yZ6HPBJDyS3> zv21t+Mi~6vcb`0w^Bp9eIayLb8QiFkhBa~>&c%lhAN)c4_um_|rvyEFxHrP$n#0W_e()MzkB z3eEf+s)3hnj3vq8l-1!zb8Dxz_i)f*mJWVu$>g;ym*;2E3FN~LCKaiAZ4MoObFB%V zPQ$o*M*JR+KhE~e$FV7H;kUfO6cMTXt0)`I=GJBtdc}vv1{&cpfkVaL1Y9v7r+C;V zAjjvLfIqxMt<7eax0CI*Kf*SH51f=&+zjxLMWZfjg}5D|gI5-X5@L_+VB5jzrRKvJ zkD-7siu(&Ci%Rv;Bv+V77)|c#5*@UFlT%u6bT3sO=vzXtL6@kb!K3l}BJpGxvo}dL zN}=$wi`8~Veb_v~lr_6L%8>Z#Ab<`elNicj*wK6uM~WX&AZF!D9MVBP86 zy4mh(Ashk}251#hUha_5vV4Bq#32-?#+O!Jz`&wPk8+VQ2AKDohWw&Gg!(ChaXZN~ zHgNjl;THBiWl zy_`e$Nkc}Y{CC{Fn7M?V^j2-JaqjpAaQ`p>yBr_pEhC^S_#g(flEnnZdCo~$A!56% zdOQunR$RNb$WDvBm}OkKG5w*n+qW6P!zp{S+%y~mXtK7$o=!GboFp_0+mbz*qbp)2 z9^Bpbx=2z$01}nHL4We7;f?fAQ7yqdWLr;1;Cc%M;VH4jEevp&-hu~csfMSMsRYb{ z^><|SgCD&2@Zl8cflEsv+sP+b46GPWk;z4GrGvB0!VgDpoE+LcnY0|7ov%N2g*oV1 zT0%?7NngR3@Om?j4b|wN8%gQf0{Kt_Vhsef>Gcw0!&yUH;l=qp5B277I0hER@hW~LSeNa>NgxGs{#(&U>mx|lU zEsdp;IF>m^rM70A03wRwmU1<)v7n;X>-}k*myk80eWQm0c?h$R*su$%Rhw(_T;Lec zJy6owwGn1z1GhSsf0(R&Cq$e`PB z6N$KLf=&?xJ$r^`3T;3b`W~tsrR@?Fos|ZIq8AL50N~R+rAZgyrDtcsbj%KUZKC{f zc=JL*uqqHlis4#%gu#KgR6k~WyFbbHcp-y-oCY1y@Zyv%VjMV@PjjpVGwT*Tzy?8!Pd+A0xoj}(2;hil9*l^(0ZVc@ zz|}QCf|}+$A6}4_Kop(M^=WY`?mjWv9*5&d=5Py>9E($9fMkp&qLJpU!Y9;#kOv!v zcY@+3sAXCRCt%Ti{(OnTSi~JDv?n7`R|E>5naTz~_;81NH%)t8RyxYy5N=$sD%m?EajkBq8M zmsJ}Vu#WEp@P|n~)4W38Cw~kBgDsrj3Vy0-LU>1{o%4|n%KCfriTMdP7uvL5Q5}w7 zI+amvlTZ3rCI^?up~NG&Hna(k;D+J6{(b%}UzZn2BJ0Q<3sEf8MqWmgEB=+pUE~n?8ssk_-+}y3$WI}^g!u95 zi_n10Tz#aen?18?5$6840^xTJpm9*hwPzRzR%f3zQJ4@6Z+ytV1z8^P$?R90Fni zH9Z7xBYF}9(W9Y@VS-Moncw z(F@+Lg7IuaA*OXuJvpM@-!|@Q({t3QE3+?SkdhWb6@&sQTr7AnUN~e$E0IOZ1KSE$ z%Y8EMC^zoWBVrFDWAA_eTf9^=CBmx~dm!->r<}x77o`7Avqh$o*_gOmZY&yxwkIrx z-Tv^zy?Yc?qVqH^N$7L6MF(QZ0vTq|`BCv@YrD#tqPL&z8RL-^1^q@ng?~tu=_y_l zu^dvyg{ml2E0tRU3V^dah&!iF8NQc*kx z_|oCK!B-$)9-5iDt>C$^{7nBMSIMr#U5Y0hoO@oc&E5nTU`2YPmRS}cR+Zr*Pa_Z| zX-FC%fl9$w_>fPUh?*YTSo~VC*x&IM^@klCgQ%By_MeGR4ZY-E6f&-XaHjKI(h~Yd#OCib@3WGpR zh63o=Bx&({WG>@BDBswvOA!N>Cue%XVS;0>F!~&(&7O zJHn|VM~S=?tQ7R1nl52fC$C~>(ln?m9e|vgT%0%=yeMKIc6xfxnFn&|sn2*I@WH(& zjx))$<7}Aj=)rK4lV9)TBXBCNN|R{H%fvlm zG-g`du`4+JTFp%Wab|x*6WOBDX2W!QFWsg=LZakAEya_=V};)nc&Lqou(bsUOll4t zS->{y=sg@7P~g3LUqzio`hv~%Lnlrm4SZOFC52r6wWgWRT;@^S8Z1K7GsGU@vkb#>O^0Qa4X9tSDz@q<>?G1% zetLB2;XiuRpFwHza~~;+gH4Lsv$c-bSzA2{pl+pEWtda9dPY^4p`4|ZXH0XzC}=%| z`Skh!$+{CDJG1OA@F}G-C8gF>u5VxRz0CJsF0WLoMaoUN?d?hz{55SW-#^y*kHh812)qJa(?H& zRMU?6qEDAH^WJa&?)~3${^x&IBAyxFVYK&{&zfJk#BX_%u6}t^j$XoT&OL_Ucq8J5 z104@{(yp(XId6{2x&z-PGB7Q_Q-WcE5(C29>wju_YZPLRS#ZdcBhDC+$22VN0c&Ub z^L1143AaeQpYEQbxoajsY4B$)t`QitQkFDJvA2I=frL>!0y+>7*OP!h*D&bGm*S_4 zj}NE9^Y<M{}w0X#A1GW29U`INl-bcVAAyjVq>a z#UWZdJI5kRr`P2NEMvY;q#-Q*0++-%ZKBzs&2w~mJ(AB4$h=vK$IsVNQB}%52htAw zd?lqB^vP#FIFcE06#3}aM8FOXDF7y))D<&y6k?X+z}<8u@r_;u(eh;QeEdHg`_kNf zSw@3Ah*$CJDEgV;Ef_AW7e98y4=)9Ty^`X6@ZCb!iWukpuE2Ud@Z10!XHnlIuwLl@ z{1E#kHVxao&;9`W+w2-_7xB#B#Qr?{Wwr?0eFyt%>;^pdjqDGwpJd^`d&(k?88zri zu-qIA&A@MGQP1Ri*$=S4$^IexXDsT|^}u$wScy%ssCTl#eii$WeVP4s_D9)k{pg?b z?|%4hl0_}MZ)UG?;CK6X`$9NtELJ8jL(EYVXxV#n+Tg_T-pUcM>@;c{?CQ7tIX)-f z?kc2~e!Fuz)PowP>{MS_7S<_v+Lw90mB$HA4(QF3A(G?N~BAewL_2FQOp$9c6Iw~;R zIouUl#bzTjp5)B((2$@@4Ke{U&0HXpPBv#6Tl6$mcaGTi4hNlnl4DA^<&o_;sltr) zs$t$(tD!M$gNJAf{_qsSubYq~&0hXP$Ov9AwbXM1H!~ROqxpi^8=3|v9j{Mp8+#k( z8CM`dv-1Qmzhg;|N4^){q%2i#O$`>Ogn2?>DwrejR3bPe$?puA@9aK}!BG(H-H2pK z)g-D?sTHLwD&AftRkS!y+(PzrjMHfgtQy`iLYgVA@yTiT;s+mm^z<2EZuq04T~xHI zT&+n6FHYu7H1l@QiQdf5)3FB}V>FL<&&=>3g%8dzeeeMmBqA~wDF3YIEHSZ)$k@yz zu||=pv=0w%j#$39Mna)!=_=9mK?FC>Et}GZhZJQmWJ7=3;;P<1BzWYR7hCC>ueg-7 z3)3I>hY*rznP^8$^=7o!dl?b&s${FUY|cd#%)JTvPd(cz1ZrI0R9T0E0|F8fTwPyq zHtCy%CZVm)Uc4{EgPF>3VRT4{Fk2w^oH$5?j9TNVES}JF=up}gSNV`v==ky|aDSky zef)7}FWD??tY*omb0EJxM&(upir{2Zz_n@$HQfoEoo)A2N0aIwFV)&gpt!w=-JDyF z7-5E!RPH!$W4S&+GJ?0$f~cNvPgV0P5a|8od$X~d+1Y#HZk!L@>b-gVyS*nLclP2- z7%W+fK=pZWtDdjMmuRI}pA5HcH6Mx)b4zQBu^;P%``Fp@a*FmM56`+4jl;Qsp!sG2 z3dZRISgCx)UhJnmGt-d&T+QS5NXv8u;X>QGzq!A(u~oG@O6DAH5MlX|~d2uZc#WXo%ns=dlo`?LYzO z?lhjyU(hhM9SN^(1Q;5PN%~d_HV#XSpN1XDgxJpqA4?+0AbLgcM&0Q4jLaz7B11#p z3gu?n1(0a~q^@R%~f-}da;RaL`Bv*nTg ziS*l^M~}WJbH=ZQM+Pw?f*i^xoEUFcK|eG(^<7*Kq!XOE!OED?vh#!5+(A7BD1b^T z3xZT!9qA|EERsvTetKO}VNy2;_eT66ouxK`hns#F7*RV$&4Tnp)P9lQ6F)c?ssmsB zVW_CiOZ4eZkmS1jZl#rKt!6c-&zlz)7KZYpn{>(eI5j?a{^IcY zi;!@hw-oW)o?umn`xCG_eExj?`Ez>FhNOdoEU_u@>-5r)KfVZ-x+pjdy|br|$-xq$ z{N=$&`F!p#f%nB}qoz;l;txm94-TJyn)(C=*xuHO7&&d{!z0R*hMhUuRy)t**H>;h z#L@HnD~_@De0}G+!(OKzL$UJt!kQ+2z7<7R;tz1y6du}8*HYJ?_U}K({wn)h>?hbS zu!zGpSkx8%nEgTazq6|_+BW-6_QR|PK3iwMh5ZP-3Zp$_k%RnW>^h9L!CtXH%6^<( zhST0<@3Y89h`8&&Wi6QOSF_N04vpu(&O+b$GR)Ov@3Qte!`$f%I-R+9>vXzzC4^1@ zh101^2Cg9X`O4ufh=~tJ7JFKd`g>h!$@)sSI)!)sxX<(;eg*?(rg>zk5i_IFADzzZDe1uG+dUDKd+gmCpnz+~?JuEkX7&18brJY2sL-&8)P{rr<~56!`A?8<-0boD2F+8-Ha*6dz7>W@(~9 z(AZp|HZ499p{>r6^x8Z0xAN-SL>F6ga(oM16TQS730{T%DpeDr!Pn$|i`C9vOt_z% zUcKw{sW*!qYOlVIJMMjp_1juFuN`J%6KF8c5g3%w!#)BT$uiQa9fYmOD z&8HW~kBzG^9$Rvzr-?K%o<>c79>C~Wa-Dw7RV3dPA6bN`XpN*@>{A5guHAYPn`hTM zfzK18wW7>XCituSNaCVxuW$-DgcIkD!A;LR*3~klXc@0>#6CR23lljNUVtQi41Dup z5cOx;R(n7j5P#0@%x2CF+KWI$LLZJ5O zxu^aSKivbfMXO^E`kzzarPM5BMo$VSpPd{Z4D}BX(K7wERlDKB29+9O)th(v1Ma4k zg*`ld_B0|Er{|PcE6GF69Uq=NKYUpnIT%P8-mS?>3%_$bmRoNr_Jcmdm-ApFUf$>z zjLTxFNk6A}Ts?ew@Z#X+trB4%*{AgxQkV|jeEaIJ=+=pN7ps(Fo2_QEBrE9f`Iqup z!o$M%>At^n#gcAwBeVmZVJEUKi36O#oBZtX)t838Swm}Gd$8d_ zbec!5$j8r6O`FZuXD`eFpML4nmof;_-rwz`1(oT+N~yM z#Phe`zPq#cSu~B_uVybkeHwQ&HCJHcYjSl=XD>c|`|j-e_6a%7X44ZFE1c`q*tiqt za^+X%0u6ok*@68p%&qPmo-}I)3SVEO(F8l?sSwEjFTrTgBINGfh2_;CXV*;2iQ zvur32;Q7)lbi}%+Kv~#sV`8i9-y4eRI zNDP84_>*#%;%2-8QS9jEfIlrgUs#fZw}$4O~@Ij(-^IR< z{blxd**{_bmR*q3c$1B?D*z{^*5$a~tKIIZbh>ygPA~C_DYljp9I4kF9=0!A2P8)Y zr-MI(h=*6>HeM%t^8Cf|@o?b7_7$^FKoic8fDP9rltnEQe5)DK(q<}idZ4_HFTq&v z-FtR=HKnxOpqrwM+sjX1Xgz9`Zv|r(us?%YM?YkpNh|NEA=|^nM3QJbM1=3ki!*?{P~NzJ00esDSG$YC*ws1vtiV^mPe9z}!a>N%el(g7he(|DG4-b~QYv%SfebIts zqXf&-8Zq^aX|2TAo^#e8DC#-?3MrmXKiYs=oZj@P9zcGe=;E?yigzo^GliggJ_2KxlIFezF_1i@=(nJAtNW*qwHj*Bv)RJ+{R*@gQ@ z3o9OHxzL=VkDbeRAhM3VPj@C~m1@*5H>^3|v~_0bV?w6ego1 z9FT5ncYZaBoP=Y3_db4RJgWdTsh>=<5#z>z>=ti+V^RW9wY~2yW13pRC#UcUR@#)F(3lY*$F35Mo?;!pU*h;%dS3n{`Yh6tNz>TX5sEmN3j zRL5sbbv2V^kx*Htf$BX6vbtFjLAl(t5H44=6_K>aCxb^)PrOI}%DA_04!0L(OWWz? z7Hl*%9woEzYn(--*PGxc1dqvUM^#bZqqh6@z4zAn0BKTULyNF_nZI?sJ(HMyLdM`o zsLG8`O=Sd`1hhTIc>LA~0S{vr0!yQ#AHDz4<7)L%8_SThGR4mLu&5%?!-TlkGHbbDXN8)%EXLko{s30 z175})ruXdN;1|B>n?C<|axzrVCMPF?O2jqm&~38bf_Wk)&2kH#F-qy?n4N!yi@R%X zaPa+K`@skA6RHU`JlQJe!ULF&uI@@~Lf7N12r(x*iP_e0=g^TpdU{TO&03^FLNSCK zT`9*gOqzp;2d!i3a!shA>`DVv!*Jn_<`d_#wOG+Vp!`T7=??M+6+-PM`tv^4iL?;} zq`WZ+&BkkJL-s~UvPg3+&i_0gpSQT0yD9B}_MrS3^@Zc`YDP6AZraH9s3ULVYLAdP z66C7!Jbgo_=W*crM+V6k4t}I<+5gqCp)l(Z49Kcj{Y_efLgf3_Ch-k-bm%r~2fo@! zZg{Mn8=a!{7Yc0hrP}(srSk zBv04b`T1}zktdI!{I%=8Rt!Il>m1$Qz;~`X7cP;|s!RJm-yn$Q75S|G1cIIswTKKXQ0KR@3bTm^XoqMO^+WB)A7?VM@4b;P^3*@Z63_s-c1Tp z-QDlM|7{xKpI~QZGAow<)PSS1z4uxJr3 z5j|kxS@wED3mJmdF`(P_lK^!_P;pVi*aGWh{hWU2>=cdNh4@9(t_K}+7ybBBPfhc( z?n4%@oIsL#uw6@C*D=5TAzb)R*uP;B3k+`mJM0_S0sDRIZ?G=7@DBTk{T}ug*}rBr z`0$(9Z)HEgewJln!+rLOeIJV)$BXdcUG^~xy}R%;Wnjc_WUnVWRcq#wL*TD{YN$k7uMNZY@K}ryZc%<@J=7@o6z&R+ev)z_Eq<0dGq1s zIt|$<7SK|YkC!T9M7w;~Yw_#&eRFVYYe8DiirE)t+TY$f>rhi3Fs3yn48q|JE~@`b zI5BOf6%_}gfQ32FVZ*^?rd->9kVMrrIV~5Wf=E<_j_IqDoe@Pwl@C7K#mydrLkujV z{*ks~iHak}M3G~##m08PN$yJ8)U@Fm^{LJUg@zml_yFx!TmCJ#~frRw4&dA z@bKZovjbh%C6iG{)u)YTok=NWz>mT2=wvU5C^7Ei4(RgmAsNP=(`$-^@^}l*VMmQ1 z;gYGP0l<;6=WUEWDeL`#|2%l`u4fS2=@ryz3~;1fE?`H~@s?N%<=WQH?kgv#TV$&{ z&}pBxDx+2+wGO}C%w*h!8R$f{D1Dsly^6*hE!v*PWuyaqd0ZC}IB_h|k})?SpULY# zSgh$p+M%<5-RR17ThsX>FC!?I^7&FG?m*mt&QV0v3gwB$wpDDL(gTzIlP4d(_uhL? zpI%BC-42C=a%(uw48>+R9Vb(+wYEPyK6&^mj*+@_KYh~OeaRr)mSHx5!{lPh^{kW9 zC$A$%`}W?;mvI<9a=8zm_V!LsUowG9>QqF-5sG7Dom{T$Sj(+bK5qNfr-vue;bJ!U zHq#SRQ)hZU{_k$HPGou5=nOdu6EHeXZ z+0s1j_GooNZplF^fJn0{GzH7lqK6EmGmV#>J)#yU&YNBXjcIhM42@ZqATL{+FuxQZ8t+5$8yp53$$5jrAG!K3n zC*<)DmOnd=rPoQ~K}lB24&BVp)F*OdGxcXgKN>A!X0jhu?JVB9waP{R;_#(67_?} zJ0#XiMHi86m5b6Y#-8ydwb~P6N^a54*73o;=j$7y99ze+`b?+R^;W3=X0k&A{hokV zcI3lGeXJD^BL4UC_+V-7-Yg2{(Q(9Rg`4*u`kxmhT%JSNDdibl_o;@t3((~71COGp z{doO2w>Wq2?(8zs%OMI*8vh)&(|h>Qqao3EuJFO3{8-h;9>Hy=o7K0%3-bK=-MdSw zwjWBmAZ(D<10mD^9rsw*MZLL;*L{o9JnG~j$r&^h<0yhx#lz?K7sH=(L^8vmA8R3|2;rwd3FhxZp3?i%4J zXRt}T_~40MT(yglOetR)iycgt%7=%-G4~c<9tZ;KZ+WVJ0A!qpGZp)DChSKayoaY2 ziC04gsd4KRpIGVeaBgvS`RMt2N)p-9m%f*bAH0lSW20g2eD~9*z0tF*98RX_DY;{< zN=Z;@_UO5*MJ3sm?cu2F8;dH{3t$*j^}Ku~pO+R=Z;T0yB8>3&EIfbS7^UU4BC$r` zTA$^Gx!oo0JM&XtAH{Qkr0DDI^q4<5m>k;O-LO1LviNfZ_E)yFj_K@5G}pK_79e*l zLTpomyQJ1ge%blG?cIAC!h12uUn&+ugd$o-B~F57*24GpHPPU#iMta?Jerhnj$XaG za}80Mn%X^wJZmFGAN?vL@yd%7n4^?f_iuBvEblL*i8c;*{Zg<9HM6g5@RQ!@v%Fm2 zj5Ci@zkVsMG_RhUVvdoI5E=yqE}oN#&h6NE*Guy6MK<)sr8jYVFarpE`W3R$&+45r5Wl? ztxCQ!9qWJ3Uf28uYeMf+mFsqWadu(*#fvxltgH;22Bp-$naMnQ&pR>Q7%sOw?Mf}& zCs7pCu|v&ZfB$e}adB>T^TmtX7OcyAd#Q6=YFBGyM1_Z^y;HTavC)QdF6+K2$|Dfg zZa>^TSy^44U7me$^x#4JnyF=fO_A2^ZDV5eNAiD!RovSe3;7V$$l8k5RRo$uespiw z_V-SX7nWYkzIX`%%v?`Pgtg86RfAX>47=uCKB(9msd8w1rnb0a3h;UN3z0KY-PnJ* z^y0)Ls~xc z-s7ngLdv#jO-0xAv>j87jKC>c@ows<=U!s$(G$|uq#A3ti}yHc_*3xoJTjWlaafYF zO0Vs4i3I#`zijajh=4Zi#zO*RpM28kT`XeG+wkc58h90TZdMxfPspl9`_w=EH#~jI zq?eXszKhr9q7Zt0EF6*wfC!dOxna#*({ig|9!FM+gGPV*i4zb>-&Qj1&j)OMf{VTd!7DzV?3-%he5-8YU8fxosF`ySs-;7yUn}WR;-IYA30~T zo!jekE8$`79NunLmliBb=N$QU_bA%}b@G-Qqm;M?Q|mL0a(xP0U~>nvoQEy--$mJ8 zT$tl3oQpF*J36Rtbrg?XS)(cLSZvcqnY?CYZH~q&ra2Note@#K1X0fqPCj;!PTqKy zr#o(Bs*J~CF^YVQHEMGvNLCQu6LGLOW8UziX%ZVQ;iu5 zmYSUEVl^rtZw52oY8p9DAcPBlNqM3@6SN(8Y;o&Ghq$Bows?`ptQZ>QoHJ6hVPS3- zaToV3N`2$7*^?(Rzc#$;Xo4L+7*IN6n6$CypxbkzcnRa)fA;~AZK+qo{R8dA%VZE=|XPx z%Qv5y$wp{3AAc;Sfa*1;PxmGy58Ih&o;m`{bYUbSM5@>bBz$s`Pchl+(gi5V73%He zh|2~SKhEg-&A3^EBly<4Brsnd9Qoyq>*jq#&P@c2C}?2PzNyBawa%hqc8ZiH=y~Pd zy}8v{&cIDeU2)zko_;JzUTP3O%OvoCR$so_4D54@)DvJT4rKj*i;$)a@%4589#Hlp zZKqs%x8;0hyJow7)W82P_KPe7i@wc1&wf4oL+ppyFR(g1`Z@MrvA@bf@AfWC`U(4k z?60w3WHq?-*RZG!{O8#(u@-FlKKq00@0{V(CHVA&{VDeItO=iff&G5=Bkbo`R-ee>4U;Jl6&6w zhfC*U`W{XTm<%9)!YLqNDwclQ)%W3tUwrgQkJPxTmqa4Q(czcA6qy@`B){TsJuqi@ zTBhsGr%yBC1j$ndJ^Ip@)N@X)ZhrXTdsa^aC(&`E#@UNQ^BlB`V0K$hDEsjI`oyD?Q8x(#6G z#)pP(RY1aANIk?hHPsA^6SH=!niF1IU7rg$`_84PEEBU`bgNqp=BFw$^NOC$WGdfg z6#zHe#>>Tt-IIll)#$Zk;MOVi;%^!rnW$xl2_4ko3MUAVO{Y$wE;Z9QKGf;0J}WyR zOtV825Ib*98!1jmhL=ueype!0l|V%t%UQ;f#Cq@W@Xf0hd^^&`(yBFj=0TuhJ;SLb z&7dyo73#2On|{?`7rc4Z1G|jNn36vH@#ZDeT^8BfpzJDk-F2ETX7V$Dmj-b;Q)9RsGQ&Y174E}uD0`Onb*ES>`WS*MAgmY>5fAPgY;uF%jvJ%a}&|ZAsWJz^_QH6GdE%G(|SVP168Zc7Qz~`1ArPHvH>y zjtKqPv!0&*vUPc*(Ts_73JcuiCzu6`a(_RV?UW6=K!?i`r_3Ye5b3c^fBCbQN1r`R ze(3%E$rJ@U>lqzSFVsaIW!MfEtNNraI^LT@~yV8=y*TAUBtK^!$aYdaL=i(;%y_huLMd=UWT z?(Dq#0S!iO($;2DF^-4+wwEMrrx&Nl>BOD6H841<@8atE;Q{Cu_+)u)(L9N&vbM9f zsIE_3>|45}+E#GYotiSg5nO<#=K-Jf_2+>=g0&07L8GCBPt1i+bBhw!w&jQI^pa$z zBtSEg%Yk@{>j#M39X2!I>YKqWj-;D)Sx`WHrrHd-Jo!QdKOj!iVsA`Sf}-M*J|PyBV!0N_l2VGr^1f%ryK!0hz6YIQ2&Dm$%8mr z<+VyD1jdGd3e*%0&^mT^Hni)k-ZB-bD+YtaQjV7{B8e%)jj}6a$%p9J*>bEIw|0V7 zPyQByx0s*h!{{GqfQ@y#j7vgB1v>kg# z{pqxpYOBfS4Yjllxm%}o%YRhv^yX7y*e|o-&D~~S&!X3+H@#dBW-a_-R*f?+rXN8lIlY(Gkd5ibO(|4B6N^HN%_#hy8D zCAmf#EM=gBgSRAaENpc4-PNnToj02|E_+9DqVTqkjtZBxJvdm5puxfIz6jWEE}xxF zMB5x<8j0XC4#XVUmknp13Cy0m;{Og0Xb_>w9Us3z%p3_K>QHRPyw=q#_Fo zVoXe2lMyTt5Vvh-6EQCe7e{R|--#1XJBV?@D8IFyrqM1j0(H0=%H9;qA;QO+i&=1ECWxr>d4qX)yf9`TMQNwoE4W0`w^>HhFxoB{7;&Uxp8@Wycr zIHj50kxlWrY`_D9sD+bkQ8#Bb|`8OXw9v>a@e9F^=Qu9T1E+;4J znd(@7E8MzlmAXps?-k3?sWO$gPeUQ5Mk#HVd-M!_$#lj~ zK*Hw9@9hAVTv4i5L_)dVOz%Fc$h6*EBDS*~V8vbvXwI0a^11G75gFSM8E}Br(iy&r z5^6zTwTPf1BZ}`b1~_-w9_*k*kIOT0s}_ij0o4g@#}F7!Wm#psbpcJ1Moxmo@ui)0 zt`M9Ju$6L}0zWv#aFeEivr2T{{RjA@ns)xSvAu8Nv)i#@YYz8>Q#B5_XTaI-;s1_5 zxi8MwU5#PH?!vwOwm3=*g*9uHGaWBJpICC#`r>Rt3|6N4gVTksd$d^J{i4yHOL$#GBlJS2YSHc@e5+CjI8hOr0|L6MpK6pj)J#!)4DRocbR*sOJ{Bl zIQL<9j0qPBdf|R?ObEO1AQiGoH*drYhYK&S{(gM8zOC)OgebZ=?%wxVT)Y+p(QL6` zTIQdanhG~~q%UlQ=#If`308AR^tqk0oHjw4BfCK5NG%}^!q#rMXC4qN2;rG(e=!0O z9=KOojI304bj|}e%kIp7=c?2y$j!r-ArL~va#+yjlsrVovf%KYCPA`=Ph+>{*3sR{*XcXyd&Q1o7BIAZcp{;p7}y z0DfuCYx@k=BGjIN79baJEJBGs#?H;r@_nD*vr7e~IEYA->T-8nSOm>1NxaD`lBC_o z5EbAOy^Qt4TalrQ=K9LfPO;{-g#^MxXSM9}5$9>1mP+}NVxbzqXL)@Nys^qkZZ`V$ z(S#z%aH&dpksHd#gw@i!5^<;}{I1#-b#6@FkkmgzNZJIewkf{J4RT8&9Z&=MRvq~C;MLZC)i(MKhD0w^03G% z`rPuc&#ew+m-YMcEA_Gj47vl&?ADGN=5pJgrh<0BS$_C4%}*}q~}@SX-~GsGsE=Kn)p&A|sM zfH7|Qz8NiVVA|koG$&11JHfQMer;^5Fg}j-GR->>zqu9(1U`)>kHEIyfD~766qRTo zy+k-vwN-@T;X?4qw3UPjX_Sn)&h8c;~kXSY)E2V1g1RLLpPD+0g_-`s`r{ zYEV%bQs@Ixg2Nn<*;e=7-l`9v?_xf00F2)?4EN#M_uI>tu!ZUs-kG)-@ z3#-QM%XZ`fDzT$NKQ5xRVVYq{Z%T=XF!g0&icwH1_K*v@qVd-qORdao;B-LUOA(=s zW|4!O9ns7i-f0zn_C&8wi?&ObQwE(B91TZhQLZYUfLEGMOUreOXPBq6!0WSe6kp&> z*LWn)6>4TP1E3p8gycuh*`UHEyT^uL}}1C>sG7d#bk1~BPUMS?9->+PkX|pbBl&Q8lguC z%mtTaiGHiD5!Vn}p%sPfp_~Ys03|LC(A3@QR;fGfT!kNRRC#SKI5hy52ziSQ-3yM$ z+*d`Sq{dq7!@CxqoukM1NS3~+0G$Uzk1U_nzW`rTTUkINNjq4Y-`rhL7gEv*$rf<= z^~oDKsE?cRi_qgpkqQ^o0vJ>!Uh3u9dsMxX>{jRKhO9#5K zghYueB+!T$Rb86L8$?awIWp19%z?Ohb*SQ*FB7fTt;=R}rJQvWmdaq1qZ*N>(8>*4 z&E@Ck7u1LeQM|ydQO1Zi1(!odXe-^idOk0IajKdf$$49-(^}(ICfYS5sb)tJ)(6X( z+!AW=UW3s|V2cYRZoC+3X|&!zgv;OJ2+EB_ln2&tG)9Hqn@xAnN}tE~=xF+yf5^9v zOvX<-y@$)5vE;*Swh&H0S_E|I+XAEoDvu&>p76mzo5y+$ir(x|fzvV14WZr%YgaOP zm3x#l(8=lq7e=RW6{w(l(DAeIsCOub6v*;a{1qSYpnyrN?RI-++^Q(o$Gxfhq?6-U zzvLpH?eDra7uRd-YlJuRV!yo?tSQD+r*B(Gg@ZMFWjffS5jozlEWe{mbc=pMo#QS3 z+e;ye&zmh8FS8R<0&Q(tax5%2)i^-HcsngWPrH=Ub)-h44`~eqp&3G?d5aNP~0y|fPvwfPBIp*X3V2t+jil3zTf?cW?W?w?&|Ve5#2y=4H2WJ zk7J!4X+V#j+Sye;vuI`Qgl;?Tv9&N)r@6hg2|)_u(6ymTCB%Lde9%TCe8cI0e5trK z=$za)H~S|hP#SBpgvLU>n=`@b3|*X<7&FDohv=|~W+-nC^W*#lc<4u1=sEpk7ImqM z@Xjs^JoHD{Pq0x~=j&P2n*NLI|7CB&J0G+Ek^K}az&hW^zKi`3`!}o(?>uBL*&kv* z%>EhchkF*;C+xpve~tYj8-sl!@9xX&``O=R5ogN4KEb{DJPS-T-p&6nLwvkvb(JP7 zOg(-X3n`6<5pK&MUI`l2uWoPii-rd`d9U#1$H&t{mBh5Met1|_QWbTO&o-@S#Z65# zr#EgOk+#NZm0@BCO=?&g(omg=G>H0^!yCFD?%mVt6R33jDuhQ6O9CAOv}-ZYi-$|) z+YQg8YVO9I)9YR*VGM19$hX7au)oRg8E)N$#rbu7$GC!BvC9V!?w$GLu8BR2qxL$L znMQlx-j)dRMtXqxbEU2GG4E{1slqVg?C!o`rIPa z?auH~OK;^a4jdh`{}l?L%1S3~AWkNnal(2_tIA+dcZh33vLpfSo*F|`yNsC5evjAl z^oqcAzE&w$CYm*i+`Pl+;NGWR)SdV+V_gUe5#fqJTM9k(-7(l^cvte-47tj@g&hB| z>kD7E;t3WO>pS{^WOE{dP{`|kO16#H%9M8t^-4J#*A=|WSngX(8*UXbvtFWpFt@O? z97N7UwYe-_m5Qa3%xTkJq^jxr_ z5sWdF$awPq_vbJgR<~aF;2$c$8~QBQUlWtS8?7JD2s{1kf;ADQYGLyBsUq~urV zKX!Oem-rxJ5~FmO4~^@QPG`&rg;uT6c)8BH?g%KU0koD##)hoZi=}Kfx^f|Uk`<0Q zg>&kSa=e^;Yk?W2Z$f0kS4R3hG1kt#?bXjL6iG)?wG9ovl1F7C&Wxl30L;^oZ05u*_!hL?;yYuii`>-4X6m%o~X^tOyae@ z(YHo2-`C&yz%FnQWdq?Tc~mBbCTdISa8l&$_GNI@4$s=*mlpVEwabCF zz&GvA51BCqriMmg$ADoNSu-<|Kuf*Ra=~aCychGU#^**$rJ+oDa0t;AT*N6KuaeuC zi9(IN5l)XYPQ|%#-n{B` zXtN_8S;CYcd`bKUL43N{j(1i`2!s!;ArWDCyb(<3Vi0e=?*O{jC}w32&ojfv?zZe4Tq1}HJ(g@{OR%hQSdDgn!Z z?)KD+O;;`woD=)TDQJ$p#Mp|x-N@%3p(*G?N3%Wt1S-2MW^i~!ky2XGY1ef;2KdHa zC;UA(KA!D6i3}o4jN}OD>U;7eJlj?A-k=(DJH5=R*ZWF;)Z!quK7MQ=(UWqRM#6~{ z(FJ_u3-%KkZ|60L7kIeyw^uX)@^%9c;jMJdtN(I0abJE8774AWEAU5&EwInAm+Zf0 zf0hL{>4rsGEbvLhj{YzU|I9yS=irh&3vO^|1N`Ug``O=P-SEkq>|5FIWuY1VAK4xF z`9Av|_V?KUOtQ=(mo4}&Kg52D{abdP&nEe8{I|d+ z*!X$t+gI|NWit#d1FH zM*DXmg&0T2MlB49Tq1jN?(x-HqwVZ(bQb89EW*i3EM$n0S_z^nS(oi>nC_x)Id56v z*ZkkSZsvJZK1yUe%R2`5Xi$>)stRiCm~T{_F4HqY)Z*6i_SSA<+7^q^f&!7*)XA-^ znZXy84p@|z5|a{KUMLBnOL&OG^Lbe4!$<(a`r_6?BzlAtQ`SmeNFN0bK3OATV#TxR zyzZketZdD%Za+ziO_?$48t%pwX987h5Lek#o=aV)4XQl)dgowMdE}epd2R?f6;Pw?*Z+Z8=VK=R1M%1TU!siSJ zFlx}o21gH1%{#qdK<7ye$Bw`W_Yv&Ehsrpwe z*u*@zv4r}0-dkhUN@T#7jq>^W&Jtgl{VJ{#+f+9U!G+ytXyH|hJl9H7LR6XHdVO2< zT6%QI7{DzyL%3uVK(j(pnas>nq`4z~sgN&7DGA0dk4wMszUdV`=4q(1wh^PKu@onClD*n}E{=vmQPPIc=T zsMGe@XQ|V}(546wr4KgHn&Vt}1MD%)c)-MBrp#nm;i=EQPM?Ju#sjD=-gEP15D|Hw(jF>}28FZZQ?Xox4KQGpn_#5|9g=yv$>NPfiB zRe+tS9FA@0Xyf706e>sX8W=zS<#U#@n3#sVJSW1#qu(>uKel;l$DQ;X8L3s0mA|H^y?y5`n0EadJ4|2k5`6nQu!{- zG*w%#bFRw|Y%1P?JxLc($vLMf+LZc@JVln&v01B+3n%eSR%+CP%&?hj$kP!R#|vLa zJUob=do*Rvj(F?o(??HwdfU@A4?8xMyQ>4H=g1__$TiCqc^5t-@43#8qxXXcG>`(p z#`)eT6yERFyWJ>JZi{U&&E8o@t?2jVlOqG7j<*RINvKF8Uf0cRw)?{;JU)$TUMTwm zM^5wqXuM)Mx=S_AnUfXnZ{t*B~yvhM~Hxa#B_VO{n4{$g)6n%41ZCK z1bYVuZ;JjnyH4wf>^8`PO-|iVqff3v34mZ@t#<=~8DN5Q8!4aTK$lkG6e?rpdFgzm9L(;gbgl3&fT$aWswd zBk(^Vh`ioTyCiqzIrivWwOUut@gkjeU4mW5r+T30De&pT51%9_n|}n3N-^0Fp2Rp|AN{*blN_Vt3)7 z6ZXHdudvANf64wA_7(On-18~>qwFWxb@};s*f+4(dHdCrL+kykR5(m0xpjom|_jUp-+Vv0B z>vHhRg3%QbmT0=Qc#Mkt?sdz_xrM!*q%o1&-sHoJ6#vnFG@CL&vphe$xv1@UM9ALe z-{lz&KgU8)d!NPbZ|Fj>zTOzPIaC^JuFY>8&&~z~_RcNrhu}U+;p`kDK=tVj6vJGt zR8V>Z52Dhzw_$PM9x1IC$C%6tY{a|0v6VUp*b%)AuS$GA*ZUo1%?F$7F3E!)98y_fkxx8 zMHDLa7N+E;q0&KVx!Il}Y+Qn8CMIgNeJ}=%Bst*uFl35_pGd?{RM9%v2!4Uzm*@1_ z8zDuI=aZ_AH>N_}2U7^isb+?OL)|RND}s$Xk!Z}n5O9abxlnjY(y7_Jn!1;Z>K2qE z0cyrb6ieyWG?%3y3ciEcG@w!N5W_uTR_*EyIe_=xfBg8$ZAYhAl+~Y>bz>SEBWf)3 zL~;W7b=}Kk9)IxUX-}IM#S1-M6Qpzt)NyWFb#@%wwQ9DyN?AoImgt-|o%MdVP{i%h7}vNW~1uVrS1gZA$(p$x7tCtrl1&F2_eF$8!uw?!V|CNCrahU#CWcNvcNZ% zI-Q=M4wcaUd}Z{b=tR;GIVyvN(VTV^K95|f)@aHo32d2YyXUcj;iLY_;H~#kmygSB-M_9Nsy>w{@DtJ78|HG$G zpI+@pwyGy9EkANnjJ*0dD?-`Jw54jKKREpIG#SecEcXV z6zdVesd?Y^FO__<^_o{)b6huroUz9F?~&2v{Y)=#%;xXE|Mcng>x7z02wc2C6G4TT zs+5d4J`aR&9ilr2|N6?J)OZVPt^l_{hAr=Dh&8;oLX93T*7WNV6Qr< zG+5pk7#lZ zFMh0P(Ww~c>Xsd}iwU>BI*DX+o;ZhJT}=1STqpgHYcq}XH}A?XE(mBzFZPzrw7l36 zIGYVXa5Q^-_}PPfIudbow=b5Zn@ge`ra8yI^$y;AIUcubZ;V+Vg#?fha+x+&{pl+NsQS*9XOPA;oUGjs*(m;_Uc{xkMrLzqUoxEf2 z_dHC43+tV8OU+A!iqd9kaTejW1ADIcQ1_h1*#*@3`{FKh_q}>`I}`*K`?jJ;SZd** zL0PlXB&V;XISvRkJ$IHA7htb(pC1Ku|LPo!K1tEyV*Zs;j8=4 z+23G!81&oNA7}rPMGpVBvhQX;%1+sBIP^XCJ6YuJ|2-CU`g-8e(0z|ueRo+oajZy| zN5;-+o(t3(GlV(9iJH6S2KforTUkkJsJUzE0*P78ZD1CzxUZ*?_jKg%QP19jHvFEs zt9CI@K^ytdZ%!JK)^<7?N668Li$Cp3ec25+Y*u!B_CV1HeNL0#JdXNs zX>w$=|Iwoxc0SW|Ev-;;(q#QLzYk&L=3u7(W~ne3Y6K>?G1*=|NF%WGS&bFJvu6>3 z>*7(nIhY$6kWoVlQ?dES^)Y}hh-i`9J-vKsW20w#!$%jbOOgLQT;v8LdYE?nh%$3D z4+8hJeV4oA*XTvb?U~)(t_KemNB~HXS=iY6_~Rsd zf36Xb<5sD4vkKiKrc{qy~=U11vQnG0BQfz(r;TPV2+?)1e?jb&g zt_5UK#E7*kpfy&=RackpA7-gUO7D*X#>NrOeZgP3rOM3iZGeYLaqKK!_s0}kD> zpzt=zS+V3pwKK@8IY!E$uzI{`XN!iMdxvY!L7CXuyj<3`)fMy5-bQEn)wSB$S$i6^ zRZY=@9fpv3D?Egn6RWJ{t83BoaAD=}czylQJO-WGSp*NTwd`4PLk| zq{QZ_Uz$Z{=N)h4GZChQN)1U9ji$wXp|bYk;BfvpeD9kZFArZDYL}Fv^losX@9vQW zIlX)jsh^ZBvU~;)V3JaOtJbPC%GE;QW%k~S7spFcKa~KO?uw?bZr}%mr##`FJ_!!$ z!41l92tn`ZGO-g+tfccvHoGKj5>0J~FJoc4wz}z_;KJ*DdgX0>GYamF@-WJKtk)`r z)F>Bza-0qJf%)9JOaYM%55>=W+n$PqlGCei=qZt}P_(`=ILBz|J1A&)4w7yAMB(`*br`aJvHEb1YLFYog#YUTVZb`L&^ zTF9ZzISLPUxNgFbi$Y&^mv?{s{X=>>^y$W}jy- z+3#Xe8|P26zsNcwo7EI-sE4nqnZQ#qSn4R_K`bv^f{KV;Zn5zc6+TVe@B(PGc7ONf z&VB7d87UXosPo(SnvQjViY{I74rD+4us}%ZD8i=OJNM%cYaI^XMK$3o*)Pt_x1rYk`>cSt~9k zpU2jQLmf5ayzY~hdehS{nsKb-!?h&&)sBZfcQyEE z%Ue6kakHIo*I9Qjc{tEw%MS8{1%abA{vu05M*o-lD~E@(AtSUA$+a?4zNRyQ%hz3J zW^P`NU4$#lN-;Yau+3&qIBl^w7dbGu5g9TK?I0(>X~+x9o#@&U6R5+H~CV#S%Q@$?|?o_%DyAJ$d3&jr#OdlP9EFOV?&ccs#cv zZQ2A75nW&`=C!!Mc4T_yt9;%96d68L^cd%scGQ~k^ofH}zEm&KZqmiQ5le@++;RbP z?wJ_eBO3bJzi^K8X|QB^EJSq{QISz2eUn_7GYd2vbk@o^8cHiFMYzH{-UC^cF{4GW znP2q$q6CbzhY|A_wND5@AQh!0xG+L=NV8}@?Z#Hz?3V(K4<%+Up}6sp+J)G6_q;?x z{<>Vqmluu22wa|2q&7?yidhu_nlT)EU##NS5&72w{BduIcgwRewnip-KtS8QU8^ViW#K@B%CZ=aX-@a|Rb?c}KahgF!@PBA9W~9kRJ*B;gfh zsUZ6_$kCWnIh@SxPughW(V)nG0{;yO@ zy2_QUpnXk-X0Fgw#vlqlsdk;4O`T=*$(!(!pz6rqb?E)qX#^C@-|vo_B;9yRPbmZi)hF9^Uy1W=5gSwMR))&jJ#1Uwr7nTi5Fx&*oYem& z&oqX`q=Bn4gG~+w^LLT(+S|D2SXzg(Gxf4|+c7KHq$D<*7AMlHO10J1N-c5-qm4L< z`092C|ALb=Lqakjx|D=Yd{05SQNV=fO1f6ObKZDb^pW?xo@T4l@|cFCJiL<;WWxR- zW9-d}X8f4c3b(i8^{S9$umi2U@T*9otE)olTag}U+udC}=RZpwR4|r_9W8IH&~)Gq zMVunkBnq^ZGEOH3Ez!b5xVp;KXZLY#;hJyINN{*ASKiF?u*blOQ&FZjR=sCS)-^>06i`Z-hrV9+4pN_oW|nU>P>!6X$;OdbL_Ap=TQ_{5mZyRWtLr}1 z*Ns2W_)^C~b@h4?WEoZU*jgp)GN$g_^a3v}t(x0(+2c%irCkp3NUt6PWm)>q<07$$ zq=qvx90k_jB($=$vmCu5cTa2~^%{Nrc%%YrMD9;3N8Na!|CS+FeX;iKTk#?9sSRcT zF)7nUNL?an&y=qP-(=91LyvHM0xj(h@=(<8TT zD!+c~)_6O7hTenz2(xU|tJ(JTH;0$PeP$EI5_94;X4|;q_E1WkZ{BLV!t*sn8B6 zv>ln1aFrc|3`bjXV?MegU{k(USL|#nW+J>7G4%WVLqJaiqj4RbzaURKgSk+pBCH=Q zXf6lxhE<%WvoomVxU&l8hlTr6wDPO)$kp@A*H$5OzDIDcZ}4%_rhJ*5$Tpb8>+KAZZF4(d%D?cO~!$N&K# zrTIMQ3nJXn`)(X`U~DwVVw4#PsUo3cy_d@qg~9wp!QhH(X~J2Ha@p{xpdvXYs%PTi zcl)jI2lCZmwMEJ%ZB3pi1(ovk;Y_9KeAkzyz(iJJz=#;15m%R&(|v!pyE`iH2yO*S zP3@RsS^8zj#p9sY-7=1OS^=qV#8eW8(gfm`oxA=1`<@p9<_M20@_nSHWaeUG%s} z%NDIXD+?7*tvJkEHn83cg)I}!HWErTy;Sq^%9txCcqh6maUlbj*Q*{{n$4n_ zlhDvAB6Pm(mgK4&lyAiUI7%|5LOgOyBWNPLLGilpo?g*XN=CL5z?BM;uWaQaWMWQ^h#0CT zA|c0-vYz;90`FRmHS)B*OVQAE8^}Q`stM^^+}m5=pbk8Et)7vf=_v}yR`?Q&%>op- zL}fr(M?;1HmlO_UpLv5!!hllP=~j+e6R?S z2M`~S!&`E6B%&tiHuw{KyStl?yR*I@D!h~!Ncg}%G0xf&3Yz9~SPs{II)JxkrW>H& z-@kKVpSRJ^UG1)A`G$+hzx98@L;vCo6Xju_dG>AW_p%>lQGaHUy<&fi{XDw^2OY3K z$$pO2;h)d3(DnYaEOeko;Gb3Y?d-o}KgPOYpIP=L7TT8oHw*2jefFDJ)bSpEH+`Cq?5StJo|cu~5}0BCtml<$dJgG2Tu@?jk|Kdn^YO~bNj(dc?^?MMe2Ph7E`|&P z)mQrkrxLOn2@Mvmv!r=nN^ak=eB@?t1VKa4MZA9@b;k8R>)Z!ZCaUrNUM`F=H~ zp7;v3tO?FO;IpHi>vS1mu(sn_^-W@;8AR>9UCX%BImZ0QSqEmm;u zf=nC<5tpqDgPhIxVpK;OotYSiU)I%lHHDc1V`Y^(r+rw38}$fx;Y4V0j=)0yc8B z#&!q_F5O?97j{d%!=2he4!5n?b5S}$Le^-0ND;qEEi*vIiqcNAU~#HUh75`56`Xm` zIu7V82ZvkDaSP#r(R?adQ8yD;#yH0e`H_`!pPGzbo%bWo^4v6RH$o0PThxbN1_y|6 z6%HMZlTIH#O+$6OQR%wQO{!uzm=dYE>Ur!1N5*7zx;Q-QAaF)Ptfg#va~*;9x%m&X z8}q#wvLV{H#E|gw8u=9*0M}v0G}6UIaPtffm$DMbn^e=tGv-U4+E{UzFaXSz_p-*A z7#rEDDD3h7vG*qaab{r#F3{<=Eo&>O zZELB$ti`gs?QR1hXtytfVaQBK$gnTNgiE-<41^h$ff-Xl^?>WzTp5J-SbDqOFORcR~8`@av#GQ2PbingXg$a`Tg}i;*>Uk z7(rPA1LP1Muo1{w5yin~q~~-NBp6F={+e=*QuGNh5lK)}2B~`9khb*z4atDSs4S=5 ztFb?@Is@du^kG6ykU>E-m@UhUr7TWGz2c@csK!rYXG;CkZB+PNy3)d$pH=%l7`p!g99N z;Vm(Efk57az3h{M5z)D$Kn7ghkyCWMha-t)V)GIOmpz*}302p%wsuSj{;+M9xY>+W zwhUh(K7twS#yXjwukAdT1W+qm9hX&5ih}fnN}V;P^fX4%XU@Yv?5Bu>C{rzgLGzri21s701 zz%>2Zd%TSn%+zMPYC8*#`T>6bH_&fDifPpbZhAkY7~ww)eF5qQH_bpFhW-GOJ?Z_B z&PVwS)Cy)=fIb1~T$D@TrF)Rh?kfW)eE|AS=;xt-fG&fR)}Vh4{Q;B*MpEqWap-ku z721Tp1A5NMZo?~z#Z;QZvOfo^Gv{n3*n;^)V-{kL(+|55l7R#b7$FH)fG=KSV~N^Y zTjszV%m-i)wLWJjHsOE3nu%}~`irJ5XG|!*48~-jFNX>ckx8L%+31LTYYWG>PZ#YIrrs5lQ! zq7{Vd_13ij{J=7uiuurgmFNs4q;#w})QDd(PEdcz7TL9%B=xE|^|meG>#%95fIQ>C z2q2a&h5+Zqi%ro%`V{v|b#*?Sq0rKWgEOHk8*6H7m~>0fsWQNBNd|(8W6@#5-xy~& zn|McQ_sa-#7XI<8?PfoUzqzi$SA%Z@1_p5+IFhLkO-SWv1@ZWl+4v66xd{PTrj2CG zVzDhVr)~0aM1U6Aq+-ZBIdZiR9BHzt7DzK|p)Bte;uoWi04sHkXfg0ceFM%R2ne=V zX+d^`a6)}ln~GCgDWZvt;a+(;6j4`IC5?pfO4D^r3M1^Jl#Sym0hT!yQ{OCS0%jS< z@6G)N-fQ+e_32!D^O@o#F1M~AUb1H?lW1h-d6VBxT z0Q}kg4XVk-fkA>|099c|#58=1YM`7^PO>n&t0=|RH$PwL1Mah`M;U~1Qm0q9HI$cB zH8=EOEn&ZVK?iO&BGeSZ5mzkwpe;CD2h$B-!!|Q~D;mqn`Je&f$*XCQ z{t5}ILdFOJ$Sz3ql_Zx~-gbp~LJbh7j=gXk2SOnn$68g79m`kAaYKB?MNeECb9$SQ8tW*rM@~qCBg0H7zr#S{Jey*q#qKN0;!OxlMJ+Y33NBK zmSaC7CZ^x-#YwuGE$F>IU;rj|nv{9S zOYpdQ04_#ZeyQU?R5X;|ECwhL!Z+k0)QD1}WeF?ajPkLP4Uz^**K=}P1xCA8&K9=? zTEYYThvUixn4Zd-JWk%FLnk~6)s8@H1lKbgV0yx4L!DwiG9Df$TO`t(O~WXUo%$g` zLix1>e`oYn<5ktb&crshD&wZs-EEW9ln=7QoT63WRP1?-xh3V`vhEhbv^23V7Ejwi z0LzO>S1CU~C{yg-z&^hqP zA|(6H|9})rO7@+ffc_r33Leoq*Y7|L;E@~9MSNfEpT{kX2C8 zi_@j89UUEJZyH^8mbse(iS4->gp8)1Zk{kr`LE#qL(=H z2gyg>G?DLR5k&AieWs_bPBx2{M%M08iXA<*-iw0y7kbei#=}BZOr|4R@YS$R=RZ%D zx(4Rn>~rqcM&^1>gSHVPv(5d){N%mgVS zUoR7H<|F7gaxo{N4N<pN1U1Uz^R{`L###XE#Ry~GAPV&Sp(4Wt5A zpa=#jtDp6aLzgdLP(jX81sV)~8_S)M67B1=Zra--E9;N7(R7Pj}Y{3^@Qd zg9uCs+IFXPd#&*FjZBW4J)^Xy^NMhawhQX$3G)xnM^*(^*c1hxkE zF{KJl3~<8j*yL5Drr87IVDSTw6K|Uz80Rf3EUaoIpg7K{^)-z;;jmj%jC>VkU3^sV zdDZ~6UrMlJaH8+(mt|uOCYy<-r7qS9U==GNtmiajChAwC80`usmT=+!g zaGfjVcSMQwJd;dHk`7TxtsKNzR$AR&&pKprA@&>2jjk`kw9pFw;?=GhxwR1e0y7}3 zM^ZsHfDOX2ltB?T4&$!E@3pa&v$)yZSyfnAT3*ISvUd|{;41nfF?KPCMBTDe4LOx~;OT^&V)DYD` zMWGAZD1n2y@do!**EKd)VI#t31n92fgj;Rg)wU*_Dkq>a#BE}?QgWt)uhPcRu867DcHXUbMp*Mtp~ORKQnn)bF^F4Z*kEMi}zGMJ0d1lrwF?IBb$ z69bMc)+>5*oKAI#NzbFAvO3Zen;;N4lf_Jy&`%r|QCZj009UlAHRNWI$zbJD4OXofoGOIgW|Jc-m&bL^a!}B1~&VcVoW~I@+bhYt0uBAxU1W9I!w4h5Z4l4trx}#RZ+jwnlO^Y15 zW0FP9?k+v$f0i#=)mG_RN{q#{dkVw@j_D%KLNR;Xgl|3zRe)i%r|pB#uR}#(n12i@ zuEK9Z6<`?oVt*KtFLoz5<_%~c`VFW695W1ULZ5{GA4u^qH=tjF+~Ai{XdU_l^!tzv zywU-Q33-8eOZauo21zIfewmriatgbz2{7K~ zEg?Dq@fdnKbkvlEU;qx6gs=}#Gm_;R*ZbaeSZM9R&Qs*bGg#~Ye`r^JRF z9`3_*i#f(O{ghdygt7d zOJjLq31M*RcsUh73Coz+t;OK0IPbA=%Y}7onB6u4PnR#AC-kx^z?>xQxkv#B5n}ML zxs5}vh&xk+vg^R%fTgKR1SU~_6`&qa30&t9k5ZJ(Wzz0TbRKc}3ahkEP+C~Z24?9? zA3Jif#P`X|@~UNBlV^qgl>J&oEQJ;pR7Bq8T0Av5!CHP2nDI~xK0mu7%KVsIng6nL zhQTY~Y=UDCUj_neO8V1-~CCN*IC`6dO#BUcye%$TmlS2#4O|M~uOCkYm#2 zb}ET73XXpzdy4pvQ&U%RF!gE=ET3h2-tWgl*k9Y))KtaMVI3SlUQ|+sQK{7jQX~ps zX$_m(8tM^Dvh^8hHIUg=Z97*}gN$oog|metc>Fc!Y7P>wAz%rP`fP+lwl{OqUTr;D z1rWJF__h~ja8q|W6}5@=J+pO1(G%of_(r6q~X(BQqoLQE!?#;)z9nVB0z@*z_cTu!W5!6<^P{6TKp1x`0Atzprd9c;XtYr)^nt}mcVM`JUF z237&}?$`t`*UBMYt~!g9Z%~Xf8%xkclB#atgy+udFY4df)s(bt5qoZsV z47Y1Txh^wcjNum7j!aEzvKE|`jg7<$ROkAJG=vb44sIBFjJ+S21^H!jjeGk))}$wW+14 zv-1Tj2?C3gWKLp`c?*=JnTQ3Q1o#F+ya+Tlf{jH)+-3k)$PHgUsp{*QG)=CJ5pTUy z8)IHR!%PsHB%5}RV~o{#sFaWDj*az^>=kobEC)581O=;OKNK$ZV0m1I*23X$;KWWQ z#Dd~hlrmqz+FCX1o}}PV4;b)O4=eF7KMq_bJeZFXki4|x@aP5J(Ir6kD(0}ufLg59 zroMF?OuBZJB;%&K=iPjhB7IrYOTT+^k(l&}X3rFxUs6r_dil4PdYj zK!+JTmJ9y604+e;Blqi29yqKQ(%HBlf&Lg$eDWL6_d}nB{NSz|(Dy-#_t^mEx(@v- z=(A82v8{%o*Pulx3RUIM`z$kIKD(L;XGMTAGX{Ic;QrI0tnyJ9CY04xyxRzZC5F04 zPdJY!@MUK-b{mONMIb9I)zRn$H#YAf^IVfg4Y1=dR%PW1V@1=yn$JXOVscOuOEWty zVp-rMh*cHl74X(2b}wPR9qu2PoERXbHIFSUMa`asu&TOH?DQT!vHgoGlli_9IsX5Pg$X?BGnj$SvXEmPsH*# zc5DWwj!u~v+kpoS<9bSBv1GEw1hBHDv}zm(R}%qCZ*8sBWOl;LZuwF?8)V|q+*U3T zV&FV|X?_ugQsOC|4q+8O4q!DU&@qxE+Er2!Rz@)HBLwI$j{Y!1vVdAwbI@t!NdPON z$ut=&VH5F8j7w-LnVcFQ-${-sw6g?s`^<3D-*(sF9%7D zB*&)`sYD_wJE%)_ zhu)ua{rVeoDj<-j5>8@R`4Xv)Zgvk@ajXbpMVMEN6v?R|h3wE6D0-GWDdE+*xf^ru z6~ijgF3*z$-liQ2Vl_e}QQ9q-N+spHF*T*&x;negKX)pI6)w4~FNFOxe@$0?pqtF8 zl!92H>WLq#W}o6Kc0ghFbMneR6~n4A6T`~ij(cEzqnDh7FQn=mk~)@B=ucJHPVAzS zAXZ(cgIH-Hq$}o4l8Y!-4K&gY>eI^9Bj27%f><%%Bh_&ftH$=m4(@a%V_jAltFeil zok?m(^|}l!101zcInF4oz~qMKB7-V27TKAI3+38guFxisj^>i8 zOkAsy^2NoL8h=wXo@B>WTMBy@CPxs_h++pbgm-wM+R>I(`se~2QihNDAQ&aRVR$n=sj||1*<5A+h@+&;6 zD}9!o`D95owIQ;!YgzHE8tvR^_9YQm4E7xj``Ac)XeY|fN2Do|!&Llu_I9=ebm^_q zDIv0f9LKe4ZcL@77`Bs>yl7%#_B;9S62b zu0?DUlko`owE)Yv((&3Zf?xaqB~BsxQJ00BmLT7Lu0|}R$1$y9H3N}IN8Q?5O(f1T z*2E6)*1kRlfYgIF_^=i zNF=JuG?balns8SXg_{;_6^T5rAX!|fKU0N)i79X;9AjlgFnEi>ESa!Z^0CrX9fVOz zOOZ*}z&Lr7MS1GZklb7?w5ZP3H9OK@DOP%^7f`gRoJrlPgX*|0$+|pg5Ur{7WjDSY zX06$@#8tvxVRkl3c_3T2coU}y_OZ9G*Y?L?&;Jf7Mne&JvmTNk`)kk^^ik;3(BDAy z;LlMg41FB>E9gZq=qmK1&|gA5;Lv0H;IHs|7Wnfy=ymA3pie=64Yh$mzXkdbq`iGP zV9=MLS?DSBYtTPHigWePp?lCzLVpCg!J{3}IJ5x011T2kFG0epe-F99r)SiA=`t7d ztieHGy3fdJkM0)gM=7W4ae)Icl$N;BlI7KkjtZDddsv!pZZ7d4If0OqBbV@gkDj+s zt|!ayCwp;$-_O!V@1^+gCAQE;qpv(OOy^tdM}JmT^){Wq6vrkTy~IL9E|8bYV6?ON z;dAsqMtVCHROj1E`B9eJcTN;sf4|BhjMlV+`8jiDZH$AK*CvYt+KE=kcr} zHYul6c6N05{7q#m?CIk8>nH(K+CWwrTshc3ZcFOFR1(93R?g9>DAiYHWICvAs`4d} zD@{5ixCpJ3B9eeV9A~+^HP*niXl*coj)*4tk)(hLW0tdH>vC{NQLVqEE)h*|lp@Nv zq^LTD<+V1@6bDwu@QW~zGMI`{{dh7Za12n%B1UNyVT9v>2>I9pS5gx$3#8hcld0xF zYBjEW9BBiRO_Gb52bFbnS93CoqMG8s80cu>aF-HaB@iuX3kFlcSh6u0Ylx172T(`U z6gkxRW#+i)o2zX9(IRsAvW)q8}t-QRrRJm|40(=Jil@-y7mRQOb z3&!HXWF7h9Q%o-4CG(ErH|A}COl&+|*FcfJ8t-aj6zClk&}s~{C#DinKCja(yf|20 zEUh7Zszo?*IzV@`np~N(O$5X7pxQM~hD0#9veHSdct=(zj^TVZCN*AtEx>FyS`Y5D z1@X8F+UOGA6Wxghqf-&3ci`*UTxMI)?)(N@*K{Mt01yr(8c*3KC!=v*QBzAG$dzb3 z5e0A1kB)BQ&Xg_nbhO|F1>6*N^i~p1B^9^9#leQv$ar*gA{CEE)?#RAas)!5rJAlD z+!>;v&GOY$3gB4Z6Xr2o603-e_xBC+9V@Y90%QWm5g8mdh0Al=I+m8)t+=?gmDgi3 zh_a&r;25yQBC*x7sqxYNzOhtdEtw(;Q``X6oDiYlms~k*ZJstZ>eYAK5-CEuH~Bzq zsT62&wQ_27ZD4IImEs)0i45AqrbZ>5IXSs%`FwJE8&@l8RvD%6jc*kfi6lHuh~R-0 zOp|Nc-e6tnf)2R9bXCx>lb6)@)cCuanY7kUP9aA?B-pmVRgt(!pFVT8u&}T;p%D)& z2I_%1z8Yj6r%Trcg96Vu;ZFslWI4v61#B`RM+9|)AeE=J*Unmlzj|tlg-D<$@MR(e zbWPzzHGM1qGF)!im&aoJ|PF zSy&-+tW9h!xYiR$wcJ$j)}~4lWKcnWa^Y zvB{lakR`lyf$C8xj8>eB-I7RcnxGry)hWdU2BOk55V7&l3Pyw$m=KV~xrv0rmMYk4 zpa^tiU?|=OqhN27u2^N4=8~qKaHKSegf{X%< zlwD~pd#tR~VQplWKD$3DS16Q+rD}sZ8Z41`Rl!d)ue$*JFdv`pRR~HF5-Zg9GI;Qu zIj`uikwIDDy%MMcQp~PtNbyd85YjsFmmn|rPq7~EK|c*?e`6~c@HOazkmB(F1N0&| za0U7|(BDGs;JFcVTM-O0En)hzGdaG)HV5G~RgwBTo}ZhW3)LbY zarb8TN@GXBR>hY2W^f*M2H@f7h+}Ge2alXnD9=u=oAdL|$|jaxxj=XUg4vbTG*?eskwW(Gg=cDm1GD%E1(6dv>+EZZed9Yll zwpw3OiC1tcP#b7Xr7oT)hR+TrF+|F^?2~b(_qbjQzok-XyPd|(?kOt5)wH9jas?qB zs7Gx3rn{4Kx#DD(V8R^PGeIHHxODffh3;9qQHA>X~%O~ zN-u6=Hm9Yi6cRp`2#yDn{hZ1q5v^3Vg!zd|24gA{K(dT1EJKhdfZhj~r-DB6U~@=K zP1+dkyet@Om)$DBm}dT-wzpJOfx5UlIxvn|_j*qfOJT4xz4Y zSup}x3DqEN<19J=82Nc=xDxD>N=){xMpJ#`fx1>+7md??jFJ|IU|75PskfWV1a^PJ z{K}^6dazqdD%Cd@iC-N|#RAn0twCX{27~vSg$r7Z9PE;1yGPY|j^Plitp%rX0iR(3^4M6cr|7|Pp=|S(w7rpV!ZSr)gSINYpfX!(MEEk5D8p@8sF{4W z<}85^TcNQDPJo&t-eijklbx=;g4P;J5%j$W3vp3K^HZa!Q z+)O{KDfJq`UHvp%<;HfCDr@Lreh^4?H`ZWf&v2=5VoINF74OD7vaF`FhkgUBRTh`| z(S)2FOQ{ZpT$yq>0;kQjIT+0$!yYjr47w9mYpwV8G)H~$L~}c>2yohwrn9b0uUggd zfNw3N*4oO#EF12cn>#zPk1<5akqjnn4m;mKU#C5-&rn)-cXyAuOY?zW=vfeYoZmBu zE?3$iA6S|B+Y6N9 zH1aDV;QW;qtagHJtnz~Ez6|&kyV*Rct6h5xI)v&BE<^dl@7JL9Di z>V~dD{{*@QtwSG%{w?%}P!^oj3=KoG&_n14p&?li!L%$1s4sy#+6rf>d^?96_&Ww|*C~IYf!B{0>pU%zGf%bU0Tn$7b z#g+jto$ChSRSyIrmjZ;7EHMfqo$CSLl>_fC#RFGZ+sVQDRul)*wMD}b!cM1Mxdy}; zn_Zz<<1Z1n`Yd?p1mYbdx1O_lP$cfId4>|R8FQ5x^cJW(4G**3H8qtP$kyFm;$S8= zQt{=$FdK^`VZn|eTQR{f#_T&^h7Pj{c6fr+FyD`k?ARtV#yyM4l!6`929@DPj!}Aw z+2v_um|d&bz(oq!0e@rn+X>o&JEuWmHc^j@x;PCHcqUl4gR%z>p2C3H#QrN`8$Kz7 z;E*D~fhiUpP8O+^V#R$QNkt+qionVSEILl*Wf7JJarBSFTZyDerFA~cGs$F3mBOfr z;1(JRaBf$joMuSbH-gGIEifSC08nXp~xmU->FAj%e7&=c~N@e5N>sr6&tYc$#HS!=k zxJV}y$7M2*EDKNDZj8P`o5P@-XD>W{A5DNkLrp+y3)M6?oT|9#nsjzCvl2q8QAqIO z_$tVN_Dj|xfYfuQ0Kf_wHYLDf9zSbCD@A*IPpW%jBVQlHZORjGTO{N#OBGBdG5nMpXF}OVQlZQ0Cgq>&vV%K;KLM0 zcr11bx3{0Jf*!LouocTuV{^1wki?V@i#t-nb9!D;fqOLggP)wjt>-kUF8DZ=&Shs! z54&NE5n;;CV~5?54BAbzr_y<>kTnJ;r>^2Yz)gUB5Su43NyYON8%kqvY?OyVp&%Y= z(F{DwQ#W}D6Asoqe#mUbAOPxMo)W~Tr6Y)EDyS=HTrH%_%~Kb7b#i!jG0rot4m5mc?kZ>BQJ? z?Dn)9+t~SmuI||R_~7bl1!`Vv&Ew-s@}SNv$v3KZkBX()+v6$DmI^zYBd4Dx^<)ph;)}dIWtG`W5KUpnUXv7c>rqpvTY;LB9@t z2@(d7jpu#PZRk6oAA)`j`aI-D*SA1dpl^jDkk$e}4*fFp8R+kzVwggEBDH@Y2)z#7 zf$l-y4Sf{)8Ax&7OC93$bO{V%&J+m%B0+-1xuvB<=wYftT>7Fswy#%JHgP&Je-%2a ziN09ELQ;9Hzm?Ny(;e2;kcCNkVnVkqJC92vZ+Arej%N4$QY4D<%>hgGSu-xAc8)5WA zmGT-nYE4EGaY^;88gf@R*?Oc#jTWVNd)P5~F^NgsdOlp;id#(oxZ{;U6sQD@!+~+z zXfx%P=ClRI(Ptx?U`j$cl9!Xuo})AosB8@cbO`@oG!9=yaU7SA!o*fHILfq#y$QN5 zg@;fr=K1L8U}Nw2R4RZDACd<)GAT8FB^-8r$jvYN z9lWS1l~G#9MKm@JjVXntK?g4mj$4yerG)HSw zZ0qKx&&>5RPmL-j#_{kDQIT-5^OqM{y7VNovl2mB>#gYQluvjT@|CF_=vEB zmp!~Srylaw90IIJzv3KK%Z_v%MtoeM90t=ky4B~c#a_|C#`EJxWUHXEQ^=W&V$En) z(+9cb?53KBpva8aguFt;3c7!a!Z9Z2h7TQMt^C~+XNJX-i1B}eH!|6Nc-P9pdm;;E(vH4`Vr{Y zpg)Bi=&Nez95f1j8?*$iLprxa`~QCo`bFrsq0d2It>3=3YO66uy|2=5*6k8D&RI%M z%v9_-(QrnU=G`;>ZHLR~4fhZ8kV>o?su$||q? z%QT#vzw}6XT;~@Rgd5e*W?VU!m$Ga8PxpUIF8Om99(j4U_tYEb1`)9?Fhby~hdO zOWWDT@#s5l1?;az-K9>cJIVCStPn+mzDrs9&UQ-QVgGfQcD9q`YbrduN#ej1@wGG_ z7HYmkg?vqwhvAhZHYTzEUph}|vIrq~qVzxrrZ_SMSIaiX}`;ZJGP0Qp7-HMw#*!_#vGZx9>{My=y9UUKVazj(TQwB^+?>)0&O7ERa_BiCm%=S*} zy%JlY%}s!ie+o){4GKZBZG1cQeURdo{0j6(ko?r#%g6VvUZo1x3+fY&h6XFxLk$P4$qxC%eUTq^UYg#R=AP2pIKWof4}+W?d4^2exv>D z%F3NLmFCS`w{I=4aX4Gres)=@%>VpQS;zO3?#)}btb4Y?aQKdO!xXU0!gbnKxVCoN zBr`v5-_a?NwzH%(X_Wic?d7#KDs%fd-L2cV@8~7AGvV;<UaqXrbZcuK z8CS8k^E2Q4>bDgTM<&Pih(6eZegOJO=-)#+E9%c7Eplj2Ndu(Vd6>*>-vmuVcc8n_ zJJ1gFz0kjgei%}0y3XOQgFPUh;G%hy4zkZjg3LRqH*>IxBZ|b(yqb!^pYtCE4hywRDzqWo4NX;BT=y_jp@&Hl1aD$zs10H?o|O2%Fg> zkvxZKsVrwWOjO8?(82{97af8?YC~NdfvdOAFafR=lH8!wJVX6fe@atME=< zrKH(7Ke9bL?KC^#(=M|#@6=D@qfLZ-TR!J#Y zAnj|q3q69~f%c&9hdu`V81!?{FGGrp^aqgk<7efF_vi$g(ZMPZ!sX5#i_z#y`j#=b zocUXfr@qhdojB8sQW6>VU_ffva#0B7*{l?XFD<6?EH9hkf6Q}Y7cnyu$FQ7+w8h*R zj#H6V0*m2noawr(H}DR40atxhlHw2@%W3=Z*tuVKNz_6UDnnVK}w<7Mb zD-=~W?SO<;OIVC5hBjR1QZAZc4ek(|!ll_xajBj#RS;`bL837gI+u=89yuQ%O$qGWXz8g>lF;f=!&uNxXTP z0vQ9QU~Ve6I5@{Va*@s&6y_F|OpD9&WYo+se2)3u)`&(cwz+KI1%E$>#CNzQ!9WEYQz;LK)-?v(YjK7EoPu zjteO)ab}k|Ga5f5LLK~TxW^J}Sz-qGO0too!@ZX$H@{pZ>i8twC=? zN6;srUx5A#Bz>v=uY}b1eb7IJW}rCq82TPaGVd24hsEj^&)PX*cZDul$#f~-afVU1 zoDoKhHGP_HAt=yjw=(0eMYuq zG7Xf1>e9wDE=~Vl7>UN$p_F+pP_xW`;8l1)y0h& z%%gGqy^zi=_<2bBOJi7T@WP`tkor*T?-S6sLJLq7lK#?|6)yb<^rMh;n8xgHL4OQs ztV)Nu&@X48Qb>Dm+aO_{03>hZ=OKpz)F4%>=mqL4!x3-ZGR4>^=J=MCi5D@Vtu&^Oq-Z2axNfVNt-mdO zsG4%B=AGMcD2iw`!fPE!6EbMHOMp56>ioGPX+oFeBEDgqWuq8`R`kV!I~w-}TxI8I zkKr%Q$mUl@vNWJXhXF9)8lE_u5&)#J6o5nwSzs^;3ZrYX zBm=mSZ3em-cK<1dC#4UClaf=Oh(sadek6}uH3>mDyjq(vTvWm#CBtbKg z0OCLme`)|0VrFFiUQXK>87nZj;F!tJ;}vN=p*7eOc7xaW7OLlw3y?MY;f5ZIp`?fO zX_{>)rx82ZIWVkXI4rBCAvrk3Xd3uZsnJ%XSX;|;WKfOX%aaojE)KRZ2EU0R1w&kx z#Bm|zjS4er%^(orb5jr3v0BSE8Az$x39IAoj2aRka*9WDDJ#S1C@B847~SwQn93w{ z7@(w1&1gDtIs3^hv~IDw(RP`NS%@hu#y`<{=4Bb4=POW+nLqp){G++z4y1X!WalTL zUxWS|^m*uiL3!}AbYLs=0(1!)hTaFg0UhI?B)@M%AA+7hKLC9K`YGt=pkIN0ANm~h z=g^m+{{>}mkL0{Hxk5h}hRq-ya5k-H&x1c)xnnZzl% znYIf+=?`mGh*4}fg=l9XB{JJ^`tn$ARP+Kv1WhjaVswzh2k@B%AjQfr*tPflU6*E zW8kqvzh;|mw{Wo1nkipaX3CdsVIxcS8S$8b!8SktmD-#qHiPe{zkd*t4*gw7=S%0% zN9y~_kZc8apgl-^D&3fi43eB1fL@0lKp%nRtNuC2!dmwag#s?lYKAOL#ym-L6g@Yi$yq`l8mmj#z+2S2nZvk> z$p%OvJ%Wl9)@_@nU%ASIghEM5GO0Ta8dXn$W=kcq;5yVVB2VIDRgY`M8j@W4ASOLl zIz|MtScvdhI(-7dtU|(H9A<_GqE)O+g@~U8G(|7!#>!F7Is#t zvXZ?S9l*;Zg`>tyVV(-S9>WRjDP~GxNy18fkf5Fs?bLt@V5u{6O`AF-yD}EzYs|dG zq){EwSW)uT8J+E*9}uzS>ctFbQE`ZWaDv)H38GO~IWs(&WAvT+Y4n3)E7uyCnOh9! z3&d*nOl#5h1}JD^7>T$_DFU7ltiEl^mMWo>tzjfFOCr7oU_GV z2pINQ;ZsrNnFPGwrIAe~^MQXRz0GIIh96$h$E$D%&b8bhNEL?JG)g2U-24=oa28atCU(HGSx2jI{p>EAg`zp%*yAeX1w3 zlq4K3VzwyR%FE4-cs$dME}6kBn1_%mHY%}PhFLX@+SRUVsWjaquR5y;kt#z%IdDKX z=>T47qmfBkEn^f_Q{7F?=wcF?VXWe0Rj7fnbk7t=|Dlak3CUztJ_i|U9!qCQTUcr7 zX|;K7CCI|cOdZwKsw@fh@HnfAhIj?Ph`rWSu-))|P9%wpGT%7eo#M}z-M~WRc2aI?>FU`_bFnpiPWS~A~94( z-6$s0eO8yQMdEQEpx6kgw6k0+Py4Gw&6|vZM~62 z)KpL7qyR=xkJBLHdlWt;?`aVc|^s-&- z3xo!sdFU-j`}5>~uNbob9V!+eD%B4Hf55jz&Uie^u}ZND2lwLX;%t7Wvnq^8^qMW9 z*3>y4^`;E8Pb^j{elS9|h76`n&2%D9WqQ>5Br436@QfKzR3o58=TRUhSewGr3c3}I z7Al^H=}EFwlSO@`Jk3^5x7}7}!L&%g(@)(FmG>5+g*$ ziCO1S*;Hbdn#G0I;kFxQQ<;T^2TSz0Tuq2VSM4Hz9&wdTj3(BLMvZ^10jbsIZyz74 zcfzr)W>ch9{7HN8lC!#R7}Ioyk8d?CVzQ_|?Q|;=Or69V@=dvg>i#lSNJ^8h)~`N& zI`Ba^GP$yKC>dx(>2&Z`tvW}8Oi3)!C@T&vraPuJy?GLtrtwWN6dW_g8xmz&y)MU; z5|-4@a?w<#S>2{41^S$7HKM-68s8*yki~>_hJj3-Bu-kW6B|YKjFwbOyUo|t=9q6) z_b3bjNwTE$NfL=zZ>dvja2d0bWCjR;TU1cpp&AQGk>1Q9>N9M>N{1Sk?o$%09;PK6 zs;`rYoN1VR{iSos^K#>NQpIU(nzGsal~zgW3Z5H?XOM55_)Xnt`c1XZ(GL%NO1%vCJd0&l zXNCYDro^sX!^&c0>!rmixf(X+R-O8uKTSf9X&ZXk@L93xi8Av+O3j$6Qzkyy<)lb4 zgLn}J<|i9`4R}&|Yg}t)p~4k-T3no?URNceRwF4rx>}W~WZd(>i#CAs8I806Ih_2% z1WCYG13FrycB0G*iHUHy#&C^vTdX+)5}o>1`b8ac#?-u+Dsxq-GgVF)u4~HDA#{Kd zFXfX|bpp%t4}~i?OrTQJu4*1oAw4zxsgkY1qsP`nn+{e9`DKy|3_i+GDG=|_hZ|!6 z9SU^h9fqA$BA=#@%raaH|L{@dIKvl6BQ>3M4=Ndr)zX*@SfT)a~ZDYQ8g;Ah_S)$o_sP#4V3z@gSD|va;UYElzvk2wo2! z9-y*l@5?X0vU%Zr@4y6}rfw$hK$q1>?@O<|viZunm#@s=&y#kSU@c-bD{|@8S1;|o zdhXneZgU^}b(>|HNdLtvBS*cj^v=xdelo-!T6po^z1>}R4U_QOcL-LY!#GF!W@Z+Z zL`NDLDV3dl@816Y_I6&~^fYcA;T6TEi^u0?bp9jh;$nydA}=p5oz<$e`v*&lk>wQ@ zqa(>gEIxPBlt{GK7-{KPCCy7a+PAm&w|6)1?#?a9_>Lwd@y(la6gn|J89_ZzFh!fx z_KvNst=+k~z3ro;#W{c|xG52Lxy*5tR6K!dOC+8p@7&tjn47tIb8qipF+^oldcw6d zv$z;qB6bBSt;8zb?S3wc8c`?Pi|gxq>vK1*-MF!N@RauePXoZ#!(A;x>$p5v^9VkG0% z+-u)*ZDVWiXlW_Vc!;}}W;r`bH8r)2n{jn;7~4NO5Cgg0Pxklc=hL=t*xWqW)=R&g zyuqayl0NQ=-sGK&A^Va#CdTILXgIcia1U#=_!s{_tOdX@4@boE-M7UPgNUp#hrc-Z0G-{!k90Bge$J1x>Zr+@pS(qFf)TtzA@}@b`EHu_PNNnYFLEg1%JX`F$ zN(>V7*R|QuD5pQ^S?>J&^h{`^pR?lFr!zOVz^1T#P9>XL(l6Y=cP{PW#=LHLj&EdT z{&p-ba=VeZZ$-p?)0*Z1^kGOgS=nel1?gP&&p`6E%SQ%FHp@1vHO&O{{m^eh*~sIU zp*xWLW&STnXH{rVm14pDpU|-#rWaYP^V+`~`U&W_p)Wy2$lGS9(i{n!uB4`LSGvM! z{?%`s&PLyJrOR_NH~GE9y|}nU*s#o_Vs~EN($f5*^>@19EPWUo9$FfjC3dRIMSwGQ z=gP4p$`MrkwC>^pM<&vuo?)XG5@5z(2&A+wv*5=HO=^N|!-=1GgP*TJy z3ASEDI4Q2exon2#KHO|;G^ww>e&hc7TZ@bF)ukn3ow*nUvvVe~k%NhI*_)f|jB>(o zk^b(?>#t4U*nALLj7LbnV7|iTnp-g1h^`PBj*gylAp_PoOlBm>-MjNQr*GWdSPaeLptCf+7^2O%ZbCmFnxp(mN2oWT?$3M}7 z&AmN|1O8v%-Q2Zu($t&lWDH%ufw6+B&nf5j?$f7q4KheGy2!!q-oeq~u5#}0p%8he z0~N7#@810fH(q-UOEmf57^ia!(Lvx>K{TPYCwseyEixiCcaQcD5kXlmY;0`Y+g`eH zH>Rf-78Qnj8&wdBAfoj;gx8bZqrHROL+(D^4;@HKXJ>6}Jb3G^+}7FI6->f! zys@wt8XVhMLREzJg<&J?XQpuzdq-4JjhoJEl8-}}cZAr1w-egjKL|Zl>F5wXE*3w0 zqI4wmYk?rVusF}@<|8|yEyV0o!sd@hBkD8#k2=k3z%+k*jzPtnM}jj?Lm_pjP@;l@ zBtlP)o+w!*Zw)Uk**JJ-gss-N1t&lllFRX?T$q42J|STM(Zet4yi!2T90PoSV|T}P zc9xbF2yO7>NppefM%p~8NzaiInL16uvGYVL86|FSOFoYep#v1eAt~JXv$IayTKvl8 zi+v+cc6Qp_PoD6N`$%)^F%ipbtI3i6&Axt$ZqEZyz)99qk7srkC_UW2ySYibx99He z?j6EtPbs+2#i>gB2S<5%9nRg|{oMoZ6=(JLbE7ls@KE2;VSC9|hRpmSWTI>~vSEJ) zk`I?;WD|51l8lt^&QnP1SN}KULoR+ZB-{0`LOICAJ}3%(6#6Yl=SF*xhZmvOpmj+0 z>YsxCBlIWGUqcR>@+{})Y`fNVGOM~fRz!Bzv z8$}-dDVd~X+&nWszrewox@*Z%wpA&HlPdSh6;2>Fr_(6K#uo3edA7FR-gxKQ8`n49V#jj98Ho<)@({60CU~1t z?(PbzRc~x;-rbm;UEhARIG;#LkH-`J{e(&3Ae`&F&_BWOCisHl zkw&AajYwikpl*+$aIl`qd5?^|_e0ZyF=)lm((J_x{gcQ=UMQ;)h#0XN-8}%&F)|Jh zHum>;ryapag&#b+E<^t6YHaC7fA7WqiKn3;CuxM4B?{_CW8p(dINta~15g=z?%gBn zqjzrry0HDmhpt?@%z@%Ws3w3?cxZ^MsE@)9Jx>=9HAwvx#p4tPyhaQYKkf>{W>1{-ld@s#$f zD$?X#a|`QsJOa?=)LA|+R+q1jq-Ie#8Ca3_yOnM&vH`F0XA}0K$j0XWp?=SWY3S5_ zq$elNGacPrXX5qrd50u^x+MpdxrI!9`t-Rh=9OTQ)_jeqT{P<6k-5>v7~Ch#?h|w_ z3EJJ1vH={~+uNsz&fJX+_>`pjgK>6ulV|+imA$cHFi2O{y?acIFras1ODMz3O0xJ< zkmT`yhW-$ePr?6$vXH%JA^GOXzd*hvSD=3c$<81wD?bwLIVeUhk3k#IPeF=-r?tgz zgB1VnW6*zs{tl`^4qt*k0Bt}zhwVoooqeIT#lL{Ek-^na7bF||IP`w#8syFbnt{XJ z*>l3}0_mjB!13eX01h@%a^Z=fMAq~!>zI`37O+~{CH=l&^bJOrH@HUIdSf+ z|4jmo*^-A3A3uKd@X-RID>mNWe|LA32uBsp$;lk75b?SKBb+p2m9l;EB#@14GjgJI zlk48&M~^jCjg4Np!iYNH9h_e_8aEgbE0&-X;svgPxd30xZ#jc>eSLFd{r=;f7#50^ z*ic^|S&yD_oDai3%qH%uoVgK!(+>?(YPKqorhMxg>kl43(h|`f5JLamyYL-~FDdzg zfHCkl8!XgA00Sl`9VSJwBALQ9NzfTac-iy)B*a#vE6jO3Gg z(fjUhJa~9r`R;^&i?bDX_n$5S1>+Ic;u*I_-~$i$56OlIeR80DJz&}O`wt&pmjqpo z^bZj)@<|Lu5|SlO7anQx2!jWCEzqKo3AVJg+`G5Fai15GZFwa!+&?izj-x#Z>osJ9 zEUvWZ;bB`g*pl8z+nY8wH-Nv>tN=1=nwmtvgkuMLYil&1atL374%7CAd-pc)-G4Om zI?6z+c(K*+N_=~3Wd(aJA5Xa97ZZs>P^Os1NL!xi>1twbcUudb$m0a{q7{^YWneBfNI0>u zyBiG)w39^q3O*6B z-9w4W(z3(D16XYpQ?$fC^*~U9SCPbW3u18w%ZI$s@4}`MV-+Q;RTL)1G>zZ(U1Xo6 znXiC$!&VnwmwG|+rt2k_C5{{08L>&&Mf3XX)*9eMlvcQ?0T4t+>R?gOT?Pq3iy zN2lw-gSTeqL$kB#ZpZAb_zo|QbI96&Z5I*szeC#hB^)e!!6%_#hU5<|d+wh?r~O=I zJ9rWL$IzRQaPhB0F68S4=oa)ZA^D#cB3p-`IP?kVvrrYXRJH^8aKxcq=wCrU4SBMN zJ1+6bzlc@rA2~Wwh<_zTZ5T*^zxo&P%HK9TH;`nuksJw60;`4AugC;&*15GcJgP(d z&N=}%y9Y80aPoS*e`tRnwL{Ojwa||+8XDR(f9GNC!BDGHPlp(wOkVN@Y9bt;JwCOs zDMfB2zRt_bu`B&V44622u)R&!$26hBSe{#rd*7Yq*u>a^Jv4a(i&-*`vy$eNurQOs z2M-=Uew^EAmdGOn0gA^W$pj~+h;A1z0)<5Emw570<5 zlUxG>`<`Uik>=K9aRlh{dk-Ja;CQ&UigyMgF7W_oE)r_S$Hl5cOr}61w{}t1_UE>@ zH#hIU_29;4-VPbS)AaceVt zN0U#4iQdJJr~oQ+HY6plQm&2l_3a1uKY$fmuUc77gf=%NcdRBLhZ9fGcnk!CFeX^N^&&9e!$)th15#O#aP#Zy zbOj#v)-kt;UOdys1J7(zwDXP5eKY;Npg zF*li%3xmS;_M^wwuSpK`vQ>Q(ssd3V7>>v=a|j0Xvs{knFekwcGdHN5(va!?7OMx; z4bNlkUa&H)Z^_c4;f)o7?tT33<98n7B0>UO$Kr2oMSDM4OLy9e>J%|4Sl8saQPy3)4r2T+8??Sln1CVT-!h{}V z(GZk^bl!zxL}|^b4SE$Ch5i|Y@xsJGe8|5agbtt&L*fSw1Ed`lw!!*(5 zoHZ#&LQHayQ5us;*`TsI%<|RUt+|jGb#;v?j%#5W$m?8GG;WC(C666pnPF9`YjYFi zx4rdta4r;)D^)bkYQe$+>EC&W6MW$JI1`_EOc0X{nuOk)o4zrqT&|C?#A0-s zg_K$6Fgb8v6s(~_CPQA{^V#}^ML*liRBe40^TBl%jY1)KHXL(>Z_Z#?nRSl8GY+0e zB*;kqCr|U-Px78(ojQ8r@sO2eqr0x}r39nLwK~nBgRw@3o@(}tWK&y{6C=2FDJ#~2!}a+$Uc3J7 zn}<)9mJ+cw=VDARUF38O1O<~=O-{+p3YSN3<>HsLtxcaAy3VI=lXEe~icxG@AG$a( zHNJSn!Cz`te%`+y$R-DiT*pm2Grhfih*1y_7`0xu2<{Kf3H7L5`N1dBpk#3b?%ms) zTTu4}m*OjHt~K*v3(O^^V#{=$+EU$pc$9~ZRhOT0@$b>$A-S_&%J9m8JrrGwM`y{r zL|#nsad8zbVmcCIX#x?z|NDomQ!(?gcyepY-6JKw>Wa_IYNgT1`qE?6ipA&rWHszb z;wX>2dxr?VBVKB;y}O5jwYuV3oW+E_dE&c~16k&9F&2jBSQN#c+kPY*Ra(FeM<+vUzm^ri+C4=S=*#n^f09WTC~ z=JV8bGTpj)fv$6|LvxYWBiG0~GuN(Rm?P^`uO}uPPI8X<(jceoy*9hpcV#R{Snn~`xfT{eSjR8* ze>Z26Oz^knvd$}mLkjyn#@v?Y2-qTLU*C=$`v!20WdqQdJ8NMs zq{?F3i)MXlpRC^t$%pvIA^FN_p8r|sZ=hmibSEU+>$gEkNOSs6L4N_s_BsV6p^rny zYgC%o??8%Yn~l7F8JdB<3zC1_Z$Y1fWOJ3DaJ3GBNmo&2iPp-K<*7=Sxg+UZN=qi@2&swsXr^OD|<+$97BN2C!H_Rk;ZQsO7yffGQRX#6o`TZq$xylb|}z*d9+Zac0K;#P0Ukp7Geu zIAd`and#VWEw+<59>-3`!F+%B6-ZE0xBbUd_Yn(K_rCY)y?cN6obx;9+~A;(3u5Ey z080cT(#$$zbfywRu=5uZsTnMA_~~ zqq3&%fNW8tOqS~Fw5n9>o|>8%$2uEN%=!mHYCq%-hC|j+q0nu9sIU^BXc&XO4)i*J z8%54v*KRy&iR8spYIfknNdFmrc56o%1uqLabN#6L(sEHibC~n6*85@a;&S~~?!i!@ z=j`QoM@OrCgMJK;-mzF9St|Ci;NcxXJ)|oJDHKYHpS91uu;BEqI)HgNIej_Ue{LA4 zZ9mvN&(?=lwp4WSOq55#DjP1)b%Cy+Uk(?$Tr<_xiNwU*)KuM`K;Yb2If@P+p7&T` zi&icz%nV)#u25(pU$9}y7D@{k0T|2vrTX2Yqct@ZBbJvUzMgP2TXcz3(nI1WhN6Ro zqAgZyp(K+7*9$$)o()!vjK#X(wmd!Eg<>BuMcj4(nmZD;a&~S3Yn$}|&{L1P-8BUB zhlWGxLx(%&F`5_>>`|yL#LL*hh*iX35>r&dKx0Kj^<>1HC1Rkvxw)f*I;rgRB!4u@ zCPV18I$H7j>le_Em+CeQ4pu1grT0)X`?q^~i>}h_>~qVwxyN1L(dwWLL=E6F={+(@ z0lD5%>2(MsipcS~aohHFB{6h##74s1BH{V2R@lJ+Q+d6+y&Y=?ZFOT=X??kjgR;A? zBL5>ITU&OvuupXZUPY91th_1N*HegcjQ#r^q(&PP%Jm1@YY{1QI0`vtSl-wiKg!NQ2SeT

    |B^=bVk!$#FGc<0j|9-i7FaE2z1fgtFigB_l9%__cfyMe(v zddN>&;r6$-&!=f#lb%n*aIIq~9y&bV*}0{<9l)HQU#i8OG(9`Jj+@HXRHBRy^XfQ! znBc*)XD?1(oSoeO-E=seenQ{0chaY-c4+AIz*$(LKwx8Sb8~v0qVW`tCr|mpg~ZU{ z#mNilz}(zw+%*hA|KUUP>G|$?uB+l{4C8U!--!!Tb7^l(o+azxq3*ORknZZzbkB(E zd0E`a1k-kArq3Hiy=Aui(4nq$F-Kqv-Yq$}IP!riCMy1yidXS^;}M#io}TkYi8f)_ zj~%3a9`;)N4$2^hz}A#KyMLJqt3WFj7)^ljUZswqTPF@SvBMdANzlu%*BEM{NFK^s zpn~5t2hCQohxx4&&dr@6ZteWYP`D*=u(iw67lYj)QbE=hXCy?4xhh5M4HtN1Kq;r| z{j#if(|Zqew_lh}ff4aAFeZ4F){Y$6;vbXsE0_ zj1&{Il))d%jjFD`bZM@4db)16G_><0op^~+BOoe5*4Y$#peTgJXlf`Us%nB*%6&c0LzM~tR+k%^?wp? zJf0X%{c^pQHMCD>xd62aJW~Y-vyIxSLV=qtu3Ri>F3&gHYk_LrPd*e8>U_FmHShF{ zfd6DpN7&iOqt4+N%@mW2lCw*%*6X*?8FidLch%yH!OdhE3r2aYe7wh9WZ{wjQ2?q4 zy1g#--bw7zW^_a8gUTmXO_kq3{s2)<@iO;Q4fd@=o<)R_KZG1Zv@gOSGJ(h!sr-87 z3BLw5dJ*Nv-$$MTAO9huT+-i0{sZzH7~DeJTkyWEoXa!2xJy$c3=si9VzCsqXghf$3iYsJX>23y;u^ugm0$aSa{Xj)CH zU}vi--_P^I#Pzqeu%RjMacK^9A3pr`uMfF2Xv@STL#E{HQ?XRJ1%KaUaw?rx20Y`oH364W(iwvXD)ae3V9B-JP{;|& zn*$Q(!tG7X?TKs&WM`EIotU#S^l@)y_7fkVNAG$SXBw>Y<;xTp`07_f+=j2uo0-bY zW`=jbHQ??HMY4W$g8k5s1v##zB=MS_ol@%dxll_-*SyCcEER*X7{0o8y2^~@bYO~f zzr85fG7`B;8SV6)1bPXcA&OgMl^}FTBRnC0GH>N(&6>6`$h1K zjCtmrmq!l; zl}d5CV$>61g@znYq-MP*Os1JI9yJta9YIGS?(FCY${Oc3J;f7q#XL%SzLH8^i6<_m zy?A%HT)ML$#c*~HLz^l3O*jSjva?#+9cpM5|Io3Lj;V`NeO|9zjhv4YTCr@BGmV+w zh^~i&0`0oG5>sZn_C>GPRCN-qGh(YH3kgUIW*K$7gzdakPXH(@8|y?g6tlA#I2F@` z7O43608r_c>R;q+dT}J1M$yqSl(M9TBZX9nM+qSh?&?U~=~yhA1t9Th=|381x#WUF zgEyLd3Xqswm@WByp3T&897_X7kB$`Z8k=_eQ0Q<_Klx;Y$IlvQ6knnxiV57+ro|gD zZ$?wzLZ|?z#o@1$hirc)J~?T|7odqIi4AI^^8Nl7*oa6s+j$i zaiaf(&zI{s{66oMxAqD0pOFUePJGW1WCT%thVLLxgQq`?sJ_~-As-`Kz*FVzrjTDp zl&iKIEbT{TkY7apH6k1QZ;%G?bc-;RI8k9JpekoUgY%~tApO~B{#;*<5@-Yu{S_^( zi3`jWB58v`^tlPb-xvj}>)P8<`??%{r-4c}p-5+IM`t^sXo@rwr58SQxP5-U%LWF%~R<4I^##nJ#;AY9mv6ciz{5R|&6 zVaa&JSdLFzxi~%b4(git9Xx7Ldtf4Y-T(pjN=h`ivEVm%ln_^V@A1hi)6?(KLmfyh zwuerRXCNOqm0mmqo>IjNYB>&KAE#c7j!gDxZ0O`flEX=%Vt&6&^tZHLMn}bd=fJaR znyZW`9nQxFPtlyq2e%^1j>u~QGA}i;(X<(XE`mejSFX&Z-+fmV8|cPaOg8{aYae$! zoMleNCv~R_*|->5ZrXn0ST9bc=iWPEeg)VyY7d=`XP}MHGzC=Q5L%R>oZ|7q_=Fyk zf2nfcMGcI(ffGC-ev)9_9!O+Z`v4&Z2IG)u2D%A8c)CuvsyC*mS)AvlWCNI9A={VC zszwPWyRLC8pUv=7bd9>%=491X)6*{aqnGhn>TFzOBofQ!@RJ)aJil%<&r{`NpOqJs2N)V2v;CM8 zY+1%r7#+34Q1*HS)2z8RJ4ch4VZTHSB5mra?8?d*3o;o!{-PYJFiemtG(0vxKc8O6 z81N@Nh2eCpdw#wQLMad@G9_cGa_A6c}$&% zVm}9v0HXaie+s#XTt+s5>TXZXSuS}Udye&#@(W#^cp&lQ8!8Ed^T^>NiDYa0S@c6G zcMU`+U>QVP4j+j(AH)Nr7oXRwn26|=rk3uDM-J*3=4Eo07{^$4t zaF_~H%EaIm96%2p@^qz-jhQ1s)u74{#N_9ZxGS$*A^T~EI*8_s*qjjWV8GYYHJ=up zt8?cH`68Tvna%r!yBZqR2d-SnU7DRa3x8=6mSO>~s9T?_tBX^K7OkzsTt=>&m*0Z3NuE8LD2DAo5k+E!@p1Nd_S*}=UGy<2!osv79 z7hXumlBO>`;m`PQ(HH^fwihP{`@LRo3OmHY4>>mA6Hi!Y;;mc< zh*%A%-`tE#dV3(GjzcD7nq^gEsoW8VBB!M1LJ_;8l0}ur8Xvzxx6r8Nrk}jiQXg4| zb!VM^azob1eg@>^j(F|Ll@!j_WD<&gBvgY#jeBa70_Jg#ayGi_rrNj&Fk(t1{xW=$ z$$9|v9NLPaupu?A1e&%71T~G-3nhrwHOgqIrz|5hl-GY6mpw?XSk7mOH8La3Xxy=w zQGT#nMt%KNIQ4zL=W4iI02SYV1L_V2jd#Eos0s3%ml~)OGcxKUCn=cjGW<}(YSxF* zDzR|{8$ux)N-2Ei%wVt;*PPglHE5O?$e@<)i`_EmT6 zONin^#rvz~!q*Vtw0Qq!M7+On`adG7F?9-&PvDo42S^>b`~!$$_AesZ15rK!?Sm|T zz&nWcK1?Cv{I@`MfrBte{8z7~C$Z+uJ1+f+T70JZL-zNkI)0z|3)nLWPoz+i11?rR z4>6hp5Tb6W7BcRnr}6`#9^~l9RR=z@-c*3CGjV_a=`-W;)Es>yp(-Cw#M~3E zSDFn=3GO|#QyX06MbxrXYWl|GGYS8Rlcxv9Q**&UEaI#3p*RHm>DkL*qlGCh9XV>j z_sWG@KqtyAm~`6 z5ci)&1HK$Q6B_lea(6U$csxG#my`AlD1!jp=2$EsIOpzGY@3>rZ{@-yoY$FCFpxE| zU{^cm>+0i~#ez}xO!O$EgTW+dHUH(1)$nB( zi14r5dg8?JXrRUlfXw3I@UJXafC1(kKg~L4WY8+3lVZlRumz|reW_?-jQQ9Ia%F;FB@ ze8-x)I>w4Id*tQfV%OKON0~C={X0qFD)A)@BZFUx@oW4VEo!+UxoG~SJw#N15X{S^ z*U<#XAS*6yEBh3_0scy7{uZKI$f|u)3+~EayBq03R1-CU`~vcSA=2kQgh@8Z51l9p_()__|d0`^ypEeT2i4?DJ4C%dpx4Hj&yW)?+2C9 zGHTpj@5GgvKw#4P|xsnmcq96NGkqP_K~ClF-C9CS2ZuDevK<9tNWE3DMS z>%Xb6QeK41s&E!znV1PJ1OrKa=bMrVjAMn72$kPqVdd39d+6;JTR?(sJUG! zKprX?kW9rYW0ngZI8Id)#~!j;+q!)D1s~T=++J9$oUTH53^fgcolkmCU`Pob?^uw9n*5{wqk+J(F)uL!$7}C0Mu`QO(?!k-doWniOMy0y&S&A;QhyL;eQY0apGvA|LE; zB1^~*f|KWve}eoGvK|~ff`pNuNA4ivww^~`L*7D~5yi?nQTL*=9!1|f(fEzO$lJ8X;ZYp$j=mtXbeeIG)U+Hes8he}rx3f5gu`*z5NBz%HHYO=X@WlGCYo zh~CBXBaRE7HHLzp>`+cLGKSxggdKP~den)Ksl#M3@H{b&FM8%3G$FZ#A#$Q)b{3Tb zu;F%rFLrb!%5>(GxCH>ddTKzBkxIBjoM&;|3Hs->DA=(?l8U)dP*HeDNUZZDKon7R z=wn`Vl$j3ab?BDxr7tlc42!C||`A~A0=sXYnEmj&7I#&Tk< zyF4`kVJ%)S)*1r-sRL=-r;|!_g3@=U@21cCb*9(jc%)I9@IS``J9czIs;T%STzkn`D zm-;91n5qXi8e1e|6S7x!9_(Brgrhkf3TjLQgQ+{EG0c(uc~%K|-(N*}1V1yG1*aL& z3nn9V3q__FY2jVBf)Plr$|c`Ibyi-$=r*@~^@+9ujN zY#v!a-bWNW^=(A{*?)`3{#Wd%_FFlQWRO2V8osJX|o16-(K&GHi7*jq3K_Wo4x`f&R%#cOsr4UrNK*;L)h{@OoFC)nMnv%l`K`tNEc!@v7tTEaVuIKp{!Y zoG833cL+Vgzu?EMh`mqbsX^*1mj~ZvDNt7u5^eACc;1j>(tdy&=21xS)}dU@a^rOAYLbhfw;d8Q~znqY#TgkdcA2`~pb7o`$a?!)amefi93 zv)PU1CdM*_2XR;Q&D)nK;(qFRlSi)T~1H?=w+BL0^DK)$=on80p?_An;{!F zIysRtO35Ktuj;D4zCMbl?9x3jBZTK_*-%!Z2)I1DDZr{oJU;!nOfC}Tu6Dah3b2|1 zNvNcdRU^!pvL&FKvrx(w_(A4|Fo<&7npbI%6p@^4Wsx7ltE{q>fuqe-4n*0UbThYhxE{uX$m#lnG z&%%N`-QxjKmg)>qV|OSzJWX(HDc#enA*7OXRI4Lwu_t{rzre@Rf0ov)<_Lu2!&{Y{ zPuA6S@e&n>MzXXKb(9AWe(pdIT}OPCay*qI_3Mb@?f)E+eZCD*9F_Qe#hHE)zyI&R zOyx-RBPHZEBHgkT`AI}EroV;!5%QmqI&ktCWH%!HayeICHBJ1;%G!Lh{QY%gQ?=q6 zK*P25C}&+=1F#}molRlw@NDPdmLn6nBW*wPGq7L89~0}&W;xcugNF`|kN;uQ&v?(u z5x7)GE(QGUShVHsLrvr3Z@=AC4$wDjBGfL)R&W1MOCtXE+i#m5_$vWADvil511^ug z-Et(CX=?I18BI~GoeTxCGANbvium~RfM-*Cr)3{)Q!OgCrqOs|7UMreH&DvQQtj)Z zkeY_0Xvuo?_F2&rj1<~($Y_+oS1K`6pcrzwJY$k=Hi*4+I-a9a8eppP+Ft#xV@fc_ zjN+wf!f-FpI|(g8$LjrLO{ILN&VQ9WFW_CRYTSknId)9=ZBA+W;jp1!Vlp8YV-=-8 z2-BM$^jWGtPo@;cYmLhJxYJ$T$A+N|xz?yU%9t%-KPOE{OC_|=1coqaUB0N+3<9Uf z(>hD~L%>Z>a>|*0x*aHXMnwY_j6cb>JCPVqiAuo_>sOvCabD_5e7)b(eJl+MX|W{G zQUnZl()Aj8>!6n!Rnxc#EVM23RH!t9l%YrDG)9kQqDJ!t6$}F$CnuBRgQPn3PtNob zo@Fu*-65U9>0qWd7i{fl#I06`A6B_pD3R!_6BDWN!S_UjT}tD#!>b&Q(AQ62x2}{M z1hEg0(8nY_IYkJUd%i0o>{0;#DtcOo`tl5-pquE2(6AkmU28=^VQIR{YAZeQvY6|= z62FuV*s9%u6WzI70?akYHM*=Q@oZ9Cm%D=Gq%{l<44gSbRhxi?H!x(mEnO@31?5n> zvVLaNVst5c&3P?VQk{`(@Us`DX9BUP6jHZ4TE3k)8~MfR#Y^3|E0wP%lhgje3*)IF z3M5J)rTJOTVsjSGV@8+S>-rc~JBR~ggk9)o6hnbV+(Gknxp5l8dR%I3aob_M@P|R~ zeu)hZ&q+J6(4s)S0Lz#vz{qi+^(?kjNAe^S6!pfA8TVW;_$*~ywTQrC)w9bgTeXaa zJ+rEPA%(0S4T`-l#v-##a7pk4d}6e$v1n_P_lyAxIZ>g<)ANVURMCdG@YSX+>iSh) z?-?i$#cZx$b><9H@W?Fh*VPUViZ~#KXr7`RgXGBs-EFh8OX~;#RYneb3n=5MVreb^ zDkDn&f^FtseZGdj71pGG74^ht%8goI&W%#-zC}d*miA#?=C{7Xd*!r>-%Z<-WQUyjgAt6M$_a7t5y;r>JIpi85pQ-$$I}ybm97lcCqK)yFlsE^))6B>{xpgt-nf>^O#bz-~8@ zk@1OOuz@`~@jCQuOOz(L#v4wzENf--x4%C{s4 zkpXZ~UTdsDT~r{L%-3jmoAJ7>is33a+Br2fN%6UXiPUreCMg>7QwWo*#jVUzFGUal zvn;G7khuc4-}Hq4y^|ElOI?P`4Tan_enQ)V0o)Y3^~R2sIiolRGmIrX#EZW2^f6`zJ}PBKQH-(mzneGp6XBB@dvciLGH%1_dRm&*?x>b4Y!*dNj$Qo#xKKQ z)FL(6K~8eRlB6kKE%H?vn^#oplYGVv%Xx^TlzCg)wqBE4uiXeQJ zj#n?!4VMSSE(0A0kBAKd6j58W1`BVswj5>Gfj4^zhnpIH*?igg<9MB^4vYt(@}elCcV zQ`$GTbag$YTm*th9M{G6wOn~d0|2I}P|(095CL>PKj_Ax-qO_C-Mw>losx?`A*z3(e5?c6x`Ocy_*qQ;N^)K8iygqQhLANmJ-x{i6= zy_gVux{*4HX9wGQyN81EwJxoKW1Z=pnb}AIsk1F@>CRSZgw#Q;yKuoj2vRB!X;WQG z%iB#oT^&RsFoElZif4}ZpNSJ_xVfgOsSUp^si|U;=EjqQ{R4@KnY5C|ZHw*c(+6A9 z9{j%*Pfb8_kDm!7$5XxlVLQwo4XlH0#NL{3fdyVyrhQeWs+p!2>`bps;?jJuE$u?L*haBA4aJIQ4YnwqXz--=6J{yEb#{>Oww{tzDt(D8KFb-I zw!oAmtun7PJ9io?1yfR&)NzpGrt!2WLc9C|zbK;enlh~5uX^7#T+$dSNf)D@)`a>< z(Lp<<1Gc9o;QF89#quZLtMY|xX#%J-~NH|M6uu!MNT(kmM9a! zCIW#8rmHnSQMpt~!#Zy_HDQSn!J!_JP`VrUyiL?Z)MDmxQxN{osp@x8avi{n9%^bL zM7{{qML|H;o9;2ZTIi19T##ofFr^C}8eUZpW2pIH)8TBEbk`ytG2#z&O|*|jGL(;9 zD3&PrZCuigG{?8q*3lgq^5rw4w?s5Wh*d=Vxg-=J7)HGYs+6eQ4|M!UETpN+qsJ$>rgoL5} za2@EufR_GU{$OqSgSGmAb&pD}0=B?0)W&ttOx{4SO$nTO@2d(>6||f80A%yQ=1#Q5 zb!1Ns`HmbCEv2$~eqSrg4>3}xszZlcd-!-g%_(3fKg-gF+KvvD&@&q41`6mMIxJ4V z{AWi;2Q#w#XKm%o%=B~vJ4VPtUDwE$1a6j;%*u-@(OB>CxX(Wqpsv`cyZcDXL^4}k zs9BZn5rgD6GH`RGPqJSgMcAX~qhyszJ*jw2>Gx<_sjqPO;d5gY{!xmS zoy~?xia^UG^2UmsBeBU;tdzx1>_PJ4S4^d-G5Z+4xlm*(L5aE0m`%VZ$QT-CaujpY z$6V%mD8KivoWdhQ1ZW#d)?wLdV}&SZfi%i6YamLB1`-uBLAQy?RN%x308w5;%*XSw z$pm{wjc_-qXaq2hFmsbi=qc`lUg2!0e^o4xfxxQmUhgU6ofNf2H0MNoG|VQ35Pa}V z3XNxT1?Wm31-s$z)hs&|jAJ;66;0#2^t(!#^h1Y2z2< zI>`sRY+H+m{|+Ku&kfEgcC-^w+-MQGfe8DKB9q9kAc|3X0jzrmS2M%((ee^<>6IiQw<(aK0Ch#ORGSQPz%F2zt~}HU_T9cL=!a?)LkiWrtI_ z#+Pbost^`JO{ofn4);W(#stq%v@SRNB`s+Li_{W~%(8zzGVgNr5xz!za$=N6Co>T5 z&uAo=kLu5ie7jhhr0b%ghT03SH1%uyyT`+VB|$v9|%x7Y-pLJyxO3&vFbNRCf1*)`uq zfkP)a}ld*B0i!`e7ROx{7eUsLiOP&5cjYr{#CBx;-!p8SfrSbpYLV`oo}PlU1FAwTHG;Ky`g z6Op8B*@_p`VLU$LbkOZQ7dt}-xGA0}Gnvi8u=1svNtI+l#m4~t(P#F(cgrU^f6i7P z==}&-!8AtwB2j>_9^nervB^Gx-f@^XjAxK)?j0=|g2D5{b`?KOZV8}3V8;K$A`Qh) z0|UiOJg=_GO`V8enmv6|+M#*$W7e68IDo?F6Z;1$gvJUP{0TyX%tUcwBBLu-j#^SN zr#yN_q&Ahbt0v>&b6l@Us-@>>D6a=$ILC?Hq{2nee)p$Rb8`!nN8!n1m$LfV@kIQb zEC#|cczThMNP+!TOgF_kW^ziYQ3g~{HT?Ax4Q`LZ+=r8KB~I}aP&FZQFs~D20>iu% z3QF@wF{E$pD`qJbaD#f5oy#bdPTHn|)$oE4s_RUhTI#cLRg4A(leKB%>C@RnH(ER@ zCs~51k};kd6(*Um+~k;I>RmmBpg)~HhW%~XL1ruTk#AYHE5GM|8te`kL_o zLq2+z%K5Z0%dFPUrRweEEvFKbbMroNgC+pN3Z89k?x4oHR!g&95*mkpq3ksGoh3Pt zSVUnenwK36bTxIUwVDg(B2hv4eq0mWZr3j1RsX<%B9Z(-TqR8;-$5?)7fwyiu=TrD`}|}G^Qp7iH+}1qS^7!7r`w6rzVNdnf3M*)_r2#KuUy^eeN zE%FcruyShim?CG_wYD9}nP%NjE9 zEu76?g0kbmz$n3Y!^><2`xIyNE6BGIVc!3VXs>J4CK3KA&i%h2(jS-WlkDKV;*gFa z;%WTI1oCx69J}^_{T<{1@|VbJFjDcHJ;(_1ONjK$9pL3@GCIa&L>BDjU8?d zqDpvve`^~barsV1=QH%zKF`CGIiIz)_Yx|)+|Hb!v%S}&PpH#Z!=VnN+p*CG=#R6POoWX?C`(VMBz~z*;iFh`~4@u^+a-x7!l$>!)+ajOo;#w zW^?R~8nj}TJ1(FSMQ-Tb6aC5YUUFQ~u_-{^!sIEDrlS!rtLK#s4C6eE5%ZDhl_|ut zrkXr^*`>z4Cr>9Sxry%`8kr=Czlci6TvY&>+)wn?Ym&Tt-zm(Gk+J5c z)}yUlGv%oScCb|{5j+~jZ&u`lWUm%@WBMjI?PP*YJEl**hl({!-?r|qV}W4IW0NF= z=>Yy=XGXc$qRvhF3fs%k*JbLtkaUom`^r1m5a&i)cxY+xHD+_K&BjXEKkjBVDGJ0Y31Prpl9~&g z;)?OpD3ph;K_C;)4_cdXZ$eZTl{~|C8r3Ygb@Z$vglcl~(p+zUNJiNxan$s(ZIo*d z3m_-Olo1`|EL^OZrkk7M7pm?kXQy1J^wAQK;JR2^6pgDvLGDxNj|fl2!AQ?+LzLV36NnF)MDoZlBdSCH=SV%+`2wPR&r`_P zk^c=*jQl=uRB=pMx{ke`+Bb#Zw{b0u;Aj}{ zEW znV3zdQPPITT*Uvm>>8;gIA*9FPn8v^H4)|wXOjb!BG)PK3gTyGj`H~g)e!Ly2>8KK z8`$7?V&)Tm8MT7kFLl{T*e&*XYWDKw0r_M`$FxHjDj-^43_ZQQv(4~YvL;@w^q|k1 zK0?KD;w3P#=`%`1Blr|$V-|(K%efK-&-E$?q0)LfJ%df#aCT@{VFFq0moeXeaW=glW;TQqi&#soA;osR3>sWlXT~!XZ1u z0b_CinBQZ^qz6{*U{OyIXhv;wevn#5M(sc{i!lX5Rt88LC58J{U7bwMLU-0}C2~Mv zQL-$fV=-SmJEph}$9&=FYOQpAtjC5INf^*^rSOt3!2T;rbQ0`34b}7wCm*n3D}e7D zl)E!X5g#tQeE(VE%CEiTI;ku|<5n#^=2j^vKPNs)cf#DS66-y~Pa8Sq^QJWfJ-17) zHtMQUw(jX_85WlH{5lv|dBf}gsy?ngd>MOS>UCAwV+ zR8j|M?TqsEt2#SfJ)Pa0RjysM1!kvKQjW5-fr-kC=~U80dX?n^6(vvpm_TSZi2;Rd zDWgoi*Kw!tsg@5y7x;&@VH-TxhKjuv-{Ac>5yeXVb40aTegpYG5b5TBiO4tcCUO$_ z8RXl@Um@FA2mTRq0g|M>aZ(z(z+0|Kfj$H&P+Qb!2jOr)9*M9kztcYsegshX+$uLEGT6K5c}g4u^%i z>Aq5_tLt^r&UiQ+qJcdY8K@plAJ4Hww%$wY8Az#A9!xBi@TqhExTz|WGfYFCHtlSI z`}3O_8+zpS0?C-zTv%Nsys7az{9O!xH72vDFHOnQXHh32k)xV_xTHWdd3{xXQ@m#V ztN6NxM@KDM6ZGuyq%DF@yN}`qqnR04^dK)2(|2s3g#4P zO9zzufL-M9726E_0OF^$4GKXT3O^K64yc#bH6q z(1@RHiU1e=TA2(0RmDrDVQM<<{mLnLbB-y#+J82Yk(Nh0UTU{h?Z{=A9eRfY8t5a; z$xrq#Wx^C#uW7$j@w_=)BANESb6Ro1=CqbybP&s;@Yd`|tA!<*9(eDx5T7 zC=J+ad@Q+M6hFw_X9EGXVYLa5nMNGOfR|cT@;iyh3wX~!iwWcOzu?(Ko+g4qF5g7n zLZA_?<#N?(M{~RsdNL^6!NFusgOTM%w~xEc_0_$|qtG3r3E=8a=6M#T1%pweYXQ8W z;FPKoaqVhjMS`qW(Cn0r;%{&^GQ~QoW{RgGvP;Ke5plT+!xYt_8BJiLqR?0}O=ze% z|6yn;!ULkwO;5AfdOTA#&CdNwP_SG#XPU1FDU~nU_ZYQ_t`#SPHookrENS zAIYo+GsXu_BfPIX*D;HQUvrUTd!BoevBy`YhE}=hL~ImQVqx2TBVhEO0+f; zSH5|sA%RUfS|&?bOV{eZ8{*!$>}r z5@+PP*41`(5pmhA?}RX*G@q_trBA!1S7;kReY6n`PPz&H;r;lB_Za_h2)z9oBH!@; zUB=!PuvWRN@(X{6Xiq-Hs3wtriKtfA9`IHAcpmwEWC_^`wss<4L8Oz%5cxbBtGE|< zwHv6O&qM3$>Df%p67Ik=RK3+5VI0;!Ez6H~N;1YVUy#|10>K1EC<$RInd$p*)Sq2o z$mmL{Df17cZ)P{J8~g))28u|BQ*6?1JP zL7dEJQd;#*H~g$B1%m7$1jBfviKJJtz4U4Jr_<#z_Q#^Wi3B%txf`cyKzH1O-@a5b zx%Hrc^tb8W6Q@P$nL8I5^V16e<{9DA)+E|aM2qG`F1H8G-?&l4U;e_bH&iRZ7;L=>`Tmo-G~-&*fJIG8$j7tuSDm zHk^d>!qD(AMoc$7z2uc%|LkeiRiiGNbaIQYxslNkG;MxeG@^M110PBxtCHuc&)U;LIkehmLyEYRWliBl86}6+9zU(muJ=prJG?EDBO|Q7DGsEm^G3 zRUbXt(MHY9dc3@2_Tj^aTf5skb5!RK(xn0O&5Cw*b{y^GcAz-&qm<*+-iq~D0t~T& zJNc?m!o|0d^nR*udr%O+h_h0?ebtx#79!oS1}svIsI$n=B8s1X0xbG(kW0vKApaRr z9lt^3Dsm553kE5E{yg%J5#`fA&RN~OdEB+mKaauof5Ls>&Ze;;I@+2fMa-otfqwEz9*|Y{)Bg9r8C|6L^=l%lZayNbG-N)PHZmwXf9Lxm7R%sHzWEP*qp2UAuOj#roEbTPvt4G#o(D@!aXZ_+M5~Rd+;HUA^j1RX1+j`Fm4U za8B2*UKQtb=jM%@l%y3^#T?UG2XsG9RlV_$s)BXm&UD?o*LLUTO;{&GRXGbvB)pQU zYFMhqRbZGZaZT5*@~dv$a=0epjD8i*JrrHMUbC)4SJ8-YOZamMM|oqM@!w%}8iwMEQ7ZMyUYoD*kqXsVmgREsw2>q2QUx43v~WtT^!6R4)!=g?Gla=GGlCIK|n zV)E9ldvsZ*sUDI}p6^9d-7DO?XJ{&%QlhCuIdQ|bynx%vgPzKiF)HIqYU>^rnPI8w zSO-HCx}t;qlq#e>i{6OJ$cKD`GV(aFRfGlCZ2D3?iV7pZQCU7mWwDR)mx%@4|Ii-( zUGPqP)pw9TL;ec+TcjGyQ+?-6h~l2)W8H@wLb{OUSkMvPUqo`qFCwy`6&Ljp^0&xF zaB?@Iy_N$=7P*0J05AKHOUQ2_F0fL2EUOmDFCl+|Y{XtZhy?gh@H@`wvO3`}aQ{S|+(Z z{q$r1|1Tuh{m+qH_wRn5iX#RZBbnZ zs&3y_q;Q>!yXp{L_io*G2rs@t1v0$W?Ynn3)!w;NxOe{}abEkm`zx5OspQ?;x7RcZ z+^@gidgo55*RWr-G0fJppMHAh21x-hTOVG(c5U$%=yvDc1H)`FOy8)veS4YP+IsWm zr+4o3CvV*ieDu+^tJiPc_~1s1p{L+$9BxbO79hb>F5dc3uiGoxtq(pfvs)j9uU?IS zHf^miRFBv#&VTLNU9nrY(1yMjyLI*I)v=p5TaR|ZP(5U~SPrf&E*f_0Za&Wxl{<@D z_gQx9F^0;+9()c%wajkaN2e{}m0ihh-MV}CL&I(@Q&eSk3+dp zf#|D5c+jroa9b1T^-Pu8S@Mz^f(vXt0LS$V z9M>)0KR`Z06k{rGs}9Umof730y?|^-_8{_8HY17|P~9iR4V*$0I}k#q5$US`3-X7^ zze8%l*_V(mz*lTES&G+}OSQANTcr<{QW{mV8zcLyq0L<&a#BH8n?2o5X%O%$UBAy|Vh| z&6~F#Kvh`|FSggs4K!b^S<5uMdF!6TO<_5?-P_l2j0X>H-Q}MaynY=P=*Yi&-3f8VIf)T)3_WmQjtG1Hoa<5?> z->x99#CSco#p!fCG^&0ALU~~w&TAFqRr0~T&+%3QUOZY~#CN%0`|v~Gm3zIP=dHL} z@m5CFc|>+q?z(yN;|~o#_Icjw+A?qT7}d3c9eYGXp?!UZwvr{Xg6c|)e{kdWhtOkR zeMm^*B6^Ixl4d3^>2~8ub%-&!hOyEO)ABfdRi?U(W7wg^6zOkVs#y0c2`uNRFJI6W z1r8~uO`IKO>a!FUj@)f4I5D^`@qAH zs(Il3_upTtRO>P`_K=l=zxq7g^-Wq=(c0n0{0|#LVSNGF^-ZqiAvyLE-$h% z*RM0&9gghp$$O!X(52y}$5^ubGVx^|owb7ax_;duzE;v?BEB|rJ7T81AUZW2KF4}B zewHhHe)A)a>~Y%b`w?X56w4eKrqg2tSrJcbK{`jtL`d&!ctnUPe0dke2Mr^pKlYFq z!jbe=ejBJrd>%VlaW=t;$;To8tGKY=M1CKU?*DHP#j5=|qJ0dWL7I>O;>C4-nN7SU{xDYyT|8@E${y)2g_M-$E2Ov7Pnfhmlca9{C02 zTZq<{jg{z!_b82uYHt>f>T6m;uJOqYDfl;dbMM}@MbqY^kFJ07qmS4>(FC+@q)avO z6>BOnz^`wt`be+6;PG{CLSuuF?m8;tgO5J>83wChFJF1eYBcZTPkO_g`Ai;JS17?!A0oPlk4eM5Em@FD4T0qmQ273>Zr> zzJC27C06Fp)?U53f)eYa@v|W7;^I*pHc)7hf+a0c?&C6rMld|;)(Sdo?D}<4Xf(H? z(T8-HL!s5Zwz&8iBJ45xtW1Of+zZBu@7{Tb*Mn=1b73pVGZ-szVR}(}lx6EKzM!j* zQ(>6&P+{UVWPgeZGtDb^-n=;>uI)b5*-9!51_e#AOr5E{4({4^^QK|i?w{7yEWjxW zu%W|74ISqAjAEjHR2xbrYBAwwFFfx8W8?U1luu5;?MfZ+EHg zrO#4sJRlAvGL5C$Vbj!3Y}#X_Te%%gpwps;PBUy8NkNa(ZmjwMC`Wt5rIo3)6}%g4 z8vfj;p4RWSsd!6kDxn!J4Uc+}^@}y>3&^+Up2XwC6NgK)4VMO3ib+#I)aQw}=Qo?2 zG~IuZX*rlOs5G_x9PRdqOcR%;CZDC-9`b3T)A;@|vaL+0@$pKUZJAM9L9(GUm)SMq zeevToz^{41?FpoW{2uZ*$Tsl$$B-FB`2C-d*TL&ENU4n7Yr*Ia#6o@v`3}+uK8s&F zgs2|Dk0Om#!p`dt$uxs#y1@-k@kKa{<$rzgGh7QE`~SdVQ8fs}z{4%L+y;{*V!Kx_p*I zyLHQuXe$Y^iKIh_X_j%S&yi@iZaE~{N;YhAB^$;-6^Z8j=w%Y^gAd9i+85Gcn)sIW z=_lN)-42PS1^s0@l}WV6h_Hl1go#9pvMB6mAfmQFfeiRF4Y-Q^rk^3uRuW;PnG(H4 z2W}!%(L(}F{Mn;^4uQ6k2uma!BFqqI^b><70!{qcqkiKKfwqDO%O@Qo%n)b_o-nz$ zOhoZ#L&&*F9NNQ%hS)b?}HD@1lmd}EI|ILp~4J-<}hew z0e!!lXM^xIH_RSsK*>vJQ@k(8vR?f8l}p*t>uC#v1AII3?U z!kF90A0dj%mES_KRPqxm4p%X_{|FJcUqV!q`oALkz#YZgehv8@MDez7f;m5dOd`LC zs1DUDV9p6dbpvl9+FPX)8AiT_ypQ|~1{+fr9eo z@>gH*(VEq5ZEkj;Ce6&<+e;6UR?sEen%!OAA$@qXm#coxZ5A2@ASg*U)Yi(^OsM;-wH=E+R|Rrqe}<`bH#j8tFX*TMf&BbFTkDcy!c4(_x#6e^RT!3hPqLPo(mi)=#Isg-1(4 z=%jqr(NO_-b-U<-t?G`j$Bj7&znJp}m~E;ejumqwk3KH&3m6+BZAr0NZFOs9JTC%lR>8Xg*;8-dk$&U=Xp zTkeH^89)_reif&xd~tA)!T~esQ(nyWv5}JlXNI6>1MNJ2{<;o}*oRy053bmy%M&QaFaYK|dLF zm|VU7A1CsQYJ6wV%+=OA)avQ$YjgGVm2^uhb<~(>prKRhUYI=M6`f$c7a6->V(m2aj}BmvLOrTfwF?QYUTn>yhw0v>n?^D^Us@-s1wYwi)LA?8L^)o6o`6dTRg zZ$ocAXSKO&x?5XF6JiKZ{6{a1*(j&+Xlihi$=4%~I+dzlr+mF=lX_6!J}v6`nMR}A ztCMKnuIrhkp22VgQb_r*;Tz)#XKw^ijftr|0W`T^q(RXV6}YEFCzyK z;rTyAP9OoqLM|c7tN2yqV?^;0@-xQ~)j{}6MEhqcKH_~uy5*O^@*hLykY7Rm1W_>q z?eqGCshhpI+5iA43_x+sLmXevPS#8zc|r9e6M_G3tfPpcK&GdMkJeEZ!TAjQ4*0c~ z7zhnIY^Zmd1yD)A__eFmjziH%1q#u_`6L)n1ucVde4>rB&$8oo+Bx6S`UXJW->MA@ z!D>!VNi09*AN$e<6j9lShWM(l59*6Qcw1A$^ViwPwW+D;4q&bD)mkdw*91FTIw?=4 z9St~^6?K!lxS-0}ORJv%x4lE8ACurvBzP6mPc*r0zeUJ5!Gw*9T?SXq0u$Lv_pp?568gch?mxsZ0)gdG@BQIv5=?j0pen^NsjCcJ2pzzwnVCe zf0T_M3DE9gw!>6A-55Sp5~R=x)kF%6>O^98db;isNzX9k@(6<>Bu3tRvm|Z7gH&3zeWJ0c+?L1_si}#q-&sz4i*TkQj`RY` z95};q0LDbZ_Y?0NAD`^?la??XX>Dq0nMjs;$Ov@q5xk(PXM`;}WXT|*j#P;nSDaRT zy#uEclnNR=Mb>VFf_Y5}ilRcJIWM_?Tr?#LE9SJ{G1_+DrBD zbEBNM$=I9f8{^kXSwIDlCh{uah)%4fgs!gjSFUK&_PLpX6Iy-32dUGwaRVW4Y$&GG z54sUBXE9#)C|geGxa8Uj5?@SBB`*yPa=PJ2b4xo}0e*tfR1B>1=u!OG_TEaf^F!q- zs+18T7nqx?XWM11nw_K@5tI4^rFzW;Mq{#JB1=^@Gc$9^89z8($Dn2&SgizCJ&8*c z)Mf0>%*@QrHmnjU$c-Qmwb6~0sd0|K)XD8V@G!UcH-JRd$`U^QTSR_R<@DBqdz+CL zk>xsBeY_Vh7e+24*AZdlZREco;^P$K`cueqJ;1GCMml%G+J%_(IoJ0Y&8BR#MABRj%}MA5)bpKBeq! zyHJwNqbQmkAhEK`Kp9FyOS`F%RSSNe^;0AOxKbvW-%tKMN7ws+pX>zQE7{lI%*Ozu zP&?4t)?;u}$+4=|zEMHN?LELRAL~N}f^MWhAlbDjaD2F*M24h7Wc6uFS9<8M>dER; z6KJrpuDO{A#V%!zJ^FM*Jr0@H_B0!DKlX7QX=jC!yS0brJ5iML`F(B%VM1qJ&!w=Z zNpYd0%kSU5PG2%D^bghf^J=lKzP-JLytQJftHCYwNlG z*7i6h*I8+v-$FB^dPl~rToxcO@ReD}({wc((XimRbqd5N&e7NR+|vwFB7!vfKolL7 z4qONxemc}tlJI(|k)lguVGypn2ZhE%NTi7-AfQ0umV~C~bDV}5Tq*<=_^aJPuguIe zP>fSSm*^yY1a$^VMV*WD;1f`3Ec$_Q*be|kkj_ihZo*uXM0VD1rzcyRw{WjLq=R_^ zJ{4WzB0~}OKahh(KvnXvR8?BaHs0tS=|P&VZ&11?uksER&tJGeXRHs(gLu8@`;MVzNAr2Q z^6ae_*O~)xsahjVHlR{(^9t~HZGv)~RB@3&aL`X6woc8do?OL5R=R^_ZDsQ~x%YRF zI-oJj`89j!T)B$KkVKNS#dJe0H&oY6->0gX7TBUYR%>|69mP^tl6hHGgQlCJd3v?V zE6{i+D9*t+Ds+~Zm+EQ^1J~S~GKkH(OlmhD@2+JWG7k;8{yG|YDQn*DrS>6&8(}$b zlrvVr=+_MQweKO8f1A%#r{NEf<@gKb7b_nO=r^?wH-XdAecwX5k@pbkyx%~67ZHxX z3Vy4Gjp}|WN9+Mo18(m^ei#WO+6&=#kiSN@gWvL{YG1(N@xXh^>%2;+XjZP zVJt-$*c9BnYX!Ub?2XE-(mvLs)lw*m_=LSGXuv0`lh`?))$rO&9;3Ob>&W!z?o!<_ z(m!zYnGe_20vDY<8GX7qP7`HaN;^43V%l0Zs#M!Qjj5K!Tz(=uqnzKD23E zqpU-$`V0yf-Z{zwviUCVOb$*df0?$Kb$4WfUJKNU0Lb?K^n&doO!n( zy1iXll@T*+X>Eq6tg3p#TFD9sg=1vF`G+`234QJ;+W<(904M{rmc>;=Wk@s@h?8@s zInWB!Wb#4W9wBK|ra9Iix~^0c(w_nWZIga(gri%2T1OQI7okoep$8GItFPB@&HeCF6N^6p#`r0E1!L z$`S(h^rkPP!l7bwae%-WDCZHDkbcMENcb`UH6HNKox-Ig0FgHNTjdE2vYbZLI2}O7)x-M~eCU{~Z5eTHosx@VL0fRAGosW<*XfEGi>v96} zL=wn9;U$Mm$K%SaWM+hI93H00;y@*6z2a5pz-+e=IPFF0*U34smCW)`c}5P5;tk0g zPXxOj@T(?C*bVf14PeV_5i!kyd$q=+5Q&0bKpr*Nh`ONm+{_#>J!q=kadazc3n}#! z=&hTQ&*h66V=N)56g4m|&0Xe#1nX)}hkVX9dCS~F#yl?cY%ZH)lr2?)kE&kba@B1c z92}CqU+%N8V5%;1F?1P;=CeFn=?|2WWCqF&r^;k=)6=T6EoEO<#5JYUPd$S&z(UA) z4s*wtSEeUFiI>JS9n9U~;_P6oRC?M8UQ4CZE3_QCOvz?@} zyl8-I0t-y5b3-H3kQ>efCnsNdWy~UGUb2+XqlB7g0kueU^O?2tHEqWUU7j?Z*Ru`1 zxxCj|r3$Kkr1WQg;>vx$a^UvQA=>j>^=wriLiKfqkVWJ!vKf5tL`D(C!KvPZYUpeP zo7)g^VE+tJKCkLM^dS?-|A2f4`5Q$0#co5i&sPWXBgjd_kF2K*ZBXE2N{ypGV3zbz zWgZ$(Mms;TPYJpx6O9yI)ZpaUe8bnj^{z0S4K;eJE;$G1LY}!z}o2;`lyy@RhqVD zXpr`5sqm}*;(r>i^kEq$ffq%Ib(jKZ6tGbpQ1m60YthtWBP~J%7#5sfgcJ2WxH|Qw zK9iK`s(qI(C6gD)vJIVg!i_WsBbh=>!Sx#c^aLukxbw>bz?$kasDuhhr&Cg5MA<1N zOderou0rC~PwJV5EOU#0_TsYEYf1aZOe80hxFY9Hv(b-pp=4Yovg{sa;L*TNN$LFD zlRSyNs9WPeE_%pGF9ll7J&BHz!bxxLqj_1j=kn#i<;zaU0SI{oJtuI=3qtGC$ms%e zg6}HBcP~Qr0;6FCizX6zJa%LvrJ=<@V1GS1qCz7btIue5r902iH zAvIDf*&=2V-*S5Hv^Jh~kb;L2&)}Qjrwjh&gB39c`CXz`xY_KhYTwjU5>0;4$DVMe zn;uCdlVQI`u7^Hy6NJ##!3vNmTQW*Tb=B0=3)D<4syKlVVNr0Kosh4ktRfhAHdD?5qy9&L3>1w-zytCM}hK?%;SVpwc2==%TIdk^R~ zv+T~3APMG7iU|aW%qX%e2PIOBV1R6o$K!Q(l_DjQA_#Y=E{Ulmk)l*Wu|Uz=1&Yz3 z-L}W=-3k{(R(De}X6 zUwrR>|M%Yay~m>}F6`+cn#dR1MEu!KB(tZdXTU9?=0O%2C34Bzy4yM~M0w-PeWlma z`DB$+*>^c}TWP<_9|%gxjPYwK$=1r4<&v~^wGKi8p8W;zt3ckF`*Wa!XDdM~=m8Q3 zxdnaz{3MWfLQ3G=SAdK|SOGEc$Djt@?E&8l-UD9(e+Gn$WlZvI5Cwk)Wc--u=2ak? z`QL$Wf(*tW8$dfa4ZZ_>0@#>;hpVtw3u6s`Qg5`}-{i-&JLF zbf_(lid1BsIMLmCx}&GZd{C@{X&O$P>g=Luy=>KD!ez`z+|}7}s?2psfx z9zWUB+dnW+Rk0>*dMeA4T4qNpm7mPZlc;fjr@>@xY;3GNvbM&o2`p7c7L#=)rmts_ zLSi1nWL`ez=lVc@4`&1GS035eU^eF&ueLwwe7sW1T#3AbkKsTA&@T`D}{k?zi{VBVPMAvrjOxq(@8bCVpMyOAoYqR50(t~)4cQX#qy}X( zjE`j%KmAEn*hOJ4gC97TMwG+^Y38R>iJyFvvgY2w-t7r;$6oK$9Cm=YZk|Xbe#$_x z%f0UYZSF9oMD;Rt24cJEscfS8(^C!3{-J^GD_161<(t?N(sX+(mxm?_TJnh>`kGVu z#5Y(Ymj<`K&HS1kj||V2)#D%&RlH?ChuEs+5T}{xoQXnX8*5iC%f97Dg6cj7V96l0NlH8`eHo1i!;R$@~ zu}tAxZ@ndh=VrDi^jER+QccYbv6XvC2Uk#Lbu!f)*RAm%#$^~ zEpezh%rVngupBaNZet4z$-(yXgfijpr>6&9L&F@QGDDG;IYap?b{$>F$@1fTa&vKb zRrAwCotlQGfs49?JIjob2uH>Y!Lf{>DZRI~(Zg>Xst4`jaR7`k0|S zS*s%^K>)@^#3nzjLCqDhjZKj;%QC;F%m*j$$W&oNQ2W^9Sr7J29JN5HRxe*ji&$pG*IAF!&0IkqQhwH9)z z*mu~LKk9kclE(Jtb;d#PXOX_Yzh9(1vnLO=x3^bTY;TLlNk1Z2&r;G; zn!QWrSVZn$?>upeMBwyP8%vba-k9o3hM3Gvr}mbkhBIA1+0pG9LNm3sp%ocef=1=+ zXFam;CRQ)UEaNr0PIUJVF_XbW+a^b(Vd4!?#^a$7CnklC(+v6tWTZl~Wqq@McmwwU z(drq)eu~LX=G1e|$2xmiB;xuT)6GVRoI+bTpKr;bRGCc4qGy{4fqwc}cmLqj8;(!U zG@59jl-wj!#NCoi?ptpqGwj0Lf%BuC$9r9aECunYnP&4r!7)s>M?XiwbjSR>ZWwM2-X z;N85{hJf&RCOp!nmA4=gCcRM@nUI$x9;RmBdP`E^Gc#|YaFJMQw-l!1Ne9hnkl`Bh zKAAv$R*^7Q^4422J4F_&t&&F3%1ZCmr{B17=S~hoFPK7acF@(=H;7r>t}dgro~4>l z-4wotxl^TeAAa~@PBClBeddiB*XhpFJ+8O=_|%lr5~gRm2eBvOPidudcxQ!~ny33n zZ}s#o^gx{b{oO;ZKFUo=a72^`GKmg{@N#u^be!&6=sVGIx~uc}z)=6`K_(iaU#Ch{ zN?Vz7^+ByY8sjp3ba!`0hb5QGs&hFk`YtHPf zthc(EN7T3=Lma7@vMh)G8Uu?&Xripo8SvT=1-G%4vzzQ=Wr9qJBR-T*x}p#cMiXw-(_yizXY}L?rAWV z;^2SHzdsAU0=@zM3KZxuQX(py{GxtK=I2OD!FV#Ey)}ZN??zh-pjzR zf%+nBK5c;LF;n;GNlCNvIw9RRuJv;N5!gs*p1n-0ODUyZgrq2zi_s*5b*;PO#EA}k z$ho=Na>~s%n`tAepmH1KizTsB$?oWx%Q^E z_IBx&c(}7O9$7P)(z=$rcdw2v5PuF#PEg@AGku?Aoa)eA`|#jkJHbAQHZZ}Vcs`U* zqrB%b?+-KTjS4e;ot!%MjF%Q#8lCp`#zr(1+GwA}(^y${;{1Y)ew!TX@15@HQl;7J zT)S5Os7R@N8D6Itk}(sXSY!a)yOW;Y?(Qy5Wl+vxx~Y9=aDeln_{@wwJ3n7|Rc?El zl`7{h$hbGppryC3&ov-{lId1+D@PcZ<)Nw?oUSmj)UYfpOkBLQ$Y{4#huz-P#3Pa! z5!-C-?L$X72sP&Hj4720>JUWU8RE7`CM)P{YH201LRf-(ZkuTza&ri|Vh4Vs96+wZ zdgqQdu5I_Dpel|a=PC%YwGIyt$#0J;c;yM}tc!~bW|Pru*TXV_@I(o=BQh}kH?bZu&oCp|bs!fS}`n<~hH%!;t396J=tFg@7a-RBzI9Ox%m zhGtj&kxZ&qj^>bWqkCRwF2mETpyk>?#8FZhiA$E7D+WNiZGlzz2?>3=r>B3t2Xg@_ zpY9(XqNMB~Rjky=Vq`4Nvmrb{@ZnTH^R4lcmxN2V)Q&1@iF0lAb)V+L(11aX$Vu_N z_H}h76wW@n(D-~KvE%EhuS}U;Z0hTC=5TsbXi>2dPR$lzSg-{R2h`uVPyM_*=w$t2 ztJ2{zPVlFJXz@P;{}~wI`%W+h+%gCbGe-Wqd?aAkonyH2voxP9bgoE4n)B3 zf?PQNDEM~p2KXG<0kT%oH^6@drEtC-ya0N@cY^ak)`+_fWc9VFX+}Wi<%;CJJ~ar5 z53Kq(4PtxyZ5g+8+t2Q&rXeOp*xR#> zjjhUuoXuz1-fSjFq+7Bc@!f@hUmNy%3a?B|f!dk;&DB*yt6X&(ARA>FLwQ zkDXwtyQfN~ITsgMc=IyzZ``@N#OfW>r%xU~VX(M{q+6yw+D_AWxs0WVFO6Kjd0UDO z^mLr8sdKu9&Lrk$;ePeW_jozcG^bj9`0PblwRma3)zejHwmZd@(C&=vIgg^Ke%UL_ z4Zn8oA`2BS4cg5{i@gE9$LnZsZ*6R!Wyi3wR&;^6-ZR)MD-*xl*kE-uw}$DOt?X8A zC2e^Q*> zc_I3o3P_gWl^Sig&(5WukdZ;D6WjP7S}D@)pZe_k^c*Po%o)Z~@{#6IuSS$v8IeoS z4G*qLNcQ@UB(6Rr^sGv$g0qjx*=@(e`&h{nKvE*FfxJt%a|s+IIC3 zOc<2k2i*+gD6Z`3Vc>KxTek*!A@Ctp{|q(D$|1;p7i${zvw3!QXplv1sZvooJq@vL z4GgBb+gyG@L9&t<>hprIdCRYe`9g9P@5fN-?D(|sO%8Y}>r4_|cq9{5G@ zRUmN`d0(d#uC@VL+f(wU-w7@PnG^X2co&Gi{|OKUzXZMl{txgsAOjvR0(!U_I-F*K z45e^sRqkX4gEeK)GOge3E@Y$}oAMdECK=7?*~#pA!@XG>aUnAtagV^gN2PAct|rGXnAFbGis8tu zx!y%CW{@rEtgV7Z+IoNm7Mh^lp!wz)(nnYgD&lYPUStH}`nH@(rg9Fa*AW0xJd;o! zzLV<|Q7rkB+1E(w&UJMUu=7j;bOca{(e=rm^0v0nsMn@@2Tl{hOlO+h4at(u%=Su% zGd*u@Z9_(X%*?8<fm)*Z(c}UGN`47X7;#$k?{yK*lMb12T7zyw@S`?fo#=1u}l( zD?r9j{39r#Z_7C5=RgJV^_&r)VMeG%Y;2$uoL2W_*Gcu3iW}Y=CnP(ZblJcg?~}|2NS>^l4fM2I+W@ z(Sjn1$7lhfc$^j@5!LSwXdxPXf)-${bjH8@|Fi&29HIs8w)%UY7j|~EzxRoO?=#?y zeP(EB`DatZKT9+GznL3kUa}l`q5A(aZfI{;ZSp`fI2>#^tQi^`)rJGjK$XY1LG5B+ zGK8I$Mm8Lh3}LuIZFwXa!Vm#l4oiloHhHY!*lx6~O)I5IhO5TlMhUbjBwnLrNeVNQSWLnjPf`)NE62F8ycFLWQ0zJc;O7$$#go+O|prVr(}yhS()W@+HB^gmKGVJ zlPXsxF~c9UyoV1%o4uVTliA$R zV3IG?!IJs9a5!9?NA9J2-PPS`?zY*CIr}4hFyA?{*Mfp@c)GhI7>o?|b$8qCwdt`K zJtfPdV&w>dG@xq+ZWu6^luFI^~GW}WidY5m=ngc%q9{t0snL9&CPI0 z9{b(h35NG}A}*Fh-L5(kjfTUa(7~{p=|pM*fac}~DrD$B_~3(F4zl;*PAIw?ibtc{ zkyxzy2-m--4x)|5nMsf%) z`qqRDjpx1oGau78G*FRxI;p2m4~Jv1932;u*D^H~4(&$bp=e!*fK5CSWCYF?8B>&K z$x1XPwpkJ{uPv{+y;)sh<}`Wrj+Bmb_ z!qA$w=Jun_N7YeZfBp3g{X6eG3`e8U+}2=lZ)Yzak5{)>Cu$xBgC9i>?oc8@JZ8Iv znF89RzEn@s?d zAg^83&$xH*ot>SWyl6CDZw`h{hW1FLT*m`GQXh}E1|tWB$7X77E=&LL!(i}8377G3f6!8PwrVx$#pllLNa=`u&tZ#1 zg5hv^>4zVN8f>kp!AeXeAk9lxN=|HVr|a%g+`3~k@3hpkQ}jqU>}YDRr3NZpPrMmR z;LQ=HPj4F-2!+0K`(DJnXC|a&Xs-@eH#-`SQj}(UJ(0K`jm!81iDAi;XDwWoTnvT2 zOg6>NmG6d4?bRPvHy>?m^khg&PsFZGhocSC4H9&teKqCfwKlZ2wzkVSn->`j^gZ7r zlL(lnf)Dp1JGHS|j@CFKBbXA=n4PMv(=EI#HM>nqYieq3bvPOb4pQ}C4uQ~aa5oq> z#_F3J8e3&V)0hqp*60~wg}dpQ zXiU(OAZ15QKF)^L1_wVlXy)_#r5Js#bI+F-=`SKJi}t#52IR!MzfN|)~#c8dQz+vDm9tutFzR*qId zEotiN>2opINJ<-2VY5zZlx9mAb!ZlA<<|;st3&{c)gP&W3ax3!Sg-44HKz1Sn228l z665+$AR9aLG4L;ej3a#r{u(@kz4;9I0Q@;PimmxH2!sC$SF_1EfFA|F3G_MS7{EC&1%3ehB=`gHSK#kKO@`BnF-lfrf-pBt zTw*X7tjY|BosLkbE*-1Xlsu9PrGMRK4oL~CkbpyeBnzbMk({r6Eo|B~hwOHHva|>r zv(?)j#ER_Nl!?knB%pJT53OpiHopc(cM|GLt?tZ1|5WL;tqyGiG(dbk$4z%5amkDa_TQIzmHZs zC+mX`u3|=_(c)|ZC$k|eM5rpAs?l0?LB`Bj42!mBEts54K;5xKYa+^3JkKmV8EODj zhTOyaf?zNjoe^sk3w;!gR_mitx$K0gG>C0$&?g*;y+|S)3u%=zG>M@Z^}@WFnMlZC zb2!^M*P2XKF=5Jte}kNRA-5nB30cB>kyu!I@uNd$^JMt4pn!u#?WV@sL^RsYne+7c zm`f80gUMvIT7%S$C1&!-T0TqaHbWalm8rwFW$7`Cp*TA!q>9O2+ghDSL=&^2d`(1x+q(=#pE zsZm-OyrfQ*|}|Va|LoJQsHngRdr~By}jIgqZsCvxRgv)uhZAnITGx`%5f7ho?U2$ zJ!r>G$QRtO9kJ6{y7TAH=j5YHu-7eIH02G|Qk!BR9E}Her{l9>?Z71L)2SECro9H0 z;ie3qBkC5{IGt^6QY}Wei8h29;?wjoh90orWI7Yr4(NqzvI}CdxU%EwaEUsd)9I|2 zGmXZA;aIdat0gX@tG!<8#b1!xoN-$+Qz~cW@9suo%A`wgE|(is3;i|G`i!s(8~36K zntmkV$zYH{UK3-v5i`4t*HK%*UggV5Qnop2gDAX16%y zVxqQcTBG7G5gmzmEUxWES#7-mpZ)DXA_A*~=t7}rTZ`3UZ9-?z@)MTqSS-xlU`I`5 zbe9QFERnx|8fph=I!+^9?n!3t*|XnsYw>f5y`4lfvKNjT+8k}pHfLO(V4^;UAKWU` zYpk(6k&wh!B$40PlxXG7G%F>LS$g5Z1!g`|? zY&6)yqumSV=f~sEDASx-t;USpdp8k!pXVle%NA?j*$XwsCss2pOj54+p1%;oxj2 zHoJqiQpH)$btWOxHDzbFN-JhXUL=vPuqGV79-MX$1!rf?ww+d0HcmoUgiE8wM@Lop zLY5)Detl{tihv63*cxq|gXxisQ8qSJK3Rm=nF@=h*^r^pQ89yjh%6M7^q7ebx_*Rj z28Y93x#A7896{TKI#wx$D8WF2A;!dU7^C=nRvm=sP{nx>TlQCx6J`(Er(Wt=Z9Z7ppy-OqWG5-emW=i|ipmpRu#_tAqz?Z<^ zfsdhiE`lEbvX+X(-evyfWgzdHXQO$JgU^D04Soj{qI+Hemw?Qy++z7yOAUj)Ab{u)&0@*X7kF5m@~(kqg6DOFUV4}~6*)*Y(NMi7bm zK@Am35lsm)Dc;vy+{k@xlq_ePO!f>rG#wivE^Zw_C(i|6}GqI?M7n=gm4&&uxJvcQ9ZX7{@`gPbF(55P1BSk zTVoI!kI$gBxq3Z{L^O$0AB*AdK~`dNkTPYF`HRCmgc zMqJit)M`TTaEZ^M*3?jkbP-EM+zFzGW%(x5iPB5b)E$Km2k{iEHD(SWbmr!yl8VA) z$)he(ceu2`Y_7I8SP@F?QYj@Y?B&(fb@laFf|!*Po@EHTs+pPj`s+bxGcTR%jFc8s zSJyWfOd^t`_P#2S^R<`P*48;37&5B^#-9zV!IX@k6M3W0z%a#PxtVBN_Ewhfa8w)P zN+z+JdUa;bl81+-O$N4_+M24#%BFsNCraHSX(G{RrTE+JO>!EJQVa#YyC@n4bIf6B zq^2fj#IQ@_!JZ`S_R4I81CNwi7HJW-a#4mTnJ`KQP1KUmBxz2;#f#Jm?{SLqIg;Lv zMXHu6qH5dQ8;WT?9C2ov`>aM_BBbRu6y(rSLaAD^p$Z?Yy}gzlw71*k;WZXE#d}RTx(U!%~vc z)Ae%pa>qoW%(iG=iyA0NM^NG>J5x!ymf}EKep&uj#dxV)fk3 z88l+2Q)~HU(gQJ1vvl0luGx83)*k9Cj5;fmTUw8}vnSe|PDcgu0&N=F#VwKYUeQTZ z&}W6iBF@6$LgfON2-Taiq*@|GJrxCOMBa<`h(?=aFeW<|g{04hsmzgwXz@a=$G~mm z0jlN5rYy7BiNIqQ(iR#^5#o_ZEE)>Q_)H4WG?Mzf-CdDqd*L`8p)@Nf@`y)NFOSEH zJ4B)OrV{GM67g_&!Xt;)YL@Qq#*{FNM#61&Q#_Qg*{bB+jUw=zP75?@w>vqq9KN}z zvC+|jq4%VA!DC1d26uP$B`guBlv&~-C+#q>`$}~q3_2T8(L8jXEpBl(wkP88roy^9 zYm4lLah`G_NqzbJ{JqbG2rDL#fhL1Vw&GVwT|*%avdwCW!_yI(O{@vQXQg%|q0f>A zCU!Kl{_NTLMc?P78vwIGP9TwJu{y0zo6{!k)ec4OaSctm>MNQEEi{>FM90nF^=TdG z{XLTb8Lq@HKct`ys&9|Lsj=o9Zal)Fk#kOFR-8Zo`h{Ef-j#~TFSEg>b}L~4nuJk@ zbgeIwO>v%uNK!aALB~%dGiriC=9HUPVk(M55H#6n;drs~$Y{WvF}*_x(bmKi8wv+@%BU)eFXfjA;#nuK{_FIUNmF1tcf(ufYC#7(c`Be+(>W zGI@vjUGU4G3_bR3U9|7W*#nCU^i6;HyA1T8+|VwV4keMx#SR=9D(8$wz!i zd(m`RvQk<^wbEb6uSbfkTB$BXmnO*MW-_5BX1$umvbWQ>^C(mmi(!di>I$_Zn%u5X z+|Yog$Ea4IiM8rnXeb)O6tXXCN*c9DrDUFxUn19Paxpqs9=2jFp)x`-6mLrg6)L)2@P zlt9BEi$J4CP$ORnkYbT$Wrh4Oo2(6@eB$k#m&`xvI8bI7@=?N7c^(Z1QjE)BMH9UDcr|VqzGi!zSPLKf zlj4iW6w#qV6pv74O%1$2iUo^6Rg@M|E2Xrsi0Mp#xD*T)&>KjOh}@7}*5rgjt-*L0 zE0D02psomp?5is^E;CIYb9(yH5_u8zC<>6NdqRO_@)!^Hf=LNWWXwTW^B{Vp-YC#2 z7G@Ij;lMT7PG>906^xp__&`<7&bFw+g_>e0%T#S9QJqWa_81uz+J_Yt7KuolMrkR6 zLZZU*(l1`b21;O(*ha!>ayqOnv^!^^vWV^Sq{TJA!mr`wq~m@LzHgL z!v@iKkUlcfEi2PzqfbO_dg50SzG{ZhgW+8fHZlYvD^nDkct$)3bs!Z?w2Po=AnYk# zA6*!;$Dt8liNu}*b7Ct|&%svO)Rd?vqQP})dW9BBsR&^XaRODSu^3XqidJN((55xp zW=pi09PC+6HKk9mtjM!aXwOWL8Wk(vQ`m0ePVwNf8ydnk8bdtZlDn@+)U7MR=b%QM zgC@eL8AF9StLk(caSDsRzMi`fk2henDA4jqj%alk7en=CO_HlvaE07~YJDVPYv710$h`C<%!uk=i;=T)4c16JYHhW)wsL}W z_IR@d>p#-u33oFy4=sfvlDKgqQH&@5zR6%VAHn((O^ev=#{8p4qw2r

    |}F|Br&L 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 z z1@@Gh%`MHXO-*h(>=q7QL&Gx!jo?6P<`ux(x5?>Tq2l(&h5;8HE$s}nq_;|#LJ~>y zcRq3U{HWJU`#fXRt0&Jl!j5-dKY!8VH8(W}u$~3^=g*(LcxAlS;%o}gtqbxmUOazk zyr#aMWm)+?Kc9^5$kfqw<0Jp&&_#hC;)n&bzyPqHkJ=X6m#X!$UorR16_a?YQ>dUbqc z!p;jDg^a`W`AT&>?Q$lExHygyov;xGO%`O)K34)nz032?pTDfWa5T|1^UGMhY}q$H z(aR&@4B5Su&&P+r6Z9_io|moTo-0V($5KarpJifcMeT~v?Zg#H@ugKAN*x88JALs=tFz~P-3xx~7cmqtBwvARgEiOSg9a{ z{2acLi^p(~3v!N)jhtKl#97jUe9u1)a2Bi@%bNY5|vc$OsjLrS?|BPvFVm*-*BUg2=$P3 z{G;RJSG~*kb*|oq_A^5R6ySkyiy>c;@qsn>+SZ17bC@tX(vBKAM@L3H-n+L}0w-#1 z@8SILB<0aig<&af?^0kB0lEQ|4sR3Xl^V68XKvkE88~&Sx3_7SKs$LRoo;w|kjB!S zi~X?LhuvGK+hk7J$cPu2v^;#`l)10z%W=|Ng!iAWo*)~03CexGLZ3{AAmmrGG_BNunc|*{6`>h z#(p64^~)R}KLjK<{&V2hf#iVx1pE#7M^Mg0@Qk3~5{e67fBoV(c^rBg*7)+}WKqeb zOXn`~t8_hKa^aT3(o2`Fj$bx8+vQL1WTX6>%&U+dA8v~v^6$!&&7TiEU;U3W>1f!8TqJEJ7ok6 zSroiVfBN)kvyH8X5<2poB@n3OyE=0p-#wMfF`1n2_4GIgQr{iQ;S?5{S!=@YIc<0^ z@ZP|CoY~{Kn^B#)&bSgdUOnK{O$Oe3?|I2LabaopL+P4Pzl5rmmX4ip1vb|hSVB~4 zc-Y}!QH|#%|3m;Kt(mY~DoZo!$91ON-#=bsbFPz7hHe~oqJB1q%|{q=ef_ydS*cbP za#RT#f@4HEb?$}ZClN>FkqF%{QOQY8U`V+|EQXdN*_h%IDtR9<~nJ<@V$ry>myL_A`tQ zxOHod0IuhZ&{)7tXi#$D+!3-t+?Xxbuziq&gikEB#$j}9X(7em7i#K z@Aj4ye@4HtF-$^_Fug@w)AvsIy{9`famK5fg+Ji&;%f*qF&K@{bLm@Klr1QO2vvS3 z;9s9yC*tIzMVkvbG53-jh%k@Dl8Uk!EuvCAx~eQ%nJ-|$5zCX^ZE#;Wh0SL(AW@!R z4N04&rH1T{jd^Y}l_k~b8sM9T93mIo_Ras3wKorM^UBUV1yKt(?Xo3t#Y%z{Ey?n3 ziJQ1nz=tQjRi{(3#8un?^z@S_v1M1aNJ7v8LI6>=K9C@Ys zd;R;^m#tgl!3Lc}Izmfzef{cc!y0eaIRx6e(OSv9u^ze`i<+-(4F6j7dT&AlHX;%GY1cgn$_oRPv| zUPcCyFCbIMml4^1zm1fk2fL6rk)K2UJ<^6A6o>t*$ZsQmiqxR%x{#}g_(I=CWbY{! zs2)*XB<1t&K`I4pW3A54N-tLI!i+b3r(MFEXJ-%Ybh#i*Rh9EQ>)B2j_Eb38)t`rxOqDWU35K~zXQ#<_ z$G|lT(I{gr4Zz%EfuLz!%9xT^-mhCpT3C;R3uxC$BQXV(Pft1j|f~;MV2k3Drnj zc-+!}-QJ`#>BJ%eaBA6wm1Y!1AP}VDCQjpIeo=Hw(vFfDM?B83v)tf?Pm0whB->&+ z0!#vpM;x4^+m00qWg1*wITxgjnhHXp%PGd3TV?P+T9nEhN6)DQo845vm`AHsx^y6h zMBco^TFIu;TpF#irhx-`RW_B6U1!wN zF`p&BqVWeDujlMZH?DY{AY+BI^p|WF#2^p^Kj0!y?9!RSVdrkWY|1qqxOHo>Hd~i< za|mw}Wx^ZH`x!E`+4{OhukWA4NV!gkujPiV^x*$}b>aM!t&tGvq@=zRkZvq(>`pr)!`ro0*YKSY;Nx2azd$tu|i| z0m;ibTV284sk-ji4W6MfwS_d>j^dT3aEtQ=iYJx`M7#pK(4!x$bjGc{FIqyLEu z!OPny_sz4B+|j`VBLro5rJ$yYodITyok6Eur`@fso!!NNs@GP2Y97-BG={kWQ<0U$ zI8&cRdU7IB=cYer5?Qd1hPC|AD$_DlwW>(XE!@1#1!id6Fo<<>)M=eF>2vaTWhGXd zU0ZE%L;a?Ps(?JjWS!`0QdV{a$W#P9oIxquN%zlXW9TUAU|O29l<=I>Q&U_Wltb0b zShKM>2cWg8FQ6!JmO=i>=A3y3>V}JSsqlv5g%YU1ypih^77)GQCw$;K|L)X)#ZtQSwAvx-ULUNX4j=9nKxTcNL3%2crK#lrR zli2Yb#ftzAqsoGinDnA!c8uai*)WD#9^0ob2XHYo)Nn5~BxH66Or+ukjlX7w1x}ML z)=Rli3MgnNw97SWEi9hMHr{J!fDNO2e}41cfquBWn<%BUH8;MPO)-es3=8$JXP{ac z@TacsUQNB;6OSA0$6#nvBLbRk2+U4cld&w-V0Y3k>J#-qVGHwws-I{asx$9*3&d%= zecJ$3s+O^4;wuY_nMSlSO@r}ZB}<#ho@iWKZ*b}5V!L={y7Txbo=iGcRu^M+v?MF# zOeSj^c%^L2yw^^%20F$r#7{TnZ*V^v?o(Dc$C-c=r9Lyq>phSL)(qPnEN5Zy<}Hee zbrjA)5|G2k&MYi@Jan0jiWAGr9Oy2L4zopRMH#){VTyTnuCWo^BCU_%O!o_g^R_)O z0LH^OLBWgn?%lK3vqIjh_TeT-*%ycJ-5buWYR`f4d-p=je`4Y$9o@OQsy2X*Vva2y z`d9h<6NtDzzl%r*mZ9sMNH1~~$soUhY#`^*c|VMZ$0Pf(6@52`tRde)_M_kWk-v}F zi16kQkVlBPl#2C{4cUe$_xLdKH;^Ad#*kS=YqTEOlgmXy(J`hU2dW1K0)^cA(11LJ z%$ceV>51Dt7kXmx?!Ga36S+6RIavFtt_wYjo#)4(hZpyYE6cM>+8tfPH+#-M_BK`= z$3}_K1kd-`YXe>8ICFD`xCURB$$C%pvB|0a6D#4e3`uG!DsdI8mR%XJ|8F1y@*G z&*f@!?#7{pMwh9(9mc4~1L20He`T7w6VYfS%)60`GQoLWR&KpMm#Zft2Csu!-nLkp zkH2BplB7B6{-RDhJ*o3zSn^;}iPij?&sxLD=g9|#FE+XiJO2!B(XFr{%iY+R3OAa% zvw>hPAHuuHd2JgEgt4eVujWDR=C+4LHs8_oWblyN9kQ=nF|&q?Hd-1B7hOrGv;Dgi zkWwf-U+j5LLPQR`zCPM`X@ZKg7cVk|G8LAJrKV;8Htse3uW9Oz=eI*d4tHa6CiNOm z>8hEEghO@$ldY+w%%k?Y!j%GMzVQ6^2Rv0*7hS$I&IuH)Sf3HDj}plx5YZEmp~pSEI!GSS(YDDBRQufnJoDrL1&9v3x}Y$hEA zlqJmeTQ|~C;HPOq8Df~zA+)94+KMmR-^$Yyi>Bfr1LORisj0t5_yL+)24yXr9@C_Z zJ&i}P0;@(N{`eOGaw9V{b$fUUvVeu*F#OzDzH(_C7aOk>sQV_2+wn_RrsnL%=F?cQ zmHY4tq(?7}&Ca=8etez=-bq}(JTdEP^tH6%)!GN3FgiU4SaZ6K8v81y0Bh!y|6RBP z*v$;e;4o_%C=p<_Y&N=jmG)~AELu(RZ}Er95~O4P@;jJ%F$QQ8Q`h|d7m@8a&Y$zW z5`EiEr(!k)Lw_i6U9#HxcP#H+r@Y89{`r zzlj_pU`dppW4mFeYa{9hL`t8y^ry;kNESbnO{j8wd?sSPqTBd7!!t)2Ps}-)zaOd| zA14xuna{)=^FwxE)6UEs#g?5ls7DA~>>yTfByyzk>eVTBPVg96z3rfb!yT@|7s@`N zWO};Qhp=@9qQetcwUa5Z_CCL}81Tg#O{SvJAyWfM1LqvmEzJKru@PvLN@1Ie^@{NuM+zsBA zxfJ>}43T{~;q@j`JS>JOZywv{VgS1SkhK2x$fT(m-{R;v_()UB% zZUsW3Y7T9mTMKe}o-h$nTaiguGwG@5l&c=pb!Lb_7p_>-UMw#DIM9sR=wI6)s4;-R zs3Yogs>;AnI3H3Os<3SXo$3TSWv ztg_qv*&hNV!QaY(IFg5je_O3QEpem5gZTmPGd0}P z(^=!cX7}5x|p4K0fh=@A)z<%ZYmD|#K+Q!i@gi|Jwrg|1W+6{RTzlh zak(_eZftqL`RJGZ!ijy<$=9VyCOG>kUA8|$6u1vBU zOd2IM$GCQw1vF~wz5YPp#GalW4lZiKQ9zAB!o+IeRRm@Of#-K#yoiNhaHXTWdU~7$ z37i0J>ggXIevXD9_VqS+>1a8PaWDWKGZ1*L3?h!q5+Z@NMGGC>+tX7w7zof{&ceNI z+$^#UXgaXV@AuQWj_z%2tn*PY5HLlJ;w1KGTe#31bbY_SwY9TO;J>3udK$uyp?x$C z$va5M&*NC3nHi_YnM$<+O$@aJF)*D^(_dPeP6{=^EP~1u2)Kq_re-~7+6)$&oq>Y~ zA`uRsucc;)$nR9cabdYlM5#2T@Xnzyu{Ghp4-e_CiyqiwxX=VKt}yPR0|V#lhC=fE zLJTwd$_in9M)LW380J{#7Y&=;R4v8}%`VGBu?*LLzOQ>Q6p2QnhEqnLRKF}Z1ckes z0vBB-(B1LECKNS371Mk+ZFP5FU+nLvvqjbKnRWPmC{0J$!R@YNf7*difa~2tqFO+r zl(PT}%ev4FX&<5uwW*qFrM199&JHR0A@&xLYS+^E?_WhYIvf>x86Au>UG{R;WXujKjsJdS@a z`l@AbJ|D~G-0XS|XR1e$3N8Eb#?-H3dON}`PLG1%TKBE3t<<}v=qyh_6;D>Lt+_l{ z4PMLR4YK1@d0U&;$**mEISoVI@&?+ddV06lTdZ=Xbj~wC@08i0d>}{R8HrmY|ETQJ zUqk*m@_UFd_{|s~an*%A9hXi-q%Rc%^nJ((@`FeM`7uN`>z^Y&^yL?jJIJpge~G++ zu2de>uOqTqccKfQN3?EP9uenAI#Rl^4rxZtAk_{jy((xpCeVk!5$w?F()a3J>}Pgh zAf{+EGR3G3lEhA0ED@1>CiaIE3JrWdum|{_h;5qRfjyIx<349y>Eq<^P#^rP0|W<6 z4s?@Nr-jex(7_8eL;73|`Qk!X=Rivfa6N3GgH_S!0CBc9eH=82?*t&kvQPr(^Sa#q z@@a-_dDn6gIy0V&!)nTzP+%ZCpIxIEo&su?ohac<@?T`^o}PhhEU#bDLA)u&w3h;U zGxagjqO|)o&py!3f z<)NN_s3lRt#0!>lD3?9&x!Ya(i#dL4qu<++Z z;@MqZy!cYWP1G>J&}*u&n4!0Y=wz`~fT7fUnkWv;9ci>;72Tjn00t1cgf5ER$Z%7b ziHXJd3N{mSPM%7_qBAGM*e_=YfeQMAbf_I@z*1}u?z#9)`ah8^nIzV0n2g6+7`>- z>}}>O<$l2cMfhns>6ikf;=4HugLSGCIBNiluG#z2zRe14kO6;1YSgy%40Y@RRcdO=6{xuFqEWh ze@Dyy)zy0b%Xz#S!ROS|pa~eKtGw&s9N0rW$8W`2T&pL%9t=>$u$oN3=J8#$Kn8}k zN{=VtB+S@LZ=KsXwKo7$!z06MayJ`ifW|b#aT|Z?b34-L$9u>+ z@(o1XrC&qjTm1t>>n4bw`4VykSw@u4V+VS0yKnUm`L4L0A!HHxWkj4MAA0cnkwrxD z>c4^f8{|JB2hfQw*AO&b53-uOSU!kc~?vu+L<0OPF9|g9k+iQXr6wOBJC4S^r zMdCUfS*SaJi5yc1IWA6lv0yfNagNX9gq7D6A7?CIyi|3KPfEG)gwOF$C;L)u>9Eyh^L9(gUJ_03U&@3g37- zn{|5w?sZfu>UuNO=gid9sLUT#U0zICSL3U6FkRpBR}u}i$AI=xsK;xZ-p0nTTtQTI zyts)CDK3WFW?OVvBfv^v$^;GzD$5*C#DFW%{577s#_)Qvs(i7A?CH!7x>TFTEg;KEqD%cZswQk%wS~wNPQc;Xl7jYDDBd;-;vlV>PU5resO!7^Xp_k zp+yJX{w7r{Mg2g$oL7rcvrjBLCgZE~%PG{nQDb(U-?z4&g*X;i4|eH#%oL;VwXwyKR8eAbpTt&0u&Ti1Y8MZ*&S5|5GR8a90L_KT$sTc}A5-7;G|D ze;?UKY)GjEJK*=D2*s)<4I7ltfIXO7FW4UA3_Y-qBiMmq;HE;r>^Vf}jhdp zYc*sIUd4(sFYP#3;yEd{=vNSN+5Z?RM=v%Z7ZKs`vLio14x<~DvontT0-|{GCUoN! zWEJ_>$UgL;@*B(NDI7}N_3aq^rmlPrUD=5Q5alZ=_Dh+_mo`#nL^z?qWldG%aZZ1L5n>c*x~NfA1WUW-#L8Z|li zYFE!{w&VE77}ey{*8poe1aOp3@cAN2v!idowg!90OpH5C49%5lYD%puwE~R=-I&R! zXd=Ze=*?SWlN^nPBF){}+T@2{QE19JX(B;}YcDgKQk@&*$1?-FWsOWx$JdN{li$>a zUhdLd)aMU+U97K2oxNu;wTY#=ehhW4BGJfIv}L%ht$CTzUm57c8U!O~qmr}H>E!`G zhO{!r&>fm%S14^tkV?URsJD*g1a+Kd8eQe(sv z%!H`BY(qvvpUI#i9tTa-#@(4|&y$fk^$W*NB>Y}G>f*V~O^1AKK`a9ek7C@*1&03? zvgx)sC)-(9*XYMP+c-8u6`l;w9E;4EBpaPtwp&3D@Zq#R{fV>oNJO zA(mS>RSWCBW>A;!32?$K7l6s?rS24U!;r`Hkf7$EUd7QYLvP_V(h8Mh&d?+t<5!MUI(>XO z98Q&4uYfCCsw+eJF-~N0BAdsbq(+k;U@pH72vP32abseh zJRAVR;W_hm4Oxsg>rqJ>3{M?h+OWKQ{kkj>n^_we#|#6PGM~r?pb-pT#(_kFPJ}6A zIgI;lZmy0HOAR!$=wl}$-s#^(t|R{l`8UWR^zx>j{#8C}uKxC3wQU^V1Lw5(@u>=NPK#e68-khy zHx_?8T23QVyd_@&rv?Xy!V~Sp8O_cZ8Y*f$WeuM1i*{e0f;&3hq`lRLH77{*b=WiQ zS7x<4iW`}{OBe_!-Qj!Txrs3`O?j|9!V->Db(CZAKajs;Ob46eM^e2p%ie|--KC$C zQEeug(vjz8b3hM9jS9fn1`Q2ab}-=aM(qh5YGyW`i_(L1c(8{u+N$~uF+E#=(8Vxu zk>07Ob(!PhI%b5&kgHE5y>^h<6l!@#+cpr$6mKFQ(P-&DW~MO4GjQEq9*U#V)i1X} zKSN<($nA6yl*!d_a2`2R+eE#KJZ(7;hX6I6D}$gVO>lZ!u+dO-f_YqU{K{*>xb(<~ z-cORzftq>T{{T*41xm8#EIL8AAwOdisajIxmAy8~8=M&)CftYs9I`~zySy6LtaZ;i ztWFPE(~RqN8v=A0>Ls1*3d2A&Jd9%o8ildAQ0Vr0z=7`4R4{;}jRy8O4vCy}6PHI} z%Tf8YNz%4~zYV8W!>QYe#5?cM$58?(Xf_O2v?`SqiF4`JA|V7sBS9o~dYTEFTm@2J z)<{h{JMpo2V+7&^f?gais&V=H{Eh32=_^<0mkpj~oTrP>?i!rvBD>XtTe_%lu-Ae* z2aNm?#_nW#aVAP&CN**^7Bt=@aaDfcbcOt4?Vs9XMmXuB3J;M^szPgE^EEefOf*%> z_Nxkpq@KQYrc9a()#Z`uT3j{}C*;1gA_d|Da3&BNg~Im%N#@lmD!r8B!e>w~{q^o9 z6gt(>e+;o?3?vO}zDZ-{v!xkXB^<)*^Yd^-db`_CoM;L~if&}$l=Pp4SEXeghzDPe zUWcaDl_v=)y?z~&p`+{R6CIqwRMF6i-2 zG;~62e>~5aESPD{`?>Ng@DC3k7*A)=EO&7c7hd=Eu6mMyo+wj=XiJs24!R7WRGxa3 zNnDYR4)iXrv=7*J+ulOKsdslt}>DC`Zln+GlO`jl}I#u}7DP#bVFI9SV9rAs>k$Gn3zbY{2EUVn0oX^;-G+gpk>>31`qdIY-%W5nwt}b^Q2Py^}7#K8U@ zNa-n7#Bl}#w$fn$4?RYb6jW{5158>-_)8MVjU6X=C!5LU#)+4~T|~3B&o_n`)Aj2n zR@7IP^157Z`I82YciVk^+mpv#m?+CEGK-VO?mXX%Q$Cw*B7GXl1kWs|DCUV9oy3BW z<_(6e!c zI8JUtJg>>Y5{uL2hPuvk6`)hnY(^b5H3Qd5r#`#m4MKwQq41bm;$Ls6Q;q6ttLwVDcD^#F{)!yC_@8}+qM@QI5!0Yn6Jt=PzGhS7m zD}yVc8U$pj#`SrNoZAZ{9RsH0(go?~89U)Y`EU+T0o8d{6Ms|b)YR0xDiJ>Q>dV(- z`85Zx1WzsVP97Ko1t7~BfR#-xHqKM=3>FnNVpc~7(F_cxDbABvjq(zu$cm?^YL)vUlQ`dT;lc_LqA)M1 zV6KVsB+%Fl&&_1BnfXN=MdF;;{{3VwJVDSA6EL705B=p3;gql&pROP!66|TGH>6@DH;H8% z7&jrnJ3VyEJ(d7rSQJ&HAJWu2(H2F5BE5IWyaR>b2$ue;IXR?TPd zZZ<%j*GIB)x?TEos%&+YJ}q46MONQ<{s~;@+vux*fhdQO`15~=XdU;zL^O9lia3!r zME=emL_8*~gQS?vn@9oqdE^5`KG4(1Ysg*XpCEsNG^58fw=W=?+wVbdy@Xsvq|1H_ z`6J~2LCUZh_dBiv#Ozb*W&PbnMmT-gPnx3$x?}&YtE9DN$AQw01G}zV5vl^GAc9Fe zgJ%OgRBvM zVG&P>9RcD;4J*Sj?J+#u(={Jofd&%AX{Me)Lz3IkF$7K=UxEBM8wd*1D61)fNF*nj zPupD=dKZX1(ge}sR77TOp-4B>_tHJ*+k3hfaz$n#<18~u0Xf*Dn`qJ)+;q0aJUJ71wKHd(ykGHbVa2(ZYOFZfIoLN&z$qZh2GoorMoxiKvCvf zL`WHx+1b@2)kN{3j)9BVCAd6utG5;w?kvX^?<5n8N_}GtQk6Gw(ibUBf4+F}qT-+k zbh*87E4c(QKen{wnI{BD88OUcy@(}!5z;?^m30w^S|)irmcF%k>*ifMedCU2$$bnG zI;qX|T-r84q}O<=a@jE#By@*dYB%Exx9?i1JB{uoH^W7o5ra@t**Lr(2MkIBA&p?8 zUB{cq%StRd7Gjwji?O?R?S!+zd&gaipF6%-L%p-R!eK_g@D_x0g!~3*T9YA(NFtjF zUnS_3j*b@P`0;FB^JyiY(~Z*{n^BDMSWQDs9h%DP(XCh2Xv)k@qM2t_ zR>Db<{WL%FIKh|v)nt&%t-9;bXy&GmK`k+Qf!8WnNs#aZ(K7^pI*4(^mA;s|MzWTza2(a;woaESZfR|(sJM9taj=Bv!z z{{G_cGOV#oQXQmngRVf0N+O16a5L>Fx8Y%!U%Pl~jAa`Y6qT_M4PaOVG1iV%sZsDE zg}y?b*FZ)-j0%^r?H7{wOzWX3#A6G*ItF7#`?}<6F~|Z=8m&FXER6o0auik*3vqm1 znPrl?)j5F(W5qzIijyb;;(63txtG*RjzAnux-t+N>lU-|#rdaWF_$;s&B>-UGcUR* zbpV&aIY~5^PBbWVXc_aQVKEyc9%Yf0^(I(IjV}>BG`r%)?_b}#wCxN zhTwrk0!!w}Em-TSJE3>LskVTL(aXlbQQT3|E>j<+Vu0+K+*%@yQh1tULY1#AReT&e zGkV3Gk|%!Mo+bP!z0goch6YZF$&y*ki!h@Ed~W8coKfnl7_2iY1!?Z`x?_5j1XXpe zL;&i!d<_J%j@lL;zh$E1TRR?uU-?zl zT7jBahxAnPTfySY6;O`>Qa2OMLC~MZHbrX|ukF$m9tTySY+GgA6#W>=4Q{?vGLZBL z&=Y1%M-R9gy~V1V*wFZ>=7k2NTeh#xFQPPPU?iwaBm-`Okc^u>OVC#UuVsX@ZpCh0 z9WxJvbH)~}GLi|-Ckd!hq^T#_;Lh<9XeWerHvsjzb@ZI59Zk@T*fr<+kXubDV2tHnCS?(f(hU#6dJ^b6#Q-Q4wtB(Lz z(s4DmL?a%IN@}PI$PEaG)biP#KI78I_<6mnv-?uZ_HUCrM2+XH{ob6)xw!V zt7vLs_CqFvGOw9H7_Z+;uXMcG@$R(qV<|~mS~{6(G%8`gmW1*sflyp4%!8G zM-ZPV*ko6Gp^IgAd>=+^O(*=Wnx^njjjJ_WV3x*p@;|XgtP`WFK24qkf3fc4{A$zA z_aYuA%!?K`b-OzQCz+b5vg4%fI0-36RSTBi>kmqU6@zD9`k5DBefPa@%sA_7mJ_YC z?(VL-X1WURfSM;ACylA1bGBN3vP1y006x6Y@#-5t`Eq;LH=-GJB~Xr3y0fOS*@k7O zilt4}*jo8d6$y;I*45Q@?p$|oG;s^I0Zu#OzdE|yC!tC@LNL2a8=*!gRWoCw+cqc!06!z1#?wW2uV{kAy@Mt*`$g~H>OSAu9qa8Lr}ow^Lxki4OpOth}2hMH>Uxt&aBd9oKWcL#o1NH3b4qkcZ+J`2`Cms*{`t zRN?JcoWiAsroGkPPQH+ABoZxEAt4(zl8dr`tz6?;uHNTyZB>z`jCXalcQDD0sCDVG zY;3jwSzA_Do$GXg)%tqB%ZcFyvxm$|j05qmPSQ565EB=Q>S57Fnf*368K*o9R;%>^ zmmla${-er+#uQC-_mZ`etkMx?)wOjpTY>nJ^cgQ$SOlIXIp0GOa6ZkqtI9Q8rh11k zS&k9jRVdU|(NR$dn(3frTgh|BRy61}ZtNpOU5?-S-5N1zqS${YjSsK5KE*Ggl70=5 z|L%W5w0_U0$R8p99{CGI_TK@d7HLLaMC8{~ZZ_G2^6kBi{3s%h`EMbgB3h?%FFMeL zC|}zTB3c9Zb3}Oe2%@-4t+l3nzeC71L^k3Fhy%OOgD6+W(V~5L6bq2X_uu++1c+r$ zIXsT+9+57j*&Nw@iHJ9JC73{zuMd2X`wAEy$22JFd)+Obax+w z&S=yC8C?94^6BXgBCm`4a0@aqD8W5P_DoK;A9pgup55i7&lvBd0eW6$y&>n|g9rPn z@iF3~?vAZ>4Lwl~Phlwr$nU>D#mW;NPj7!LTL?y?^kc`FJsi*FlCNe5r07kE=ix+z zZsY0d?qU{L060Z)<5~kxI!rT$qC$Vn)#Y6E0XT%b$n8Nt6H!8jlf6CNJ-81dkpgh1 zXeClL$z+U?Tp5+>8>qWgwHWl%)i=r{IGyb6?e6VbEkwd7Ys5-<72=d!AmZJ%o~vJT z;a>6@BG2QXpV7;jnl5*CbPslO!LU=L-jd)v-ee-3!q??zm5#MSAb_(~H~V-wqRW?M zic+gd3)<|%E~x}T}aj9Ssz0`{^{x0F2QV_Pm>ScqHZ*d;}7GCsi_wzEdvdQ=d?!M zXO##oAQe{LG&Tm5!x=@Mp-vP{i6MnWhBFc%+ETtuZD)4na+Y*hdE3NrDJLBK=v7JdG$G(vLigyoxABJ%s!KGJ`B2%6Ig0$nPS5 zj8vj8ok%A#hNO^hBOA!`=uX*}ire`ue9bk zpTV)BM_2`@^pp9zxA>JbZdwc|U^J(SvAi9{U=Fmj=m&MBL#9H7egLMy7W6-hf-~Bv z_){f6_2JdSj+~u+b{7kdJg&xXbdeUE&0L{=+jdB%E-Pz=mXmXHI3;vUx3tuu^8Wsz z97&i^MQ3*75;A)alH0j&AP`f0gfhV}Hs_oHfC(1qq0;^;Tng~90#u`(?;vhF%pSCf zlUWS_9c8KyfX}gdCk(X^j!(5#*HQk_Ly zpY}r7Ap;S7R+J7Zr%))>DPvgp+G0AM}62{CYn~VKmq`%4-E1xi0l6S zm}aEQ>if)SSjopiM{&PQ+DYR92Z1N1DlIrni?CPsBnxX$NN*RLA4JK4mg*x%T?*wv zhqYUGhUo65P7w?{caBLjb<(Os8I}lvu%Cdls~L{jOhV*hu+%FZBiM^L@vwW*4N3Ao z+8IzSC97h7BonF_KVU+mM!0FN7`?;Tl_W;ikvRuPouX_eb6^P?>%0Q#9VkdF9JcFm z4yAQ|Y>U@JBBxDIZ2XEiHS!^HbqRYROF1Dmh8>09X$uH*6X!HW@+R~tMX?L5EXQ;( zkh(+Wo*c4bDp;I#k}K5VAgo)FI4fGf(cjdR7Hyb^RYCHmupT{yNLJ{WSzKAhW81Jb zKT#<~Eg4?D@f0N>;K z3ku+o=d{|bamG9vvE5e%7U|B-^C>W_E1x^1F@#l`4DdW2Iml$24-YFiiD;!{BTE_) z5yqOc5ta+U1qbg}`r3H6_u&>ycH2QJIY^f3aA6#Ke1SkSkx0Z`IM)I}N5Hh}Lwg4X z9D#vh&g!p*!ktrp40;1W&fQW4j2T!9VA}_EpJwQY6uc-O>5pfKehPSSQS;Mjm;mf$ z=ykNgMSTdjw4}0+6ByQcxndu+?PM#o-RS9Gk;wTeoCfY?yAkg>};DGQ(YdxQ3 z28R<0a-gul%7Yj`v0`B+%vKAaecf?k34`i!ErgY;aiC!F&6x_V_^kjt=s)5WLmLgk za~mGSnMe6Ra?M705uyv(Ud1a;ie87`)y9&Eka{;aj2}fB0!>HxR30U}mdBQWn#0|T z1WkFGtepFHip;SN`y9>}B1d#R7D-BotbyB9Rwlfwquj^ZNY`Up)xvnC?UgtzOxZ#y z+nfPU15I0GsLkYj-TfqlLYdOlNjRFEi^oV<1#uipks3_kBgE2EzG)K(Yaf@tS(-)( z@#eB?coDJk@V#))bf%K>5(w6FWlWAvX^~7iJjzw@j?c%?zG#hQQ>YFoUusM2 zMrLVa1QKv0{TH2%{s ze%TIEj0qDqL<)!r8(Ia$o`-*p-sGN+)^KZ~P{thy=+f>c+|EEU7RN_!7<3hw6hvTg zIJ1RXLZK72+y&zu*W$sak;JzfZ^(J`!F+xOO8`PBuaqT?MSPXdi~RD(xN=@w8cXCh zrBR?cRARxRgNO&3aP)S|0tw+_3pHY#Yds|<5u{DSt5NT9(J3h^%`ni@J%DvXEO4RF zybn7+SD$m`T%LeSB@R>!4D=3%U_tP6OBM5;DCR{F6N~FQSUxlq3IvArn^7vJ!yVeI zy~8pd%m72dBfAOCkxnw?ef_P$davGb%J_L-N9Vqc$jAG?A^Xv@=a4Dn9`YN=Um`D| zXQRkB5v>Vw4E-8HZX$|t`gh1Nbn6SqFfxKf5&1Q$%XlcXx2iq(^k^@Ez*A+QKO`q2 zyQ>}zEw-}844M>V;(~*HO;ckA&^DuqNQWtrsJxqnSMk9N%>R# zcAI*7gy?V*efzw{!p829NkQQW`Y)HEe!#&u3-d;TzBVqSyyfau!xL6NPJ}1slJW6sV#FCUt9x z<~>p~Yb+>tYIjQuTzz>*w$}8yJR*H-DyNpC^KcsVaABjTlI{cv=vPo<_1-pDi>Fv` z6F9oeg(~e3FNS((wRFO#YCKLnlB}tO$+?k8L;GeiDqwGKNMKZn6& z!xHjlylyQI6^}jb%(=WSe2$y-ikb4RFiD44&UN8xSg&U8fP$t8DXq# zJ5*esw1ndT1g(^>)K>BugO8#E)7Jg}yH_z!*% zog=Ji0ZAbRCuXeA}h%6A=T)gKIF^D|AdHZB){qel12Un^4ExLzft6E zqa3+lMcQTteQ-Yq%E7(GkD#@Mw zj)9w`Zlcp<3EG02aD*4ZBZD`+{`ww+H&wdcd8Y_BN#jJPH-RHs3NO9{9F^cE$H_O| zxY2R`=ifd5-p3D%l}9osM?z^2nBuxWn&^@W#S`uX#KP49iv zSwj#uVAIgt_M+=$0-r3ME9n?AT-0-G%LN3*FSO`U&awgEP6qD`XcmD>y2)OFP5s?HpiO>pCg1TwqMC{Z%@4R!8Ohn%cG?7VbxQ->@o8e>{)5kHdE0?0jc--KxwjYsumXBh`$0()ghd!`hZKg(kJ&nGPsf;C=YHSDF%Z?fhI8| z?Wmide$_j|ewnj|Eu@tCU6+EbrC`YcaW2S`-yP-8Kr{fknx zFaFTC&YgcaaW(znhhORKF2P9#iPEW3f|EY_vvYUY~!p=cisi_t9tu zIO!|ENxcS6Dk4$I6n^BpT8MZh=MtPGB&vyZ#ekEDxIf>0?&VjzK%z=;(!kKgO(g0u zoCFdDAr>1$NEA_jRNV?-0*NZZNubA}NC}DBf|FRv6C{ds(FTcX=EZLVu?!LgnAAID z@v>1LJSR9PZ#NXdB)ISerji=v1_;ng!WOE{D& z@8K@4z4_LczO)w{Ym6I)rdGt4qEQsgCM2cU$RZ>aWP1XWBD*H;?{Gk;v@F&^Dq&Jz z!P_Fku(*{lDFb4Wu;C`@tz>rsVlks;PLQ~bJ46aRs&RssR6?aHYA;^Y6ih@hY0|IY z8UmL}-oA}Dha@i5*she`!lf#YU!(%3)v<(3p-=7Q+sP!C-BKl2H6MaSM5+2HWzCjI zT`ZzgI1PfqlNFIjXbYV>q*Xsy`nuxc#S%(oS*Jk$ISS_4u{{?rsv+9;X~ibsfkF{K z4^CB!9{vzrD|=GwZ;0C|d`dBp%IR?eaU#vgDdYvD6OsN^PNctwNC$_J*AeAL`Whns zyRa(dmfMA{-NgGfPhLTO0})pBEIM}_c?bD6@_!;)qpc6o99g-Neh1NdMLzWJ-$WLW zpF#c**$*~#66r(!E;5Q7-TA=>B^~|sugjW6F-u1q#eDz%cfR`7@0gFDd~*NY_wIl4 zNl`~X+ODH#{;MdL6!oVMKa(ck_25D2!+#ao+74)a{`n?qwfFPSOMuo{(#a8EUBaa{ zajmngn+|*G@m@NU&?uK{+wStk#g86+7Vv{^8Jx;gsCxMDk?OjG&eV=yoHY*p~xPt zk@}#7SXJS9-v%y`$wHXbr=R539^{;KPgg)|e^e1GybVaQEZ0#cd#U8xMZ_vU3~8@P z7l&VI@Cn=~9Bw#9^u58V=rqEr8nEaBG;W^Vo}KOO-QAT3VL2MCsR$csf>w6|O7_z2 z+qYBh#M|IhpiKs+q61K`>=`hwYp-(#@SKmO1ztuYqL}mQEi9|9z9Le5HrS9Rrcnndg z^zJv_z`lR$t#TqgpG2!}tlas^a-wfjds;L~UQUIFU~uDj!LcB;>c+})=1#^bcaNDj z7_^FV1e=DH2ul7k9FhQ5@!QE>MJbutMG>%CTG~RaoSEM5@41&Eqz7M?|H4;cKwz~G?4 zzFJ{L;E@%yrC*MUd7sZKc$9!GgK%m6CwexfhB8UX;=oVAXmb>d>!^xw?D}1d9cK}(!K}5HGsriQpGE!&a%AU6AK?%=ybJT*3>>@O)e!P7 zd)}9k|2`jZi@aybJbLsa-+c543dx*^Xixk(v&+XOMO*&x;b)(I{M}DJ{p_-M~^nZd!hLIKT!Ddaw^))gq^Kh7mtoGjpF zK{M%0LKJ{0z`~dw%h+gq>g~5x(()2+z1F{$8ZtFT@eWEF`$*YNv3sN-1kyTDGnVB0BGT0#(b%8;stz+ zW7#)vKzc|n1(#T}k7p+w%W5Sgnf6!$%PJbEu?@+J-?Z-p3CO$EES>t>$2m1Mxc27T z?Uycn59GClW&y>?VSVk*e9xuJ2J(80ixsgf6bWwzx&sOaXl#Ap%4iYu!lVTn1M@O~ zRuS_mf?f{zUPe1RuU;J!_*KHk0KW{fRRq6E=vTRCl6sT~R02l9lQ{}&2GqKnyh}mYJVL;V z0GRJdq%2g>8YGV3UFSg3nJB_vCG?9$Ew-RCIz&34Vq z6oh_l0cMZkuUZTawtH`bbP56E-IVYz0btuISRscMY72!Lo@Sg72F4qQ^tTCt$=kFE zt_=ohTaE(r4TFMhfna#Jwji~kivZN<2BWyQkTC3-5|Tz@V;o596gVY}JrLj*gP?7p zWMW)!QXyxXAQ@hV??uPRiwZtg1wJ-~o>nYG0#QCyaf9Wjxq$q4i1J!JL=@8>L~bC` z)qjROgHDz|dIkA)x z!|L7J3YN8OIzuLN=jL4y?7IxY6xJryL~-H_OVC#d$!Y@0iftlUnWd>4v8B{qH4J03 zv^YW~0Bj2ZbNIKwECVcYFNvkwQ#TfumhL1C9gC9{5wOBDTM(G+K2~UYbG`rahe8}Za^%+sM{D%jHf$-X`o0);3 z)E$F<2{sdIRzkl@^@>lWgkmKLL)QB(tfO%5W^Ud}*ExNH&4ijgM!ys}iv>%UDxz4O zeHWt`6h(J%O5Phthlm&2l-({euv*d{u+4}Ju`ybLw+4mo~BdinZJ$5KKxPS z0dgE&^S6*RqPVNQ*naJZ)@-_otRO#*{33F6=QO##P>YjLRHORDG9qDZ+dtD@w)X4u zo>Cb&tpv_1WwN)qnZzVGzLdm`#R{59s60co)zz7qsi=#^5KO}5=+q?N!%+&bdzj3f*yMQE9{4qBpdG2PV{4d^0f=7>O!FD)%K%K1+Q zx*UP~N{a)F6$`Th)x4NqO3g&)Mk&lC6W)}v8*5Taq^koSGo%Yh;k0X9e!t~W@_Nk2 zAk-~3-cOkTPE}ewUY8ChMs%|T4zuCatyw~=dzxCwO+wHXs#;_(Dye+k!tvU0bV|j; zGb^l+VJ)Tg>`YvlqtFt<)+W8LDZkrs|Ni~GZ6ACvo~b=v+n_}Y@R`g_4Gyt-cqmjf zJyG%4=lV});w#kbP@aQtff%ITPl=~ zkb2Xxw1nNax_a)#SGt;;zxCm#4YjqkzNar;nRGRujP?bGS%s>Q2rkoJYwHUPIhHc%rA&a7L;){;7G^m4K;DLS0Pm7J)#6&OzTWq8S5J5Q zwD@?LFHBBPHa4GZ%SG~x|LH_MTmrPcx(-4;u3hUQtaNA^hM6@Sj?9tM{$yJu6p8W>*;q?T zWJn)R$cGz?;FQhtDr@O&zE5xA|-*c&&PF(Es3kyqq;b?D9opPVn8LAOYizrV# zdFjOjYYS&{13rE;$)wWD;kk&iGZaWhR8@r`k(iB6b)nID%KK)X z{~_{^5ameqqQjL(WexcdIf@PsAvch3A)g@s0nu6{#|)L@Y0^^|b$J989GxhBK{;0$ zdcy2%>DR+5e3VtPr0u4>n%N#Q2?(?gy*)GKQXZ8O6jm%Y!w<|>5AM@3lwc8kt_4fX zp1GMZk`bb)!eRCt;&fw^GgI~)iNHAa;i{35nW;vfu&m;D5>-vRe16;Ldm;(Q$sdij z`dJo)FIsv!8fs;OP{Pt&tX1Z46u&W&%&`)Y`?P+mW^A%kVYoT#7+UKa`!(N~noC)8 zeJ*bv%4yL#MlXEFSShY4Ayi9MuyCX)xR0{uJ3Ftva=|tD$?Q}^ zO*%bHfKyjjuRoy0Dm68R4b<#OVoJj0_vY$WSP$K!iaTHE?0l)?T$kTli>7n zwyTC@YI?3zZVEIx!K8>mb%}(x(pX1~hiXbU#m>L-<}2qPe)7RAk^2O=FZZr?bq$*s zY3?l;@VT5`PbRxk$6c-PuV~K!QlXhokZ!Fh6+^SB@Z8p2> zU3lo6$y}}_4*?6?OhHUMoEWD%Ws2eh6+bmeqyuA4Ds@_+YgUkl7i9R>Ta`7lvz&4v+1b?x zd!Ho$sg=y&&?G*>dX|MRQDbG$udcoI)>~Com{3}hh{O!jj9Sd z2y;EVn{fN%WmvMDta`7AuuLaeRb$`o6gNSW*(k=;zF;_8zl6&BHlkbs(t&?~C?E7+ zAm!+`rw|wN3?hENg$P%B1JOE7KY~aP-beld5uTq3+(@0XDOgtTDK29XKmA0S^sWbZ1SiWF8Eu1u*ZvuHDkx==SWGf(Y=w&Vd% z;~U8VP=89bN7`3RE|k*v_!xT7q?bBWJ~=r$QP<#79;rj+Gc(g;SL@(bQG;l%t9+Kv zQlF=<_VnoU5$*3}H_A|&dAhqdV05uoT=KH>D2!in0ZgF|!eQ+cW%Fo7S65wM0Q-!c zXBDoc*}L|h81hflPr*6UUc(GHTG81FkI?CqcHY{1q>>qLcb{GFRBY4PO`5@x3L>`| z-|9(c9QKn2B9~KUBCk_tJ>Tl0PS%R46S z>U5A~7tb;TXEGF-NkH?X17yfaK-cF&@`VtCO{EjJpV9*-I)|+gO{S1zH9oe!0lDD> zyr)hAADFZrthqF13MYGqN$bvuQ5g#io%akCd%?xHFeAP5Z!HPa# zkQTq=G=X$4zuMjjxYs*A#)FXE$(CdZ2~Zs#qPb8GMnhvAF(JWg_{&un$1u@xov)v3 z@9UeKBL6MwRdtDU%TZOXd-r}0pi5@L<;lJn8=6uqM7TE{D|zd1BM8;1C- z$~=POs8u2$Jbd*K`O0JT!_8Og%d_%Wn>qK+y`1`uYu%Wn)#aikQ<$nXyYTihTlDY4 z#$Q=snRLSvM#~f{fFZv1)_%gTRJsMdn{S|}wD~+iAFZ@(H&=8GMDV2WC#-yrr%ig} znQ~@?>QBN`PVaFkf;_^npPt3HsXgR4c)_d#B@V6h@vkAmp#E26lLMhR-T#Ql zj;%z`%BLwC^+jYDxs1p*{VMX?h;(r)y7&8$1?0z(-$niuIfCwe5%~e+I`R|9M@S|5 z_Z%{ZtRo*IPoaAUkQw9-@=fFykWB?#(!<3ltV3lpGiv3B&1{}O#shJf^wH5dUMyOf z#C_A#V0(OIZrSLRfJLUXmEDCfD9MaRG;#I9Gj?(C3X_)D&&~5TF$r;>> z=r=nf(~NLFR<%(67#gI>kZA^VJ9Kew8qY9skeN(hpV0jzU#S2^DG14;h4)Yejz#9w zOhRnX@En&~Ao2_DtC!+3qau{nokdi;O2k-+-K%Z*?&7+^DLf90x#0p&-fAwHATvPA3ZyrNOpQSvxky zk$6yeIjA3B%tbJLQXV_#(eHa27*={d!mL6oVuR7mmr-LOX$ucQs1zx45`6|^pzGEM z!vso5y;vq~65XeGW44W*&hGB^o{n?p+DAtS@Wc#MPtT+lvY8}LUDtv;qG@%ttE1=j z_Ku#>5vT${@KP(wlp;)`)+mXh>Lk}9Y_XNsUq5$_fYy;ISP(iOw}_TaCu{3XoR$uX zpOU;o3V6#Z)eXyaNreafX}+MJ~&9SUXy$kwdX zI~%_rd%P2?@) zYsf!ClxwCQJ^Xi&6!M$M2BMgVDMXwzaRfd?cA$fgA`MMgHCKvzNwi0rxvlaFU8TI%v&#~gx|FauqsQrILA*7tESFb0 zb3^wiZ=0MXjz_ma`INnsCHh|eLN+hC*!3=RxkklNJ52I|@}?2GKTDcZff|`5I^7cK zid4a3T?>r~^dg+2rwJ8yHOAv0z9Sai-hVC5a>m!tsfdbeHW( zxzy@%OR}oUPOG$)PTbv99(R|dl1PyNLBQ?P&SbHj$zr?Ri#v9l&57-CoH))&dN9BL zeE>;OWhZ&k2LkWi``&$b`G5cWeRom2t`AI1yt2eI%v)c5^D>)OF=_#r)q#e&dUcHg zs1B)_-k{~oo?CkD!rMv@gNH!U*L&XfQGsKoPt2@QIofZiJ8m2;Oq^BNdnir_NCur5_-g@0eFo`;+JVGY4Yyo+8wdig|{#J-V9u3C<>YY z&=!#ig%(3}Q%X(~kFf~a*Xk-I!YU%mH*Qv6rWL$(`OUXz2yCE=ACZcxtsUp)iBwzt zo$q|7q3x}=SUr}FSlK>Kv4Ze{bdN*rQuQtbOw)9jRfYvkv0QDS?^~CvXXX~^om4MI z7a3-a-=_8QzZ+cD&WM@9+a>0)0{1#?6~+eAm6(>d&9oS6U1V(sBO$viGL{b*cc924)1 zjd;dbi`SLOeDdSV>D6VfF_r_Jd2Q^>nX!rMlVf8%&uvHLI)-1W3cEVI`Sv6Mrf%F~ zpKwo0CUaTQSC=7^kGbk(!g_OZe1gGzw{G3)IHKi(S2Lgd#43TW`ZEWeb=oe17CSw? zIx_>g>u5(K+*!T)304$e-F4StwA^#oDJdMEgT-9=Tqe`eft~Os4=BIPpX;#u+-1fF zJmih8n>3YQ?|p`Ewk0oxTefHwQNdA5Ph&wkk*#k9yo;S6hAm{(VRF!-o&|Tz9_C3vUz( zgIklC%qx1{;vxzAvt4(0@9w$odM-TJ8Y~nx?h~~fv*NnDzvsH^yzn3!@(zxl!}+d);|+g*(7R6UT3!7gc<(M;D0KV7@v)D8{Ot0d>%IH>qx%)_-Gv7i z{PA$)2Y=uP&oBQkdhae?xOj!#+57c z-pCK~*o=q<@;~dnqmFlby@M~GTUyRgrW|GOT?p^52BGhH@9HbwyL`Ulz8e`a?z^+; z)Is+hgSyJ@J7%}QKz^J^y;4?JPn|j?|J^6q(3;D!;o;@c zQ>Vs8$HvdCq<409_IdFf)!A&;#mIhKdF)A!EAJfpo9yg#S8s1`_f+Te`I56{b2FcJ z)8l>`M%DjGSIg`q76VXvaFXKmz)31d= z!IOCXP$nJ|twFc$H1`iOM(j{k(yX6w3te#!(KEc{vK^pDXfsdHYi|OOw*ws+6Abjw zxx4kQe-3k@TtX2BaPtZcj%;>xVx%t=I@ANnxY`4a4fO{4unpi*e;2_V!u|~?#(ExJ z7@3%!zJ2?U2dux+&Fam)eLaCi{B^RD-Za~Ls(a|{xOVOS>Cx=;YyfxfrEZ0rV{;T3 zP9Hl}~nqKMd@M&ohQ)3-R@utj7-DBbYY?fZhm2O=9y0%cV zSODaH_UZ@Odv9bnHs){LzS=9_k**v;*RfG_Hp@lEATV2AkE|vNHTJc8*}H?@je8sO zH$As>y0E?NQQaoq+i!Q>ThHc)hJ5QY^WGb*kW>Bn&wsvTb-wl1Yh9mRAM%BDL+?$} z_tx7#W6UHatM~5RY}a}=*y}6a+sNKx0mq-|`f2Y^!}4xN%@Br~>Wz(!y6}e|zTV}% zw;uNNg&%HgWa$P^^s>G>OF_JQ=a!FsR2ZD1RMthl^{o%RJ+G}7?q~0BWUpZ=>FV)& z-ei@r8+UHOw?p2bFG&6}NI`e5iN5;k$@|_OG9#P4cQut|WyZJIeyr!sYl^|@4_%(_ z0K-q$G`t{o>J)=I7_|M`wR`t2J}kiPSf!`O-`BH1O77h9UiaMG4P7(n(g+eVtWb7;MJQko5TPQYq}xuj=OUBd3m= z5LfPM9gc2kyf*z@yMsg z1XOd=4Jw9JH+odA+)NF5qST#pK{pnXH-g@nCUz;8o9v!k`+5d#pgLzup>lx%PA%6`KCTje{ zKSTZm=>h{!Aeu*~HD@&ULF;^d2eH6Ctv#c8&3_R&i^van75Q0Y9r-HKSH?zf9UH+2 z5qrTt)&>Ooy6bPV{=4>v;YSH9`q;v}my-sf4z&gX@7`po)EhT?Zuj(-fvcsB znfJG@_q==Kde3!6D3x)lnbSSjXaoy%y>13DDHu#@Vx3oi@3mVu*j)Gq3mmh(u<)m` z<;s;FUoXgblSgrb2s(%UAyG% zWixdwE&{1q$LQ$klOx{gX&2L5daerbLZNB_Vr?7V@D2t;-nr9#MF7V}Qy9-{TNR_* z$5@AMOlk(SFo+%+WiV1#52wL7OjI1DT58LguCAV*2iXe1m1hz`@!3Hv+H+vVXd}RsCIXAeS=wHHlS^9A64j1>Nl;RmX4xu?ZX+b4QUGt`!2S> z^_H;h-i%kUW>D>pt{a74susl5c6{)GAnxAAEuovh?bdAuYS5lbHN60vaP7knvw}1s znuq1@_5iKM3!n+lHnLX)Wd_M^UGKh*LsT$E9@cp8-}ef@Qdw-!y?z5-6f?*LZmkKq zYP?HJ(?YGn%{2iQcy;{-OJD<6l^`}8dS89jFSr7$gj515&%3v}Z{D$=CJ^+}n)`%N z0F>ZK=*0elw}J~5aH{Tn@x`$>**q9aByF_}NqmtdzPj=G=a1?Ybcy#UBA(cX#K8}w;xtz%0A0BQ6lHi0t!S&l1LeiHLhHrrHp-#{M&cOZyOHS3_=Asg*n zHQDUWPE+N_kNzl_`V_N+JF0q3zyJRMx4wb=F7k(n#w`fP4kO}oLx}7E8n+-HSqAxW zLp0uN z1Nn!@H<3R^8o@C?@+>lm{O`!ekrw=^VYF2TN~5MI+_q|D-)XGczMq908SY$@G?A~$z(vj~~z1~{k7Ty?qqevt1L02hqX zKI$8NK3rZH>2BH3=5+h8<#XmnPY-If}M|L9fE8xEVNg1k5bj4d-pc85ASURe7)E3CW?A=)jWEH z_O3pB&)^xVgDeaAL{~UWb5jtd^T=xk(E56DiTiq)aA9T+S9hv$a5ZbNtgrXl&ED=_ z6Q4q_Hqk(^ysu~B*3HK+ya{A&<*)W(Ros7}>d3u&0;;WQU-;^+@{`Q1+8A#DI_2}c z*eyGeg+e*Qm@O@Ex|7e_xYSZ>GVXAVGOtwAz>Y*VWx95)MOoZtqf-rQ{t26Ga5`LO zM~$zu$ClLP$TJO1%XSzDs$q#MLC}~m$Wz83 zDKao<3=s0zAXKVD=g|w8+=o9d12z@tX|g~aL$JzVL)*rybCgy0z6PfJBSd>K|286= zsf_pU1uq5>jg6W@z884~(Ojed6S;y2XFfo7kY7c_q5fZ_1`N?Wq(MY;NB<(C`J=BP zpGUM_>MtT+N3=gn4Onsni6AEt%^484(*9MSL;f!EA@Ws3`18*ZC;OOCIUI};Qaz%h zA~Z2y`QA|Z&WV!cs^E++mn?U0`Kle!!R6jyWUbo%=>%kgp~zb0*9}2T8O9v0ci+9y zb4$Yng)o-O=eyklzF=F{&-$y>{W7>%kht6LvKWvcp{{{|0v7E&$uF;$fVgRb!WB2T z;sH^#8nh6_EkyAc8fE_m7)JJiN#n>!?{o!9)T|o2fszW6m=gd;whScOsI#gj10^<+ zOwO1y21{%xnVdFfY!ERRqA)GS!cf(0V8lj|g}E)XRFw@O6$G(Q8OYd0jGdiI>`lSN zKC~#G2S*@3!U|snDN0qX1|C2M?;bXA*1!U&@K_5cESLZ!Jbu;y0(h|hY_*!$RiL1J zTLT29u>%9Q%FhR*Y5seyUp<`qa*M}w)uhI1r(Hlmdlwa1SZJz#^ypFfyf#z1Hoe>6 z-KN36Ghw&(av1Embbe^-c2h6a;0&gf)5bgPCVt4|dMyTJwlo;uZR8;QB{lIf!*Ep^ zw`;d?yKE-G9-GJUCA?_%*pweZ<8IU+5}#0iNb5aS(MCHE^@l2cgzJ3&8uG`8e7JuV z`8$a0Ku+4*G32i!YKNM~qkfL|1lHP3>eKueOKcGpEBat8$Wde+*4DJxf^u*7W%XJ9O!4u=MV}R>tA1E+3}FpAoF6e z)YQz~HXluHZEhRa1GdICtb{wZ`@s&SnL^Lk3=AZbr6z9rXniZUxxQ`u58dtgd@h%@ z9T4f&tHtQmB4a1-+o5l~3P8Gw& z!D3OqaF%eZ8yJWxqODoNo0}W!TZL>P8{Wxo=ki+{8^#rpUM@z9#duLR3*2an&shEa zL?m9F-rcRL-8A^-o4M?x?Ls#1%Rb!77QiPWW6@0MdC{VoMKn}Bz-W5Cn^O(UHAL3$ zY&|M$XA8bUPcplei*IimzeIYqm|5eY(Q9|u#_7(`Kr%6qP)dg|^=)mgZ=%C{l0C)b z#@5!uZQC`GE?&D@EXp-8h-+d-6I zsCp>LQL1an=Rdf=SsdpEy`lBs;J`rp;RgpD6h)4b)$-*puk$6lk>3mlx3{;F$)l|g z9%TE2@$D6PDcF#!S^=w--*vbu&TR3sem-pf9ERLA)G+}8S+ zipBf)$$>|?e6r_3GMtD; zZ1$ZG?rnYHOU3+_@6y)B=JtBuPLiibSLD1X=66EeB0e_=`)2Bq?{+N4I;7$LxN`A@ zjg7B-dE?j@w(dVz&OX|Dw3YMk3JzBnI`qm}KcM-k!%P28H7s3eaz za`!)dj}h^{I#NHA+eE|abrARr~1P!s_MwT_i{PQSt#W4#;?)b zd-38WdZp`+a^oYx6n+i(J~g)}-HvKPkqKUy0uU!L7{ewdqh&1cYbOswkn-+#YJ zj*ufZYwy-++w)>~UE1sp47S2kto?udFji|%^{QGZ(eb{qMRh}JSZhrEOQ zGGd|sH0EFHyZ$DkKCtY3UqSu|38VYYAwP%w5i*L-yM+8|S@(TEy6-mfO{BRVj*NT? z`FZ4P$R8nn4fO4iA4Ga;BN5F~^`P!hZLw0jx(MBMxm+Zi&Gyxx0b`}k2Fma|L0?uO z!qrras6I+93fo!#?QiG2k9=7s!!T)>kUKj^nnBfuiLtE_-`FDt+M`BmfrxCjUnLyZ zM^Yc92BAq~E#17Gox?3-W8ePv#PsAk>MQH(M@yPmx!izxn!9du^TFo!c572Z!`L^` zbF;IP@8?KIsD_VZf1Sgjzj5=cH8!*VWrr-K4X}gASM6g4^1{08A4u|7oH6&w) z&cP%~OllPJ4HKA(|( z%z0H^{A6M-n@mRBNmN8Qnaw60B-d7vZbvSc;)$fsnMh<4+5Ap6+g(Gne6M){U)|0Q zDswa3xVDx=W9%g3$vk&roA9kILbcUzZ<|;T^LdYz&zo2Cx8ktc=(m#L8zRQ;MZX(fI-_w)yCqv1+oT!BK>LX}wnxlks$#~T59(21&3IFv@ zwdAif>3uf^B(hFoTI>COlj%E><+RZWHL@gL*a4zX@*atyp`dxGNV|QLq{E%F+~yt@d|+q@qj)}l>zmX77nLDz6M_WMk1A1} z`smh+`#g-bs-#5~*GXk}ST-}@HWpK)9z04W8|kr%8IU}a2;HF1>gfq9)!}AN(o`K; zyJ;np&*~+OcHnZ!Vn}0->XU4AQBi~2gGA<+_pst8lOiFxd}8a7m9VJz&l#9Be9fsc zTUa2ElV$qA?_{SbjU$nWGM)$1eDeL-{)AHQc&5%kcY)@!zP?^xJ2^RPKUZ|ZJT}=^ z&F=OAa*m?i%I)Oi7722Z!7jJEP5eY z{k>oeCn+gf$#!y^I^}MNDc_SryW}E~aG)c<#W}Z<-&~(eZYA1xiP(l?ZzL`wM+Qopjw$~e6G&@%;mW&S#7>)0&+t}bP$wsPrGW#G8-ALrA6pZ#Rm=Qq@kX;t*b}$suci%V5Bvu3YZwRu0QZ24Bf~+(b)Q zPIC;}sP~kK>bAqPHPV%z`h8a(eg`X$26>EM8DI{hvCFYatt>HjC6}1aW^YfAk5A{N zML96=xXEb@w@ttQ`@f%`oqnI|v-3H!#XKRXr`b0$&vinzxVhVATu0O}W~XQ88eDG9 z`b7M~dY!0=Tq=id6rVa`PIc7hxVL=-bjPrYsvNvt;kwYFG=M~(DZ_5ad_Ipa<78D= z)iLAC_*J;ouOnJ-PCkq-jl#KZM3FYVYQ6Bfc`% zk}vhQkv901)(=S|Kacziq#K^~aYQzUKSZ8^XZ;BB5cy*y3BP(7`Dx_uBmWKY!L!aF zYsg#3hsZxfx{Wo~S7uDo1;Xg9^gjy3@> zkDw%Is$8y^&xdUe6t7WVA;}N^l$spd+cqQXpm(qXPLj;NS_LTvEvQc}TPzM(J39`Y zc}kxSM-j5s=-{^7^aM9M!Q`!+q8Un{lm{ts@t$b&8l7*&$U2H7!jMJT7L?TH+D(Wc zo;(uR=^}ozkmUbBu^3`-j~I|O;4T(nUBzs+=*W@UX4S-wdY-qHOA;aJ(~Uxg02Paa zF0q3hEDU*zz=zTETU#B_-bYZh>^5%}QShif2J{h^7S9K~P%K3-qqN$1_Z-FLX8wEt zKKIc0M`BHQtU{qcV8@q*Tsa(=Iw;gOlb7u{k~#zZfn>Hwq6&q8oqf^f&dwet!210= z0a67<;O66b&Bl$=-q_jM*YEL)lPOj?lAXfl?(Uv&Sc)*bT`W=zrKURQH6VS|9S(Q) z7K-^|QV9#11PnB8Y!nS^;-xs~-!m7uP7ia`d;sNXq=?orJ?ylp*z@^rC!vxtJvaty z%#pYpHWDC@L{`-hIVy^>^<^S8y2({Nt620GL!oXbP27}JA*`bAKP1xWpnTv;4rgw# zDCI01sB;Vt-`~pfq$cbh^dmP(wT>=uqgd=wY%l3gCI?%nA*6s*SPtT&FiN$~Z1%J< zHx!#xR)^}T6WQ_&bizaT4w_;xD5^FSZzho(x`T)hH>qRk_MA){jUu*%!XX#6eVaEa z788+(M^vM?CK92OLJG2ua%6&%CvPo?qcmHH1;IEDk+C;238 zMFtB_O)V_AEGAN8OBy^}juUOj=Zo8$Tidji;?pW)`+z7aykgiyaqzHtw@@v0JQA@R zM59{c7P){;isJ=ZggNksuy6{t0mxyFQL#sr`9auas5k`0LY?P!3We;WY*E~d$jZKA zNtS1fO1WIC>4qN>`~@6}Rm>8tMm@}UYq7XZGRm8(E&}+mzZOv9|KtxuKA^kSzv-9=(!ZG&2$j zgSzZFQSKHGHAkaitd*2T`6xLX%s0aZAGOxgUW?wahjZN~d-|$_OqFyE3>1R}e93w&1@+gS9Np2+URNEB__VtyoeEG`` zNax0V6Q%VCf9`L3Jz*I#O$#$w*N>V=ZUe_a-2jZF&s% zLn#(>uu5(dQFV*D)uFMr*0+lA${d-Zal0+1mL6`&nNpo+Z$cCW7P&(@JnW&YdESJl$wvDJ$OZkj>cI-2}|f zF66})sgSCbm9V0wCTy#CSO@wsGds;Rgghw>C}6*1XUFEErA}8aH#=upYQ=>@)HajF z)!>r)D0RW}hz8zqmDi;|V4GdKsr$JiLv_l(;c3iQ>14i&{7JuqXbs^S_?viL0+~SM zE53-VBfo>lA3Toy2yzGcd&qx82Hj5Lbt;%F`zEYQ}ipOv}sNF8x^B6`4p|i=JaW&g2}lVo9hv+Oawi2e3SVsiky3e%d~4qk;>FgRIsN(?TMPKBLe(Et_VJ4 zD(%P2XUSa;TY%8XIOj738#JF0Cv8nCl<=l5IjAz2{BQ*|V>sKS2dA20C>D1Q*pc@0 zK8PPNY}RAQUV9Ud@_7UOqE`iM6On4FU38D@!3A=#F+!OE?2Y<%q*=TS%7n(sZi&pr zcIh5`&nk67(K>s(0}(@vc-wts?{S{jN*W6V5Bj>8-%b{ARCDw{!SL#&u=DvtFfZY0 zPbY|hKMEBBk%!p9>~@KrAzTi%lNMv>qBJ@Uu=mtMOtuO+G)6HZT8BkvAFZ>wR;^09 z(Ue0A)OS-fr(I>ZcMp_L4t`mT9;AAPYFWx5XU&(t4AnEYIfTbaJg3JQiNx_!p&k(oG-+Nv2GCfm0F^p`N1sc;~y_ndMJx-+eD$_8Ch0XYm zmIGcqt*3r4tffF`js(}I(R@h9v^H(dx^i~m0p4z7J!GL zRDl@J85(L}5LLX$LzR-S)11!|FhSo6J!!Kn3)c$tib=W_COR>l1h~JIdt~#cA-p(- zGPUaF<_TW&s$xn5O`=x0O&YslN#gmus8bVSTntmj1R1o6Wu!G0EB0ZJ;dOVJP??i8 zpuIN3bV*zEh&G5F@6=HXi37l#!C-O78|E=e^)CO36IVpcvMXu>WMDn0Zf&c2ce#+4 zyi@G{{#=kc0vBo6<2}?rGS~P;H+=wMzLgZ@U{0P6Q>LM z#)tb1viEfY(L06WHUk+j;^fW0zU&q^paMSJGWxm;A8R+5q+Jt9mv z?P?8OI^4o2L)e&79nHc0_(L^(^eDHpjn$9J-6|TmZOjTVAe-g^=|;Q68tAI1qc6)s z=}0r}hAt?nHq?%G3Fj*2AtjUxk8FoY;pQmhv2MWQXfs@gO39kXJxXmhk2(sE%I6?u zHgz-fC{nM0yekQ%y}_Y6nIlRspv>Ehb5R`1;AU}%-nE=VT_RdrW!_eZQj=`mD`e|N zSoJN$X^xi0&uN`q&G8*UmXV)9w6~hZ=>8X^9o{sAXs(vlTKHRtc-04p<{^k% z{d?rQNE8mWfcyw@6Vbj56<#$4pZa0s3&<}c{~76mQ^~eAhnz!RM{Xi_5x>(gDC4*E zHQ4OQ*vm?NjWUUSJNF&qswCt4aLkDujg;Mxuq*Pa55Ja3(OlX5l~7g0n`thQ(;`L1 zZDWQ?nBHcol{Tv0>Q0XW`OyC~cM7-&AKFkDhPkzrX^`q|AG^t7F~=(c78Nl=sk-in zm=V5Bb~cfv-otdfB3O&IvfHR`Qz-!%C=w58rBv0^$$A)9vE%W1`nvofuRsV@1D__G z8TQhwz(@54-L{o3Ko_#hvpq;{lqNOx*wB_BWA!}h7t(LYi>tHkkxfv7O@TmHFPHo~ zgLDzNVw-_%8gsb9OL|Ow3xef&2K?=W2M4id5qKXJF+`@xfaBo`AL%gzR|Cxh13N=Q zp}y=6NpP5Wvh~=3kJO5F6b$+GqhIBi*vSRLgFD!;ctnF?D7FUeJ z(^Y0RA$OFH+#WHpc4@{T^R}H3PeWyjL9kW1&KuZ_#3hWbgenslLQ#SCvk}8Gj@A>j zOjkm57qJfQa*=jht=MEmK!n+3kk>%t!5$35=rD?fQxTw6#vCpKwGNwG7>j2=It6f4 z;^a&$(+h=1;lew>(~l{=%*?SlMz?aIpPqYhTb3HGsTDS(=*d-b~Lgzv;ltzVORLlI$XxiAJZ{8r@0E`i`|gnAg*M-u4i+x$es zs^Qt@)4X%IITjnr?QsGkJ8Z79KWMm_`|T8WjUI%mMse}BF42^3iWvn^8wjWa@tBIQ zF$|+ie56qDnjfKN!jUCv_hlPKCta*ZRE%D3%Aa6MARt9w$dR$KRFJEUwW31QU!@+E&WCfD_U#Os8vIEM^<# zL+U*>9>|B6no!IK;2vZm^)9!oXbof85MkNi>EbkA>W7m5ON988Xo^QqH#yRhkO^&{(VVg z6!|Mi3i)y53&^h^8j~bH*$^^=XpFAb+5Z}%@kvL~<;Rd8Kz;~$9l3$rNB$o2EyRaY zR=%QApF@frOJ2O>Wjrlbk(kEum3mR~QtQ5$^061XC!Nl)B5^A-thtwNx->e2hESTU ziC0$Fy&AQHI>)2L=p$AyrT$~7kc#dG6r`eQ4=8b&`tcEAPdS2F8tq(G%;;{Ty1A** zwue#1(#jrRXJ3auWVANAj0V}PUbnHicp1B2*wfOjx^R>+P7sD(cUM+sGTk5 zE;Y*T%*#g-LkUiG)P`7x!5rw#iRsWWbmo`YJGt2%d3YnpQhw5Hrs3lzgKleVV9IZNa_vh!!p-k9bTRr;K+bkB1@t+je*lM&vYE*MzQIe!$ zpK>Hjtx=mD=un`(r^RTIJ=I7)9Yrk&z&$P8U^|=NuMCgMqil3#ZxcIjQ?$1BE2t*f zI@OpAx{Q|Wg}%r0!HT}KOVMgD8q&5ebQuNNiz7FPel-0`b-73~v)t63H_EZBO^;$y zFuF0^>yoKtyMKp(D7tE+87;Tbj1^7VQBjP&%mECln;~6Co3gdyt^(~i^mvzA_aud^1?(z=o&FITgCpl=V!ku+G&gy}dx++~^C>CA` z>T#*N-1%iPsZo48#@Sc$G@8zC5pNGhCA=CYTYB)*8g*CLwy45UxfP0P#w}8MsVao7^F5*KdeCK0A;ZXDLVgJO9P&j(<7dB#ln~9Se;%1YegM&0 zBN|V;g?tnFF4BxH(;To-Er$T0Gkk*)g|Inmc0aItt<_Gd;?> zPUz5Pl*gXNlXg2wURRVIB(2m&8AE0E6defMBvsbZX0+X7YR+IQ2-FHL+kMY{Dy~US zYdz$7Qo9)~d!z{^w!L4s?blzj%&c$jQ*R{gpzb={BHhKL^NM<-S~Ct%p^$aU=3 zUjY^8Zbzbk@-)byisoJ*lVa?OtK|x~-tP_bDh^i?giCjy4;= zyBMG8v~kH{>n^u+S39mYuI;HMa@T3}){#TfTlw!luLc*KJ{}@%d|bIWey+IGJaE`j~vi4_SyEwwT$1^GVPCR z8GB@T>FBPO=`+nheX4Hs%+Zh3Gja6D2}EnS{8i+~5ZOqjXS6o>w-MP&zl&7nACIC} zz8}##E*B8>u^u76hRFZyK$mDe7wuIh8>;4YXs^T{N8U!>L-NS4BEOCNC!`gVps3F*Jil4eqRTq^PNG8CG}uPPG61nxMYLbggn*71hG^{h9#FoK#Pbcenqf zM;blgXtR}%H?U95@OV}%*y}g(d~;$~i*Wy@14^T5zq;VM)B`R~EWdkNgZntzY@6Z! z4iK+vRZNUK+j|`!(r7W9C)geC^hab0+%qb+;d9KgzL>@;YA_qVPVUlxLQrm2tcE9@@uMdJMs5hA3_&DaP zD@2{DH=y76IOy9e?>Wn8-}o5X+Xe6Z2!MCCY&-$!b!`IuCs4f3Hrstf_rUoP-Gllk zfxF=#aCeyc=sE!0_F4Diz};a3xBGG6?y&7=jk~~Y1~Qbu?RIdx^?wStwT8qSh_L%U z@>S%YAis_L5mE~-dytPI>Mv-ohZLeU#otEWN3_1}uOj~v`4dEQ)VmSk_!&fNjcZ(y zaQrRgONem%pCJDV`L9SD7%ktJa9s2EK80LC{w}hC`~&1$h}JS}0I&Oy=MYx~w;T3w zyM8}zJ0Hhw=K8tq0o-;R#O>OT!0PIc2I%UK#%AY1Y&IwMV{`ohY_30m&HBAd z)KwhOizR4sRHIPHPREI-i8oS_7xf$Kh1#U<1N?INxD2so|z2so_) zF%Oztbnc*$rRF10wDw69tviUKZKi@*2T;^L>v$YR+iVndJdUDmHi|lTQPf`d1GB&O za%`)5+U(`{MSgE0nm_Ze5&0Lo5zU>cj1l-*zW)mH-w^o|R*;`XzKw|2YAqe%-!CIh za7_E)EF;1>t=XDG{t==*asDmxpAd}&u)sO-*LI{AX?0FbP0h?Qkk2Z)%>Y-&jO%F20m zBTJ8-9GS9)k9Dn%}(EM0c-`g?^S-*H+i?ahPdc ztTlT4_=~65dU7r0XBV`LGh26$I3r7c7d(WN##>$~%W2{V z!8Es>>-PGi0|^(wqug~jbk!islbjlP^(!xq4v(gzA;M<{ENk5B3lO})#Ux`kz*w_P zYMss`bJ&#Zs%M6WPrUTPa}U0J?D#j|n~$;sP-Gx8J2kypj%I@C4b4G*+3!*H%&Ai^ zJ@?XySC5@I*YnNAXfPPI2GUC`OB@(9sUsfm?KGjujB@-^)$@w?!qYE3KRn?3x|3D> zqtV68+4HLzHhNuiyGi0&YBd#3Wh_UPrP^UxnZdbfcDkr~;nb<)l}CQj$?|YvE0f}h zYpIMQ!^75A7s9Jyc2&w)&a{=`L)#) zS--|UoXc9h-MLCeg+qZ@A9-iuj*U(2%UQ-frBg&rTXS=Zq&1adY_*r-Us}yL*k3Qb z7VeAm^?CzT)#~Rd!*NrFs^X#5wan5dNpZ&I$}IBOFj3hAPmgt^h#FoaDvu>6rQZrXq*=jntyp&!I+i#m$3&hx~Q*T?(x)>{~v?yNYlS}C} z%hk}Jj9m?{_4h~Et|k*+s9ICj#^$Wd+)PSwe8gEvucpbo6#4E--?@`clc|cwAI6bq zVq}bBS*Wg5ie0U&h3WM299NFk-qF!r&)btU+U+u7Xc4JZYkE92H8Hce=yC9SVS&q~ zh9*jx#(yTgJi)k7K>+nLo#w=h#~We72OHP&;LO}|pNBoA@enrGv&*2TFA!ngDU1KD zu1@s!Mc81q)Lgf;q}!L8*!FN4*l1!m#1vJ#vHZJ{->dv?VtK$!smfRNd{q+|`38{q z7IGW;3i1nx)-wA&MC+Kffr+vid=K(zM8K?2awMo^0A61 ziX(==Lh(b5N571`hde}NV{WfAS!uDC;_PgCm9?pP>sF?>Oiir-jS-7gGn!gRa%Og7 z_~h8hljCep!MVmm+EOtyGk)^q*s;#3NcAG?{kacOR;ks@{1o+VxHmX}F{|WmQNg7h z^K-M>^(#EUIadn-)0qs-bD@`o5@Y0GUG1koJ$34otC<4GgaeT@n@6rhG&!-l`^=eB zCyt$Z>CDu(GU;%@9}K727B>=0+`esD&(y|Z{Uo}|L#SgXhF?8CJpP-RwFQtW%r@$4 zgM-wewY8_~VzEd_S|(GQ+K{*B+5V&S1!?EK5CYph{S+E*=589;fuj#ZI;3Oz*V6C**WXHdgCr*yNyp-6pBqI1vPp`NS)=tkg6y%@TC6r3*LiSc{oV ze>e~hM57T4eMMQP*P>Q5JT#!)W1PwJ=U-;SgWA>e&WX8L%$jG@OG}`_f;6EtZ|O)| z%ivJPiVj9u+(^LCfBt-GnWwN>YakL^oM#hNc0tzbai}U~oM{^u*!YLNL(!B@XL`Q3 zcWQ3_#?3StZ^9`1yrs^wVxx0Gwe}(;`p$4-jP;alIC`Vv?zkDMM@1vQYk^f z+}Mc|tco~3?^reZJVapbV_AtrvbNt0M`%zhSz1ZWj+{8o0(&dmE8L_Ygh>oC4~cpB zCAF88<<+Ti6z|F!`pOY$Bt(WVQ6>-yv|QjEFg!cSqI{D|P}F7a5lzI*^~QRx&(BR# zoU^fpP>2PO60umEmx|SEFFo3zehjcqq5W+TOap|q-(i%QG~#+c$M-Dq4-l{x5c$lsAB-E$r+v75NF&=H(u@vS)6=1N9Ot0heePTprD`o`4TdC! zM-u=}!oi}|E$&omVs3!dP#kHNZ+eC<0-;)Qrusvib1;WLp&fY`%!nWTW8e73VRv_TcxG;GVNnQLtzCe;0l}LKKzi|08z)Xq z{KnMO;o6Rl$(flBCqtPQO;8h1OXgIutm3KXkB@%kh2!7+^~uTRCg#8n4kmj1KcL>0Dflu<;CYSyX|w5o0vK zI&mh-@na{B1G6K?##XHe{30>h(L2qaK-wjd2+YEa(MmH>fRdHXXx%|_q{>6;iFo=r z`~9shn;nA|PIj>k(M^Cn-P=j)2>L^za3o``upuxz<66;vwuMvN=gyn~w2r@Yl8x`r zack1Fa;#%y@^<=;!|AX>nYB!q)$-D?lGQbB9&AN}gDgv7VxB&E`pgI)ucTNt3ttL^gAxuq40y$r`svuQ3d9O>m13z8zGfF>N!e#tbm`aW)b z?v?Y)nUgP`svRGl7g#xL@#kfqz%5Ethtxw?gaE7s{_ z$IhN#5!^X}Dq^Q2R8V$!gqtj3@=rLI<;=Si_xy1!qEQj)vPW~M$(B<$}`LsUtRRSGn42YOnRFTX<0 z+FEi+s+I5X6FrviVJbY^eVX$T$MW*|pgA33lhT!?bdaglPqC^XC0*)o zvc2l5Dy{ARHRM+i@w{&%>KAM6uK$i`ZHZRIgM<-{OOU@vYh=HSdY>VXNi@=oPhU2DEDxBszD)1WHt~W!CG86OKF1E#S=FE&I5P{jXI6R)N zu0DM|#O!VljCp{O?&IU$;5@3m)fye`ot&efS{G5gP=Bb=K6*d@W zwNDexpy9FOr$(30ov+PIo;vx-T7xA}o0XIWG6^b#SZhRMt+P-i+VNwjP7jZsHRgje z$Bz&5v~&hXa$4pBnuOXY&`R5gW!UxDPUM+0$6h>f`poHFTB{ifHAaP3c2*_MoIy{V9y|RB;4_sTAD*0}-QT=^LlB%!heG{y(A2&_4P|H& zdTt_y$Hq>dIC*Az^yL*{?9BL_lNh&eYAYb{0{{@t(7fx)G_IOWY}l4zYVwnWPolp1Aij736|fqzV%(NoEIB*RV|t+jyS55V zTXtT&u(Z6IhCp+a>H$=snCRM&ZQsoq(ojy6(FdeXjCUo=I>$Yfusvz2&yb$aOO)mmzr z0{1rQ**tc+wstwpcg6|wX)UbOF4eB2)kK3}D%uUYkG@UTf`ursPy@PhDNq{oQX7&M{L>3T2xw@D_M#$QBzA->j%GB%&fN;ZK@vwj=nw^ zguZH*CH)1{m{)Y9ya&`x@bG7mpGO`b`_}=k>?`ocoY$I%M-buV8RQ3%pF}nh;iMmI z{9fb=@=J*N%Flv_@~wOU`AtN2Mft<$ku>rKatG16z>PI$&w`+hEcFW-sUyF{&n7WS zb@=P36pI2s_R^l3Wi=#VFrA+2=?e-5tyGFHoNTe^Y(O#`CAW(bot~ImTQ(}mg^oel zj!ew0tm$$CN{HeeW3#0>c!5sP(o*S(k;&Nw>J_!M69Xe{c4~Bb4zl97cu{3-_eo0i z-Ko_1rIqyD3=Pw=*m~V*sXC=Gv9Re#J^Mq+inzF_tIk{RN|RCrGO>t0O=VM!t&b57 z8>XOu%6?02l%P_}5t=F?1wvLlIxqlztg9IxpPY0KP;XY!soG^#Psf!vXiKSn5RM~8 zho0y}iUW895Z6-mQ)4hH?Dl6@u&@#{wUTzcaS`pllIk~+Kp<0x`HW{m1FV8ls`}X2 z*zoYk$k+rp!j|PCagMbMucw#%sZhU=!9Mh;v^7|MRMp4MoH=pg%-ETcPso_dqf*O` z^y{yu{h@S_MNTTQ_^Wm@$fCb`R$_SgrQ^d>W2Zm9!jps#E5v$Dxnw$iChy1-$}y9n zr3~3N@v5gQ@xWFSZ*|p?daWD}5Z6obB$9#Y!|zX;11o4Hk+44{k%sL^@wnAhI{pSd z2GRp*-g84RtSTR9)74Ji3QOjPiuK^ zXjwGGO!Anbl^TF7`=D6fy+L0-s7jggpAW6FgD|xj)yo7|v=d#OhCVwiX~K|w>s|ek z5=)(ph5cAh$h}fSFVO_4X%!iEKi*b%Tv|%Uf|SV`G?@@o#nm()J%}&kC%u~#w3mEWa;iB2hPR-6s$?058se=#x zfL-<;s6PWH-9r8^M0=oW|5L45?f{E|$Rx6iTty1VA0SaMN$ZB)LVg`-0h2}%^@krK ze}HJL=wCv_+rEnYHuB$)MmU=M8=4z&2KgT3`;nKCc6HT(jMn-|4s_HaKN?%e6l;2N zba-rZT5b+t%#9iW&_++3IyHPsP7d3b;lf;@96fX5XK~Mor0eWX14?@ngqF zCr?#e9LiLD9Q0t)lP5`U z>6R>{owk#M>r(bkW~mXP!4Kq`hhU}2q-_@m0aP?m3`XkkXcoC`x(*6n%YKf9jP2%7 zSbC!LCke@aZd#4&qU`993&l7(GG#vp!PnA3LMPDrPV8^;StRzmIxOSrNK`x>l?a6A zu&^)<4Lwz-#EU~cx90}<=6h-5?MTd)ogHp@V4~`VnMd)Yp`k%mF^Uf9na}O_cchKK zBT;d8xbep5U6heT<6th^kn&?UX2s)yH8C6=Oq3lS8J2WxBsjWdH{uYSjYBb?-S6p^l5#6MH&!e;H*DVqX3_;Hw^Zy9%d|xtlp5cY zaTep{Z+u{YqNvo7q}*n(uJoGmZU|r2s33%kk%I$KY>So??F`Y0V@y%hh9M%DD8{)V zXNt6d9v2_L?m38|)|rkw;?Y1$a@IK!}K(#U^*__ zY0_4=urO=v9H5t+DGmIU^TcJGCmwt!jqt?34yOJX@{@?T;yvVR$k!3A=hFN9IzT4mn(X)yLk-RkN**;Q(DPEW6ljvGHo zQxkxinV+24b(IKN>2S@Dv#TaMvdGS7bOu@|Gdn&$B?pM@Drr&e5fDxr2M7bM_j^F3 z>*#9ERy-gbdma#LAsxjgzeFbx4@d&b-9EoZ8Y6o+dhXns+#YPNaHmJqW(@~#rc@Q) z@Axp3{T19_Sf*F)T8P%f#2XBkU>JK|3?(=T2 zlzj9&ZiX(7WRFQ0`Dt)3h2?u|R+3+d~32ttDQgz+jjMH6&J6&Yc5ee3{`<94GUOcjUOIpB)ZGq7f{*R+R1l zeX~LOU#c65ky)bfGjqeIeKWB|OC}E;@koX|z@V^zSV>$3;eO?VV!)NsPPs8gCufXK zPy~?8fLmG-2BCDg2x2BiTveXbj-9Y$7?e>A+$0N%W8U71CLILVBf2u!?3U9rBX~eY zr)C|CX%(U#vam29L}Yb2b1<+~L03}q<73B1u_ihkoh*Ty$@D0&j)bA4x~q$}2x*v~ z92uj3OTG=+E7yWVYH15|lOv-f1dwTDeT=jP=*+5{PM_0P^&&ou=Zr7*D!3sm5qEop zd=>d+wl%N6sUSHIx>%0;lbnn4`DWNWYuHa6044>gIYfbIm!g%qbmmOiaurlk#P>I=tQi zyb{`L(?Jg#Hv|;+aJ~Eu_>7ZTyFpk0m`Mdf0o>0#kXrSed^V=rcjiplxo{p%Oxjk{6Q_@jOfN1t zDGN(|h+woIy9(V1fXaGS)?Rs0s)s7hg>&M$l-=-&)CnSD>Pq7xn4FXeArz#Gn+}_X z@wArhezuMsc@%%w$MCUnd<^Gs7_3;wj={bs=bcVSBqMv$bBzB9rTe)9)j0*Oh5`e= zKnV3+|J3>OE9XF!702n}sg?BPqWzkrQg2QJUNvz@b2Jhd!1ZGykuBy)j^Ptym>6ep zgWIibQ4O$hv76fz(C=#CK1DpuUIcRH#t5@7~5?C-c!{KldGJ0n#ab8 zFjQ*9rN9rEET0)!7OiwYbqN%qwDdgA=-N{b*2;~>Mf+PgM`uVpy~D}QDtLhV(N~Rd zB78%+DgfhzNgP1aJNtavS*?^6wGN{df`4c;TNx9w8b#_XmjlrkZc4F>|i6 z-QQKQ`@73_|HiW2zllbJ-M=pq!Q_>}@Q;x|UuF64(AgGt%Ixa!g!y_1>)2SgFB~ql z*3Haxd+Fr2;y^pq69cMR*@3q!5My{%tK-zElV@U76~3bRho{w%KUA+~h$WhXp?j(o ztPx3*RG4yi$KfY%KPnEjae~@H)mA)CD3)#<{4vjlRxAQjEh;Y%7e9!iV$Kj%s@V z&I+tjDJSDLNZiE>*ZDMWXIY^LjDlC?CzOx%S8Y43d8)hsL=|?^dX$xmH_dPlN+})0 z;HS1`w``oa@J0Kn6+eK`jhrDXFvnXrv0?Hc{zq`}QigU^2#sErET&{|AsC0i(m6XP z$eQ%BE~lLrFH(b2GHl@v7t?_b zIN7n<))j;yUC!$SO8Ze6bo|w`rvFH=dV*0&6^1-^5Gw7pu}3gt;nma|lw4RUIDlU2 zg5&x-VqCfl_p&hjleeV2 zU0Udw{?JF&Pq8(y6euLaAZj|>Gh!+8G^=gcrM`tP#DVL%(3oLi(QdbMls)Rb`pP$-$q^bF%TR#v)oqXpBh zrS?koVXkt}UE#WQ`!+onLg?VRMkT8x)N_F~NMF_uQP+iWU<>u+`s)|zf~?>j!s#6| z2&c%@8I*qrhGC)rZo(PsxDv&*C{jjh;34l^CtFAc zVMz~RK?~i?N{77VC}np-(%AP&pkl5#Qx`50j!LQ~K%!ELX->pq-mn+|R=nrN%02~y zhidCs5|>`Ti2BG_RDBZ{Kdk-uj9LVJ1!BscS8*&TQxtW@a-Mtb;tDN0M7Z)nmXlV~ zp|05LKVh;_&suh_zWle}@dr&)tHfZqXT>4#aWy>!Of3=ewTlWuVUhbG+Pi(2;n23< z;boKA3cl=2eUjixzKH8WjFj{86duhl4t`Mss-CSR=#}%lfO$?i9>WKDcX&`gj7V*p zVGjOyC}bN{tDddAyCU*5?woS2zVbSNr8=zAO=D9x5m$nJabG~WO?KmYuw4kt<=0Zg za~IwrT8Olw2Z*O+GA1wR-;HM%aDCjsj9yRCRxV!Wbr_eZvcWB5E~X<9*j?04r$+Ww z(npoOeq$x&Qzfz@nM|nPL^G8t305hmN)5nt`F;59ynRzo(iPq*3Z~nK?MhIMCN}V$ zzO64hsOGUKU+J_`8_*W!Ize;~6J&-?YY=is7+0%#5hq^3#l^IRm7JsGmLoR3FpKSE zo+#zBjfWIvc4lsVQ7CQ)Z2>A}c8AuOs7Go^hCB=EqrLzp+T(?Pn%`eS>&RcNq}?Ti&WNIl5as{LH-@0c@&4h zz##H56(1n%d6?0|ugmDHW?l*1qBSU4aZxZ?B*YL6xd0T6 zPK7EN*)cFgJT_^9VUpA#J+R`Pps4<{+iFYKD;t7bCj~$=u zIF4h9lqhlR*kg(OICj?FjpM}W{r+BcgVd~@ZRt+{)$diks(SDD{_p?$|NjpNVW{{# zfQMT>wWz1{C8hOr1_E} zK6RRsUNDg4v?76_^ztL_lynGgD;>+8gHO zlf4G=U7E z>=ulHMGs@Rmr~nl1oZ)}Fo$YYAH-Pubj!>502fiGumB}kztLtssTBL< z`c)s|E#?=Z3x**`q!y-UvMmG-1S~F}w4FY`sz+`9)(2MeAr9lPTlAR%s%Brx>#9~j z@5APYRW>aqG9xm+LSrnr`{xZ!pc<3emeX@;7&Z7jATG8+TpV%_&hw~3iK*P2J9p|7 zKE?)JG(4NO7YfA%VIeOP`e5$p3BK2va9rWq3NX|FmV1QdO^GfzamrN*48{ou_g$I? z^-c*XO3-`o1HEWU4~jVWIlGVljy_T&<96q;0K+Ma@b-BgfKKf?S#y_F)e6IyeO{Qf_|uS#2?Ktle3KV3+i!k zpDDUXBE@0(WhdZAT2|3Xxt$qQ5}t~dz1!ECDwOvqkNvW&Ge6o$1=VOpMbp$YnV~`; z5MHYXsHJ|1aw#j7=vApU4E1*2!`~{G(~=mgJyb=ixB7LwojN@9R4UpRkH|e(I|i`Q z#<*zyOks$}VO`(!b7g%{0%KMGlCOeW-$Z0Pd<*$irpAXnDBkrjsWDlShh!YE9ZKgShW4jru%h5On3!U9Byctc6!#tfKD;kln$pS%RR%lmtT6Uma*S!dWjQ`#5r@aM3=@_Q8byFvtqFHgz95v|vb&qBS(=GZ<390(R6!1rBoVV6d-| z&C1y>l+rBiVLQ+}ESlwW7hcfvt+_1QVNtbe;G|*t4r|!4X7Sj82gVWQ}+Fq7EWG~>t49{v&E{}f7n4u7} zD__~zZcm>MSiDbD&A>Ha#PwF8jfr02fp6M)>eR`T)KPO>+rq^Yypg6`+1zxBkR31F zo5!ZmVp$$j0JAa9K$R`{RoK0B(q_;JPYzDRQ5FMU(O%H+PY`+L@Dh9ZhN0Wbp~o8u z@WozS>Fr=NW37=k3`ea)eeGOaZs9uQ=tu&k5St-9ITVTP)BR0JtPK2tK3N&SKFyJBK5AoBhF734RO-$QC~6I%QJ7eqe5^7qjG zP15O}LbAvKmx%JM>_g=Hv5bf#=?2fl%_<+G;v;?y`8`B9 z_a{gPc0U3PE30q{)(<%Y>lMj?g`cZ|Lj6Dk46p=-{UDlb7OKy%A6q-kFP)u)=EosF zqS4Sco|=h-*t;dG-$2IEkx8DR`E?45A^mcVG0QTsVMT10qBqBW@~&3GbZrF!YATyd zk57s(;84TH8uvk0##?w~JX`H%73+}|mP5na9UsKqn7*VwXc74OfXz6}h;c_pKx$(% z1A%m9I_G0mVm4eOFXqW@z=Ar9azQsfb>h@%x+Pr{2?ie}RxV0!tBckMi-W$=Y%Vix zFLlvker9~qLoBIn#kJIy6r|6+@Ay)8I#mg?xA7;kY6)__Eu?h#M$S~x4xj!E{ za*Ue(N{mzSQuIwy4tfNMF$#z-t5OsP@o>;ZMNt$nRN=Oz(W)h%#;R6t$z*?k|N2bD z8b#3$I28aN{H~gOH17HdD$>&m7$M6nvjy}{j-UV!2#7dbz!B)xXr=UwrS5!GQVC4Ny>tzNJo z(xhA@TvfYl>l82X&ba$*`XPthLP?|AThu>H=1dQsO)CIvLioW}5`R`6Jg zL9cN1827B#Z{DWtoDQ-4tYmot$)untf@d~ zW83rjj-Ln1zL)R#cO3fM9N)@0HG;5Pa0v=EM>r>EAOcXs&^~fx@w6G#Du;EP0V|-QpokIQ9HMXX z#~0-Vg?UfZ4dL>flM6HP4~VG;k(=ZW>Nk%Qy21R36QB$yqq`IQpf0a|3_BL57yHAo zN?Ggx0BdA`qCpEsPv{g}k4w-6xE3dl;u*%S4F1R1{QNkG!h@>8(m~N3MK>mk8J{S> zt4(gSH`GZ#E!cO^)a3aW zO2LL_UpO9eTq2XHgsGRdo9Cmujmz_u&qI+B59-dtvpoC4Vgz23CS%#sd*Y$7PJ+U( zBbS2DX_y*nsjhZt-}8$UVrhy0HVj7mV{K9)hQB#4?J&H){=ton^%AF7S7LF-xMQdr z-1eWwq1w~nnc1cNFThL3RMb>R1(I6cQ9os4iU7Y2ZktztFs!xB%q2_A|pkIsnrATdF#wej$eVVIzk&RBK!^!?=!Cxsv9MWO?FMd!xIDhBK^D z_F~H+ybL9>`4J+w(15)0-FrqShIVfl9-Gpmt~Yqy93rwAUr86wO|CV(S?Qx7Q}pIE zoocEB3L6?44vX;RigtdgO03X1wMf8hM>!S~+(*-Z>r$3g03Tj(-ltgv1{}Z|f>GKI zCOl_=kH#NUS+x$K$95^ZliI?q^>cIlFp&ulGF!Q^f^t-)Y|OZ`$~8sk1!F}w ziLp{u1!l9%fS9{@$3PG`uKmNSR3C<`!O| z%JWaWO~06d&CRNPCN!iL;Nhb95Tu^;#KS0(fx0|=E~nQJ3|hK1EWNxvQ`66AB_hS` z$FVn+M0?X!xv7>`UtRV3J>A*BfM3^u6JkiJHK~lPI-RajDV~KE7%pMe*hf87NK>z` zkB8Qe$2av@%G5X%`V!})N%WbZtqOU{;~C|7accDUtAghKa1qsAPRH0mZ4-CF!rDX? z_fgVG@G$jqn>!h&1rl$Or^{8WMXwFtXhw^#wfKYxMO=@BZqtVqRnfbR`B;5}6SS-% z1eb4Tr!or}LMjs2qons}2+wAQIo1_RQ3t~?a2@bZd5-yi#Gecre z5;Hp1&R8d&q9v2bz?IC-B;cG0{Gy$BcK|Q^;j<AB*1(uZ#arWZCELK%R@U90 z2IfA82v^0Gd>hev`)?4ft@Fq~L&PzEghas6eTZV$#4)#np`*wTA+I98jmYm=Jo6`z z{|!-W?K1M4$odAoWc*}^^5CO1ed&dX@$rd?N9u)dwPaIMqodZW8AJ=%mY>r=RU5T@h4C0PS*EgiRwc~U0?+aJ?zLDXb|>*aQA~6+~fDO%30A$CSpRmMkAC0G34V&l4|>gTB|7BIcGu zn!+DWI5qxG)=kWzjV6V_0{(*$9*Fg%jr(SWox zyKHo{#~V?qH9uHSjYDb-nsigoV1uJqC(Gh);^mxu>U2IyyZifbxPSplk|a={s6Vx= z#Aob)=6L2g86{bU`s|H8?Xf_JM|u;gtYJ%o`C!aV7`s!`z@bA2+y&-U>iD#ceOmFs z#HUgz)k_^SESYVRGa}j8)x%@(j2a{0Tjm&B+O4a8uEv5v) z@=jsKgn=#|vS)FLOB_F*hfqp5$pkH;TlgFp6fYH1DP5)|%p}V-3~?hL@KdMquB$1? zpN<1AgoSNC+DKtjK0=7o6bmwK^T~rz9=2C(59ayOki-H`6+9si3&s%HI?Dd)SPXDpt`vGevX1mu8v-Rf zPrjA1OTg$x%5(aynw!*=csqth&=epxr8zx;vjSBwJ3Kh}$jJ6AE4xICRAcoFeGH_b z6A|Y=mKohU8K*?DDZ#_8e&5#40<`2!rqc@<@>tOtZ0)9IdmG@7;cE<~8N|x>nv(R~Q)JT9j54n9o8yYXag+_QW_;ByFH9!;gN0S_cJ3 zccs#k^}?(N;TKLO^Blv6{+h?ByD+#JckDbZp(rsa>X3{%&LUg{*Qwg%Joj9~;e%Ak z^JoggkUM_cZ8Y6voLnlH;JKKo;_F>ay$26A96Wrup^zWmz4LHkcydk`ky4^@OhObB zA`#>*4GcUE0K}!jHsKUmP_2bLAb#i&&xn_!Q7YvFeT{T-y3znwqMiB>u7O%X74Bx3 zDm-da#dW8rXWgJyxbozn3YDr=T2jDsp-}P$hxZb*VtcAV{5`5Xe&XB*eOC7~=a=Uq ztqBG%i`n#qzkcKT)F3ksJcB?1#ZIm~ni*85($>dtrpbIt3ya5OV*qjZD`??)L*4?G zd{hL>283rFbXt`rOChf91>7Fd?zo17_0GjZ%aQMlN~Tb2JlTFWHlH}5tTYZ`Z+5(c z#+A#awahADZ)LM=BiM;xmD+T?7uA%gVA=^r9Tk#8Wi$~q!8wua3wRnB6aIE%12i*@8|7_a^|K0ZE;MS)`@ zBinoQ+u9(bd@sLZ9bVf6r!lN?p@3o5%X*z_nkOe&j!I>glMq$`b)xCX$$}7pA;i&U z+zJcm#WR`l@yY689d7`KOlqeEDbmat>9j0uRN_;y!Zn7Y$WU%5;$Ap5RxtdTx}ydR zBp69~i7N0TH|ELaJl{|p8Xikek}S|GlRi^9DzGsNHex0PnV};{T1T3ugAJzq-jOkM zP1`$uf+Uv3^xi4Vq*(j70*x^-Xnugke!^)ueP-|E4CBo{b_}Bw`R7VS%!Dozgs%iE zX3dYv*w0Fx5jZn5LvMET$B+L+fzT`svU0hXsOXXmFDx=^EXM(!LSdnlpJi-f^FQ*_ zFnlOBJWg!-qzx*tsx=jA+?r2coun@Bx~yp#v?Sav=E`*iYsJ|+Hl}0z(;g2ip+cV^Dp4$ z1;UhEyaImHf-jXuud>ixC^-WIo{AgfH^Ka-VWondpFeU08%8PC%OIr^ zi(%6(i>2NHX8;cY1%DCHrt9Q2jc<>K1N8H%!M~IDVXUfSDiQHj*?g-a)VN@F->F zT~*{Zwdu_{>SAW*Otesc7T%nfNV7LH@YMBFLB}x>IUMVUSmANNP0+>p!EHaB%S7?8 zuOQNw-b9v>Uqi&h{vq-ghz&kx-dDFJU9=G9EAmkHD0eV>DMwipvpjR1{3xJNk#bIivk(il_ z#qPpFLnIz0ZJnuEM_%$3_QHpTQmMf%9{k+r3r?9);5(v@QX;0c+P?kDA?p1I%|AJ?QMcn z#V@{qXRSk37u2zxIP-~Hh@!P&T&Py9G8&@5{0>BSW77T7kuNm>)F_$4t7xz63kyX0 z^vaxJu*FamdYrmR?uXoCFW|zC!Hf!A02_p;I)K>o9z$p+Ej1hkiU~^q1_T}D#4$Rm zN5`f=7mfYEu8x#0&dpO$+s!f$hJoL?c}7m&uo`Ay(sT3H9AO!=*gaq!iA?J~MNH0QI09e!o&?W}8Az1ZHINYcxVbrFjJtcd8+9VDn62<(7C^sVURaA#wP zCr6(e-E?cBY{gM(aAr!l*)83D?rEySknk%xZAE>T4$YngVXZMf2zLTT|CYdlJ@ZMo;zSQd!l^)l|=VjCvsUR3@|F7Nlls${XA~ zHa$o0Fphy#2olLqZ7P+hR&QrA<9qOuYmU08d?L-O%J4jTtbb*hyvc@6riP}=RJX&k*UIx7q=MpU>O=5 zE_jpKIhChI0+(KFy8sl+Q7XhO{KuzJEn8B|y9*1Y(UDPBD||`fdTzs_ zxE$?h5d#p7E*?$v#T-*ZrZe6wtCE>%eRrB&EVj{ji>BbR={T~ql8;ecIzU*CDz!H8 zLR~MN&5}#J{^UtA0kz5(kYlD;pwC|?1p<%zj~cgKzL=h#-VVB;urO#H6Nmel@x%KT z_@x}2(*1rB5w86kMDb^e#r-bw=g5CWl;=)4Qfm1M9_9BvNCx?b$RXrM5&5rNLH-!& z2KzpN$iAjnU2zD~5yi_cAs-=|!M+LP2atb-{A*-AIw1hQ9 z>gOaWR@U4435i%)&(Z-lY^&YkwQTn-+-ce?0JWlbr0M^UPdWG+>T;*s08Ti49b zTSCq030PUCMA`6m1jsH=rV5qruF(`j+wL4JLm~7|j*ZUHGqL8=b(!uhDbZBPBMS?4dx6TL)1ofgZ-rl;+0MFM+yzv>ZoO&;aFUJlfYo2dz~#ffyqh?0Fa_ zScH#GNYTYZR+=U=3UL6W@^z)#Mm@IQh?=gg$Pu$u#_rwE?U%AyN)L}tWw|J>3;c_l z95+F8GyoE`-?ONTZAXzKhP}{M8PDvOn_VfLNy8Mu6wc+*s6AIs+p&lSiPul27U&47 znrFYVRmLX{Vkam7L*vu3sats-Q^aG3jY!OiaMxfM^-*xE7hRz);)TMe{JJO_IjRz9 zdJ3B;bXCc5BN#DN*HqOC7`>ba)fC&m->)>A&8tq36#mlxQVCUHhLIx7GB6E=RFD+d^nHldv#%p>BR1HSME(IHzVi)4Iab!Nj@4ee{|j;$`4Qyv$WJ0G zSZ3&g^*(FxxBo!R9v6n$3k#WC$Y9sP!ekCQOW0K?OosT)|23V>32n#Dg=20qcGinO(Hh#k|$ zr(T*Wj z@3*eTbD4bLFPUVhT#(Q9%@)&mj14c;ftg;p9xXTKUb0RCn`YCF&F@a(vRfzxP)Y=n zw2p!?#;3(*2lRPemV+=Ogn?D}?|A1nSz=gNQ3G|sJ#}(1&*0Qm89UI(<_1-TOnlXy zJjU2T0?xD~1tVx%xc^%W=*(mqXyv+GpbxgZTF0kn_Uze@#}GK6I^g2su|8BR#F!7yS85kW%V7QpA_{LnJc(sRA zmAc3ZTQl-31-YP}3ZKs%1qZOGazcchE;XX&z_a*Va({XXK*{Hi2{cqk*Jf^C2@mPX zWDf2Zv&mUiv=ltXIVl>9&#|aNmx2u>hT{-{Aq)QLh;Jw#C9OJ!fMAdjuTq?u>o@n1 ztH-1fR^t|e3ojg(MY1&W4ui_;5mH3faSa1R{l(RxCix$A}3}IY%W{G^BHJK@$M-pQ$S?^rr1CF zXuYY6kMk3C9qfN0f4y2x7x5$CM(!fg86QLBulLi)FCzDlZQ$z+qC76AkzYgpBceP8 z%5C*2%#(Cr}Vu7#P%i;-S5?SY?>pEX=TpgHV10~I9kNR3# zN3-Y6Wr)J%khKH-%Ov$`#Yr%dtY1m-fdn4*d^=^tO522M2A zVGGos{q+>*H!ktUOasc%`+#`-mDn5+oam!r<5|a# zo>YJ(?pl_)gsMmpS;@FHHpCSSteAmTI(p<3Ucm%11g$D($EJ4x$hO*1GY=P$vK&((}Sd$4+Hmb=(97=eiCfer8%GH&J#kRN5i8u*Y#um$dC1@Pd;ZbRmCh*E!UEDGgiK=#c*;RARv^9z7xaVt&vPTIir4U#1NM@0_dnQg()_AEj$7no-RmlI$aWSEr=R^{iMp2N%AR9_c zLn@Wh01>-VvaFoOlhjd0)pjyt(dd%=p22LI5+Mr2hdbk8XQjtv`Ztfovbs=Z1-)EG z53kHZgNR+D}L3F0EJI?BBK`EC6JpC_MH?dBy zekV|2*wNxO!CY=mhB_dKco`j1Mi~Ai=`VhIZFT*|<|u!?pG6cW_XkJ^xT*E_Jo59% zuOa^pc^cgGkZ&T2{S|jShkOB1jL4rN@?UuzQEt*_5fAwc(#D0k_ev{Pe17J0xeX0R zj+|Ir+{!}-op_*Zl42%43W5wrjvhIwhl})ctNNO#O1?86&ppn@6WE2Bhm!pX4{d&q zzvvhJ%!|B$N;6s)v$yFt=$gllVWN`mhEq^~KOJU(>K?Z4gkQJ{Gn|~ks6mVBMaz;_ zzZMy$ut!~mz(rU9m7nC*1h829(>gQzjM0pIIViTWBY{NPR;!Y+J>>nFrN z<*4d|tsGSVV_b_CN5L2#$!A~LlsQJo1q?fhJzbd z)HQjVs91ba))^6WmiX{vCKmTN5@r5-qq^5K$-n2}d1#v;%PEDQYW)#^Qm z0}q}dIyKMauPso^D44%`vosMI!PC{ ztkdPwdG5%(2imQc^VtCs(POJGy_sx;?7@b&LDr~cUO8{kZ3KtXe9M+2Z6uYVf*k*~ zUEAQ$6dl2wj31ip_z{I}k&1S}UM?3@mTpN%(o$P}+gYb)v)oq3M&>prw z1m=7eIf{G*`8p!M7v)&_1Edk`kzbwito$tU+eiTX89_dcXb;GbkS_2?dzUE=_m>dG ztSJYps# zwb##Hz@NHCiBRI}-~Hq7e*KLz9Bf-92+B`iIP?0~OhL8+ZY6aW9fG}-IjVETaGR{O zbaJcoQ1EW~!db4?6PpV##Yr=VsYrl_Ed*}EjZ((WFJFH1LT5Cgi3n}Wri24i0Z$~A zX!H)tTv5Ui**JHkuZhhY#HV}LJ{5$VXP$$vT7O;DN0 z1NQ+KF&}siXa@7yizj!#J^K5%A9?Sac#QOrvNPn2zdaF6wzL@Ci;BS{D+}rkU`Fp> zskrmWCwJ+RkG%Vul9fk#ogU}yTcKPMhhWu&FR79q189qh0WRoYap$gGySc^N+wQy; ziIhINm%RT``ki;Xd+`Qt;W?9sNF!0Bm`{@ANPflf@xeVqL+`%6^PN}kyat-zyPx;& zzw`DOPWY!=v|co|sugK!av*6cLVJu1;k?KeY3V7g4ZU2>b>Dt_Y&vOCkB3^T>0gmb zs%Mdo84Lf|*vLq_(14zhok&l7^bYhzl4U2E0eAtb%STPE)-tTepjeMMoM=Pg-u(~W zdFRfD8Fqf3qf42hybK3e(jt?SP;rIvfa^bW_s&P}zWw&CyB}tA47h3)g0>>D`(mo^ z)5+w4$OeT1iT+~o(80U!tI9hCnq{N6=vhDzu-mVD@4j0O-m~v}F)kB%Q04IaNB2cv zFxE{KJvCBFV9InqyhoJ}?dbjcBw6vV(vkwTuy*Vn8QwcB(wmFu{n$>-u^n9`V&8)l zjdmxZ;VR()=*l89o}Qehy=A`!_l>B922od&;dMUzgR0at(wK-eXL;w6qE(#O7uEF;3f`-s-K{{;DY{`?t1q76vCapuAWaPsWgH@^OL{ko91V5di8rr7Wk9bzVQviqrCdsYv$)S z{uVwZs+`Y0wbB(L5ww0?;Zq8Q8lPexKK%Y&C594p^3MAY6DIGycT1aeiZG$?R@MbR z{P4Zb2pFbRFFLXox9Phd-OKVOeXfLKjSU}sFm?O(susH0#Q4I8_h&(3lgY)*+lEPb zXZZK;Y`b%(t)1wjnDgGPTP!F9#o=ma5lzxtr8=sl%H2Kh7*gf_{f|Dp{{e$DBafTY zr(gQ=m%BFc8z0a6@cw<9|6*P=1XH3Zznbmp-AlWMw!U}x{)cz&GfKxMMR&lI_*-hw zxl^j@eP}b_Vo{h9ziKTqWY4YV+=Y7|-G6roDv*Yvb(8Ii>(O|6I%CiKP(428;L6c! zu1Zy(WO?qH`T2YIN_&UXZ1Y@WN}xL;KHcFm3Z?PMaGUU}u8=IxJSSGPxOXf~@FFp| zhAE*Yj0Yg0;bpsCOm47_afN<}Wch?&HIs(AV2nYP*itOZlF4^luBUm<<)KC%JK8%KT+Sws{+ z_E(65O;4Q4zd$Y^{}#E2{0$Psm|Mk3>pbwdzW%HfN1^2#XU_t2VC0#L7lF--7tg%% zhEXrioqP3bUw_s7diLxqU;ElC6cm`g@>TQey2e*u{nqQRzRJ1Y&^e@*E-mq6Y3bTE ze#ngR@gI+))#10c9_HqiS6_XMOan3fNtb!`8=axhW6a_@urBz~M|WRC8LILxI<}_y z&YgGfe8ekbX{?OhW{!atlSu3%gGf6NONgk%AS6`*p4YhvUkfxuC{{Wk zg&kT#R6J{X0$y(4zO79DxNT5Fi)$9Ne6~FT+J1z}1FOPA5KpU>o2VG7HKayIZ{7X< zJDu-iW@256Izo7>?Y?}_~x#Y&00xpV35Tbth{m`V#K>d+o&m^sY+ z6Pb)uYAG6iC7i5Rn44RNaH@Pz<>cbYyzHh@H2?z2YY=~ox7qJIVe$pd@=hFM7eZhL zZA%sOA?racpk~jWDz5_0a+lT@7Z>v`uJA%xly6fw_Ap^1Q-knVg^!&)ZLzGSplJr@ zeZbdbKF+Q@f3z$Xh6iGh(3Gqt{Cf5wZpF1o0gdXZ3vhFEYOA+O*rX4Lgh7Yay%eqT zu`d8QKyysD6cGPF=^AO%6h3$mI;Lu?Q1KU!YpqK!FdBCtV16ef;5^m^^E|m?$y#{v zxGoUkd|D02e#~>k{1<_?;Z^D4sF#))8D2q5C*yllOus#f1CctcNETBV0JP?hacxoo zs-VuQZlQ|C$fnX^PRUK_f`OLRG6KfHGw;}E&j$K zUy0L>+DjYRPdk@X9|q}PIdi76w(-mvl;JZZ(mHoepboy9U%&Ob|LcVd zufB2iRcXP@3E%kUrAv>3(^A4Zn(p0u|MuIr-$Os!L1L!VbySPRH(h}XG19Rk$t+F;6gU=aNc zR;aJnVR6J6#R>_3{H`;X&t|u6=BgjwXYr=8=8a>Mt`+aY_zuFMbSP)X%l~plgN{;V zomn4#?;|n3@7d8D!~dFH&Q15^gkM{iBka$ ze>$W&wE-cF>1_O}_*U6OwchsZFTD6NILYpe)icuBy*?ai;cOf1Tet4M{qB43HFweq z-KOf4?9$OMyrfYjc;$bMTN0!KgY3>ec6*+Z=JXo1rDKcAm7r3LB^9j0T3X$i<$$1A zh^dDF2SmA;PUn{+0Nijzdk#KJ@SiD$E!L-ipmxk8CW61%KVWR z@ve!2>A;Rj`0w*XpZcU*#4QOgGZW}OwlS^)D${=n4+@C>f?zC z@~{zUosICMIc-z;VYJt~%mS%X4aa_e2+7u_DFU+R77Onep>dvLEd%W|)q1qrXu zyke1p4NPe23S7csyLr6=b22Z&9ul~kQ&MpeDyXhV%{*pFlJjyKHj5oEf{{U75dPgN z87tx)TIG$TEi=vfAM^!GXPh#Odlseop3EeL6RqD!c$5Ei;PO!@A2cnCX*Ewly_7OL^ayNodVR1yRiE zSTO{glSUC&&CXR~l%{eyb9eyzpHwq3 zNm-7WC$kQxFa5&q@tAq_6Mg=1ay<0cv4gqcj=scC**c`tuLqwMdnkLwFCcf3^FA7qzThEWP-GNFC`PYF&ySY8rh4Qy8@r%;@tN&+Nl{poq^h)fT)jyueQy z8RY5^a`?T23T2T(rqV;?j^ed-Yw$ro@gnVwaTz_1I5p#~9LIw|q|ksWK3-#KV0Tz< z8+M1XC%<@jp@fxKY79A3TwBfX%2AO*AFt=LI~x8xL+|AiaK)v>NANW4&PZlPL*Ff*;u6%N1C~8iL+eIWTVaLt&OiK6u0^mm zLqj7|%IbSf zueo=RNqrR8fb6tj5Jhrs>ndKb!CCcfT-C96sSgrWix!g4zV}{wYFg)0;knMn30NW9 z_V+G{5tUCR=pg12+g{c7!3XbUGMYzCVf^@(md=R*!s?d5lz8dVIa)MFKPT9CX=!OX zhf2_8;$WVrI|7z`8BvY}<&XJAL^jm_gmi%^IYjo*vq%kN(%{Nxkk^slL;f0xfh*sS z{2cPTNISTaMUEhfXZ~|Ud!Ng%X8;*NHsZ-6G=-m9*TR6_o|&R)9H^{qEtRsF?cLL} z_(2iMv#Nc9PhoWL`1WqtYmRhuOpsbXQy3mLxvrQ-*t-{ZxQUUWp)m?>-@dIo8jo)` zSg)t$Z}>7nB*j=JlkxLbrM7jH%k^{#3XmO5YR+T6Pf?4uxi7-15rQ}~<7cZXm&;-G zg=m~^XkIW=l)7Fs;7H~X(o5mlTuV@e=0(^bp_~cxwkWSfg>f%X7@>hYIds*MQrUqp zgF?mW3w#2+P2ashI&E`;3JW3BJ9V>aQmQ}@Gkz3$$RQuJpt9fU8(1Q4Qhh>8mG3TuLY>64l>C%Zq?2Qt70wQf zp^;GD_HdRSNU6LnBS0|u&N~O(P$(4cRE|fJPb$lrh7+q%8oRi~@gG^622`tQ>vPW) zLTu939qBAAD7n+*wAMgks`x}ZsAXs?yWi?(NMJ3rKJ%H+G;SXn%G`N3eK-;&X?8bC zDpl>wgQ{c&8Xo@i&b{-_xm$OmVdAVpp#r|8vm~uG=O+~c3tf}AYtK`=MjhwUtq;O9 zJdT*8P#IQjw3)s5G)!p=0fmEuPknmVo`cTBJ0FDD_%mK87EE@iw3W*VSjujM)v4Z> ztP(5-Fdws<%x6ZQ+VjraLw7@kP$3d`{iIQuT$VLISy*gT4`xh^3iLR_=77Frk{hji zde5HSpU&(gbG!q^go{^%5$j&;V0+aB%n7Frn^4 zY3ddh082jw6~;&p)Qd1_DS@|Nm!`+48?M%6Bgc`UF%kz)uz$t9w8^nKU~*(in>F4(nPO-iN*Z1pU^6qD$h~ae6am;igKI>6z^3U9^J31 z1~mbWrzd7+T4LO8gPk6mgwGGhQ(%Je2T=bpoiCtCkjI;U5UOsc)9DEkShTFx{d&VA zY%(&YeWK>r4ZY2utkwNE2gAP|#j{WzSE23<+}1XZN*_mUZ)s;5U2rE37Es^feCOvx zEoTpwf}ki{mavt8UUj)7Uns49+M7TF#yf@WN;h0oJG$CWf|>H|IgM!DEnV%`kbjSS z2azAU@<>=sFL%xXoGV(Wwd?DhbQ~$ z7ZJrAZpJfQ_`ZqVJV~b|Y~6^R!Q{?T9)=Cg+Qb~|pp@duhNhVrKN%K(tXK9iMTn;O zV_opTfoei4W{qb}(kKtBYT3^LMJ8;7qmr|?<+%Akpa&sq7 zDHA>l4Lg+Z`W!zO+2d8EGiZJA!3V9OQVAb>KHhw2%wgN9oS;#kgfNWPY4!m{w=o+& zhQg34Bqbyf<21gsIg0u{##G^-#~KOs5^-f)@3Ghg>e+`l9FB*=J?W8fVj34*)iElb z)?wzeBj7MXeBL%iNH{PPju%7Wkx-Nx7By6X`8lrji>bo$OhcIq)ju&Z@|j(GyQkhS z&WA(A;xsGe(b04w$M$7lsXp;uN7@E89WTK^jyS4lJvlP+^zfe1c=UF$6w+D|<#04K z$+&^^;J)I}(Qqp0Uk-!Ha}(XZwgzSm5AWIa*}*3qoZN>`1z4_i#y~2se6U&o*yi zdc;)Xjf@I^OFhu-J22w4T+t`NBzCKmY{7MT0 zi=J45Mz^d@4W~}coj%QGA=Y=mD%ZXh2b>%php$bLk7l_+<_ zpCJwywGTOs+(FvW1GQIO7WqfWKBS1OwYYt<1CfRc)3kQ(6ic(Vkrzcjg#KYV^m=)~ zS~t&{XSX&`O~^F>PE}KJ>3frVi<0YYCE6NbTGwx#w)qX1?3&X&1=l?`md=&<{c+!j zx~^$*lB{hdGP#Ezld8v(eO>eDXm=(@d2LOiD4goSu52POHwU@+C|X{`KRPlpI%(%{ z?$%K@PSDY{OeB+I8N0_q(baL;C(Uu}^Gq$o^vcfcppD{$##+%o*&5oyYR|Um8&S3+ zq^r@TZ7<3mMpVa^&^$gqsx#PF6nfUN&J5rQ7iIgoC>*&HRWdm8-Qqkllo4@`;kj$$ z>}-mV)VQ)@szWk&rp)Oo?H!(%!J}zXCuCsc^V>ynI-#f&!)(T{{y?r4Z|l`!f6tz= zX%<7?94o9m?zW+@6LV0>WspR1Nu^Tks7EVW`*@jJJ!NuvZUhxbr!#i>s1$21={YIZ z*Hoc+3)(V$!OM(JVxI9hz1aj!YdS?w$R0%#=jiFpArkUKNEO|Y>HHi<`qPVSFvTY` zX-s7Rir42`&&^gO`{zL&f*GfkF3cq~&ZF!U=hYOTR#gI#bo$->`;6f-5uFnL*+Jj-L)M7dUcyyTRQ!m?`SbV-;djpft?x9_~SZiUJ;8OaY=51orXMExv{_OGByfVv~ zp4V>-LR{Jk0_KCmV|%BjTAO&1YBW_JfpyWxY3Ee<7khSp3g2Z@!2mME>a?P$RXW~A zp|BV06@jBJS8s#D%8h2Im$1{9bWB%FHaX5LW6Au{&%X5iXgri3V1pDK2>H$Un(`C> zq$k)H#rIFT2Cn`JA|Fd(?z_l;K>if@&xrKFR%8PbMIOf7ALs9{A-{$E72<%c{|NaU z@(YOKueC3V@b+os6Ug(3VjJH@n!(sz$O3W_xs9v?UzH1c9{D2j4de>43Y5j0mMlFc z=h$lKZ_tozJ&a9$u7N4nk6O;LHH@u^StYJm!+!C8(y_I+NjioexOOG$*xHq>V{6$u ze$1K16U3+bv`2~%CYRd*l!`uI%@j7-00?NgT!qHfL2{L4i#j%dvs=XA<*KI9(P6eo z(b1|wWMG9o7X?SE%ZXf`ljCw@Hrn%h9cmVe3s-8>76n*qL5ey0y4$sZ6FW@cs=-#c z4*fgkGw2;;Eg{WMT0R#gH0rs|jSkBnbT6G=eNGOhPC_=_mOd5c!A(sotqGnWr!YJE zdVvf>rdLv$;)ZnZL)((CH3$~Ozv$GW1}v1mFi2;of>B*C!g6*Q+UI5UbAxjlzl)1( zw@@rm8qyprux*(#_!!dF zW8#{DirqOjHa`9?DU?t!HH=9(2!_q+S1!g$D)rDTpV_l(c=U^hm?MNi=0iN7k7MTE zED8;c4+A&P?PpEQ^HL$#`}{F1p_;&Tu{x;tp<$-G;qmA8iTw6)r4;=9u?4T#YIxJep`J$o{lgZnT8nyYe$!K25DUQf)BJ31%Nf;pj%EGL7zcaM^nVEzCExVbn; z9XxtG#K!h2Z3^q4 zIo*?w{~;XO!j1!8piHze-cWUOEF)E-x0Qbw@;wRdV8k$QRqOLp)vpui^O#!_0vkwn zl|^u);^u@3RbayQi9gjE{HczB&p(BnLS!HPRph@Q@|}{;=$DXd$e$sb!Qn~d2aumb zmJr46Xy1ZqL^0=z-T4b70uFxy(H?yd@9okG4sS)|Bej|lYTkaOt%b*u&rN2Oj!@M*O^Z0cm4GDS0!^`fjCjMV>IyF5#2DRlqjbDDCQM*bwPt4r8e=iD z=5CJc+XwRcO~Nzp2!m7BHsOP8qzY38TfIsHrg%EjR8!By#DRGz5OddFvCIZAG|*86 z;4v_#0qVhgr_*VTm+6^9Bv>1^e%O;C6^7N z$^_q-Po=JtLc=IoxtvNt&6-kf`FU~;nzj=3h)oTJh$25e&tszq=K*Jk<>r>vHe;kr zQEd0%@WgbkSU701nW>n^hE#fEl;VC9{Ks?quGEsfa#>AzjL@si+rGK6cDt4R$2IID@sktE1Pi6qy-nj9^iA9SZ1{Xn> z;?h-MBAGa~RH?zbd-rZLG>Q5(_MEx7xlMehz}{_I00rA@uOqdf!bF*%zLB&-~fq2$7DB_q@% zez=LmOoI5E)xm6bPBW3%CHe`!$*f*i*IhSA-1shI2mK0vE3cYzP|7d=4-xqqiMQT? z$lm!A$S)#)jSPU31>|K!e)aMx-GPWxQodZ-59-0nQAC{5uOm%h11DY}gO zIOX3=mqG*3*p=`o0akmH1S4%ykf`C?rQ<2L-yjg_14CevxI z#M$(XhSVxl(4srZms4eLa&j`Xiu3WEx_On3dfKO>R<&x$oXarp=6F-v)}LU*K2uie z!3rVuRF#klT5rDjW(Q{%E0x0pI;%<>PO;e}4hOTA_c31T$r>-!YAr7>tC~LQ%M4|2 z+a@KXV&|0E^7qnHPtc>Gw9H6Q%>>nI9MuJCA3s%ssroxPswV65<;$(srAwDoQ$!Ux zSb^!Hmps1cL0A2qL{(d@Qg;DrPHdHTspwrWoK;c%A4LhI_&8hD(tqyUrAts%orbC^ zT}fU^UYIJ0unK54pc{WLRn=@=yLPR0JO4b_73$^_=`6Z8ZX}l`wTnrOvFhuf^2Zsg zVEt!4bLC3w)^q2sUE3bH7>+<#onK1cxN+&+gPN5L1BSJF|H_rN z_?0V{u2hMu;*C%=o=P81XXUE<|0S;K_4*rw%geW+uWp??*Ukg$G6Yt!c)l3LRFuqQ zsQW)4uo`ypHt!66I`j6Oo7a}uC9@8Y!r4|uIrKChJ}j&p1@91m03 zt*=%#-E@W5db;MxAFT0Ot5)gey|Llp>9Mgex_vMhYOAl+*7bo9v^CLM!^7$EbjFnF zR@e9Sg;gD(|AGsiyX23|9t6x+w`*+s;i6u7UaS3fb%xn&W|RlSHG-A3gd&t@slfzG z&h5G|c8t~VTjI8a>BB%)m=X%{OTyxc(%f_$lpu_^*-QLhd0A;JR!VU5I?BoYvOLYU|9IGwbwEKlXw! z_C_{xy?D_%?>L<;tP6P2N_8c_n`kuL6T_&yT22s`mKoY`NiALQ z*{4(op{mQv6g+?C%;qhCikHi=qo)ez%U%?t1-wus<`fE*4yKL^R~W;Nvx$;<7h0v8 z3Y;^~OZJ=`DUJM+_&26|E?hZ(=9C?_-EJq=tuxzEtzB|X&WX=DIc}jnu)I7zF~%Zi z{WcVEuNzI!>4|auylslAHHlmfXlUc&H^eWn6ZTdjZ@iG_cK3w4V{??{@|0wH&&^V_ zm7u3{Bjd~2nb`4@wi{BpoOBh-3PbFvFkPx;6IP(9ajbaW-s9}|7up^{0YtgbcN;NS zPEVcXyX9q80A48Our(Q6$lB*C&o z?F?=?ckXJb&{ewFABpR{VJWKUyNz^SX?ZBnVafnX2`20Uf2!s$g8Cr`^Y!7Yx!!l zv$J>>i;8>l)G0vDAvP^Wqob^h=qrA6IC*0)X5`W3rSO|e5I$O z)f+c(+Ti&&ZiZ_c8@o*z5p3)`l%1H!h9l?CEH8Hvf5ZE=H)0b!mli6KtY1+);5ZH({aH3Rbu(Rwhl`fBuj)p^#i=41hN7<`ao7S;B zgG|io$}Xx`_*^8syc{yU$GajD2xV*fj{*2BLu+E)3*Rl$48FpZ1 zkAekvax$wgT3cx#IvSd=v@=7s@vO5r2i3O1!Y~9t~Q}Bkv)9j&y*L2_%CYMvfq_ApZyQU8EVzly9ee@IQ?#BFep~ zyh?wCbb^;V5cvnl_WRF~pF`e2zK#4lBqR*wX1W@CdJJ-Qf|11gfPPz>=ob!$^~X90 zC%wF|J)7&{pn`bO8dle5G;qI6gUD*febLFlRoMMmoyguCDIx^UF0LTrZ7rqjjAw+sNeGb-t_T z45;Hn;W~Y}!SusMLZ{wv&n#a&Qw2j)jelsC(D2NaiyTP$~%$&rS=yN(KyVeZSRQw_cdkxao~Igo$S_88{RgnpWt6HEe(L z%>@DBn{O@)0|kL0&nxp?6#*MMK|lc@a4PIG(C0CmRB?|-Ti-=Yb6AiE-U;mt*zxMY zI*_g`tZV3;pU(>CZY*Np=#GMLtkXR%wo=4WV;ed@``M@f&OUic*d}NTX_m8nnB`RU zox{VI!$LJMO@JmmW9{ZSD{xl7`ND-|_6KumEz241hPTSU`c&%Mo_flBNegeDe(9xE z0iNg$3gp3^3l}cbx9;3|u~m|9b^#MRJXnE*ZKY5BI2CNa>w5VOtV5&^D!zUg$s^Ao9`etT zpF*S~D!%Afkz0uJ#{D-$u|{!3`r2@&VjgUH8y8j&t}2vIKLRSFVfe(MlfRMt$_VUq;I|1D7cje|jcrJN}cgosiJ z*+Tf;iIShR-Gqtv|SSW*k`kJCGt+4j{*)$8e1>YFj-`&t)H;<~G~Rk&*Ll`S8w))|}v14&{6HjS@O4KOW6k>8c zbH>10rM{{>fns1!7IklVlfk5V0(FE*>4!n7fh3B6QW{hW`KV;(Mb;0K4`ESz4Sd>( z>RvXQSbG(Do`8kfO!hSCP|EA^$B2BD{yWkNZajj>hjJ&P_;uwhSNyuxqt7G4oJB-2 zGE2yBAkwk^6sZ%YATeY&l1KITe?7LH-{^>((CRDI|-CZ}$-8|M*$t zn~3zV-$Cvo@_CXzCfj8zvKDznznjt0Qh)vWTW?i@#G6}IOFg{`9W>~J#xlx)-Bd#) z{n1?egML`CTWSbp5XNrpseY?JSz7URkC4j$GYC8pbVLeJeHmnd4>(l;Fwg=Y((TE= zPuOI)fKA;X6TS}mvq`X1g(VxckR?S#vs|UInSutAa7C�!cnTIX2o)eH)Mz0*thF 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ʩjGzKJ6O@FZxZtoa>f3-{#G{!EohtgU-X+=N@r>Q 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�! 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 read -> return one entry -> free). Now the buffer is +// allocated once in Fat32OpenDir, freed in Fat32CloseDir, and only +// re-read when the iteration moves to a new cluster. +// +// 3. AllocCluster() next-free hint. +// The search now starts from the cluster after the last allocation +// (gVol.NextFreeHint) and wraps around once, so repeated allocations +// on a fragmented volume don't rescan from sector 0 every time. +// +// 4. Contiguous-cluster run coalescing in Fat32Read() and Fat32Write(). +// After fetching a cluster's FAT entry the code peeks ahead: if the +// next cluster is physically adjacent (cluster+1) it extends the run +// rather than issuing a separate ReadSectors/WriteSectors call. A +// freshly-written unfragmented file now transfers in one or a handful +// of large DMA bursts instead of SectorsPerCluster-sized slices. +// +// 5. FAT write batching via a dirty-sector cache. +// WriteFatEntry() marks modified FAT cache slots dirty instead of +// flushing immediately. FlushFatCache() (called from Fat32Close, +// Fat32Truncate, and Fat32Delete) writes each dirty slot once for +// every FAT copy, collapsing the 2x(read+write) per-entry cost of the +// original into a single write per dirty sector per FAT copy. + #include #include #include @@ -113,205 +149,266 @@ typedef struct { #define FAT32_EOC_MARK 0x0FFFFFFFu #define FAT32_FREE 0x00000000u +// --------------------------------------------------------------------------- +// FAT sector cache (fixes #1 and #5) +// --------------------------------------------------------------------------- +// 32 direct-mapped slots, indexed by (lba % FAT_CACHE_SLOTS). +// Write-back: WriteFatEntry modifies the in-cache bytes and marks the slot +// dirty. FlushFatCache() propagates dirty slots to every FAT copy at once, +// replacing the original per-entry 2x(read+write) pattern with a single +// write per dirty sector per FAT copy. + +#define FAT_CACHE_SLOTS 32 + +typedef struct { + uint64_t lba; + uint8_t data[512]; + bool valid; + bool dirty; +} FAT_CACHE_ENTRY; + +static FAT_CACHE_ENTRY gFatCache[FAT_CACHE_SLOTS]; + +// FAT32_VOL forward declaration (needed by cache helpers). +typedef struct FAT32_VOL_S FAT32_VOL; + +// Raw (non-cached) sector I/O — forward declarations. +static KSTATUS ReadSectorsRaw (FAT32_VOL *v, uint64_t lba, uint32_t count, void *buf); +static KSTATUS WriteSectorsRaw(FAT32_VOL *v, uint64_t lba, uint32_t count, const void *buf); + +// Read one FAT sector through the cache. +// Returns a pointer into the cache buffer (valid until the next eviction). +static KSTATUS FatCacheRead(FAT32_VOL *v, uint64_t lba, uint8_t **out) { + uint32_t slot = (uint32_t)(lba % FAT_CACHE_SLOTS); + FAT_CACHE_ENTRY *e = &gFatCache[slot]; + + if (e->valid && e->lba == lba) { + *out = e->data; + return STATUS_SUCCESS; + } + + // Evict current occupant: single-copy writeback on collision. + // The full multi-copy flush happens in FlushFatCache(). + if (e->valid && e->dirty) { + WriteSectorsRaw(v, e->lba, 1, e->data); + e->dirty = false; + } + + KSTATUS s = ReadSectorsRaw(v, lba, 1, e->data); + if (!KSUCCESS(s)) { e->valid = false; return s; } + + e->lba = lba; + e->valid = true; + e->dirty = false; + *out = e->data; + return STATUS_SUCCESS; +} + +static void FatCacheMarkDirty(uint64_t lba) { + uint32_t slot = (uint32_t)(lba % FAT_CACHE_SLOTS); + if (gFatCache[slot].valid && gFatCache[slot].lba == lba) + gFatCache[slot].dirty = true; +} + +static void FatCacheInvalidate(void) { + for (int i = 0; i < FAT_CACHE_SLOTS; i++) { + gFatCache[i].valid = false; + gFatCache[i].dirty = false; + } +} + +// FlushFatCache — write every dirty slot to all FAT copies, clear dirty flag. +// Defined after FAT32_VOL is fully declared (below). +static void FlushFatCache(FAT32_VOL *v); + // --------------------------------------------------------------------------- // Driver state // --------------------------------------------------------------------------- -typedef struct { - uint8_t DriveIndex; - uint32_t PartitionLba; - uint32_t BytesPerSector; - uint32_t SectorsPerCluster; - uint32_t BytesPerCluster; - uint32_t ReservedSectors; - uint32_t NumFats; - uint32_t FatSize; // sectors per FAT copy - uint32_t RootCluster; - uint32_t DataStart; // absolute LBA of cluster 2 - uint32_t TotalClusters; // usable data clusters - const HAL_API* Hal; -} FAT32_VOL; +struct FAT32_VOL_S { + uint8_t DriveIndex; + uint32_t PartitionLba; + uint32_t BytesPerSector; + uint32_t SectorsPerCluster; + uint32_t BytesPerCluster; + uint32_t ReservedSectors; + uint32_t NumFats; + uint32_t FatSize; // sectors per FAT copy + uint32_t RootCluster; + uint32_t DataStart; // absolute LBA of cluster 2 + uint32_t TotalClusters; // usable data clusters + uint32_t NextFreeHint; // fix #3: start cluster for next free-scan + const HAL_API *Hal; +}; typedef struct { uint32_t StartCluster; uint32_t FileSize; - FAT32_VOL* Vol; - // Location of this file's DIRENT on disk (for in-place updates). - uint64_t DirentLba; // LBA of the sector containing the DIRENT - uint32_t DirentOffset; // byte offset of the DIRENT within that sector + FAT32_VOL *Vol; + uint64_t DirentLba; + uint32_t DirentOffset; } FAT32_FILE; // --------------------------------------------------------------------------- -// Low-level sector I/O +// Raw sector I/O (bypasses FAT cache; used for file data and cache eviction) // --------------------------------------------------------------------------- -static KSTATUS ReadSectors(FAT32_VOL* v, uint64_t lba, - uint32_t count, void* buf) { +static KSTATUS ReadSectorsRaw(FAT32_VOL *v, uint64_t lba, + uint32_t count, void *buf) { if (!v || !v->Hal || !v->Hal->Disk.ReadSectors) return STATUS_INVALID_PARAMETER; return v->Hal->Disk.ReadSectors(v->DriveIndex, lba, count, buf); } -static KSTATUS WriteSectors(FAT32_VOL* v, uint64_t lba, - uint32_t count, const void* buf) { +static KSTATUS WriteSectorsRaw(FAT32_VOL *v, uint64_t lba, + uint32_t count, const void *buf) { if (!v || !v->Hal || !v->Hal->Disk.WriteSectors) return STATUS_INVALID_PARAMETER; return v->Hal->Disk.WriteSectors(v->DriveIndex, lba, count, buf); } -static uint64_t ClusterToLba(FAT32_VOL* v, uint32_t cluster) { +// Convenience aliases for file-data I/O. +static KSTATUS ReadSectors (FAT32_VOL *v, uint64_t lba, uint32_t n, void *b) { return ReadSectorsRaw (v, lba, n, b); } +static KSTATUS WriteSectors(FAT32_VOL *v, uint64_t lba, uint32_t n, const void *b) { return WriteSectorsRaw(v, lba, n, b); } + +static uint64_t ClusterToLba(FAT32_VOL *v, uint32_t cluster) { return v->DataStart + (uint64_t)(cluster - 2) * v->SectorsPerCluster; } // --------------------------------------------------------------------------- -// FAT read / write +// FlushFatCache — needs full FAT32_VOL definition +// --------------------------------------------------------------------------- +static void FlushFatCache(FAT32_VOL *v) { + uint64_t fat0Start = (uint64_t)v->PartitionLba + v->ReservedSectors; + + for (int i = 0; i < FAT_CACHE_SLOTS; i++) { + FAT_CACHE_ENTRY *e = &gFatCache[i]; + if (!e->valid || !e->dirty) continue; + if (e->lba < fat0Start) continue; + + uint64_t sectorIdx = e->lba - fat0Start; + if (sectorIdx >= v->FatSize) continue; + + for (uint32_t f = 0; f < v->NumFats; f++) { + uint64_t lba = fat0Start + (uint64_t)f * v->FatSize + sectorIdx; + WriteSectorsRaw(v, lba, 1, e->data); + } + e->dirty = false; + } +} + +// --------------------------------------------------------------------------- +// FAT read / write (through cache) // --------------------------------------------------------------------------- -// Returns the FAT value for 'cluster', masked to 28 bits. Returns 0 on error. -static uint32_t FatEntry(FAT32_VOL* v, uint32_t cluster) { +static uint32_t FatEntry(FAT32_VOL *v, uint32_t cluster) { uint32_t fatOffset = cluster * 4; - uint64_t sector = v->PartitionLba + v->ReservedSectors + uint64_t sector = (uint64_t)v->PartitionLba + v->ReservedSectors + fatOffset / v->BytesPerSector; uint32_t offInSec = fatOffset % v->BytesPerSector; - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); - if (!sec) return 0; - if (!KSUCCESS(ReadSectors(v, sector, 1, sec))) { - MmFreePool(sec); - return 0; - } - uint32_t val = *(uint32_t*)(sec + offInSec) & 0x0FFFFFFF; - MmFreePool(sec); - return val; + uint8_t *sec; + if (!KSUCCESS(FatCacheRead(v, sector, &sec))) return 0; + return *(uint32_t *)(sec + offInSec) & 0x0FFFFFFF; } -// Write 'value' (28-bit) into every FAT copy for 'cluster'. -// Preserves the upper nibble of the existing entry as required by the spec. -static KSTATUS WriteFatEntry(FAT32_VOL* v, uint32_t cluster, uint32_t value) { +static KSTATUS WriteFatEntry(FAT32_VOL *v, uint32_t cluster, uint32_t value) { uint32_t fatOffset = cluster * 4; - uint32_t sectorIdx = fatOffset / v->BytesPerSector; + uint64_t sector = (uint64_t)v->PartitionLba + v->ReservedSectors + + fatOffset / v->BytesPerSector; uint32_t offInSec = fatOffset % v->BytesPerSector; - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); - if (!sec) return STATUS_NO_MEMORY; + uint8_t *sec; + KSTATUS s = FatCacheRead(v, sector, &sec); + if (!KSUCCESS(s)) return s; - for (uint32_t f = 0; f < v->NumFats; f++) { - uint64_t lba = (uint64_t)v->PartitionLba + v->ReservedSectors - + (uint64_t)f * v->FatSize + sectorIdx; - - KSTATUS s = ReadSectors(v, lba, 1, sec); - if (!KSUCCESS(s)) { MmFreePool(sec); return s; } - - // Upper nibble is reserved; preserve it. - uint32_t existing = *(uint32_t*)(sec + offInSec); - *(uint32_t*)(sec + offInSec) = (existing & 0xF0000000u) - | (value & 0x0FFFFFFFu); - - s = WriteSectors(v, lba, 1, sec); - if (!KSUCCESS(s)) { MmFreePool(sec); return s; } - } - - MmFreePool(sec); + uint32_t existing = *(uint32_t *)(sec + offInSec); + *(uint32_t *)(sec + offInSec) = (existing & 0xF0000000u) + | (value & 0x0FFFFFFFu); + FatCacheMarkDirty(sector); return STATUS_SUCCESS; } // --------------------------------------------------------------------------- -// Cluster allocation +// Cluster allocation (fix #3: next-free hint + two-phase wrap-around scan) // --------------------------------------------------------------------------- +static uint32_t AllocCluster(FAT32_VOL *v) { + if (v->TotalClusters == 0) return 0; -// Scan FAT for a free cluster, mark it EOC, zero its data, and return it. -// Returns 0 if the disk is full or an error occurs. -static uint32_t AllocCluster(FAT32_VOL* v) { - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); - if (!sec) return 0; + uint32_t total = v->TotalClusters; + uint32_t start = v->NextFreeHint; + if (start < 2 || start >= total + 2) start = 2; - uint32_t entriesPerSector = v->BytesPerSector / 4; - uint64_t fatStart = (uint64_t)v->PartitionLba + v->ReservedSectors; - uint32_t found = 0; + for (uint32_t pass = 0; pass < 2; pass++) { + uint32_t lo = (pass == 0) ? start : 2; + uint32_t hi = (pass == 0) ? total+2 : start; + for (uint32_t c = lo; c < hi; c++) { + if (FatEntry(v, c) == FAT32_FREE) { + if (!KSUCCESS(WriteFatEntry(v, c, FAT32_EOC_MARK))) return 0; + v->NextFreeHint = c + 1; - for (uint32_t s = 0; s < v->FatSize && !found; s++) { - if (!KSUCCESS(ReadSectors(v, fatStart + s, 1, sec))) break; - for (uint32_t i = 0; i < entriesPerSector; i++) { - uint32_t cluster = s * entriesPerSector + i; - if (cluster < 2) continue; - if (v->TotalClusters && cluster >= v->TotalClusters + 2) goto done; - uint32_t val = *(uint32_t*)(sec + i * 4) & 0x0FFFFFFF; - if (val == FAT32_FREE) { found = cluster; break; } + // Zero the cluster (required for directory correctness). + uint8_t *zero = (uint8_t *)MmAllocatePool(v->BytesPerCluster); + if (zero) { + memset(zero, 0, v->BytesPerCluster); + WriteSectors(v, ClusterToLba(v, c), v->SectorsPerCluster, zero); + MmFreePool(zero); + } + return c; + } } } -done: - MmFreePool(sec); - if (!found) return 0; - - // Mark the cluster as end-of-chain. - if (!KSUCCESS(WriteFatEntry(v, found, FAT32_EOC_MARK))) return 0; - - // Zero the cluster data (mandatory for correctness in directories). - uint8_t* zero = (uint8_t*)MmAllocatePool(v->BytesPerCluster); - if (zero) { - memset(zero, 0, v->BytesPerCluster); - WriteSectors(v, ClusterToLba(v, found), v->SectorsPerCluster, zero); - MmFreePool(zero); - } - return found; + return 0; } -// Allocate a new cluster and link it after 'lastCluster'. Returns 0 on failure. -static uint32_t AppendCluster(FAT32_VOL* v, uint32_t lastCluster) { +static uint32_t AppendCluster(FAT32_VOL *v, uint32_t lastCluster) { uint32_t newCluster = AllocCluster(v); if (!newCluster) return 0; if (!KSUCCESS(WriteFatEntry(v, lastCluster, newCluster))) return 0; return newCluster; } -// Walk the chain starting at 'start'; return the last cluster and optionally -// the total cluster count. -static uint32_t GetChainEnd(FAT32_VOL* v, uint32_t start, - uint32_t* outCount) { - uint32_t cluster = start; - uint32_t prev = start; - uint32_t count = 0; +static uint32_t GetChainEnd(FAT32_VOL *v, uint32_t start, uint32_t *outCount) { + uint32_t cluster = start, prev = start, count = 0; while (cluster >= 2 && cluster < FAT32_EOC) { - prev = cluster; - count++; + prev = cluster; count++; cluster = FatEntry(v, cluster); } if (outCount) *outCount = count; return prev; } -// Free every cluster in the chain starting at 'start'. -static void FreeClusterChain(FAT32_VOL* v, uint32_t start) { +static void FreeClusterChain(FAT32_VOL *v, uint32_t start) { uint32_t cluster = start; while (cluster >= 2 && cluster < FAT32_EOC) { uint32_t next = FatEntry(v, cluster); WriteFatEntry(v, cluster, FAT32_FREE); + if (cluster < v->NextFreeHint) v->NextFreeHint = cluster; cluster = next; } } // --------------------------------------------------------------------------- -// Directory entry (DIRENT) on-disk update helpers +// DIRENT update helpers // --------------------------------------------------------------------------- - -static KSTATUS DirentUpdateSize(FAT32_VOL* v, uint64_t lba, +static KSTATUS DirentUpdateSize(FAT32_VOL *v, uint64_t lba, uint32_t offset, uint32_t size) { - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); + uint8_t *sec = (uint8_t *)MmAllocatePool(v->BytesPerSector); if (!sec) return STATUS_NO_MEMORY; KSTATUS s = ReadSectors(v, lba, 1, sec); if (KSUCCESS(s)) { - ((DIRENT*)(sec + offset))->FileSize = size; + ((DIRENT *)(sec + offset))->FileSize = size; s = WriteSectors(v, lba, 1, sec); } MmFreePool(sec); return s; } -static KSTATUS DirentUpdateFirstCluster(FAT32_VOL* v, uint64_t lba, +static KSTATUS DirentUpdateFirstCluster(FAT32_VOL *v, uint64_t lba, uint32_t offset, uint32_t cluster) { - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); + uint8_t *sec = (uint8_t *)MmAllocatePool(v->BytesPerSector); if (!sec) return STATUS_NO_MEMORY; KSTATUS s = ReadSectors(v, lba, 1, sec); if (KSUCCESS(s)) { - DIRENT* d = (DIRENT*)(sec + offset); + DIRENT *d = (DIRENT *)(sec + offset); d->FirstClusterHi = (uint16_t)(cluster >> 16); d->FirstClusterLo = (uint16_t)(cluster & 0xFFFF); s = WriteSectors(v, lba, 1, sec); @@ -323,22 +420,18 @@ static KSTATUS DirentUpdateFirstCluster(FAT32_VOL* v, uint64_t lba, // --------------------------------------------------------------------------- // 8.3 name matching / assembly // --------------------------------------------------------------------------- - -static int MatchName83(const char* dirName, const char* dirExt, - const char* want) { - char buf[13]; - int n = 0; +static int MatchName83(const char *dirName, const char *dirExt, + const char *want) { + char buf[13]; int n = 0; for (int i = 0; i < 8 && dirName[i] != ' '; i++) - buf[n++] = (char)(dirName[i] >= 'A' && dirName[i] <= 'Z' - ? dirName[i] + 32 : dirName[i]); + buf[n++] = (char)(dirName[i] >= 'A' && dirName[i] <= 'Z' ? dirName[i]+32 : dirName[i]); if (dirExt[0] != ' ') { buf[n++] = '.'; for (int i = 0; i < 3 && dirExt[i] != ' '; i++) - buf[n++] = (char)(dirExt[i] >= 'A' && dirExt[i] <= 'Z' - ? dirExt[i] + 32 : dirExt[i]); + buf[n++] = (char)(dirExt[i] >= 'A' && dirExt[i] <= 'Z' ? dirExt[i]+32 : dirExt[i]); } buf[n] = '\0'; - const char* p = buf; + const char *p = buf; while (*want && *p) { char a = *p++, b = *want++; if (a >= 'A' && a <= 'Z') a += 32; @@ -348,26 +441,19 @@ static int MatchName83(const char* dirName, const char* dirExt, return *want == '\0' && *p == '\0'; } -// Generate a space-padded, uppercased 8.3 name from a plain filename. -static void Make83Name(const char* src, char name8[8], char ext3[3]) { - memset(name8, ' ', 8); - memset(ext3, ' ', 3); - const char* dot = NULL; - for (const char* p = src; *p; p++) - if (*p == '.') dot = p; +static void Make83Name(const char *src, char name8[8], char ext3[3]) { + memset(name8, ' ', 8); memset(ext3, ' ', 3); + const char *dot = NULL; + for (const char *p = src; *p; p++) if (*p == '.') dot = p; int ni = 0; - const char* end = dot ? dot : src + strlen(src); - for (const char* p = src; p < end && ni < 8; p++) { - char c = *p; - if (c >= 'a' && c <= 'z') c -= 32; - name8[ni++] = c; + const char *end = dot ? dot : src + strlen(src); + for (const char *p = src; p < end && ni < 8; p++) { + char c = *p; if (c >= 'a' && c <= 'z') c -= 32; name8[ni++] = c; } if (dot) { int ei = 0; - for (const char* p = dot + 1; *p && ei < 3; p++) { - char c = *p; - if (c >= 'a' && c <= 'z') c -= 32; - ext3[ei++] = c; + for (const char *p = dot+1; *p && ei < 3; p++) { + char c = *p; if (c >= 'a' && c <= 'z') c -= 32; ext3[ei++] = c; } } } @@ -377,23 +463,22 @@ static void Make83Name(const char* src, char name8[8], char ext3[3]) { // --------------------------------------------------------------------------- #define MAX_LFN 256 -static void LfnAppend(char* lfn, const LFN_ENTRY* e) { +static void LfnAppend(char *lfn, const LFN_ENTRY *e) { int seq = (e->Order & 0x3F) - 1; if (seq < 0 || seq >= (MAX_LFN / 13)) return; int pos = seq * 13; - uint16_t chars[13]; - int idx = 0; + uint16_t chars[13]; int idx = 0; for (int i = 0; i < 5; i++) chars[idx++] = e->Name1[i]; for (int i = 0; i < 6; i++) chars[idx++] = e->Name2[i]; for (int i = 0; i < 2; i++) chars[idx++] = e->Name3[i]; - for (int i = 0; i < 13 && pos < MAX_LFN - 1; i++, pos++) { + for (int i = 0; i < 13 && pos < MAX_LFN-1; i++, pos++) { uint16_t c = chars[i]; if (c == 0x0000 || c == 0xFFFF) { lfn[pos] = '\0'; break; } lfn[pos] = (char)(c & 0x7F); } } -static int LfnMatch(const char* lfn, const char* want) { +static int LfnMatch(const char *lfn, const char *want) { while (*lfn && *want) { char a = *lfn++, b = *want++; if (a >= 'A' && a <= 'Z') a += 32; @@ -405,65 +490,42 @@ static int LfnMatch(const char* lfn, const char* want) { // --------------------------------------------------------------------------- // Directory search -// Passes back the on-disk location of the matched DIRENT when outDirentLba -// and outDirentOffset are non-NULL. // --------------------------------------------------------------------------- -static int SearchDir(FAT32_VOL* v, uint32_t dirCluster, - const char* name, - uint32_t* outCluster, uint32_t* outSize, - uint8_t* outAttr, - uint64_t* outDirentLba, // nullable - uint32_t* outDirentOffset) // nullable -{ - uint8_t* clusterBuf = (uint8_t*)MmAllocatePool(v->BytesPerCluster); +static int SearchDir(FAT32_VOL *v, uint32_t dirCluster, const char *name, + uint32_t *outCluster, uint32_t *outSize, uint8_t *outAttr, + uint64_t *outDirentLba, uint32_t *outDirentOffset) { + uint8_t *clusterBuf = (uint8_t *)MmAllocatePool(v->BytesPerCluster); if (!clusterBuf) return 0; - char lfn[MAX_LFN]; - int hasLfn = 0; - memset(lfn, 0, sizeof(lfn)); - + char lfn[MAX_LFN]; int hasLfn = 0; memset(lfn, 0, sizeof(lfn)); uint32_t cluster = dirCluster; + while (cluster >= 2 && cluster < FAT32_EOC) { uint64_t clusterLba = ClusterToLba(v, cluster); - if (!KSUCCESS(ReadSectors(v, clusterLba, v->SectorsPerCluster, clusterBuf))) - break; + if (!KSUCCESS(ReadSectors(v, clusterLba, v->SectorsPerCluster, clusterBuf))) break; uint32_t entries = v->BytesPerCluster / sizeof(DIRENT); - DIRENT* dir = (DIRENT*)clusterBuf; + DIRENT *dir = (DIRENT *)clusterBuf; for (uint32_t i = 0; i < entries; i++) { if (dir[i].Name[0] == 0x00) goto done; - if ((uint8_t)dir[i].Name[0] == 0xE5) { - hasLfn = 0; memset(lfn, 0, sizeof(lfn)); - continue; - } - if (dir[i].Attr == ATTR_LFN) { - LfnAppend(lfn, (LFN_ENTRY*)&dir[i]); - hasLfn = 1; - continue; - } + if ((uint8_t)dir[i].Name[0] == 0xE5) { hasLfn = 0; memset(lfn, 0, sizeof(lfn)); continue; } + if (dir[i].Attr == ATTR_LFN) { LfnAppend(lfn, (LFN_ENTRY *)&dir[i]); hasLfn = 1; continue; } int match = 0; if (hasLfn && lfn[0]) match = LfnMatch(lfn, name); - if (!match) match = MatchName83(dir[i].Name, dir[i].Ext, name); - + if (!match) match = MatchName83(dir[i].Name, dir[i].Ext, name); hasLfn = 0; memset(lfn, 0, sizeof(lfn)); if (match) { - *outCluster = ((uint32_t)dir[i].FirstClusterHi << 16) - | dir[i].FirstClusterLo; + *outCluster = ((uint32_t)dir[i].FirstClusterHi << 16) | dir[i].FirstClusterLo; *outSize = dir[i].FileSize; *outAttr = dir[i].Attr; - - // Compute the exact on-disk location of this DIRENT. if (outDirentLba || outDirentOffset) { - uint64_t entryByte = (uint64_t)i * sizeof(DIRENT); - if (outDirentLba) - *outDirentLba = clusterLba + entryByte / v->BytesPerSector; - if (outDirentOffset) - *outDirentOffset = (uint32_t)(entryByte % v->BytesPerSector); + uint64_t eb = (uint64_t)i * sizeof(DIRENT); + if (outDirentLba) *outDirentLba = clusterLba + eb / v->BytesPerSector; + if (outDirentOffset) *outDirentOffset = (uint32_t)(eb % v->BytesPerSector); } - MmFreePool(clusterBuf); return 1; } @@ -476,220 +538,206 @@ done: } // --------------------------------------------------------------------------- -// Path traversal (with optional DIRENT-location output) +// Path traversal // --------------------------------------------------------------------------- -static KSTATUS TraverseEx(FAT32_VOL* v, const char* path, - uint32_t* outCluster, uint32_t* outSize, - uint64_t* outDirentLba, // nullable - uint32_t* outDirentOffset) // nullable -{ - uint32_t cluster = v->RootCluster; - uint32_t size = 0; +static KSTATUS TraverseEx(FAT32_VOL *v, const char *path, + uint32_t *outCluster, uint32_t *outSize, + uint64_t *outDirentLba, uint32_t *outDirentOffset) { + uint32_t cluster = v->RootCluster, size = 0; uint8_t attr = ATTR_DIRECTORY; - - // Sentinel values: root directory has no DIRENT of its own. if (outDirentLba) *outDirentLba = 0; if (outDirentOffset) *outDirentOffset = 0; - char component[256]; - const char* p = path; - + char component[256]; const char *p = path; while (*p) { while (*p == '\\' || *p == '/') p++; if (!*p) break; - int len = 0; - while (*p && *p != '\\' && *p != '/' && len < 255) - component[len++] = *p++; + while (*p && *p != '\\' && *p != '/' && len < 255) component[len++] = *p++; component[len] = '\0'; if (!len) break; - if (!(attr & ATTR_DIRECTORY)) return STATUS_NOT_FOUND; - uint32_t childCluster, childSize; - uint8_t childAttr; - uint64_t childLba = 0; - uint32_t childOffset = 0; - + uint32_t childCluster, childSize; uint8_t childAttr; + uint64_t childLba = 0; uint32_t childOffset = 0; if (!SearchDir(v, cluster, component, &childCluster, &childSize, &childAttr, &childLba, &childOffset)) return STATUS_NOT_FOUND; - cluster = childCluster; - size = childSize; - attr = childAttr; + cluster = childCluster; size = childSize; attr = childAttr; if (outDirentLba) *outDirentLba = childLba; if (outDirentOffset) *outDirentOffset = childOffset; } - - *outCluster = cluster; - *outSize = size; + *outCluster = cluster; *outSize = size; return STATUS_SUCCESS; } -static KSTATUS Traverse(FAT32_VOL* v, const char* path, - uint32_t* outCluster, uint32_t* outSize) { +static KSTATUS Traverse(FAT32_VOL *v, const char *path, + uint32_t *outCluster, uint32_t *outSize) { return TraverseEx(v, path, outCluster, outSize, NULL, NULL); } // --------------------------------------------------------------------------- // Path helpers for Fat32Create // --------------------------------------------------------------------------- - -// Split "/dir/sub/file.txt" into parent="/dir/sub" and name="file.txt". -static void SplitPath(const char* path, char parent[256], char name[256]) { - const char* last = NULL; - for (const char* p = path; *p; p++) - if (*p == '\\' || *p == '/') last = p; - - if (!last) { - parent[0] = '\0'; - strncpy(name, path, 255); - name[255] = '\0'; - } else { - size_t len = (size_t)(last - path); - if (len > 255) len = 255; - memcpy(parent, path, len); - parent[len] = '\0'; - strncpy(name, last + 1, 255); - name[255] = '\0'; +static void SplitPath(const char *path, char parent[256], char name[256]) { + const char *last = NULL; + for (const char *p = path; *p; p++) if (*p == '\\' || *p == '/') last = p; + if (!last) { parent[0] = '\0'; strncpy(name, path, 255); name[255] = '\0'; } + else { + size_t len = (size_t)(last - path); if (len > 255) len = 255; + memcpy(parent, path, len); parent[len] = '\0'; + strncpy(name, last+1, 255); name[255] = '\0'; } } // --------------------------------------------------------------------------- -// Find a free DIRENT slot in the directory starting at 'dirCluster'. -// Extends the directory with a new cluster if no slot is available. -// Returns 1 on success and fills *outLba / *outOffset. +// Find a free DIRENT slot // --------------------------------------------------------------------------- -static int FindFreeDirent(FAT32_VOL* v, uint32_t dirCluster, - uint64_t* outLba, uint32_t* outOffset) { - uint8_t* clusterBuf = (uint8_t*)MmAllocatePool(v->BytesPerCluster); +static int FindFreeDirent(FAT32_VOL *v, uint32_t dirCluster, + uint64_t *outLba, uint32_t *outOffset) { + uint8_t *clusterBuf = (uint8_t *)MmAllocatePool(v->BytesPerCluster); if (!clusterBuf) return 0; - uint32_t cluster = dirCluster; - uint32_t prevCluster = dirCluster; - + uint32_t cluster = dirCluster, prevCluster = dirCluster; while (cluster >= 2 && cluster < FAT32_EOC) { uint64_t clusterLba = ClusterToLba(v, cluster); if (!KSUCCESS(ReadSectors(v, clusterLba, v->SectorsPerCluster, clusterBuf))) { - MmFreePool(clusterBuf); - return 0; + MmFreePool(clusterBuf); return 0; } - uint32_t entries = v->BytesPerCluster / sizeof(DIRENT); - DIRENT* dir = (DIRENT*)clusterBuf; - + DIRENT *dir = (DIRENT *)clusterBuf; for (uint32_t i = 0; i < entries; i++) { uint8_t first = (uint8_t)dir[i].Name[0]; if (first == 0xE5 || first == 0x00) { - uint64_t entryByte = (uint64_t)i * sizeof(DIRENT); - *outLba = clusterLba + entryByte / v->BytesPerSector; - *outOffset = (uint32_t)(entryByte % v->BytesPerSector); - MmFreePool(clusterBuf); - return 1; + uint64_t eb = (uint64_t)i * sizeof(DIRENT); + *outLba = clusterLba + eb / v->BytesPerSector; + *outOffset = (uint32_t)(eb % v->BytesPerSector); + MmFreePool(clusterBuf); return 1; } } - prevCluster = cluster; - cluster = FatEntry(v, cluster); + cluster = FatEntry(v, cluster); } - // No free slot — extend the directory with one more cluster. uint32_t newCluster = AppendCluster(v, prevCluster); if (newCluster) { - *outLba = ClusterToLba(v, newCluster); - *outOffset = 0; - MmFreePool(clusterBuf); - return 1; + *outLba = ClusterToLba(v, newCluster); *outOffset = 0; + MmFreePool(clusterBuf); return 1; } - MmFreePool(clusterBuf); return 0; } // --------------------------------------------------------------------------- -// IO_FILESYSTEM vtable — read path (unchanged logic, updated signatures) +// Open / Close // --------------------------------------------------------------------------- - -static KSTATUS Fat32Open(IO_FILESYSTEM* fs, const char* path, void** fileCtx) { - FAT32_VOL* v = (FAT32_VOL*)fs->DriverCtx; - uint32_t cluster, size; - uint64_t direntLba; - uint32_t direntOffset; - +static KSTATUS Fat32Open(IO_FILESYSTEM *fs, const char *path, void **fileCtx) { + FAT32_VOL *v = (FAT32_VOL *)fs->DriverCtx; + uint32_t cluster, size; uint64_t direntLba; uint32_t direntOffset; KSTATUS s = TraverseEx(v, path, &cluster, &size, &direntLba, &direntOffset); if (!KSUCCESS(s)) return s; - - FAT32_FILE* f = (FAT32_FILE*)MmAllocatePool(sizeof(FAT32_FILE)); + FAT32_FILE *f = (FAT32_FILE *)MmAllocatePool(sizeof(FAT32_FILE)); if (!f) return STATUS_NO_MEMORY; - f->StartCluster = cluster; - f->FileSize = size; - f->Vol = v; - f->DirentLba = direntLba; - f->DirentOffset = direntOffset; - + f->StartCluster = cluster; f->FileSize = size; f->Vol = v; + f->DirentLba = direntLba; f->DirentOffset = direntOffset; *fileCtx = f; return STATUS_SUCCESS; } -static KSTATUS Fat32Read(IO_FILESYSTEM* fs, void* fileCtx, - uint64_t offset, void* buf, - size_t size, size_t* bytesRead) { +static void Fat32Close(IO_FILESYSTEM *fs, void *fileCtx) { (void)fs; - FAT32_FILE* f = (FAT32_FILE*)fileCtx; - FAT32_VOL* v = f->Vol; + FAT32_FILE *f = (FAT32_FILE *)fileCtx; + FlushFatCache(f->Vol); + MmFreePool(fileCtx); +} + +// --------------------------------------------------------------------------- +// Read (fix #4: contiguous-run coalescing) +// --------------------------------------------------------------------------- +// We peek ahead in the FAT chain: if cluster N+1 == cluster N physically, +// extend the current run instead of issuing a new ReadSectors call. +// Run length is capped at MAX_RUN_SECTORS to stay within the AHCI bounce +// buffer (128 sectors = 64 KB). +// +// FatEntry() calls in the peek loop are nearly free because they hit the +// FAT sector cache (fix #1). + +#define MAX_RUN_SECTORS 128u + +static KSTATUS Fat32Read(IO_FILESYSTEM *fs, void *fileCtx, + uint64_t offset, void *buf, + size_t size, size_t *bytesRead) { + (void)fs; + FAT32_FILE *f = (FAT32_FILE *)fileCtx; + FAT32_VOL *v = f->Vol; if (offset >= f->FileSize) { *bytesRead = 0; return STATUS_SUCCESS; } if (offset + size > f->FileSize) size = (size_t)(f->FileSize - offset); - uint8_t* clusterBuf = (uint8_t*)MmAllocatePool(v->BytesPerCluster); - if (!clusterBuf) return STATUS_NO_MEMORY; + // Single allocation for the largest possible coalesced run. + uint8_t *runBuf = (uint8_t *)MmAllocatePool(MAX_RUN_SECTORS * 512u); + if (!runBuf) return STATUS_NO_MEMORY; - size_t totalRead = 0; - uint8_t* out = (uint8_t*)buf; - uint32_t skipClusters = (uint32_t)(offset / v->BytesPerCluster); - uint32_t offsetInCluster = (uint32_t)(offset % v->BytesPerCluster); - uint32_t cluster = f->StartCluster; + size_t totalRead = 0; + uint8_t *out = (uint8_t *)buf; + uint32_t skipClusters = (uint32_t)(offset / v->BytesPerCluster); + uint32_t offsetInCluster = (uint32_t)(offset % v->BytesPerCluster); + uint32_t cluster = f->StartCluster; for (uint32_t i = 0; i < skipClusters && cluster < FAT32_EOC; i++) cluster = FatEntry(v, cluster); while (size > 0 && cluster >= 2 && cluster < FAT32_EOC) { - if (!KSUCCESS(ReadSectors(v, ClusterToLba(v, cluster), - v->SectorsPerCluster, clusterBuf))) + // Build the longest physically-contiguous run we can. + uint32_t runStart = cluster; + uint32_t runSectors = v->SectorsPerCluster; + uint32_t next = FatEntry(v, cluster); + + while (next == cluster + 1 && next < FAT32_EOC + && runSectors + v->SectorsPerCluster <= MAX_RUN_SECTORS) { + cluster = next; + next = FatEntry(v, cluster); + runSectors += v->SectorsPerCluster; + } + + if (!KSUCCESS(ReadSectors(v, ClusterToLba(v, runStart), runSectors, runBuf))) break; - size_t avail = v->BytesPerCluster - offsetInCluster; - size_t copy = avail < size ? avail : size; - memcpy(out, clusterBuf + offsetInCluster, copy); + + uint32_t runBytes = runSectors * 512u; + size_t avail = runBytes - offsetInCluster; + size_t copy = avail < size ? avail : size; + + memcpy(out, runBuf + offsetInCluster, copy); out += copy; totalRead += copy; size -= copy; offsetInCluster = 0; - cluster = FatEntry(v, cluster); + cluster = next; } - MmFreePool(clusterBuf); + MmFreePool(runBuf); *bytesRead = totalRead; return STATUS_SUCCESS; } // --------------------------------------------------------------------------- -// IO_FILESYSTEM vtable — write path (new) +// Write (fix #4: contiguous-run coalescing) // --------------------------------------------------------------------------- +// Same strategy as read. Whole-cluster-aligned runs skip the read-modify- +// write; partial head/tail clusters still require it. -// Write up to 'size' bytes at 'offset' in the file, extending it as needed. -// Performs a read-modify-write for any partial cluster at the head or tail. -static KSTATUS Fat32Write(IO_FILESYSTEM* fs, void* fileCtx, - uint64_t offset, const void* buf, - size_t size, size_t* bytesWritten) { +static KSTATUS Fat32Write(IO_FILESYSTEM *fs, void *fileCtx, + uint64_t offset, const void *buf, + size_t size, size_t *bytesWritten) { (void)fs; if (!size) { *bytesWritten = 0; return STATUS_SUCCESS; } - FAT32_FILE* f = (FAT32_FILE*)fileCtx; - FAT32_VOL* v = f->Vol; - const uint8_t* src = (const uint8_t*)buf; + FAT32_FILE *f = (FAT32_FILE *)fileCtx; + FAT32_VOL *v = f->Vol; + const uint8_t *src = (const uint8_t *)buf; - // Ensure the file has at least one cluster. + // Ensure at least one cluster exists. if (f->StartCluster < 2) { uint32_t first = AllocCluster(v); if (!first) { *bytesWritten = 0; return STATUS_NO_MEMORY; } @@ -697,8 +745,7 @@ static KSTATUS Fat32Write(IO_FILESYSTEM* fs, void* fileCtx, DirentUpdateFirstCluster(v, f->DirentLba, f->DirentOffset, first); } - // Walk the cluster chain to the cluster that contains 'offset', - // allocating new clusters along the way if required. + // Walk to the starting cluster, allocating as needed. uint32_t clusterIndex = (uint32_t)(offset / v->BytesPerCluster); uint32_t offsetInCluster = (uint32_t)(offset % v->BytesPerCluster); uint32_t cluster = f->StartCluster; @@ -712,52 +759,66 @@ static KSTATUS Fat32Write(IO_FILESYSTEM* fs, void* fileCtx, cluster = next; } - // Write loop — one cluster per iteration. - uint8_t* clusterBuf = (uint8_t*)MmAllocatePool(v->BytesPerCluster); - if (!clusterBuf) { *bytesWritten = 0; return STATUS_NO_MEMORY; } + uint8_t *runBuf = (uint8_t *)MmAllocatePool(MAX_RUN_SECTORS * 512u); + if (!runBuf) { *bytesWritten = 0; return STATUS_NO_MEMORY; } - size_t written = 0; - size_t remaining = size; + size_t written = 0, remaining = size; while (remaining > 0 && cluster >= 2) { - // Read first when this is a partial-cluster write (head or tail). - int partial = (offsetInCluster > 0) || - (remaining < v->BytesPerCluster); - if (partial) { - if (!KSUCCESS(ReadSectors(v, ClusterToLba(v, cluster), - v->SectorsPerCluster, clusterBuf))) { - break; + // Build a contiguous run (only when cluster-aligned to avoid a + // partial read-modify-write spanning multiple clusters). + uint32_t runStart = cluster; + uint32_t runSectors = v->SectorsPerCluster; + uint32_t next = FatEntry(v, cluster); + + if (offsetInCluster == 0) { + while (next == cluster + 1 && next < FAT32_EOC + && runSectors + v->SectorsPerCluster <= MAX_RUN_SECTORS) { + cluster = next; + next = FatEntry(v, cluster); + runSectors += v->SectorsPerCluster; } } - size_t avail = v->BytesPerCluster - offsetInCluster; - size_t copy = avail < remaining ? avail : remaining; + uint32_t runBytes = runSectors * 512u; + size_t avail = runBytes - offsetInCluster; + size_t copy = avail < remaining ? avail : remaining; - memcpy(clusterBuf + offsetInCluster, src, copy); - - if (!KSUCCESS(WriteSectors(v, ClusterToLba(v, cluster), - v->SectorsPerCluster, clusterBuf))) { - break; + // Read existing data only for partial-cluster writes. + bool partial = (offsetInCluster > 0) || (copy < (size_t)runBytes); + if (partial) { + if (!KSUCCESS(ReadSectors(v, ClusterToLba(v, runStart), runSectors, runBuf))) + break; } + memcpy(runBuf + offsetInCluster, src, copy); + + if (!KSUCCESS(WriteSectors(v, ClusterToLba(v, runStart), runSectors, runBuf))) + break; + src += copy; written += copy; remaining -= copy; offsetInCluster = 0; if (remaining > 0) { - uint32_t next = FatEntry(v, cluster); - if (next < 2 || next >= FAT32_EOC) { - next = AppendCluster(v, cluster); - if (!next) break; // disk full - } + // Advance: if end-of-chain, append a new cluster. cluster = next; + if (cluster < 2 || cluster >= FAT32_EOC) { + // Find the actual last cluster in the run we just wrote. + uint32_t last = runStart; + for (uint32_t tmp = FatEntry(v, last); + tmp >= 2 && tmp < FAT32_EOC; + tmp = FatEntry(v, last)) + last = tmp; + cluster = AppendCluster(v, last); + if (!cluster) break; + } } } - MmFreePool(clusterBuf); + MmFreePool(runBuf); - // Update file size in the directory entry if we extended the file. uint64_t newEnd = offset + written; if (newEnd > f->FileSize) { f->FileSize = (uint32_t)newEnd; @@ -768,75 +829,56 @@ static KSTATUS Fat32Write(IO_FILESYSTEM* fs, void* fileCtx, return (written == size) ? STATUS_SUCCESS : STATUS_DEVICE_ERROR; } -// Create a new file at 'path'. The parent directory must already exist. -// Returns an open FAT32_FILE context on success. -static KSTATUS Fat32Create(IO_FILESYSTEM* fs, const char* path, - void** fileCtx) { - FAT32_VOL* v = (FAT32_VOL*)fs->DriverCtx; - +// --------------------------------------------------------------------------- +// Create +// --------------------------------------------------------------------------- +static KSTATUS Fat32Create(IO_FILESYSTEM *fs, const char *path, void **fileCtx) { + FAT32_VOL *v = (FAT32_VOL *)fs->DriverCtx; char parentPath[256], filename[256]; SplitPath(path, parentPath, filename); if (!filename[0]) return STATUS_INVALID_PARAMETER; - // Resolve the parent directory. uint32_t parentCluster, parentSize; KSTATUS s = Traverse(v, parentPath, &parentCluster, &parentSize); if (!KSUCCESS(s)) return s; - // Reject if a file with that name already exists. - { - uint32_t existCluster, existSize; - uint8_t existAttr; - if (SearchDir(v, parentCluster, filename, &existCluster, &existSize, - &existAttr, NULL, NULL)) - return STATUS_OBJECT_NAME_COLLISION; - } + { uint32_t ec, es; uint8_t ea; + if (SearchDir(v, parentCluster, filename, &ec, &es, &ea, NULL, NULL)) + return STATUS_OBJECT_NAME_COLLISION; } - // Find (or create) a free slot in the parent directory. - uint64_t direntLba; - uint32_t direntOffset; + uint64_t direntLba; uint32_t direntOffset; if (!FindFreeDirent(v, parentCluster, &direntLba, &direntOffset)) return STATUS_NO_MEMORY; - // Build and write the 8.3 directory entry. - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); + uint8_t *sec = (uint8_t *)MmAllocatePool(v->BytesPerSector); if (!sec) return STATUS_NO_MEMORY; - s = ReadSectors(v, direntLba, 1, sec); if (!KSUCCESS(s)) { MmFreePool(sec); return s; } - DIRENT* d = (DIRENT*)(sec + direntOffset); + DIRENT *d = (DIRENT *)(sec + direntOffset); memset(d, 0, sizeof(DIRENT)); Make83Name(filename, d->Name, d->Ext); - d->Attr = ATTR_ARCHIVE; - d->FirstClusterHi = 0; - d->FirstClusterLo = 0; - d->FileSize = 0; + d->Attr = ATTR_ARCHIVE; s = WriteSectors(v, direntLba, 1, sec); MmFreePool(sec); if (!KSUCCESS(s)) return s; - // Allocate and return a file context. - FAT32_FILE* f = (FAT32_FILE*)MmAllocatePool(sizeof(FAT32_FILE)); + FAT32_FILE *f = (FAT32_FILE *)MmAllocatePool(sizeof(FAT32_FILE)); if (!f) return STATUS_NO_MEMORY; - f->StartCluster = 0; - f->FileSize = 0; - f->Vol = v; - f->DirentLba = direntLba; - f->DirentOffset = direntOffset; - + f->StartCluster = 0; f->FileSize = 0; f->Vol = v; + f->DirentLba = direntLba; f->DirentOffset = direntOffset; *fileCtx = f; return STATUS_SUCCESS; } -// Truncate or extend the file to exactly 'newSize' bytes. -static KSTATUS Fat32Truncate(IO_FILESYSTEM* fs, void* fileCtx, - uint64_t newSize) { +// --------------------------------------------------------------------------- +// Truncate +// --------------------------------------------------------------------------- +static KSTATUS Fat32Truncate(IO_FILESYSTEM *fs, void *fileCtx, uint64_t newSize) { (void)fs; - FAT32_FILE* f = (FAT32_FILE*)fileCtx; - FAT32_VOL* v = f->Vol; - + FAT32_FILE *f = (FAT32_FILE *)fileCtx; + FAT32_VOL *v = f->Vol; if ((uint32_t)newSize == f->FileSize) return STATUS_SUCCESS; if (newSize == 0) { @@ -846,47 +888,36 @@ static KSTATUS Fat32Truncate(IO_FILESYSTEM* fs, void* fileCtx, DirentUpdateFirstCluster(v, f->DirentLba, f->DirentOffset, 0); } f->FileSize = 0; - return DirentUpdateSize(v, f->DirentLba, f->DirentOffset, 0); + KSTATUS s = DirentUpdateSize(v, f->DirentLba, f->DirentOffset, 0); + FlushFatCache(v); + return s; } uint32_t newClusters = (uint32_t) ((newSize + v->BytesPerCluster - 1) / v->BytesPerCluster); if (newSize < f->FileSize) { - // Shorten: walk to the new last cluster, then free the tail. - if (f->StartCluster < 2) goto update_size; // nothing to free - - uint32_t cluster = f->StartCluster; - uint32_t lastGood = cluster; + if (f->StartCluster < 2) goto update_size; + uint32_t cluster = f->StartCluster, lastGood = cluster; for (uint32_t i = 1; i < newClusters && cluster < FAT32_EOC; i++) { - lastGood = cluster; - cluster = FatEntry(v, cluster); + lastGood = cluster; cluster = FatEntry(v, cluster); } - // lastGood is now the new end-of-chain. uint32_t tail = FatEntry(v, lastGood); WriteFatEntry(v, lastGood, FAT32_EOC_MARK); FreeClusterChain(v, tail); - } else { - // Extend: allocate the extra clusters (AllocCluster zeroes them). uint32_t curClusters = f->FileSize - ? (f->FileSize + v->BytesPerCluster - 1) / v->BytesPerCluster - : 0; - + ? (f->FileSize + v->BytesPerCluster - 1) / v->BytesPerCluster : 0; uint32_t lastCluster = 0; - if (f->StartCluster < 2) { - // Empty file — allocate the first cluster. uint32_t first = AllocCluster(v); if (!first) return STATUS_NO_MEMORY; f->StartCluster = first; DirentUpdateFirstCluster(v, f->DirentLba, f->DirentOffset, first); - lastCluster = first; - curClusters = 1; + lastCluster = first; curClusters = 1; } else { lastCluster = GetChainEnd(v, f->StartCluster, NULL); } - for (uint32_t i = curClusters; i < newClusters; i++) { uint32_t next = AppendCluster(v, lastCluster); if (!next) return STATUS_NO_MEMORY; @@ -896,253 +927,188 @@ static KSTATUS Fat32Truncate(IO_FILESYSTEM* fs, void* fileCtx, update_size: f->FileSize = (uint32_t)newSize; - return DirentUpdateSize(v, f->DirentLba, f->DirentOffset, (uint32_t)newSize); + { KSTATUS s = DirentUpdateSize(v, f->DirentLba, f->DirentOffset, (uint32_t)newSize); + FlushFatCache(v); + return s; } } -// Delete the file at 'path': marks its DIRENT as deleted and frees its clusters. -static KSTATUS Fat32Delete(IO_FILESYSTEM* fs, const char* path) { - FAT32_VOL* v = (FAT32_VOL*)fs->DriverCtx; - - uint32_t cluster, size; - uint64_t direntLba; - uint32_t direntOffset; - KSTATUS s = TraverseEx(v, path, &cluster, &size, - &direntLba, &direntOffset); +// --------------------------------------------------------------------------- +// Delete +// --------------------------------------------------------------------------- +static KSTATUS Fat32Delete(IO_FILESYSTEM *fs, const char *path) { + FAT32_VOL *v = (FAT32_VOL *)fs->DriverCtx; + uint32_t cluster, size; uint64_t direntLba; uint32_t direntOffset; + KSTATUS s = TraverseEx(v, path, &cluster, &size, &direntLba, &direntOffset); if (!KSUCCESS(s)) return s; - if (!direntLba) return STATUS_ACCESS_DENIED; // root directory + if (!direntLba) return STATUS_ACCESS_DENIED; - // Mark the DIRENT as deleted (0xE5). - uint8_t* sec = (uint8_t*)MmAllocatePool(v->BytesPerSector); + uint8_t *sec = (uint8_t *)MmAllocatePool(v->BytesPerSector); if (!sec) return STATUS_NO_MEMORY; s = ReadSectors(v, direntLba, 1, sec); - if (KSUCCESS(s)) { - sec[direntOffset] = (uint8_t)0xE5; - s = WriteSectors(v, direntLba, 1, sec); - } + if (KSUCCESS(s)) { sec[direntOffset] = 0xE5; s = WriteSectors(v, direntLba, 1, sec); } MmFreePool(sec); if (!KSUCCESS(s)) return s; - // Release the cluster chain. if (cluster >= 2) FreeClusterChain(v, cluster); + FlushFatCache(v); return STATUS_SUCCESS; } -static uint64_t Fat32GetSize(IO_FILESYSTEM* fs, void* fileCtx) { - (void)fs; - return ((FAT32_FILE*)fileCtx)->FileSize; -} - -static void Fat32Close(IO_FILESYSTEM* fs, void* fileCtx) { - (void)fs; - MmFreePool(fileCtx); +static uint64_t Fat32GetSize(IO_FILESYSTEM *fs, void *fileCtx) { + (void)fs; return ((FAT32_FILE *)fileCtx)->FileSize; } // --------------------------------------------------------------------------- -// Directory enumeration +// Directory enumeration (fix #2: cluster buffer cached in context) // --------------------------------------------------------------------------- +// Previously: allocate + ReadSectors + return 1 entry + free, every call. +// Now: buffer lives in FAT32_DIR_CTX; ReadSectors fires only on cluster +// boundaries. typedef struct { - FAT32_VOL* Vol; - uint32_t DirCluster; // start cluster of the directory - uint32_t CurCluster; // cluster currently being scanned - uint32_t EntryIndex; // entry index within the current cluster - char LfnBuf[MAX_LFN]; // accumulated LFN for the next entry + FAT32_VOL *Vol; + uint32_t DirCluster; + uint32_t CurCluster; + uint32_t LoadedCluster; // which cluster is currently in ClusterBuf + uint32_t EntryIndex; + char LfnBuf[MAX_LFN]; int HasLfn; + uint8_t *ClusterBuf; // allocated once in OpenDir, freed in CloseDir } FAT32_DIR_CTX; -static KSTATUS Fat32OpenDir(IO_FILESYSTEM* fs, const char* dirPath, void** dirCtx) { - FAT32_VOL* v = (FAT32_VOL*)fs->DriverCtx; - - uint32_t cluster, size; - KSTATUS s; - +static KSTATUS Fat32OpenDir(IO_FILESYSTEM *fs, const char *dirPath, void **dirCtx) { + FAT32_VOL *v = (FAT32_VOL *)fs->DriverCtx; + uint32_t cluster; if (!dirPath || dirPath[0] == '\0') { - // Empty path = root directory cluster = v->RootCluster; } else { - s = Traverse(v, dirPath, &cluster, &size); + uint32_t size; KSTATUS s = Traverse(v, dirPath, &cluster, &size); if (!KSUCCESS(s)) return s; - // The path must refer to a directory (size==0 for dirs in FAT32) - // Traverse doesn't give us the attr here, but root-style open is fine; - // if the caller passes a file path we'll just enumerate its "cluster" - // harmlessly and get zero results. } - FAT32_DIR_CTX* ctx = (FAT32_DIR_CTX*)MmAllocatePool(sizeof(FAT32_DIR_CTX)); + FAT32_DIR_CTX *ctx = (FAT32_DIR_CTX *)MmAllocatePool(sizeof(FAT32_DIR_CTX)); if (!ctx) return STATUS_NO_MEMORY; - ctx->Vol = v; - ctx->DirCluster = cluster; - ctx->CurCluster = cluster; - ctx->EntryIndex = 0; - ctx->HasLfn = 0; - memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); + ctx->ClusterBuf = (uint8_t *)MmAllocatePool(v->BytesPerCluster); + if (!ctx->ClusterBuf) { MmFreePool(ctx); return STATUS_NO_MEMORY; } + ctx->Vol = v; + ctx->DirCluster = cluster; + ctx->CurCluster = cluster; + ctx->LoadedCluster = (uint32_t)-1; + ctx->EntryIndex = 0; + ctx->HasLfn = 0; + memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); *dirCtx = ctx; return STATUS_SUCCESS; } -static KSTATUS Fat32ReadDir(IO_FILESYSTEM* fs, void* dirCtx, KDIR_ENTRY* out) { +static KSTATUS Fat32ReadDir(IO_FILESYSTEM *fs, void *dirCtx, KDIR_ENTRY *out) { (void)fs; - FAT32_DIR_CTX* ctx = (FAT32_DIR_CTX*)dirCtx; - FAT32_VOL* v = ctx->Vol; - - uint8_t* clusterBuf = (uint8_t*)MmAllocatePool(v->BytesPerCluster); - if (!clusterBuf) return STATUS_NO_MEMORY; - - uint32_t entriesPerCluster = v->BytesPerCluster / sizeof(DIRENT); + FAT32_DIR_CTX *ctx = (FAT32_DIR_CTX *)dirCtx; + FAT32_VOL *v = ctx->Vol; + uint32_t epc = v->BytesPerCluster / sizeof(DIRENT); while (ctx->CurCluster >= 2 && ctx->CurCluster < FAT32_EOC) { - uint64_t clusterLba = ClusterToLba(v, ctx->CurCluster); - if (!KSUCCESS(ReadSectors(v, clusterLba, v->SectorsPerCluster, clusterBuf))) - break; + // Load the cluster only when crossing a cluster boundary. + if (ctx->CurCluster != ctx->LoadedCluster) { + if (!KSUCCESS(ReadSectors(v, ClusterToLba(v, ctx->CurCluster), + v->SectorsPerCluster, ctx->ClusterBuf))) + break; + ctx->LoadedCluster = ctx->CurCluster; + } - DIRENT* dir = (DIRENT*)clusterBuf; + DIRENT *dir = (DIRENT *)ctx->ClusterBuf; + while (ctx->EntryIndex < epc) { + DIRENT *e = &dir[ctx->EntryIndex++]; - while (ctx->EntryIndex < entriesPerCluster) { - DIRENT* e = &dir[ctx->EntryIndex]; - ctx->EntryIndex++; + if (e->Name[0] == 0x00) { ctx->CurCluster = FAT32_EOC; return STATUS_NO_MORE_FILES; } + if ((uint8_t)e->Name[0] == 0xE5) { ctx->HasLfn = 0; memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); continue; } + if (e->Attr == ATTR_LFN) { LfnAppend(ctx->LfnBuf, (LFN_ENTRY *)e); ctx->HasLfn = 1; continue; } + if (e->Attr & 0x08 && !(e->Attr & ATTR_DIRECTORY)) { ctx->HasLfn = 0; memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); continue; } - // End-of-directory marker - if (e->Name[0] == 0x00) { - MmFreePool(clusterBuf); - ctx->CurCluster = FAT32_EOC; // mark exhausted - return STATUS_NO_MORE_FILES; - } - - // Deleted entry - if ((uint8_t)e->Name[0] == 0xE5) { - ctx->HasLfn = 0; - memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); - continue; - } - - // LFN entry - if (e->Attr == ATTR_LFN) { - LfnAppend(ctx->LfnBuf, (LFN_ENTRY*)e); - ctx->HasLfn = 1; - continue; - } - - // Skip volume label (attr 0x08) - if (e->Attr & 0x08 && !(e->Attr & ATTR_DIRECTORY)) { - ctx->HasLfn = 0; - memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); - continue; - } - - // Build display name: prefer LFN, fall back to 8.3 if (ctx->HasLfn && ctx->LfnBuf[0]) { size_t len = strlen(ctx->LfnBuf); if (len >= KDIR_NAME_MAX) len = KDIR_NAME_MAX - 1; - memcpy(out->Name, ctx->LfnBuf, len); - out->Name[len] = '\0'; + memcpy(out->Name, ctx->LfnBuf, len); out->Name[len] = '\0'; } else { - // Reconstruct 8.3 name - char name83[13]; - int n = 0; + char name83[13]; int n = 0; for (int i = 0; i < 8 && e->Name[i] != ' '; i++) - name83[n++] = (char)(e->Name[i] >= 'A' && e->Name[i] <= 'Z' - ? e->Name[i] + 32 : e->Name[i]); + name83[n++] = (char)(e->Name[i] >= 'A' && e->Name[i] <= 'Z' ? e->Name[i]+32 : e->Name[i]); if (e->Ext[0] != ' ') { name83[n++] = '.'; for (int i = 0; i < 3 && e->Ext[i] != ' '; i++) - name83[n++] = (char)(e->Ext[i] >= 'A' && e->Ext[i] <= 'Z' - ? e->Ext[i] + 32 : e->Ext[i]); + name83[n++] = (char)(e->Ext[i] >= 'A' && e->Ext[i] <= 'Z' ? e->Ext[i]+32 : e->Ext[i]); } name83[n] = '\0'; - size_t len = (size_t)n; - if (len >= KDIR_NAME_MAX) len = KDIR_NAME_MAX - 1; - memcpy(out->Name, name83, len); - out->Name[len] = '\0'; + size_t len = (size_t)n; if (len >= KDIR_NAME_MAX) len = KDIR_NAME_MAX - 1; + memcpy(out->Name, name83, len); out->Name[len] = '\0'; } - out->Attr = e->Attr; - out->FileSize = e->FileSize; - - ctx->HasLfn = 0; - memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); - - MmFreePool(clusterBuf); + out->Attr = e->Attr; out->FileSize = e->FileSize; + ctx->HasLfn = 0; memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); return STATUS_SUCCESS; } - // Move to next cluster ctx->CurCluster = FatEntry(v, ctx->CurCluster); - ctx->EntryIndex = 0; - ctx->HasLfn = 0; + ctx->EntryIndex = 0; ctx->HasLfn = 0; memset(ctx->LfnBuf, 0, sizeof(ctx->LfnBuf)); } - MmFreePool(clusterBuf); return STATUS_NO_MORE_FILES; } -static void Fat32CloseDir(IO_FILESYSTEM* fs, void* dirCtx) { +static void Fat32CloseDir(IO_FILESYSTEM *fs, void *dirCtx) { (void)fs; - MmFreePool(dirCtx); + FAT32_DIR_CTX *ctx = (FAT32_DIR_CTX *)dirCtx; + MmFreePool(ctx->ClusterBuf); + MmFreePool(ctx); } // --------------------------------------------------------------------------- // Partition scan (MBR + GPT) — unchanged // --------------------------------------------------------------------------- -static const EFI_GUID GUID_EFI_SYSTEM = { - 0xC12A7328, 0xF81F, 0x11D2, {0xBA,0x4B,0x00,0xA0,0xC9,0x3E,0xC9,0x3B} -}; -static const EFI_GUID GUID_MS_BASIC_DATA = { - 0xEBD0A0A2, 0xB9E5, 0x4433, {0x87,0xC0,0x68,0xB6,0xB7,0x26,0x99,0xC7} -}; -static const EFI_GUID GUID_LINUX_BASIC_DATA = { - 0x0FC63DAF, 0x8483, 0x4772, {0x8E,0x79,0x3D,0x69,0xD8,0x47,0x7D,0xE4} -}; +static const EFI_GUID GUID_EFI_SYSTEM = { 0xC12A7328, 0xF81F, 0x11D2, {0xBA,0x4B,0x00,0xA0,0xC9,0x3E,0xC9,0x3B} }; +static const EFI_GUID GUID_MS_BASIC_DATA = { 0xEBD0A0A2, 0xB9E5, 0x4433, {0x87,0xC0,0x68,0xB6,0xB7,0x26,0x99,0xC7} }; +static const EFI_GUID GUID_LINUX_BASIC_DATA = { 0x0FC63DAF, 0x8483, 0x4772, {0x8E,0x79,0x3D,0x69,0xD8,0x47,0x7D,0xE4} }; -static int IsFat32Vbr(FAT32_VOL* v, uint32_t lba) { +static int IsFat32Vbr(FAT32_VOL *v, uint32_t lba) { uint8_t sector[512]; if (!KSUCCESS(ReadSectors(v, lba, 1, sector))) return 0; if (sector[510] != 0x55 || sector[511] != 0xAA) return 0; - BPB* bpb = (BPB*)sector; - if (bpb->FatSize16 != 0 || bpb->RootEntryCount != 0) return 0; - if (bpb->FatSize32 == 0) return 0; - return 1; + BPB *bpb = (BPB *)sector; + return bpb->FatSize16 == 0 && bpb->RootEntryCount == 0 && bpb->FatSize32 != 0; } -static uint32_t FindFat32Partition(FAT32_VOL* v) { +static uint32_t FindFat32Partition(FAT32_VOL *v) { uint8_t mbr[512]; if (!KSUCCESS(ReadSectors(v, 0, 1, mbr))) return 0; if (mbr[510] != 0x55 || mbr[511] != 0xAA) return 0; int isGpt = 0; - for (int i = 0; i < 4; i++) - if (mbr[0x1BE + i * 16 + 4] == 0xEE) { isGpt = 1; break; } + for (int i = 0; i < 4; i++) if (mbr[0x1BE + i*16 + 4] == 0xEE) { isGpt = 1; break; } if (isGpt) { uint8_t gptSector[512]; if (!KSUCCESS(ReadSectors(v, 1, 1, gptSector))) return 0; - GPT_HEADER* gpt = (GPT_HEADER*)gptSector; + GPT_HEADER *gpt = (GPT_HEADER *)gptSector; if (memcmp(gpt->Signature, "EFI PART", 8) != 0) return 0; - uint64_t entryLBA = gpt->PartitionEntryLBA; - uint32_t numEntries = gpt->NumberOfPartitionEntries; - uint32_t entrySize = gpt->SizeOfPartitionEntry; + uint64_t entryLBA = gpt->PartitionEntryLBA; + uint32_t numEntries = gpt->NumberOfPartitionEntries; + uint32_t entrySize = gpt->SizeOfPartitionEntry; if (entrySize < sizeof(GPT_ENTRY)) return 0; - uint32_t entriesPerSector = 512 / entrySize; - uint8_t entrySector[512]; - + uint32_t eps = 512 / entrySize; uint8_t entrySector[512]; for (uint32_t i = 0; i < numEntries; i++) { - if (i % entriesPerSector == 0) { - if (!KSUCCESS(ReadSectors(v, entryLBA + i / entriesPerSector, - 1, entrySector))) - return 0; - } - GPT_ENTRY* entry = (GPT_ENTRY*) - (entrySector + (i % entriesPerSector) * entrySize); + if (i % eps == 0) + if (!KSUCCESS(ReadSectors(v, entryLBA + i/eps, 1, entrySector))) return 0; + GPT_ENTRY *entry = (GPT_ENTRY *)(entrySector + (i % eps) * entrySize); static const EFI_GUID emptyGuid = {0}; - if (memcmp(&entry->PartitionTypeGUID, &emptyGuid, - sizeof(EFI_GUID)) == 0) continue; - if (memcmp(&entry->PartitionTypeGUID, &GUID_EFI_SYSTEM, sizeof(EFI_GUID)) == 0 || - memcmp(&entry->PartitionTypeGUID, &GUID_MS_BASIC_DATA, sizeof(EFI_GUID)) == 0 || - memcmp(&entry->PartitionTypeGUID, &GUID_LINUX_BASIC_DATA,sizeof(EFI_GUID)) == 0) { + if (memcmp(&entry->PartitionTypeGUID, &emptyGuid, sizeof(EFI_GUID)) == 0) continue; + if (memcmp(&entry->PartitionTypeGUID, &GUID_EFI_SYSTEM, sizeof(EFI_GUID)) == 0 || + memcmp(&entry->PartitionTypeGUID, &GUID_MS_BASIC_DATA, sizeof(EFI_GUID)) == 0 || + memcmp(&entry->PartitionTypeGUID, &GUID_LINUX_BASIC_DATA, sizeof(EFI_GUID)) == 0) { uint32_t lba = (uint32_t)entry->StartingLBA; if (IsFat32Vbr(v, lba)) return lba; } @@ -1151,10 +1117,9 @@ static uint32_t FindFat32Partition(FAT32_VOL* v) { } for (int i = 0; i < 4; i++) { - uint8_t* entry = mbr + 0x1BE + i * 16; - uint8_t type = entry[4]; - if (type == 0x0B || type == 0x0C) { - uint32_t lba = *(uint32_t*)(entry + 8); + uint8_t *entry = mbr + 0x1BE + i*16; + if (entry[4] == 0x0B || entry[4] == 0x0C) { + uint32_t lba = *(uint32_t *)(entry + 8); if (IsFat32Vbr(v, lba)) return lba; } } @@ -1164,30 +1129,27 @@ static uint32_t FindFat32Partition(FAT32_VOL* v) { // --------------------------------------------------------------------------- // DriverEntry // --------------------------------------------------------------------------- -static FAT32_VOL gVol; +static FAT32_VOL gVol; static IO_FILESYSTEM gFs; -KSTATUS DriverEntry(const HAL_API* hal) { +KSTATUS DriverEntry(const HAL_API *hal) { DbgPrint("FAT32: Init\n"); if (!hal) return STATUS_INVALID_PARAMETER; + FatCacheInvalidate(); + gVol.Hal = hal; gVol.DriveIndex = 0; uint32_t partLba = FindFat32Partition(&gVol); - if (!partLba) { - DbgPrint("FAT32: No FAT32 volume found.\n"); - return STATUS_NOT_SUPPORTED; - } + if (!partLba) { DbgPrint("FAT32: No FAT32 volume found.\n"); return STATUS_NOT_SUPPORTED; } gVol.PartitionLba = partLba; uint8_t sector[512]; - if (!KSUCCESS(ReadSectors(&gVol, partLba, 1, sector))) - return STATUS_DEVICE_ERROR; + if (!KSUCCESS(ReadSectors(&gVol, partLba, 1, sector))) return STATUS_DEVICE_ERROR; - BPB* bpb = (BPB*)sector; - if (bpb->FatSize16 != 0 || bpb->RootEntryCount != 0) - return STATUS_NOT_SUPPORTED; + BPB *bpb = (BPB *)sector; + if (bpb->FatSize16 != 0 || bpb->RootEntryCount != 0) return STATUS_NOT_SUPPORTED; gVol.BytesPerSector = bpb->BytesPerSector; gVol.SectorsPerCluster = bpb->SectorsPerCluster; @@ -1196,15 +1158,11 @@ KSTATUS DriverEntry(const HAL_API* hal) { gVol.NumFats = bpb->NumFats; gVol.FatSize = bpb->FatSize32; gVol.RootCluster = bpb->RootCluster; - gVol.DataStart = partLba - + bpb->ReservedSectors - + bpb->NumFats * bpb->FatSize32; + gVol.DataStart = partLba + bpb->ReservedSectors + bpb->NumFats * bpb->FatSize32; + gVol.NextFreeHint = 2; - uint32_t totalSectors = bpb->TotalSectors16 - ? bpb->TotalSectors16 : bpb->TotalSectors32; - uint32_t dataSectors = totalSectors - - bpb->ReservedSectors - - bpb->NumFats * bpb->FatSize32; + uint32_t totalSectors = bpb->TotalSectors16 ? bpb->TotalSectors16 : bpb->TotalSectors32; + uint32_t dataSectors = totalSectors - bpb->ReservedSectors - bpb->NumFats * bpb->FatSize32; gVol.TotalClusters = dataSectors / bpb->SectorsPerCluster; gFs.Open = Fat32Open; @@ -1221,12 +1179,11 @@ KSTATUS DriverEntry(const HAL_API* hal) { gFs.CloseDir = Fat32CloseDir; IO_VOLUME_PARAMS volParams; - volParams.DiskIndex = gVol.DriveIndex; - volParams.PartitionLba = partLba; + volParams.DiskIndex = gVol.DriveIndex; + volParams.PartitionLba = partLba; volParams.PartitionSize = totalSectors; KSTATUS status = IoRegisterFilesystem(gVol.DriveIndex, &gFs, &volParams); - DbgPrint("FAT32: Init complete (status=%d, clusters=%u).\n", - status, gVol.TotalClusters); + DbgPrint("FAT32: Init complete (status=%d, clusters=%u).\n", status, gVol.TotalClusters); return STATUS_SUCCESS; } diff --git a/code/hal/hal_api.h b/code/hal/hal_api.h index 254af46..818d1b1 100644 --- a/code/hal/hal_api.h +++ b/code/hal/hal_api.h @@ -21,11 +21,12 @@ typedef struct HAL_SCREEN { } HAL_SCREEN; typedef struct HAL_KEYBOARD { - bool (*Poll)(void); + uint8_t (*Poll)(void); uint8_t (*ReadScancode)(void); char (*ReadChar)(void); uint32_t (*GetModifiers)(void); void (*SetCallback)(void (*cb)(uint8_t scancode)); + bool (*IsKeyDown)(uint8_t scancode, bool extended); void (*Isr)(void); uint8_t IrqNumber; } HAL_KEYBOARD; diff --git a/code/hal/hal_keyboard.c b/code/hal/hal_keyboard.c index 73156a6..854b7f4 100644 --- a/code/hal/hal_keyboard.c +++ b/code/hal/hal_keyboard.c @@ -1,50 +1,31 @@ -// hal_keyboard.c - PS/2 keyboard, interrupt-driven, 256-entry ring buffer -// -// Scan-code set 1 (XT-compatible), as output by the 8042's built-in -// translation layer. Supports make/break for all standard keys, Shift / -// Ctrl / Alt / CapsLock / NumLock modifiers, and the E0-prefixed extended -// key set (arrows, Home/End/PgUp/PgDn/Ins/Del, RCtrl, RAlt, numpad-Enter, -// numpad-divide). -// -// Threading model -// --------------- -// Single-producer (ISR on IRQ 1) / single-consumer ring buffer. All -// ISR-written state is declared volatile. On a uniprocessor, volatile -// plus the natural atomicity of aligned int reads/writes is sufficient. -// On SMP, add acquire/release memory barriers around gHead and gTail. -// -// Caller responsibilities -// ----------------------- -// 1. Register KbdIsr with your interrupt dispatcher for IRQ 1. -// 2. Send the APIC/PIC EOI *after* KbdIsr returns, in the surrounding -// wrapper - not inside KbdIsr itself. -// 3. Unmask IRQ 1 in the APIC or 8259 before expecting any interrupts. -// +// hal_keyboard.c - PS/2 keyboard, interrupt-driven, with live state tracking #include #include #include #include -#include -#include // -- Port addresses ------------------------------------------------------------ #define PS2_DATA 0x60u #define PS2_STAT 0x64u #define PS2_CMD 0x64u -// -- Ring buffer --------------------------------------------------------------- -// KBD_BUF_SIZE must be a power of two; KBD_BUF_MASK replaces % with &. +// -- Ring buffer (for ASCII/typing) ------------------------------------------- #define KBD_BUF_SIZE 256u #define KBD_BUF_MASK (KBD_BUF_SIZE - 1u) static uint8_t gBuf[KBD_BUF_SIZE]; -static volatile int gHead = 0; // consumer read pointer (updated by reader) -static volatile int gTail = 0; // producer write pointer (updated by ISR) +static volatile int gHead = 0; +static volatile int gTail = 0; + +// -- Live Key State (for GetAsyncKeyState) ------------------------------------ +// These arrays track whether a key is currently held down. +static volatile uint8_t gKeyState[128]; // Standard scan codes +static volatile uint8_t gKeyStateExt[128]; // Extended (E0) scan codes // -- Scan-code set 1 constants ------------------------------------------------- -#define SC1_BREAK_BIT 0x80u // OR'd into every break (key-up) scan code -#define SC1_MAKE_MASK 0x7Fu // complement of SC1_BREAK_BIT; avoids ~uint cast -#define SC1_EXT_PREFIX 0xE0u // one-byte prefix for extended keys +#define SC1_BREAK_BIT 0x80u +#define SC1_MAKE_MASK 0x7Fu +#define SC1_EXT_PREFIX 0xE0u // -- Modifier flags ------------------------------------------------------------ #define MOD_LSHIFT (1u << 0) @@ -53,107 +34,38 @@ static volatile int gTail = 0; // producer write pointer (updated by ISR) #define MOD_RCTRL (1u << 3) #define MOD_LALT (1u << 4) #define MOD_RALT (1u << 5) -#define MOD_CAPS (1u << 6) // toggle, not a held key -#define MOD_NUMLOCK (1u << 7) // toggle, not a held key +#define MOD_CAPS (1u << 6) +#define MOD_NUMLOCK (1u << 7) #define MOD_SHIFT (MOD_LSHIFT | MOD_RSHIFT) #define MOD_CTRL (MOD_LCTRL | MOD_RCTRL) #define MOD_ALT (MOD_LALT | MOD_RALT) static volatile uint32_t gModifiers = 0; -static volatile bool gNextExtended = false; // previous byte was 0xE0 - -// -- Raw-scancode callback (invoked from ISR context) -------------------------- -// The pointer must be volatile so the compiler re-reads it on every ISR entry -// rather than caching the value seen at startup. +static volatile bool gNextExtended = false; static void (* volatile gCallback)(uint8_t) = NULL; -// -- ASCII translation tables - scan-code set 1, non-extended keys only -------- -// Index = 7-bit make code (SC1_BREAK_BIT cleared). 0 = no printable glyph. -// Numpad digits yield their digit characters; a NumLock-aware wrapper can -// substitute cursor-movement codes (e.g. HAL_KEY_HOME) when NumLock is clear. -// -// Layout verified against the IBM PC/AT scan-code set 1 reference. - +// -- ASCII Translation Tables -------------------------------------------------- static const char gUnshifted[128] = { -/*00*/ 0, -/*01*/ 0, // ESC -/*02*/ '1','2','3','4','5','6','7','8','9','0','-','=', // 02-0D -/*0E*/ '\b', -/*0F*/ '\t', -/*10*/ 'q','w','e','r','t','y','u','i','o','p','[',']', // 10-1B -/*1C*/ '\n', -/*1D*/ 0, // Left Ctrl -/*1E*/ 'a','s','d','f','g','h','j','k','l',';','\'','`', // 1E-29 -/*2A*/ 0, // Left Shift -/*2B*/ '\\', -/*2C*/ 'z','x','c','v','b','n','m',',','.','/', // 2C-35 -/*36*/ 0, // Right Shift -/*37*/ '*', // Numpad * (also PrtSc on some keyboards) -/*38*/ 0, // Left Alt -/*39*/ ' ', -/*3A*/ 0, // Caps Lock -/*3B*/ 0,0,0,0,0,0,0,0,0,0, // F1-F10 (3B-44) -/*45*/ 0, // Num Lock -/*46*/ 0, // Scroll Lock -/*47*/ '7','8','9', // Numpad 7-9 -/*4A*/ '-', // Numpad - -/*4B*/ '4','5','6', // Numpad 4-6 -/*4E*/ '+', // Numpad + -/*4F*/ '1','2','3', // Numpad 1-3 -/*52*/ '0', // Numpad 0 -/*53*/ '.', // Numpad . -/*54*/ 0,0,0, -/*57*/ 0, // F11 -/*58*/ 0, // F12 -/*59*/ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 59-68 - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // 69-78 - 0,0,0,0,0,0,0, // 79-7F + 0, 0, '1','2','3','4','5','6','7','8','9','0','-','=','\b','\t', + 'q','w','e','r','t','y','u','i','o','p','[',']','\n', 0, 'a','s', + 'd','f','g','h','j','k','l',';','\'','`', 0, '\\','z','x','c','v', + 'b','n','m',',','.','/', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, '7','8','9','-', '4','5','6','+', '1','2','3','0','.' }; static const char gShifted[128] = { -/*00*/ 0, -/*01*/ 0, // ESC -/*02*/ '!','@','#','$','%','^','&','*','(',')','_','+', // 02-0D -/*0E*/ '\b', -/*0F*/ '\t', -/*10*/ 'Q','W','E','R','T','Y','U','I','O','P','{','}', // 10-1B -/*1C*/ '\n', -/*1D*/ 0, // Left Ctrl -/*1E*/ 'A','S','D','F','G','H','J','K','L',':','"','~', // 1E-29 -/*2A*/ 0, // Left Shift -/*2B*/ '|', -/*2C*/ 'Z','X','C','V','B','N','M','<','>','?', // 2C-35 -/*36*/ 0, // Right Shift -/*37*/ '*', -/*38*/ 0, // Left Alt -/*39*/ ' ', -/*3A*/ 0, // Caps Lock -/*3B*/ 0,0,0,0,0,0,0,0,0,0, // F1-F10 -/*45*/ 0, -/*46*/ 0, -/*47*/ '7','8','9', -/*4A*/ '-', -/*4B*/ '4','5','6', -/*4E*/ '+', -/*4F*/ '1','2','3', -/*52*/ '0', -/*53*/ '.', -/*54*/ 0,0,0, -/*57*/ 0, // F11 -/*58*/ 0, // F12 -/*59*/ 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, '!','@','#','$','%','^','&','*','(',')','_','+','\b','\t', + 'Q','W','E','R','T','Y','U','I','O','P','{','}','\n', 0, 'A','S', + 'D','F','G','H','J','K','L',':','"','~', 0, '|','Z','X','C','V', + 'B','N','M','<','>','?', 0, '*', 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, '7','8','9','-', '4','5','6','+', '1','2','3','0','.' }; -// -- Interrupt service routine -------------------------------------------------- -// Called with interrupts disabled (inside the hardware IRQ handler). -// The caller's wrapper must send the APIC/PIC EOI after this returns. -static void KbdIsr(void) { +// -- ISR: The Engine ----------------------------------------------------------- +void KbdIsr(void) { uint8_t sc = __inbyte(PS2_DATA); - // E0 prefix: the following byte is an extended make/break code. if (sc == SC1_EXT_PREFIX) { gNextExtended = true; return; @@ -162,142 +74,87 @@ static void KbdIsr(void) { bool extended = gNextExtended; bool is_break = (sc & SC1_BREAK_BIT) != 0; uint8_t make = sc & SC1_MAKE_MASK; - gNextExtended = false; - // -- Update modifier state ------------------------------------------------- + // Update the live state arrays + if (extended) { + gKeyStateExt[make] = is_break ? 0 : 1; + } else { + gKeyState[make] = is_break ? 0 : 1; + } + + // Update modifiers if (!extended) { switch (make) { - case 0x2A: // Left Shift - gModifiers = is_break ? (gModifiers & ~MOD_LSHIFT) - : (gModifiers | MOD_LSHIFT); - return; - case 0x36: // Right Shift - gModifiers = is_break ? (gModifiers & ~MOD_RSHIFT) - : (gModifiers | MOD_RSHIFT); - return; - case 0x1D: // Left Ctrl - gModifiers = is_break ? (gModifiers & ~MOD_LCTRL) - : (gModifiers | MOD_LCTRL); - return; - case 0x38: // Left Alt - gModifiers = is_break ? (gModifiers & ~MOD_LALT) - : (gModifiers | MOD_LALT); - return; - case 0x3A: // Caps Lock - toggle on make only - if (!is_break) gModifiers ^= MOD_CAPS; - return; - case 0x45: // Num Lock - toggle on make only - if (!is_break) gModifiers ^= MOD_NUMLOCK; - return; - default: - break; + case 0x2A: gModifiers = is_break ? (gModifiers & ~MOD_LSHIFT) : (gModifiers | MOD_LSHIFT); break; + case 0x36: gModifiers = is_break ? (gModifiers & ~MOD_RSHIFT) : (gModifiers | MOD_RSHIFT); break; + case 0x1D: gModifiers = is_break ? (gModifiers & ~MOD_LCTRL) : (gModifiers | MOD_LCTRL); break; + case 0x38: gModifiers = is_break ? (gModifiers & ~MOD_LALT) : (gModifiers | MOD_LALT); break; + case 0x3A: if (!is_break) gModifiers ^= MOD_CAPS; break; + case 0x45: if (!is_break) gModifiers ^= MOD_NUMLOCK; break; } } else { - // Extended make codes that map to modifier keys. switch (make) { - case 0x1D: // Right Ctrl (E0 1D) - gModifiers = is_break ? (gModifiers & ~MOD_RCTRL) - : (gModifiers | MOD_RCTRL); - return; - case 0x38: // Right Alt / AltGr (E0 38) - gModifiers = is_break ? (gModifiers & ~MOD_RALT) - : (gModifiers | MOD_RALT); - return; - default: - break; + case 0x1D: gModifiers = is_break ? (gModifiers & ~MOD_RCTRL) : (gModifiers | MOD_RCTRL); break; + case 0x38: gModifiers = is_break ? (gModifiers & ~MOD_RALT) : (gModifiers | MOD_RALT); break; } - // All other extended keys (arrows, Home/End, etc.) fall through - // and are enqueued as make codes for consumer-side interpretation. } - // -- Discard break codes for non-modifier keys ----------------------------- - if (is_break) return; - - // -- Enqueue make code; silently drop if buffer is full -------------------- - int next = (gTail + 1) & (int)KBD_BUF_MASK; - if (next != gHead) { - gBuf[gTail] = make; - gTail = next; + // Buffer management (only for 'make' codes) + if (!is_break) { + int next = (gTail + 1) & (int)KBD_BUF_MASK; + if (next != gHead) { + gBuf[gTail] = make; + gTail = next; + } + + void (*cb)(uint8_t) = (void (*)(uint8_t))gCallback; + if (cb) cb(make); } - - // -- Notify optional callback with the raw make code ----------------------- - // Take a local snapshot so the compiler cannot reorder the NULL check and - // the call across a volatile barrier, and to avoid double-fetching. - void (*cb)(uint8_t) = (void (*)(uint8_t))gCallback; - if (cb) cb(make); } -// -- Consumer API -------------------------------------------------------------- +// -- Public API ---------------------------------------------------------------- -static bool KbdPoll(void) { - return gHead != gTail; +// Use this inside your GetAsyncKeyState implementation! +bool KbdIsKeyDown(uint8_t scancode, bool extended) { + if (extended) return gKeyStateExt[scancode & 0x7F] != 0; + return gKeyState[scancode & 0x7F] != 0; +} + +static uint8_t KbdPoll(void) { + return (gHead == gTail) ? 0 : gBuf[gHead]; } -// Blocking read. Spins with PAUSE until a make code is available. -// On a preemptive kernel, replace the _mm_pause() loop with a -// condition variable or sti/hlt to avoid wasting CPU cycles. static uint8_t KbdReadScancode(void) { - while (gHead == gTail) { - _mm_pause(); - } + while (gHead == gTail) { _mm_pause(); } uint8_t sc = gBuf[gHead]; gHead = (gHead + 1) & (int)KBD_BUF_MASK; return sc; } -// Returns the ASCII character for the next keypress, applying the current -// Shift and CapsLock state. Returns 0 for keys with no ASCII mapping -// (function keys, arrows, unmodified Ctrl/Alt keys, etc.). -// -// CapsLock inverts shift only for alphabetic keys (a-z); digit and symbol -// keys are always governed solely by the physical Shift state. static char KbdReadChar(void) { uint8_t make = KbdReadScancode(); if (make >= 128) return 0; - uint32_t mods = gModifiers; // snapshot; safe outside ISR - bool shifted = (mods & MOD_SHIFT) != 0; + uint32_t mods = gModifiers; + bool shifted = (mods & MOD_SHIFT) != 0; - // CapsLock toggles the effective shift for alphabetic keys only. if (mods & MOD_CAPS) { char base = gUnshifted[make]; - if (base >= 'a' && base <= 'z') { - shifted = !shifted; - } + if (base >= 'a' && base <= 'z') shifted = !shifted; } - return shifted ? gShifted[make] : gUnshifted[make]; } -static void KbdSetCallback(void (*cb)(uint8_t)) { - gCallback = cb; -} - -// Returns the current modifier bitmask (OR of MOD_* flags above). -// Snapshot is taken outside ISR and may lag by at most one interrupt. -static uint32_t KbdGetModifiers(void) { - return gModifiers; -} - -// -- Initializer --------------------------------------------------------------- void HalKeyboardInitialize(HAL_KEYBOARD *out) { - // Enable PS/2 auxiliary port so the mouse driver can claim IRQ 12. - // The 8042 must have an empty input buffer before we can issue commands. - while (__inbyte(PS2_STAT) & 2) { /* wait for input buffer empty */ } - __outbyte(PS2_CMD, 0xA8); // enable aux port - - // Drain any stale bytes sitting in the PS/2 output buffer before - // enabling interrupts, so the first ISR call sees a clean state. - while (__inbyte(PS2_STAT) & 1) { - __inbyte(PS2_DATA); - } + while (__inbyte(PS2_STAT) & 2); + __outbyte(PS2_CMD, 0xA8); + while (__inbyte(PS2_STAT) & 1) { __inbyte(PS2_DATA); } out->Poll = KbdPoll; out->ReadScancode = KbdReadScancode; out->ReadChar = KbdReadChar; - out->SetCallback = KbdSetCallback; - out->GetModifiers = KbdGetModifiers; + out->IsKeyDown = KbdIsKeyDown; out->Isr = KbdIsr; out->IrqNumber = 1; } diff --git a/code/hal/hal_main.c b/code/hal/hal_main.c index 20fc730..e1b3cbb 100644 --- a/code/hal/hal_main.c +++ b/code/hal/hal_main.c @@ -365,11 +365,10 @@ __declspec(dllexport) KSTATUS HalInitialize(const HAL_INIT_PARAMS* initParams) { // and because the CPU missed the IRQ 12 edge transition (cli) later when we expect it to fire, it doesn't // leaving us with no mouse and no keyboard. The dreaded 8042 will hold the CLOCK line low forever. // To combat this we just go about our day executing the rest of the init and just before the end - // of init we use a decaying poll to grab whatever the controller left for us ("Drain and Pray"). - for (int i = 0; i < 1000; i++) { + // of init we just iterate 256 times to grab whatever the controller left for us ("Drain and Pray"). + for (int i = 0; i < 256; i++) { if (__inbyte(0x64) & 0x01) { __inbyte(0x60); // Consume - i = 0; // Reset timeout if we are still getting data } gApi.Timer.Stall(1); // Micro-stalls } diff --git a/code/hal/hal_timer.c b/code/hal/hal_timer.c index 0673f13..afd95f9 100644 --- a/code/hal/hal_timer.c +++ b/code/hal/hal_timer.c @@ -21,6 +21,7 @@ extern HAL_API gApi; static volatile uint32_t* gLapic = NULL; static uint32_t gApicTicksPerUs = 0; +static uint32_t gApicTicksPerQuantum = 0; static uint64_t gHpetTicksPerUs = 0; static volatile uint64_t* gHpet = NULL; #define LAPIC_REG(off) (*(volatile uint32_t *)((uint8_t *)gLapic + (off))) @@ -37,7 +38,25 @@ static void TimerIsr(void) { // EOI is sent by KeIrqDispatch after this returns } -static uint64_t QueryTicks(void) { return gTicks; } +static uint64_t QueryTicks(void) { + uint64_t baseTicks = gTicks; // The 10ms "coarse" ticks + + // The LAPIC timer counts DOWN. + // Ticks elapsed = (Initial Value) - (Current Value) + uint32_t current = LAPIC_REG(LAPIC_TIMER_CUR); + uint32_t initial = gApicTicksPerQuantum; + + uint32_t elapsedApicTicks = 0; + if (current < initial) { + elapsedApicTicks = initial - current; + } + + // Convert base 10ms ticks to microseconds + the remainder + // gTicks * 10,000 (ms to us) + (elapsed / ticks_per_us) + uint64_t totalUs = (baseTicks * QUANTUM_MS * 1000) + (elapsedApicTicks / gApicTicksPerUs); + + return totalUs; +} static void Stall(uint32_t us) { // Priority 1: Use HPET (Highest Precision) @@ -157,6 +176,7 @@ KSTATUS HalTimerInitialize(uintptr_t lapicPhys, uintptr_t hpetPhys, HAL_TIMER *o } gApicTicksPerUs = ticksPerMs / 1000; + gApicTicksPerQuantum = ticksPerMs * QUANTUM_MS; if (hpetPhys) { gHpet = (volatile uint64_t*)gApi.PhysToVirt(hpetPhys); @@ -169,7 +189,7 @@ KSTATUS HalTimerInitialize(uintptr_t lapicPhys, uintptr_t hpetPhys, HAL_TIMER *o // Configure LAPIC timer in periodic mode LAPIC_REG(LAPIC_TIMER_DIV) = TIMER_DIV16; LAPIC_REG(LAPIC_TIMER_LVT) = TIMER_PERIODIC | TIMER_VECTOR; - LAPIC_REG(LAPIC_TIMER_INIT) = ticksPerMs * QUANTUM_MS; + LAPIC_REG(LAPIC_TIMER_INIT) = gApicTicksPerQuantum; out->QueryTicks = QueryTicks; out->Stall = Stall; diff --git a/code/init/init.c b/code/init/init.c index a2cc8df..8013ed0 100644 --- a/code/init/init.c +++ b/code/init/init.c @@ -16,19 +16,19 @@ extern void SysYield(void); #define STATUS_SUCCESS 0u -void _start() +void _start(const char* args) { uint32_t h = 0; uint32_t s = 0; - - SysDebugPrint("[init] starting shell\n"); - s = SysCreateProcess("shell.exe", &h, NULL); + + SysDebugPrint("[init] starting\n"); + s = SysCreateProcess(args, &h, NULL); if (s != STATUS_SUCCESS) { - SysDebugPrint("[init] FATAL: failed to start shell.exe\n"); + SysDebugPrint("[init] FATAL: failed to start!\n"); SysExitProcess(1); } - SysDebugPrint("[init] waiting for shell\n"); + SysDebugPrint("[init] waiting\n"); s = SysWaitForProcess(h); if (s != STATUS_SUCCESS) SysDebugPrint("[init] WARNING: SysWaitForProcess returned error\n"); diff --git a/code/kernel/ke_syscall.c b/code/kernel/ke_syscall.c index fee118d..e12d15a 100644 --- a/code/kernel/ke_syscall.c +++ b/code/kernel/ke_syscall.c @@ -102,14 +102,14 @@ static uint64_t SyscallExitProcess(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_EXIT_THREAD (true) a0 = exitCode +// SYS_EXIT_THREAD (1) a0 = exitCode // --------------------------------------------------------------------------- static uint64_t SyscallExitThread(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { (void)a1; (void)a2; (void)a3; (void)a4; (void)a5; THREAD* t = KeGetCurrentThread(); if (t) KeExitThread(t, (int)a0); - while (true) ; + while (true); } // --------------------------------------------------------------------------- @@ -485,7 +485,7 @@ static uint64_t SyscallReadFile(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_WRITE_FILE (43) a0=handle a1=buf a2=size a3=*bytesWrittenOut +// SYS_WRITE_FILE (29) a0=handle a1=buf a2=size a3=*bytesWrittenOut // --------------------------------------------------------------------------- static uint64_t SyscallWriteFile(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -501,7 +501,7 @@ static uint64_t SyscallWriteFile(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_CREATE_FILE (44) a0=*path a1=*handleOut +// SYS_CREATE_FILE (30) a0=*path a1=*handleOut // --------------------------------------------------------------------------- static uint64_t SyscallCreateFile(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -521,7 +521,7 @@ static uint64_t SyscallCreateFile(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_DELETE_FILE (45) a0=*path +// SYS_DELETE_FILE (31) a0=*path // --------------------------------------------------------------------------- static uint64_t SyscallDeleteFile(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -531,7 +531,7 @@ static uint64_t SyscallDeleteFile(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_TRUNCATE_FILE (46) a0=handle a1=newSize +// SYS_TRUNCATE_FILE (32) a0=handle a1=newSize // --------------------------------------------------------------------------- static uint64_t SyscallTruncateFile(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -544,7 +544,7 @@ static uint64_t SyscallTruncateFile(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_GET_FILE_POS (47) a0=handle -> current seek offset +// SYS_GET_FILE_POS (33) a0=handle -> current seek offset // --------------------------------------------------------------------------- static uint64_t SyscallGetFilePos(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -557,7 +557,7 @@ static uint64_t SyscallGetFilePos(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_SEEK_FILE (29) a0=handle a1=offset +// SYS_SEEK_FILE (34) a0=handle a1=offset // --------------------------------------------------------------------------- static uint64_t SyscallSeekFile(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -570,7 +570,7 @@ static uint64_t SyscallSeekFile(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_GET_FILE_SIZE (30) a0=handle -> uint64_t +// SYS_GET_FILE_SIZE (35) a0=handle -> uint64_t // --------------------------------------------------------------------------- static uint64_t SyscallGetFileSize(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -583,7 +583,7 @@ static uint64_t SyscallGetFileSize(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_SCREEN_BLIT (31) a0=x a1=y a2=w a3=h a4=*pixels +// SYS_SCREEN_BLIT (36) a0=x a1=y a2=w a3=h a4=*pixels // --------------------------------------------------------------------------- static uint64_t SyscallScreenBlit(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -595,7 +595,7 @@ static uint64_t SyscallScreenBlit(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_SCREEN_CLEAR (32) a0=color +// SYS_SCREEN_CLEAR (37) a0=color // --------------------------------------------------------------------------- static uint64_t SyscallScreenClear(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -606,7 +606,7 @@ static uint64_t SyscallScreenClear(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_SCREEN_GET_SIZE (33) a0=*widthOut a1=*heightOut +// SYS_SCREEN_GET_SIZE (38) a0=*widthOut a1=*heightOut // --------------------------------------------------------------------------- static uint64_t SyscallScreenGetSize(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -620,7 +620,7 @@ static uint64_t SyscallScreenGetSize(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_SCREEN_PUT_CHAR (34) a0=c a1=x a2=y a3=fg a4=bg +// SYS_SCREEN_PUT_CHAR (39) a0=c a1=x a2=y a3=fg a4=bg // --------------------------------------------------------------------------- static uint64_t SyscallScreenPutChar(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -632,17 +632,30 @@ static uint64_t SyscallScreenPutChar(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_KB_POLL (35) -> 1 or 0 +// SYS_KB_POLL (40) -> 1 or 0 // --------------------------------------------------------------------------- static uint64_t SyscallKbPoll(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { (void)a0; (void)a1; (void)a2; (void)a3; (void)a4; (void)a5; if (!gHal) return 0; - return gHal->Keyboard.Poll() ? 1u : 0u; + return gHal->Keyboard.Poll(); } // --------------------------------------------------------------------------- -// SYS_KB_READ_CHAR (36) -> char (blocks, yields while waiting) +// SYS_KB_IS_KEY_DOWN (41) a0=scancode a1=extended -> 1 or 0 +// --------------------------------------------------------------------------- +static uint64_t SyscallKbIsKeyDown(uint64_t a0, uint64_t a1, uint64_t a2, + uint64_t a3, uint64_t a4, uint64_t a5) { + (void)a2; (void)a3; (void)a4; (void)a5; + + // Check gHal and ensure the HAL struct actually has the new function pointer + if (!gHal || !gHal->Keyboard.IsKeyDown) return 0; + + return gHal->Keyboard.IsKeyDown((uint8_t)a0, (bool)a1) ? 1u : 0u; +} + +// --------------------------------------------------------------------------- +// SYS_KB_READ_CHAR (42) -> char (blocks, yields while waiting) // --------------------------------------------------------------------------- static uint64_t SyscallKbReadChar(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -653,7 +666,7 @@ static uint64_t SyscallKbReadChar(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_KB_READ_SCANCODE (37) -> uint8_t (blocks, yields while waiting) +// SYS_KB_READ_SCANCODE (43) -> uint8_t (blocks, yields while waiting) // --------------------------------------------------------------------------- static uint64_t SyscallKbReadScancode(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -664,7 +677,7 @@ static uint64_t SyscallKbReadScancode(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_KB_GET_MODIFIERS (43) -> uint32_t +// SYS_KB_GET_MODIFIERS (44) -> uint32_t // --------------------------------------------------------------------------- static uint64_t SyscallKbGetModifiers(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -674,7 +687,7 @@ static uint64_t SyscallKbGetModifiers(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_MOUSE_POLL (44) -> 1 or 0 +// SYS_MOUSE_POLL (45) -> 1 or 0 // --------------------------------------------------------------------------- static uint64_t SyscallMousePoll(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -684,7 +697,7 @@ static uint64_t SyscallMousePoll(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_MOUSE_READ (45) a0=*dx a1=*dy a2=*buttons -> 1 or 0 +// SYS_MOUSE_READ (46) a0=*dx a1=*dy a2=*buttons -> 1 or 0 // --------------------------------------------------------------------------- static uint64_t SyscallMouseRead(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -696,7 +709,7 @@ static uint64_t SyscallMouseRead(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_MOUSE_GET_POS (46) a0=*x a1=*y +// SYS_MOUSE_GET_POS (47) a0=*x a1=*y // --------------------------------------------------------------------------- static uint64_t SyscallMouseGetPos(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -707,7 +720,7 @@ static uint64_t SyscallMouseGetPos(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_GET_TICK (47) -> uint64_t milliseconds +// SYS_GET_TICK (48) -> uint64_t milliseconds // --------------------------------------------------------------------------- static uint64_t SyscallGetTick(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -716,7 +729,7 @@ static uint64_t SyscallGetTick(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_DEBUG_PRINT (39) a0=*str +// SYS_DEBUG_PRINT (49) a0=*str // --------------------------------------------------------------------------- static uint64_t SyscallDebugPrint(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -726,7 +739,7 @@ static uint64_t SyscallDebugPrint(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_CREATE_PROCESS (40) a0=*path a1=*handleOut a2=*cmdline (optional) +// SYS_CREATE_PROCESS (50) a0=*path a1=*handleOut a2=*cmdline (optional) // --------------------------------------------------------------------------- static uint64_t SyscallCreateProcess(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -798,7 +811,7 @@ static uint64_t SyscallCreateProcess(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_WAIT_FOR_PROCESS (41) a0=handle +// SYS_WAIT_FOR_PROCESS (51) a0=handle // Blocks until the target process signals its ExitEvent. // --------------------------------------------------------------------------- static uint64_t SyscallWaitForProcess(uint64_t a0, uint64_t a1, uint64_t a2, @@ -814,7 +827,7 @@ static uint64_t SyscallWaitForProcess(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_GET_PROCESS_EXIT_CODE (42) a0=handle a1=*exitCodeOut +// SYS_GET_PROCESS_EXIT_CODE (52) a0=handle a1=*exitCodeOut // --------------------------------------------------------------------------- static uint64_t SyscallGetProcessExitCode(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -830,7 +843,7 @@ static uint64_t SyscallGetProcessExitCode(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_WRITE_CONSOLE (48) a0=*buf a1=len +// SYS_WRITE_CONSOLE (53) a0=*buf a1=len // Writes user console text in white; distinct from green SYS_DEBUG_PRINT. // --------------------------------------------------------------------------- static uint64_t SyscallWriteConsole(uint64_t a0, uint64_t a1, uint64_t a2, @@ -843,7 +856,7 @@ static uint64_t SyscallWriteConsole(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_OPEN_DIR (49) a0=*dirPath a1=*handleOut +// SYS_OPEN_DIR (54) a0=*dirPath a1=*handleOut // --------------------------------------------------------------------------- static uint64_t SyscallOpenDir(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -868,7 +881,7 @@ static uint64_t SyscallOpenDir(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_READ_DIR (50) a0=handle a1=*KDIR_ENTRY +// SYS_READ_DIR (55) a0=handle a1=*KDIR_ENTRY // Returns STATUS_NO_MORE_FILES when the directory is exhausted. // --------------------------------------------------------------------------- static uint64_t SyscallReadDir(uint64_t a0, uint64_t a1, uint64_t a2, @@ -889,7 +902,7 @@ static uint64_t SyscallReadDir(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_SET_CWD (51) a0=*path +// SYS_SET_CWD (56) a0=*path // --------------------------------------------------------------------------- static uint64_t SyscallSetCwd(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -900,7 +913,7 @@ static uint64_t SyscallSetCwd(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_GET_CWD (52) a0=*buf a1=size +// SYS_GET_CWD (57) a0=*buf a1=size // --------------------------------------------------------------------------- static uint64_t SyscallGetCwd(uint64_t a0, uint64_t a1, uint64_t a2, uint64_t a3, uint64_t a4, uint64_t a5) { @@ -912,7 +925,7 @@ static uint64_t SyscallGetCwd(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_WAIT_THREAD (53) a0=tid +// SYS_WAIT_THREAD (58) a0=tid // Blocks the caller until the thread with the given TID exits. // Searches the current process's thread list; cross-process join is not // supported in v1 (POSIX pthread_join is always intra-process). @@ -956,7 +969,7 @@ static uint64_t SyscallWaitThread(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_GET_PROCESS_PID (54) a0=procHandle a1=*pidOut +// SYS_GET_PROCESS_PID (59) a0=procHandle a1=*pidOut // Returns the numeric PID of a process identified by handle. // Used by posix_spawn to map the kernel handle back to a pid_t for waitpid. // --------------------------------------------------------------------------- @@ -999,7 +1012,7 @@ static NAMED_QUEUE_ENTRY gNamedQueues[NAMED_QUEUE_MAX]; static SPINLOCK gNamedQueueLock; // --------------------------------------------------------------------------- -// SYS_PUBLISH_QUEUE (55) a0=*name a1=queueHandle +// SYS_PUBLISH_QUEUE (60) a0=*name a1=queueHandle // // Registers the queue identified by 'queueHandle' under 'name'. // Fails with STATUS_ALREADY_EXISTS if the name is already taken. @@ -1047,7 +1060,7 @@ static uint64_t SyscallPublishQueue(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_OPEN_NAMED_QUEUE (56) a0=*name a1=*handleOut +// SYS_OPEN_NAMED_QUEUE (61) a0=*name a1=*handleOut // // Looks up 'name' in the registry and allocates a handle to the queue in the // calling process's handle table. Returns STATUS_NOT_FOUND if no match. @@ -1083,7 +1096,7 @@ static uint64_t SyscallOpenNamedQueue(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_QUEUE_DUPLICATE (61) a0=handle a1=targetPid a2=*handleOut +// SYS_QUEUE_DUPLICATE (62) a0=handle a1=targetPid a2=*handleOut // // Looks up the QUEUE behind 'handle' in the CALLER's table, then allocates // a new handle for the same object in the TARGET process's table. @@ -1115,7 +1128,7 @@ static uint64_t SyscallQueueDuplicate(uint64_t a0, uint64_t a1, uint64_t a2, } // --------------------------------------------------------------------------- -// SYS_NAMED_QUEUE_OWNER_PID (62) a0=*name a1=*pidOut +// SYS_NAMED_QUEUE_OWNER_PID (63) a0=*name a1=*pidOut // // Returns the ProcessId of whoever published the named queue. // Lets a client get the publisher's PID so it can duplicate one of its @@ -1177,40 +1190,41 @@ static const SYSCALL_HANDLER gSyscallTable[SYS_MAX] = { /* 26 SYS_CLOSE_HANDLE */ SyscallCloseHandle, /* 27 SYS_OPEN_FILE */ SyscallOpenFile, /* 28 SYS_READ_FILE */ SyscallReadFile, - /* 29 SYS_SEEK_FILE */ SyscallSeekFile, - /* 30 SYS_GET_FILE_SIZE */ SyscallGetFileSize, - /* 31 SYS_WRITE_FILE */ SyscallWriteFile, - /* 32 SYS_CREATE_FILE */ SyscallCreateFile, - /* 33 SYS_DELETE_FILE */ SyscallDeleteFile, - /* 34 SYS_TRUNCATE_FILE */ SyscallTruncateFile, - /* 35 SYS_GET_FILE_POS */ SyscallGetFilePos, + /* 29 SYS_WRITE_FILE */ SyscallWriteFile, + /* 30 SYS_CREATE_FILE */ SyscallCreateFile, + /* 31 SYS_DELETE_FILE */ SyscallDeleteFile, + /* 32 SYS_TRUNCATE_FILE */ SyscallTruncateFile, + /* 33 SYS_GET_FILE_POS */ SyscallGetFilePos, + /* 34 SYS_SEEK_FILE */ SyscallSeekFile, + /* 35 SYS_GET_FILE_SIZE */ SyscallGetFileSize, /* 36 SYS_SCREEN_BLIT */ SyscallScreenBlit, /* 37 SYS_SCREEN_CLEAR */ SyscallScreenClear, /* 38 SYS_SCREEN_GET_SIZE */ SyscallScreenGetSize, /* 39 SYS_SCREEN_PUT_CHAR */ SyscallScreenPutChar, /* 40 SYS_KB_POLL */ SyscallKbPoll, - /* 41 SYS_KB_READ_CHAR */ SyscallKbReadChar, - /* 42 SYS_KB_READ_SCANCODE */ SyscallKbReadScancode, - /* 43 SYS_KB_GET_MODIFIERS */ SyscallKbGetModifiers, - /* 44 SYS_MOUSE_POLL */ SyscallMousePoll, - /* 45 SYS_MOUSE_READ */ SyscallMouseRead, - /* 46 SYS_MOUSE_GET_POS */ SyscallMouseGetPos, - /* 47 SYS_GET_TICK */ SyscallGetTick, - /* 48 SYS_DEBUG_PRINT */ SyscallDebugPrint, - /* 49 SYS_CREATE_PROCESS */ SyscallCreateProcess, - /* 50 SYS_WAIT_FOR_PROCESS */ SyscallWaitForProcess, - /* 51 SYS_GET_PROCESS_EXIT_CODE */ SyscallGetProcessExitCode, - /* 52 SYS_WRITE_CONSOLE */ SyscallWriteConsole, - /* 53 SYS_OPEN_DIR */ SyscallOpenDir, - /* 54 SYS_READ_DIR */ SyscallReadDir, - /* 55 SYS_SET_CWD */ SyscallSetCwd, - /* 56 SYS_GET_CWD */ SyscallGetCwd, - /* 57 SYS_WAIT_THREAD */ SyscallWaitThread, - /* 58 SYS_GET_PROCESS_PID */ SyscallGetProcessPid, - /* 59 SYS_PUBLISH_QUEUE */ SyscallPublishQueue, - /* 60 SYS_OPEN_NAMED_QUEUE */ SyscallOpenNamedQueue, - /* 61 SYS_QUEUE_DUPLICATE */ SyscallQueueDuplicate, - /* 62 SYS_NAMED_QUEUE_OWNER_PID */ SyscallNamedQueueOwnerPid, + /* 41 SYS_KB_IS_KEY_DOWN */ SyscallKbIsKeyDown, + /* 42 SYS_KB_READ_CHAR */ SyscallKbReadChar, + /* 43 SYS_KB_READ_SCANCODE */ SyscallKbReadScancode, + /* 44 SYS_KB_GET_MODIFIERS */ SyscallKbGetModifiers, + /* 45 SYS_MOUSE_POLL */ SyscallMousePoll, + /* 46 SYS_MOUSE_READ */ SyscallMouseRead, + /* 47 SYS_MOUSE_GET_POS */ SyscallMouseGetPos, + /* 48 SYS_GET_TICK */ SyscallGetTick, + /* 49 SYS_DEBUG_PRINT */ SyscallDebugPrint, + /* 50 SYS_CREATE_PROCESS */ SyscallCreateProcess, + /* 51 SYS_WAIT_FOR_PROCESS */ SyscallWaitForProcess, + /* 52 SYS_GET_PROCESS_EXIT_CODE */ SyscallGetProcessExitCode, + /* 53 SYS_WRITE_CONSOLE */ SyscallWriteConsole, + /* 54 SYS_OPEN_DIR */ SyscallOpenDir, + /* 55 SYS_READ_DIR */ SyscallReadDir, + /* 56 SYS_SET_CWD */ SyscallSetCwd, + /* 57 SYS_GET_CWD */ SyscallGetCwd, + /* 58 SYS_WAIT_THREAD */ SyscallWaitThread, + /* 59 SYS_GET_PROCESS_PID */ SyscallGetProcessPid, + /* 60 SYS_PUBLISH_QUEUE */ SyscallPublishQueue, + /* 61 SYS_OPEN_NAMED_QUEUE */ SyscallOpenNamedQueue, + /* 62 SYS_QUEUE_DUPLICATE */ SyscallQueueDuplicate, + /* 63 SYS_NAMED_QUEUE_OWNER_PID */ SyscallNamedQueueOwnerPid, }; // --------------------------------------------------------------------------- diff --git a/code/kernel/kmain.c b/code/kernel/kmain.c index b845b43..7f0aeba 100644 --- a/code/kernel/kmain.c +++ b/code/kernel/kmain.c @@ -203,7 +203,7 @@ static void LoadAndRegisterDll(const char* filename) { // Returns the new PROCESS* with one reference owned by the caller. // Returns NULL on failure. // --------------------------------------------------------------------------- -static PROCESS* LaunchUserProcess(const char* filePath) { +static PROCESS* LaunchUserProcess(const char* filePath, const char* args) { KSTATUS s; FILE_OBJECT* f; @@ -238,17 +238,16 @@ static PROCESS* LaunchUserProcess(const char* filePath) { } DbgPrint("Created process (PID %u) with command line: %s\n", proc->ProcessId, filePath); - strncpy(proc->Cmdline, filePath, sizeof(proc->Cmdline) - 1); + strncpy(proc->Cmdline, args, sizeof(proc->Cmdline) - 1); // proc->Cmdline is kernel pool (ffffc000...) - not readable at CPL=3. // Copy into user memory before handing the pointer to the initial thread. - size_t cmdlineLen = strlen(proc->Cmdline) + 1; - char* userCmdline = (char*)MmAllocateUserMemory(cmdlineLen); + char* userCmdline = (char*)MmAllocateUserMemory(sizeof(proc->Cmdline)); if (!userCmdline) { DbgPrint("LaunchUserProcess: Failed to allocate user cmdline buffer.\n"); return (PROCESS*)0; } - memcpy(userCmdline, proc->Cmdline, cmdlineLen); + memcpy(userCmdline, proc->Cmdline, sizeof(proc->Cmdline)); // Parse the raw PE file and map it into executable memory uintptr_t imageBase = 0; @@ -331,7 +330,7 @@ void SystemInitThread(void* arg) { DbgPrint(" -> User Heap: %.2f MB\n", (float)MmGetUserHeapUsage() / (1024.0f * 1024.0f)); // Launch User-Mode Shell (this will trigger AHCI & FAT32 which CAN safely block now) - PROCESS* shellProc = LaunchUserProcess(args->bootInfo->CommandLine); + PROCESS* shellProc = LaunchUserProcess("init.exe", args->bootInfo->CommandLine); if (shellProc) { KSTATUS ws = KeCreateKernelThread((uintptr_t)ProcessWatcherThread, diff --git a/code/kernel/syscall_nr.h b/code/kernel/syscall_nr.h index 01da1f1..02d8376 100644 --- a/code/kernel/syscall_nr.h +++ b/code/kernel/syscall_nr.h @@ -47,24 +47,24 @@ #define SYS_SEM_CREATE 15 // (int32_t initial, int32_t max, uint32_t* handleOut) -> KSTATUS #define SYS_SEM_WAIT 16 // (uint32_t handle) -> KSTATUS #define SYS_SEM_TRY_WAIT 17 // (uint32_t handle) -> KSTATUS -#define SYS_SEM_SIGNAL 18 // (uint32_t handle) -> void +#define SYS_SEM_SIGNAL 18 // (uint32_t handle) -> KSTATUS -#define SYS_EVENT_CREATE 19 // (uint32_t type, uint32_t initialState, uint32_t* handleOut) -> KSTATUS -#define SYS_EVENT_SIGNAL 20 // (uint32_t handle) -> void -#define SYS_EVENT_CLEAR 21 // (uint32_t handle) -> void +#define SYS_EVENT_CREATE 19 // (uint32_t* handleOut) -> KSTATUS +#define SYS_EVENT_SIGNAL 20 // (uint32_t handle) -> KSTATUS +#define SYS_EVENT_CLEAR 21 // (uint32_t handle) -> KSTATUS #define SYS_EVENT_WAIT 22 // (uint32_t handle) -> KSTATUS // --------------------------------------------------------------------------- -// Message Queues +// Queue // --------------------------------------------------------------------------- #define SYS_QUEUE_CREATE 23 // (uint32_t* handleOut) -> KSTATUS -#define SYS_QUEUE_SEND 24 // (uint32_t handle, const QUEUE_MESSAGE* msg, uint32_t blocking) -> KSTATUS -#define SYS_QUEUE_RECV 25 // (uint32_t handle, QUEUE_MESSAGE* msg, uint32_t blocking) -> KSTATUS +#define SYS_QUEUE_SEND 24 // (uint32_t handle, void* msg, int blocking) -> KSTATUS +#define SYS_QUEUE_RECV 25 // (uint32_t handle, void* msg, int blocking) -> KSTATUS // --------------------------------------------------------------------------- -// Handle Management +// Handle (unified close for all object types) // --------------------------------------------------------------------------- -#define SYS_CLOSE_HANDLE 26 // (uint32_t handle) -> void +#define SYS_CLOSE_HANDLE 26 // (uint32_t handle) -> KSTATUS // --------------------------------------------------------------------------- // File I/O @@ -72,13 +72,13 @@ // --------------------------------------------------------------------------- #define SYS_OPEN_FILE 27 // (const char* path, uint32_t* handleOut) -> KSTATUS #define SYS_READ_FILE 28 // (uint32_t handle, void* buf, size_t size, size_t* bytesReadOut) -> KSTATUS -#define SYS_SEEK_FILE 29 // (uint32_t handle, uint64_t offset) -> KSTATUS -#define SYS_GET_FILE_SIZE 30 // (uint32_t handle) -> uint64_t -#define SYS_WRITE_FILE 31 // (uint32_t handle, const void* buf, size_t size, size_t* bytesWrittenOut) -> KSTATUS -#define SYS_CREATE_FILE 32 // (const char* path, uint32_t* handleOut) -> KSTATUS -#define SYS_DELETE_FILE 33 // (const char* path) -> KSTATUS -#define SYS_TRUNCATE_FILE 34 // (uint32_t handle, uint64_t newSize) -> KSTATUS -#define SYS_GET_FILE_POS 35 // (uint32_t handle) -> uint64_t +#define SYS_WRITE_FILE 29 // (uint32_t handle, const void* buf, size_t size, size_t* bytesWrittenOut) -> KSTATUS +#define SYS_CREATE_FILE 30 // (const char* path, uint32_t* handleOut) -> KSTATUS +#define SYS_DELETE_FILE 31 // (const char* path) -> KSTATUS +#define SYS_TRUNCATE_FILE 32 // (uint32_t handle, uint64_t newSize) -> KSTATUS +#define SYS_GET_FILE_POS 33 // (uint32_t handle) -> uint64_t +#define SYS_SEEK_FILE 34 // (uint32_t handle, uint64_t offset) -> KSTATUS +#define SYS_GET_FILE_SIZE 35 // (uint32_t handle) -> uint64_t // --------------------------------------------------------------------------- // Screen / Graphics @@ -92,80 +92,74 @@ // Keyboard // --------------------------------------------------------------------------- #define SYS_KB_POLL 40 // () -> uint32_t (1 if key available, 0 otherwise) -#define SYS_KB_READ_CHAR 41 // () -> char (blocks, yields while waiting) -#define SYS_KB_READ_SCANCODE 42 // () -> uint8_t (blocks, yields while waiting) -#define SYS_KB_GET_MODIFIERS 43 // () -> uint32_t (current modifier bitmask) +#define SYS_KB_IS_KEY_DOWN 41 // (int scancode) -> uint32_t (1 if down, 0 otherwise) +#define SYS_KB_READ_CHAR 42 // () -> char (blocks, yields while waiting) +#define SYS_KB_READ_SCANCODE 43 // () -> uint8_t (blocks, yields while waiting) +#define SYS_KB_GET_MODIFIERS 44 // () -> uint32_t (current modifier bitmask) // --------------------------------------------------------------------------- // Mouse // --------------------------------------------------------------------------- -#define SYS_MOUSE_POLL 44 // () -> uint32_t (1 if packet waiting, 0 otherwise) -#define SYS_MOUSE_READ 45 // (int* dx, int* dy, uint8_t* buttons) -> uint32_t (1=ok, 0=empty) -#define SYS_MOUSE_GET_POS 46 // (int* x, int* y) -> void +#define SYS_MOUSE_POLL 45 // () -> uint32_t (1 if packet waiting, 0 otherwise) +#define SYS_MOUSE_READ 46 // (int* dx, int* dy, uint8_t* buttons) -> uint32_t (1=ok, 0=empty) +#define SYS_MOUSE_GET_POS 47 // (int* x, int* y) -> void // --------------------------------------------------------------------------- // Timer // --------------------------------------------------------------------------- -#define SYS_GET_TICK 47 // () -> uint64_t (milliseconds since boot) +#define SYS_GET_TICK 48 // () -> uint64_t (milliseconds since boot) // --------------------------------------------------------------------------- // Debug // --------------------------------------------------------------------------- -#define SYS_DEBUG_PRINT 48 // (const char* str) -> void +#define SYS_DEBUG_PRINT 49 // (const char* str) -> void // --------------------------------------------------------------------------- // Process launch & lifecycle // --------------------------------------------------------------------------- -#define SYS_CREATE_PROCESS 49 // (const char* path, uint32_t* handleOut, const char* cmdline) -> KSTATUS -#define SYS_WAIT_FOR_PROCESS 50 // (uint32_t handle) -> KSTATUS -#define SYS_GET_PROCESS_EXIT_CODE 51 // (uint32_t handle, int* exitCodeOut) -> KSTATUS +#define SYS_CREATE_PROCESS 50 // (const char* path, const char* args, uint32_t* pidOut) -> KSTATUS +#define SYS_WAIT_FOR_PROCESS 51 // (uint32_t pid) -> KSTATUS +#define SYS_GET_PROCESS_EXIT_CODE 52 // (uint32_t pid, int* exitCodeOut) -> KSTATUS // --------------------------------------------------------------------------- -// Console output (white text, distinct from green SYS_DEBUG_PRINT) +// Console output (white text, for user programs) // --------------------------------------------------------------------------- -#define SYS_WRITE_CONSOLE 52 // (const char* buf, size_t len) -> void +#define SYS_WRITE_CONSOLE 53 // (const char* str, size_t len) -> void // --------------------------------------------------------------------------- // Directory enumeration -// (Close the handle via SYS_CLOSE_HANDLE like any other object.) // --------------------------------------------------------------------------- -#define SYS_OPEN_DIR 53 // (const char* dirPath, uint32_t* handleOut) -> KSTATUS -#define SYS_READ_DIR 54 // (uint32_t handle, KDIR_ENTRY* entryOut) -> KSTATUS +#define SYS_OPEN_DIR 54 // (const char* path, uint32_t* handleOut) -> KSTATUS +#define SYS_READ_DIR 55 // (uint32_t handle, DirEntry* entryOut) -> KSTATUS // --------------------------------------------------------------------------- // Current Working Directory // --------------------------------------------------------------------------- -#define SYS_SET_CWD 55 // (const char* path) -> KSTATUS -#define SYS_GET_CWD 56 // (char* buf, size_t size) -> KSTATUS +#define SYS_SET_CWD 56 // (const char* path) -> KSTATUS +#define SYS_GET_CWD 57 // (char* buf, size_t buflen) -> KSTATUS // --------------------------------------------------------------------------- -// Thread join +// Thread join (used by pthread_join in posix.dll) // --------------------------------------------------------------------------- -#define SYS_WAIT_THREAD 57 // (uint32_t tid) -> KSTATUS - // Blocks until the thread with that TID exits. - // Returns STATUS_NOT_FOUND if TID unknown. +#define SYS_WAIT_THREAD 58 // (uint32_t tid) -> KSTATUS // --------------------------------------------------------------------------- -// Process PID query (needed by posix_spawn -> waitpid) +// Process PID query (used by posix_spawn -> waitpid in posix.dll) // --------------------------------------------------------------------------- -#define SYS_GET_PROCESS_PID 58 // (uint32_t procHandle, uint32_t* pidOut) -> KSTATUS +#define SYS_GET_PROCESS_PID 59 // (uint32_t pid) -> KSTATUS // --------------------------------------------------------------------------- // Named Queue Registry +// SysPublishQueue - register a queue under a name (call once at startup) +// SysOpenNamedQueue - resolve a name to a handle (retry until SUCCESS) // --------------------------------------------------------------------------- -#define SYS_PUBLISH_QUEUE 59 // (const char* name, uint32_t queueHandle) -> KSTATUS -#define SYS_OPEN_NAMED_QUEUE 60 // (const char* name, uint32_t* handleOut) -> KSTATUS +#define SYS_PUBLISH_QUEUE 60 // (const char* name, uint32_t queueHandle) -> KSTATUS +#define SYS_OPEN_NAMED_QUEUE 61 // (const char* name, uint32_t* handleOut) -> KSTATUS // --------------------------------------------------------------------------- -// Handle Duplication +// Handle duplication // --------------------------------------------------------------------------- -#define SYS_QUEUE_DUPLICATE 61 // (uint32_t handle, uint32_t targetPid, uint32_t* handleOut) -> KSTATUS - // Duplicates a queue handle into another process's handle table. - // Returns the new handle value (valid in targetPid's space) via *handleOut. -#define SYS_NAMED_QUEUE_OWNER_PID 62 // (const char* name, uint32_t* pidOut) -> KSTATUS - // Returns the ProcessId of whoever published the named queue. +#define SYS_QUEUE_DUPLICATE 62 // (uint32_t handle, uint32_t targetPid, uint32_t* handleOut) -> KSTATUS +#define SYS_NAMED_QUEUE_OWNER_PID 63 // (const char* name, uint32_t* pidOut) -> KSTATUS -// --------------------------------------------------------------------------- -// Sentinel -// --------------------------------------------------------------------------- -#define SYS_MAX 63 +#define SYS_MAX 64 diff --git a/code/shell/shell.c b/code/shell/shell.c index 033383f..de958c2 100644 --- a/code/shell/shell.c +++ b/code/shell/shell.c @@ -1,102 +1,11 @@ +#include #include #include #include #include -// --------------------------------------------------------------------------- -// Win32 imports & definitions -// --------------------------------------------------------------------------- -_Noreturn void ExitProcess(unsigned int code); -void OutputDebugStringA(const char* s); - -typedef void* HANDLE; -typedef unsigned long DWORD; -typedef int BOOL; - -#define INVALID_HANDLE_VALUE ((HANDLE)(intptr_t)-1) -#define INFINITE 0xFFFFFFFFUL -#define STD_INPUT_HANDLE ((DWORD)-10) -#define STD_OUTPUT_HANDLE ((DWORD)-11) -#define MAX_PATH 260 - -// File I/O constants -#define GENERIC_READ 0x80000000L -#define GENERIC_WRITE 0x40000000L -#define OPEN_EXISTING 3 -#define CREATE_ALWAYS 2 -#define FILE_SHARE_READ 0x00000001 -#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 - -HANDLE GetStdHandle(DWORD nStdHandle); -DWORD GetLastError(); - -BOOL ReadConsoleA(HANDLE hConsoleInput, void* lpBuffer, - DWORD nNumberOfCharsToRead, DWORD* lpNumberOfCharsRead, - void* pInputControl); - -BOOL WriteConsoleA(HANDLE hConsoleOutput, const void* lpBuffer, - DWORD nNumberOfCharsToWrite, DWORD* lpNumberOfCharsWritten, - void* lpReserved); - -typedef struct { - DWORD cb; - char* lpReserved; - char* lpDesktop; - char* lpTitle; - DWORD dwX, dwY, dwXSize, dwYSize; - DWORD dwXCountChars, dwYCountChars; - DWORD dwFillAttribute, dwFlags; - unsigned short wShowWindow, cbReserved2; - unsigned char* lpReserved2; - HANDLE hStdInput, hStdOutput, hStdError; -} STARTUPINFOA; - -typedef struct { - HANDLE hProcess; - HANDLE hThread; - DWORD dwProcessId; - DWORD dwThreadId; -} PROCESS_INFORMATION; - -typedef struct _FILETIME { - DWORD dwLowDateTime; - DWORD dwHighDateTime; -} FILETIME; - -typedef struct _WIN32_FIND_DATAA { - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; - DWORD dwReserved0; - DWORD dwReserved1; - char cFileName[MAX_PATH]; - char cAlternateFileName[14]; -} WIN32_FIND_DATAA; - -BOOL CreateProcessA(const char* lpApp, char* lpCmdLine, - void* lpPA, void* lpTA, BOOL bInherit, - DWORD dwFlags, void* lpEnv, const char* lpDir, - STARTUPINFOA* lpSI, PROCESS_INFORMATION* lpPI); -DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMs); -BOOL GetExitCodeProcess(HANDLE hProcess, DWORD* lpExitCode); -BOOL CloseHandle(HANDLE hObject); - -// File operation imports -HANDLE FindFirstFileA(const char* lpFileName, WIN32_FIND_DATAA* lpFindFileData); -BOOL FindNextFileA(HANDLE hFindFile, WIN32_FIND_DATAA* lpFindFileData); -BOOL FindClose(HANDLE hFindFile); -BOOL SetCurrentDirectoryA(const char* lpPathName); -BOOL DeleteFileA(const char* lpFileName); -HANDLE CreateFileA(const char* lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, - void* lpSecurityAttributes, DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); -BOOL ReadFile(HANDLE hFile, void* lpBuffer, DWORD nNumberOfBytesToRead, - DWORD* lpNumberOfBytesRead, void* lpOverlapped); -BOOL WriteFile(HANDLE hFile, const void* lpBuffer, DWORD nNumberOfBytesToWrite, - DWORD* lpNumberOfBytesWritten, void* lpOverlapped); +// !Made-up! clear console api. +BOOL ClearConsoleScreenBuffer(HANDLE hConsole); // --------------------------------------------------------------------------- // Global handles @@ -129,6 +38,24 @@ static void printUInt(uint32_t n) { print(rev); } +static void printInt(int32_t n) { + char buf[12]; + int i = 0; + uint32_t val = (n < 0) ? (print("-"), (uint32_t)-(n + 1) + 1) : (uint32_t)n; + + if (val == 0) { print("0"); return; } + + while (val > 0) { + buf[i++] = (char)('0' + (val % 10)); + val /= 10; + } + + while (i > 0) { + char c[2] = { buf[--i], '\0' }; + print(c); // Assumes print() handles strings + } +} + // --------------------------------------------------------------------------- // Line editor // --------------------------------------------------------------------------- @@ -280,6 +207,11 @@ static int runCommand(const char* cmd) { return 0; } + if (strcmp(cmd, "clear") == 0) { + ClearConsoleScreenBuffer(hOut); + return 0; + } + if (strcmp(cmd, "dir") == 0) { cmd_dir(); return 0; @@ -338,6 +270,8 @@ static int runCommand(const char* cmd) { WaitForSingleObject(pi.hProcess, INFINITE); + FlushConsoleInputBuffer(hOut); + DWORD exitCode = 0; GetExitCodeProcess(pi.hProcess, &exitCode); CloseHandle(pi.hProcess); @@ -347,7 +281,7 @@ static int runCommand(const char* cmd) { print("shell: '"); print(cmd); print("' exited with code "); - printUInt(exitCode); + printInt(exitCode); print("\n"); } diff --git a/code/syscall/syscall_nr.inc b/code/syscall/syscall_nr.inc index a2df90e..d88e9e6 100644 --- a/code/syscall/syscall_nr.inc +++ b/code/syscall/syscall_nr.inc @@ -1,110 +1,68 @@ -; syscall_nr.inc - assembled from syscall_nr.h for use in .asm files -; Keep in sync with syscall_nr.h and ke_syscall.c. +; syscall_nr.inc - auto-synced with syscall_nr.h and ke_syscall.c -; Process & Thread -SYS_EXIT_PROCESS EQU 0 -SYS_EXIT_THREAD EQU 1 -SYS_CREATE_THREAD EQU 2 -SYS_GET_CURRENT_TID EQU 3 -SYS_GET_CURRENT_PID EQU 4 -SYS_YIELD EQU 5 -SYS_SLEEP EQU 6 -SYS_SET_THREAD_PRIORITY EQU 7 +SYS_EXIT_PROCESS EQU 0 +SYS_EXIT_THREAD EQU 1 +SYS_CREATE_THREAD EQU 2 +SYS_GET_CURRENT_TID EQU 3 +SYS_GET_CURRENT_PID EQU 4 +SYS_YIELD EQU 5 +SYS_SLEEP EQU 6 +SYS_SET_THREAD_PRIORITY EQU 7 +SYS_ALLOC EQU 8 +SYS_FREE EQU 9 +SYS_REALLOC EQU 10 +SYS_MUTEX_CREATE EQU 11 +SYS_MUTEX_ACQUIRE EQU 12 +SYS_MUTEX_TRY_ACQUIRE EQU 13 +SYS_MUTEX_RELEASE EQU 14 +SYS_SEM_CREATE EQU 15 +SYS_SEM_WAIT EQU 16 +SYS_SEM_TRY_WAIT EQU 17 +SYS_SEM_SIGNAL EQU 18 +SYS_EVENT_CREATE EQU 19 +SYS_EVENT_SIGNAL EQU 20 +SYS_EVENT_CLEAR EQU 21 +SYS_EVENT_WAIT EQU 22 +SYS_QUEUE_CREATE EQU 23 +SYS_QUEUE_SEND EQU 24 +SYS_QUEUE_RECV EQU 25 +SYS_CLOSE_HANDLE EQU 26 +SYS_OPEN_FILE EQU 27 +SYS_READ_FILE EQU 28 +SYS_WRITE_FILE EQU 29 +SYS_CREATE_FILE EQU 30 +SYS_DELETE_FILE EQU 31 +SYS_TRUNCATE_FILE EQU 32 +SYS_GET_FILE_POS EQU 33 +SYS_SEEK_FILE EQU 34 +SYS_GET_FILE_SIZE EQU 35 +SYS_SCREEN_BLIT EQU 36 +SYS_SCREEN_CLEAR EQU 37 +SYS_SCREEN_GET_SIZE EQU 38 +SYS_SCREEN_PUT_CHAR EQU 39 +SYS_KB_POLL EQU 40 +SYS_KB_IS_KEY_DOWN EQU 41 +SYS_KB_READ_CHAR EQU 42 +SYS_KB_READ_SCANCODE EQU 43 +SYS_KB_GET_MODIFIERS EQU 44 +SYS_MOUSE_POLL EQU 45 +SYS_MOUSE_READ EQU 46 +SYS_MOUSE_GET_POS EQU 47 +SYS_GET_TICK EQU 48 +SYS_DEBUG_PRINT EQU 49 +SYS_CREATE_PROCESS EQU 50 +SYS_WAIT_FOR_PROCESS EQU 51 +SYS_GET_PROCESS_EXIT_CODE EQU 52 +SYS_WRITE_CONSOLE EQU 53 +SYS_OPEN_DIR EQU 54 +SYS_READ_DIR EQU 55 +SYS_SET_CWD EQU 56 +SYS_GET_CWD EQU 57 +SYS_WAIT_THREAD EQU 58 +SYS_GET_PROCESS_PID EQU 59 +SYS_PUBLISH_QUEUE EQU 60 +SYS_OPEN_NAMED_QUEUE EQU 61 +SYS_QUEUE_DUPLICATE EQU 62 +SYS_NAMED_QUEUE_OWNER_PID EQU 63 -; Memory -SYS_ALLOC EQU 8 -SYS_FREE EQU 9 -SYS_REALLOC EQU 10 - -; Mutex -SYS_MUTEX_CREATE EQU 11 -SYS_MUTEX_ACQUIRE EQU 12 -SYS_MUTEX_TRY_ACQUIRE EQU 13 -SYS_MUTEX_RELEASE EQU 14 - -; Semaphore -SYS_SEM_CREATE EQU 15 -SYS_SEM_WAIT EQU 16 -SYS_SEM_TRY_WAIT EQU 17 -SYS_SEM_SIGNAL EQU 18 - -; Event -SYS_EVENT_CREATE EQU 19 -SYS_EVENT_SIGNAL EQU 20 -SYS_EVENT_CLEAR EQU 21 -SYS_EVENT_WAIT EQU 22 - -; Queue -SYS_QUEUE_CREATE EQU 23 -SYS_QUEUE_SEND EQU 24 -SYS_QUEUE_RECV EQU 25 - -; Handle (unified - one close for every object type) -SYS_CLOSE_HANDLE EQU 26 - -; File I/O -SYS_OPEN_FILE EQU 27 -SYS_READ_FILE EQU 28 -SYS_SEEK_FILE EQU 29 -SYS_GET_FILE_SIZE EQU 30 -SYS_WRITE_FILE EQU 31 ; handle, buf, size, *bytesWritten -SYS_CREATE_FILE EQU 32 ; *path, *handleOut -SYS_DELETE_FILE EQU 33 ; *path -SYS_TRUNCATE_FILE EQU 34 ; handle, newSize -SYS_GET_FILE_POS EQU 35 ; handle -> current offset - -; Screen -SYS_SCREEN_BLIT EQU 36 -SYS_SCREEN_CLEAR EQU 37 -SYS_SCREEN_GET_SIZE EQU 38 -SYS_SCREEN_PUT_CHAR EQU 39 - -; Keyboard -SYS_KB_POLL EQU 40 -SYS_KB_READ_CHAR EQU 41 -SYS_KB_READ_SCANCODE EQU 42 -SYS_KB_GET_MODIFIERS EQU 43 - -; Mouse -SYS_MOUSE_POLL EQU 44 -SYS_MOUSE_READ EQU 45 -SYS_MOUSE_GET_POS EQU 46 - -; Timer -SYS_GET_TICK EQU 47 - -; Debug -SYS_DEBUG_PRINT EQU 48 - -; Process launch & lifecycle -SYS_CREATE_PROCESS EQU 49 -SYS_WAIT_FOR_PROCESS EQU 50 -SYS_GET_PROCESS_EXIT_CODE EQU 51 - -; Console output -SYS_WRITE_CONSOLE EQU 52 - -; Directory enumeration -SYS_OPEN_DIR EQU 53 -SYS_READ_DIR EQU 54 - -; Current Working Directory -SYS_SET_CWD EQU 55 -SYS_GET_CWD EQU 56 - -; Thread join -SYS_WAIT_THREAD EQU 57 ; a0=tid -> KSTATUS - -; Process PID query -SYS_GET_PROCESS_PID EQU 58 ; a0=procHandle a1=*pidOut -> KSTATUS - -; Named Queue Registry -SYS_PUBLISH_QUEUE EQU 59 ; a0=*name a1=queueHandle -> KSTATUS -SYS_OPEN_NAMED_QUEUE EQU 60 ; a0=*name a1=*handleOut -> KSTATUS - -; Handle duplication -SYS_QUEUE_DUPLICATE EQU 61 ; a0=handle a1=targetPid a2=*handleOut -> KSTATUS -SYS_NAMED_QUEUE_OWNER_PID EQU 62 ; a0=*name a1=*pidOut -> KSTATUS - -; Sentinel -SYS_MAX EQU 63 +SYS_MAX EQU 64 diff --git a/code/syscall/syscall_stubs.asm b/code/syscall/syscall_stubs.asm index 5c508d0..16781cf 100644 --- a/code/syscall/syscall_stubs.asm +++ b/code/syscall/syscall_stubs.asm @@ -49,153 +49,154 @@ ENDM ; --------------------------------------------------------------------------- ; Process & Thread ; --------------------------------------------------------------------------- -SYSCALL_STUB2 ExitProcess, SYS_EXIT_PROCESS -SYSCALL_STUB2 ExitThread, SYS_EXIT_THREAD -SYSCALL_STUB2 CreateThread, SYS_CREATE_THREAD -SYSCALL_STUB2 GetCurrentTid, SYS_GET_CURRENT_TID -SYSCALL_STUB2 GetCurrentPid, SYS_GET_CURRENT_PID -SYSCALL_STUB2 Yield, SYS_YIELD -SYSCALL_STUB2 Sleep, SYS_SLEEP -SYSCALL_STUB2 SetThreadPriority, SYS_SET_THREAD_PRIORITY +SYSCALL_STUB2 ExitProcess, SYS_EXIT_PROCESS ; (int exitCode) -> void +SYSCALL_STUB2 ExitThread, SYS_EXIT_THREAD ; (int exitCode) -> void +SYSCALL_STUB2 CreateThread, SYS_CREATE_THREAD ; (uint64_t entry, uint64_t arg, uint32_t priority, uint32_t* tidOut) -> KSTATUS +SYSCALL_STUB2 GetCurrentTid, SYS_GET_CURRENT_TID ; () -> uint32_t +SYSCALL_STUB2 GetCurrentPid, SYS_GET_CURRENT_PID ; () -> uint32_t +SYSCALL_STUB2 Yield, SYS_YIELD ; () -> void +SYSCALL_STUB2 Sleep, SYS_SLEEP ; (uint32_t ms) -> void +SYSCALL_STUB2 SetThreadPriority, SYS_SET_THREAD_PRIORITY ; (uint32_t priority) -> KSTATUS ; --------------------------------------------------------------------------- ; Memory ; --------------------------------------------------------------------------- -SYSCALL_STUB2 Alloc, SYS_ALLOC -SYSCALL_STUB2 Free, SYS_FREE -SYSCALL_STUB2 Realloc, SYS_REALLOC +SYSCALL_STUB2 Alloc, SYS_ALLOC ; (size_t size) -> void* (NULL on failure) +SYSCALL_STUB2 Free, SYS_FREE ; (void* ptr, size_t size) -> void +SYSCALL_STUB2 Realloc, SYS_REALLOC ; (void* ptr, size_t newSize) -> void* ; --------------------------------------------------------------------------- ; Mutex ; --------------------------------------------------------------------------- -SYSCALL_STUB2 MutexCreate, SYS_MUTEX_CREATE -SYSCALL_STUB2 MutexAcquire, SYS_MUTEX_ACQUIRE -SYSCALL_STUB2 MutexTryAcquire, SYS_MUTEX_TRY_ACQUIRE -SYSCALL_STUB2 MutexRelease, SYS_MUTEX_RELEASE +SYSCALL_STUB2 MutexCreate, SYS_MUTEX_CREATE ; (uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 MutexAcquire, SYS_MUTEX_ACQUIRE ; (uint32_t handle) -> KSTATUS +SYSCALL_STUB2 MutexTryAcquire, SYS_MUTEX_TRY_ACQUIRE ; (uint32_t handle) -> KSTATUS +SYSCALL_STUB2 MutexRelease, SYS_MUTEX_RELEASE ; (uint32_t handle) -> KSTATUS ; --------------------------------------------------------------------------- ; Semaphore ; --------------------------------------------------------------------------- -SYSCALL_STUB2 SemCreate, SYS_SEM_CREATE -SYSCALL_STUB2 SemWait, SYS_SEM_WAIT -SYSCALL_STUB2 SemTryWait, SYS_SEM_TRY_WAIT -SYSCALL_STUB2 SemSignal, SYS_SEM_SIGNAL +SYSCALL_STUB2 SemCreate, SYS_SEM_CREATE ; (int32_t initial, int32_t max, uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 SemWait, SYS_SEM_WAIT ; (uint32_t handle) -> KSTATUS +SYSCALL_STUB2 SemTryWait, SYS_SEM_TRY_WAIT ; (uint32_t handle) -> KSTATUS +SYSCALL_STUB2 SemSignal, SYS_SEM_SIGNAL ; (uint32_t handle) -> KSTATUS ; --------------------------------------------------------------------------- ; Event ; --------------------------------------------------------------------------- -SYSCALL_STUB2 EventCreate, SYS_EVENT_CREATE -SYSCALL_STUB2 EventSignal, SYS_EVENT_SIGNAL -SYSCALL_STUB2 EventClear, SYS_EVENT_CLEAR -SYSCALL_STUB2 EventWait, SYS_EVENT_WAIT +SYSCALL_STUB2 EventCreate, SYS_EVENT_CREATE ; (uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 EventSignal, SYS_EVENT_SIGNAL ; (uint32_t handle) -> KSTATUS +SYSCALL_STUB2 EventClear, SYS_EVENT_CLEAR ; (uint32_t handle) -> KSTATUS +SYSCALL_STUB2 EventWait, SYS_EVENT_WAIT ; (uint32_t handle) -> KSTATUS ; --------------------------------------------------------------------------- ; Queue ; --------------------------------------------------------------------------- -SYSCALL_STUB2 QueueCreate, SYS_QUEUE_CREATE -SYSCALL_STUB2 QueueSend, SYS_QUEUE_SEND -SYSCALL_STUB2 QueueRecv, SYS_QUEUE_RECV +SYSCALL_STUB2 QueueCreate, SYS_QUEUE_CREATE ; (uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 QueueSend, SYS_QUEUE_SEND ; (uint32_t handle, void* msg, int blocking) -> KSTATUS +SYSCALL_STUB2 QueueRecv, SYS_QUEUE_RECV ; (uint32_t handle, void* msg, int blocking) -> KSTATUS ; --------------------------------------------------------------------------- ; Handle (unified - use for files, mutexes, semaphores, events, queues) ; --------------------------------------------------------------------------- -SYSCALL_STUB2 CloseHandle, SYS_CLOSE_HANDLE +SYSCALL_STUB2 CloseHandle, SYS_CLOSE_HANDLE ; (uint32_t handle) -> KSTATUS ; --------------------------------------------------------------------------- ; File I/O ; (To close: SysCloseHandle(handle) - no dedicated SysCloseFile) ; --------------------------------------------------------------------------- -SYSCALL_STUB2 OpenFile, SYS_OPEN_FILE -SYSCALL_STUB2 ReadFile, SYS_READ_FILE -SYSCALL_STUB2 SeekFile, SYS_SEEK_FILE -SYSCALL_STUB2 GetFileSize, SYS_GET_FILE_SIZE -SYSCALL_STUB2 WriteFile, SYS_WRITE_FILE -SYSCALL_STUB2 CreateFile, SYS_CREATE_FILE -SYSCALL_STUB2 DeleteFile, SYS_DELETE_FILE -SYSCALL_STUB2 TruncateFile, SYS_TRUNCATE_FILE -SYSCALL_STUB2 GetFilePos, SYS_GET_FILE_POS +SYSCALL_STUB2 OpenFile, SYS_OPEN_FILE ; (const char* path, uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 ReadFile, SYS_READ_FILE ; (uint32_t handle, void* buf, size_t size, size_t* bytesReadOut) -> KSTATUS +SYSCALL_STUB2 WriteFile, SYS_WRITE_FILE ; (uint32_t handle, const void* buf, size_t size, size_t* bytesWrittenOut) -> KSTATUS +SYSCALL_STUB2 CreateFile, SYS_CREATE_FILE ; (const char* path, uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 DeleteFile, SYS_DELETE_FILE ; (const char* path) -> KSTATUS +SYSCALL_STUB2 TruncateFile, SYS_TRUNCATE_FILE ; (uint32_t handle, uint64_t newSize) -> KSTATUS +SYSCALL_STUB2 GetFilePos, SYS_GET_FILE_POS ; (uint32_t handle) -> uint64_t +SYSCALL_STUB2 SeekFile, SYS_SEEK_FILE ; (uint32_t handle, uint64_t offset) -> KSTATUS +SYSCALL_STUB2 GetFileSize, SYS_GET_FILE_SIZE ; (uint32_t handle) -> uint64_t ; --------------------------------------------------------------------------- ; Screen ; SysScreenBlit has 5 args (x, y, w, h, pixels) - needs SYSCALL_STUB6. ; SysScreenPutChar has 5 args (c, x, y, fg, bg) - needs SYSCALL_STUB6. ; --------------------------------------------------------------------------- -SYSCALL_STUB6 ScreenBlit, SYS_SCREEN_BLIT -SYSCALL_STUB2 ScreenClear, SYS_SCREEN_CLEAR -SYSCALL_STUB2 ScreenGetSize, SYS_SCREEN_GET_SIZE -SYSCALL_STUB6 ScreenPutChar, SYS_SCREEN_PUT_CHAR +SYSCALL_STUB6 ScreenBlit, SYS_SCREEN_BLIT ; (int x, int y, int w, int h, const uint32_t* pixels) -> void +SYSCALL_STUB2 ScreenClear, SYS_SCREEN_CLEAR ; (uint32_t color) -> void +SYSCALL_STUB2 ScreenGetSize, SYS_SCREEN_GET_SIZE ; (int* widthOut, int* heightOut) -> void +SYSCALL_STUB6 ScreenPutChar, SYS_SCREEN_PUT_CHAR ; (char c, int x, int y, uint32_t fg, uint32_t bg) -> void ; --------------------------------------------------------------------------- ; Keyboard ; --------------------------------------------------------------------------- -SYSCALL_STUB2 KbPoll, SYS_KB_POLL -SYSCALL_STUB2 KbReadChar, SYS_KB_READ_CHAR -SYSCALL_STUB2 KbReadScancode, SYS_KB_READ_SCANCODE -SYSCALL_STUB2 KbGetModifiers, SYS_KB_GET_MODIFIERS +SYSCALL_STUB2 KbPoll, SYS_KB_POLL ; () -> uint32_t (1 if key available, 0 otherwise) +SYSCALL_STUB2 KbIsKeyDown, SYS_KB_IS_KEY_DOWN ; (int scancode) -> uint32_t (1 if down, 0 otherwise) +SYSCALL_STUB2 KbReadChar, SYS_KB_READ_CHAR ; () -> char (blocks, yields while waiting) +SYSCALL_STUB2 KbReadScancode, SYS_KB_READ_SCANCODE ; () -> uint8_t (blocks, yields while waiting) +SYSCALL_STUB2 KbGetModifiers, SYS_KB_GET_MODIFIERS ; () -> uint32_t (current modifier bitmask) ; --------------------------------------------------------------------------- ; Mouse ; --------------------------------------------------------------------------- -SYSCALL_STUB2 MousePoll, SYS_MOUSE_POLL -SYSCALL_STUB2 MouseRead, SYS_MOUSE_READ -SYSCALL_STUB2 MouseGetPos, SYS_MOUSE_GET_POS +SYSCALL_STUB2 MousePoll, SYS_MOUSE_POLL ; () -> uint32_t (1 if packet waiting, 0 otherwise) +SYSCALL_STUB2 MouseRead, SYS_MOUSE_READ ; (int* dx, int* dy, uint8_t* buttons) -> uint32_t (1=ok, 0=empty) +SYSCALL_STUB2 MouseGetPos, SYS_MOUSE_GET_POS ; (int* x, int* y) -> void ; --------------------------------------------------------------------------- ; Timer ; --------------------------------------------------------------------------- -SYSCALL_STUB2 GetTick, SYS_GET_TICK +SYSCALL_STUB2 GetTick, SYS_GET_TICK ; () -> uint64_t (milliseconds since boot) ; --------------------------------------------------------------------------- ; Debug ; --------------------------------------------------------------------------- -SYSCALL_STUB2 DebugPrint, SYS_DEBUG_PRINT +SYSCALL_STUB2 DebugPrint, SYS_DEBUG_PRINT ; (const char* str) -> void ; --------------------------------------------------------------------------- ; Process launch & lifecycle ; --------------------------------------------------------------------------- -SYSCALL_STUB2 CreateProcess, SYS_CREATE_PROCESS -SYSCALL_STUB2 WaitForProcess, SYS_WAIT_FOR_PROCESS -SYSCALL_STUB2 GetProcessExitCode, SYS_GET_PROCESS_EXIT_CODE +SYSCALL_STUB2 CreateProcess, SYS_CREATE_PROCESS ; (const char* path, const char* args, uint32_t* pidOut) -> KSTATUS +SYSCALL_STUB2 WaitForProcess, SYS_WAIT_FOR_PROCESS ; (uint32_t pid) -> KSTATUS +SYSCALL_STUB2 GetProcessExitCode, SYS_GET_PROCESS_EXIT_CODE ; (uint32_t pid, int* exitCodeOut) -> KSTATUS ; --------------------------------------------------------------------------- ; Console output (white text, for user programs) ; --------------------------------------------------------------------------- -SYSCALL_STUB2 WriteConsole, SYS_WRITE_CONSOLE +SYSCALL_STUB2 WriteConsole, SYS_WRITE_CONSOLE ; (const char* str, size_t len) -> void ; --------------------------------------------------------------------------- ; Directory enumeration ; --------------------------------------------------------------------------- -SYSCALL_STUB2 OpenDir, SYS_OPEN_DIR -SYSCALL_STUB2 ReadDir, SYS_READ_DIR +SYSCALL_STUB2 OpenDir, SYS_OPEN_DIR ; (const char* path, uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 ReadDir, SYS_READ_DIR ; (uint32_t handle, DirEntry* entryOut) -> KSTATUS ; --------------------------------------------------------------------------- ; Current Working Directory ; --------------------------------------------------------------------------- -SYSCALL_STUB2 SetCwd, SYS_SET_CWD -SYSCALL_STUB2 GetCwd, SYS_GET_CWD +SYSCALL_STUB2 SetCwd, SYS_SET_CWD ; (const char* path) -> KSTATUS +SYSCALL_STUB2 GetCwd, SYS_GET_CWD ; (char* buf, size_t buflen) -> KSTATUS ; --------------------------------------------------------------------------- ; Thread join (used by pthread_join in posix.dll) ; --------------------------------------------------------------------------- -SYSCALL_STUB2 WaitThread, SYS_WAIT_THREAD +SYSCALL_STUB2 WaitThread, SYS_WAIT_THREAD ; (uint32_t tid) -> KSTATUS ; --------------------------------------------------------------------------- ; Process PID query (used by posix_spawn -> waitpid in posix.dll) ; --------------------------------------------------------------------------- -SYSCALL_STUB2 GetProcessPid, SYS_GET_PROCESS_PID +SYSCALL_STUB2 GetProcessPid, SYS_GET_PROCESS_PID ; (uint32_t pid) -> KSTATUS ; --------------------------------------------------------------------------- ; Named Queue Registry ; SysPublishQueue - register a queue under a name (call once at startup) ; SysOpenNamedQueue - resolve a name to a handle (retry until SUCCESS) ; --------------------------------------------------------------------------- -SYSCALL_STUB2 PublishQueue, SYS_PUBLISH_QUEUE -SYSCALL_STUB2 OpenNamedQueue, SYS_OPEN_NAMED_QUEUE +SYSCALL_STUB2 PublishQueue, SYS_PUBLISH_QUEUE ; (const char* name, uint32_t queueHandle) -> KSTATUS +SYSCALL_STUB2 OpenNamedQueue, SYS_OPEN_NAMED_QUEUE ; (const char* name, uint32_t* handleOut) -> KSTATUS ; --------------------------------------------------------------------------- ; Handle duplication ; --------------------------------------------------------------------------- -SYSCALL_STUB2 QueueDuplicate, SYS_QUEUE_DUPLICATE -SYSCALL_STUB2 NamedQueueOwnerPid, SYS_NAMED_QUEUE_OWNER_PID +SYSCALL_STUB2 QueueDuplicate, SYS_QUEUE_DUPLICATE ; (uint32_t handle, uint32_t targetPid, uint32_t* handleOut) -> KSTATUS +SYSCALL_STUB2 NamedQueueOwnerPid, SYS_NAMED_QUEUE_OWNER_PID ; (const char* name, uint32_t* pidOut) -> KSTATUS END diff --git a/video.bk2 b/code/video/video.bk2 similarity index 100% rename from video.bk2 rename to code/video/video.bk2 diff --git a/code/video/video.c b/code/video/video.c index ecf415e..365feee 100644 --- a/code/video/video.c +++ b/code/video/video.c @@ -1,81 +1,10 @@ +#include #include #include #include #include #include "bink.h" -// --------------------------------------------------------------------------- -// Win32 Boilerplate & API declarations -// --------------------------------------------------------------------------- -typedef void* HWND; -typedef void* HDC; -typedef unsigned long DWORD; -typedef unsigned short WORD; -typedef unsigned int UINT; -typedef long LONG; -typedef int BOOL; - -#define BI_RGB 0L -#define DIB_RGB_COLORS 0 -#define SRCCOPY 0x00CC0020 - -#define STD_OUTPUT_HANDLE ((DWORD)-11) - -typedef struct _RECT { - LONG left, top, right, bottom; -} RECT; - -typedef struct tagPAINTSTRUCT { - HDC hdc; - BOOL fErase; - RECT rcPaint; - BOOL fRestore; - BOOL fIncUpdate; - char rgbReserved[32]; -} PAINTSTRUCT; - -typedef struct tagBITMAPINFOHEADER { - DWORD biSize; - LONG biWidth; - LONG biHeight; - WORD biPlanes; - WORD biBitCount; - DWORD biCompression; - DWORD biSizeImage; - LONG biXPelsPerMeter; - LONG biYPelsPerMeter; - DWORD biClrUsed; - DWORD biClrImportant; -} BITMAPINFOHEADER; - -typedef struct tagRGBQUAD { - unsigned char rgbBlue, rgbGreen, rgbRed, rgbReserved; -} RGBQUAD; - -typedef struct tagBITMAPINFO { - BITMAPINFOHEADER bmiHeader; - RGBQUAD bmiColors[1]; -} BITMAPINFO; - -// Kernel/Win32 Exports -void* GetStdHandle(DWORD nStdHandle); -int WriteConsoleA(void* hConsoleOutput, const void* lpBuffer, unsigned int nNumberOfCharsToWrite, unsigned int* lpNumberOfCharsWritten, void* lpReserved); -_Noreturn void ExitProcess(unsigned int code); -void* HeapAlloc(void* heap, unsigned long flags, size_t size); -void* CreateFileA(const char* name, unsigned long access, unsigned long share, void* sa, unsigned long disp, unsigned long flags, void* templ); -unsigned long GetFileSize(void* handle, unsigned long* high); -int ReadFile(void* handle, void* buf, unsigned long toRead, unsigned long* read, void* overlapped); -BOOL CloseHandle(void* hObject); - -// New GDI/User32 Exports -HDC BeginPaint(HWND hwnd, PAINTSTRUCT* lpPaint); -BOOL EndPaint(HWND hwnd, const PAINTSTRUCT* lpPaint); -int StretchDIBits(HDC hdc, int xDest, int yDest, int DestWidth, int DestHeight, - int xSrc, int ySrc, int SrcWidth, int SrcHeight, - const void *lpBits, const BITMAPINFO *lpbmi, - UINT iUsage, DWORD rop); - - int main(const char* cmdline) { void* h = GetStdHandle(STD_OUTPUT_HANDLE); WriteConsoleA(h, "video: starting\n", 16, 0, 0); diff --git a/code/win32/gdi32.c b/code/win32/gdi32.c index 54126b6..5c26415 100644 --- a/code/win32/gdi32.c +++ b/code/win32/gdi32.c @@ -1,11 +1,20 @@ -// gdi32.c - Win32 Graphics Device Interface stubs +// gdi32.c #include #include +#if defined(__SSE2__) || defined(_M_X64) || defined(_M_IX86) +#include +#elif defined(__ARM_NEON) || defined(__ARM_NEON__) || defined(_M_ARM64) +#include +#endif + // --------------------------------------------------------------------------- // Syscall stubs (from syscall.dll) // --------------------------------------------------------------------------- extern void SysScreenBlit(int x, int y, int w, int h, const uint32_t* pixels); +extern void* SysAlloc(size_t size); +extern void SysFree(void* ptr, size_t size); + // --------------------------------------------------------------------------- // Win32 Base Types @@ -54,9 +63,17 @@ typedef struct tagBITMAPINFO { RGBQUAD bmiColors[1]; } BITMAPINFO; + // --------------------------------------------------------------------------- // GDI Exports // --------------------------------------------------------------------------- + +// Static buffers to persist between function calls +static uint32_t* destBuffer = NULL; +static int* srcX_map = NULL; +static int currentDestCapacity = 0; +static int currentXMapCapacity = 0; + __declspec(dllexport) int StretchDIBits( HDC hdc, int xDest, int yDest, int DestWidth, int DestHeight, @@ -64,20 +81,94 @@ __declspec(dllexport) int StretchDIBits( const void *lpBits, const BITMAPINFO *lpbmi, UINT iUsage, DWORD rop) { - (void)hdc; (void)xSrc; (void)ySrc; (void)SrcWidth; (void)SrcHeight; - (void)lpbmi; (void)iUsage; (void)rop; + (void)hdc; (void)lpbmi; (void)iUsage; (void)rop; - // Direct mapping to kernel screen blit - SysScreenBlit(xDest, yDest, DestWidth, DestHeight, (const uint32_t*)lpBits); + // Safety check to prevent division by zero + if (DestWidth <= 0 || DestHeight <= 0 || SrcWidth <= 0 || SrcHeight <= 0) { + return 0; + } + + // Handle trivial case (1:1 copy) to bypass allocation and scaling overhead + if (DestWidth == SrcWidth && DestHeight == SrcHeight && xSrc == 0 && ySrc == 0) { + SysScreenBlit(xDest, yDest, DestWidth, DestHeight, (const uint32_t*)lpBits); + return DestHeight; + } + + const uint32_t* srcPixels = (const uint32_t*)lpBits; + + // Only reallocate if the new size is LARGER than what we already have + int requiredPixels = DestWidth * DestHeight; + if (requiredPixels > currentDestCapacity) { + SysFree(destBuffer, 0); + destBuffer = (uint32_t*)SysAlloc(requiredPixels * sizeof(uint32_t)); + currentDestCapacity = requiredPixels; + } + + if (DestWidth > currentXMapCapacity) { + SysFree(srcX_map, 0); + srcX_map = (int*)SysAlloc(DestWidth * sizeof(int)); + currentXMapCapacity = DestWidth; + } + + for (int dx = 0; dx < DestWidth; ++dx) { + // Nearest neighbor coordinate mapping + srcX_map[dx] = xSrc + (dx * SrcWidth) / DestWidth; + + // Clamp to safe bounds + if (srcX_map[dx] < 0) srcX_map[dx] = 0; + if (srcX_map[dx] >= SrcWidth) srcX_map[dx] = SrcWidth - 1; + } + + // Process the image row by row + for (int dy = 0; dy < DestHeight; ++dy) { + // Map destination Y to source Y + int sy = ySrc + (dy * SrcHeight) / DestHeight; + if (sy < 0) sy = 0; + if (sy >= SrcHeight) sy = SrcHeight - 1; + + // Assumes stride == SrcWidth (tightly packed 32bpp) + const uint32_t* srcRow = srcPixels + (sy * SrcWidth); + uint32_t* dstRow = destBuffer + (dy * DestWidth); + + int dx = 0; + +#if defined(__SSE2__) || defined(_M_X64) + // Process 4 pixels (16 bytes) per loop iteration using SSE2 + for (; dx <= DestWidth - 4; dx += 4) { + // Gather 4 source pixels using our precomputed X map. + // Note: _mm_set_epi32 takes arguments in reverse order (3, 2, 1, 0) + __m128i pixels = _mm_set_epi32( + srcRow[srcX_map[dx + 3]], + srcRow[srcX_map[dx + 2]], + srcRow[srcX_map[dx + 1]], + srcRow[srcX_map[dx + 0]] + ); + // Issue a single 128-bit unaligned store + _mm_storeu_si128((__m128i*)&dstRow[dx], pixels); + } +#elif defined(__ARM_NEON) || defined(__ARM_NEON__) || defined(_M_ARM64) + // Process 4 pixels per loop iteration using ARM NEON + for (; dx <= DestWidth - 4; dx += 4) { + // Initialize a vector and populate lanes (avoids stack-memory hop) + uint32x4_t pixels = vdupq_n_u32(0); + pixels = vsetq_lane_u32(srcRow[srcX_map[dx + 0]], pixels, 0); + pixels = vsetq_lane_u32(srcRow[srcX_map[dx + 1]], pixels, 1); + pixels = vsetq_lane_u32(srcRow[srcX_map[dx + 2]], pixels, 2); + pixels = vsetq_lane_u32(srcRow[srcX_map[dx + 3]], pixels, 3); + + // Issue a single 128-bit store + vst1q_u32(&dstRow[dx], pixels); + } +#endif + + // Epilogue: Handle remaining pixels if DestWidth isn't a multiple of 4 + for (; dx < DestWidth; ++dx) { + dstRow[dx] = srcRow[srcX_map[dx]]; + } + } + + // Direct mapping to kernel screen blit using the stretched buffer + SysScreenBlit(xDest, yDest, DestWidth, DestHeight, destBuffer); - // Return the number of scanlines copied return DestHeight; } - -__declspec(dllexport) BOOL BitBlt(HDC hdcDest, int xDest, int yDest, int w, int h, - HDC hdcSrc, int xSrc, int ySrc, DWORD rop) { - (void)hdcDest; (void)xDest; (void)yDest; (void)w; (void)h; - (void)hdcSrc; (void)xSrc; (void)ySrc; (void)rop; - // Stubbed. Applications manipulating pixels directly will use StretchDIBits. - return TRUE; -} diff --git a/code/win32/kernel32.c b/code/win32/kernel32.c index ab8b9e0..825223e 100644 --- a/code/win32/kernel32.c +++ b/code/win32/kernel32.c @@ -28,45 +28,59 @@ // --------------------------------------------------------------------------- // Syscall stubs (from syscall.dll, assembled from syscall_stubs.asm) // --------------------------------------------------------------------------- + +// Memory extern void* SysAlloc(size_t size); extern void SysFree(void* ptr, size_t size); extern void* SysRealloc(void* ptr, size_t newSize); -extern uint32_t SysOpenFile(const char* path, uint32_t* handleOut); -extern uint32_t SysReadFile(uint32_t handle, void* buf, size_t size, size_t* bytesReadOut); -extern uint32_t SysWriteFile(uint32_t handle, const void* buf, - size_t size, size_t* bytesWrittenOut); -extern uint32_t SysCreateFile(const char* path, uint32_t* handleOut); -extern uint32_t SysDeleteFile(const char* path); -extern uint32_t SysTruncateFile(uint32_t handle, uint64_t newSize); -extern uint64_t SysGetFilePos(uint32_t handle); -extern uint32_t SysSeekFile(uint32_t handle, uint64_t offset); -extern uint64_t SysGetFileSize(uint32_t handle); -extern void SysCloseHandle(uint32_t handle); - +// Process & Thread extern void SysExitProcess(int exitCode); extern void SysExitThread(int exitCode); -extern uint32_t SysCreateThread(uint64_t entry, uint64_t arg, - uint32_t priority, uint32_t* tidOut); -extern uint32_t SysGetCurrentTid(void); -extern uint32_t SysGetCurrentPid(void); extern uint32_t SysCreateProcess(const char* path, uint32_t* handleOut, const char* cmdline); -extern uint32_t SysWaitForProcess(uint32_t handle); +extern uint32_t SysCreateThread(uint64_t entry, uint64_t arg, uint32_t priority, uint32_t* tidOut); +extern uint32_t SysGetCurrentPid(void); +extern uint32_t SysGetCurrentTid(void); extern uint32_t SysGetProcessExitCode(uint32_t handle, int* exitCodeOut); -extern char SysKbReadChar(void); -extern uint32_t SysKbPoll(void); -extern void SysYield(void); -extern void SysSleep(uint32_t ms); +extern uint32_t SysWaitForProcess(uint32_t handle); -extern uint64_t SysGetTick(void); -extern void SysDebugPrint(const char* str); +// File I/O +extern void SysCloseHandle(uint32_t handle); +extern uint32_t SysCreateFile(const char* path, uint32_t* handleOut); +extern uint32_t SysDeleteFile(const char* path); +extern uint64_t SysGetFilePos(uint32_t handle); +extern uint64_t SysGetFileSize(uint32_t handle); +extern uint32_t SysOpenFile(const char* path, uint32_t* handleOut); +extern uint32_t SysReadFile(uint32_t handle, void* buf, size_t size, size_t* bytesReadOut); +extern uint32_t SysSeekFile(uint32_t handle, uint64_t offset); +extern uint32_t SysTruncateFile(uint32_t handle, uint64_t newSize); +extern uint32_t SysWriteFile(uint32_t handle, const void* buf, size_t size, size_t* bytesWrittenOut); -// Console & directory & CWD stubs (syscall.dll) -extern void SysWriteConsole(const char* buf, size_t len); +// Console & directory & CWD stubs +extern uint32_t SysGetCwd(char* buf, size_t size); extern uint32_t SysOpenDir(const char* dirPath, uint32_t* handleOut); extern uint32_t SysReadDir(uint32_t handle, void* entryOut); +extern void SysScreenClear(uint32_t color); extern uint32_t SysSetCwd(const char* path); -extern uint32_t SysGetCwd(char* buf, size_t size); +extern void SysWriteConsole(const char* buf, size_t len); + +// Keyboard syscalls +extern uint32_t SysKbGetModifiers(void); +extern uint64_t SysKbIsKeyDown(uint8_t scancode, bool extended); +extern uint32_t SysKbPoll(void); +extern char SysKbReadChar(void); +extern unsigned char SysKbReadScancode(void); + +// Mouse syscalls +extern void SysMouseGetPos(int* x, int* y); +extern uint32_t SysMousePoll(void); +extern uint32_t SysMouseRead(int* dx, int* dy, unsigned char* buttons); + +// Misc +extern void SysDebugPrint(const char* str); +extern void SysYield(void); +extern void SysSleep(uint32_t ms); +extern uint64_t SysGetTick(void); // --------------------------------------------------------------------------- // Types @@ -74,6 +88,10 @@ extern uint32_t SysGetCwd(char* buf, size_t size); typedef void* HANDLE; typedef unsigned long DWORD; typedef int BOOL; +typedef unsigned char BYTE; +typedef short SHORT; +typedef long LONG; +typedef struct { LONG x; LONG y; } POINT; #define MAX_PATH 260 #define TRUE 1 @@ -156,7 +174,11 @@ __declspec(dllexport) void OutputDebugStringA(const char* str) { // Timer // --------------------------------------------------------------------------- __declspec(dllexport) DWORD GetTickCount(void) { - return (DWORD)SysGetTick() * 10; + return (DWORD)(SysGetTick() / 1000); +} + +__declspec(dllexport) uint64_t GetTickCount64(void) { + return SysGetTick() / 1000; } // --------------------------------------------------------------------------- @@ -194,6 +216,85 @@ __declspec(dllexport) void* GetProcessHeap(void) { return (void*)1; } +// --- Win32 API --- + +// Updated GetAsyncKeyState implementation +__declspec(dllexport) SHORT GetAsyncKeyState(int vKey) { + static const struct { int vk; uint8_t sc; bool ext; } vk_to_sc[] = { + // Letters + { 0x41, 0x1E, false }, { 0x42, 0x30, false }, { 0x43, 0x2E, false }, + { 0x44, 0x20, false }, { 0x45, 0x12, false }, { 0x46, 0x21, false }, + { 0x47, 0x22, false }, { 0x48, 0x23, false }, { 0x49, 0x17, false }, + { 0x4A, 0x24, false }, { 0x4B, 0x25, false }, { 0x4C, 0x26, false }, + { 0x4D, 0x32, false }, { 0x4E, 0x31, false }, { 0x4F, 0x18, false }, + { 0x50, 0x19, false }, { 0x51, 0x10, false }, { 0x52, 0x13, false }, + { 0x53, 0x1F, false }, { 0x54, 0x14, false }, { 0x55, 0x16, false }, + { 0x56, 0x2F, false }, { 0x57, 0x11, false }, { 0x58, 0x2D, false }, + { 0x59, 0x15, false }, { 0x5A, 0x2C, false }, + + // Numbers + { 0x31, 0x02, false }, { 0x32, 0x03, false }, { 0x33, 0x04, false }, + { 0x34, 0x05, false }, { 0x35, 0x06, false }, { 0x36, 0x07, false }, + { 0x37, 0x08, false }, { 0x38, 0x09, false }, { 0x39, 0x0A, false }, + { 0x30, 0x0B, false }, + + // Arrows (Extended) + { 0x26, 0x48, true }, // VK_UP + { 0x28, 0x50, true }, // VK_DOWN + { 0x25, 0x4B, true }, // VK_LEFT + { 0x27, 0x4D, true }, // VK_RIGHT + + // Controls + { 0x1B, 0x01, false }, // ESC + { 0x0D, 0x1C, false }, // ENTER + { 0x20, 0x39, false }, // SPACE + { 0x11, 0x1D, false }, // CTRL (Generic) + { 0x10, 0x2A, false }, // SHIFT (Generic) + { 0x12, 0x38, false }, // ALT (Generic) + { 0x08, 0x0E, false }, // BACKSPACE + { 0x09, 0x0F, false }, // TAB + + // Function Keys + { 0x70, 0x3B, false }, { 0x71, 0x3C, false }, { 0x72, 0x3D, false }, + { 0x73, 0x3E, false }, { 0x74, 0x3F, false }, { 0x75, 0x40, false }, + { 0x76, 0x41, false }, { 0x77, 0x42, false }, { 0x78, 0x43, false }, + { 0x79, 0x44, false }, { 0x7A, 0x57, false }, { 0x7B, 0x58, false }, + + // Symbols + { 0xBD, 0x0C, false }, // MINUS '-' + { 0xBB, 0x0D, false }, // EQUALS '=' + { 0xBC, 0x33, false }, // COMMA ',' + { 0xBE, 0x34, false }, // PERIOD '.' + }; + + for (size_t i = 0; i < sizeof(vk_to_sc)/sizeof(vk_to_sc[0]); ++i) { + if (vk_to_sc[i].vk == vKey) { + // Check the hardware state array via our HAL helper + if (SysKbIsKeyDown(vk_to_sc[i].sc, vk_to_sc[i].ext)) { + return (SHORT)0x8000; + } + break; + } + } + return 0; +} + +// FlushConsoleInputBuffer: clear the keyboard input buffer +__declspec(dllexport) BOOL FlushConsoleInputBuffer(HANDLE hConsoleInput) { + (void)hConsoleInput; + // Drain the keyboard buffer by reading until empty + while (SysKbPoll()) { + (void)SysKbReadChar(); + } + return TRUE; +} + +// !Made-up! clear console api. +__declspec(dllexport) BOOL ClearConsoleScreenBuffer(HANDLE hConsole) { + SysScreenClear(0x00000000); + return TRUE; +} + // --------------------------------------------------------------------------- // Locale / code-page stubs // --------------------------------------------------------------------------- diff --git a/readme.md b/readme.md index e44a3c8..34474c4 100644 --- a/readme.md +++ b/readme.md @@ -91,13 +91,136 @@ The Win32 personality translates drive letters to drive numbers, the POSIX perso ![video.exe running bink video 2](image.png) +

    Boot logs + +``` +BdsDxe: loading Boot0001 "UEFI QEMU HARDDISK QM00005 " from PciRoot(0x0)/Pci(0x4,0x0)/Sata(0x0,0xFFFF,0x0) +BdsDxe: starting Boot0001 "UEFI QEMU HARDDISK QM00005 " from PciRoot(0x0)/Pci(0x4,0x0)/Sata(0x0,0xFFFF,0x0) +1 +2 +3 +4 +Loading colonel.exe... +Loading hal.dll... +5 +6 +7 +8 +Found RSDP at: 0xF77E014 +9 +HAL: screen 1280x800 +HAL: FADT PM1a_CNT=0xb004 PM1b_CNT=0x0000 DSDT=0x0f77a000 +HAL: _S5_ SLP_TYP_A=0x00 SLP_TYP_B=0x00 +HAL: LAPIC=00000000fee00000 IOAPIC=00000000fec00000 HPET=00000000fed00000 +HAL: lapicPhys=0xFEE00000, lapicVirt=0xFFFF8800FEE00000, hpetPhys=0xFED00000 +HAL: Attempting to calibrate APIC timer via HPET... +HAL: APIC timer: 62990 ticks/ms +HAL: initialisation complete. +KernelMain: Handing over to scheduler... +SystemInitThread: Thread started. Igniting the system... +InitializeDrivers: Initializing drivers... +InitializeDrivers: Executing DriverEntry for ide.sys +IDE: Init +IDE: No drive on primary channel +InitializeDrivers: Driver ide.sys failed to init! +InitializeDrivers: Executing DriverEntry for ahci.sys +AHCI: driver loading... +AHCI: controller at PCI 00:04.0 +AHCI: PCI IRQ line = 11 +AHCI: ABAR phys=0x81060000 version=0x00010000 +AHCI: cap=0xc0141f05 ports=6 slots=32 64bit=1 +AHCI: port 0: link up, initializing... +AHCI: port COMRESET done: sig=0x00000101 ssts=0x00000113 +AHCI: drive 0: 524288 sectors (256 MB) +AHCI: drive 0 registered +AHCI: port 1: no link (ssts=0x00000000) +AHCI: port 2: no link (ssts=0x00000000) +AHCI: port 3: no link (ssts=0x00000000) +AHCI: port 4: no link (ssts=0x00000000) +AHCI: port 5: no link (ssts=0x00000000) +AHCI: ISR registered on IRQ 11; initialised 1 drive(s) +InitializeDrivers: Executing DriverEntry for fat32.sys +FAT32: Init +FAT32: Init complete (status=0, clusters=128480). +Found runtime driver: usb.sys +Test runtime driver +SystemInitThread: Loading system DLLs... +Memory Status: + -> Free (PMM): 151.80 MB + -> Kernel Pool: 4.00 MB + -> User Heap: 0.47 MB +LaunchUserProcess: IoOpenFile: 0 +LaunchUserProcess: IoGetFileSize: 5120 +LaunchUserProcess: MmAllocateUserMemory: 0x7A020 +LaunchUserProcess: IoReadFile: 0 +LaunchUserProcess: IoCloseFile +Created process (PID 2) with command line: init.exe +LaunchUserProcess: PE Image mapped! Base 0x7c020, Entry 0x7D600 +LaunchUserProcess: Thread created and queued! +[init] starting +[init] waiting +shell: ready +shell.exe +> clear +> +> +> +> doom.exe +doom: starting +getenv: Unknown variable DOOMWADDIR + DOOM Shareware Startup v1.10 +V_Init: allocate screens. +M_LoadDefaults: Load system defaults. +Z_Init: Init zone memory allocation daemon. +W_Init: Init WADfiles. + adding ./doom1.wad +=========================================================================== + Shareware! +=========================================================================== +M_Init: Init miscellaneous info. +R_Init: Init DOOM refresh daemon - [.. ] +InitTextures +InitFlats........ +InitSprites +InitColormaps +R_InitData +R_InitPointToAngle +R_InitTables +R_InitPlanes +R_InitLightTables +R_InitSkyMap +R_InitTranslationsTables +P_Init: Init Playloop state. +I_Init: Setting up machine state. +I_InitSound: I_InitSound: pre-cached all sound data +I_InitSound: sound module ready +D_CheckNetGame: Checking network game status. +startskill 2 deathmatch: 0 startmap: 1 startepisode: 1 +player 1 of 1 (1 nodes) +S_Init: Setting up sound. +S_Init: default sfx volume 8 +HU_Init: Setting up heads up display. +ST_Init: Init status bar. +doom: entering game loop +I_ShutdownSound: NOT finishing pending sounds +> clear +> video.exe +video: starting +video.exe +video: video.bk2 loaded +shell: goodbye +> +``` + +
    + ## faq Q: Why? -A: Why not? +A: Learning. Fun. Q: Does it run Doom? -A: Not yet. +A: `doom.exe` Q: Is the Win32 layer real? A: Real enough to load binaries that expect it. Not real enough to run Notepad. diff --git a/runa.bat b/runa.bat index 4ffe375..5f0ff36 100644 --- a/runa.bat +++ b/runa.bat @@ -1 +1 @@ -@start qemu-system-x86_64 -drive if=pflash,format=raw,readonly=on,file=OVMF\OVMF_CODE_4M.fd -drive if=pflash,format=raw,file=OVMF\OVMF_VARS_4M_d.fd -device ahci,id=ahci -drive format=vpc,file=disk.vhd,if=none,id=disk0 -device ide-hd,bus=ahci.0,drive=disk0 -serial stdio +@start qemu-system-x86_64 -drive if=pflash,format=raw,readonly=on,file=OVMF\OVMF_CODE_4M.fd -drive if=pflash,format=raw,file=OVMF\OVMF_VARS_4M_d.fd -device ahci,id=ahci -drive format=vpc,file=disk.vhd,if=none,id=disk0 -device ide-hd,bus=ahci.0,drive=disk0 -serial stdio -m 256M