Remove abort/cheat achievements, as they're not "normally" obtainable.

Add a little easter egg to using SWWM Platinum cheats for the first time.
This commit is contained in:
Mari the Deer 2021-04-23 23:25:43 +02:00
commit e463314b78
25 changed files with 231 additions and 14 deletions

View file

@ -6,7 +6,6 @@
# the "all collectibles" achievement) # the "all collectibles" achievement)
# hasformat: the TXT string has a %d in it to substitute for maxval # hasformat: the TXT string has a %d in it to substitute for maxval
# gametype: the game this belongs to (any, doom, heretic, hexen, raven, etc.) # gametype: the game this belongs to (any, doom, heretic, hexen, raven, etc.)
abort,0,no,any
acid,100,yes,any acid,100,yes,any
allcoll,-1,no,any allcoll,-1,no,any
allitems,50,yes,any allitems,50,yes,any
@ -22,7 +21,6 @@ brake,30,yes,any
bune,1000,yes,any bune,1000,yes,any
bustin,50,yes,any bustin,50,yes,any
butts,100,yes,any butts,100,yes,any
cheat,0,no,any
cliffyb,0,no,nothexen cliffyb,0,no,nothexen
clonk,0,no,any clonk,0,no,any
conga,15,yes,any conga,15,yes,any

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

BIN
graphics/HUD/ZnvAvatar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 918 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

BIN
graphics/HUD/ZnvStatic0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
graphics/HUD/ZnvStatic1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
graphics/HUD/ZnvStatic2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
graphics/HUD/ZnvStatic3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -630,6 +630,12 @@ SWWM_GAMMAMODE1 = "Semi-Auto";
SWWM_GAMMAMODE2 = "3-Round Burst"; SWWM_GAMMAMODE2 = "3-Round Burst";
SWWM_GAMMAMODE3 = "Full Auto"; SWWM_GAMMAMODE3 = "Full Auto";
SWWM_GAMMAMODE4 = "FULLER AUTO"; SWWM_GAMMAMODE4 = "FULLER AUTO";
// NOTE: do not localize these
SWWM_ZNVTXT1 = "\cdDemolitionist\c-, it is me, \chZanaveth The Corruptor\c-. I have been witness of the act you have now acted, yes.";
SWWM_ZNVTXT2 = "It is \cf%d\c- years since... and those magic words, I can see them again. Much impressed, very much impressed.";
SWWM_ZNVTXT3 = "So, you can do the thing... As have the \ctMishe\c- also taught to myself. This is a nonexpected surprise, yes.";
SWWM_ZNVTXT4 = "There are many such powerful words to use, \cdDemolitionist\c-. Do keep keeping to discover all of them.";
SWWM_ZNVTXT5 = "And now I have to take off. Please extend greetings to aunt \cgSaya\c- for my part. Good luck, \cdDemolitionist\c-.";
// boss tags // boss tags
BT_BRUISERS = "Bruiser Brothers"; BT_BRUISERS = "Bruiser Brothers";
BT_CYBIE = "Tyrant of Babel"; BT_CYBIE = "Tyrant of Babel";
@ -851,8 +857,6 @@ SWWM_FANART9 = "Marisa3.jpg";
SWWM_FANART10 = "Marisa4.jpg"; SWWM_FANART10 = "Marisa4.jpg";
SWWM_FANART11 = "Marisa5.jpg"; SWWM_FANART11 = "Marisa5.jpg";
// achievements // achievements
SWWM_ACHIEVEMENT_ABORT_TAG = "Oops I Broke It";
SWWM_ACHIEVEMENT_ABORT_TXT = "Cause a VM abort";
SWWM_ACHIEVEMENT_ACID_TAG = "Fizzy Goodness"; SWWM_ACHIEVEMENT_ACID_TAG = "Fizzy Goodness";
SWWM_ACHIEVEMENT_ACID_TXT = "Melt %d enemies with Telebrium Flechettes"; SWWM_ACHIEVEMENT_ACID_TXT = "Melt %d enemies with Telebrium Flechettes";
SWWM_ACHIEVEMENT_ALLCOLL_TAG = "The Full Set"; SWWM_ACHIEVEMENT_ALLCOLL_TAG = "The Full Set";
@ -883,8 +887,6 @@ SWWM_ACHIEVEMENT_BUSTIN_TAG = "Makes me Feel Good";
SWWM_ACHIEVEMENT_BUSTIN_TXT = "Bust %d walls"; SWWM_ACHIEVEMENT_BUSTIN_TXT = "Bust %d walls";
SWWM_ACHIEVEMENT_BUTTS_TAG = "Let's get to Bashing Butts"; SWWM_ACHIEVEMENT_BUTTS_TAG = "Let's get to Bashing Butts";
SWWM_ACHIEVEMENT_BUTTS_TXT = "Kill %d enemies by dashing backwards"; SWWM_ACHIEVEMENT_BUTTS_TXT = "Kill %d enemies by dashing backwards";
SWWM_ACHIEVEMENT_CHEAT_TAG = "It's Been Ten Years";
SWWM_ACHIEVEMENT_CHEAT_TXT = "Use a cheat code from SWWM Platinum";
SWWM_ACHIEVEMENT_CLIFFYB_TAG = "Errand Boy Bullshit"; SWWM_ACHIEVEMENT_CLIFFYB_TAG = "Errand Boy Bullshit";
SWWM_ACHIEVEMENT_CLIFFYB_TXT = "Finish a map without collecting any keys"; SWWM_ACHIEVEMENT_CLIFFYB_TXT = "Finish a map without collecting any keys";
SWWM_ACHIEVEMENT_CLONK_TAG = "CLONK"; SWWM_ACHIEVEMENT_CLONK_TAG = "CLONK";

