Allow selling excess weapons/powerups.
Change of plans for one DLC weapon choice. Various small fixes and tweaks. Doubled price of Ynykron, since it was too cheap. Fixed Candygun spares not being picked up in coop. Add option to toggle menu fuzz, for streamers concerned about bitrate. Add MAP07 enemies to the vanilla boss enhancer.
This commit is contained in:
parent
d49e9dc466
commit
af1df2e18d
24 changed files with 197 additions and 44 deletions
|
|
@ -4,10 +4,10 @@ after the first release.
|
|||
* DLC Weapon Set:
|
||||
- Itamex Reinforced Hammer (UnSX 5)
|
||||
- Gravity Gun (Ultra Suite)
|
||||
- Splatter (SWWM)
|
||||
- Puntzer Gamma (Ultra Suite 2)
|
||||
- Skull Launcher (Weirdweapons)
|
||||
- Blackfire Igniter (UnSX 5, Ultra Suite 3)
|
||||
- Puntzer Gamma (Ultra Suite 2)
|
||||
- Sparkster x3 (UnSX 2)
|
||||
- Rail Carbine ("Tesla Beamer" in Ultra Suite 2 & 3)
|
||||
- PROWEL & TADEL (Ultra Suite 2 & 3)
|
||||
- Super Happy Fun Ball (SWWM Z)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ respective weapon.
|
|||
Candygun | 1000000
|
||||
Candy Mag | 100000
|
||||
Spare Gun | 600000
|
||||
Ynykron | 2500000
|
||||
Ynykron | 5000000
|
||||
Crystal Unit | 1000000
|
||||
|
||||
#### DLC weapons and ammo (when available)
|
||||
|
|
@ -62,7 +62,7 @@ These will be available long after the first release.
|
|||
EMP Core | 60000
|
||||
PROWEL&TADEL | 1600000
|
||||
Insane Core | 150000
|
||||
S.H. Fun Ball | 2000000
|
||||
S.H. Fun Ball | 4000000
|
||||
Fun Stuff | 800000
|
||||
|
||||
#### Other items
|
||||
|
|
|
|||
2
TODO.md
2
TODO.md
|
|
@ -18,7 +18,7 @@ Extra things:
|
|||
- A background with a bit more flair than just the fuzz shader.
|
||||
- Some sort of flyby featuring the Demolitionist booting up, closeups of
|
||||
weapons/items etc.
|
||||
- Dual wielding Explodium Gun?
|
||||
- Dual wielding Explodium Gun
|
||||
- Randomized vanilla monster retagging with multiple options
|
||||
- Japanese localization
|
||||
- Keen replacement (need ideas)
|
||||
|
|
|
|||
|
|
@ -51,3 +51,4 @@ user int swwm_barscale = 0; // target healthbar scaling (0 = use GZDoom scalin
|
|||
user int swwm_scrscale = 0; // score scaling (0 = use GZDoom scaling)
|
||||
user int swwm_numscale = 0; // damnum scaling (0 = use GZDoom scaling)
|
||||
server bool swwm_blood = false; // custom blood/gibbing
|
||||
user bool swwm_fuzz = true; // allows toggling the fuzz shader on the demolitionist menus, useful if you're streaming/recording since it destroys the encoding quality
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ I_PUSHER = "\"Pusher\" Microfusion Rotary Hammer";
|
|||
T_DEEPIMPACT = "Deep Impact";
|
||||
I_DEEPIMPACT = "\"Deep Impact\" Airblaster";
|
||||
T_EXPLODIUM = "Explodium Gun";
|
||||
T_EXPLODIUM2 = "Explodium Guns";
|
||||
T_SPREADGUN = "Spreadgun";
|
||||
I_SPREADGUN = "\"Rhino Stopper\" Spreadgun";
|
||||
T_WALLBUSTER = "Wallbuster";
|
||||
|
|
@ -656,6 +657,7 @@ D_FROGGY2 = "\cj... for \cdFroggy Chair\cj.\c-";
|
|||
BT_BRUISERS = "Super Bruiser Bros";
|
||||
BT_CYBIE = "Shoot It Until It Dies";
|
||||
BT_SPIDER = "Big Brains Idiot";
|
||||
BT_DIMPLE = "Lard Lads and Spidey Squad";
|
||||
BT_IOS = "Goaty McGoatface";
|
||||
BT_LICHES = "The Jolly Lad Squad";
|
||||
BT_MINOTAUR = "AWAKEN MY MASTERS";
|
||||
|
|
@ -672,7 +674,6 @@ SWWM_OVERKILL = "Overkill";
|
|||
SWWM_MULTIKILL = "Multi Kill";
|
||||
SWWM_SPREEKILL = "Untouchable";
|
||||
SWWM_BOSSKILL = "Boss Kill";
|
||||
SWWM_MAX = "MAX";
|
||||
SWWM_EXIT = "Exit: ";
|
||||
SWWM_NEXIT = "Exit";
|
||||
SWWM_SEXIT = "Secret Exit";
|
||||
|
|
@ -685,6 +686,7 @@ SWWM_LASTSECRET = "\cf%s\cf found the last secret. +%d\c-";
|
|||
SWWM_LASTITEM = "\cf%s\cf got the last item. +%d\c-";
|
||||
SWWM_LASTMONSTER = "\cf%s\cf killed the last monster. +%d\c-";
|
||||
SWWM_NEWLORE = "New entries have been added to the Library.";
|
||||
SWWM_SELLEXTRA = "\cf%s\cf sold an extra %s\cf. +%d\c-";
|
||||
// intermission tips
|
||||
SWWM_NINTERTIP = "30";
|
||||
SWWM_INTERTIP = "Tip #%d:";
|
||||
|
|
|
|||
|
|
@ -94,6 +94,7 @@ SWWM_NUMSCALE = "Number Scaling";
|
|||
SWWM_SCRSCALE = "Score Scaling";
|
||||
SWWM_GZSCALE = "Use GZDoom Setting";
|
||||
SWWM_BLOOD = "Enable Custom Blood";
|
||||
SWWM_FUZZ = "Enable Animated Menu BG";
|
||||
TOOLTIP_SWWM_VOICETYPE = "Sets the voice pack for the player.";
|
||||
TOOLTIP_SWWM_MUTEVOICE = "Control what gets muted, if you'd rather have a more silent protagonist.";
|
||||
TOOLTIP_SWWM_FLASHSTRENGTH = "Screen flashes usually happen when firing some weapons, you can lower this if these effects are harmful for you.";
|
||||
|
|
@ -135,7 +136,8 @@ TOOLTIP_SWWM_HUDSCALE = "Scaling factor of the HUD. Set to 0 to use GZDoom's own
|
|||
TOOLTIP_SWWM_BARSCALE = "Scaling factor for targetter healthbars. Set to 0 to use GZDoom's own HUD scaling.";
|
||||
TOOLTIP_SWWM_NUMSCALE = "Scaling factor for damage/healing numbers. Set to 0 to use GZDoom's own HUD scaling.";
|
||||
TOOLTIP_SWWM_SCRSCALE = "Scaling factor for score numbers. Set to 0 to use GZDoom's own HUD scaling.";
|
||||
TOOLTIP_SWWM_BLOOD = "Please note that these effects are kinda cheap. I'd honestly recommend Nashgore instead, it's better.";
|
||||
TOOLTIP_SWWM_BLOOD = "Please note that these effects are kinda cheap and performance heavy. I'd honestly recommend Nashgore instead, it's better.";
|
||||
TOOLTIP_SWWM_FUZZ = "Toggling this off is recommended if you're recording/streaming as this effect can harm video quality.";
|
||||
// knowledge base
|
||||
SWWM_COMINGSOON = "(coming soon)";
|
||||
SWWM_MISSTAB = "Mission";
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
I_PUSHER = "Taladro Percutor de Microfusión \"Pusher\"";
|
||||
I_DEEPIMPACT = "Pistola de Aire \"Deep Impact\"";
|
||||
T_EXPLODIUM = "Pistola de Explodium";
|
||||
T_EXPLODIUM2 = "Pistolas de Explodium";
|
||||
T_SPREADGUN = "Trabuco";
|
||||
I_SPREADGUN = "Trabuco \"Rhino Stopper\"";
|
||||
I_WALLBUSTER = "Escopeta Pesada Perforadora \"Wallbuster\"";
|
||||
|
|
@ -644,6 +645,7 @@ D_FROGGY2 = "\cj... por una \cdSilla Rana\cj.\c-";
|
|||
// boss tags
|
||||
BT_CYBIE = "Dispara Hasta Que Muera";
|
||||
BT_SPIDER = "Cerebrito Idiota";
|
||||
BT_DIMPLE = "Gordos Grasientos y Armada Arácnida";
|
||||
BT_IOS = "Cabra Emparedada";
|
||||
BT_LICHES = "El Escuadrón Risitas";
|
||||
BT_DSPARIL = "El Brujo Rojo Ese y Lagarto";
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ SWWM_NUMSCALE = "Escala de Números";
|
|||
SWWM_SCRSCALE = "Escala de Puntuaciones";
|
||||
SWWM_GZSCALE = "Usar Opción de GZDoom";
|
||||
SWWM_BLOOD = "Habilitar Sangre Personalizada";
|
||||
SWWM_FUZZ = "Habilitar Fondo Animado de Menú";
|
||||
TOOLTIP_SWWM_VOICETYPE = "Selecciona el pack de voz para el jugador.";
|
||||
TOOLTIP_SWWM_MUTEVOICE = "Controla lo que se mutea, si prefieres tener un protagonista más silencioso.";
|
||||
TOOLTIP_SWWM_FLASHSTRENGTH = "Los destellos en pantalla suelen ocurrir al disparar algunas armas, puedes reducirlo si este tipo de effectos te causan malestar.";
|
||||
|
|
@ -132,7 +133,8 @@ TOOLTIP_SWWM_HUDSCALE = "Factor de escalado del HUD. Pon a 0 para usar el escala
|
|||
TOOLTIP_SWWM_BARSCALE = "Factor de escalado para las barras de salud. Pon a 0 para usar el escalado de HUD de GZDoom.";
|
||||
TOOLTIP_SWWM_NUMSCALE = "Factor de escalado para los números de daño/salud. Pon a 0 para usar el escalado de HUD de GZDoom.";
|
||||
TOOLTIP_SWWM_SCRSCALE = "Factor de escalado para los números de puntuación. Pon a 0 para usar el escalado de HUD de GZDoom.";
|
||||
TOOLTIP_SWWM_BLOOD = "Ten en cuenta que estos efectos son un poco cutres. Sinceramente, recomendaría usar Nashgore, es mejor.";
|
||||
TOOLTIP_SWWM_BLOOD = "Ten en cuenta que estos efectos son un poco cutres y bajan los frames. Sinceramente, recomendaría usar Nashgore, es mejor.";
|
||||
TOOLTIP_SWWM_FUZZ = "Desactivar ésto es recomendado si estás grabando o haciendo streaming, ya que este effecto puede dañar la calidad del vídeo.";
|
||||
// knowledge base
|
||||
SWWM_COMINGSOON = "(próximamente)";
|
||||
SWWM_MISSTAB = "Misión";
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
[default]
|
||||
SWWM_MODVER="\cxSWWM GZ\c- r246 (Sun 17 May 20:50:55 CEST 2020)";
|
||||
SWWM_MODVER="\cxSWWM GZ\c- r248 (Tue 19 May 14:30:35 CEST 2020)";
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ OptionMenu "SWWMOptionMenu"
|
|||
ScaleSlider "$SWWM_SCRSCALE", "swwm_scrscale", 0, 8, 1, "$SWWM_GZSCALE"
|
||||
Option "$SWWM_SHADERS", "swwm_shaders", "YesNo"
|
||||
Option "$SWWM_INTERTYPE", "swwm_intertype", "SWWMInterType"
|
||||
Option "$SWWM_FUZZ", "swwm_fuzz", "YesNo"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_BTITLE", "Gold"
|
||||
Option "$SWWM_EXTRAALERT", "swwm_extraalert", "YesNo"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ Class GravityCell : Ammo
|
|||
{
|
||||
}
|
||||
|
||||
Class SplatCore : Ammo
|
||||
Class SMW05Ammo : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -20,7 +20,11 @@ Class DarkCanister : Ammo
|
|||
{
|
||||
}
|
||||
|
||||
Class SMW05Ammo : Ammo
|
||||
Class KinylumUnit : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class NokronUnit : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
6
zscript/dlc/swwm_sparkety.zsc
Normal file
6
zscript/dlc/swwm_sparkety.zsc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
// Tach-Engine Technologies Series x3 Sparkster Carbine (UnSX 2)
|
||||
// Slot 7, spawns shared with Legacy Sparkster
|
||||
|
||||
Class ModernSparkster : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
// Dr. Locke's Instant Room Painter aka "Splatter" (from SWWM Series)
|
||||
// Slot 4, spawns shared with Wallbuster
|
||||
|
||||
Class Splatter : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
// Blackmann Arms "Puntzer Gamma" SMW.05 Assault Carbine (was planned for SWWM Z)
|
||||
// Slot 7, spawns shared with Legacy Sparkster
|
||||
// Slot 4, spawns shared with Wallbuster
|
||||
|
||||
Class PuntzerGamma : SWWMWeapon
|
||||
{
|
||||
|
|
|
|||
|
|
@ -209,6 +209,11 @@ Class SWWMUtility
|
|||
a.roll = -fpitch*ddiff1;
|
||||
a.angle = dang;
|
||||
}
|
||||
|
||||
static clearscope int Round100( double x )
|
||||
{
|
||||
return int(ceil(x/100.)*100.);
|
||||
}
|
||||
}
|
||||
|
||||
// Stats
|
||||
|
|
@ -805,7 +810,7 @@ Class SWWMCombatTracker : Thinker
|
|||
t = new("SWWMCombatTracker");
|
||||
t.ChangeStatNum(STAT_USER);
|
||||
t.mytarget = target;
|
||||
if ( target.player || target.bISMONSTER )
|
||||
if ( target.player || target.bISMONSTER || (target is 'BossBrain') )
|
||||
t.mytag = target.player?target.player.GetUserName():target.GetTag();
|
||||
else t.mytag = "";
|
||||
if ( target.player )
|
||||
|
|
@ -897,6 +902,11 @@ Class SWWMCombatTracker : Thinker
|
|||
// any visible enemies within 600mu
|
||||
if ( (mytarget.Vec3To(players[consoleplayer].mo).length() < 600) && players[consoleplayer].mo.CheckSight(mytarget) ) updated = level.maptime;
|
||||
}
|
||||
else if ( mytarget is 'BossBrain' )
|
||||
{
|
||||
// teh romero, only if visible
|
||||
if ( (mytarget.Vec3To(players[consoleplayer].mo).length() < 600) && players[consoleplayer].mo.CheckSight(mytarget) ) updated = level.maptime;
|
||||
}
|
||||
lasthealth = newhealth;
|
||||
intp.Update(lasthealth);
|
||||
}
|
||||
|
|
@ -2328,11 +2338,14 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
if ( spawnme ) SWWMScoreObj.Spawn(-e.Damage,e.Thing.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+e.Thing.Height/2),Font.CR_RED,e.Thing);
|
||||
// update combat tracker for it
|
||||
for ( SWWMCombatTracker t=trackers; t; t=t.next )
|
||||
if ( !(e.Thing is 'BossBrain') )
|
||||
{
|
||||
if ( t.mytarget != e.Thing ) continue;
|
||||
t.updated = level.maptime+35;
|
||||
break;
|
||||
for ( SWWMCombatTracker t=trackers; t; t=t.next )
|
||||
{
|
||||
if ( t.mytarget != e.Thing ) continue;
|
||||
t.updated = level.maptime+35;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( e.Thing.player )
|
||||
|
|
@ -2415,7 +2428,7 @@ Class SWWMHandler : EventHandler
|
|||
{
|
||||
scr.xscore[ofs] = 0;
|
||||
scr.xtcolor[ofs] = Font.CR_FIRE;
|
||||
scr.xstr[ofs] = "$SWWM_OVERKILL";
|
||||
scr.xstr[ofs] = StringTable.Localize("$SWWM_OVERKILL");
|
||||
scr.xcnt = ++ofs;
|
||||
}
|
||||
}
|
||||
|
|
@ -2426,7 +2439,7 @@ Class SWWMHandler : EventHandler
|
|||
{
|
||||
scr.xscore[ofs] = (multilevel[pnum]>=16)?int.max:(multilevel[pnum]+1);
|
||||
scr.xtcolor[ofs] = Font.CR_FIRE;
|
||||
scr.xstr[ofs] = "$SWWM_MULTIKILL";
|
||||
scr.xstr[ofs] = StringTable.Localize("$SWWM_MULTIKILL");
|
||||
scr.xcnt = ++ofs;
|
||||
}
|
||||
}
|
||||
|
|
@ -2440,7 +2453,7 @@ Class SWWMHandler : EventHandler
|
|||
{
|
||||
scr.xscore[ofs] = spreecount[pnum]+1;
|
||||
scr.xtcolor[ofs] = Font.CR_FIRE;
|
||||
scr.xstr[ofs] = "$SWWM_SPREEKILL";
|
||||
scr.xstr[ofs] = StringTable.Localize("$SWWM_SPREEKILL");
|
||||
scr.xcnt = ++ofs;
|
||||
}
|
||||
}
|
||||
|
|
@ -2451,7 +2464,7 @@ Class SWWMHandler : EventHandler
|
|||
{
|
||||
scr.xscore[ofs] = 0;
|
||||
scr.xtcolor[ofs] = Font.CR_FIRE;
|
||||
scr.xstr[ofs] = "$SWWM_BOSSKILL";
|
||||
scr.xstr[ofs] = StringTable.Localize("$SWWM_BOSSKILL");
|
||||
scr.xcnt = ++ofs;
|
||||
}
|
||||
}
|
||||
|
|
@ -2502,14 +2515,34 @@ Class SWWMHandler : EventHandler
|
|||
if ( hnd ) hnd.DoKeyTagFix(a);
|
||||
}
|
||||
|
||||
// spreads apart overlapping inventory items, since they'll look bad otherwise
|
||||
private void CheckSpreadOut( Actor a )
|
||||
{
|
||||
let bt = BlockThingsIterator.Create(a,16);
|
||||
while ( bt.Next() )
|
||||
{
|
||||
let t = bt.Thing;
|
||||
if ( !t || (t == a) || !(t is 'Inventory') || !(t.spawnpoint ~== a.spawnpoint) ) continue;
|
||||
double ang = FRandom[Spreading](0,360);
|
||||
a.vel += (cos(ang)*4,sin(ang)*4,3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
override void WorldThingSpawned( WorldEvent e )
|
||||
{
|
||||
if ( e.Thing is 'Inventory' )
|
||||
CheckSpreadOut(e.Thing);
|
||||
if ( e.Thing is 'Key' )
|
||||
{
|
||||
DoKeyTagFix(e.Thing);
|
||||
SWWMInterest.Spawn(thekey:Key(e.Thing));
|
||||
}
|
||||
else if ( e.Thing is 'BossBrain' ) e.Thing.SetTag("$FN_BOSSBRAIN");
|
||||
else if ( e.Thing is 'BossBrain' )
|
||||
{
|
||||
e.Thing.SetTag("$FN_BOSSBRAIN");
|
||||
e.Thing.A_SetSize(20,70);
|
||||
}
|
||||
else if ( e.Thing is 'CommanderKeen' ) e.Thing.SetTag("$FN_KEEN");
|
||||
if ( (e.Thing.bSHOOTABLE || e.Thing.bISMONSTER) && !(e.Thing is 'LampMoth') && !(e.Thing is 'CompanionLamp') ) SWWMCombatTracker.Spawn(e.Thing);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ Class Ynykron : SWWMWeapon
|
|||
Obituary "$O_YNYKRON";
|
||||
Weapon.SlotNumber 0;
|
||||
Weapon.SelectionOrder 1000;
|
||||
Stamina 2500000;
|
||||
Stamina 5000000;
|
||||
Weapon.AmmoType1 "YnykronAmmo";
|
||||
Weapon.AmmoGive1 1;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -635,8 +635,8 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
fnt = LangFont(mMiniwiFont);
|
||||
for ( int i=0; i<snum.xcnt; i++ )
|
||||
{
|
||||
tag = StringTable.Localize(snum.xstr[i]);
|
||||
if ( snum.xscore[i] == int.max ) tag.AppendFormat(" %s",StringTable.Localize("$SWWM_MAX"));
|
||||
tag = snum.xstr[i];
|
||||
if ( snum.xscore[i] == int.max ) tag.AppendFormat(" MAX");
|
||||
else if ( snum.xscore[i] > 0 ) tag.AppendFormat(" x%d",snum.xscore[i]);
|
||||
Screen.DrawText(fnt,snum.xtcolor[i],(vpos.x-hss.x*(fo.x+fnt.StringWidth(tag)/2.))/hss.x,(vpos.y-hss.y*(fo.y+(fnt.GetHeight()/2.)))/hss.y,tag,DTA_VirtualWidthF,sss.x,DTA_VirtualHeightF,sss.y,DTA_KeepRatio,true,DTA_Alpha,alph);
|
||||
fo.y += fnt.GetHeight();
|
||||
|
|
|
|||
|
|
@ -5,6 +5,15 @@ Mixin Class SWWMAutoUseFix
|
|||
{
|
||||
if ( GetClass() == item.GetClass() )
|
||||
{
|
||||
// sell excess if there's a price
|
||||
if ( bALWAYSPICKUP && (Amount+item.Amount > MaxAmount) && (Stamina > 0) )
|
||||
{
|
||||
int sellprice = SWWMUtility.Round100(Stamina*.7);
|
||||
SWWMScoreObj.Spawn(sellprice,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_GOLD);
|
||||
SWWMCredits.Give(Owner.player,sellprice);
|
||||
if ( Owner.player )
|
||||
Console.Printf(StringTable.Localize("$SWWM_SELLEXTRA"),Owner.player.GetUserName(),GetTag(),sellprice);
|
||||
}
|
||||
if ( Use(true) ) Amount--;
|
||||
}
|
||||
return Super.HandlePickup(item);
|
||||
|
|
@ -906,6 +915,26 @@ Class SWWMWeapon : Weapon abstract
|
|||
|
||||
FlagDef NoFirstGive : SWeaponFlags, 0; // don't give ammo on first pickup (for weapons with a clip count)
|
||||
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
if ( (GetClass() == item.GetClass()) )
|
||||
{
|
||||
if ( Weapon(item).PickupForAmmo(self) )
|
||||
item.bPickupGood = true;
|
||||
if ( (Amount+item.Amount > MaxAmount) && (Stamina > 0) )
|
||||
{
|
||||
// sell excess
|
||||
int sellprice = SWWMUtility.Round100(Stamina*.7);
|
||||
SWWMScoreObj.Spawn(sellprice,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_GOLD);
|
||||
SWWMCredits.Give(Owner.player,sellprice);
|
||||
if ( Owner.player )
|
||||
Console.Printf(StringTable.Localize("$SWWM_SELLEXTRA"),Owner.player.GetUserName(),GetTag(),sellprice);
|
||||
item.bPickupGood = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return Super.HandlePickup(item);
|
||||
}
|
||||
override void AttachToOwner( Actor other )
|
||||
{
|
||||
Inventory.AttachToOwner(other);
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
|
||||
TextureID MainWindow, TabSeparator, WindowSeparator, WindowSeparatorH,
|
||||
FancyBg, EasterEgg, LoreSeparator, LoreSeparatorW;
|
||||
transient CVar lang;
|
||||
transient CVar lang, fuzz;
|
||||
transient Font TewiFont, MPlusFont;
|
||||
int curtab, oldtab;
|
||||
// for scrolling
|
||||
|
|
@ -1833,7 +1833,9 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
double hs = max(min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/400.)),1.);
|
||||
Vector2 ss = (Screen.GetWidth(),Screen.GetHeight())/hs;
|
||||
Vector2 origin = (ss.x-640,ss.y-400)/2.;
|
||||
Screen.DrawTexture(FancyBg,false,origin.x,origin.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,.5);
|
||||
if ( !fuzz ) fuzz = CVar.GetCvar('swwm_fuzz',players[consoleplayer]);
|
||||
if ( fuzz.GetBool() )
|
||||
Screen.DrawTexture(FancyBg,false,origin.x,origin.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_LegacyRenderStyle,STYLE_Add,DTA_Alpha,.5);
|
||||
Screen.DrawTexture(MainWindow,false,origin.x,origin.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
// draw tabs
|
||||
double xx = 3, yy = 0;
|
||||
|
|
|
|||
|
|
@ -1450,7 +1450,16 @@ Class SWWMLamp : Inventory
|
|||
// add charge
|
||||
if ( item.GetClass() == GetClass() )
|
||||
{
|
||||
if ( Charge > 0 )
|
||||
if ( (Charge >= Default.Charge) && (Amount+item.Amount > MaxAmount) )
|
||||
{
|
||||
// sell excess
|
||||
int sellprice = SWWMUtility.Round100(Stamina*.7);
|
||||
SWWMScoreObj.Spawn(sellprice,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_GOLD);
|
||||
SWWMCredits.Give(Owner.player,sellprice);
|
||||
if ( Owner.player )
|
||||
Console.Printf(StringTable.Localize("$SWWM_SELLEXTRA"),Owner.player.GetUserName(),GetTag(),sellprice);
|
||||
}
|
||||
else if ( Charge > 0 )
|
||||
{
|
||||
int AddCharge = Charge+SWWMLamp(item).Charge;
|
||||
Charge = min(Default.Charge,AddCharge);
|
||||
|
|
|
|||
|
|
@ -1564,8 +1564,8 @@ Class GoldenImpact : Actor
|
|||
{
|
||||
Super.PostBeginPlay();
|
||||
A_AlertMonsters(40000);
|
||||
SWWMHandler.DoBlast(self,200,120000);
|
||||
A_Explode(7777,200);
|
||||
SWWMHandler.DoBlast(self,600,1200000);
|
||||
A_Explode(7777,600);
|
||||
A_QuakeEx(9,9,9,40,0,5000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollintensity:1.5);
|
||||
A_StartSound("spreadgun/goldexpl",CHAN_VOICE,attenuation:.3);
|
||||
A_StartSound("spreadgun/goldexpl",CHAN_WEAPON,attenuation:.15);
|
||||
|
|
@ -1691,8 +1691,8 @@ Class GoldenSubImpact : Actor
|
|||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
SWWMHandler.DoBlast(self,200,90000);
|
||||
A_Explode(777,200);
|
||||
SWWMHandler.DoBlast(self,400,900000);
|
||||
A_Explode(777,400);
|
||||
A_QuakeEx(7,7,7,20,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollintensity:.8);
|
||||
A_SprayDecal("BigScorch",-172);
|
||||
Scale *= FRandom[ExploS](0.8,1.1);
|
||||
|
|
@ -1816,7 +1816,7 @@ Class GoldenSubSubImpact : Actor
|
|||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
SWWMHandler.DoBlast(self,200,60000);
|
||||
SWWMHandler.DoBlast(self,200,600000);
|
||||
A_Explode(77,200);
|
||||
A_QuakeEx(4,4,4,15,0,1000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:100,rollintensity:.4);
|
||||
A_SprayDecal("Scorch",-172);
|
||||
|
|
|
|||
|
|
@ -427,6 +427,8 @@ Class ExplodiumGun : SWWMWeapon
|
|||
Weapon.UpSound "explodium/select";
|
||||
Weapon.SlotNumber 2;
|
||||
Weapon.SelectionOrder 2600;
|
||||
//Inventory.MaxAmount 2;
|
||||
//Weapon.SisterWeapon "DualExplodiumGun";
|
||||
Stamina 8000;
|
||||
ExplodiumGun.ClipCount 7;
|
||||
}
|
||||
|
|
@ -568,3 +570,21 @@ Class ExplodiumGun : SWWMWeapon
|
|||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Dual Explodium Guns (eventually)
|
||||
/*
|
||||
Class DualExplodiumGun : ExplodiumGun
|
||||
{
|
||||
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
|
||||
{
|
||||
if ( (firemode == PrimaryFire) || (firemode == AltFire) )
|
||||
return (SisterWeapon&&(SisterWeapon.Amount > 1));
|
||||
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
|
||||
}
|
||||
|
||||
Default
|
||||
{
|
||||
Tag "$T_EXPLODIUM2";
|
||||
Weapon.SisterWeapon "ExplodiumGun";
|
||||
}
|
||||
}*/
|
||||
|
|
|
|||
|
|
@ -838,6 +838,42 @@ Class CandyGun : SWWMWeapon
|
|||
|
||||
Property ClipCount : ClipCount;
|
||||
|
||||
// re-edit to allow picking up spares in coop
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
if ( item.GetClass() == GetClass() )
|
||||
{
|
||||
bool ammoget, spareget;
|
||||
[ammoget, spareget] = CandyGun(item).PickupForAmmoAndSpares(self);
|
||||
if ( ammoget )
|
||||
{
|
||||
item.bPickupGood = true;
|
||||
if ( !spareget )
|
||||
{
|
||||
// sell excess
|
||||
int sellprice = SWWMUtility.Round100(Stamina*.7);
|
||||
SWWMScoreObj.Spawn(sellprice,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_GOLD);
|
||||
SWWMCredits.Give(Owner.player,sellprice);
|
||||
if ( Owner.player )
|
||||
Console.Printf(StringTable.Localize("$SWWM_SELLEXTRA"),Owner.player.GetUserName(),GetTag(),sellprice);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return Super.HandlePickup(item);
|
||||
}
|
||||
protected bool, bool PickupForAmmoAndSpares( Weapon ownedWeapon )
|
||||
{
|
||||
bool gotstuff = false, gotspares = false;
|
||||
int oldamount = ownedWeapon.Ammo1.Amount;
|
||||
gotstuff = AddExistingAmmo(ownedWeapon.Ammo1,AmmoGive1);
|
||||
gotspares = AddExistingAmmo(ownedWeapon.Ammo2,AmmoGive2);
|
||||
let Owner = ownedWeapon.Owner;
|
||||
if ( gotstuff && Owner && Owner.player && (oldamount == 0) )
|
||||
PlayerPawn(Owner).CheckWeaponSwitch(ownedWeapon.Ammo1.GetClass());
|
||||
return gotstuff, gotspares;
|
||||
}
|
||||
|
||||
override void DrawWeapon( double TicFrac, double bx, double by, Vector2 hs, Vector2 ss )
|
||||
{
|
||||
if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/CandygunDisplay.png",TexMan.Type_Any);
|
||||
|
|
|
|||
|
|
@ -57,6 +57,16 @@ Class SWWMVanillaBossHandler : EventHandler
|
|||
}
|
||||
bosstag = "$BT_SPIDER";
|
||||
}
|
||||
else if ( level.mapname ~== "MAP07" )
|
||||
{
|
||||
if ( (e.Thing is 'Fatso') || (e.Thing is 'Arachnotron') )
|
||||
{
|
||||
bossactors.Push(e.Thing);
|
||||
if ( upgrademe )
|
||||
e.Thing.Health *= 2;
|
||||
}
|
||||
bosstag = "$BT_DIMPLE";
|
||||
}
|
||||
else if ( level.mapname ~== "MAP30" )
|
||||
{
|
||||
if ( e.Thing is 'BossBrain' )
|
||||
|
|
@ -116,19 +126,19 @@ Class SWWMVanillaBossHandler : EventHandler
|
|||
if ( e.Thing is 'ClericBoss' )
|
||||
{
|
||||
bossactors.Push(e.Thing);
|
||||
if ( upgrademe ) e.Thing.Health *= 3;
|
||||
if ( upgrademe ) e.Thing.Health *= 2;
|
||||
bosstag = "$BT_CLERIC";
|
||||
}
|
||||
else if ( e.Thing is 'FighterBoss' )
|
||||
{
|
||||
bossactors.Push(e.Thing);
|
||||
if ( upgrademe ) e.Thing.Health *= 3;
|
||||
if ( upgrademe ) e.Thing.Health *= 2;
|
||||
bosstag = "$BT_FIGHTER";
|
||||
}
|
||||
else if ( e.Thing is 'MageBoss' )
|
||||
{
|
||||
bossactors.Push(e.Thing);
|
||||
if ( upgrademe ) e.Thing.Health *= 3;
|
||||
if ( upgrademe ) e.Thing.Health *= 2;
|
||||
bosstag = "$BT_MAGE";
|
||||
}
|
||||
else if ( e.Thing is 'Dragon' )
|
||||
|
|
@ -175,7 +185,7 @@ Class SWWMVanillaBossHandler : EventHandler
|
|||
for ( int i=0; i<bossactors.Size(); i++ )
|
||||
{
|
||||
if ( !bossactors[i] ) continue;
|
||||
thealth += bossactors[i].Health;
|
||||
thealth += max(0,bossactors[i].Health);
|
||||
}
|
||||
hmax = thealth;
|
||||
for ( int i=0; i<30; i++ ) oldhealth[i] = thealth;
|
||||
|
|
@ -192,7 +202,7 @@ Class SWWMVanillaBossHandler : EventHandler
|
|||
for ( int i=0; i<bossactors.Size(); i++ )
|
||||
{
|
||||
if ( !bossactors[i] ) continue;
|
||||
newhealth += bossactors[i].Health;
|
||||
newhealth += max(0,bossactors[i].Health);
|
||||
}
|
||||
oldhealth[0] = newhealth;
|
||||
int curcumm = max(0,thealth-newhealth);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue