Major achievement progress.

This commit is contained in:
Mari the Deer 2021-03-24 02:25:38 +01:00
commit f5c9733c65
41 changed files with 868 additions and 276 deletions

View file

@ -19,6 +19,7 @@ extend Class SWWMHandler
S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI);
S_StartSound("misc/emone",CHAN_VOICE,CHANF_UI);
}
SWWMCredits.HasCheated(players[e.Args[0]]);
SWWMCredits.Give(players[e.Args[0]],1000000000);
SWWMScoreObj.Spawn(1000000000,players[e.Args[0]].mo.Vec3Offset(0,0,players[e.Args[0]].mo.Height/2));
}
@ -341,6 +342,7 @@ extend Class SWWMHandler
if ( kstr != cht[i].Left(kstr.length()) ) continue;
matchany = true;
if ( kstr != cht[i] ) continue;
if ( i > 4 ) SWWMUtility.MarkAchievement('swwm_achievement_cheat',players[consoleplayer]);
if ( SWWMUtility.CheatsDisabled(consoleplayer) )
{
kfail = true;

View file

@ -101,6 +101,7 @@ extend Class SWWMHandler
s.AddDamageDealt(e.Damage);
if ( e.Damage > s.topdealt ) s.topdealt = e.Damage;
}
SWWMFlyTracker.Track(e.Thing,e.DamageSource);
}
}
@ -156,6 +157,25 @@ extend Class SWWMHandler
lastcombat = AddOneliner("scorekill",1,15);
}
}
// achievement stuff
if ( e.Thing.IsHostile(src) )
{
if ( e.Thing.bBOSS && ((e.DamageType == 'Dash') || (e.DamageType == 'Buttslam')) )
SWWMUtility.AchievementProgressInc('swwm_progress_bossdash',1,src.player);
if ( e.DamageType == 'Push' )
SWWMUtility.AchievementProgressInc('swwm_progress_sneeze',1,src.player);
else if ( e.DamageType == 'Buttslam' )
SWWMUtility.AchievementProgressInc('swwm_progress_butts',1,src.player);
else if ( e.DamageType == 'Jump' )
SWWMUtility.AchievementProgressInc('swwm_progress_stomp',1,src.player);
else if ( e.DamageType == 'GroundPound' )
SWWMUtility.AchievementProgressInc('swwm_progress_thicc',1,src.player);
else if ( (e.DamageType == 'Love') && !(e.Thing is 'WolfensteinSS') )
SWWMUtility.AchievementProgressInc('swwm_progress_love',1,src.player);
if ( e.Inflictor && e.Inflictor.FindInventory('ParriedBuff') )
SWWMUtility.AchievementProgressInc('swwm_progress_reflect',1,src.player);
SWWMUtility.AchievementProgressInc('swwm_progress_mega',1,src.player);
}
// no credits unless it's a counted kill or marine (that isn't friendly)
if ( e.Thing.IsFriend(src) || (!e.Thing.default.bCountKill && !(e.Thing is 'ScriptedMarine')) )
return;
@ -236,6 +256,7 @@ extend Class SWWMHandler
scr.xstr[ofs] = StringTable.Localize("$SWWM_OVERKILL");
scr.xcnt = ++ofs;
}
SWWMUtility.AchievementProgressInc('swwm_progress_gib',1,src.player);
}
score = int(score*(1.+.5*min(multilevel[pnum],16)));
if ( (multilevel[pnum] > 0) && scr )
@ -281,6 +302,7 @@ extend Class SWWMHandler
SWWMCredits.Give(src.player,1000);
Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER"),src.player.GetUserName(),1000);
SWWMScoreObj.Spawn(1000,src.Vec3Offset(0,0,src.Height/2));
SWWMUtility.AchievementProgressInc('swwm_progress_allkills',1,src.player);
}
}

View file