View file

@ -744,8 +744,6 @@ SWWM_INTERTIP130 = "El potenciado de velocidad del Ragekit puede hacerte rebotar
// intermission fanart // intermission fanart
SWWM_FANART = "Arte: "; SWWM_FANART = "Arte: ";
// achievements // achievements
SWWM_ACHIEVEMENT_ABORT_TAG = "Uy lo He Roto";
SWWM_ACHIEVEMENT_ABORT_TXT = "Causa un aborto de MV";
SWWM_ACHIEVEMENT_ACID_TAG = "La Buena Efervescencia"; SWWM_ACHIEVEMENT_ACID_TAG = "La Buena Efervescencia";
SWWM_ACHIEVEMENT_ACID_TXT = "Derrite %d enemigos con Flechettes de Telebrium"; SWWM_ACHIEVEMENT_ACID_TXT = "Derrite %d enemigos con Flechettes de Telebrium";
SWWM_ACHIEVEMENT_ALLCOLL_TAG = "El Set Completo"; SWWM_ACHIEVEMENT_ALLCOLL_TAG = "El Set Completo";
@ -776,8 +774,6 @@ SWWM_ACHIEVEMENT_BUSTIN_TAG = "Me Hace Sentir Bien";
SWWM_ACHIEVEMENT_BUSTIN_TXT = "Revienta %d paredes"; SWWM_ACHIEVEMENT_BUSTIN_TXT = "Revienta %d paredes";
SWWM_ACHIEVEMENT_BUTTS_TAG = "Esos Glúteos Firmes"; SWWM_ACHIEVEMENT_BUTTS_TAG = "Esos Glúteos Firmes";
SWWM_ACHIEVEMENT_BUTTS_TXT = "Mata %d enemigos esprintando marcha atrás"; SWWM_ACHIEVEMENT_BUTTS_TXT = "Mata %d enemigos esprintando marcha atrás";
SWWM_ACHIEVEMENT_CHEAT_TAG = "Han Pasado Diez Años";
SWWM_ACHIEVEMENT_CHEAT_TXT = "Usa un código trampa de SWWM Platinum";
SWWM_ACHIEVEMENT_CLIFFYB_TAG = "Mierdas de Recadero"; SWWM_ACHIEVEMENT_CLIFFYB_TAG = "Mierdas de Recadero";
SWWM_ACHIEVEMENT_CLIFFYB_TXT = "Termina un mapa sin obtener ninguna llave"; SWWM_ACHIEVEMENT_CLIFFYB_TXT = "Termina un mapa sin obtener ninguna llave";
SWWM_ACHIEVEMENT_CLONK_TAG = "CLONK"; SWWM_ACHIEVEMENT_CLONK_TAG = "CLONK";

View file

