- RR summary screen

This commit is contained in:
Christoph Oelckers 2021-04-23 16:03:25 +02:00
parent d5a8147f1b
commit d853b63a1a
5 changed files with 789 additions and 23 deletions

View file

@ -1241,6 +1241,7 @@ y(RRTILE8640, 8640)
y(RRTILE8651, 8651)
y(RRTILE8660, 8660)
x(ENDGAME, 8677)
x(ENDGAME2, 8678)
y(RRTILE8679, 8679)
y(RRTILE8680, 8680)
y(RRTILE8681, 8681)

View file

@ -887,7 +887,7 @@ 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)
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, PlaySound, PlaySound)
{
PARAM_PROLOGUE;
PARAM_INT(snd);
@ -896,6 +896,19 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, PLaySound, PlaySound)
PARAM_FLOAT(vol);
ACTION_RETURN_INT(PlaySound(snd, chan, flags, vol));
}
static void StopSound(int num)
{
S_StopSound(num);
}
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, StopSound, StopSound)
{
PARAM_PROLOGUE;
PARAM_INT(snd);
StopSound(snd);
return 0;
}
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, CheckSoundPlaying, S_CheckSoundPlaying)
{

View file

@ -23,6 +23,7 @@ struct Duke native
native static void PlaySpecialMusic(int which);
native static int PlaySound(int num, int channel = CHAN_AUTO, int flags = 0, float vol =0.8f);
native static void StopSound(int num);
native static bool CheckSoundPlaying(int num);
static void PlayBonusMusic()
@ -488,4 +489,511 @@ struct DukeSnd native
FLAMETHROWER_END =400,
E5L7_DUKE_QUIT_YOU =401,
}
}
struct RRSnd native
{
enum ESnd
{
KICK_HIT = 0 ,
RICOCHET = 1 ,
BULITHIT = 2 ,
CASUL_FIRE = 3 ,
PISCOCK = 4 ,
PISLOAD = 5 ,
AK3 = 6 ,
XBOWFIRE = 7 ,
BUB_HRT1 = 8 ,
XBOWEXPL = 9 ,
LASERA = 10 ,
SHRINKER = 11 ,
CRAPFLOW = 12 ,
DYNOCLMP = 13 ,
DYNEW = 14 ,
CRAPSTIR = 15 ,
BRICDOOR = 16 ,
BOMBEXPL = 17 ,
VENTBUST = 18 ,
GLASSSND = 19 ,
GLASSHVY = 20 ,
BUBBLES = 21 ,
SPLASH = 22 ,
BUB_HRT2 = 23 ,
BUB_HRT3 = 24 ,
GASP = 25 ,
BUB_HRT4 = 26 ,
MIRROR1 = 27 ,
MIRROR2 = 28 ,
MIRROR3 = 29 ,
COMPUTER = 30 ,
NEON = 31 ,
VX_FINAL = 32 ,
LN_WAIT = 33 ,
BUB_LN1 = 34 ,
LN_FINAL = 35 ,
CLOCKTK = 36 ,
LN_STANK = 37 ,
LNRD_GRUNT = 38 ,
CLOCKCHM = 39 ,
WETFEET = 40 ,
LNRD_DEAD = 41 ,
LAND = 42 ,
END_PIPE = 43 ,
ICARUMBA = 44 ,
BUB_LN2 = 45 ,
LN_CRAP = 46 ,
WOODBREK = 47 ,
SCUBA = 48 ,
TRUCK_LP2 = 49 ,
COW1 = 50 ,
COW2 = 51 ,
COW3 = 52 ,
COW4 = 53 ,
COW5 = 54 ,
BUB_LN3 = 55 ,
LATCH = 56 ,
BUB_LN5 = 57 ,
BUB_LN6 = 58 ,
BUB_LN7 = 59 ,
BUB_PIK1 = 60 ,
BUB_PIK2 = 61 ,
BUB_PISS = 62 ,
E1L1 = 63 ,
E1L2 = 64 ,
UFOINSID = 65 ,
LN_RODE = 66 ,
CURTAIN = 67 ,
FIRE09 = 68 ,
SQUISHED = 69 ,
TELEPORT = 70 ,
GBELEV01 = 71 ,
LN_BNCH = 72 ,
GBELEV02 = 73 ,
FROG1 = 74 ,
TRUCK_LP = 75 ,
SWITCH1 = 76 ,
E1L3 = 77 ,
LN_HOTDM = 78 ,
FLUSH = 79 ,
E1L4 = 80 ,
QUAKE = 81 ,
CHKAMMO = 82 ,
MONITORA = 83 ,
FROG2 = 84 ,
AS_AMB2 = 85 ,
AS_AMB1 = 86 ,
FBOATIDL = 87 ,
FBOATRUN = 88 ,
FBOATUP = 89 ,
FBOATDN = 90 ,
FBOATTRN = 91 ,
DRIP3 = 92 ,
SWAMPAMB = 93 ,
MORTAR = 94 ,
JUKEBOX = 95 ,
AS_DROPN = 96 ,
AS_CRYPT = 97 ,
AS_DRCLS = 98 ,
LOKGATE = 99 ,
METLGAT2 = 100,
METLGAT1 = 101,
E1L5 = 102,
E1L6 = 103,
E1L7 = 104,
E2L1 = 105,
PADDLE = 106,
LN_HOLD = 107,
VX_TAKIT = 108,
SHOT6 = 109,
CT_LAF2 = 110,
CT_GET = 111,
CT_LAF = 112,
CT_PAIN = 113,
CT_DIE = 114,
PIGSOUND1 = 115,
PIGSOUND2 = 116,
PIGSOUND3 = 117,
PIGSOUND4 = 118,
PIGSOUND5 = 119,
BR_ROAM1 = 120,
BR_RECOG = 121,
WHISTLE = 122,
BR_PAIN = 123,
BR_DTH = 124,
VX_ISTHT = 125,
LASERH = 126,
PIGSOUND6 = 127,
PIGSOUND7 = 128,
VX_DIE1 = 129,
MJ_JIB1 = 130,
VX_DIE4 = 131,
VX_DIE5 = 132,
VX_DIE6 = 133,
VX_DIE7 = 134,
VX_OOH = 135,
VX_PAIN1 = 136,
VX_SEX1 = 137,
VX_SEX2 = 138,
VX_SEX3 = 139,
VX_GRNT = 140,
RENO = 141,
BK_MAKE1 = 142,
BK_MAKE2 = 143,
VX_BRNG3 = 144,
VX_CLSR1 = 145,
VX_CLSR2 = 146,
VX_2FAR = 147,
KINGHUH = 148,
VX_BRING = 149,
VX_BITE = 150,
MJ_FART = 151,
VX_LAFF2 = 152,
VX_LAFF3 = 153,
VX_HMMM2 = 154,
VX_HURT2 = 155,
VX_BABY2 = 156,
VX_MHMM = 157,
THUD = 158,
VX_ITSOK = 159,
MJ_RECO2 = 160,
// VX_TPOT1 = 161,
VX_TPOT4 = 162,
// VX_TPIN1 = 163,
ROPECRK = 164,
DR_CRK8 = 165,
DR_ROLL = 166,
STEELAMB = 167,
ROULETTE = 168,
GUNCHANG = 169,
FLIES = 170,
AMB_1 = 171,
GRAVAMB = 172,
HOOTOWL = 173,
WOODS2 = 174,
CATAMB = 175,
E2L2 = 176,
E2L3 = 177,
FBOATX_1 = 178,
FBOATX_2 = 179,
FBOATX_3 = 180,
FBOATX_4 = 181,
FBOATSLW = 182,
PLANE = 183,
CNTAMB = 184,
JUNKAMB2 = 185,
BIKESTRT = 186,
BIKEIDLE = 187,
BIKELOOP = 188,
BIKEJMPS = 189,
BIKEJMPL = 190,
BIKELAND = 191,
JACKJMP1 = 192,
JACKJMP2 = 193,
FIRE_CRACKLE = 194,
BNS_SPCH1 = 195,
BNS_SPCH2 = 196,
BNS_SPCH3 = 197,
E2L4 = 198,
BNS_SPCH4 = 199,
LN_LNDHT = 200,
JACKATK2 = 201,
JACKPAIN = 202,
LN_BITCH = 203,
CT_LAND = 204,
BR_ROAM2 = 205,
LN_HUSH = 206,
LN_PAIN4 = 207,
LN_SLOW = 208,
LN_PAIN4A = 209,
JUG = 210,
LN_PAIN8 = 211,
MONITOR = 212,
JACKATK1 = 213,
BIKEUP = 214,
PLANEXP = 215,
JUGALUG7 = 216,
DIDDLP = 217,
ELVISMOD = 218,
// PISCOCK = 219,
BIKESKID = 220,
LN_STINK = 221,
JIBBED1 = 222,
JIBBED2 = 223,
JIBBED3 = 224,
JIBBED4 = 225,
JIBBED5 = 226,
JIBBED6 = 227,
JIBBED7 = 228,
LN_BACON = 229,
E2L5 = 230,
REGISTER = 231,
BBQGRILL = 232,
CRSSBELL = 233,
TRAIN = 234,
SLOTS = 235,
INDIANS = 236,
RADIO = 237,
BIKEX_1 = 238,
BIKEX_2 = 239,
BIKEX_3 = 240,
TVSNOW = 241,
WINDLITE = 242,
EXITMENU = 243,
CHKBOWFR = 244,
DSCREM04 = 245,
SHRNK_HIT = 246,
CHKBOWEX = 247,
INTOMENU = 248,
LAVAFLOW = 249,
LAVA_RK = 250,
BIKELOO2 = 251,
SLINGBL = 252,
BR_ROAM3 = 253,
KILLME = 254,
E2L6 = 255,
RINTRO = 256,
MIRROR4 = 257,
MIRROR5 = 258,
GAMBELEV = 259,
SLINGHIT = 260,
PIANO_P1 = 261,
BANJO1 = 262,
JIBBED13 = 263,
LN_BBQ = 264,
JIBBED8 = 265,
JIBBED9 = 266,
JIBBED10 = 267,
JIBBED11 = 268,
JIBBED12 = 269,
LNRD_KILLED4 = 270,
LNRD_KILLED5 = 271,
BANJO2 = 272,
BANJO3 = 273,
LN_PAIN2 = 274,
LN_PAIN3 = 275,
BK_ALIVE = 276,
BK_BOURB = 277,
BK_CHEER = 278,
BK_DIENB = 279,
BK_DNTLK = 280,
BK_FUN = 281,
BK_HEY = 282,
E2L7 = 283,
BK_HEYNB = 284,
BK_JOYRD = 285,
BK_KEEPA = 286,
BK_PLEAS = 287,
BK_RIDE = 288,
BK_ROAD = 289,
BK_SCRAT = 290,
BK_SHTUP = 291,
BK_SNORT = 292,
BK_TOHEL = 293,
WHIPYOU = 294,
BK_TRYIN = 295,
BK_PAIN1 = 296,
BK_PAIN2 = 297,
BK_PAIN3 = 298,
CH_BALD = 299,
CH_TEAS1 = 300,
CH_TEAS2 = 301,
CH_TEAS3 = 302,
CH_SANDP = 303,
LN_PAIN5 = 304,
LN_PAIN6 = 305,
LN_PAIN7 = 306,
CH_DONIT = 307,
CH_WHOOP = 308,
CH_NIPPL = 309,
CH_BARN = 310,
CH_GTEAM = 311,
CH_GOGOG = 312,
CH_REDOK = 313,
CH_2468 = 314,
CH_BIGON = 315,
HULK_ROAM = 316,
HULK_RECOG = 317,
HULK_ATTACK = 318,
HULK_PAIN = 319,
HULK_DYING = 320,
HULK_SPIT = 321,
CH_PAIN1 = 322,
CH_PAIN2 = 323,
CH_PAIN3 = 324,
CH_HURT = 325,
AK4 = 326,
CHKSCR1 = 327,
SHIPWREK = 328,
HYDROGLY = 329,
PIANO_P2 = 330,
FROGTOSS = 331,
TRAIN2 = 332,
CRICKET1 = 333,
CRICKET2 = 334,
PIGRUNT = 335,
GOCATGO = 336,
ANNOUNC1 = 337,
ANNOUNC2 = 338,
TRACTOR = 339,
PIANO_P3 = 340,
RESIZE = 341,
VX_TPIN2 = 342,
VX_TPIN4 = 343,
VX_HLPME = 344,
ATFSPEAK = 345,
WINDCAVE = 346,
ALARM = 347,
SF_THLAW = 348,
SF_TLAW2 = 349,
LN_SCREW = 350,
THUNDER1 = 351,
THUNDER2 = 352,
THUNDER3 = 353,
BOWLSTRT = 354,
BOWLPIN = 355,
BOWLLOOP = 356,
MJ_JIB2 = 357,
VX_KICK2 = 358,
VX_KICK3 = 359,
MJ_RECO1 = 360,
VX_HIYA = 361,
VX_HIYA2 = 362,
SF_ATTN = 363,
SF_DETH1 = 364,
SF_DETH2 = 365,
SF_DETH3 = 366,
TEDOUT = 367,
SF_FREZ2 = 368,
SF_GETYA = 369,
SF_HANDS = 370,
STEELAM2 = 371,
STEELAM3 = 372,
SF_HEY = 373,
SF_HOLD = 374,
SF_LAFF1 = 375,
LN_FLYOP = 376,
LN_SHTHD = 377,
SF_NAME = 378,
SF_OVER = 379,
SF_PAIN1 = 380,
SF_PAIN2 = 381,
SF_PAIN3 = 382,
SF_RLOAD = 383,
SF_RLOD2 = 384,
SF_SHOOT = 385,
JAWHARP = 386,
LN_TIGHT = 387,
DR_CLS = 388,
SCRAPE_1 = 389,
YEHAA16 = 390,
LN_WHUP = 391,
CHKNFLAP = 392,
CHKN_1 = 393,
CHKN_2 = 394,
CHIKDETH = 395,
AMB_ROOM = 396,
BR_ITCH = 397,
BR_SCRTH = 398,
BR_SNIFF = 399,
TRUKDIE = 400,
ZIPOPEN = 401,
ZIPPSTRK = 402,
MOSQUI4 = 403,
FART1 = 404,
SWITCH2 = 405,
SQUEAKY = 406,
CATDOOR = 407,
JUNKSWCH = 408,
CONVEYR = 409,
SWITCH3 = 410,
BIKEENEM = 411,
BIGDOOR = 412,
FLOODGAT = 413,
JACK_RM1 = 414,
MN_FREAK = 415,
MN_PN = 416,
MN_REC = 417,
MN_AMB = 418,
LOKDOOR = 419,
VOMIT = 420,
TOSS = 421,
FART2 = 422,
FART3 = 423,
FART4 = 424,
CHUG = 425,
CROWUSH = 426,
WUSSLAF = 427,
LN_CITY = 428,
MUNCH2 = 429,
TESLARC = 430,
BUZSAWSND = 431,
ELEVLOOP = 432,
PISSEND = 433,
PISSLOOP = 434,
PISSSTRT = 435,
CRAP = 436,
PEE = 437,
JACK_RM2 = 438,
BELL = 439,
TRAINWRK = 440,
DOOR_PKT = 441,
GAMBDOOR = 442,
OVEN = 443,
CREMATOR = 444,
JOE9000A = 445,
JOE9000B = 446,
JOE9000C = 447,
CHINESE = 448,
SIGNROT = 449,
XBOWCOCK = 450,
PWDERKEG = 451,
DG_BARK1 = 452,
DG_GRWL1 = 453,
DG_YELP = 454,
DG_DIE = 455,
UFO = 456,
UFOLET = 457,
JACKJIB1 = 458,
JACKJIB2 = 459,
JACKJIB3 = 460,
JACKJIB4 = 461,
JACKJIB5 = 462,
WTRFALL = 463,
BK_JIB1 = 464,
FRIDGEOP = 465,
FRIDGECL = 466,
DG_LUNGE = 467,
DRIVTHRU = 468,
FAN = 469,
CRUSHER = 470,
BALLOON = 471,
POOLBUD = 472,
STAMPER = 473,
BK_JIB2 = 474,
MORNING = 475,
DG_BARK2 = 476,
DG_GRWL2 = 477,
REDNECK2 = 478,
XATRIX = 479,
MJ_ATTK1 = 480,
MJ_JUMP = 485,
MJ_PAIN1 = 481,
MJ_PAIN2 = 482,
MJ_ROAM1 = 483,
MJ_ROAM2 = 484,
MJ_ROLL = 486,
DISHES = 487,
BUB_ELV1 = 488,
BUB_ELV2 = 489,
BUB_ELV3 = 490,
BK_JIB3 = 491,
CH_JIB1 = 492,
CH_JIB2 = 493,
CH_JIB3 = 494,
SIGNHIT = 495,
UMHUM = 496,
COYOTE = 497,
BUB_HEY1 = 498,
BUB_HEY2 = 499,
}
}

