diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index d2823a83c..2d0be11c7 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -1059,7 +1059,7 @@ if( UNIX ) endif() endif() -target_link_libraries( ${PROJECT_NAME} ${PROJECT_LIBRARIES} ${ZMUSIC_LIBRARIES} gdtoa lzma duke3d blood rr sw exhumed ) +target_link_libraries( ${PROJECT_NAME} ${PROJECT_LIBRARIES} ${ZMUSIC_LIBRARIES} gdtoa lzma duke3d duke blood rr sw exhumed ) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} @@ -1298,6 +1298,19 @@ macro( add_game_library ) ) endmacro() +macro( add_game_library2 ) + file( GLOB HEADER_FILES src/*.h ) + if( NOT_COMPILED_SOURCE_FILES ) + set_source_files_properties( ${NOT_COMPILED_SOURCE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE ) + endif() + use_precompiled_header("../..") + add_library( ${ARGV0} STATIC + ${PCH_SOURCES} + ${HEADER_FILES} + ${NOT_COMPILED_SOURCE_FILES} + ) +endmacro() + require_stricmp() require_strnicmp() diff --git a/source/core/gamecontrol.cpp b/source/core/gamecontrol.cpp index d94c19bf0..89ae47216 100644 --- a/source/core/gamecontrol.cpp +++ b/source/core/gamecontrol.cpp @@ -449,7 +449,7 @@ extern int MinFPSRate; // this is a bit messy. void CheckFrontend(int flags) { - auto old = Args->CheckValue("-duke_old"); + auto old = Args->CheckParm("-duke_old"); MinFPSRate = 30; bool duke_compat = duke_compatibility_15; // This point is too early to have cmdline CVAR checkers working so it must be with a switch. diff --git a/source/games/duke/CMakeLists.txt b/source/games/duke/CMakeLists.txt index 33b806f9d..d1ccdc629 100644 --- a/source/games/duke/CMakeLists.txt +++ b/source/games/duke/CMakeLists.txt @@ -27,4 +27,4 @@ set( PCH_SOURCES src/soundsdyn.cpp src/rrdh.cpp) -add_game_library( duke ) +add_game_library2( duke ) diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 99819e602..5d5b637f1 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #define actors_c_ -#include "duke3d.h" +#include "duke3d_ed.h" BEGIN_DUKE_NS diff --git a/source/games/duke/src/anim.cpp b/source/games/duke/src/anim.cpp index 6d8c398c4..96b4eede6 100644 --- a/source/games/duke/src/anim.cpp +++ b/source/games/duke/src/anim.cpp @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "baselayer.h" #include "baselayer.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "animlib.h" #include "compat.h" #include "cmdlib.h" diff --git a/source/games/duke/src/cheats.cpp b/source/games/duke/src/cheats.cpp index 1bb93edfb..0a515e922 100644 --- a/source/games/duke/src/cheats.cpp +++ b/source/games/duke/src/cheats.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "osdcmds.h" #include "cheats.h" #include "mapinfo.h" diff --git a/source/games/duke/src/cmdline.cpp b/source/games/duke/src/cmdline.cpp index bd09600fd..deb9a9590 100644 --- a/source/games/duke/src/cmdline.cpp +++ b/source/games/duke/src/cmdline.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "demo.h" #include "screens.h" #include "baselayer.h" diff --git a/source/games/duke/src/config.cpp b/source/games/duke/src/config.cpp index 9797ee0c0..6d426c5d4 100644 --- a/source/games/duke/src/config.cpp +++ b/source/games/duke/src/config.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "osdcmds.h" #include "baselayer.h" #include "cmdline.h" diff --git a/source/games/duke/src/d_menu.cpp b/source/games/duke/src/d_menu.cpp index d6a8ffd52..5c7c8ef62 100644 --- a/source/games/duke/src/d_menu.cpp +++ b/source/games/duke/src/d_menu.cpp @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "cheats.h" #include "compat.h" #include "demo.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "menus.h" #include "osdcmds.h" diff --git a/source/games/duke/src/demo.cpp b/source/games/duke/src/demo.cpp index 920ecb5fa..e08758417 100644 --- a/source/games/duke/src/demo.cpp +++ b/source/games/duke/src/demo.cpp @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! #include "demo.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "menus.h" #include "savegame.h" diff --git a/source/games/duke/src/duke3d.h b/source/games/duke/src/duke3d.h index e3545af5d..9592ccd7c 100644 --- a/source/games/duke/src/duke3d.h +++ b/source/games/duke/src/duke3d.h @@ -55,6 +55,7 @@ BEGIN_DUKE_NS #define RECSYNCBUFSIZ 2520 //2520 is the (LCM of 1-8)*3 #define MOVEFIFOSIZ 256 +// KEEPINSYNC lunatic/con_lang.lua #define MAXLEVELS 64 #define MAXGAMETYPES 16 @@ -112,7 +113,6 @@ END_DUKE_NS #include "gamecontrol.h" #include "game.h" #include "gamedef.h" -#include "gamedefs.h" #include "gameexec.h" #include "gamevars.h" #include "global.h" diff --git a/source/games/duke/src/duke3d_ed.h b/source/games/duke/src/duke3d_ed.h new file mode 100644 index 000000000..e3545af5d --- /dev/null +++ b/source/games/duke/src/duke3d_ed.h @@ -0,0 +1,242 @@ +//------------------------------------------------------------------------- +/* +Copyright (C) 2016 EDuke32 developers and contributors + +This file is part of EDuke32. + +EDuke32 is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License version 2 +as published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ +//------------------------------------------------------------------------- + +#ifndef duke3d_h_ +#define duke3d_h_ + +// JBF +#include "baselayer.h" +#include "build.h" + +#include "compat.h" + +#include "pragmas.h" + +#include "polymost.h" +#include "gamecvars.h" +#include "menu/menu.h" + +BEGIN_DUKE_NS + +#define VOLUMEALL (g_Shareware == 0) +#define PLUTOPAK (g_scriptVersion >= 14) +#define VOLUMEONE (g_Shareware == 1) + +// increase by 3, because atomic GRP adds 1, and Shareware adds 2 +// Non-Lua build +# define BYTEVERSION_EDUKE32 336 + +//#define BYTEVERSION_13 27 +//#define BYTEVERSION_14 116 +//#define BYTEVERSION_15 117 +#define BYTEVERSION (BYTEVERSION_EDUKE32+(PLUTOPAK?1:(VOLUMEONE<<1))) + +#define NUMPAGES 1 + +#define RECSYNCBUFSIZ 2520 //2520 is the (LCM of 1-8)*3 +#define MOVEFIFOSIZ 256 + +#define MAXLEVELS 64 +#define MAXGAMETYPES 16 + +enum { + MUS_FIRST_SPECIAL = MAXVOLUMES*MAXLEVELS, + + MUS_INTRO = MUS_FIRST_SPECIAL, + MUS_BRIEFING = MUS_FIRST_SPECIAL + 1, + MUS_LOADING = MUS_FIRST_SPECIAL + 2, +}; + +////////// TIMING CONSTANTS ////////// +// The number of 'totalclock' increments per second: +#define TICRATE 120 +// The number of game state updates per second: +#define REALGAMETICSPERSEC 30 +// The number of 'totalclock' increments per game state update: +// NOTE: calling a game state update a 'frame' is really weird. +// (This used to be TICRATE/GAMETICSPERSEC, which was 120/26 = 4.615~ truncated +// to 4 by integer division.) +#define TICSPERFRAME (TICRATE/REALGAMETICSPERSEC) +// Used as a constant to satisfy all of the calculations written with ticrate = +// 26 in mind: +#define GAMETICSPERSEC 26 + + +#define PACKBUF_SIZE 32768 + +#define TILE_SAVESHOT (MAXTILES-1) +#define TILE_LOADSHOT (MAXTILES-3) +#define TILE_TILT (MAXTILES-2) +#define TILE_ANIM (MAXTILES-4) +#define TILE_VIEWSCR (MAXTILES-5) +// Reserved: TILE_VIEWSCR_1 (MAXTILES-6) +// Reserved: TILE_VIEWSCR_2 (MAXTILES-7) +EDUKE32_STATIC_ASSERT(7 <= MAXTILES-MAXUSERTILES); + +// sprites with these statnums should be considered for fixing +#define ROTFIXSPR_STATNUMP(k) ((k)==STAT_DEFAULT || (k)==STAT_STANDABLE || (k)==STAT_FX || \ + (k)==STAT_FALLER || (k)==STAT_LIGHT) +#define ROTFIXSPR_MAGIC 0x18190000 + +// JBF 20040604: sync is a function on some platforms +#define sync dsync + +// Uncomment the following to remove calls to a.nasm functions with the GL renderers +// so that debugging with valgrind --smc-check=none is possible: +//#define DEBUG_VALGRIND_NO_SMC + +END_DUKE_NS + +#include "actors.h" +#include "common_game.h" +#include "config.h" +#include "gamecontrol.h" +#include "game.h" +#include "gamedef.h" +#include "gamedefs.h" +#include "gameexec.h" +#include "gamevars.h" +#include "global.h" +#include "inv.h" +#include "macros.h" +#include "namesdyn.h" +#include "net.h" +#include "player.h" +#include "quotes.h" +#include "rts.h" +#include "text.h" +#include "sector.h" +#include "sounds.h" +#include "soundsdyn.h" +#include "rrdh.h" + +BEGIN_DUKE_NS + +// Order is that of EDuke32 by necessity because it exposes the key binds to scripting by index instead of by name. +enum GameFunction_t +{ + gamefunc_Move_Forward, + gamefunc_Move_Backward, + gamefunc_Turn_Left, + gamefunc_Turn_Right, + gamefunc_Strafe, + gamefunc_Fire, + gamefunc_Open, + gamefunc_Run, + gamefunc_Alt_Fire, // Duke3D, Blood + gamefunc_Jump, + gamefunc_Crouch, + gamefunc_Look_Up, + gamefunc_Look_Down, + gamefunc_Look_Left, + gamefunc_Look_Right, + gamefunc_Strafe_Left, + gamefunc_Strafe_Right, + gamefunc_Aim_Up, + gamefunc_Aim_Down, + gamefunc_Weapon_1, + gamefunc_Weapon_2, + gamefunc_Weapon_3, + gamefunc_Weapon_4, + gamefunc_Weapon_5, + gamefunc_Weapon_6, + gamefunc_Weapon_7, + gamefunc_Weapon_8, + gamefunc_Weapon_9, + gamefunc_Weapon_10, + gamefunc_Inventory, + gamefunc_Inventory_Left, + gamefunc_Inventory_Right, + gamefunc_Holo_Duke, // Duke3D, RR + gamefunc_Jetpack, + gamefunc_NightVision, + gamefunc_MedKit, + gamefunc_TurnAround, + gamefunc_SendMessage, + gamefunc_Map, + gamefunc_Shrink_Screen, + gamefunc_Enlarge_Screen, + gamefunc_Center_View, + gamefunc_Holster_Weapon, + gamefunc_Show_Opponents_Weapon, + gamefunc_Map_Follow_Mode, + gamefunc_See_Coop_View, + gamefunc_Mouse_Aiming, + gamefunc_Toggle_Crosshair, + gamefunc_Steroids, + gamefunc_Quick_Kick, + gamefunc_Next_Weapon, + gamefunc_Previous_Weapon, + gamefunc_Dpad_Select, + gamefunc_Dpad_Aiming, + gamefunc_Last_Weapon, + gamefunc_Alt_Weapon, + gamefunc_Third_Person_View, + gamefunc_Show_DukeMatch_Scores, + gamefunc_Toggle_Crouch, // This is the last one used by EDuke32. + NUM_ACTIONS +}; + +static inline int32_t G_HaveActor(int spriteNum) +{ + return g_tile[spriteNum].execPtr!=NULL; +} + +static inline int32_t G_DefaultActorHealth(int spriteNum) +{ + return G_HaveActor(spriteNum) ? g_tile[spriteNum].execPtr[0] : 0; +} + + +struct GameInterface : ::GameInterface +{ + const char* Name() override { return "Redneck"; } + int app_main() override; + void UpdateScreenSize() override; + void FreeGameData() override; + bool GenerateSavePic() override; + bool validate_hud(int) override; + void set_hud_layout(int size) override; + void set_hud_scale(int size) override; + FString statFPS() override; + GameStats getStats() override; + void DrawNativeMenuText(int fontnum, int state, double xpos, double ypos, float fontscale, const char* text, int flags) override; + void MenuOpened() override; + void MenuSound(EMenuSounds snd) override; + void MenuClosed() override; + bool CanSave() override; + void StartGame(FNewGameStartup& gs) override; + FSavegameInfo GetSaveSig() override; + void DrawCenteredTextScreen(const DVector2& origin, const char* text, int position, bool bg) override; + void DrawMenuCaption(const DVector2& origin, const char* text) override; + bool SaveGame(FSaveGameNode*) override; + bool LoadGame(FSaveGameNode*) override; + void DoPrintMessage(int prio, const char* text) override; + void DrawPlayerSprite(const DVector2& origin, bool onteam) override; + void QuitToTitle() override; + FString GetCoordString() override; + int GetStringTile(int font, const char* t, int f) override; +}; + +END_DUKE_NS + +#endif diff --git a/source/games/duke/src/game.cpp b/source/games/duke/src/game.cpp index 69a307325..d53010206 100644 --- a/source/games/duke/src/game.cpp +++ b/source/games/duke/src/game.cpp @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #define game_c_ -#include "duke3d.h" +#include "duke3d_ed.h" #include "compat.h" #include "baselayer.h" #include "osdcmds.h" diff --git a/source/games/duke/src/gamedef.cpp b/source/games/duke/src/gamedef.cpp index ed43c9240..c94f62ea7 100644 --- a/source/games/duke/src/gamedef.cpp +++ b/source/games/duke/src/gamedef.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "namesdyn.h" #include "gamedef.h" #include "gameexec.h" diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp index c3c2f7037..9c1268ce7 100644 --- a/source/games/duke/src/gameexec.cpp +++ b/source/games/duke/src/gameexec.cpp @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "compat.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "anim.h" diff --git a/source/games/duke/src/gamevars.cpp b/source/games/duke/src/gamevars.cpp index f81261d3d..c1f590ad3 100644 --- a/source/games/duke/src/gamevars.cpp +++ b/source/games/duke/src/gamevars.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "menus.h" #include "savegame.h" #include "namesdyn.h" diff --git a/source/games/duke/src/global.cpp b/source/games/duke/src/global.cpp index b3a6b93cc..ae14342cd 100644 --- a/source/games/duke/src/global.cpp +++ b/source/games/duke/src/global.cpp @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #define global_c_ #include "global.h" -#include "duke3d.h" +#include "duke3d_ed.h" BEGIN_DUKE_NS diff --git a/source/games/duke/src/global.h b/source/games/duke/src/global.h index 6a3e0951e..6edf00d60 100644 --- a/source/games/duke/src/global.h +++ b/source/games/duke/src/global.h @@ -25,7 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "build.h" #include "compat.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "mmulti.h" #include "quotes.h" #include "sector.h" diff --git a/source/games/duke/src/net.cpp b/source/games/duke/src/net.cpp index 0a89fa6bf..698ada899 100644 --- a/source/games/duke/src/net.cpp +++ b/source/games/duke/src/net.cpp @@ -25,7 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "enet.h" #endif -#include "duke3d.h" +#include "duke3d_ed.h" #include "game.h" #include "gamedef.h" #include "net.h" diff --git a/source/games/duke/src/osdcmds.cpp b/source/games/duke/src/osdcmds.cpp index 483d81725..6f73125c1 100644 --- a/source/games/duke/src/osdcmds.cpp +++ b/source/games/duke/src/osdcmds.cpp @@ -25,7 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "cheats.h" #include "cmdline.h" #include "demo.h" // g_firstDemoFile[] -#include "duke3d.h" +#include "duke3d_ed.h" #include "menus.h" #include "osdcmds.h" #include "savegame.h" diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index 5694bcabc..e62452a86 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //------------------------------------------------------------------------- #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "gameexec.h" #include "demo.h" #include "d_event.h" diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index 8848b69f0..23e006085 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //------------------------------------------------------------------------- #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "anim.h" #include "menus.h" #include "demo.h" diff --git a/source/games/duke/src/rrdh.cpp b/source/games/duke/src/rrdh.cpp index f5af1bfc2..54e011a06 100644 --- a/source/games/duke/src/rrdh.cpp +++ b/source/games/duke/src/rrdh.cpp @@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "compat.h" #include "baselayer.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "sounds.h" #include "i_time.h" #include "files.h" diff --git a/source/games/duke/src/savegame.cpp b/source/games/duke/src/savegame.cpp index 3e90e1b8b..d22ef103b 100644 --- a/source/games/duke/src/savegame.cpp +++ b/source/games/duke/src/savegame.cpp @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //------------------------------------------------------------------------- #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "premap.h" #include "prlights.h" #include "savegame.h" diff --git a/source/games/duke/src/sbar.cpp b/source/games/duke/src/sbar.cpp index 193539593..0b4c8ef14 100644 --- a/source/games/duke/src/sbar.cpp +++ b/source/games/duke/src/sbar.cpp @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "ns.h" // Must come before everything else! #include "v_font.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "compat.h" #include "sbar.h" diff --git a/source/games/duke/src/screens.cpp b/source/games/duke/src/screens.cpp index f27e2b3f6..564d18748 100644 --- a/source/games/duke/src/screens.cpp +++ b/source/games/duke/src/screens.cpp @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //------------------------------------------------------------------------- #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "compat.h" #include "screens.h" diff --git a/source/games/duke/src/sector.cpp b/source/games/duke/src/sector.cpp index d23a09160..f3f269198 100644 --- a/source/games/duke/src/sector.cpp +++ b/source/games/duke/src/sector.cpp @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #define sector_c_ -#include "duke3d.h" +#include "duke3d_ed.h" #include "secrets.h" #include "v_video.h" diff --git a/source/games/duke/src/sounds.cpp b/source/games/duke/src/sounds.cpp index 0742981ae..bec5c221c 100644 --- a/source/games/duke/src/sounds.cpp +++ b/source/games/duke/src/sounds.cpp @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "compat.h" -#include "duke3d.h" +#include "duke3d_ed.h" #include "raze_music.h" #include "mapinfo.h" #include "raze_sound.h" diff --git a/source/games/duke/src/text.cpp b/source/games/duke/src/text.cpp index 8db23279f..55c99d9c5 100644 --- a/source/games/duke/src/text.cpp +++ b/source/games/duke/src/text.cpp @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //------------------------------------------------------------------------- #include "ns.h" // Must come before everything else! -#include "duke3d.h" +#include "duke3d_ed.h" #include "compat.h" #include "sbar.h" #include "menus.h"