@ -1,5 +1,7 @@
// vanilla boss stuff
Class EndgameBossMarker : Inventory {}
extend Class SWWMHandler
{
String bosstag;
@ -131,6 +133,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 6;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('EndgameBossMarker',1);
}
bosstag = "$BT_SPIDER";
}
@ -162,6 +165,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 40; // goodbye, instakills
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('EndgameBossMarker',1);
}
if ( e.Thing is 'BossEye' )
bossviewactor = e.Thing;
@ -195,6 +199,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 2;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DSPARIL";
e.Thing.GiveInventory('EndgameBossMarker',1);
}
else if ( e.Thing is 'Sorcerer2' )
{
@ -205,6 +210,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 8;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DSPARIL2";
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
else if ( bossmap == MAP_HMAP38 )
@ -265,6 +271,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 10;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_KORAX";
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
else if ( bossmap == MAP_HMAP60 )
@ -276,6 +283,7 @@ extend Class SWWMHandler
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DEATHKINGS";
initialized = true; // healthbar shows from the start
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
else if ( bossmap == MAP_EVMAP30 )
@ -286,6 +294,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_ARCHANGELUS";
e.Thing.GiveInventory('EndgameBossMarker',1);
}
else if ( e.Thing.GetClassName() == "ArchangelusB" )
{
@ -296,6 +305,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_ARCHANGELUS";
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
}

View file

@ -9,6 +9,8 @@ extend Class SWWMHandler
// for minimap
Array<int> ffsectors;
Array<Key> mapkeys;
// level end stats
override void WorldUnloaded( WorldEvent e )
{
@ -70,6 +72,21 @@ extend Class SWWMHandler
players[i].mo.GiveInventory("InventoryWipeToken",1);
}
}
// did we complete this map without collecting any of its keys? (doesn't work for hubs)
if ( (mapkeys.Size() > 0) && !(level.clusterflags&LevelLocals.CLUSTER_HUB) )
{
bool collected = false;
for ( int i=0; i<mapkeys.Size(); i++ )
{
if ( !mapkeys[i].Owner || !mapkeys[i].Owner.player ) continue;
collected = true;
break;
}
if ( !collected ) SWWMUtility.MarkAchievement('swwm_achievement_cliffyb',players[consoleplayer]);
}
// beat the par time?
if ( level.partime && (Thinker.Tics2Seconds(level.maptime) <= level.partime) )
SWWMUtility.AchievementProgressInc('swwm_progress_par',1,players[consoleplayer]);
}
private void SetupLockdefsCache( SWWMCachedLockInfo cli )
@ -249,5 +266,13 @@ extend Class SWWMHandler
}
// spawn loot
Chancebox.SpawnChanceboxes();
// list map keys
let ti = ThinkerIterator.Create("Key");
Key k;
while ( k = Key(ti.Next()) )
{
if ( k.Owner ) continue;
mapkeys.Push(k);
}
}
}

View file

@ -55,6 +55,7 @@ extend Class SWWMHandler
allitems = true;
Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),500);
score += 490;
SWWMUtility.AchievementProgressInc('swwm_progress_allitems',1,players[i]);
}
SWWMCredits.Give(players[i],score);
SWWMScoreObj.Spawn(score,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2));
@ -189,6 +190,15 @@ extend Class SWWMHandler
}
}
mapclearagain++;
if ( !iwantdie ) return;
let ti = ThinkerIterator.Create("SWWMStats",Thinker.STAT_STATIC);
SWWMStats s;
while ( s = SWWMStats(ti.Next()) )
{
if ( s.deaths > 0 )
return;
}
SWWMUtility.MarkAchievement('swwm_achievement_wantdie',players[consoleplayer]);
}
// "simple" tracking (used by the minimap)

View file

@ -1,56 +1,55 @@
// achievement tracking
// constants for finetuning them numbers
const SA_GCSANDWICH = 40;
const SA_GHOST = 30;
const SA_ALLITEMS = 75;
const SA_CONGA = 25;
const SA_EXPLOGUN = 5;
const SA_GRAVITY = 20;
const SA_FLIGHT = 1000;
const SA_PAR = 25;
const SA_GCSANDWICH = 25;
const SA_GHOST = 25;
const SA_ALLITEMS = 30;
const SA_CONGA = 15;
const SA_EXPLOGUN = 7;
const SA_GRAVITY = 25;
const SA_FLIGHT = 2000;
const SA_PAR = 30;
const SA_GOLDEN = 24;
const SA_GIB = 500;
const SA_BARRIER = 30;
const SA_BOSSDASH = 20;
const SA_SNEEZE = 50;
const SA_FUEL = 200;
const SA_BARRIER = 25;
const SA_BOSSDASH = 10;
const SA_SNEEZE = 20;
const SA_FUEL = 400;
const SA_SLAYER = 40;
const SA_STOMP = 50;
const SA_THRUWALL = 30;
const SA_THRUWALL = 25;
const SA_LEAD = 1500;
const SA_LOVE = 50;
const SA_LOVE = 20;
const SA_BUTTS = 100;
const SA_PLUSH = 20;
const SA_BUSTIN = 40;
const SA_MOTH = 60;
const SA_BRAKE = 30;
const SA_RAGE = 40;
const SA_MOTH = 50;
const SA_BRAKE = 20;
const SA_RAGE = 25;
const SA_PARRY = 100;
const SA_ALLKILLS = 100;
const SA_ALLSECRETS = 50;
const SA_REFLECT = 50;
const SA_WAVE = 20;
const SA_FRIEND = 60;
const SA_SHOCK = 50;
const SA_BALLS = 30;
const SA_REFRESH = 40;
const SA_ALLKILLS = 30;
const SA_ALLSECRETS = 30;
const SA_REFLECT = 20;
const SA_FRIEND = 30;
const SA_SHOCK = 30;
const SA_BALLS = 10;
const SA_REFRESH = 25;
const SA_STEP = 60;
const SA_SUNNY = 30;
const SA_SUNNY = 25;
const SA_THICC = 80;
const SA_SLEMG = 100;
const SA_JUMP = 100;
const SA_EZKILL = 200;
const SA_SLEMG = 50;
const SA_JUMP = 80;
const SA_EZKILL = 100;
const SA_ROAST = 30;
const SA_DAB = 60;
const SA_DAB = 100;
const SA_HND = 6;
const SA_GEPGUN = 50;
const SA_GEPGUN = 30;
const SA_PENE = 20;
const SA_ACID = 200;
const SA_ACID = 100;
const SA_SANIC = 800;
const SA_BUNE = 150;
const SA_BONK = 300;
const SA_ANOM = 40;
const SA_ANOM = 25;
// achievement unlock tracking
extend Class SWWMStaticHandler
@ -84,6 +83,7 @@ extend Class SWWMStaticHandler
else if ( ac == 'swwm_achievement_dakka' ) maxval = 60;
else if ( ac == 'swwm_achievement_dosh' ) maxval = 1000000000;
else if ( ac == 'swwm_achievement_mega' ) maxval = 1000000;
else if ( ac == 'swwm_achievement_iwad' ) maxval = 7;
if ( val && (prog < maxval) )
{
ev.SetInt(0);
@ -194,7 +194,8 @@ extend Class SWWMStaticHandler
'swwm_achievement_snake',
'swwm_achievement_smb',
'swwm_achievement_tyrian',
'swwm_achievement_bof'
'swwm_achievement_bof',
'swwm_achievement_wantdie'
};
// localized name
static const String names[] =
@ -280,7 +281,8 @@ extend Class SWWMStaticHandler
"$SWWM_ACHIEVEMENT_SNAKE",
"$SWWM_ACHIEVEMENT_SMB",
"$SWWM_ACHIEVEMENT_TYRIAN",
"$SWWM_ACHIEVEMENT_BOF"
"$SWWM_ACHIEVEMENT_BOF",
"$SWWM_ACHIEVEMENT_WANTDIE"
};
// has number in txt
static const int number[] =
@ -328,7 +330,7 @@ extend Class SWWMStaticHandler
SA_ALLSECRETS,
SA_REFLECT,
0, // SEKIRO
SA_WAVE,
0, // WAVE
SA_FRIEND,
SA_SHOCK,
SA_BALLS,
@ -366,7 +368,8 @@ extend Class SWWMStaticHandler
0, // SNAKE
0, // SMB
0, // TYRIAN
0 // BOF
0, // BOF
0 // WANTDIE
};
// is ignored (hide away achievements that can't be done yet)
static const bool ignoreme[] =
@ -452,93 +455,95 @@ extend Class SWWMStaticHandler
true, // SNAKE
true, // SMB
true, // TYRIAN
true // BOF
true, // BOF
false // WANTDIE
};
// progress tracking cvar (if any)
static const Name pvar[] =
{
'swwm_progress_gcsandwich', // GCSANDWICH
'swwm_progress_gcsandwich',
'None', // HDOOM
'None', // ONESTANDING
'None', // OOPSIE
'swwm_progress_ghost', // GHOST
'swwm_progress_ghost',
'None', // CLONK
'swwm_progress_allitems', // ALLITEMS
'swwm_progress_conga', // CONGA
'swwm_progress_explogun', // EXPLOGUN
'swwm_progress_gravity', // GRAVITY
'swwm_progress_flight', // FLIGHT
'swwm_progress_allitems',
'swwm_progress_conga',
'swwm_progress_explogun',
'swwm_progress_gravity',
'swwm_progress_flight',
'None', // CLIFFYB
'swwm_progress_par', // PAR
'swwm_progress_par',
'None', // ONEGUY
'swwm_progress_golden', // GOLDEN
'swwm_progress_gib', // GIB
'swwm_progress_barrier', // BARRIER
'swwm_progress_bossdash', // BOSSDASH
'swwm_progress_sneeze', // SNEEZE
'swwm_progress_fuel', // FUEL
'swwm_progress_slayer', // SLAYER
'swwm_progress_golden',
'swwm_progress_gib',
'swwm_progress_barrier',
'swwm_progress_bossdash',
'swwm_progress_sneeze',
'swwm_progress_fuel',
'swwm_progress_slayer',
'None', // BROCCOLIDOCCOLI
'None', // DIME
'swwm_progress_stomp', // STOMP
'swwm_progress_stomp',
'None', // CHEAT
'None', // GOD
'swwm_progress_thruwall', // THRUWALL
'swwm_progress_thruwall',
'None', // MASHIRO
'swwm_progress_lead', // LEAD
'swwm_progress_love', // LOVE
'swwm_progress_butts', // BUTTS
'swwm_progress_plush', // PLUSH
'swwm_progress_bustin', // BUSTIN
'swwm_progress_moth', // MOTH
'None', // IWAD
'swwm_progress_lead',
'swwm_progress_love',
'swwm_progress_butts',
'swwm_progress_plush',
'swwm_progress_bustin',
'swwm_progress_moth',
'swwm_progress_iwad',
'swwm_progress_brake', // BRAKE
'swwm_progress_rage', // RAGE
'swwm_progress_rage',
'None', // ABORT
'swwm_progress_parry', // PARRY
'swwm_progress_allkills', // ALLKILLS
'swwm_progress_allsecrets', // ALLSECRETS
'swwm_progress_reflect', // REFLECT
'swwm_progress_parry',
'swwm_progress_allkills',
'swwm_progress_allsecrets',
'swwm_progress_reflect',
'None', // SEKIRO
'swwm_progress_wave', // WAVE
'swwm_progress_friend', // FRIEND
'swwm_progress_shock', // SHOCK
'swwm_progress_balls', // BALLS
'swwm_progress_refresh', // REFRESH
'swwm_progress_step', // STEP
'swwm_progress_sunny', // SUNNY
'swwm_progress_thicc', // THICC
'swwm_progress_allcoll', // ALLCOLL
'swwm_progress_slemg', // SLEMG
'swwm_progress_dosh', // DOSH
'swwm_progress_jump', // JUMP
'swwm_progress_ezkill', // EZKILL
'None', // WAVE
'swwm_progress_friend',
'swwm_progress_shock',
'swwm_progress_balls',
'swwm_progress_refresh',
'swwm_progress_step',
'swwm_progress_sunny',
'swwm_progress_thicc',
'swwm_progress_allcoll',
'swwm_progress_slemg',
'swwm_progress_dosh',
'swwm_progress_jump',
'swwm_progress_ezkill',
'None', // LIGMA
'None', // YEET
'None', // MBF
'None', // LIGHTNING
'swwm_progress_dakka', // DAKKA
'swwm_progress_roast', // ROAST
'swwm_progress_dab', // DAB
'swwm_progress_hnd', // HND
'swwm_progress_gepgun', // GEPGUN
'swwm_progress_dakka',
'swwm_progress_roast',
'swwm_progress_dab',
'swwm_progress_hnd',
'swwm_progress_gepgun',
'None', // FULLER
'swwm_progress_pene', // PENE
'swwm_progress_acid', // ACID
'swwm_progress_pene',
'swwm_progress_acid',
'None', // SALT
'swwm_progress_mega', // MEGA
'swwm_progress_sanic', // SANIC
'swwm_progress_mega',
'swwm_progress_sanic',
'None', // TELE
'swwm_progress_bune', // BUNE
'swwm_progress_bonk', // BONK
'swwm_progress_anom', // ANOM
'swwm_progress_bune',
'swwm_progress_bonk',
'swwm_progress_anom',
'None', // ANONE
'None', // TETRIS
'None', // PONG
'None', // SNAKE
'None', // SMB
'None', // TYRIAN
'None' // BOF
'None', // BOF
'None' // WANTDIE
};
bool alldone = true;
for ( int i=0; i<vars.Size(); i++ )