diff --git a/source/core/gamecontrol.cpp b/source/core/gamecontrol.cpp index 75b4b577e..c3e0c027c 100644 --- a/source/core/gamecontrol.cpp +++ b/source/core/gamecontrol.cpp @@ -73,6 +73,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "automap.h" #include "v_draw.h" #include "gi.h" +#include "vm.h" CVAR(Bool, autoloadlights, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) CVAR(Bool, autoloadbrightmaps, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) @@ -275,6 +276,11 @@ void System_CrashInfo(char* buffer, size_t bufflen, const char *lfstr) UserConfig userConfig; +DEFINE_GLOBAL(userConfig) +DEFINE_FIELD_X(UserConfigStruct, UserConfig, nomonsters) +DEFINE_FIELD_X(UserConfigStruct, UserConfig, nosound) +DEFINE_FIELD_X(UserConfigStruct, UserConfig, nologo) + void UserConfig::ProcessOptions() { // -help etc are omitted diff --git a/source/games/duke/src/dispatch.cpp b/source/games/duke/src/dispatch.cpp index b19a80e46..7e9ae2675 100644 --- a/source/games/duke/src/dispatch.cpp +++ b/source/games/duke/src/dispatch.cpp @@ -235,8 +235,6 @@ int TILE_STATIC; int TILE_BOTTOMSTATUSBAR; int TILE_THREEDEE; int TILE_INGAMEDUKETHREEDEE; -int TILE_PLUTOPAKSPRITE; -int TILE_MENUBAR; int TILE_ATOMICHEALTH; int TILE_FLOORSLIME; int TILE_JIBS6; diff --git a/source/games/duke/src/flags_d.cpp b/source/games/duke/src/flags_d.cpp index 28b50b056..4a7029751 100644 --- a/source/games/duke/src/flags_d.cpp +++ b/source/games/duke/src/flags_d.cpp @@ -261,10 +261,6 @@ void initactorflags_d() TILE_CAMLIGHT = CAMLIGHT; TILE_STATIC = STATIC; TILE_BOTTOMSTATUSBAR = isWorldTour()? WIDESCREENSTATUSBAR : BOTTOMSTATUSBAR; - TILE_THREEDEE = THREEDEE; - TILE_INGAMEDUKETHREEDEE = INGAMEDUKETHREEDEE; - TILE_PLUTOPAKSPRITE = PLUTOPAKSPRITE; - TILE_MENUBAR = MENUBAR; TILE_ATOMICHEALTH = ATOMICHEALTH; TILE_FLOORSLIME = FLOORSLIME; TILE_JIBS6 = JIBS6; diff --git a/source/games/duke/src/flags_r.cpp b/source/games/duke/src/flags_r.cpp index e609c925f..04ef28b6e 100644 --- a/source/games/duke/src/flags_r.cpp +++ b/source/games/duke/src/flags_r.cpp @@ -235,10 +235,6 @@ void initactorflags_r() TILE_CAMLIGHT = CAMLIGHT; TILE_STATIC = STATIC; TILE_BOTTOMSTATUSBAR = BOTTOMSTATUSBAR; - TILE_THREEDEE = THREEDEE; - TILE_INGAMEDUKETHREEDEE = INGAMEDUKETHREEDEE; - TILE_PLUTOPAKSPRITE = PLUTOPAKSPRITE; - TILE_MENUBAR = MENUBAR; TILE_ATOMICHEALTH = ATOMICHEALTH; TILE_FLOORSLIME = FLOORSLIME; TILE_JIBS6 = JIBS6; diff --git a/source/games/duke/src/namelist_d.h b/source/games/duke/src/namelist_d.h index e098e67b4..9a81a6f94 100644 --- a/source/games/duke/src/namelist_d.h +++ b/source/games/duke/src/namelist_d.h @@ -517,6 +517,7 @@ x(THREEDEE, 2498) x(INGAMEDUKETHREEDEE, 2499) x(TENSCREEN, 2500) x(PLUTOPAKSPRITE, 2501) +x(TITLEPLUTOPAKSPRITE, 2502) x(MENUPLUTOPAKSPRITE, 2503) x(CREDITPAGE1, 2504) x(CREDITPAGE2, 2505) diff --git a/source/games/duke/src/names.h b/source/games/duke/src/names.h index 2318c9bd1..e29e19ba6 100644 --- a/source/games/duke/src/names.h +++ b/source/games/duke/src/names.h @@ -22,10 +22,6 @@ extern int TILE_CAMCORNER; extern int TILE_CAMLIGHT; extern int TILE_STATIC; extern int TILE_BOTTOMSTATUSBAR; -extern int TILE_THREEDEE; -extern int TILE_INGAMEDUKETHREEDEE; -extern int TILE_PLUTOPAKSPRITE; -extern int TILE_MENUBAR; extern int TILE_ATOMICHEALTH; extern int TILE_FLOORSLIME; extern int TILE_JIBS6; diff --git a/source/games/duke/src/sounds.cpp b/source/games/duke/src/sounds.cpp index 8a4abf5ff..d617e7df8 100644 --- a/source/games/duke/src/sounds.cpp +++ b/source/games/duke/src/sounds.cpp @@ -720,14 +720,6 @@ void S_PlaySpecialMusic(unsigned int m) } } -DEFINE_ACTION_FUNCTION_NATIVE(_Duke, PlaySpecialMusic, S_PlaySpecialMusic) -{ - PARAM_PROLOGUE; - PARAM_INT(song); - S_PlaySpecialMusic(song); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -881,4 +873,28 @@ bool StartCommentary(int tag, DDukeActor* actor) return false; } + +DEFINE_ACTION_FUNCTION_NATIVE(_Duke, PlaySpecialMusic, S_PlaySpecialMusic) +{ + PARAM_PROLOGUE; + PARAM_INT(song); + S_PlaySpecialMusic(song); + return 0; +} + +static int PlaySound(int num, int chan, int flags, double vol) +{ + return S_PlaySound(num, chan, EChanFlags::FromInt(flags), float(vol)); +} + +DEFINE_ACTION_FUNCTION_NATIVE(_Duke, PLaySound, PlaySound) +{ + PARAM_PROLOGUE; + PARAM_INT(snd); + PARAM_INT(chan); + PARAM_INT(flags); + PARAM_FLOAT(vol); + ACTION_RETURN_INT(PlaySound(snd, chan, flags, vol)); +} + END_DUKE_NS diff --git a/wadsrc/static/zscript/games/duke/dukegame.zs b/wadsrc/static/zscript/games/duke/dukegame.zs index 7b47cff15..2eb7b2e98 100644 --- a/wadsrc/static/zscript/games/duke/dukegame.zs +++ b/wadsrc/static/zscript/games/duke/dukegame.zs @@ -20,7 +20,416 @@ struct Duke native DRUGPAL, BASEPALCOUNT }; - native static void PlaySpecialMusic(int which); + native static int PlaySound(int num, int channel = CHAN_AUTO, int flags = 0, float vol =0.8f); + } + +struct DukeSnd native +{ + // This really needs to be done better... + enum EDukeSounds + { + KICK_HIT = 0, + PISTOL_RICOCHET = 1, + PISTOL_BODYHIT = 2, + PISTOL_FIRE = 3, + EJECT_CLIP = 4, + INSERT_CLIP = 5, + CHAINGUN_FIRE = 6, + RPG_SHOOT = 7, + POOLBALLHIT = 8, + RPG_EXPLODE = 9, + CAT_FIRE = 10, + SHRINKER_FIRE = 11, + ACTOR_SHRINKING = 12, + PIPEBOMB_BOUNCE = 13, + PIPEBOMB_EXPLODE = 14, + LASERTRIP_ONWALL = 15, + LASERTRIP_ARMING = 16, + LASERTRIP_EXPLODE = 17, + VENT_BUST = 18, + GLASS_BREAKING = 19, + GLASS_HEAVYBREAK = 20, + SHORT_CIRCUIT = 21, + ITEM_SPLASH = 22, + DUKE_BREATHING = 23, + DUKE_EXHALING = 24, + DUKE_GASP = 25, + SLIM_RECOG = 26, + + DUKE_URINATE = 28, + ENDSEQVOL3SND2 = 29, + ENDSEQVOL3SND3 = 30, + DUKE_PASSWIND = 32, + DUKE_CRACK = 33, + SLIM_ATTACK = 34, + SOMETHINGHITFORCE = 35, + DUKE_DRINKING = 36, + DUKE_KILLED1 = 37, + DUKE_GRUNT = 38, + DUKE_HARTBEAT = 39, + DUKE_ONWATER = 40, + DUKE_DEAD = 41, + DUKE_LAND = 42, + DUKE_WALKINDUCTS = 43, + DUKE_GLAD = 44, + DUKE_YES = 45, + DUKE_HEHE = 46, + DUKE_SHUCKS = 47, + DUKE_UNDERWATER = 48, + DUKE_JETPACK_ON = 49, + DUKE_JETPACK_IDLE = 50, + DUKE_JETPACK_OFF = 51, + LIZTROOP_GROWL = 52, + LIZTROOP_TALK1 = 53, + LIZTROOP_TALK2 = 54, + LIZTROOP_TALK3 = 55, + DUKETALKTOBOSS = 56, + LIZCAPT_GROWL = 57, + LIZCAPT_TALK1 = 58, + LIZCAPT_TALK2 = 59, + LIZCAPT_TALK3 = 60, + LIZARD_BEG = 61, + LIZARD_PAIN = 62, + LIZARD_DEATH = 63, + LIZARD_SPIT = 64, + DRONE1_HISSRATTLE = 65, + DRONE1_HISSSCREECH = 66, + DUKE_TIP2 = 67, + FLESH_BURNING = 68, + SQUISHED = 69, + TELEPORTER = 70, + ELEVATOR_ON = 71, + DUKE_KILLED3 = 72, + ELEVATOR_OFF = 73, + DOOR_OPERATE1 = 74, + SUBWAY = 75, + SWITCH_ON = 76, + FAN = 77, + DUKE_GETWEAPON3 = 78, + FLUSH_TOILET = 79, + HOVER_CRAFT = 80, + EARTHQUAKE = 81, + INTRUDER_ALERT = 82, + END_OF_LEVEL_WARN = 83, + ENGINE_OPERATING = 84, + REACTOR_ON = 85, + COMPUTER_AMBIENCE = 86, + GEARS_GRINDING = 87, + BUBBLE_AMBIENCE = 88, + MACHINE_AMBIENCE = 89, + SEWER_AMBIENCE = 90, + WIND_AMBIENCE = 91, + SOMETHING_DRIPPING = 92, + STEAM_HISSING = 93, + THEATER_BREATH = 94, + BAR_MUSIC = 95, + BOS1_ROAM = 96, + BOS1_RECOG = 97, + BOS1_ATTACK1 = 98, + BOS1_PAIN = 99, + BOS1_DYING =100, + BOS2_ROAM =101, + BOS2_RECOG =102, + BOS2_ATTACK =103, + BOS2_PAIN =104, + BOS2_DYING =105, + GETATOMICHEALTH =106, + DUKE_GETWEAPON2 =107, + BOS3_DYING =108, + SHOTGUN_FIRE =109, + PRED_ROAM =110, + PRED_RECOG =111, + PRED_ATTACK =112, + PRED_PAIN =113, + PRED_DYING =114, + CAPT_ROAM =115, + CAPT_ATTACK =116, + CAPT_RECOG =117, + CAPT_PAIN =118, + CAPT_DYING =119, + PIG_ROAM =120, + PIG_RECOG =121, + PIG_ATTACK =122, + PIG_PAIN =123, + PIG_DYING =124, + RECO_ROAM =125, + RECO_RECOG =126, + RECO_ATTACK =127, + RECO_PAIN =128, + RECO_DYING =129, + DRON_ROAM =130, + DRON_RECOG =131, + DRON_ATTACK1 =132, + DRON_PAIN =133, + DRON_DYING =134, + COMM_ROAM =135, + COMM_RECOG =136, + COMM_ATTACK =137, + COMM_PAIN =138, + COMM_DYING =139, + OCTA_ROAM =140, + OCTA_RECOG =141, + OCTA_ATTACK1 =142, + OCTA_PAIN =143, + OCTA_DYING =144, + TURR_ROAM =145, + TURR_RECOG =146, + TURR_ATTACK =147, + DUMPSTER_MOVE =148, + SLIM_DYING =149, + BOS3_ROAM =150, + BOS3_RECOG =151, + BOS3_ATTACK1 =152, + BOS3_PAIN =153, + BOS1_ATTACK2 =154, + COMM_SPIN =155, + BOS1_WALK =156, + DRON_ATTACK2 =157, + THUD =158, + OCTA_ATTACK2 =159, + WIERDSHOT_FLY =160, + TURR_PAIN =161, + TURR_DYING =162, + SLIM_ROAM =163, + LADY_SCREAM =164, + DOOR_OPERATE2 =165, + DOOR_OPERATE3 =166, + DOOR_OPERATE4 =167, + BORNTOBEWILDSND =168, + SHOTGUN_COCK =169, + GENERIC_AMBIENCE1 =170, + GENERIC_AMBIENCE2 =171, + GENERIC_AMBIENCE3 =172, + GENERIC_AMBIENCE4 =173, + GENERIC_AMBIENCE5 =174, + GENERIC_AMBIENCE6 =175, + BOS3_ATTACK2 =176, + GENERIC_AMBIENCE17 =177, + GENERIC_AMBIENCE18 =178, + GENERIC_AMBIENCE19 =179, + GENERIC_AMBIENCE20 =180, + GENERIC_AMBIENCE21 =181, + GENERIC_AMBIENCE22 =182, + SECRETLEVELSND =183, + GENERIC_AMBIENCE8 =184, + GENERIC_AMBIENCE9 =185, + GENERIC_AMBIENCE10 =186, + GENERIC_AMBIENCE11 =187, + GENERIC_AMBIENCE12 =188, + GENERIC_AMBIENCE13 =189, + GENERIC_AMBIENCE14 =190, + GENERIC_AMBIENCE15 =192, + GENERIC_AMBIENCE16 =193, + FIRE_CRACKLE =194, + BONUS_SPEECH1 =195, + BONUS_SPEECH2 =196, + BONUS_SPEECH3 =197, + PIG_CAPTURE_DUKE =198, + BONUS_SPEECH4 =199, + DUKE_LAND_HURT =200, + DUKE_HIT_STRIPPER1 =201, + DUKE_TIP1 =202, + DUKE_KILLED2 =203, + PRED_ROAM2 =204, + PIG_ROAM2 =205, + DUKE_GETWEAPON1 =206, + DUKE_SEARCH2 =207, + DUKE_CRACK2 =208, + DUKE_SEARCH =209, + DUKE_GET =210, + DUKE_LONGTERM_PAIN =211, + MONITOR_ACTIVE =212, + NITEVISION_ONOFF =213, + DUKE_HIT_STRIPPER2 =214, + DUKE_CRACK_FIRST =215, + DUKE_USEMEDKIT =216, + DUKE_TAKEPILLS =217, + DUKE_PISSRELIEF =218, + SELECT_WEAPON =219, + WATER_GURGLE =220, + DUKE_GETWEAPON4 =221, + JIBBED_ACTOR1 =222, + JIBBED_ACTOR2 =223, + JIBBED_ACTOR3 =224, + JIBBED_ACTOR4 =225, + JIBBED_ACTOR5 =226, + JIBBED_ACTOR6 =227, + JIBBED_ACTOR7 =228, + DUKE_GOTHEALTHATLOW =229, + BOSSTALKTODUKE =230, + WAR_AMBIENCE1 =231, + WAR_AMBIENCE2 =232, + WAR_AMBIENCE3 =233, + WAR_AMBIENCE4 =234, + WAR_AMBIENCE5 =235, + WAR_AMBIENCE6 =236, + WAR_AMBIENCE7 =237, + WAR_AMBIENCE8 =238, + WAR_AMBIENCE9 =239, + WAR_AMBIENCE10 =240, + ALIEN_TALK1 =241, + ALIEN_TALK2 =242, + EXITMENUSOUND =243, + FLY_BY =244, + DUKE_SCREAM =245, + SHRINKER_HIT =246, + RATTY =247, + INTO_MENU =248, + BONUSMUSIC =249, + DUKE_BOOBY =250, + DUKE_TALKTOBOSSFALL =251, + DUKE_LOOKINTOMIRROR =252, + PIG_ROAM3 =253, + KILLME =254, + DRON_JETSND =255, + SPACE_DOOR1 =256, + SPACE_DOOR2 =257, + SPACE_DOOR3 =258, + SPACE_DOOR4 =259, + SPACE_DOOR5 =260, + ALIEN_ELEVATOR1 =261, + VAULT_DOOR =262, + JIBBED_ACTOR13 =263, + DUKE_GETWEAPON6 =264, + JIBBED_ACTOR8 =265, + JIBBED_ACTOR9 =266, + JIBBED_ACTOR10 =267, + JIBBED_ACTOR11 =268, + JIBBED_ACTOR12 =269, + DUKE_KILLED4 =270, + DUKE_KILLED5 =271, + ALIEN_SWITCH1 =272, + DUKE_STEPONFECES =273, + DUKE_LONGTERM_PAIN2 =274, + DUKE_LONGTERM_PAIN3 =275, + DUKE_LONGTERM_PAIN4 =276, + COMPANB2 =277, + KTIT =278, + HELICOP_IDLE =279, + STEPNIT =280, + SPACE_AMBIENCE1 =281, + SPACE_AMBIENCE2 =282, + SLIM_HATCH =283, + RIPHEADNECK =284, + FOUNDJONES =285, + ALIEN_DOOR1 =286, + ALIEN_DOOR2 =287, + ENDSEQVOL3SND4 =288, + ENDSEQVOL3SND5 =289, + ENDSEQVOL3SND6 =290, + ENDSEQVOL3SND7 =291, + ENDSEQVOL3SND8 =292, + ENDSEQVOL3SND9 =293, + WHIPYOURASS =294, + ENDSEQVOL2SND1 =295, + ENDSEQVOL2SND2 =296, + ENDSEQVOL2SND3 =297, + ENDSEQVOL2SND4 =298, + ENDSEQVOL2SND5 =299, + ENDSEQVOL2SND6 =300, + ENDSEQVOL2SND7 =301, + GENERIC_AMBIENCE23 =302, + SOMETHINGFROZE =303, + DUKE_LONGTERM_PAIN5 =304, + DUKE_LONGTERM_PAIN6 =305, + DUKE_LONGTERM_PAIN7 =306, + DUKE_LONGTERM_PAIN8 =307, + WIND_REPEAT =308, + MYENEMY_ROAM =309, + MYENEMY_HURT =310, + MYENEMY_DEAD =311, + MYENEMY_SHOOT =312, + STORE_MUSIC =313, + STORE_MUSIC_BROKE =314, + ACTOR_GROWING =315, + NEWBEAST_ROAM =316, + NEWBEAST_RECOG =317, + NEWBEAST_ATTACK =318, + NEWBEAST_PAIN =319, + NEWBEAST_DYING =320, + NEWBEAST_SPIT =321, + VOL4_1 =322, + SUPERMARKET =323, + MOUSEANNOY =324, + BOOKEM =325, + SUPERMARKETCRY =326, + DESTRUCT =327, + EATFOOD =328, + MAKEMYDAY =329, + WITNESSSTAND =330, + VACATIONSPEECH =331, + YIPPEE1 =332, + YOHOO1 =333, + YOHOO2 =334, + DOLPHINSND =335, + TOUGHGALSND1 =336, + TOUGHGALSND2 =337, + TOUGHGALSND3 =338, + TOUGHGALSND4 =339, + TANK_ROAM =340, + BOS4_ROAM =341, + BOS4_RECOG =342, + BOS4_ATTACK =343, + BOS4_PAIN =344, + BOS4_DYING =345, + NEWBEAST_ATTACKMISS =346, + VOL4_2 =347, + COOKINGDEEPFRIER =348, + WHINING_DOG =349, + DEAD_DOG =350, + LIGHTNING_SLAP =351, + THUNDER =352, + HAPPYMOUSESND1 =353, + HAPPYMOUSESND2 =354, + HAPPYMOUSESND3 =355, + HAPPYMOUSESND4 =356, + ALARM =357, + RAIN =358, + DTAG_GREENRUN =359, + DTAG_BROWNRUN =360, + DTAG_GREENSCORE =361, + DTAG_BROWNSCORE =362, + INTRO4_1 =363, + INTRO4_2 =364, + INTRO4_3 =365, + INTRO4_4 =366, + INTRO4_5 =367, + INTRO4_6 =368, + SCREECH =369, + BOSS4_DEADSPEECH =370, + BOSS4_FIRSTSEE =371, + PARTY_SPEECH =372, + POSTAL_SPEECH =373, + TGSPEECH =374, + DOGROOMSPEECH =375, + SMACKED =376, + MDEVSPEECH =377, + AREA51SPEECH =378, + JEEPSOUND =379, + BIGDOORSLAM =380, + BOS4_LAY =381, + WAVESOUND =382, + ILLBEBACK =383, + VOL4ENDSND1 =384, + VOL4ENDSND2 =385, + EXPANDERHIT =386, + SNAKESPEECH =387, + EXPANDERSHOOT =388, + GETBACKTOWORK =389, + JIBBED_ACTOR14 =390, + JIBBED_ACTOR15 =391, + INTRO4_B =392, + BIGBANG =393, + SMACKIT =394, + BELLSND =395, + GOAWAY =396, + JOKE =397, + FLAMETHROWER_INTRO =398, + FLAMETHROWER_LOOP =399, + FLAMETHROWER_END =400, + E5L7_DUKE_QUIT_YOU =401, + } +} \ No newline at end of file diff --git a/wadsrc/static/zscript/games/duke/ui/screens.zs b/wadsrc/static/zscript/games/duke/ui/screens.zs index 324e0a03e..429ffb8e3 100644 --- a/wadsrc/static/zscript/games/duke/ui/screens.zs +++ b/wadsrc/static/zscript/games/duke/ui/screens.zs @@ -33,3 +33,104 @@ class DRealmsScreen : SkippableScreenJob } } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +class TitleScreen : SkippableScreenJob +{ + int soundanm; + + void Init() + { + Super.Init(fadein | fadeout); + soundanm = 0; + } + + override void Start() + { + if (Build.isNam() || userConfig.nologo) Duke.PlaySpecialMusic(Duke.MUS_INTRO); + } + + override void OnTick() + { + int clock = ticks * 120 / GameTicRate; + if (soundanm == 0 && clock >= 120 && clock < 120 + 60) + { + soundanm = 1; + Duke.PlaySound(DukeSnd.PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI); + } + if (soundanm == 1 && clock > 220 && clock < (220 + 30)) + { + soundanm = 2; + Duke.PlaySound(DukeSnd.PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI); + } + if (soundanm == 2 && clock >= 280 && clock < 395) + { + soundanm = 3; + if (Build.isPlutoPak()) Duke.PlaySound(DukeSnd.FLY_BY, CHAN_AUTO, CHANF_UI); + } + else if (soundanm == 3 && clock >= 395) + { + soundanm = 4; + if (Build.isPlutoPak()) Duke.PlaySound(DukeSnd.PIPEBOMB_EXPLODE, CHAN_AUTO, CHANF_UI); + } + + if (clock > (860 + 120)) + { + jobstate = finished; + } + } + + override void Draw(double smoothratio) + { + int clock = (ticks + smoothratio) * 120 / GameTicRate; + + screen.ClearScreen(); + + // Only translate if the image depends on the global palette. + let tex = TexMan.CheckForTexture("BETASCREEN"); + int trans = TexMan.UseGamePalette(tex)? Translation.MakeID(Translation_BasePalette, Duke.TITLEPAL) : 0; + screen.DrawTexture(tex, true, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43, DTA_TranslationIndex, trans, DTA_LegacyRenderStyle, STYLE_Normal); + + double scale = clamp(clock - 120, 0, 60) / 64.; + if (scale > 0.) + { + let tex = TexMan.CheckForTexture("DUKENUKEM"); + trans = TexMan.UseGamePalette(tex)? Translation.MakeID(Translation_BasePalette, Duke.TITLEPAL) : 0; // re-check for different texture! + + screen.DrawTexture(tex, true, 160, 104, DTA_FullscreenScale, FSMode_Fit320x200, + DTA_CenterOffsetRel, true, DTA_TranslationIndex, trans, DTA_ScaleX, scale, DTA_ScaleY, scale); + } + + scale = clamp(clock - 220, 0, 30) / 32.; + if (scale > 0.) + { + let tex = TexMan.CheckForTexture("THREEDEE"); + trans = TexMan.UseGamePalette(tex)? Translation.MakeID(Translation_BasePalette, Duke.TITLEPAL) : 0; // re-check for different texture! + + screen.DrawTexture(tex, true, 160, 129, DTA_FullscreenScale, FSMode_Fit320x200, + DTA_CenterOffsetRel, true, DTA_TranslationIndex, trans, DTA_ScaleX, scale, DTA_ScaleY, scale); + } + + if (Build.isPlutoPak()) + { + scale = (410 - clamp(clock, 280, 395)) / 16.; + if (scale > 0. && clock > 280) + { + let tex = TexMan.CheckForTexture("TITLEPLUTOPAKSPRITE"); + trans = TexMan.UseGamePalette(tex)? Translation.MakeID(Translation_BasePalette, Duke.TITLEPAL) : 0; // re-check for different texture! + + screen.DrawTexture(tex, true, 160, 151, DTA_FullscreenScale, FSMode_Fit320x200, + DTA_CenterOffsetRel, true, DTA_TranslationIndex, trans, DTA_ScaleX, scale, DTA_ScaleY, scale); + } + } + } + + override void OnDestroy() + { + Duke.PlaySound(DukeSnd.NITEVISION_ONOFF, CHAN_AUTO, CHANF_UI); + } +} diff --git a/wadsrc/static/zscript/razebase.zs b/wadsrc/static/zscript/razebase.zs index 3dc64c532..4c6273945 100644 --- a/wadsrc/static/zscript/razebase.zs +++ b/wadsrc/static/zscript/razebase.zs @@ -27,6 +27,17 @@ enum EGameType }; +struct UserConfigStruct native +{ + native bool nomonsters; + native bool nosound; + native bool nologo; +} + +extend struct _ +{ + native @UserConfigStruct userConfig; +} struct Build { @@ -36,6 +47,53 @@ struct Build } native static Color shadeToLight(int shade); + + // game check shortcuts + static bool isNam() + { + return gameinfo.gametype & (GAMEFLAG_NAM | GAMEFLAG_NAPALM); + } + + static bool isNamWW2GI() + { + return gameinfo.gametype & (GAMEFLAG_NAM | GAMEFLAG_NAPALM |GAMEFLAG_WW2GI); + } + + static bool isWW2GI() + { + return gameinfo.gametype & (GAMEFLAG_WW2GI); + } + + static bool isRR() + { + return gameinfo.gametype & (GAMEFLAG_RRALL); + } + + static bool isRRRA() + { + return gameinfo.gametype & (GAMEFLAG_RRRA); + } + + static bool isWorldTour() + { + return gameinfo.gametype & GAMEFLAG_WORLDTOUR; + } + + static bool isPlutoPak() + { + return gameinfo.gametype & GAMEFLAG_PLUTOPAK; + } + + static bool isShareware() + { + return gameinfo.gametype & GAMEFLAG_SHAREWARE; + } + + static bool isBlood() + { + return gameinfo.gametype & GAMEFLAG_BLOOD; + } + } /*