diff --git a/PYWHEEL.txt b/PYWHEEL.txt index b31f9b50b..da9ffb0b2 100644 --- a/PYWHEEL.txt +++ b/PYWHEEL.txt @@ -19,4 +19,5 @@ Demolitionist include "CandyGun"; //include "RayKhom"; include "Ynykron"; + //include "GrandLance"; } diff --git a/cvarinfo.txt b/cvarinfo.txt index 2ec0e8b80..cccbaf027 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -89,6 +89,7 @@ server bool swwm_uncapalert = false; // all noise alerts have infinite range user int swwm_damagetarget = 1; // conditional healthbar hiding (1 - hide until damage is first taken, 2 - hide if at full health) server int swwm_strictuntouchable = 0; // untouchable bonus ends... (1 - even if your armor absorbed all the damage, 2 - if you get hit by anything PERIOD) server int swwm_silencemap = 0; // silences the map when all kills/items/secrets are achieved (2 - play calm music) +user int swwm_shadowdist = 2000; // max distance beyond which blob shadows are no longer rendered, helps performance server noarchive bool swwm_iseriouslywanttoplaythiswithbd = false; // self-explanatory diff --git a/language.def_menu b/language.def_menu index f730aea64..f3adcbb4b 100644 --- a/language.def_menu +++ b/language.def_menu @@ -173,6 +173,7 @@ SWWM_SILENCEMAP = "Cleared Map Music"; SWWM_SILENCE_KEEP = "Don't Change"; SWWM_SILENCE_SILENT = "Silence"; SWWM_SILENCE_CALM = "Calm Track"; +SWWM_SHADOWDIST = "Shadow Distance"; 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."; @@ -252,6 +253,7 @@ TOOLTIP_SWWM_COLLECTANIMKEY = "Play special first person animations when picking TOOLTIP_SWWM_DAMAGETARGET = "Select when targetter healthbars should be shown."; TOOLTIP_SWWM_STRICTUNTOUCHABLE = "By default, the \"Untouchable\" bonus is active until you take direct damage. If you feel this isn't strict enough, you can also make it end if armor absorbs the damage, or, for extra strictness, on ANY hit, even while invulnerable."; TOOLTIP_SWWM_SILENCEMAP = "Chooses whether you want music to stop when you 100% a map. A third option is available which switches to a soothing calm track from a game you may recognize if you know me well."; +TOOLTIP_SWWM_SHADOWDISTANCE = "Maximum distance at which to show blob shadows. May help performance."; // knowledge base SWWM_COMINGSOON = "(coming soon)"; SWWM_MISSTAB = "Mission"; diff --git a/language.es_menu b/language.es_menu index 20f5990a5..4789afed9 100644 --- a/language.es_menu +++ b/language.es_menu @@ -171,6 +171,7 @@ SWWM_SILENCEMAP = "Música de Mapa Despejado"; SWWM_SILENCE_KEEP = "No Cambiar"; SWWM_SILENCE_SILENT = "Silencio"; SWWM_SILENCE_CALM = "Tema Tranquilo"; +SWWM_SHADOWDIST = "Distancia de Sombras"; 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 efectos te causan malestar."; @@ -250,6 +251,7 @@ TOOLTIP_SWWM_COLLECTANIMKEY = "Muestra animaciones especiales en primera persona TOOLTIP_SWWM_DAMAGETARGET = "Selecciona cuando deben mostrarse las barras de vida."; TOOLTIP_SWWM_STRICTUNTOUCHABLE = "Por defecto, el bonus \"Intocable\" permanece activo hasta que recibas daño directo. Si sientes que esto no es suficientemente estricto, también puedes hacer que termine si la armadura absorbe el daño, o, para mayor severidad, con CUALQUIER golpe, incluso siendo invulnerable."; TOOLTIP_SWWM_SILENCEMAP = "Elige si quieres que la música se detenga cuando completas un mapa al 100%. Hay una tercera opción disponible que cambiará a un relajante tema tranquilo de un juego que podrás reconocer si me conoces bien."; +TOOLTIP_SWWM_SHADOWDISTANCE = "Distancia máxima a la que mostrar sombras. Puede ayudar al rendimiento."; // knowledge base SWWM_COMINGSOON = "(próximamente)"; SWWM_MISSTAB = "Misión"; diff --git a/language.version b/language.version index 1508999cc..55657e105 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r678 \cu(Sun 13 Dec 13:57:15 CET 2020)"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r679 \cu(Mon 14 Dec 12:18:05 CET 2020)"; diff --git a/menudef.txt b/menudef.txt index 002683521..b424f6adc 100644 --- a/menudef.txt +++ b/menudef.txt @@ -95,6 +95,7 @@ OptionMenu "SWWMOptionMenu" StaticText " " StaticText "$SWWM_ETITLE", "Blue" Option "$SWWM_SHADOWS", "swwm_shadows", "SWWMShadows" + ScaleSlider "$SWWM_SHADOWDIST", "swwm_shadowdist", -1, 4000, 1, "$SWWM_NONE", "$SWWM_UNLIMITED" 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/modeldef.hellblazer b/modeldef.hellblazer index fa96a4b4c..a3e2535fb 100644 --- a/modeldef.hellblazer +++ b/modeldef.hellblazer @@ -108,12 +108,107 @@ Model "Hellblazer" Path "models" Model 0 "HellblazerPickup_d.3d" - Skin 0 "Hellblazer.png" + SurfaceSkin 0 0 "Hellblazer.png" Scale 0.11 0.11 0.11 AngleOffset 180 ZOffset 20 ROTATING + // Missiles + SurfaceSkin 0 2 "HellblazerAmmo.png" + SurfaceSkin 0 3 "HellblazerAmmo.png" + SurfaceSkin 0 4 "HellblazerAmmo.png" + SurfaceSkin 0 5 "HellblazerAmmo.png" + FrameIndex XZW1 A 0 0 + // Crackshots + SurfaceSkin 0 2 "HellblazerAmmo_Cluster.png" + SurfaceSkin 0 3 "" + SurfaceSkin 0 4 "HellblazerAmmo_Cluster.png" + SurfaceSkin 0 5 "" + FrameIndex XZW1 B 0 0 + // Ravagers + SurfaceSkin 0 2 "HellblazerAmmo_Fire.png" + SurfaceSkin 0 3 "" + SurfaceSkin 0 4 "HellblazerAmmo_Fire.png" + SurfaceSkin 0 5 "" + FrameIndex XZW1 C 0 0 + // Warheads + SurfaceSkin 0 2 "HellblazerAmmo_Nuke.png" + SurfaceSkin 0 3 "" + SurfaceSkin 0 4 "" + SurfaceSkin 0 5 "HellblazerAmmo_Nuke.png" + FrameIndex XZW1 D 0 0 +} + +// individual missiles for pickup model +Model "HellblazerXSub" +{ + Path "models" + + Model 0 "HellblazerPickup_d.3d" + Scale 0.11 0.11 0.11 + AngleOffset 180 + ZOffset 20 + ROTATING + + // Missiles + SurfaceSkin 0 6 "HellblazerMissile.png" + FrameIndex XZW1 A 0 0 + SurfaceSkin 0 6 "" + SurfaceSkin 0 7 "HellblazerMissile.png" + FrameIndex XZW1 B 0 0 + SurfaceSkin 0 7 "" + SurfaceSkin 0 8 "HellblazerMissile.png" + FrameIndex XZW1 C 0 0 + SurfaceSkin 0 8 "" + SurfaceSkin 0 9 "HellblazerMissile.png" + FrameIndex XZW1 D 0 0 + SurfaceSkin 0 9 "" + SurfaceSkin 0 10 "HellblazerMissile.png" + FrameIndex XZW1 E 0 0 + SurfaceSkin 0 10 "" + SurfaceSkin 0 11 "HellblazerMissile.png" + FrameIndex XZW1 F 0 0 + SurfaceSkin 0 11 "" + // Crackshots + SurfaceSkin 0 6 "HellblazerMissile_Cluster.png" + FrameIndex XZW2 A 0 0 + SurfaceSkin 0 6 "" + SurfaceSkin 0 8 "HellblazerMissile_Cluster.png" + FrameIndex XZW2 B 0 0 + SurfaceSkin 0 8 "" + SurfaceSkin 0 10 "HellblazerMissile_Cluster.png" + FrameIndex XZW2 C 0 0 + SurfaceSkin 0 10 "" + // Ravagers + SurfaceSkin 0 6 "HellblazerMissile_Fire.png" + FrameIndex XZW3 A 0 0 + SurfaceSkin 0 6 "" + SurfaceSkin 0 8 "HellblazerMissile_Fire.png" + FrameIndex XZW3 B 0 0 + SurfaceSkin 0 8 "" + SurfaceSkin 0 10 "HellblazerMissile_Fire.png" + FrameIndex XZW3 C 0 0 + SurfaceSkin 0 10 "" + // Warheads + SurfaceSkin 0 6 "HellblazerMissile_Nuke.png" + FrameIndex XZW4 A 0 0 + SurfaceSkin 0 6 "" + SurfaceSkin 0 9 "HellblazerMissile_Nuke.png" + FrameIndex XZW4 B 0 0 +} +Model "HellblazerX" +{ + Path "models" + + Model 0 "HellblazerPickup_d.3d" + SurfaceSkin 0 1 "Hellblazer.png" + Scale 0.11 0.11 0.11 + AngleOffset 180 + ZOffset 20 + ROTATING + DONTCULLBACKFACES + FrameIndex XZW1 A 0 0 } diff --git a/models/Hellblazer.blend b/models/Hellblazer.blend index 0a7cd1b20..0813ace59 100644 Binary files a/models/Hellblazer.blend and b/models/Hellblazer.blend differ diff --git a/models/HellblazerPickup_a.3d b/models/HellblazerPickup_a.3d index 80e327b5c..bec7fa07c 100644 Binary files a/models/HellblazerPickup_a.3d and b/models/HellblazerPickup_a.3d differ diff --git a/models/HellblazerPickup_d.3d b/models/HellblazerPickup_d.3d index 393cda765..af9230c9a 100644 Binary files a/models/HellblazerPickup_d.3d and b/models/HellblazerPickup_d.3d differ diff --git a/zmapinfo.txt b/zmapinfo.txt index 313a1aec3..c1dac1932 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -14,7 +14,7 @@ GameInfo "$QUITMSG12", "$QUITMSG13", "$QUITMSG14", "$QUITMSG15", "$QUITMSG16", "$QUITMSG17", "$QUITMSG18", "$QUITMSG19" ChatSound = "misc/chat" - DefaultConversationMenuClass = "SWWMConversationMenu" + //DefaultConversationMenuClass = "SWWMConversationMenu" NoMergePickupMsg = true CursorPic = "graphics/swwmcurs.png" DimColor = "Black" diff --git a/zscript.txt b/zscript.txt index 9f14bffda..83c8100cc 100644 --- a/zscript.txt +++ b/zscript.txt @@ -27,11 +27,9 @@ version "4.5" #include "zscript/swwm_hud.zsc" #include "zscript/swwm_hudextra.zsc" #include "zscript/swwm_kbase.zsc" -#include "zscript/swwm_crimesdlg.zsc" #include "zscript/swwm_menus.zsc" #include "zscript/swwm_title.zsc" #include "zscript/swwm_inter.zsc" -#include "zscript/swwm_strife.zsc" #include "zscript/swwm_blod.zsc" #include "zscript/swwm_help.zsc" #include "zscript/swwm_credits.zsc" @@ -53,3 +51,24 @@ version "4.5" #include "zscript/swwm_deathlydeathcannon.zsc" #include "zscript/swwm_funstuff.zsc" #include "zscript/swwm_keys.zsc" +// DLC1 - Weapon Set +//#include "zscript/dlc1/swwm_dlcammo.zsc" +//#include "zscript/dlc1/swwm_hammertime.zsc" +//#include "zscript/dlc1/swwm_rebolber.zsc" +//#include "zscript/dlc1/swwm_supermarioworld.zsc" +//#include "zscript/dlc1/swwm_heavymahsheengun.zsc" +//#include "zscript/dlc1/swwm_notashotgun.zsc" +//#include "zscript/dlc1/swwm_blackfire.zsc" +//#include "zscript/dlc1/swwm_veryveryfrightening.zsc" +//#include "zscript/dlc1/swwm_thiccbolts.zsc" +// DLC2 - Game Set +//#include "zscript/dlc2/swwm_tetris.zsc" +//#include "zscript/dlc2/swwm_pong.zsc" +//#include "zscript/dlc2/swwm_snake.zsc" +//#include "zscript/dlc2/swwm_demoland.zsc" +//#include "zscript/dlc2/swwm_demoshmup.zsc" +//#include "zscript/dlc2/swwm_demoquest.zsc" +// DLC3 - Strife Support +//#include "zscript/dlc3/swwm_crimesdlg.zsc" +//#include "zscript/dlc3/swwm_strife.zsc" +//#include "zscript/dlc3/swwm_hugeassrailgun.zsc" diff --git a/zscript/dlc/swwm_blackfire.zsc b/zscript/dlc1/swwm_blackfire.zsc similarity index 100% rename from zscript/dlc/swwm_blackfire.zsc rename to zscript/dlc1/swwm_blackfire.zsc diff --git a/zscript/dlc/swwm_dlcammo.zsc b/zscript/dlc1/swwm_dlcammo.zsc similarity index 100% rename from zscript/dlc/swwm_dlcammo.zsc rename to zscript/dlc1/swwm_dlcammo.zsc diff --git a/zscript/dlc/swwm_hammertime.zsc b/zscript/dlc1/swwm_hammertime.zsc similarity index 100% rename from zscript/dlc/swwm_hammertime.zsc rename to zscript/dlc1/swwm_hammertime.zsc diff --git a/zscript/dlc/swwm_heavymahsheengun.zsc b/zscript/dlc1/swwm_heavymahsheengun.zsc similarity index 100% rename from zscript/dlc/swwm_heavymahsheengun.zsc rename to zscript/dlc1/swwm_heavymahsheengun.zsc diff --git a/zscript/dlc/swwm_notashotgun.zsc b/zscript/dlc1/swwm_notashotgun.zsc similarity index 100% rename from zscript/dlc/swwm_notashotgun.zsc rename to zscript/dlc1/swwm_notashotgun.zsc diff --git a/zscript/dlc/swwm_rebolber.zsc b/zscript/dlc1/swwm_rebolber.zsc similarity index 100% rename from zscript/dlc/swwm_rebolber.zsc rename to zscript/dlc1/swwm_rebolber.zsc diff --git a/zscript/dlc/swwm_supermarioworld.zsc b/zscript/dlc1/swwm_supermarioworld.zsc similarity index 100% rename from zscript/dlc/swwm_supermarioworld.zsc rename to zscript/dlc1/swwm_supermarioworld.zsc diff --git a/zscript/dlc/swwm_thiccbolts.zsc b/zscript/dlc1/swwm_thiccbolts.zsc similarity index 100% rename from zscript/dlc/swwm_thiccbolts.zsc rename to zscript/dlc1/swwm_thiccbolts.zsc diff --git a/zscript/dlc/swwm_veryveryfrightening.zsc b/zscript/dlc1/swwm_veryveryfrightening.zsc similarity index 100% rename from zscript/dlc/swwm_veryveryfrightening.zsc rename to zscript/dlc1/swwm_veryveryfrightening.zsc diff --git a/zscript/dlc2/swwm_demoland.zsc b/zscript/dlc2/swwm_demoland.zsc new file mode 100644 index 000000000..246ec4d69 --- /dev/null +++ b/zscript/dlc2/swwm_demoland.zsc @@ -0,0 +1 @@ +// Demo Land Adventure game code diff --git a/zscript/dlc2/swwm_demoquest.zsc b/zscript/dlc2/swwm_demoquest.zsc new file mode 100644 index 000000000..f193ebfa2 --- /dev/null +++ b/zscript/dlc2/swwm_demoquest.zsc @@ -0,0 +1 @@ +// Demolition Quest game code diff --git a/zscript/dlc2/swwm_demoshmup.zsc b/zscript/dlc2/swwm_demoshmup.zsc new file mode 100644 index 000000000..9549b809a --- /dev/null +++ b/zscript/dlc2/swwm_demoshmup.zsc @@ -0,0 +1 @@ +// Interplanetary Demolitionist game code diff --git a/zscript/dlc2/swwm_pong.zsc b/zscript/dlc2/swwm_pong.zsc new file mode 100644 index 000000000..55628a4bd --- /dev/null +++ b/zscript/dlc2/swwm_pong.zsc @@ -0,0 +1 @@ +// Pong game code diff --git a/zscript/dlc2/swwm_snake.zsc b/zscript/dlc2/swwm_snake.zsc new file mode 100644 index 000000000..26fd84a93 --- /dev/null +++ b/zscript/dlc2/swwm_snake.zsc @@ -0,0 +1 @@ +// Snake game code diff --git a/zscript/dlc2/swwm_tetris.zsc b/zscript/dlc2/swwm_tetris.zsc new file mode 100644 index 000000000..7f8b0f525 --- /dev/null +++ b/zscript/dlc2/swwm_tetris.zsc @@ -0,0 +1 @@ +// Tetris game code diff --git a/zscript/swwm_crimesdlg.zsc b/zscript/dlc3/swwm_crimesdlg.zsc similarity index 100% rename from zscript/swwm_crimesdlg.zsc rename to zscript/dlc3/swwm_crimesdlg.zsc diff --git a/zscript/dlc3/swwm_hugeassrailgun.zsc b/zscript/dlc3/swwm_hugeassrailgun.zsc new file mode 100644 index 000000000..17ad50c4c --- /dev/null +++ b/zscript/dlc3/swwm_hugeassrailgun.zsc @@ -0,0 +1,85 @@ +// Kmonn Shuna Grand Lance (planned for unreleased SWWM Iridium) +// Slot 0, spawns shared with Ynykron Artifact + +Class GrandSpear : MagAmmo +{ + Default + { + Tag "$T_GRANDSPEAR"; + Inventory.PickupMessage "$T_GRANDSPEAR"; + Inventory.Icon "graphics/HUD/Icons/A_GrandSpear.png"; + MagAmmo.ParentAmmo "GrandAmmo"; + MagAmmo.ClipSize 5; + Inventory.MaxAmount 10; + Inventory.InterHubAmount 10; + +FLOATBOB; + FloatBobStrength 0.25; + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} + +Class GrandAmmo : Ammo +{ + Mixin SWWMAmmo; + Mixin SWWMOverlapPickupSound; + Mixin SWWMUseToPickup; + + Default + { + Tag "$T_GRANDAMMO"; + Inventory.PickupMessage "$T_GRANDAMMO"; + Stamina 1200000; + Inventory.Icon "graphics/HUD/Icons/A_RayAmmo.png"; + Inventory.Amount 1; + Inventory.MaxAmount 2; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 6; + Ammo.DropAmount 1; + +FLOATBOB; + FloatBobStrength 0.25; + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} + +Class GrandLance : SWWMWeapon +{ + int clipcount; + + Property ClipCount : clipcount; + + Default + { + Tag "$T_GRANDLANCE"; + Inventory.PickupMessage "$I_GRANDLANCE"; + Obituary "$O_GRANDLANCE"; + Inventory.Icon "graphics/HUD/Icons/W_GrandLance.png"; + Weapon.SlotNumber 0; + Weapon.SlotPriority 2.; + Weapon.SelectionOrder 8000; + Weapon.AmmoType1 "GrandAmmo"; + Weapon.AmmoGive1 1; + SWWMWeapon.DropAmmoType "GrandAmmo"; + GrandLance.ClipCount 5; + Stamina 4200000; + +SWWMWEAPON.NOFIRSTGIVE; + +WEAPON.BFG; + +WEAPON.EXPLOSIVE; + } + States + { + Spawn: + XZW1 A -1; + Stop; + } +} + diff --git a/zscript/swwm_strife.zsc b/zscript/dlc3/swwm_strife.zsc similarity index 100% rename from zscript/swwm_strife.zsc rename to zscript/dlc3/swwm_strife.zsc diff --git a/zscript/swwm_blazeit.zsc b/zscript/swwm_blazeit.zsc index 698586564..7a2955ea4 100644 --- a/zscript/swwm_blazeit.zsc +++ b/zscript/swwm_blazeit.zsc @@ -1220,6 +1220,77 @@ Class HellblazerWarheadArm : Actor } } +Class HellblazerX : GhostArtifactX {} + +Class HellblazerXSub : GhostArtifactX +{ + Hellblazer weap; + int ridx; + + Default + { + RenderStyle "Normal"; + } + void UpdateMe() + { + static const Class types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"}; + int curtype = 0; + for ( int i=0; i<4; i++ ) + { + if ( weap.loadammo != types[i] ) continue; + curtype = i; + break; + } + static const int sofs[] = {1,7,10,13}; // offsets from SpawnState for each ammo type state label + int idx; + switch ( curtype ) + { + case 0: + idx = ridx-weap.magpos; + if ( idx > 5 ) idx -= 6; + else if ( idx < 0 ) idx += 6; + if ( weap.magstate[ridx] ) SetState(SpawnState); + else SetState(SpawnState+sofs[0]+idx); + break; + case 1: + idx = ridx-weap.magpos; + if ( idx > 2 ) idx -= 3; + else if ( idx < 0 ) idx += 3; + if ( (ridx > 2) || weap.magstate[ridx] ) SetState(SpawnState); + else SetState(SpawnState+sofs[1]+idx); + break; + case 2: + idx = ridx-weap.magpos; + if ( idx > 2 ) idx -= 3; + else if ( idx < 0 ) idx += 3; + if ( (ridx > 2) || weap.magstate[ridx] ) SetState(SpawnState); + else SetState(SpawnState+sofs[2]+idx); + break; + case 3: + idx = ridx-weap.magpos; + if ( idx > 1 ) idx -= 2; + else if ( idx < 0 ) idx += 2; + if ( (ridx > 1) || weap.magstate[ridx] ) SetState(SpawnState); + else SetState(SpawnState+sofs[3]+idx); + break; + } + } + States + { + Spawn: + TNT1 A -1; + Missiles: + XZW1 ABCDEF -1; + Crackshots: + XZW2 ABC -1; + Ravagers: + XZW3 ABC -1; + Nukes: + XZW4 AB -1; + Stop; + } +} + Class Hellblazer : SWWMWeapon { int clipcount; @@ -1227,6 +1298,7 @@ Class Hellblazer : SWWMWeapon int magpos; // current rotation Class loadammo, nextammo; int spinskipped; + HellblazerXSub pickuprockets[6]; Property ClipCount : clipcount; @@ -1542,6 +1614,41 @@ Class Hellblazer : SWWMWeapon } } + action void A_UpdatePickup() + { + static const Class types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"}; + for ( int i=0; i<6; i++ ) + { + if ( !invoker.pickuprockets[i] ) + { + invoker.pickuprockets[i] = HellblazerXSub(Spawn("HellblazerXSub",pos)); + invoker.pickuprockets[i].angle = angle; + invoker.pickuprockets[i].target = invoker; + invoker.pickuprockets[i].weap = invoker; + invoker.pickuprockets[i].FloatBobPhase = FloatBobPhase; + invoker.pickuprockets[i].ridx = i; + } + invoker.pickuprockets[i].UpdateMe(); + } + int curtype = 0; + for ( int i=0; i<4; i++ ) + { + if ( invoker.loadammo != types[i] ) continue; + curtype = i; + break; + } + SetState(SpawnState+curtype+1); + } + + override void PostBeginPlay() + { + Super.PostBeginPlay(); + tracer = Spawn("HellblazerX",pos); + tracer.angle = angle; + tracer.target = self; + tracer.FloatBobPhase = FloatBobPhase; + } + Default { Tag "$T_HELLBLAZER"; @@ -1564,7 +1671,8 @@ Class Hellblazer : SWWMWeapon States { Spawn: - XZW1 A -1; + XZW1 A -1 NoDelay A_UpdatePickup(); + XZW1 ABCD -1; Stop; Select: XZW2 I 0 diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index 23cf1f33f..6731cc6a7 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -1430,11 +1430,14 @@ Class SWWMBulletTrail : LineTracer Class SWWMShadow : Actor { Sector oldfloor; + transient CVar sdist; static void Track( Actor other ) { // prevent infinite recursion if ( other is 'SWWMShadow' ) return; + // no shadows for overlay actors + if ( other is 'GhostArtifactX' ) return; let s = SWWMShadow(Spawn("SWWMShadow",other.pos)); s.target = other; s.Update(true); @@ -1448,6 +1451,10 @@ Class SWWMShadow : Actor { alpha = 1.-min(1.,.006*abs(target.pos.z-pos.z)); alpha *= target.alpha; + if ( !sdist ) sdist = CVar.GetCVar('swwm_shadowdist',players[consoleplayer]); + int sd = sdist.GetInt(); + // breaks with chasecam, but it's fine + if ( sd > 0 ) alpha *= clamp(4.*((sd-Distance3D(players[consoleplayer].Camera))/sd),0.,1.); double relz = target.pos.z-pos.z; if ( target.bFLOATBOB ) relz += BobSin(target.FloatBobPhase)*target.FloatBobStrength; double bscale = (target.radius/16.)*(1.-min(1.,.003*relz)); @@ -1481,6 +1488,7 @@ Class SWWMShadow : Actor { RenderStyle "Shaded"; StencilColor "000000"; + DistanceCheck 'swwm_shadowdist'; Radius .1; Height 0.; +NOBLOCKMAP; diff --git a/zscript/swwm_credits.zsc b/zscript/swwm_credits.zsc index c54ea9cf8..2bd36c6ad 100644 --- a/zscript/swwm_credits.zsc +++ b/zscript/swwm_credits.zsc @@ -187,6 +187,7 @@ Class SWWMCreditsMenu : GenericMenu cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Pietro Gagliardi")); cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Xada Xephron")); cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Alexa Jones-Gonzales")); + cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"John")); cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"NekoMithos")); cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Holly_Rook")); cpatrons.Push(new("SWWMCreditsEntry").Init(sfnt,"Namsan")); diff --git a/zscript/swwm_powerup.zsc b/zscript/swwm_powerup.zsc index cd83a235e..fd5a6e144 100644 --- a/zscript/swwm_powerup.zsc +++ b/zscript/swwm_powerup.zsc @@ -319,13 +319,15 @@ Class GhostArtifactX : Actor } override void Tick() { - Super.Tick(); if ( !target ) { Destroy(); return; } - Warp(target,flags:WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION); + vel = target.vel; + prev = target.prev; + SetOrigin(target.pos+vel,true); + A_SetAngle(target.angle,SPF_INTERPOLATE); FloatBobPhase = target.FloatBobPhase; bInvisible = target.bInvisible||!target.InStateSequence(target.CurState,target.FindState("Spawn")); }