@ -1,3 +1,3 @@
[default] [default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r450 \cu(Fri 23 Apr 18:41:47 CEST 2021)\c-"; SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r451 \cu(Fri 23 Apr 23:25:43 CEST 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r450 \cu(2021-04-23 18:41:47)\c-"; SWWM_SHORTVER="\cw0.9.11b-pre r451 \cu(2021-04-23 23:25:43)\c-";

View file

@ -916,6 +916,7 @@ misc/achievement sounds/CTF6.ogg
misc/wow sounds/WOW.ogg misc/wow sounds/WOW.ogg
misc/achievement2 sounds/YAY.ogg misc/achievement2 sounds/YAY.ogg
misc/orbexplode sounds/ORBEXPLODE.ogg misc/orbexplode sounds/ORBEXPLODE.ogg
misc/voice sounds/dlgvoice.ogg
misc/gibber1 sounds/general/Gib1.ogg misc/gibber1 sounds/general/Gib1.ogg
misc/gibber2 sounds/general/Gib2.ogg misc/gibber2 sounds/general/Gib2.ogg
misc/gibber3 sounds/general/Gib3.ogg misc/gibber3 sounds/general/Gib3.ogg

BIN
sounds/dlgvoice.ogg Normal file

Binary file not shown.

View file

@ -6,6 +6,7 @@ extend Class SWWMHandler
transient ui String kstr, klingerstr; transient ui String kstr, klingerstr;
transient ui bool kfail; transient ui bool kfail;
transient ui int rss; transient ui int rss;
ui bool nostalgic;
private void CheatEvent( ConsoleEvent e ) private void CheatEvent( ConsoleEvent e )
{ {
@ -341,7 +342,12 @@ extend Class SWWMHandler
if ( kstr != cht[i].Left(kstr.length()) ) continue; if ( kstr != cht[i].Left(kstr.length()) ) continue;
matchany = true; matchany = true;
if ( kstr != cht[i] ) continue; if ( kstr != cht[i] ) continue;
if ( i > 4 ) SWWMUtility.MarkAchievement('swwm_achievement_cheat',players[consoleplayer]); if ( (i > 4) && !nostalgic )
{
let m = new("SWWMSecretZanavethMessage").Init();
StatusBar.AttachMessage(m,-1232);
nostalgic = true;
}
if ( SWWMUtility.CheatsDisabled(consoleplayer) ) if ( SWWMUtility.CheatsDisabled(consoleplayer) )
{ {
kfail = true; kfail = true;

View file

@ -222,3 +222,218 @@ Class SWWMAchievementNotification : HUDMessageBase
} }
} }
} }
// Secret dialogue
Class SWWMSecretZanavethMessage : HUDMessageBase
{
TextureID MessageBox, BG, Avatar, Blink[2], Talk[5], Noiz[4];
transient Font fnt;
transient BrokenLines l;
int seqnum, delay, charcnt, blinktics, talktics, talkframe;
int rss;
int fadein, fadeout;
Vector2 ss, hs, origin;
private int GetRandom()
{
return (rss = (rss<<1)*35447+(rss/87));
}
SWWMSecretZanavethMessage Init()
{
MessageBox = TexMan.CheckForTexture("graphics/HUD/ZnvMessageBox.png",TexMan.Type_Any);
BG = TexMan.CheckForTexture("graphics/HUD/ZnvAvatarBG.png",TexMan.Type_Any);
Avatar = TexMan.CheckForTexture("graphics/HUD/ZnvAvatar.png",TexMan.Type_Any);
for ( int i=0; i<2; i++ )
Blink[i] = TexMan.CheckForTexture("graphics/HUD/ZnvAvatarBlink"..i..".png",TexMan.Type_Any);
for ( int i=0; i<5; i++ )
Talk[i] = TexMan.CheckForTexture("graphics/HUD/ZnvAvatarTalk"..i..".png",TexMan.Type_Any);
for ( int i=0; i<4; i++ )
Noiz[i] = TexMan.CheckForTexture("graphics/HUD/ZnvStatic"..i..".png",TexMan.Type_Any);
seqnum = -1;
delay = 80;
charcnt = 0;
blinktics = 30;
talktics = 0;
talkframe = -1;
rss = 1232;
return self;
}
private void SetText()
{
String txt;
if ( seqnum == 2 )
{
// replace with number of years since 2010
int nyears = SystemTime.Format("%Y",SystemTime.Now()).ToInt()-2010;
txt = String.Format(StringTable.Localize("$SWWM_ZNVTXT"..seqnum),nyears);
}
else txt = StringTable.Localize("$SWWM_ZNVTXT"..seqnum);
l = fnt.BreakLines(txt,220);
}
private void DrawText()
{
if ( !fnt ) fnt = Font.GetFont('TewiShaded');
if ( !l ) SetText();
int cur = charcnt;
Vector2 pos = origin+(47,2);
for ( int i=0; i<l.Count(); i++ )
{
if ( cur <= 0 ) break;
String part = l.StringAt(i).Left(cur);
Screen.DrawText(fnt,Font.CR_WHITE,pos.x,pos.y,part,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
pos.y += 13;
cur -= l.StringAt(i).Length();
}
}
private void DrawAvatar()
{
int blinkframe = -1;
switch ( blinktics )
{
case -1:
case -3:
blinkframe = 0;
break;
case -2:
blinkframe = 1;
break;
}
Screen.DrawTexture(BG,false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
Screen.DrawTexture(Avatar,false,origin.x+2,origin.y+2,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
if ( (seqnum > 0) && (seqnum < 6) )
{
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);
}
private int TotalLength()
{
if ( !l ) SetText();
int len = 0;
for ( int i=0; i<l.Count(); i++ )
len += l.StringAt(i).Length();
return len;
}
private String GetChar( int pos )
{
if ( !l ) SetText();
int cur = pos;
for ( int i=0; i<l.Count(); i++ )
{
int len = l.StringAt(i).Length();
if ( cur < len )
return l.StringAt(i).Mid(cur,1);
cur -= len;
}
return "";
}
private void AdvanceText()
{
String notalk = " \t\n,;:.-!?";
String punctuation = ",;:.";
if ( charcnt >= TotalLength() )
{
seqnum++;
charcnt = 0;
if ( seqnum > 5 ) S_StartSound("misc/chat",CHAN_VOICE,CHANF_UI,1.,0.);
else SetText();
return;
}
String ch = GetChar(charcnt);
// skip over color escapes
if ( ch == "\c" )
{
ch = GetChar(++charcnt);
if ( ch == "[" ) while ( (ch = GetChar(++charcnt)) != "]" );
charcnt++;
ch = GetChar(charcnt);
}
// speech
if ( notalk.IndexOf(ch) == -1 )
{
S_StartSound("misc/voice",CHAN_VOICE,CHANF_UI,.6,ATTN_NONE);
talktics = 5;
}
// delay relative to stuff
delay = 1;
int idx = punctuation.IndexOf(ch);
if ( idx >= 0 ) delay += (idx*2)+1;
charcnt++;
if ( charcnt >= TotalLength() ) delay += 90;
}
override bool Tick()
{
if ( seqnum < 0 )
{
delay--;
if ( delay <= 0 )
{
S_StartSound("misc/chat",CHAN_VOICE,CHANF_UI,1.,0.);
seqnum++;
}
return false;
}
if ( blinktics <= 0 )
{
blinktics--;
if ( blinktics < -3 ) blinktics = (abs(GetRandom())%10)?(60+abs(GetRandom())%30):6;
}
else blinktics--;
if ( talktics > 0 )
{
if ( !(gametic%3) ) talkframe = (talkframe==-1)?(abs(GetRandom())%5):-1;
talktics--;
}
else talkframe = -1;
if ( seqnum > 6 ) return true;
if ( seqnum == 0 )
{
fadein++;
if ( fadein > 15 )
{
delay = 30;
seqnum++;
}
return false;
}
if ( seqnum == 6 )
{
fadeout++;
if ( fadeout > 30 ) seqnum++;
return false;
}
if ( delay > 0 )
{
delay--;
return false;
}
AdvanceText();
return false;
}
override void Draw( int bottom, int visibility )
{
if ( (seqnum < 0) || (seqnum > 6) ) return;
double alph = 1.;
if ( seqnum == 0 ) alph = fadein/15.;
else if ( seqnum == 6 ) alph = 1.-fadeout/30.;
if ( swwm_hudscale <= 0 ) hs = StatusBar.GetHUDScale();
else hs.x = swwm_hudscale;
hs.y = hs.x;
ss = (Screen.GetWidth()/hs.x,Screen.GetHeight()/hs.y);
origin = (int(ss.x-270)/2,swwm_hudmargin+60);
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 > 5) ) return;
DrawAvatar();
DrawText();
}
}

View file

@ -331,7 +331,6 @@ Class SWWMStaticHandler : StaticEventHandler
wasinmap = false; wasinmap = false;
if ( timer == 1 ) if ( timer == 1 )
{ {
if ( swwm_achievement_abort < 1 ) CVar.FindCVar('swwm_achievement_abort').SetInt(1);
Console.Printf("\cfOopsie Woopsie!\c-"); Console.Printf("\cfOopsie Woopsie!\c-");
let hnd = SWWMBrutalHandler(StaticEventHandler.Find("SWWMBrutalHandler")); let hnd = SWWMBrutalHandler(StaticEventHandler.Find("SWWMBrutalHandler"));
if ( hnd && hnd.detected ) if ( hnd && hnd.detected )