diff --git a/cvarinfo.txt b/cvarinfo.txt index 60c7905e7..d1a6b87cf 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -101,6 +101,7 @@ nosave int swwm_numcolor_hp = 7; // font color for health numbers (default: blu nosave int swwm_numcolor_ap = 3; // font color for armor numbers (default: green) server int swwm_drlaskill = 3; // [DRLA Monsters] skill setting for monster spawns nosave bool swwm_itemsparkles = false; // visual aid for low visibility items +nosave bool swwm_itemglows = false; // distant items glow server bool swwm_singlefirst = false; // single weapons are selected before dual ones, has to be a server cvar due to limitations nosave bool swwm_uniqstats = false; // only list stats from the same map once, rather than for each single visit nosave int swwm_filterachievements = 1; // filter for achievements at 0%: 0 - no filter, 1 - obscure text, 2 - don't show diff --git a/language.def_menu b/language.def_menu index c91dc012c..bfe862750 100644 --- a/language.def_menu +++ b/language.def_menu @@ -194,6 +194,7 @@ SWWM_BUTTSFX = "Clapping Buttcheeks"; SWWM_ONDEMANDAMMO = "On Demand Ammo Placement"; SWWM_BUMP = "FOV Bump Strength"; SWWM_ENGINE = "Engine"; +SWWM_ITEMGLOWS = "Distant Items Glow"; SWWM_MMTITLE = "Minimap Settings"; SWWM_MM_ENABLE = "Show Minimap"; SWWM_MM_ROTATE = "Rotate Minimap"; @@ -336,6 +337,7 @@ TOOLTIP_SWWM_BUTTSFX = "The Demolitionist's buttcheeks will VERY AUDIBLY clap up TOOLTIP_SWWM_ONDEMANDAMMO = "Only ammo for weapons that are currently available (either in the player's inventory or in the map) will spawn in the map. May cause long load times on large maps."; TOOLTIP_SWWM_BUMPSTRENGTH = "Controls how strong the bumping of the FOV is from weapon recoil and other actions."; TOOLTIP_SWWM_ENGINE = "Don't touch this."; +TOOLTIP_SWWM_ITEMGLOWS = "If enabled, items that are far away from the player will display a shimmering glow (requires a map restart to take full effect)."; TOOLTIP_SWWM_MM_ENABLE = "Displays a minimap under the score counter."; TOOLTIP_SWWM_MM_ROTATE = "Rotates the minimap view."; TOOLTIP_SWWM_MM_GRID = "Shows a 128x128 grid on the minimap."; diff --git a/language.es_menu b/language.es_menu index e720074b8..f893d7aaf 100644 --- a/language.es_menu +++ b/language.es_menu @@ -193,6 +193,7 @@ SWWM_BUTTSFX = "Azote de Nalgas"; SWWM_ONDEMANDAMMO = "Colocar Munición por Demanda"; SWWM_BUMP = "Intensidad de Sacudida de FOV"; SWWM_ENGINE = "Motor"; +SWWM_ITEMGLOWS = "Los Ítems Lejanos Brillan"; SWWM_MMTITLE = "Opciones de Minimapa"; SWWM_MM_ENABLE = "Mostrar Minimapa"; SWWM_MM_ROTATE = "Rotar Minimapa"; @@ -335,6 +336,7 @@ TOOLTIP_SWWM_BUTTSFX = "Las nalgas de la Demolicionista emitiran un azote MUY SO TOOLTIP_SWWM_ONDEMANDAMMO = "Solo coloca en el mapa munición para armas que estén actualmente disponibles (tanto en el inventario del jugador como en el mapa). Puede causar tiempos de carga largos en mapas grandes."; TOOLTIP_SWWM_BUMPSTRENGTH = "Controla lo intensa que es la sacudida del FOV por el retroceso de armas y otras acciones."; TOOLTIP_SWWM_ENGINE = "No toques esto."; +TOOLTIP_SWWM_ITEMGLOWS = "Al activar, los ítems que se encuentren lejos del jugador mostrarán un ligero destello (requiere un reinicio del mapa para tener efecto completamente)."; TOOLTIP_SWWM_MM_ENABLE = "Muestra un minimapa bajo el contador de puntuación."; TOOLTIP_SWWM_MM_ROTATE = "Gira la vista del minimapa."; TOOLTIP_SWWM_MM_GRID = "Muestra una cuadrícula de 128x128 en el minimapa."; diff --git a/language.version b/language.version index 25b99dea7..499dcd0e4 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r573 \cu(Fri 9 Jul 11:29:37 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r573 \cu(2021-07-09 11:29:37)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r574 \cu(Fri 9 Jul 13:21:28 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r574 \cu(2021-07-09 13:21:28)\c-"; diff --git a/menudef.txt b/menudef.txt index d9cbaa1f8..5b91d9e01 100644 --- a/menudef.txt +++ b/menudef.txt @@ -136,6 +136,7 @@ OptionMenu "SWWMOptionMenu" Option "$SWWM_SHADOWS", "swwm_shadows", "YesNo" ScaleSlider "$SWWM_SHADOWDIST", "swwm_shadowdist", -1, 4000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED" Option "$SWWM_ITEMSPARKLES", "swwm_itemsparkles", "YesNo" + Option "$SWWM_ITEMGLOWS", "swwm_itemglows", "YesNo" Option "$SWWM_BLOOD", "swwm_blood", "YesNo" ScaleSlider "$SWWM_MAXBLOOD", "swwm_maxblood", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED" ScaleSlider "$SWWM_MAXGIBS", "swwm_maxgibs", -1, 1000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED" diff --git a/sprites/BLPSA0.png b/sprites/BLPSA0.png new file mode 100644 index 000000000..6bd43824e Binary files /dev/null and b/sprites/BLPSA0.png differ diff --git a/sprites/BLPSB0.png b/sprites/BLPSB0.png new file mode 100644 index 000000000..b5bccce44 Binary files /dev/null and b/sprites/BLPSB0.png differ diff --git a/sprites/BLPSC0.png b/sprites/BLPSC0.png new file mode 100644 index 000000000..0b946a5d5 Binary files /dev/null and b/sprites/BLPSC0.png differ diff --git a/sprites/BLPSD0.png b/sprites/BLPSD0.png new file mode 100644 index 000000000..ebff8c40a Binary files /dev/null and b/sprites/BLPSD0.png differ diff --git a/sprites/BLPSE0.png b/sprites/BLPSE0.png new file mode 100644 index 000000000..5b269f32d Binary files /dev/null and b/sprites/BLPSE0.png differ diff --git a/sprites/BLPSF0.png b/sprites/BLPSF0.png new file mode 100644 index 000000000..a553bf51f Binary files /dev/null and b/sprites/BLPSF0.png differ diff --git a/sprites/BLPSG0.png b/sprites/BLPSG0.png new file mode 100644 index 000000000..e0c9fbbe5 Binary files /dev/null and b/sprites/BLPSG0.png differ diff --git a/sprites/BLPSH0.png b/sprites/BLPSH0.png new file mode 100644 index 000000000..971b9a2eb Binary files /dev/null and b/sprites/BLPSH0.png differ diff --git a/zscript/handler/swwm_handler_process.zsc b/zscript/handler/swwm_handler_process.zsc index fb4e2ace7..afca0c96a 100644 --- a/zscript/handler/swwm_handler_process.zsc +++ b/zscript/handler/swwm_handler_process.zsc @@ -195,60 +195,64 @@ extend Class SWWMHandler return; } // dump the values of all mod RNGs (might help someday to track down what desyncs) - Console.Printf("\cxSWWM GZ RNG dump for player %d (\c-%s\cx):\c-",consoleplayer,players[consoleplayer].GetUserName()); - Console.Printf("bdscreen: %08x",Random2[bdscreen]()); - Console.Printf("Blood: %08x",Random2[Blood]()); - Console.Printf("Boolet: %08x",Random2[Boolet]()); - Console.Printf("BrainExplode: %08x",Random2[BrainExplode]()); - Console.Printf("Bundle: %08x",Random2[Bundle]()); - Console.Printf("Candy: %08x",Random2[Candy]()); - Console.Printf("Chancebox: %08x",Random2[Chancebox]()); - Console.Printf("ClientSparkles: %08x",Random2[ClientSparkles]()); - Console.Printf("Corrode: %08x",Random2[Corrode]()); - Console.Printf("DemoLines: %08x",Random2[DemoLines]()); - Console.Printf("DropChance: %08x",Random2[DropChance]()); - Console.Printf("DoBlast: %08x",Random2[DoBlast]()); - Console.Printf("Eviscerator: %08x",Random2[Eviscerator]()); - Console.Printf("Explodium: %08x",Random2[Explodium]()); - Console.Printf("ExploS: %08x",Random2[ExploS]()); - Console.Printf("ExtraMissiles: %08x",Random2[ExtraMissiles]()); - Console.Printf("FInTheChat: %08x",Random2[FInTheChat]()); - Console.Printf("FlameT: %08x",Random2[FlameT]()); - Console.Printf("Flicker: %08x",Random2[Flicker]()); - Console.Printf("FunTags: %08x",Random2[FunTags]()); - Console.Printf("Gesture: %08x",Random2[Gesture]()); - Console.Printf("Gibs: %08x",Random2[Gibs]()); - Console.Printf("GoldDrop: %08x",Random2[GoldDrop]()); - Console.Printf("Goldy: %08x",Random2[Goldy]()); - Console.Printf("GunFlash: %08x",Random2[GunFlash]()); - Console.Printf("hdscreen: %08x",Random2[hdscreen]()); - Console.Printf("Hellblazer: %08x",Random2[Hellblazer]()); - Console.Printf("HudStuff: %08x",Random2[HudStuff]()); - Console.Printf("Impact: %08x",Random2[Impact]()); - Console.Printf("InterArt: %08x",Random2[InterArt]()); - Console.Printf("Invinciball: %08x",Random2[Invinciball]()); - Console.Printf("Junk: %08x",Random2[Junk]()); - Console.Printf("Moth: %08x",Random2[Moth]()); - Console.Printf("Nugget: %08x",Random2[Nugget]()); - Console.Printf("Parry: %08x",Random2[Parry]()); - Console.Printf("Ponch: %08x",Random2[Ponch]()); - Console.Printf("Puff: %08x",Random2[Puff]()); - Console.Printf("Pusher: %08x",Random2[Pusher]()); - Console.Printf("Rage: %08x",Random2[Rage]()); - Console.Printf("Replacements: %08x",Random2[Replacements]()); - Console.Printf("ScoreBits: %08x",Random2[ScoreBits]()); - Console.Printf("ShellDrop: %08x",Random2[ShellDrop]()); - Console.Printf("Shivers: %08x",Random2[Shivers]()); - Console.Printf("Silverbullet: %08x",Random2[Silverbullet]()); - Console.Printf("SpareShells: %08x",Random2[SpareShells]()); - Console.Printf("Sparkster: %08x",Random2[Sparkster]()); - Console.Printf("Spread: %08x",Random2[Spread]()); - Console.Printf("Spreadgun: %08x",Random2[Spreadgun]()); - Console.Printf("TUID: %08x",Random2[TUID]()); - Console.Printf("UIStuff: %08x",Random2[UIStuff]()); - Console.Printf("Wallbuster: %08x",Random2[Wallbuster]()); - Console.Printf("WallbusterMenu: %08x",Random2[WallbusterMenu]()); - Console.Printf("Ynykron: %08x",Random2[Ynykron]()); + String msg = String.Format("\cxSWWM GZ RNG dump for player %d (\c-%s\cx):\c-",consoleplayer,players[consoleplayer].GetUserName()); + msg.AppendFormat("\n\n\cfPlay RNG (will cause desyncs if mismatched):\c-\n"); + msg.AppendFormat("\nBlood: %08x",Random2[Blood]()); + msg.AppendFormat("\nBoolet: %08x",Random2[Boolet]()); + msg.AppendFormat("\nBundle: %08x",Random2[Bundle]()); + msg.AppendFormat("\nCandy: %08x",Random2[Candy]()); + msg.AppendFormat("\nChancebox: %08x",Random2[Chancebox]()); + msg.AppendFormat("\nCorrode: %08x",Random2[Corrode]()); + msg.AppendFormat("\nDemolitionist: %08x",Random2[Demolitionist]()); + msg.AppendFormat("\nDoBlast: %08x",Random2[DoBlast]()); + msg.AppendFormat("\nDropChance: %08x",Random2[DropChance]()); + msg.AppendFormat("\nEviscerator: %08x",Random2[Eviscerator]()); + msg.AppendFormat("\nExplodium: %08x",Random2[Explodium]()); + msg.AppendFormat("\nExploS: %08x",Random2[ExploS]()); + msg.AppendFormat("\nExtraMissiles: %08x",Random2[ExtraMissiles]()); + msg.AppendFormat("\nFlameT: %08x",Random2[FlameT]()); + msg.AppendFormat("\nFlicker: %08x",Random2[Flicker]()); + msg.AppendFormat("\nGesture: %08x",Random2[Gesture]()); + msg.AppendFormat("\nGibs: %08x",Random2[Gibs]()); + msg.AppendFormat("\nGoldDrop: %08x",Random2[GoldDrop]()); + msg.AppendFormat("\nGoldy: %08x",Random2[Goldy]()); + msg.AppendFormat("\nGunFlash: %08x",Random2[GunFlash]()); + msg.AppendFormat("\nHellblazer: %08x",Random2[Hellblazer]()); + msg.AppendFormat("\nImpact: %08x",Random2[Impact]()); + msg.AppendFormat("\nInvinciball: %08x",Random2[Invinciball]()); + msg.AppendFormat("\nJunk: %08x",Random2[Junk]()); + msg.AppendFormat("\nMoth: %08x",Random2[Moth]()); + msg.AppendFormat("\nMykradvo: %08x",Random2[Mykradvo]()); + msg.AppendFormat("\nNugget: %08x",Random2[Nugget]()); + msg.AppendFormat("\nParry: %08x",Random2[Parry]()); + msg.AppendFormat("\nPonch: %08x",Random2[Ponch]()); + msg.AppendFormat("\nPuff: %08x",Random2[Puff]()); + msg.AppendFormat("\nPusher: %08x",Random2[Pusher]()); + msg.AppendFormat("\nRage: %08x",Random2[Rage]()); + msg.AppendFormat("\nReplacements: %08x",Random2[Replacements]()); + msg.AppendFormat("\nShellDrop: %08x",Random2[ShellDrop]()); + msg.AppendFormat("\nShivers: %08x",Random2[Shivers]()); + msg.AppendFormat("\nSilverbullet: %08x",Random2[Silverbullet]()); + msg.AppendFormat("\nSpareShells: %08x",Random2[SpareShells]()); + msg.AppendFormat("\nSparkster: %08x",Random2[Sparkster]()); + msg.AppendFormat("\nSpread: %08x",Random2[Spread]()); + msg.AppendFormat("\nSpreadgun: %08x",Random2[Spreadgun]()); + msg.AppendFormat("\nWallbuster: %08x",Random2[Wallbuster]()); + msg.AppendFormat("\nYnykron: %08x",Random2[Ynykron]()); + msg.AppendFormat("\n\n\cfUI RNG (should not cause desyncs if mismatched):\c-\n"); + msg.AppendFormat("\nbdscreen: %08x [UI]",Random2[bdscreen]()); + msg.AppendFormat("\nClientSparkles: %08x [UI]",Random2[ClientSparkles]()); + msg.AppendFormat("\nDemoLines: %08x [UI]",Random2[DemoLines]()); + msg.AppendFormat("\nFInTheChat: %08x [UI]",Random2[FInTheChat]()); + msg.AppendFormat("\nFunTags: %08x [UI]",Random2[FunTags]()); + msg.AppendFormat("\nhdscreen: %08x [UI]",Random2[hdscreen]()); + msg.AppendFormat("\nHudStuff: %08x [UI]",Random2[HudStuff]()); + msg.AppendFormat("\nInterArt: %08x [UI]",Random2[InterArt]()); + msg.AppendFormat("\nScoreBits: %08x [UI]",Random2[ScoreBits]()); + msg.AppendFormat("\nTUID: %08x [UI]",Random2[TUID]()); + msg.AppendFormat("\nUIStuff: %08x [UI]",Random2[UIStuff]()); + msg.AppendFormat("\nWallbusterMenu: %08x [UI]",Random2[WallbusterMenu]()); + Console.Printf(msg); return; } else if ( e.Name ~== "swwmprofilehandler" ) diff --git a/zscript/handler/swwm_handler_worldthings.zsc b/zscript/handler/swwm_handler_worldthings.zsc index efed7e377..0d832b960 100644 --- a/zscript/handler/swwm_handler_worldthings.zsc +++ b/zscript/handler/swwm_handler_worldthings.zsc @@ -248,7 +248,15 @@ extend Class SWWMHandler d.bNOGRAVITY = e.Thing.bNOGRAVITY; } if ( e.Thing is 'Inventory' ) + { CopyFloatBob(e.Thing); + if ( (Inventory(e.Thing).PickupFlash is 'SWWMPickupFlash') && swwm_itemglows ) + { + let p = Actor.Spawn(Inventory(e.Thing).PickupFlash,e.Thing.Vec3Offset(0,0,16)); + p.target = e.Thing; + p.SetStateLabel("Pickup"); + } + } if ( swwm_doomfall && e.Thing.bISMONSTER ) e.Thing.bFALLDAMAGE = true; if ( e.Thing is 'Key' ) diff --git a/zscript/hud/swwm_hud.zsc b/zscript/hud/swwm_hud.zsc index a1402e78e..181b7d957 100644 --- a/zscript/hud/swwm_hud.zsc +++ b/zscript/hud/swwm_hud.zsc @@ -57,7 +57,6 @@ Class SWWMStatusBar : BaseStatusBar int midtic, midtype; bool koraxhack; - int ignoremsg; double minimapzoom, oldminimapzoom; // minimap constants @@ -180,18 +179,11 @@ Class SWWMStatusBar : BaseStatusBar override bool ProcessNotify( EPrintLevel printlevel, String outline ) { - if ( ignoremsg ) - { - ignoremsg--; - return true; - } + // this ignoring stuff has to be a thing until we can set printlevels directly if ( outline.Left(21) == "SWWMHandler profiling" ) return true; if ( outline.left(18) == "\cxSWWM GZ RNG dump" ) - { - ignoremsg = 52; return true; - } if ( koraxhack ) { // treat as chat message diff --git a/zscript/items/swwm_ammoextra.zsc b/zscript/items/swwm_ammoextra.zsc index 0d2af65d7..b77701bf1 100644 --- a/zscript/items/swwm_ammoextra.zsc +++ b/zscript/items/swwm_ammoextra.zsc @@ -7,6 +7,7 @@ Class AmmoFabricator : Inventory abstract Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; int budget, pertype, maxunitprice; diff --git a/zscript/items/swwm_basearmor.zsc b/zscript/items/swwm_basearmor.zsc index 0737bbf60..e08c0b065 100644 --- a/zscript/items/swwm_basearmor.zsc +++ b/zscript/items/swwm_basearmor.zsc @@ -153,6 +153,7 @@ Class SWWMSpareArmor : Inventory abstract Mixin SWWMUseToPickup; Mixin SWWMOverlapPickupSound; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; Class giveme; diff --git a/zscript/items/swwm_basehealth.zsc b/zscript/items/swwm_basehealth.zsc index 13d1dfb15..c6756a5d1 100644 --- a/zscript/items/swwm_basehealth.zsc +++ b/zscript/items/swwm_basehealth.zsc @@ -5,6 +5,7 @@ Class SWWMHealth : Inventory abstract Mixin SWWMUseToPickup; Mixin SWWMOverlapPickupSound; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; // can't use the Health class for whatever reason // nice parser you got there I guess? diff --git a/zscript/items/swwm_baseitem.zsc b/zscript/items/swwm_baseitem.zsc index e7419f6f1..5b467cb58 100644 --- a/zscript/items/swwm_baseitem.zsc +++ b/zscript/items/swwm_baseitem.zsc @@ -165,6 +165,22 @@ Class SWWMRespawnTimer : Actor } } +Mixin Class SWWMPickupGlow +{ + override Inventory CreateTossable( int amt ) + { + let ret = Super.CreateTossable(amt); + // reattach our glow if we became a pickup + if ( (ret == self) && (PickupFlash is 'SWWMPickupFlash') && swwm_itemglows ) + { + let p = Spawn(PickupFlash,Vec3Offset(0,0,16)); + p.target = self; + p.SetStateLabel("Pickup"); + } + return ret; + } +} + Mixin Class SWWMRespawn { override void Hide() diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index 8257aef72..947b55a13 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -19,6 +19,7 @@ Class GrilledCheeseSandwich : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; // for falling off cliffs and others // last 5 seconds of safe positions @@ -452,6 +453,7 @@ Class GhostArtifact : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; Default { @@ -629,6 +631,7 @@ Class GravitySuppressor : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; override bool Use( bool pickup ) { @@ -867,6 +870,7 @@ Class FuckingInvinciball : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; override Inventory CreateCopy( Actor other ) { @@ -1154,6 +1158,7 @@ Class Ragekit : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; override bool Use( bool pickup ) { @@ -1864,6 +1869,7 @@ Class SWWMLamp : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; bool bActive, bActivated; TextureID OnIcon; @@ -2143,6 +2149,7 @@ Class EBarrier : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; override bool Use( bool pickup ) { @@ -2686,6 +2693,7 @@ Class Mykradvo : Inventory Mixin SWWMOverlapPickupSound; Mixin SWWMUseToPickup; Mixin SWWMRespawn; + Mixin SWWMPickupGlow; Actor ringa[2]; diff --git a/zscript/swwm_common_fx.zsc b/zscript/swwm_common_fx.zsc index 0e613cb88..7347203d9 100644 --- a/zscript/swwm_common_fx.zsc +++ b/zscript/swwm_common_fx.zsc @@ -1029,31 +1029,53 @@ Class SWWMPickupFlash : Actor Super.PostBeginPlay(); frame = Args[0]; } + action void A_Sparkle() + { + // offset up + SetOrigin(Vec3Offset(0,0,16),false); + roll = FRandom[ExploS](0,360); + scale *= FRandom[ExploS](.9,1.1); + scale.x *= RandomPick[ExploS](-1,1); + scale.y *= RandomPick[ExploS](-1,1); + int numpt = Random[ExploS](8,10); + for ( int i=0; i