Various backported changes from devel.
This commit is contained in:
parent
78551b0134
commit
ca544f5f36
14 changed files with 221 additions and 79 deletions
|
|
@ -1133,6 +1133,10 @@ BT_DEATHKINGS_FUN = "A Very Anticlimactic Boss Rehash";
|
|||
// eviternity
|
||||
BT_ARCHANGELUS = "Archangelus, Celestial Agent";
|
||||
BT_ARCHANGELUS_FUN = "Big Fucking Angel Dude";
|
||||
// boss oneliners
|
||||
BOSSLINE_IOS = "\crIcon of Sin\c-: !oremoR nhoJ ,em llik tsum uoy emag eht niw oT";
|
||||
BOSSLINE_DSPARIL = "\cgD'Sparil\c-: .hself ruoy erutrot lliw I";
|
||||
BOSSLINE_ARCHANGELUS = "\cfArchangelus\c-: Foolish mortal, only your death is eternal!";
|
||||
// targetter
|
||||
SWWM_OVERKILL = "Overkill";
|
||||
SWWM_MULTIKILL = "Multi Kill";
|
||||
|
|
|
|||
|
|
@ -1011,6 +1011,10 @@ BT_DEATHKINGS_FUN = "Un Refrito de Jefes muy Anticlimático";
|
|||
// eviternity
|
||||
BT_ARCHANGELUS = "Archangelus, Agente Celestial";
|
||||
BT_ARCHANGELUS_FUN = "Un Putísimo Ángel Enorme";
|
||||
// boss oneliners
|
||||
BOSSLINE_IOS = "\crIcono del Pecado\c-: !oremoR nhoJ ,ím a emratam sebed ogeuj le ranag araP¡";
|
||||
BOSSLINE_DSPARIL = "\cgD'Sparil\c-: .senrac sut érarutroT";
|
||||
BOSSLINE_ARCHANGELUS = "\cfArchangelus\c-: Mortal insensato, ¡solo tu muerte es eterna!";
|
||||
// targetter
|
||||
SWWM_OVERKILL = "Sobremuerte";
|
||||
SWWM_MULTIKILL = "Racha";
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.31 \cu(Thu 21 Oct 22:46:05 CEST 2021)\c-";
|
||||
SWWM_SHORTVER="\cw1.1.31 \cu(2021-10-21 22:46:05)\c-";
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.31 \cu(Thu 21 Oct 23:25:47 CEST 2021)\c-";
|
||||
SWWM_SHORTVER="\cw1.1.31 \cu(2021-10-21 23:25:47)\c-";
|
||||
|
|
|
|||
|
|
@ -96,8 +96,15 @@ extend Class SWWMHandler
|
|||
s.favweapon = -1;
|
||||
for ( Inventory i=p.mo.Inv; i; i=i.inv )
|
||||
{
|
||||
if ( i is 'Weapon' )
|
||||
s.GotWeapon(Weapon(i).GetClass());
|
||||
if ( !(i is 'Weapon') ) continue;
|
||||
// skip dual weapons if their sister weapon amount isn't 2
|
||||
String cn = i.GetClassName();
|
||||
if ( cn.Left(4) ~== "Dual" )
|
||||
{
|
||||
let ss = Weapon(i).SisterWeapon;
|
||||
if ( !ss || (ss.Amount == 1) ) continue;
|
||||
}
|
||||
s.GotWeapon(Weapon(i).GetClass());
|
||||
}
|
||||
}
|
||||
else if ( (s.lastcluster != level.cluster) || !(level.clusterflags&LevelLocals.CLUSTER_HUB) || (level.info.flags2&LEVEL2_RESETINVENTORY && !e.IsReturn) )
|
||||
|
|
|
|||
|
|
@ -568,6 +568,11 @@ extend Class SWWMHandler
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if ( e.Name.Left(17) ~== "swwmstoremessage." )
|
||||
{
|
||||
if ( consoleplayer != e.Args[2] ) return;
|
||||
SWWMFullHistory.PushMessage(e.Name.Mid(17),e.Args[0],e.Args[1]);
|
||||
}
|
||||
else if ( e.Name.Left(16) ~== "swwmremoteliner." )
|
||||
{
|
||||
if ( consoleplayer == e.Args[0] ) return;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ extend Class SWWMHandler
|
|||
if ( !swwm_nomapmsg )
|
||||
{
|
||||
// angry about phase two
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYAEVIB";
|
||||
msg.seqcnt = 2;
|
||||
msg.delay = 20;
|
||||
|
|
@ -30,7 +30,7 @@ extend Class SWWMHandler
|
|||
int whichboss = WhichVanillaBossMap();
|
||||
if ( bossmap == MAP_DE1M8 )
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYAPHOBOS";
|
||||
msg.seqcnt = 4;
|
||||
msg.delay = 40;
|
||||
|
|
@ -38,7 +38,7 @@ extend Class SWWMHandler
|
|||
}
|
||||
else if ( bossmap == MAP_DE2M8 )
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYADEIMOS";
|
||||
msg.seqcnt = 4;
|
||||
msg.delay = 40;
|
||||
|
|
@ -46,7 +46,7 @@ extend Class SWWMHandler
|
|||
}
|
||||
else if ( bossmap == MAP_DE3M8 )
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYADIS";
|
||||
msg.seqcnt = 4;
|
||||
msg.delay = 40;
|
||||
|
|
@ -54,7 +54,7 @@ extend Class SWWMHandler
|
|||
}
|
||||
else if ( bossmap == MAP_DE4M8 )
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYATHY";
|
||||
msg.seqcnt = 4;
|
||||
msg.delay = 40;
|
||||
|
|
@ -62,7 +62,7 @@ extend Class SWWMHandler
|
|||
}
|
||||
else if ( bossmap == MAP_DMAP07 )
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYADIMPLE";
|
||||
msg.seqcnt = 5;
|
||||
msg.delay = 40;
|
||||
|
|
@ -80,7 +80,7 @@ extend Class SWWMHandler
|
|||
}
|
||||
if ( rampancy )
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYARAMPANCY";
|
||||
msg.seqcnt = 4;
|
||||
msg.delay = 250;
|
||||
|
|
@ -88,7 +88,7 @@ extend Class SWWMHandler
|
|||
}
|
||||
else
|
||||
{
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
msg.seqname = "SAYAIOS";
|
||||
msg.seqcnt = 5;
|
||||
msg.delay = 40;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,45 @@
|
|||
Class EndgameBossMarker : Inventory {}
|
||||
Class BossMarker : Inventory {}
|
||||
|
||||
Class IconMessage : Inventory
|
||||
{
|
||||
override void DoEffect()
|
||||
{
|
||||
if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) )
|
||||
{
|
||||
Console.MidPrint(smallfont,StringTable.Localize("$BOSSLINE_IOS"));
|
||||
DepleteOrDestroy();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Class ArchangelusMessage : Inventory
|
||||
{
|
||||
override void DoEffect()
|
||||
{
|
||||
if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) )
|
||||
{
|
||||
Console.MidPrint(smallfont,StringTable.Localize("$BOSSLINE_ARCHANGELUS"));
|
||||
DepleteOrDestroy();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Class DSparilMessage : Inventory
|
||||
{
|
||||
override void DoEffect()
|
||||
{
|
||||
if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) )
|
||||
{
|
||||
Console.MidPrint(smallfont,StringTable.Localize("$BOSSLINE_DSPARIL"));
|
||||
DepleteOrDestroy();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extend Class SWWMHandler
|
||||
{
|
||||
String bosstag;
|
||||
|
|
@ -179,7 +218,10 @@ extend Class SWWMHandler
|
|||
e.Thing.GiveInventory('EndgameBossMarker',1);
|
||||
}
|
||||
if ( e.Thing is 'BossEye' )
|
||||
{
|
||||
bossviewactor = e.Thing;
|
||||
e.Thing.GiveInventory('IconMessage',1);
|
||||
}
|
||||
bosstag = "$BT_IOS";
|
||||
}
|
||||
else if ( bossmap == MAP_DLVL08 )
|
||||
|
|
@ -237,6 +279,7 @@ extend Class SWWMHandler
|
|||
bosstag = "$BT_DSPARIL2";
|
||||
e.Thing.GiveInventory('BossMarker',1);
|
||||
e.Thing.GiveInventory('EndgameBossMarker',1);
|
||||
e.Thing.GiveInventory('DSparilMessage',1);
|
||||
}
|
||||
}
|
||||
else if ( bossmap == MAP_HMAP38 )
|
||||
|
|
@ -321,8 +364,19 @@ extend Class SWWMHandler
|
|||
}
|
||||
else if ( bossmap == MAP_EVMAP30 )
|
||||
{
|
||||
if ( e.Thing.GetClassName() == "ArchangelusA" )
|
||||
if ( e.Thing.GetClassName() == "Archangelus" )
|
||||
{
|
||||
bossactors.Push(e.Thing);
|
||||
bossviewactor = e.Thing;
|
||||
bosstag = "$BT_ARCHANGELUS";
|
||||
e.Thing.GiveInventory('ArchangelusMessage',1);
|
||||
}
|
||||
else if ( e.Thing.GetClassName() == "ArchangelusA" )
|
||||
{
|
||||
// first phase
|
||||
bossactors.Clear();
|
||||
bossviewactor = null;
|
||||
initialized = false;
|
||||
bossactors.Push(e.Thing);
|
||||
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
|
||||
if ( trk ) trk.bBOSS = true;
|
||||
|
|
@ -334,6 +388,7 @@ extend Class SWWMHandler
|
|||
{
|
||||
// second phase
|
||||
bossactors.Clear();
|
||||
bossviewactor = null;
|
||||
initialized = false;
|
||||
bossactors.Push(e.Thing);
|
||||
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
|
||||
|
|
|
|||
|
|
@ -120,6 +120,18 @@ extend Class SWWMHandler
|
|||
let t = new("UglyBoyGetsFuckedUp");
|
||||
t.ChangeStatNum(Thinker.STAT_USER);
|
||||
}
|
||||
// Archangelus death
|
||||
if ( e.Thing.GetClassName() == "ArchangelusB" )
|
||||
{
|
||||
// kill all other monsters
|
||||
let ti = ThinkerIterator.Create("Actor");
|
||||
Actor a;
|
||||
while ( a = Actor(ti.Next()) )
|
||||
{
|
||||
if ( (a != e.Thing) && (a.Health > 0) && (a.bBossSpawned || a.bCOUNTKILL) )
|
||||
a.DamageMobj(e.Thing,e.Thing,a.Health,'EndMii',DMG_FORCED|DMG_THRUSTLESS);
|
||||
}
|
||||
}
|
||||
if ( swwm_partytime )
|
||||
{
|
||||
let pt = Actor.Spawn("PartyTime",e.Thing.pos);
|
||||
|
|
|
|||
|
|
@ -13,9 +13,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
GenericAmmoTex[3], MiniBox, AutoPage, PauseTex, bgtex;
|
||||
HUDFont mTewiFont, mMiniwiFont, mMPlusFont, mk6x8Font;
|
||||
|
||||
// "Full History" contains all messages since session start, nothing is flushed
|
||||
// this can be accessed from a section of the knowledge base
|
||||
Array<MsgLine> MainQueue, PickupQueue, FullHistory;
|
||||
Array<MsgLine> MainQueue, PickupQueue;
|
||||
|
||||
// sorted arrays of various elements
|
||||
Array<SWWMInterest> intpoints;
|
||||
|
|
@ -56,7 +54,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
String midstr;
|
||||
int midtic, midtype;
|
||||
|
||||
bool koraxhack, mainframehack;
|
||||
bool koraxhack, mainframehack, bosshack;
|
||||
int puzzlecnt, realpuzzlecnt;
|
||||
|
||||
SWWMWeaponTooltip ctip;
|
||||
|
|
@ -167,7 +165,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
m = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
m.seqname = "SAYAGREETA";
|
||||
m.seqcnt = 3;
|
||||
m.delay = 120;
|
||||
m.delay = 150;
|
||||
AttachMessage(m,-1232);
|
||||
m2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
|
||||
m2.seqname = "SAYAGREETB";
|
||||
|
|
@ -211,7 +209,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
m = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
m.seqname = "SAYABLOODA";
|
||||
m.seqcnt = 2;
|
||||
m.delay = 120;
|
||||
m.delay = 220;
|
||||
AttachMessage(m,-1232);
|
||||
m2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
|
||||
m2.seqname = "SAYABLOODB";
|
||||
|
|
@ -243,7 +241,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
m = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
m.seqname = "SAYAGAMEA";
|
||||
m.seqcnt = 2;
|
||||
m.delay = 120;
|
||||
m.delay = 200;
|
||||
AttachMessage(m,-1232);
|
||||
m2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
|
||||
m2.seqname = "SAYAGAMEB";
|
||||
|
|
@ -268,7 +266,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
m = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
|
||||
m.seqname = "KIRINWORSHIPA";
|
||||
m.seqcnt = 1;
|
||||
m.delay = 120;
|
||||
m.delay = 150;
|
||||
AttachMessage(m,-1232);
|
||||
m2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
m2.seqname = "KIRINWORSHIPB";
|
||||
|
|
@ -302,7 +300,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
m = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
|
||||
m.seqname = "SAYAMASTERSA";
|
||||
m.seqcnt = 2;
|
||||
m.delay = 120;
|
||||
m.delay = 150;
|
||||
m.enddelay = 60;
|
||||
AttachMessage(m,-1232);
|
||||
m2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
|
||||
|
|
@ -588,6 +586,15 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
mainframehack = false;
|
||||
return true;
|
||||
}
|
||||
if ( (msg == StringTable.Localize("$BOSSLINE_IOS"))
|
||||
|| (msg == StringTable.Localize("$BOSSLINE_ARCHANGELUS"))
|
||||
|| (msg == StringTable.Localize("$BOSSLINE_DSPARIL")) )
|
||||
{
|
||||
bosshack = true;
|
||||
Console.Printf(msg);
|
||||
bosshack = false;
|
||||
return true;
|
||||
}
|
||||
if ( !fnt || (fnt == smallfont) )
|
||||
{
|
||||
midstr = msg;
|
||||
|
|
@ -618,12 +625,17 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
printlevel = PRINT_CHAT;
|
||||
outline = "\cmKorax\c-: "..outline;
|
||||
}
|
||||
if ( mainframehack )
|
||||
else if ( mainframehack )
|
||||
{
|
||||
// same here, hi yholl
|
||||
printlevel = PRINT_CHAT;
|
||||
outline = "\cmAI Mainframe\c-: "..outline;
|
||||
}
|
||||
else if ( bosshack )
|
||||
{
|
||||
// no need to attach name, these are done specifically for this
|
||||
printlevel = PRINT_CHAT;
|
||||
}
|
||||
let m = new("MsgLine");
|
||||
m.str = outline.Left(outline.Length()-1); // strip newline
|
||||
m.type = printlevel;
|
||||
|
|
@ -631,7 +643,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
m.rep = 1;
|
||||
// append chat messages to full history
|
||||
if ( (printlevel == PRINT_CHAT) || (printlevel == PRINT_TEAMCHAT) )
|
||||
FullHistory.Push(m);
|
||||
EventHandler.SendNetworkEvent("swwmstoremessage."..m.str,m.tic,m.type,consoleplayer);
|
||||
// ignore during intermission
|
||||
if ( gamestate != GS_LEVEL ) return false;
|
||||
if ( (printlevel < PRINT_LOW) || (printlevel > PRINT_TEAMCHAT) ) return true; // we couldn't care less about these
|
||||
|
|
@ -836,6 +848,17 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
qsort_playerscore(a,p+1,h);
|
||||
}
|
||||
|
||||
// separated so they can be auto-ticked by the demolitionist menu
|
||||
void TickInterpolators()
|
||||
{
|
||||
HealthInter.Update(CPlayer.health);
|
||||
if ( !hnd ) hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
||||
int s1, s2;
|
||||
[s1, s2] = SWWMCredits.Get(CPlayer);
|
||||
ScoreInter.Update(s1);
|
||||
if ( ScoreInter.GetValue() >= ScoreInter.mCurrentValue ) ScoreInter2.Update(s2);
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
|
|
@ -858,12 +881,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
i--;
|
||||
}
|
||||
// update interpolators
|
||||
HealthInter.Update(CPlayer.health);
|
||||
if ( !hnd ) hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
||||
int s1, s2;
|
||||
[s1, s2] = SWWMCredits.Get(CPlayer);
|
||||
ScoreInter.Update(s1);
|
||||
if ( ScoreInter.GetValue() >= ScoreInter.mCurrentValue ) ScoreInter2.Update(s2);
|
||||
TickInterpolators();
|
||||
let d = Demolitionist(CPlayer.mo);
|
||||
if ( d )
|
||||
{
|
||||
|
|
@ -1239,7 +1257,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
Vector2 vpos = SWWMUtility.NDCToViewport(projdata,ndc);
|
||||
Font fnt = LangFont(mMiniwiFont);
|
||||
int mtime = thesight?70:35;
|
||||
double alph = clamp(((s.updated+mtime)-level.maptime)/35.,0.,1.);
|
||||
double alph = clamp(((s.updated+mtime)-(level.maptime+fractic))/35.,0.,1.);
|
||||
alph *= clamp(1.5-1.5*(tdir.length()/(thesight?1200.:800.)),0.,1.);
|
||||
tag = s.tag;
|
||||
Screen.DrawText(fnt,s.vipitem?Font.CR_PURPLE:s.scoreitem?Font.CR_GOLD:Font.CR_GREEN,(vpos.x-hsd.x*fnt.StringWidth(tag)/2.)/hsd.x,(vpos.y-hsd.y*fnt.GetHeight()/2.)/hsd.y,tag,DTA_VirtualWidthF,ssd.x,DTA_VirtualHeightF,ssd.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_ClipTop,cliptop,DTA_ClipBottom,clipbottom,DTA_ClipLeft,clipleft,DTA_ClipRight,clipright);
|
||||
|
|
@ -1273,7 +1291,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
}
|
||||
int mtime = 35;
|
||||
if ( thesight && (targ.lasthealth > 0) ) mtime += 105;
|
||||
double alph = clamp(((targ.updated+mtime)-level.maptime)/35.,0.,1.);
|
||||
double alph = clamp(((targ.updated+mtime)-(level.maptime+fractic))/35.,0.,1.);
|
||||
Vector2 barsiz = TexMan.GetScaledSize(EnemyBTex);
|
||||
barsiz.x *= hsb.x;
|
||||
barsiz.y *= hsb.y;
|
||||
|
|
@ -2460,7 +2478,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
// draw nametags below them
|
||||
double yy;
|
||||
double nalph = 0.;
|
||||
int tagtime = (ntagtic+70)-level.totaltime;
|
||||
double tagtime = (ntagtic+70)-(level.totaltime+fractic);
|
||||
if ( (ntagstr != "") && (tagtime > 0) )
|
||||
{
|
||||
nalph = clamp(tagtime/20.,0.,1.);
|
||||
|
|
@ -2484,7 +2502,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
{
|
||||
String cstr = PickupQueue[i].str;
|
||||
if ( PickupQueue[i].rep > 1 ) cstr.AppendFormat(" (x%d)",PickupQueue[i].rep);
|
||||
int curtime = (PickupQueue[i].tic+35*swwm_pickduration)-level.totaltime;
|
||||
double curtime = (PickupQueue[i].tic+35*swwm_pickduration)-(level.totaltime+fractic);
|
||||
double alph = clamp(curtime/20.,0.,1.);
|
||||
BrokenLines l = fnt.BreakLines(cstr,int(ss.x*.75));
|
||||
int maxlen = 0;
|
||||
|
|
@ -2516,7 +2534,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
double ssp = (midtype&1)?.5:1.;
|
||||
double hsp = (midtype&1)?2.:1.;
|
||||
int col = (midtype&2)?msgmidcolor2:msgmidcolor;
|
||||
int curtime = (midtic+int(35*con_midtime))-level.totaltime;
|
||||
double curtime = (midtic+int(GameTicRate*con_midtime))-(level.totaltime+fractic);
|
||||
double alph = clamp(curtime/20.,0.,1.);
|
||||
BrokenLines l = fnt.BreakLines(midstr,int(ss.x*ssp));
|
||||
int h = fnt.GetHeight();
|
||||
|
|
@ -2550,9 +2568,9 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
else if ( MainQueue[i].type == PRINT_TEAMCHAT ) col = msg4color;
|
||||
String cstr = MainQueue[i].str;
|
||||
if ( MainQueue[i].rep > 1 ) cstr.AppendFormat(" (x%d)",MainQueue[i].rep);
|
||||
int curtime = MainQueue[i].tic-level.totaltime;
|
||||
if ( MainQueue[i].type < PRINT_CHAT ) curtime += 35*swwm_msgduration;
|
||||
else curtime += 35*swwm_chatduration;
|
||||
double curtime = MainQueue[i].tic-(level.totaltime+fractic);
|
||||
if ( MainQueue[i].type < PRINT_CHAT ) curtime += GameTicRate*swwm_msgduration;
|
||||
else curtime += GameTicRate*swwm_chatduration;
|
||||
double alph = clamp(curtime/20.,0.,1.);
|
||||
BrokenLines l = fnt.BreakLines(cstr,smol?211:361);
|
||||
for ( int j=0; j<l.Count(); j++ )
|
||||
|
|
@ -2634,14 +2652,14 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
int len;
|
||||
double xx, yy;
|
||||
Font fnt;
|
||||
int deadtimer = goner?goner.deadtimer:demo.deadtimer;
|
||||
double deadtimer = (goner?goner.deadtimer:demo.deadtimer)+fractic;
|
||||
if ( goner || (demo.player.viewheight <= 6) )
|
||||
{
|
||||
double dimalph = goner?1.:min(deadtimer/80.,1.);
|
||||
Screen.Dim("Black",dimalph,0,0,Screen.GetWidth(),Screen.GetHeight());
|
||||
if ( demo && (demo.revivefail > level.maptime) )
|
||||
{
|
||||
Screen.Dim("Red",clamp((demo.revivefail-level.maptime)/60.,0.,.2),0,0,Screen.GetWidth(),Screen.GetHeight());
|
||||
Screen.Dim("Red",clamp((demo.revivefail-(level.maptime+fractic))/60.,0.,.2),0,0,Screen.GetWidth(),Screen.GetHeight());
|
||||
str = StringTable.Localize("$SWWM_REFAIL");
|
||||
fnt = LangFont(mTewiFont);
|
||||
len = fnt.StringWidth(str);
|
||||
|
|
|
|||
|
|
@ -101,8 +101,10 @@ Class SWWMOneLiner : HUDMessageBase
|
|||
}
|
||||
int h = fnt.GetHeight();
|
||||
int fh = h*l.Count();
|
||||
double alph = clamp((curtime/20.)+1.,0.,1.);
|
||||
alph *= clamp((lifespan-curtime)/10.,0.,1.);
|
||||
double fractic = SWWMStatusBar(statusbar)?SWWMStatusBar(statusbar).fractic:0;
|
||||
double fcurtime = curtime-fractic;
|
||||
double alph = clamp((fcurtime/20.)+1.,0.,1.);
|
||||
alph *= clamp((lifespan-fcurtime)/10.,0.,1.);
|
||||
Screen.Dim("Black",alph*.8,int((Screen.GetWidth()-(maxlen+12)*hs.x)/2.),int(bottom-(margin+2+fh)*hs.y),int((maxlen+12)*hs.x),int((fh+4)*hs.y));
|
||||
int yy = margin+fh;
|
||||
for ( int i=0; i<l.Count(); i++ )
|
||||
|
|
@ -140,7 +142,9 @@ Class GenericFlash : HUDMessageBase
|
|||
{
|
||||
if ( automapactive || (visibility != BaseStatusBar.HUDMSGLayer_UnderHUD) ) return;
|
||||
if ( cam && (players[consoleplayer].camera != cam) ) return;
|
||||
Screen.Dim(col,(col.a/255.)*alpha*swwm_flashstrength,0,0,Screen.GetWidth(),Screen.GetHeight());
|
||||
double fractic = SWWMStatusBar(statusbar)?SWWMStatusBar(statusbar).fractic:0;
|
||||
double falpha = alpha-fractic*(1./duration);
|
||||
Screen.Dim(col,(col.a/255.)*falpha*swwm_flashstrength,0,0,Screen.GetWidth(),Screen.GetHeight());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -199,7 +203,9 @@ Class SWWMAchievementNotification : HUDMessageBase
|
|||
else hs.x = swwm_hudscale;
|
||||
hs.y = hs.x;
|
||||
Vector2 ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y);
|
||||
double alpha = (tics<fadeintics)?(tics/fadeintics):(tics<(fadeintics+holdtics))?1.:(1.-(tics-(fadeintics+holdtics))/fadeouttics);
|
||||
double fractic = SWWMStatusBar(statusbar)?SWWMStatusBar(statusbar).fractic:0;
|
||||
double ftics = tics+fractic;
|
||||
double alpha = (ftics<fadeintics)?(ftics/fadeintics):(ftics<(fadeintics+holdtics))?1.:(1.-(ftics-(fadeintics+holdtics))/fadeouttics);
|
||||
Vector2 pos = (int(ss.x-256)/2,(ss.y-(margin+36))+int(margin+40)*(1.-alpha));
|
||||
String loctag = StringTable.Localize(tag);
|
||||
String loctxt = num?String.Format(StringTable.Localize(txt),num):StringTable.Localize(txt);
|
||||
|
|
@ -240,7 +246,9 @@ Class SWWMSewerCount : HUDMessageBase
|
|||
override void Draw( int bottom, int visibility )
|
||||
{
|
||||
if ( tics > 100 ) return;
|
||||
double alph = clamp(tics/20.,0.,1.);
|
||||
double fractic = SWWMStatusBar(statusbar)?SWWMStatusBar(statusbar).fractic:0;
|
||||
double ftics = tics-fractic;
|
||||
double alph = clamp(ftics/20.,0.,1.);
|
||||
double x = (Screen.GetWidth()-(newsmallfont.StringWidth(str)*CleanXFac*2))/2;
|
||||
double y = int(Screen.GetHeight()*.75)-(newsmallfont.GetHeight()*CleanYFac*2)/2;
|
||||
Screen.DrawText(newsmallfont,Font.CR_GREEN,x,y,str,DTA_ScaleX,CleanXFac*2,DTA_ScaleY,CleanYFac*2,DTA_Alpha,alph);
|
||||
|
|
@ -296,7 +304,9 @@ Class SWWMWeaponTooltip : HUDMessageBase
|
|||
else hs.x = swwm_hudscale;
|
||||
hs.y = hs.x;
|
||||
Vector2 ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y);
|
||||
double alpha = (tics<fadeintics)?(tics/fadeintics):(tics<(fadeintics+holdtics))?1.:(1.-(tics-(fadeintics+holdtics))/fadeouttics);
|
||||
double fractic = SWWMStatusBar(statusbar)?SWWMStatusBar(statusbar).fractic:0;
|
||||
double ftics = tics+fractic;
|
||||
double alpha = (ftics<fadeintics)?(ftics/fadeintics):(ftics<(fadeintics+holdtics))?1.:(1.-(ftics-(fadeintics+holdtics))/fadeouttics);
|
||||
int w, h;
|
||||
[w, h] = TexMan.GetSize(icon);
|
||||
int w2 = w;
|
||||
|
|
@ -388,16 +398,7 @@ Class SWWMDirectMessage : HUDMessageBase
|
|||
l = tfnt.BreakLines(txt,220);
|
||||
// append to the player's chat log (if it's valid)
|
||||
if ( (seqnum < 1) || (seqnum > seqcnt) ) return;
|
||||
let bar = SWWMStatusBar(StatusBar);
|
||||
if ( bar )
|
||||
{
|
||||
let l = new("MsgLine");
|
||||
l.str = chrname..": "..txt;
|
||||
l.tic = level.totaltime;
|
||||
l.rep = 1;
|
||||
l.type = PRINT_CHAT;
|
||||
bar.FullHistory.Push(l);
|
||||
}
|
||||
EventHandler.SendNetworkEvent("swwmstoremessage."..chrname..": "..txt,level.totaltime,PRINT_CHAT,consoleplayer);
|
||||
}
|
||||
|
||||
private void DrawText()
|
||||
|
|
@ -417,7 +418,7 @@ Class SWWMDirectMessage : HUDMessageBase
|
|||
}
|
||||
}
|
||||
|
||||
private void DrawAvatar()
|
||||
private void DrawAvatar( double fractic )
|
||||
{
|
||||
int blinkframe = -1;
|
||||
switch ( blinktics )
|
||||
|
|
@ -437,7 +438,7 @@ Class SWWMDirectMessage : HUDMessageBase
|
|||
if ( blinkframe >= 0 ) Screen.DrawTexture(Blink[blinkframe],false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
if ( talkframe >= 0 ) Screen.DrawTexture(Talk[talkframe],false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
Screen.DrawTexture(Noiz[(gametic/2)%4],false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Multiply);
|
||||
Screen.DrawTexture(Noiz[int(((gametic+fractic)/GameTicRate)*15)%4],false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Multiply);
|
||||
}
|
||||
|
||||
private int TotalLength()
|
||||
|
|
@ -567,8 +568,9 @@ Class SWWMDirectMessage : HUDMessageBase
|
|||
{
|
||||
if ( (seqnum < 0) || (seqnum > (seqcnt+1)) ) return;
|
||||
double alph = 1.;
|
||||
if ( seqnum == 0 ) alph = fadein/15.;
|
||||
else if ( seqnum == (seqcnt+1) ) alph = 1.-fadeout/30.;
|
||||
double fractic = SWWMStatusBar(statusbar)?SWWMStatusBar(statusbar).fractic:0;
|
||||
if ( seqnum == 0 ) alph = (fadein+fractic)/15.;
|
||||
else if ( seqnum == (seqcnt+1) ) alph = 1.-(fadeout+fractic)/30.;
|
||||
if ( swwm_hudscale <= 0 ) hs = StatusBar.GetHUDScale();
|
||||
else hs.x = swwm_hudscale;
|
||||
hs.y = hs.x;
|
||||
|
|
@ -576,7 +578,7 @@ Class SWWMDirectMessage : HUDMessageBase
|
|||
origin = (int(ss.x-270)/2,swwm_hudmargin+70);
|
||||
Screen.DrawTexture(MessageBox,false,origin.x,origin.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||
if ( (seqnum < 1) || (seqnum > seqcnt) ) return;
|
||||
DrawAvatar();
|
||||
DrawAvatar(fractic);
|
||||
DrawText();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ Class DemolitionistMenu : GenericMenu
|
|||
// trading
|
||||
SWWMTradeHistory tradelib;
|
||||
Array<int> playerlist;
|
||||
// chat history instance
|
||||
SWWMFullHistory fullhistory;
|
||||
// chat history total line count (includes breaks)
|
||||
int chatlines;
|
||||
// temporary bottom messages, such as "not enough money"
|
||||
|
|
@ -328,8 +330,8 @@ Class DemolitionistMenu : GenericMenu
|
|||
break;
|
||||
}
|
||||
let bar = SWWMStatusBar(StatusBar);
|
||||
if ( bar && (bar.FullHistory.Size() > 0) )
|
||||
tabs.Push(TAB_CHAT);
|
||||
fullhistory = SWWMFullHistory.Get();
|
||||
if ( fullhistory ) tabs.Push(TAB_CHAT);
|
||||
int lasttab = swwm_lasttab;
|
||||
for ( int i=0; i<tabs.Size(); i++ )
|
||||
{
|
||||
|
|
@ -651,7 +653,7 @@ Class DemolitionistMenu : GenericMenu
|
|||
MenuSound("menu/demoscroll");
|
||||
ofs0 = --sel0;
|
||||
}
|
||||
else if ( (tabs[curtab] == TAB_CHAT) && (StatusBar is 'SWWMStatusBar') && (sel0 < SWWMStatusBar(StatusBar).FullHistory.Size()-1) )
|
||||
else if ( (tabs[curtab] == TAB_CHAT) && FullHistory && (sel0 < FullHistory.msg.Size()-1) )
|
||||
{
|
||||
MenuSound("menu/demoscroll");
|
||||
ofs0 = ++sel0;
|
||||
|
|
@ -1583,9 +1585,9 @@ Class DemolitionistMenu : GenericMenu
|
|||
// are we clicking where the scrollbar should be?
|
||||
if ( mpos.x < 632 ) return res;
|
||||
let bar = SWWMStatusBar(StatusBar);
|
||||
if ( !bar || (bar.FullHistory.Size() <= 1) ) return res; // no scrollbar
|
||||
if ( !FullHistory || (FullHistory.msg.Size() <= 1) ) return res; // no scrollbar
|
||||
// calculate offset
|
||||
int szr = bar.FullHistory.Size()-1;
|
||||
int szr = FullHistory.msg.Size()-1;
|
||||
int step = szr-clamp(rnd((mpos.y-24.)/(353./szr)),0,szr);
|
||||
if ( step != sel0 ) MenuSound("menu/demoscroll");
|
||||
ofs0 = sel0 = step;
|
||||
|
|
@ -1846,9 +1848,9 @@ Class DemolitionistMenu : GenericMenu
|
|||
else if ( tabs[curtab] == TAB_CHAT )
|
||||
{
|
||||
let bar = SWWMStatusBar(StatusBar);
|
||||
if ( !bar || (bar.FullHistory.Size() <= 1) ) return res; // no scrollbar
|
||||
if ( !FullHistory || (FullHistory.msg.Size() <= 1) ) return res; // no scrollbar
|
||||
// calculate offset
|
||||
int szr = bar.FullHistory.Size()-1;
|
||||
int szr = FullHistory.msg.Size()-1;
|
||||
int step = szr-clamp(rnd((mpos.y-24.)/(353./szr)),0,szr);
|
||||
if ( step != sel0 ) MenuSound("menu/demoscroll");
|
||||
ofs0 = sel0 = step;
|
||||
|
|
@ -3711,24 +3713,24 @@ Class DemolitionistMenu : GenericMenu
|
|||
else if ( tabs[curtab] == TAB_CHAT )
|
||||
{
|
||||
let bar = SWWMStatusBar(StatusBar);
|
||||
if ( !bar || (bar.FullHistory.Size() <= 0) )
|
||||
if ( !FullHistory || (FullHistory.msg.Size() <= 0) )
|
||||
{
|
||||
str = StringTable.Localize("$SWWM_NOCHAT");
|
||||
Screen.DrawText(fnt,Font.CR_FIRE,origin.x+(640-fnt.StringWidth(str))/2,origin.y+(400-fnt.GetHeight())/2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
return;
|
||||
}
|
||||
int margin = TewiFont.StringWidth("[00:00:00] ");
|
||||
int ofs = bar.FullHistory.Size()-(1+sel0);
|
||||
int ofs = FullHistory.msg.Size()-(1+sel0);
|
||||
xx = 3;
|
||||
yy = 379;
|
||||
for ( int i=ofs; i>=0; i-- )
|
||||
{
|
||||
int col = (bar.FullHistory[i].type==PRINT_TEAMCHAT)?msg4color:msg3color;
|
||||
int thour = (bar.FullHistory[i].tic/(3600*GameTicRate));
|
||||
int tmin = (bar.FullHistory[i].tic/(60*GameTicRate))%60;
|
||||
int tsec = (bar.FullHistory[i].tic/GameTicRate)%60;
|
||||
int col = (FullHistory.msg[i].type==PRINT_TEAMCHAT)?msg4color:msg3color;
|
||||
int thour = (FullHistory.msg[i].tic/(3600*GameTicRate));
|
||||
int tmin = (FullHistory.msg[i].tic/(60*GameTicRate))%60;
|
||||
int tsec = (FullHistory.msg[i].tic/GameTicRate)%60;
|
||||
str = String.Format("\cu[\c-%02d\cu:\c-%02d\cu:\c-%02d\cu]\c- ",thour,tmin,tsec);
|
||||
BrokenLines l = fnt.BreakLines(bar.FullHistory[i].str,626-margin);
|
||||
BrokenLines l = fnt.BreakLines(FullHistory.msg[i].str,626-margin);
|
||||
double by = yy-13*l.Count();
|
||||
if ( by < 17 )
|
||||
{
|
||||
|
|
@ -3742,11 +3744,11 @@ Class DemolitionistMenu : GenericMenu
|
|||
yy = by;
|
||||
}
|
||||
// scrollbar
|
||||
if ( bar.FullHistory.Size() > 1 )
|
||||
if ( FullHistory.msg.Size() > 1 )
|
||||
{
|
||||
Screen.DrawTexture(WindowSeparator,false,origin.x+631,origin.y+14,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
xx = 634;
|
||||
int szr = bar.FullHistory.Size()-1;
|
||||
int szr = FullHistory.msg.Size()-1;
|
||||
yy = floor((szr-sel0)*(353./szr))+17;
|
||||
Screen.DrawText(TewiFont,Font.CR_FIRE,origin.x+xx,origin.y+yy,"▮",DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2745,10 +2745,11 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
Super.AddInventory(item);
|
||||
if ( !player ) return;
|
||||
if ( !bInDefaultInventory )
|
||||
String cn = item.GetClassName();
|
||||
if ( !bInDefaultInventory && (level.maptime > 0) && (!(item is 'SWWMWeapon') || !(cn.Left(4) ~== "Dual")) ) // dual weapons are ignored here, as they're handled separately
|
||||
{
|
||||
// add lore if any
|
||||
SWWMLoreLibrary.Add(player,item.GetClassName());
|
||||
SWWMLoreLibrary.Add(player,cn);
|
||||
// weapon get oneliner
|
||||
if ( (item is 'Weapon') && !(item is 'SWWMGesture') && !(item is 'SWWMItemGesture') && mystats && !mystats.GotWeapon(Weapon(item).GetClass()) && CheckLocalView() )
|
||||
SWWMHandler.AddOneliner("getweapon",2);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,33 @@
|
|||
// thinkers related to the hud
|
||||
|
||||
// "Full History" contains all messages since session start, nothing is flushed
|
||||
// this can be accessed from a section of the knowledge base
|
||||
Class SWWMFullHistory : Thinker
|
||||
{
|
||||
Array<MsgLine> msg;
|
||||
|
||||
static clearscope SWWMFullHistory Get()
|
||||
{
|
||||
let fh = SWWMFullHistory(ThinkerIterator.Create("SWWMFullHistory",STAT_STATIC).Next());
|
||||
return fh;
|
||||
}
|
||||
|
||||
static void PushMessage( String str, int tic, int type )
|
||||
{
|
||||
let fh = SWWMFullHistory(ThinkerIterator.Create("SWWMFullHistory",STAT_STATIC).Next());
|
||||
if ( !fh )
|
||||
{
|
||||
fh = new("SWWMFullHistory");
|
||||
fh.ChangeStatNum(STAT_STATIC);
|
||||
}
|
||||
MsgLine m = new("MsgLine");
|
||||
m.str = str;
|
||||
m.tic = tic;
|
||||
m.type = type;
|
||||
fh.msg.Push(m);
|
||||
}
|
||||
}
|
||||
|
||||
Enum EScoreObjType
|
||||
{
|
||||
ST_Score,
|
||||
|
|
|
|||
|
|
@ -80,6 +80,10 @@ Class ExplodiumGun : SWWMWeapon
|
|||
// autoswitch if enabled
|
||||
if ( !Owner.player.GetNeverSwitch() )
|
||||
Owner.player.PendingWeapon = SisterWeapon;
|
||||
// add the oneliner
|
||||
let demo = Demolitionist(Owner);
|
||||
if ( demo && demo.mystats && !demo.mystats.GotWeapon(SisterWeapon.GetClass()) && Owner.CheckLocalView() )
|
||||
SWWMHandler.AddOneliner("getweapon",2);
|
||||
item.bPickupGood = true;
|
||||
}
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue