diff --git a/Achievements.md b/Achievements.md index 59ac665eb..ddc88bf96 100644 --- a/Achievements.md +++ b/Achievements.md @@ -43,10 +43,10 @@ - **Pest Control**: Obtain 100% kills in 30 maps. - **Premium Detective**: Obtain 100% secrets in 30 maps. - **Return to Sender**: Kill 50 enemies with parried projectiles. -- **Robutts Die Twice**: Reenact your favorite Souls-like. +- **Robutts Die Twice**: Die and reboot two times in the same map. - **Salutations**: Greet another player. - **Sayonara, Scumbag**: Wave at a dying enemy 20 times. -- **Shaped Like A Friend**: Befriend 50 Cacodemons with headpats. +- **Shaped Like A Friend**: Befriend 50 Cacodemons, Weredragons or Ettins with headpats. - **Sharing Is Caring**: Share items in multiplayer 50 times. - **Shockmaster**: Perform 50 Biospark combos. - **Slam Your Balls**: Land 100 Lead Ball crits. @@ -73,3 +73,12 @@ - **High Noon**: Land 6 killing shots in a single Puntzer Beta reload. - **The Most Silent Takedown**: Kill 50 enemies with the Ray-Khom primary without alerting anyone else. - **You Gained Brouzouf**: Unload an entire mag in fuller auto with the Puntzer Gamma without missing a single shot. + +### DLC Gameset achievements: + +- **Tetromination**: Complete a full game of Tetris. +- **Danny Won, Yeah**: Complete a full game of Pong. +- **Tsuchinoko Real**: Complete a full game of Snake. +- **Master of Platformers**: Complete a full game of Demo Land Adventure. +- **Master of SHMUPs**: Complete a full game of Interstellar Demolitionist. +- **Master of RPGs**: Complete a full game of Demolition Quest. \ No newline at end of file diff --git a/FuturePlans.md b/FuturePlans.md index 4fb3886f3..978d54f95 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -20,7 +20,14 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - **[Heretic]** Doomguy Action Figure *("Oh, he gets one too?")* - **[Hexen]** Obelisk of the Golden Vale *("I puked out my guts when I touched that fucking thing")* * ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** -* ***(Maybe)* Minigames for the Demolitionist Menu (pong, tetris, some sort of basic platformer or shmup)** +* **DLC Gameset:** + - Tetris + - Pong + - Snake + - ... maybe other small games + - **[Doom]** Demo Land Adventure (platformer with shooty gameplay) + - **[Heretic]** Interstellar Demolitionist (a somewhat simple SHMUP, kinda Touhou styled) + - **[Hexen]** Demolition Quest (a JRPG, kinda like early FF / BoF) * **Mothgirl summon for Lämp easter egg** * **Ibuki companion add-on *(w/ optional "stream friendly" clothing)*** * **Saya model, for scenes or something idk *(maybe a companion add-on too)*** diff --git a/Roadmap.md b/Roadmap.md index 5e39689f0..2400f24d7 100644 --- a/Roadmap.md +++ b/Roadmap.md @@ -10,17 +10,17 @@ - See if I can add those damn swimming anims. - Beg more artists for intermission fanart. - Stuff to maybe add during this stage: Explodium Guns akimbo, Quick grenade. - - Collectables. Froggy Chair was only the beginning. + - Collectibles. Froggy Chair was only the beginning. **Cutie Robutt Adventures:** - Going Gold™. - Think about the future. There are lots of things I could do now *(see FuturePlans.md)*. - - Maybe try to do the fancy titlemap now, mod trailer, etc. **Extra Funtimes:** - DLC weapons. + - DLC minigames. **LODS OF LORE:** @@ -29,7 +29,7 @@ **Funny Fellas:** - - Monster/decoration replacement packs. All of it modelled and tweaked to fit the style and theme of the mod. Expect enhanced enemy behaviour, not gonna keep it "vanilla". + - Monster/decoration replacement packs. All of it modeled and tweaked to fit the style and theme of the mod. Expect enhanced enemy behavior, not gonna keep it "vanilla". - Porting weapons to Hideous Destructor as a meme. **Fight for the Front and freedom. Move out!:** diff --git a/TODO.md b/TODO.md index 06e4dfb5e..b3cf93df9 100644 --- a/TODO.md +++ b/TODO.md @@ -12,7 +12,7 @@ - Mod trailer video (doubt I'd be able to, I might ask someone instead) - Rewrite the entire Demolitionist Menu code from the ground up to be more easily extensible and adapt to any window size - Hexen key and puzzle item models? - - Minigames? + - DLC gameset **Very extra things for the future:** diff --git a/language.version b/language.version index cd5b505be..77a2ef90a 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r608 \cu(Sat 7 Nov 10:27:26 CET 2020)"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r608 \cu(Sat 7 Nov 13:54:21 CET 2020)"; diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 5b67944c3..53808458f 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -1182,7 +1182,7 @@ Class SWWMHandler : EventHandler { if ( (e.Thing.IsFriend(e.DamageSource) || SWWMUtility.IsCivilian(e.DamageSource)) ) lastcombat = AddOneliner("friendhit",1,10); - else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,(e.DamageSource.bBOSS||e.DamageSource.bBOSSDEATH)?2:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls + else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.DamageSource.bBOSS?2:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls lastcombat = AddOneliner("gethit",1,15); } highesttic = gametic; @@ -1221,7 +1221,7 @@ Class SWWMHandler : EventHandler { if ( e.Thing.IsFriend(src) || SWWMUtility.IsCivilian(e.Thing) ) lastcombat = AddOneliner("friendkill",1,5); - else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,(e.Thing.bBOSS||e.Thing.bBOSSDEATH)?2:5) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls + else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.Thing.bBOSS?2:5) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls lastcombat = AddOneliner("scorekill",1,15); } } @@ -1411,9 +1411,10 @@ Class SWWMHandler : EventHandler e.Thing.A_SetSize(20,40); e.Thing.bNOBLOOD = true; } - else if ( SWWMUtility.IdentifyingDog(e.Thing) || SWWMUtility.IdentifyingCaco(e.Thing) ) + else if ( SWWMUtility.IdentifyingDog(e.Thing) || SWWMUtility.IdentifyingCaco(e.Thing) + || SWWMUtility.IdentifyingDrug(e.Thing) || SWWMUtility.IdentifyingDoubleBoi(e.Thing) ) { - // you can pet the dog, and you can also pet the caco + // you can pet the dog, and you can also pet the caco (and friends) let hp = Actor.Spawn("HeadpatTracker",e.Thing.pos); hp.target = e.Thing; } diff --git a/zscript/swwm_hud.zsc b/zscript/swwm_hud.zsc index be261f4b8..85beb88fa 100644 --- a/zscript/swwm_hud.zsc +++ b/zscript/swwm_hud.zsc @@ -734,6 +734,8 @@ Class SWWMStatusBar : BaseStatusBar if ( StringTable.Localize("$SWWM_LEGPREFIX") == "R" ) tag = tag..StringTable.Localize("$SWWM_LEG"); else tag = StringTable.Localize("$SWWM_LEG")..tag; } + if ( targ.bBOSS ) tag = "\cx★\c- "..tag.." \cx★\c-"; + if ( targ.bFRIENDLY ) tag = "\cg♥\c- "..tag.." \cg♥\c-"; int mtime = 35; if ( thesight && (targ.lasthealth > 0) ) mtime += 105; double alph = clamp(((targ.updated+mtime)-level.maptime)/35.,0.,1.); diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 191992f0a..9c87609fb 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -3213,6 +3213,14 @@ Class SWWMGesture : SWWMWeapon t.bCOUNTKILL = false; level.total_monsters--; } + if ( t.special && !(t.ActivationType&THINGSPEC_NoDeathSpecial) ) + { + Actor whomst = level.actownspecial?t:self; + if ( t.ActivationType&THINGSPEC_ThingActs ) whomst = t; + else if ( t.ActivationType&THINGSPEC_TriggerActs ) whomst = self; + level.ExecuteSpecial(t.special,whomst,null,false,t.args[0],t.args[1],t.args[2],t.args[3],t.args[4]); + t.special = 0; + } t.bFRIENDLY = true; if ( deathmatch ) t.SetFriendPlayer(player); diff --git a/zscript/swwm_thinkers.zsc b/zscript/swwm_thinkers.zsc index f53ceb057..a6d76c7c7 100644 --- a/zscript/swwm_thinkers.zsc +++ b/zscript/swwm_thinkers.zsc @@ -789,6 +789,7 @@ Class SWWMCombatTracker : Thinker int tcnt; double height; transient CVar funtags, maxdist; + bool bBOSS, bFRIENDLY; void UpdateTag() { @@ -827,7 +828,7 @@ Class SWWMCombatTracker : Thinker } else t.lasthealth = t.maxhealth = target.health; t.updated = int.min; - t.height = t.mytarget.height; + t.height = target.height; t.pos = level.Vec3Offset(target.pos,(0,0,t.height)); t.prevpos = level.Vec3Offset(target.prev,(0,0,t.height)); t.oldpos = target.pos; @@ -835,6 +836,8 @@ Class SWWMCombatTracker : Thinker t.intp = DynamicValueInterpolator.Create(t.lasthealth,.5,1,100); t.myplayer = target.player; t.next = hnd.trackers; + t.bBOSS = target.bBOSS; + t.bFRIENDLY = target.bFRIENDLY; if ( hnd.trackers ) hnd.trackers.prev = t; hnd.trackers = t; hnd.trackers_cnt++; @@ -920,6 +923,8 @@ Class SWWMCombatTracker : Thinker Console.Printf(StringTable.Localize("$SWWM_LTFORM"),mytag); } } + bBOSS = mytarget.bBOSS|(maxhealth>1000); + bFRIENDLY = mytarget.bFRIENDLY; lasthealth = mytarget.Health; intp.Update(lasthealth); if ( !maxdist ) maxdist = CVar.GetCVar('swwm_maxtargetdist',players[consoleplayer]); diff --git a/zscript/swwm_utility.zsc b/zscript/swwm_utility.zsc index b4b90753e..e8bf9e395 100644 --- a/zscript/swwm_utility.zsc +++ b/zscript/swwm_utility.zsc @@ -874,6 +874,19 @@ Class SWWMUtility if ( a.Species == 'Caco' ) return true; // CH return false; } + + // Друг + static clearscope bool IdentifyingDrug( Actor a ) + { + if ( a is 'Beast' ) return true; + return false; + } + + static clearscope bool IdentifyingDoubleBoi( Actor a ) + { + if ( a is 'Ettin' ) return true; + return false; + } } Class RadiusDebugSphere : Actor