Sigil 2 (v1.0) and Eviternity 2 (RC5) support.

+ Invinciball activation now voiced by Demo (thanks, Vyolette).
+ Retooled exit line merging (should fix those pesky duplicate exit markers).

Note: Oneliners for the Eviternity 2 final boss are not voiced yet.
This commit is contained in:
Mari the Deer 2024-01-04 19:50:26 +01:00
commit cbb1b2a8cb
36 changed files with 1177 additions and 165 deletions

View file

@ -57,6 +57,18 @@ extend Class DemolitionistMenu
c_minute = 9;
c_tz = "+09";
}
else if ( SWWMUtility.IsEviternityTwo() )
{
// June 11th 2150, 04:09 +09
// (June 11th 2150, 04:09 JST)
// Epoch: 5694174540
c_year = 2150;
c_month = 5;
c_day = 10;
c_hour = 4;
c_minute = 9;
c_tz = "+09";
}
else // Doom
{
// June 6th 2148, 18:37 EDT

View file

@ -24,6 +24,7 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
// saves time
bool nrftl = false;
bool eviternity = false;
bool eviternitwo = false;
bool hexdd = false;
String missionstr;
let stats = SWWMStats.Find(players[consoleplayer]);
@ -32,7 +33,20 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
int clus = level.cluster;
if ( clus == 11 ) nrftl = true;
eviternity = SWWMUtility.IsEviternity();
if ( eviternity )
eviternitwo = SWWMUtility.IsEviternityTwo();
if ( eviternitwo )
{
// clusters in eviternity 2 have to be remapped
if ( clus == 5 ) clus = 1;
else if ( (clus == 6) || (clus == 13) ) clus = 2;
else if ( (clus == 7) || (clus == 14) ) clus = 3;
else if ( (clus == 8) || (clus == 15) ) clus = 4;
else if ( (clus == 9) || (clus == 16) ) clus = 5;
else if ( (clus == 10) || (clus == 17) ) clus = 6;
else if ( (clus == 11) || (clus == 12) || (clus == 18) || (clus == 19) ) clus = 7;
missionstr = String.Format("$SWWM_MISSION_EVITERNITYII%d",clus);
}
else if ( eviternity )
{
// we have to do some heavy lifting here because episodes don't match clusters
if ( level.levelnum <= 5 ) clus = 1;
@ -48,6 +62,8 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
// naive method to guess if this is sigil
else if ( (clus == 5) && (level.mapname.Left(2) == "E5") )
missionstr = String.Format("$SWWM_MISSION_SIGIL");
else if ( (clus == 6) && (level.mapname.Left(2) == "E6") )
missionstr = String.Format("$SWWM_MISSION_SIGIL2");
else missionstr = String.Format("$SWWM_MISSION_DOOM%d",clus);
int csiz = stats.clustervisit.Size();
if ( (csiz > 0) && stats.secretdone[csiz-1] )
@ -61,11 +77,11 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
for ( int i=0; i<csiz; i++ )
{
// also include sigil
if ( !eviternity && (stats.clustervisit[i] >= 5) && (stats.clustervisit[i] != 25) ) continue;
if ( !eviternity && !eviternitwo && (stats.clustervisit[i] >= 5) && (stats.clustervisit[i] != 25) && (stats.clustervisit[i] != 26) ) continue;
fromdoomone = true;
break;
}
if ( !eviternity && (clus == 5) && fromdoomone )
if ( !eviternity && !eviternitwo && (clus == 5) && fromdoomone )
missionstr = "$SWWM_MISSION_DOOM5_FROMDOOM1";
if ( StringTable.Localize(missionstr) ~== missionstr.Mid(1) )
missionstr = "$SWWM_MISSION_NONE";
@ -76,8 +92,8 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
if ( (stats.clustervisit[i] == clus) && !firstskip )
continue;
firstskip = true;
String xstr = String.Format(eviternity?"$SWWM_MISSION_EVITERNITY%d":"$SWWM_MISSION_DOOM%d",stats.clustervisit[i]);
if ( !eviternity && (stats.clustervisit[i] == 5) && fromdoomone )
String xstr = String.Format(eviternitwo?"$SWWM_MISSION_EVITERNITYII%d":eviternity?"$SWWM_MISSION_EVITERNITY%d":"$SWWM_MISSION_DOOM%d",stats.clustervisit[i]);
if ( !eviternity && !eviternitwo && (stats.clustervisit[i] == 5) && fromdoomone )
xstr = "$SWWM_MISSION_DOOM5_FROMDOOM1";
if ( stats.secretdone[i] )
{
@ -89,6 +105,18 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
continue;
mtext.Push(new("DemolitionistMenuTextBox").Init(master,xstr));
}
if ( eviternitwo )
{
// prepend all mission briefings from Eviternity
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY6")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY5")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY4_SECRET")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY8")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY7")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY3")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY2")));
mtext.Push(new("DemolitionistMenuTextBox").Init(master,StringTable.Localize("$SWWM_MISSION_EVITERNITY1")));
}
}
else if ( (gameinfo.gametype&GAME_Heretic) && SWWMUtility.IsKnownMap() )
{
@ -155,23 +183,23 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
break;
case MK_LEFT:
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel < (mtext.Size()-1)) )
{
master.MenuSound("menu/demoscroll");
sel--;
if ( sel < 0 ) sel = mtext.Size()-1;
mtext[sel].smofs = mtext[sel].ofs = 0;
sel++;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
case MK_RIGHT:
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel > 0) )
{
master.MenuSound("menu/demoscroll");
sel++;
if ( sel >= mtext.Size() ) sel = 0;
mtext[sel].smofs = mtext[sel].ofs = 0;
sel--;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
@ -193,23 +221,23 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
break;
}
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel > 0) )
{
master.MenuSound("menu/demoscroll");
sel--;
if ( sel < 0 ) sel = mtext.Size()-1;
mtext[sel].smofs = mtext[sel].ofs;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
case MB_RIGHT:
// cycle mission texts
if ( mtext.Size() > 1 )
if ( (mtext.Size() > 1) && (sel < (mtext.Size()-1)) )
{
master.MenuSound("menu/demoscroll");
sel++;
if ( sel >= mtext.Size() ) sel = 0;
mtext[sel].smofs = mtext[sel].ofs;
mtext[sel].smofs = 0.;
mtext[sel].ofs = 0;
drag = false; // just in case
}
break;
@ -285,7 +313,7 @@ Class DemolitionistMissionTab : DemolitionistMenuTab
if ( mtext.Size() <= 1 ) return;
double xx = master.ws.x-(mtext[sel].scrollbar?11:3);
double yy = master.ws.y-25;
String str = String.Format("%d \cf/\c- %d",sel+1,mtext.Size());
String str = String.Format("%d \cf/\c- %d",mtext.Size()-sel,mtext.Size());
Screen.DrawText(master.mTinyFont,Font.CR_FIRE,(master.origin.x+xx)-master.mTinyFont.StringWidth(str),master.origin.y+yy,str,DTA_VirtualWidthF,master.ss.x,DTA_VirtualHeightF,master.ss.y,DTA_KeepRatio,true);
}
}

View file

@ -20,7 +20,7 @@ Class DemolitionistSecretTab : DemolitionistMenuTab
String str = StringTable.Localize("$SWWM_KIRINPOEM");
l = master.mSmallFont.BreakLines(str,600);
}
else if ( (gameinfo.gametype&GAME_Heretic) || SWWMUtility.IsEviternity() )
else if ( (gameinfo.gametype&GAME_Heretic) || SWWMUtility.IsEviternity() || SWWMUtility.IsEviternityTwo() )
{
img = TexMan.CheckForTexture("graphics/KBase/Drawing_Ibuki.png");
sub = StringTable.Localize("$SWWM_CUTIECLUB");