View file

@ -413,7 +413,7 @@ class Episode5End : ImageScreen
//---------------------------------------------------------------------------
//
//
// This handles both Duke and RR.
//
//---------------------------------------------------------------------------
@ -421,10 +421,10 @@ class DukeMultiplayerBonusScreen : SkippableScreenJob
{
int playerswhenstarted;
void Init(int pos)
void Init(int pws)
{
Super.Init(fadein|fadeout);
playerswhenstarted = pos;
playerswhenstarted = pws;
}
override void Start()
@ -434,26 +434,29 @@ class DukeMultiplayerBonusScreen : SkippableScreenJob
override void Draw(double smoothratio)
{
bool isRR = Raze.isRR();
double titlescale = isRR? 0.36 : 1;
String tempbuf;
int currentclock = int((ticks + smoothratio) * 120 / GameTicRate);
Screen.ClearScreen();
Screen.DrawTexture(TexMan.CheckForTexture("MENUSCREEN"), false, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43, DTA_Color, 0xff808080, DTA_LegacyRenderStyle, STYLE_Normal);
Screen.DrawTexture(TexMan.CheckForTexture("INGAMEDUKETHREEDEE"), true, 160, 34, DTA_FullscreenScale, FSMode_Fit320x200, DTA_CenterOffsetRel, true);
Screen.DrawTexture(TexMan.CheckForTexture("INGAMEDUKETHREEDEE"), true, 160, 34, DTA_FullscreenScale, FSMode_Fit320x200, DTA_CenterOffsetRel, true, DTA_ScaleX, titlescale, DTA_ScaleY, titlescale);
if (Raze.isPlutoPak()) Screen.DrawTexture(TexMan.CheckForTexture("MENUPLUTOPAKSPRITE"), true, 260, 36, DTA_FullscreenScale, FSMode_Fit320x200, DTA_CenterOffsetRel, true);
Duke.GameText(160, 58 + 2, "$Multiplayer Totals", 0, 0);
Duke.GameText(160, isRR? 58 : 58 + 2, "$Multiplayer Totals", 0, 0);
Duke.GameText(160, 58 + 10, currentLevel.DisplayName(), 0, 0);
Duke.GameText(160, 165, "$Presskey", 8 - int(sin(currentclock / 10.) * 8), 0);
int t = 0;
Duke.MiniText(38, 80, "$Name", 0, -1, 8);
Duke.MiniText(269+20, 80, "$Kills", 0, 1, 8);
Duke.MiniText(38, 80, "$Name", 0, -1, isRR? 0 : 8);
Duke.MiniText(269+20, 80, "$Kills", 0, 1, isRR? 0: 8);
for (int i = 0; i < playerswhenstarted; i++)
{
tempbuf = String.Format("%-4d", i + 1);
Duke.MiniText(92 + (i * 23), 80, tempbuf, 0, -1, 3);
Duke.MiniText(92 + (i * 23), 80, tempbuf, 0, -1, isRR? 0: 3);
}
for (int i = 0; i < playerswhenstarted; i++)
@ -471,7 +474,7 @@ class DukeMultiplayerBonusScreen : SkippableScreenJob
{
int fraggedself = Raze.playerFraggedSelf(y);
tempbuf = String.Format("%-4d", fraggedself);
Duke.MiniText(92 + (y * 23), 90 + t, tempbuf, 0, -1, 2);
Duke.MiniText(92 + (y * 23), 90 + t, tempbuf, 0, -1, isRR? 0: 2);
xfragtotal -= fraggedself;
}
else
@ -490,7 +493,7 @@ class DukeMultiplayerBonusScreen : SkippableScreenJob
}
tempbuf = String.Format("%-4d", xfragtotal);
Duke.MiniText(101 + (8 * 23), 90 + t, tempbuf, 0, -1, 2);
Duke.MiniText(101 + (8 * 23), 90 + t, tempbuf, 0, -1, isRR? 0: 2);
t += 7;
}
@ -506,10 +509,10 @@ class DukeMultiplayerBonusScreen : SkippableScreenJob
yfragtotal += frag;
}
tempbuf = String.Format("%-4d", yfragtotal);
Duke.MiniText(92 + (y * 23), 96 + (8 * 7), tempbuf, 0, -1, 2);
Duke.MiniText(92 + (y * 23), 96 + (8 * 7), tempbuf, 0, -1, isRR? 0: 2);
}
Duke.MiniText(45, 96 + (8 * 7), "$Deaths", 0, -1, 8);
Duke.MiniText(45, 96 + (8 * 7), "$Deaths", 0, -1, isRR? 0: 8);
}
}
@ -522,7 +525,6 @@ class DukeMultiplayerBonusScreen : SkippableScreenJob
class DukeLevelSummaryScreen : SummaryScreenBase
{
String lastmapname;
int gfx_offset;
int speech;
int displaystate;
int dukeAnimStart;
@ -547,7 +549,7 @@ class DukeLevelSummaryScreen : SummaryScreenBase
void Init()
{
Super.Init(fadein | fadeout);
int vol = currentLevel.volumeNum();
int vol = level.volumeNum();
String basetex = vol == 1? "BONUSSCREEN2" : "BONUSSCREEN";
texBg = TexMan.CheckForTexture(basetex);
for(int i = 0; i < 4; i++)
@ -555,17 +557,12 @@ class DukeLevelSummaryScreen : SummaryScreenBase
String otex = String.Format("%s_O%d", basetex, i+1);
texOv[i] = TexMan.CheckForTexture(otex);
}
lastmapname = currentLevel.DisplayName();
lastmapname = level.DisplayName();
speech = -1;
displaystate = 0;
}
String FormatTime(int time)
{
return String.Format("%02d:%02d", (time / (26 * 60)) % 60, (time / 26) % 60);
}
override bool OnEvent(InputEvent ev)
{
if (ev.type == InputEvent.Type_KeyDown && !Raze.specialKeyEvent(ev))
@ -759,6 +756,238 @@ class DukeLevelSummaryScreen : SummaryScreenBase
}
//---------------------------------------------------------------------------
//
// TBD: fold this into DukeLevelSummaryScreen?
//
//---------------------------------------------------------------------------
class RRLevelSummaryScreen : SummaryScreenBase
{
String lastmapname;
int speech;
int displaystate;
int exitSoundStart;
TextureID texBg;
enum EFlags
{
printTimeText = 1,
printTimeVal = 2,
printKillsText = 4,
printKillsVal = 8,
printSecretsText = 16,
printSecretsVal = 32,
printStatsAll = 63,
exitSound = 64,
exitWait = 128,
}
void Init(bool dofadeout = true)
{
Super.Init(dofadeout? (fadein | fadeout) : fadein);
String s;
if (level.flags & MapRecord.USERMAP)
s = "BONUSPIC01";
else if (!Raze.isRRRA())
s = String.Format("BONUSPIC%02d", 1 + clamp((level.levelNumber / 1000) * 7 + (level.levelNumber % 1000), 0, 13));
else
s = String.Format("LEVELMAP%02d", 1 + clamp((level.levelNumber / 1000) * 7 + (level.levelNumber % 1000), 0, 13));
lastmapname = level.DisplayName();
texBg = TexMan.CheckForTexture(s);
}
override bool OnEvent(InputEvent ev)
{
if (ev.type == InputEvent.Type_KeyDown && !Raze.specialKeyEvent(ev))
{
if ((displaystate & printStatsAll) != printStatsAll)
{
Duke.PlaySound(RRSnd.FART1, CHAN_AUTO, CHANF_UI);
displaystate = printStatsAll;
}
else if (!(displaystate & exitSound))
{
displaystate |= exitSound;
exitSoundStart = ticks;
Duke.PlaySound(RRSnd.CHUG, CHAN_AUTO, CHANF_UI);
static const int speeches[] = { RRSnd.BNS_SPCH1, RRSnd.BNS_SPCH2, RRSnd.BNS_SPCH3, RRSnd.BNS_SPCH4 };
speech = speeches[random(0, 3)];
Duke.PlaySound(speech, CHAN_AUTO, CHANF_UI);
}
return true;
}
return false;
}
override void Start()
{
Duke.PlayBonusMusic();
}
override void OnTick()
{
if ((displaystate & printStatsAll) != printStatsAll)
{
if (ticks == 15 * 3)
{
displaystate |= printTimeText;
}
else if (ticks == 15 * 4)
{
displaystate |= printTimeVal;
Duke.PlaySound(RRSnd.FART1, CHAN_AUTO, CHANF_UI);
}
else if (ticks == 15 * 6)
{
displaystate |= printKillsText;
}
else if (ticks == 15 * 7)
{
displaystate |= printKillsVal;
Duke.PlaySound(RRSnd.FART1, CHAN_AUTO, CHANF_UI);
}
else if (ticks == 15 * 9)
{
displaystate |= printSecretsText;
}
else if (ticks == 15 * 10)
{
displaystate |= printSecretsVal;
Duke.PlaySound(RRSnd.FART1, CHAN_AUTO, CHANF_UI);
}
}
if (displaystate & exitSound)
{
if (ticks >= exitSoundStart + 60)
{
displaystate ^= exitSound | exitWait;
}
}
if (displaystate & exitWait)
{
if (speech <= 0 || !Duke.CheckSoundPlaying(speech))
jobstate = finished;
}
}
void PrintTime()
{
String tempbuf;
Duke.BigText(30, 48, "$TXT_YerTime", -1);
Duke.BigText(30, 64, "$TXT_ParTime", -1);
Duke.BigText(30, 80, "$TXT_XTRTIME", -1);
if (displaystate & printTimeVal)
{
tempbuf = FormatTime(playtime);
Duke.BigText(191, 48, tempbuf, -1);
tempbuf = FormatTime(level.parTime);
Duke.BigText(191, 64, tempbuf, -1);
tempbuf = FormatTime(level.designerTime);
Duke.BigText(191, 80, tempbuf, -1);
}
}
void PrintKills()
{
String tempbuf;
Duke.BigText(30, 112, "$TXT_VarmintsKilled", -1);
Duke.BigText(30, 128, "$TXT_VarmintsLeft", -1);
if (displaystate & printKillsVal)
{
tempbuf.Format("%-3d", kills);
Duke.BigText(231, 112, tempbuf, -1);
if (maxkills < 0)
{
tempbuf = "$TXT_N_A";
}
else
{
tempbuf = String.Format("%-3d", max(0, maxkills - kills));
}
Duke.BigText(231, 128, tempbuf, -1);
}
}
void PrintSecrets()
{
String tempbuf;
Duke.BigText(30, 144, "$TXT_SECFND", -1);
Duke.BigText(30, 160, "$TXT_SECMISS", -1);
if (displaystate & printSecretsVal)
{
tempbuf = String.Format("%-3d", secrets);
Duke.BigText(231, 144, tempbuf, -1);
tempbuf = String.Format("%-3d", max(0, maxsecrets - secrets));
Duke.BigText(231, 160, tempbuf, -1);
}
}
override void Draw(double sr)
{
Screen.ClearScreen();
Screen.DrawTexture(texBg, true, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43, DTA_LegacyRenderStyle, STYLE_Normal);
if (lastmapname) Duke.BigText(80, 16, lastmapname, -1);
Duke.BigText(15, 192, "$PRESSKEY", -1);
if (displaystate & printTimeText)
{
PrintTime();
}
if (displaystate & printKillsText)
{
PrintKills();
}
if (displaystate & printSecretsText)
{
PrintSecrets();
}
}
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
class RRRAEndOfGame : SkippableScreenJob
{
void Init()
{
Super.Init(fadein|fadeout);
}
override void OnSkip()
{
Duke.StopSound(RRSnd.LN_FINAL);
}
override void Start()
{
Duke.PlaySound(RRSnd.LN_FINAL, CHAN_AUTO, CHANF_UI);
}
override void OnTick()
{
if (!Duke.CheckSoundPlaying(RRSnd.LN_FINAL) && ticks > 15 * GameTicRate) jobstate = finished; // make sure it stays, even if sound is off.
}
override void Draw(double sr)
{
let tex = TexMan.CheckForTexture(((ticks >> 2) & 1)? "ENDGAME2" : "ENDGAME");
Screen.DrawTexture(tex, true, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43);
}
}
//---------------------------------------------------------------------------
//
//
@ -780,8 +1009,17 @@ class DukeLoadScreen : ScreenJob
Screen.ClearScreen();
Screen.DrawTexture(TexMan.CheckForTexture("LOADSCREEN"), false, 0, 0, DTA_FullscreenEx, FSMode_ScaleToFit43, DTA_LegacyRenderStyle, STYLE_Normal);
Duke.BigText(160, 90, (rec.flags & MapRecord.USERMAP)? "$TXT_LOADUM" : "$TXT_LOADING");
Duke.BigText(160, 114, rec.DisplayName());
if (!Raze.IsRR())
{
Duke.BigText(160, 90, (rec.flags & MapRecord.USERMAP)? "$TXT_LOADUM" : "$TXT_LOADING");
Duke.BigText(160, 114, rec.DisplayName());
}
else
{
int y = Raze.isRRRA()? 140 : 90;
Duke.BigText(160, y, (rec.flags & MapRecord.USERMAP)? "$TXT_ENTRUM" : "$TXT_ENTERIN", 0);
Duke.BigText(160, y+24, rec.DisplayName(), 0);
}
}
}

View file

@ -112,4 +112,10 @@ class SummaryScreenBase : ScreenJob
playtime = time_;
cheatflag = cheated;
}
String FormatTime(int time)
{
return String.Format("%02d:%02d", (time / (26 * 60)) % 60, (time / 26) % 60);
}
}