diff --git a/GunLore.md b/GunLore.md index 09ff4e8..08d2879 100644 --- a/GunLore.md +++ b/GunLore.md @@ -285,11 +285,15 @@ The weapon is completely useless if the user or target are underwater. ## Fireblaster Another Mercenary invention, and a direct evolution of the previously listed -Flamethrower. Shoots balls of flaming napalm stabilized by microgravity. +Flamethrower. Shoots green-ish fireballs stabilized by microgravity. -Primary fire: Single, steady shots. +Primary fire: Single, steady shots, or a rapid three shot burst in a horizontal +arc, depending on selected mode. Costs 10 units of napalm per projectile. -Secondary fire: A rapid three shot burst in a horizontal arc. +Secondary fire: A slowly charged fireball costing 20 units of napalm. Deals +more splash damage. + +Reload: Toggle between single shot and three-round burst fire for primary fire. Like its predecessor, the Fireblaster is obviously completely useless when water is involved. A very clever human scientist would eventually solve this, diff --git a/Readme.md b/Readme.md index 1ef20f7..15ad36c 100644 --- a/Readme.md +++ b/Readme.md @@ -13,6 +13,7 @@ Doom Tournament (currently the devel branch is required). - Dual Automags - Stinger (slot 3) (replaces shotguns) - ASMD (slot 4) (replaces shotguns) + - Flak Cannon (slot 6) (replaces rocket launcher) - Backpack (replaces backpack, identical to Doom Tournament version) - Unreal 1 HUD - Translator (has to be spawned in, since it would only be useful for mappers) @@ -37,7 +38,11 @@ Doom Tournament (currently the devel branch is required). ## In progress - - Flak Cannon (slot 6) (replaces rocket launcher) + - Eightball (slot 5) (replaces rocket launcher) + - Razorjack (slot 7) (replaces chaingun) + - GES Bio Rifle (slot 8) (replaces plasma rifle) + - Rifle (slot 9) (replaces plasma rifle) + - Minigun (slot 0) (replaces chaingun) - Flashlight (replaces light amplifier) - Searchlight (must be placed manually for balance reasons) @@ -46,28 +51,28 @@ Doom Tournament (currently the devel branch is required). ## Planned - - Implement Stinger behavior described in the Unreal Bible - - Eightball (slot 5) (replaces rocket launcher) - - Razorjack (slot 7) (replaces chaingun) - - Make altfire actually seek where player is aiming - - Unreal Bible spin speed behavior - - GES Bio Rifle (slot 8) (replaces plasma rifle) - - Rifle (slot 9) (replaces plasma rifle) - - Restored rapid fire - - Restored flashlight - - Minigun (slot 0) (replaces chaingun) + - Unreal Bible & prototype build behaviour restoration + - Stinger projectile remanence & explosion + - Razorjack hold fire to increase blade speed + - Rifle restored rapid fire + - Rifle restored flashlight - - Stunner (slot 1) (replaces chainsaw) + - QOL improvements + - Make Razorjack altfire actually seek where player is aiming + - Biorifle splashes like UT (toggleable) + - Single rocket mode for Eightball + + - Stunner (slot 4) (replaces chainsaw) - Razorclaw (slot 1) (replaces chainsaw) - - Teleport Capsule (slot 1) - - Proto Automag (slot 2) (replaces pistol) + - Teleport Capsules (slot 9) + - Protomag (slot 2) (replaces pistol) - Dual Protomags - Quadshot (slot 3) (replaces shotguns) - - Peacemaker (slot 5) (rare spawn in backpacks) - - Impaler (slot 4) (replaces plasma rifle) - - Flamethrower (slot 8) (replaces plasma rifle) - - Fireblaster (slot 7) (replaces rocket launcher) - - Demolisher (slot 9) (replaces bfg9000) + - Peacemaker (slot 8) (rare spawn in backpacks) + - Impaler (slot 7) (replaces plasma rifle) + - Flamethrower (slot 6) (replaces plasma rifle) + - Fireblaster (slot 5) (replaces rocket launcher) + - Demolisher (slot 0) (replaces bfg9000) - Autocannon (slot 0) (replaces bfg9000) - Motion Detector (replaces computer map) diff --git a/brightmaps/JNaliFruit1.png b/brightmaps/JNaliFruit1.png new file mode 100644 index 0000000..a1fde70 Binary files /dev/null and b/brightmaps/JNaliFruit1.png differ diff --git a/credits.txt b/credits.txt index ac826ae..1b85ec0 100644 --- a/credits.txt +++ b/credits.txt @@ -1,3 +1,5 @@ Models, textures and audio (C)1995-1999 Epic Games. +Additional audio (C) id Software and/or Bethesda, depending on what. + Porting and adjustments by Marisa Kirisame. diff --git a/gldefs.txt b/gldefs.txt index f83a276..769eed0 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -43,6 +43,28 @@ Object StingerAmmo2 { Frame "SAMO" { light "STINGERAMMOLIGHT2" } } +PointLight IMPAMMOLIGHT +{ + Color 0.9 0.2 1.0 + Size 28 + Offset 0 6 0 + Attenuate 1 +} +PointLight IMPAMMOLIGHT2 +{ + Color 0.9 0.2 1.0 + Size 12 + Offset 0 3 0 + Attenuate 1 +} +Object ImpalerAmmo +{ + Frame "IAMO" { light "IMPAMMOLIGHT" } +} +Object ImpalerAmmo2 +{ + Frame "IAMO" { light "IMPAMMOLIGHT2" } +} PointLight FLAKAMMOLIGHT { Color 0.1 0.4 0.0 @@ -64,6 +86,29 @@ Object StingerProjectile { Frame "TPRJA" { light "STINGERLIGHT" } } +PointLight UBIOAMMOLIGHT +{ + Color 0.3 1.0 0.1 + Size 12 + Offset 0 12 8 + Attenuate 1 +} +PointLight UBIOAMMOLIGHT2 +{ + Color 0.3 1.0 0.1 + Size 9 + Offset 0 8 0 + Attenuate 1 +} +Object UBioAmmo +{ + Frame "BIOA" { light "UBIOAMMOLIGHT" } + Frame "BIA2" { light "UBIOAMMOLIGHT" } +} +Object UBioAmmo2 +{ + Frame "BIOA" { light "UBIOAMMOLIGHT2" } +} PointLight DAMPENERLIGHT0 { @@ -242,6 +287,18 @@ Object DAmmo5 Frame "DISM" { light "DAMMOLIGHT5" } } +FlickerLight2 ASMDBALLLIGHT +{ + Color 0.3 0.7 1.0 + Size 72 + SecondarySize 80 + Interval 0.1 +} +Object AsmdBall +{ + Frame "TAZB" { light "ASMDBALLLIGHT" } +} + // Shaders / Brightmaps HardwareShader Texture "graphics/MenuBarr.png" { @@ -491,9 +548,9 @@ HardwareShader Texture "models/JInvisibility1.png" { Shader "shaders/glsl/AmbientGlow.fp" } -HardwareShader Texture "models/JNaliFruit1.png" +Brightmap Texture "models/JNaliFruit1.png" { - Shader "shaders/glsl/AmbientGlow.fp" + Map "brightmaps/JNaliFruit1.png" } HardwareShader Texture "models/JNapalm1_.png" { diff --git a/graphics/icons/I_FlareBD.png b/graphics/icons/I_FlarBD.png similarity index 100% rename from graphics/icons/I_FlareBD.png rename to graphics/icons/I_FlarBD.png diff --git a/graphics/icons/I_FlareBL.png b/graphics/icons/I_FlarBL.png similarity index 100% rename from graphics/icons/I_FlareBL.png rename to graphics/icons/I_FlarBL.png diff --git a/language.txt b/language.txt index ac3ecc8..dfa066f 100644 --- a/language.txt +++ b/language.txt @@ -53,7 +53,7 @@ I_IMPAMMO2 = "You picked up an Enriched Tarydium Shard."; I_FLAMEAMMO = "You picked up a can of Napalm."; I_BIGAMMOL = "You picked up "; I_BIGAMMOR = " Big Bullets."; -I_BIGAMMO2 = "You picked up a Big Bullet."; +I_BIGAMMO3 = "You picked up a Big Bullet."; I_DPISTOL = "You got the Dispersion Pistol."; I_AUTOMAG = "You picked up the Automag."; I_AUTOMAG2 = "You picked up another Automag."; @@ -262,7 +262,7 @@ I_IMPAMMO2 = "Has recogido un Fragmento de Tarydium Enriquecido."; I_FLAMEAMMO = "Has recogido una lata de Napalm."; I_BIGAMMOL = "Has recogido "; I_BIGAMMOR = " Grandes Balas."; -I_BIGAMMO2 = "Has recogido una Gran Bala."; +I_BIGAMMO3 = "Has recogido una Gran Bala."; I_DPISTOL = "Has obtenido una Pistola de Dispersión."; I_AUTOMAG = "Has recogido la Autoarma."; I_AUTOMAG2 = "Has recogido otra Autoarma."; diff --git a/modeldef.betamag b/modeldef.betamag new file mode 100644 index 0000000..ad31de5 --- /dev/null +++ b/modeldef.betamag @@ -0,0 +1,15 @@ +Model "Betamag" +{ + Path "models" + Model 1 "OldAutoMagPick_d.3d" + Skin 1 "AutoHand1_.png" + Scale 0.05 -0.05 0.06 + AngleOffset -90 + ZOffset 9 + + FrameIndex AUTP B 1 0 + + ZOffset 13 + ROTATING + FrameIndex AUTP A 1 0 +} diff --git a/modeldef.biggun b/modeldef.biggun new file mode 100644 index 0000000..4417b57 --- /dev/null +++ b/modeldef.biggun @@ -0,0 +1,44 @@ +Model "BigAmmo" +{ + Path "models" + Model 0 "BigGAmmoBox_d.3d" + SurfaceSkin 0 0 "Jclip1_.png" + SurfaceSkin 0 1 "RifleBul1.png" + Scale 0.15 0.15 0.18 + + FrameIndex BIGA A 0 0 +} +Model "BigAmmo2" +{ + Path "models" + Model 0 "BigGAmmo_d.3d" + Skin 0 "Jclip1_.png" + Scale 0.15 0.15 0.18 + + FrameIndex BIGA A 0 0 +} +Model "BigAmmo3" +{ + Path "models" + Model 0 "BigGAmmoSingle_d.3d" + Skin 0 "Jclip1_.png" + Scale 0.15 0.15 0.18 + + FrameIndex BIGA A 0 0 +} + +Model "BigGun" +{ + Path "models" + Model 1 "BigGPick_d.3d" + Skin 1 "JBigGun1_.png" + ZOffset 18 + AngleOffset 90 + Scale 0.12 0.12 0.144 + + FrameIndex BIGP B 1 0 + + ZOffset 20 + ROTATING + FrameIndex BIGP A 1 0 +} diff --git a/modeldef.bonesaw b/modeldef.bonesaw new file mode 100644 index 0000000..9ab990b --- /dev/null +++ b/modeldef.bonesaw @@ -0,0 +1,15 @@ +Model "Bonesaw" +{ + Path "models" + Model 1 "Bonesaw_d.3d" + Skin 1 "JBoneSw1_.png" + Scale 0.096 -0.08 0.096 + AngleOffset 180 + Offset 8 0 6 + + FrameIndex CSWP B 1 0 + + Offset 8 0 15 + ROTATING + FrameIndex CSWP A 1 0 +} diff --git a/modeldef.eightball b/modeldef.eightball new file mode 100644 index 0000000..84203ea --- /dev/null +++ b/modeldef.eightball @@ -0,0 +1,48 @@ +Model "URocketAmmo" +{ + Path "models" + Model 0 "RocketCanMesh_d.3d" + Skin 0 "JRocketCan1.png" + Scale 0.12 0.12 0.144 + ZOffset 7 + + FrameIndex RPAK A 0 0 + FrameIndex RPAK B 0 1 + FrameIndex RPAK C 0 2 + FrameIndex RPAK D 0 3 + FrameIndex RPAK E 0 4 + FrameIndex RPAK F 0 5 + FrameIndex RPAK G 0 6 + FrameIndex RPAK H 0 7 + FrameIndex RPAK I 0 8 + FrameIndex RPAK J 0 9 +} + +Model "URocketAmmo2" +{ + Path "models" + Model 0 "SingleRocketMesh_d.3d" + SurfaceSkin 0 0 "JRocketCan1.png" + SurfaceSkin 0 1 "JRocket1_.png" + Scale 0.05 0.05 0.056 + ZOffset 4 + + FrameIndex RCKT A 0 0 + FrameIndex RCKT B 0 1 +} + +Model "Eightball" +{ + Path "models" + Model 1 "EightPick_d.3d" + Skin 1 "JEightB1_.png" + ZOffset 4 + AngleOffset 90 + Scale 0.08 0.08 0.096 + + FrameIndex EBLP B 1 0 + + ZOffset 12 + ROTATING + FrameIndex EBLP A 1 0 +} diff --git a/modeldef.flamegun b/modeldef.flamegun new file mode 100644 index 0000000..7732daf --- /dev/null +++ b/modeldef.flamegun @@ -0,0 +1,14 @@ +Model "FlameGun" +{ + Path "models" + Model 1 "FlameGPick_d.3d" + Skin 1 "JFlameG1_.png" + ZOffset 6 + Scale 0.04 0.04 0.048 + + FrameIndex FGNP B 1 0 + + ZOffset 9 + ROTATING + FrameIndex FGNP A 1 0 +} diff --git a/modeldef.gatling b/modeldef.gatling new file mode 100644 index 0000000..58ad03b --- /dev/null +++ b/modeldef.gatling @@ -0,0 +1,14 @@ +Model "SMiniGun" +{ + Path "models" + Model 1 "SMiniPick_d.3d" + Skin 1 "Minigun_.png" + ZOffset 13 + Scale 0.2 0.2 0.24 + + FrameIndex SMIP B 1 0 + + ZOffset 13 + ROTATING + FrameIndex SMIP A 1 0 +} diff --git a/modeldef.impaler b/modeldef.impaler new file mode 100644 index 0000000..6b16a45 --- /dev/null +++ b/modeldef.impaler @@ -0,0 +1,43 @@ +Model "ImpalerAmmo" +{ + Path "models" + Model 0 "ImpalerAmmo_d.3d" + Skin 0 "JImpale1_.png" + Scale 0.25 0.25 0.3 + AngleOffset 90 + ZOffset 4 + + FrameIndex IAMO A 0 0 +} +Model "ImpalerAmmo2" +{ + Path "models" + Model 0 "ImpalerProj_d.3d" + Skin 0 "JImpale1_.png" + Scale 0.25 0.25 0.3 + AngleOffset 90 + ZOffset 2 + + FrameIndex IAMO A 0 0 +} + +Model "Impaler" +{ + Path "models" + Model 1 "ImpalerPickup_d.3d" + Skin 1 "JImpale1_.png" + Offset 8 0 6 + PitchOffset -5 + RollOffset 45 + AngleOffset 180 + Scale 0.2 -0.24 0.24 + + FrameIndex IMPP B 1 0 + + PitchOffset 0 + RollOffset 0 + Scale 0.2 -0.2 0.24 + Offset 8 0 12 + ROTATING + FrameIndex IMPP A 1 0 +} diff --git a/modeldef.napalm b/modeldef.napalm new file mode 100644 index 0000000..ff91980 --- /dev/null +++ b/modeldef.napalm @@ -0,0 +1,45 @@ +Model "FlameAmmo" +{ + Path "models" + Model 0 "steelbarrelM_d.3d" + Skin 0 "JNapalmAm1.png" + Scale -0.04 0.04 0.048 + AngleOffset 90 + RollOffset 180 + ZOffset 6 + + FrameIndex FLMA A 0 0 +} + +Model "UFlamethrower" +{ + Path "models" + Model 1 "FlameTPick_d.3d" + Skin 1 "JNapalm1_.png" + ZOffset 10 + AngleOffset -90 + Scale 0.1 0.1 0.12 + + FrameIndex FLMP B 1 0 + + ZOffset 12 + ROTATING + FrameIndex FLMP A 1 0 +} + +Model "UFlamethrower" +{ + Path "models" + Model 3 "FlameTOldPick_d.3d" + SurfaceSkin 3 0 "JNapalm1_.png" + SurfaceSkin 3 1 "Flamet_.png" + ZOffset 10 + AngleOffset -90 + Scale 0.1 0.1 0.12 + + FrameIndex OFLP B 3 0 + + ZOffset 12 + ROTATING + FrameIndex OFLP A 3 0 +} diff --git a/modeldef.peacemaker b/modeldef.peacemaker new file mode 100644 index 0000000..527a1f2 --- /dev/null +++ b/modeldef.peacemaker @@ -0,0 +1,15 @@ +Model "Peacemaker" +{ + Path "models" + Model 1 "peacepick_d.3d" + Skin 1 "Jpeacehand1_.png" + RollOffset 90 // normally upright, but it's easier to tell apart from a deployed one this way + ZOffset 5 + Scale 0.16 0.192 0.16 + + FrameIndex PEAP B 1 0 + + ZOffset 9 + ROTATING + FrameIndex PEAP A 1 0 +} diff --git a/modeldef.quadshot b/modeldef.quadshot new file mode 100644 index 0000000..638fa83 --- /dev/null +++ b/modeldef.quadshot @@ -0,0 +1,39 @@ +Model "UShells" +{ + Path "models" + Model 0 "ShellsM_d.3d" + Skin 0 "JQuadAm1_.png" + Scale 0.03 0.03 0.036 + AngleOffset 90 + ZOffset 3 + + FrameIndex QAMO A 0 0 +} + +Model "UShells2" +{ + Path "models" + Model 0 "ShellsSmallM_d.3d" + Skin 0 "JQuadAm1_.png" + Scale 0.03 0.03 0.036 + AngleOffset 90 + ZOffset 1.5 + + FrameIndex QAMO A 0 0 +} + +Model "Quadshot" +{ + Path "models" + Model 1 "QuadShotPickup_d.3d" + Skin 1 "GunPick1_.png" + ZOffset 6 + AngleOffset -90 + Scale 0.08 -0.08 0.096 + + FrameIndex QUAP B 1 0 + + ZOffset 12 + ROTATING + FrameIndex QUAP A 1 0 +} diff --git a/modeldef.razorjack b/modeldef.razorjack new file mode 100644 index 0000000..ccb2e6c --- /dev/null +++ b/modeldef.razorjack @@ -0,0 +1,28 @@ +Model "RazorAmmo" +{ + Path "models" + Model 0 "RazorAmmoMesh_d.3d" + Skin 0 "JPickup21.png" + ZOffset 8 + Scale 0.1 0.1 0.12 + + FrameIndex BHOP A 0 0 + FrameIndex BHOP B 0 1 +} + +Model "Razorjack" +{ + Path "models" + Model 1 "RazPick_d.3d" + Skin 1 "JRazor1_.png" + RollOffset -8 + AngleOffset 90 + ZOffset 2 + Scale 0.05 -0.05 0.06 + + FrameIndex RZRP B 1 0 + + ZOffset 13 + ROTATING + FrameIndex RZRP A 1 0 +} diff --git a/modeldef.rifle b/modeldef.rifle new file mode 100644 index 0000000..6b5bccb --- /dev/null +++ b/modeldef.rifle @@ -0,0 +1,37 @@ +Model "URifleAmmo" +{ + Path "models" + Model 0 "RifleBullets_d.3d" + Skin 0 "RifleBul1.png" + Scale 0.05 0.05 0.06 + ZOffset 9.5 + + FrameIndex SBOX A 0 0 +} + +Model "URifleAmmo2" +{ + Path "models" + Model 0 "RifleRoundM_d.3d" + Skin 0 "RifleR1.png" + Scale 0.04 0.04 0.048 + ZOffset 8 + + FrameIndex SRND A 0 0 +} + +Model "URifle" +{ + Path "models" + Model 1 "RiPick_d.3d" + Skin 1 "JRifle1_.png" + Scale 0.12 0.12 0.144 + AngleOffset 90 + ZOffset 6 + + FrameIndex SRFP B 1 0 + + ZOffset 12 + ROTATING + FrameIndex SRFP A 1 0 +} \ No newline at end of file diff --git a/modeldef.stunner b/modeldef.stunner new file mode 100644 index 0000000..3ee0b2c --- /dev/null +++ b/modeldef.stunner @@ -0,0 +1,14 @@ +Model "Stunner" +{ + Path "models" + Model 1 "StunnerPickup_d.3d" + Skin 1 "Stunner_.png" + Scale -0.04 0.04 0.048 + ZOffset 1.5 + + FrameIndex STNP B 1 0 + + ZOffset 4 + ROTATING + FrameIndex STNP A 1 0 +} diff --git a/modeldef.ubiorifle b/modeldef.ubiorifle new file mode 100644 index 0000000..cf5f40a --- /dev/null +++ b/modeldef.ubiorifle @@ -0,0 +1,76 @@ +Model "UBioAmmo" +{ + Path "models" + Model 0 "sludgemesh_d.3d" + Skin 0 "JPickup1.png" + Scale 0.08 -0.08 0.096 + ZOffset 7 + + FrameIndex BIOA A 0 0 + FrameIndex BIOA B 0 1 + FrameIndex BIOA C 0 2 + FrameIndex BIOA D 0 3 + FrameIndex BIOA E 0 4 + FrameIndex BIOA F 0 5 + FrameIndex BIOA G 0 6 + FrameIndex BIOA H 0 7 + FrameIndex BIOA I 0 8 + FrameIndex BIOA J 0 9 + FrameIndex BIOA K 0 10 + FrameIndex BIOA L 0 11 + FrameIndex BIOA M 0 12 + FrameIndex BIOA N 0 13 + FrameIndex BIOA O 0 14 + FrameIndex BIOA P 0 15 + FrameIndex BIOA Q 0 16 + FrameIndex BIOA R 0 17 + FrameIndex BIOA S 0 18 + FrameIndex BIOA T 0 19 + FrameIndex BIOA U 0 20 + FrameIndex BIOA V 0 21 + FrameIndex BIOA W 0 22 + FrameIndex BIOA X 0 23 + FrameIndex BIOA Y 0 24 + FrameIndex BIOA Z 0 25 + FrameIndex BIA2 A 0 26 + FrameIndex BIA2 B 0 27 + FrameIndex BIA2 C 0 28 + FrameIndex BIA2 D 0 29 +} +Model "UBioAmmo2" +{ + Path "models" + Model 0 "sludgemeshsmall_d.3d" + Skin 0 "JPickup1.png" + Scale 0.04 0.04 0.048 + ZOffset 1 + + FrameIndex BIOA A 0 0 + FrameIndex BIOA B 0 1 + FrameIndex BIOA C 0 2 + FrameIndex BIOA D 0 3 + FrameIndex BIOA E 0 4 + FrameIndex BIOA F 0 5 + FrameIndex BIOA G 0 6 + FrameIndex BIOA H 0 7 + FrameIndex BIOA I 0 8 + FrameIndex BIOA J 0 9 + FrameIndex BIOA K 0 10 + FrameIndex BIOA L 0 11 +} + +Model "UBioRifle" +{ + Path "models" + Model 1 "BRiflePick_d.3d" + Skin 1 "JBRifle1_.png" + Scale 0.2 -0.2 0.24 + AngleOffset 180 + ZOffset 0 + + FrameIndex BIOP B 1 0 + + ZOffset 6 + ROTATING + FrameIndex BIOP A 1 0 +} diff --git a/modeldef.uflak b/modeldef.uflak index 06057db..17467df 100644 --- a/modeldef.uflak +++ b/modeldef.uflak @@ -22,6 +22,36 @@ Model "UFlakAmmo" FrameIndex FAMO B 0 0 } +Model "UFlakChunk" +{ + Path "models" + Model 0 "ChnkX_d.3d" + Skin 0 "Jflakshel1.png" + Scale 0.05 0.05 0.06 + ZOffset 2 + USEACTORPITCH + USEACTORROLL + USEROTATIONCENTER + Rotation-Center 0 0 2 + + FrameIndex FCH1 A 0 0 + FrameIndex FCH2 A 0 1 + FrameIndex FCH3 A 0 2 + FrameIndex FCH4 A 0 3 +} + +Model "UFlakSlug" +{ + Path "models" + Model 0 "FlakSh_d.3d" + Skin 0 "Jflakshel1.png" + Scale 0.2 0.2 0.24 + AngleOffset 90 + USEACTORPITCH + + FrameIndex FSLG A 0 0 +} + Model "UFlakCannon" { Path "models" @@ -33,12 +63,11 @@ Model "UFlakCannon" FrameIndex FPCK B 1 0 - ZOffset 12 + ZOffset 13 ROTATING FrameIndex FPCK A 1 0 } - Model "UFlakCannon" { Path "models" diff --git a/modeldef.uminigun b/modeldef.uminigun new file mode 100644 index 0000000..13014c3 --- /dev/null +++ b/modeldef.uminigun @@ -0,0 +1,27 @@ +Model "UMiniAmmo" +{ + Path "models" + Model 0 "ShellBoxMesh_d.3d" + Skin 0 "JPickup21.png" + ZOffset 6 + AngleOffset 180 + Scale 0.2 0.2 0.24 + + FrameIndex MAMO A 0 0 +} + +Model "UMinigun" +{ + Path "models" + Model 1 "minipick_d.3d" + Skin 1 "minigun1_.png" + ZOffset 6 + AngleOffset -90 + Scale 0.08 0.08 0.096 + + FrameIndex MGNP B 1 0 + + ZOffset 12 + ROTATING + FrameIndex MGNP A 1 0 +} diff --git a/modeldef.umisc b/modeldef.umisc index 0415fbb..32646c5 100644 --- a/modeldef.umisc +++ b/modeldef.umisc @@ -388,7 +388,245 @@ Model "UJumpBoots" Model 0 "lboot_d.3d" Skin 0 "Jlboot1.png" Scale 0.06 0.06 0.072 + AngleOffset 180 ZOffset 6 FrameIndex JBUT A 0 0 } + +Model "UFlashlight" +{ + Path "models" + Model 0 "Flashl_d.3d" + Skin 0 "JFlashl1.png" + Scale 0.04 0.04 0.048 + AngleOffset 180 + ZOffset 2 + + FrameIndex SLIT A 0 0 +} + +Model "USearchlight" +{ + Path "models" + Model 0 "BigFlash_d.3d" + Skin 0 "JBigFlash1.png" + Scale 0.07 0.07 0.084 + AngleOffset -90 + ZOffset 9 + + FrameIndex SLIT A 0 0 +} + +Model "SentryItem" +{ + Path "models" + Model 0 "SentryPick_d.3d" + SurfaceSkin 0 0 "Minigun_.png" + SurfaceSkin 0 1 "minigun1_.png" + SurfaceSkin 0 2 "JRifle1_.png" + Scale 0.15 0.15 0.18 + ZOffset 38 + + FrameIndex SENT A 0 0 +} + +Model "MinigunSentry" +{ + Path "models" + Model 0 "SentryGun_d.3d" + SurfaceSkin 0 1 "Minigun_.png" + SurfaceSkin 0 2 "minigun1_.png" + Scale 0.15 0.15 0.18 + + // down + FrameIndex SENT A 0 0 + // raise + FrameIndex SENR A 0 0 + FrameIndex SENR B 0 1 + FrameIndex SENR C 0 2 + FrameIndex SENR D 0 3 + FrameIndex SENR E 0 4 + FrameIndex SENR F 0 5 + FrameIndex SENR G 0 6 + FrameIndex SENR H 0 7 + FrameIndex SENR I 0 8 + FrameIndex SENR J 0 9 + FrameIndex SENR K 0 10 + FrameIndex SENR L 0 11 + FrameIndex SENR M 0 12 + FrameIndex SENR N 0 13 + FrameIndex SENR O 0 14 + // idle + FrameIndex SENI A 0 14 + // windup + FrameIndex SENW A 0 14 + FrameIndex SENW B 0 15 + FrameIndex SENW C 0 16 + FrameIndex SENW D 0 17 + FrameIndex SENW E 0 18 + FrameIndex SENW F 0 19 + FrameIndex SENW G 0 20 + FrameIndex SENW H 0 21 + FrameIndex SENW I 0 22 + FrameIndex SENW J 0 23 + FrameIndex SENW K 0 24 + FrameIndex SENW L 0 25 + FrameIndex SENW M 0 26 + FrameIndex SENW N 0 27 + FrameIndex SENW O 0 28 + FrameIndex SENW P 0 29 + FrameIndex SENW Q 0 30 + FrameIndex SENW R 0 31 + // fire + FrameIndex SENF A 0 32 // shoot + FrameIndex SENF B 0 33 + FrameIndex SENF C 0 34 + FrameIndex SENF D 0 35 // shoot + FrameIndex SENF E 0 36 + FrameIndex SENF F 0 37 + FrameIndex SENF G 0 38 // shoot + FrameIndex SENF H 0 39 + FrameIndex SENF I 0 40 + FrameIndex SENF J 0 41 // shoot + FrameIndex SENF K 0 42 + FrameIndex SENF L 0 43 + FrameIndex SENF M 0 44 // shoot + FrameIndex SENF N 0 45 + FrameIndex SENF O 0 46 + FrameIndex SENF P 0 47 // shoot + FrameIndex SENF Q 0 48 + FrameIndex SENF R 0 49 + // unwind + FrameIndex SENU A 0 50 + FrameIndex SENU B 0 51 + FrameIndex SENU C 0 52 + FrameIndex SENU D 0 53 + FrameIndex SENU E 0 54 + FrameIndex SENU F 0 55 + FrameIndex SENU G 0 56 + FrameIndex SENU H 0 57 + FrameIndex SENU I 0 58 + FrameIndex SENU J 0 59 + FrameIndex SENU K 0 60 + FrameIndex SENU L 0 61 + FrameIndex SENU M 0 62 + FrameIndex SENU N 0 63 + FrameIndex SENU O 0 64 + FrameIndex SENU P 0 65 + FrameIndex SENU Q 0 66 + FrameIndex SENU R 0 67 +} + +Model "MinigunSentryBase" +{ + Path "models" + Model 0 "SentryBase_d.3d" + SurfaceSkin 0 0 "Minigun_.png" + SurfaceSkin 0 1 "minigun1_.png" + SurfaceSkin 0 2 "JRifle1_.png" + Scale 0.15 0.15 0.18 + ZOffset 38 + + // down + FrameIndex SENT A 0 0 + // raise + FrameIndex SENR A 0 0 + FrameIndex SENR B 0 1 + FrameIndex SENR C 0 2 + FrameIndex SENR D 0 3 + FrameIndex SENR E 0 4 + FrameIndex SENR F 0 5 + FrameIndex SENR G 0 6 + FrameIndex SENR H 0 7 + FrameIndex SENR I 0 8 + FrameIndex SENR J 0 9 + FrameIndex SENR K 0 10 + FrameIndex SENR L 0 11 + FrameIndex SENR M 0 12 + FrameIndex SENR N 0 13 + FrameIndex SENR O 0 14 + // idle + FrameIndex SENI A 0 14 + // windup + FrameIndex SENW A 0 14 + FrameIndex SENW B 0 15 + FrameIndex SENW C 0 16 + FrameIndex SENW D 0 17 + FrameIndex SENW E 0 18 + FrameIndex SENW F 0 19 + FrameIndex SENW G 0 20 + FrameIndex SENW H 0 21 + FrameIndex SENW I 0 22 + FrameIndex SENW J 0 23 + FrameIndex SENW K 0 24 + FrameIndex SENW L 0 25 + FrameIndex SENW M 0 26 + FrameIndex SENW N 0 27 + FrameIndex SENW O 0 28 + FrameIndex SENW P 0 29 + FrameIndex SENW Q 0 30 + FrameIndex SENW R 0 31 + // fire + FrameIndex SENF A 0 32 + FrameIndex SENF B 0 33 + FrameIndex SENF C 0 34 + FrameIndex SENF D 0 35 + FrameIndex SENF E 0 36 + FrameIndex SENF F 0 37 + FrameIndex SENF G 0 38 + FrameIndex SENF H 0 39 + FrameIndex SENF I 0 40 + FrameIndex SENF J 0 41 + FrameIndex SENF K 0 42 + FrameIndex SENF L 0 43 + FrameIndex SENF M 0 44 + FrameIndex SENF N 0 45 + FrameIndex SENF O 0 46 + FrameIndex SENF P 0 47 + FrameIndex SENF Q 0 48 + FrameIndex SENF R 0 49 + // unwind + FrameIndex SENU A 0 50 + FrameIndex SENU B 0 51 + FrameIndex SENU C 0 52 + FrameIndex SENU D 0 53 + FrameIndex SENU E 0 54 + FrameIndex SENU F 0 55 + FrameIndex SENU G 0 56 + FrameIndex SENU H 0 57 + FrameIndex SENU I 0 58 + FrameIndex SENU J 0 59 + FrameIndex SENU K 0 60 + FrameIndex SENU L 0 61 + FrameIndex SENU M 0 62 + FrameIndex SENU N 0 63 + FrameIndex SENU O 0 64 + FrameIndex SENU P 0 65 + FrameIndex SENU Q 0 66 + FrameIndex SENU R 0 67 +} + +Model "MotionDetector" +{ + Path "models" + Model 0 "DetectorMesh_d.3d" + Skin 0 "JDetector.png" + Scale 0.08 -0.08 0.096 + PitchOffset 3 + ZOffset 4 + + FrameIndex MDET A 0 0 +} + +Model "SCUBAGear" +{ + Path "models" + Model 0 "Scuba_d.3d" + Skin 0 "ASC1.png" + Scale 0.08 0.08 0.096 + AngleOffset -90 + ZOffset 11 + + FrameIndex SCUB A 0 0 +} diff --git a/modeldef.utranslocator b/modeldef.utranslocator new file mode 100644 index 0000000..e192af6 --- /dev/null +++ b/modeldef.utranslocator @@ -0,0 +1,15 @@ +Model "UTranslocator" +{ + Path "models" + Model 1 "TelePickup_d.3d" + Skin 1 "Ahand1_.png" + Scale 0.04 -0.04 0.048 + AngleOffset 90 + ZOffset 6 + + FrameIndex TLCP B 1 0 + + ZOffset 12 + ROTATING + FrameIndex TLCP A 1 0 +} diff --git a/models/Chnk1_a.3d b/models/Chnk1_a.3d deleted file mode 100644 index ad907b6..0000000 Binary files a/models/Chnk1_a.3d and /dev/null differ diff --git a/models/Chnk1_d.3d b/models/Chnk1_d.3d deleted file mode 100644 index 83239af..0000000 Binary files a/models/Chnk1_d.3d and /dev/null differ diff --git a/models/Chnk2_a.3d b/models/Chnk2_a.3d deleted file mode 100644 index ab07c7a..0000000 Binary files a/models/Chnk2_a.3d and /dev/null differ diff --git a/models/Chnk2_d.3d b/models/Chnk2_d.3d deleted file mode 100644 index 375466f..0000000 Binary files a/models/Chnk2_d.3d and /dev/null differ diff --git a/models/Chnk3_a.3d b/models/Chnk3_a.3d deleted file mode 100644 index cfdbd33..0000000 Binary files a/models/Chnk3_a.3d and /dev/null differ diff --git a/models/Chnk3_d.3d b/models/Chnk3_d.3d deleted file mode 100644 index ec23510..0000000 Binary files a/models/Chnk3_d.3d and /dev/null differ diff --git a/models/Chnk4_a.3d b/models/Chnk4_a.3d deleted file mode 100644 index a5bc11b..0000000 Binary files a/models/Chnk4_a.3d and /dev/null differ diff --git a/models/Chnk4_d.3d b/models/Chnk4_d.3d deleted file mode 100644 index 6bd9a55..0000000 Binary files a/models/Chnk4_d.3d and /dev/null differ diff --git a/models/ChnkX_a.3d b/models/ChnkX_a.3d new file mode 100644 index 0000000..0856e2d Binary files /dev/null and b/models/ChnkX_a.3d differ diff --git a/models/ChnkX_d.3d b/models/ChnkX_d.3d new file mode 100644 index 0000000..e36fcbc Binary files /dev/null and b/models/ChnkX_d.3d differ diff --git a/models/JFlame2.png b/models/JFlame2.png new file mode 100644 index 0000000..f6ebdbf Binary files /dev/null and b/models/JFlame2.png differ diff --git a/models/JFlame3.png b/models/JFlame3.png new file mode 100644 index 0000000..6863f5c Binary files /dev/null and b/models/JFlame3.png differ diff --git a/models/JRocket1_.png b/models/JRocket1_.png new file mode 100644 index 0000000..eeb75e3 Binary files /dev/null and b/models/JRocket1_.png differ diff --git a/textures.biggun b/textures.biggun new file mode 100644 index 0000000..c2cefc1 --- /dev/null +++ b/textures.biggun @@ -0,0 +1,3 @@ +Sprite "BIGAA0",1,1{} +Sprite "BIGPA0",1,1{} +Sprite "BIGSA0",1,1{} diff --git a/textures.flamegun b/textures.flamegun new file mode 100644 index 0000000..ecfadec --- /dev/null +++ b/textures.flamegun @@ -0,0 +1,3 @@ +Sprite "FGNPA0",1,1{} +Sprite "FGNSA0",1,1{} +Sprite "FIRBA0",1,1{} diff --git a/textures.gatling b/textures.gatling new file mode 100644 index 0000000..3f491f5 --- /dev/null +++ b/textures.gatling @@ -0,0 +1,2 @@ +Sprite "SMIPA0",1,1{} +Sprite "SMISA0",1,1{} diff --git a/textures.impaler b/textures.impaler new file mode 100644 index 0000000..5a42f3c --- /dev/null +++ b/textures.impaler @@ -0,0 +1 @@ +Sprite "IAMOA0",1,1{} diff --git a/textures.napalm b/textures.napalm new file mode 100644 index 0000000..4dafdbc --- /dev/null +++ b/textures.napalm @@ -0,0 +1,6 @@ +Sprite "FLMAA0",1,1{} +Sprite "FLMPA0",1,1{} +Sprite "OFLPA0",1,1{} +Sprite "FLMSA0",1,1{} +Sprite "OFLSA0",1,1{} +Sprite "NAPAA0",1,1{} diff --git a/textures.peacemaker b/textures.peacemaker new file mode 100644 index 0000000..06d5239 --- /dev/null +++ b/textures.peacemaker @@ -0,0 +1,4 @@ +Sprite "PEAPA0",1,1{} +Sprite "PEASA0",1,1{} +Sprite "PEAMA0",1,1{} +Sprite "PEARA0",1,1{} diff --git a/textures.quadshot b/textures.quadshot new file mode 100644 index 0000000..8f6a1c2 --- /dev/null +++ b/textures.quadshot @@ -0,0 +1,3 @@ +Sprite "QAMOA0",1,1{} +Sprite "QUAPA0",1,1{} +Sprite "QUASA0",1,1{} diff --git a/textures.umisc b/textures.umisc index 061758c..2ba867c 100644 --- a/textures.umisc +++ b/textures.umisc @@ -21,3 +21,5 @@ Sprite "SEEDA0",1,1{} Sprite "FRUTA0",1,1{} Sprite "FLARA0",1,1{} Sprite "SCUBA0",1,1{} +Sprite "MDETA0",1,1{} +Sprite "SENTA0",1,1{} diff --git a/zscript/asmd.zsc b/zscript/asmd.zsc index 56ad1cb..1adf27b 100644 --- a/zscript/asmd.zsc +++ b/zscript/asmd.zsc @@ -290,20 +290,25 @@ Class ViewASMDSpark : ShockSpark Class ASMDHitbox : ShockHitbox { - Default + override void Tick() { - Health 1; - +SHOOTABLE; - +NOBLOOD; - } - override void Die( Actor source, Actor inflictor, int dmgflags, Name MeansOfDeath ) - { - if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) ) + Super.Tick(); + if ( !target ) return; + let t = ThinkerIterator.Create("ASMDHitbox"); + Actor a; + while ( a = Actor(t.Next()) ) { - target.bAMBUSH = true; - target.ExplodeMissile(); + if ( (a == self) || !(a is 'ASMDHitbox') || a.bAMBUSH || (Distance3D(a) > radius*2) ) continue; + a.bAMBUSH = true; + if ( a.target && a.target.InStateSequence(a.target.CurState,a.target.FindState("Spawn")) ) + a.target.ExplodeMissile(); + if ( !bAMBUSH ) + { + bAMBUSH = true; + if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) ) + target.ExplodeMissile(); + } } - Super.Die(source,inflictor,dmgflags,MeansOfDeath); } } @@ -534,6 +539,8 @@ Class ASMDBeam : Actor UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),10,-2,3,SWING_Spring,3,6); } let b = t.Results.HitActor.target; + b.bAMBUSH = true; + b.ExplodeMissile(); b.pitch = 90; b.angle = 0; b.roll = 0; diff --git a/zscript/automag.zsc b/zscript/automag.zsc index e99c53e..cb1ba98 100644 --- a/zscript/automag.zsc +++ b/zscript/automag.zsc @@ -38,6 +38,11 @@ Class Automag : UnrealWeapon } return Super.HandlePickup(item); } + override String PickupMessage() + { + if ( Owner ) return Super.PickupMessage(); + return StringTable.Localize("$I_AUTOMAG2"); + } override Inventory CreateTossable( int amt ) { Inventory inv = Super.CreateTossable(amt); diff --git a/zscript/betamag.zsc b/zscript/betamag.zsc index 9f893f1..dbeb039 100644 --- a/zscript/betamag.zsc +++ b/zscript/betamag.zsc @@ -1,3 +1,29 @@ Class Betamag : UnrealWeapon { + Default + { + Tag "$T_BETAMAG"; + Inventory.Icon "I_ClipAm"; + Inventory.PickupMessage "$I_BETAMAG"; + Inventory.MaxAmount 1; + Inventory.InterHubAmount 2; + Weapon.UpSound "betamag/select"; + Weapon.SlotNumber 2; + Weapon.SelectionOrder 1; + Weapon.AmmoType "UMiniAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "UMiniAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 20; + Weapon.Kickback 320; + UTWeapon.DropAmmo 10; + } + States + { + Spawn: + AUTP A -1; + Stop; + AUTP B -1; + Stop; + } } diff --git a/zscript/biggun.zsc b/zscript/biggun.zsc index 20cb224..6863719 100644 --- a/zscript/biggun.zsc +++ b/zscript/biggun.zsc @@ -1,11 +1,79 @@ Class BigAmmo : Ammo { + Default + { + Tag "$T_BIGAMMO"; + Inventory.Icon "I_BigM"; + Inventory.PickupMessage ""; + Inventory.Amount 10; + Inventory.MaxAmount 30; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 60; + Ammo.DropAmount 10; + Inventory.RespawnTics 2100; + +INVENTORY.IGNORESKILL; + } + override String PickupMessage() + { + if ( PickupMsg.Length() > 0 ) return Super.PickupMessage(); + return String.Format("%s%d%s",StringTable.Localize("$I_BIGAMMOL"),Amount,StringTable.Localize("$I_BIGAMMOR")); + } + States + { + Spawn: + BIGA A -1; + Stop; + } } Class BigAmmo2 : BigAmmo { + Default + { + Tag "$T_BIGAMMO2"; + Inventory.Amount 3; + Ammo.DropAmount 3; + +INVENTORY.IGNORESKILL; + } +} + +Class BigAmmo3 : BigAmmo +{ + Default + { + Tag "$T_BIGAMMO3"; + Inventory.PickupMessage "$I_BIGAMMO3"; + Inventory.Amount 1; + Ammo.DropAmount 1; + +INVENTORY.IGNORESKILL; + } } Class BigGun : UnrealWeapon { + Default + { + Tag "$T_BIGGUN"; + Inventory.PickupMessage "$I_BIGGUN"; + Weapon.UpSound "big/select"; + Weapon.SlotNumber 0; + Weapon.SelectionOrder 0; + Weapon.AmmoType "BigAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "BigAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 10; + Inventory.RespawnTics 2100; + +INVENTORY.IGNORESKILL; + +WEAPON.NOAUTOFIRE; + UTWeapon.DropAmmo 5; + } + States + { + Spawn: + BIGP A -1; + Stop; + BIGP B -1; + Stop; + } } diff --git a/zscript/bonesaw.zsc b/zscript/bonesaw.zsc index 7fcf5e2..785268e 100644 --- a/zscript/bonesaw.zsc +++ b/zscript/bonesaw.zsc @@ -1,3 +1,22 @@ Class Bonesaw : UnrealWeapon { + Default + { + Tag "$T_BONESAW"; + Inventory.PickupMessage "$I_BONESAW"; + Weapon.UpSound "bonesaw/select"; + Weapon.SlotNumber 1; + Weapon.SelectionOrder 9; + +WEAPON.MELEEWEAPON; + +FORCEPAIN; + +NOEXTREMEDEATH; + } + States + { + Spawn: + CSWP A -1; + Stop; + CSWP B -1; + Stop; + } } diff --git a/zscript/dispersionpistol.zsc b/zscript/dispersionpistol.zsc index 2037965..baf85a6 100644 --- a/zscript/dispersionpistol.zsc +++ b/zscript/dispersionpistol.zsc @@ -18,19 +18,16 @@ Class WeaponPowerUp : Inventory damo.Amount = min(damo.MaxAmount,damo.Amount+10); } let dpis = DispersionPistol(toucher.FindInventory("DispersionPistol")); - if ( dpis && (dpis.upgradelevel < 4) ) + if ( dpis && (dpis.pendingupgrade < 4) ) { + dpis.pendingupgrade++; if ( toucher.player && (toucher.player.ReadyWeapon == dpis) && (toucher.player.PendingWeapon == WP_NOCHANGE) ) { - dpis.upgradelevel++; let psp = toucher.player.FindPSprite(PSP_Weapon); - psp.SetState(dpis.FindState("Upgrade")); - } - else - { - dpis.pendingupgrade = true; - ScriptUtil.SetWeapon(toucher,"DispersionPistol"); + if ( toucher.player.WeaponState&WF_WEAPONREADY ) + psp.SetState(dpis.FindState("Upgrade")); } + else ScriptUtil.SetWeapon(toucher,"DispersionPistol"); } GoAwayAndDie(); return true; @@ -478,8 +475,7 @@ Class DispLight5 : EnforcerLight Class DispersionPistol : UnrealWeapon { - int upgradelevel; - bool pendingupgrade; + int upgradelevel, pendingupgrade; double chargesize, count; bool bCharging; int MainUse, ChargeUse; @@ -725,12 +721,8 @@ Class DispersionPistol : UnrealWeapon Idle: #### # 0 { - if ( invoker.pendingupgrade ) - { - invoker.pendingupgrade = false; - invoker.upgradelevel++; + if ( invoker.pendingupgrade > invoker.upgradelevel ) return ResolveState("Upgrade"); - } A_Overlay(-9999,"Dummy"); if ( invoker.upgradelevel == 0 ) return ResolveState("Idle1"); else if ( invoker.upgradelevel == 1 ) return ResolveState("Idle2"); @@ -845,10 +837,11 @@ Class DispersionPistol : UnrealWeapon DPI5 A 6; Goto Idle; Upgrade: - #### # 0 + #### # 1 { A_Overlay(-9999,"Null"); invoker.MainUse = min(6,invoker.upgradelevel+1); + invoker.upgradelevel++; if ( invoker.upgradelevel == 0 ) return ResolveState("Idle"); else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1"); else if ( invoker.upgradelevel == 2 ) return ResolveState("Upgrade2"); diff --git a/zscript/flamegun.zsc b/zscript/flamegun.zsc index 2425954..931ff41 100644 --- a/zscript/flamegun.zsc +++ b/zscript/flamegun.zsc @@ -1,3 +1,25 @@ Class FlameGun : UnrealWeapon { + Default + { + Tag "$T_FLAMEGUN"; + Inventory.PickupMessage "$I_FLAMEGUN"; + Weapon.UpSound "flamegun/select"; + Weapon.SlotNumber 5; + Weapon.SelectionOrder 2; + Weapon.AmmoType "FlameAmmo"; + Weapon.AmmoUse 10; + Weapon.AmmoType2 "FlameAmmo"; + Weapon.AmmoUse2 20; + Weapon.AmmoGive 100; + UTWeapon.DropAmmo 25; + } + States + { + Spawn: + FGNP A -1; + Stop; + FGNP B -1; + Stop; + } } diff --git a/zscript/gatling.zsc b/zscript/gatling.zsc index 9ed84b3..35caa17 100644 --- a/zscript/gatling.zsc +++ b/zscript/gatling.zsc @@ -1,7 +1,40 @@ Class SMiniAmmo : Ammo { + Default + { + Inventory.Icon "I_SMini"; + Inventory.Amount 4; + Inventory.MaxAmount 16; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 32; + } } Class SMiniGun : UnrealWeapon { + Default + { + Tag "$T_SMINI"; + Inventory.PickupMessage "$I_SMINI"; + Weapon.UpSound "smini/select"; + Weapon.SlotNumber 0; + Weapon.SelectionOrder 1; + Weapon.AmmoType "SMiniAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "SMiniAmmo"; + Weapon.AmmoUse2 4; + Weapon.AmmoGive 8; + Inventory.RespawnTics 2100; + +INVENTORY.IGNORESKILL; + +WEAPON.NOAUTOFIRE; + UTWeapon.DropAmmo 4; + } + States + { + Spawn: + SMIP A -1; + Stop; + SMIP B -1; + Stop; + } } diff --git a/zscript/impaler.zsc b/zscript/impaler.zsc index 667c427..ebbac2f 100644 --- a/zscript/impaler.zsc +++ b/zscript/impaler.zsc @@ -1,10 +1,73 @@ Class ImpalerAmmo : Ammo { + Default + { + Tag "$T_IMPAMMO"; + Inventory.Icon "I_Impale"; + Inventory.PickupMessage "$T_IMPAMMO"; + Inventory.Amount 3; + Inventory.MaxAmount 15; + Ammo.BackpackAmount 3; + Ammo.BackpackMaxAmount 30; + Ammo.DropAmount 3; + +INVENTORY.IGNORESKILL; + } + States + { + Spawn: + IAMO A -1; + Stop; + } } Class ImpalerAmmo2 : ImpalerAmmo { + Default + { + Tag "$T_IMPAMMO2"; + Inventory.PickupMessage "$T_IMPAMMO2"; + Inventory.Amount 1; + Ammo.DropAmount 1; + +INVENTORY.IGNORESKILL; + } +} + +Class ImpalerCharge : Ammo +{ + Default + { + Inventory.Amount 100; + Inventory.MaxAmount 100; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 100; + +INVENTORY.IGNORESKILL; + } } Class Impaler : UnrealWeapon { + Default + { + Tag "$T_IMPALER"; + Inventory.PickupMessage "$I_IMPALER"; + Weapon.UpSound "impaler/select"; + Weapon.SlotNumber 7; + Weapon.SelectionOrder 0; + Weapon.AmmoType "ImpalerAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "ImpalerCharge"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive1 60; + Weapon.AmmoGive2 0; + UTWeapon.DropAmmo 30; + +WEAPON.AMMO_OPTIONAL; + +WEAPON.ALT_AMMO_OPTIONAL; + } + States + { + Spawn: + IMPP A -1; + Stop; + IMPP B -1; + Stop; + } } diff --git a/zscript/miscitems.zsc b/zscript/miscitems.zsc index 06152e0..5223417 100644 --- a/zscript/miscitems.zsc +++ b/zscript/miscitems.zsc @@ -708,14 +708,31 @@ Class BetaFlare : UnrealInventory if ( !sting_flares ) return false; // not allowed return Super.TryPickup(toucher); } + Default + { + Inventory.MaxAmount 1; + UnrealInventory.Charge 100; + +INVENTORY.UNDROPPABLE; + +INVENTORY.UNTOSSABLE; + } } Class LightFlare : BetaFlare { + Default + { + Tag "$T_LFLARES"; + Inventory.Icon "I_FlarBL"; + } } Class DarkFlare : BetaFlare { + Default + { + Tag "$T_DFLARES"; + Inventory.Icon "I_FlarBD"; + } } Class Dampener : UnrealInventory @@ -907,16 +924,101 @@ Class ForcefieldEffect : Actor Class UFlashlight : UnrealInventory { + Actor lt[3]; + + Default + { + Tag "$T_FLASHLIGHT"; + Inventory.Icon "I_Flashl"; + Inventory.MaxAmount 3; + Inventory.PickupMessage "$I_FLASHLIGHT"; + UnrealInventory.Charge 2800; + } + States + { + Spawn: + SLIT A -1; + Stop; + } } -Class USearchlight : UnrealInventory +Class USearchlight : UFlashlight { + Default + { + Tag "$T_SEARCHLIGHT"; + Inventory.Icon "I_BigFl"; + Inventory.MaxAmount 1; + Inventory.PickupMessage "$I_SEARCHLIGHT"; + Inventory.RespawnTics 1050; + UnrealInventory.Charge 70000; + } } Class SentryItem : UnrealInventory { + Default + { + Tag "$T_SENTRY"; + Inventory.Icon "I_Sentry"; + Inventory.MaxAmount 1; + Inventory.PickupMessage "$I_SENTRY"; + Inventory.RespawnTics 1050; + UnrealInventory.Charge 300; + } + States + { + Spawn: + SENT A -1; + Stop; + } } +// The "head" of the sentry, attaches to the body Class MinigunSentry : Actor { + States + { + Spawn: + SENT A 15; + SENT A 0 A_PlaySound("sentry/raise"); + SENR ABCDEFGHIJKLMNO 3; + Goto Idle; + Idle: + SENI A 1; + Wait; + Fire: + SENW ABCDEFGHIJKLMNOPQR 1; + Goto FireLoop; + FireLoop: + SENF ABCDEFGHIJKLMNOPQR 1; + Loop; + FireEnd: + SENU ABCDEFGHIJKLMNOPQR 1; + Goto Idle; + } +} + +// The body of the sentry +Class MinigunSentryBase : Actor +{ + States + { + Spawn: + SENT A 15; + SENR ABCDEFGHIJKLMNO 3; + Goto Idle; + Idle: + SENI A 1; + Wait; + Fire: + SENW ABCDEFGHIJKLMNOPQR 1; + Goto FireLoop; + FireLoop: + SENF ABCDEFGHIJKLMNOPQR 1; + Loop; + FireEnd: + SENU ABCDEFGHIJKLMNOPQR 1; + Goto Idle; + } } diff --git a/zscript/napalm.zsc b/zscript/napalm.zsc index 804ac2a..193ace3 100644 --- a/zscript/napalm.zsc +++ b/zscript/napalm.zsc @@ -1,7 +1,50 @@ Class FlameAmmo : Ammo { + Default + { + Tag "$T_FLAMEAMMO"; + Inventory.Icon "I_Napalm"; + Inventory.PickupMessage "$I_FLAMEAMMO"; + Inventory.Amount 75; + Inventory.MaxAmount 450; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 900; + Ammo.DropAmount 30; + } + States + { + Spawn: + FLMA A -1; + Stop; + } } Class UFlamethrower : UnrealWeapon { + Default + { + Tag "$T_FLAMETHROWER"; + Inventory.PickupMessage "$I_FLAMETHROWER"; + Weapon.UpSound "flamet/select"; + Weapon.SlotNumber 6; + Weapon.SelectionOrder 4; + Weapon.AmmoType "FlameAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "FlameAmmo"; + Weapon.AmmoUse2 30; + Weapon.AmmoGive 100; + UTWeapon.DropAmmo 50; + } + States + { + Spawn: + FLMP A 1 A_JumpIf(sting_flamet,2); + Wait; + FLMP B 1 A_JumpIf(sting_flamet,2); + Wait; + OFLP A 1 A_JumpIf(!sting_flamet,"Spawn"); + Wait; + OFLP B 1 A_JumpIf(!sting_flamet,"Spawn+1"); + Wait; + } } diff --git a/zscript/peacemaker.zsc b/zscript/peacemaker.zsc index 136eef2..373c9a9 100644 --- a/zscript/peacemaker.zsc +++ b/zscript/peacemaker.zsc @@ -1,7 +1,35 @@ Class PeaceAmmo : Ammo { + Default + { + Inventory.Icon "I_Peace"; + Inventory.Amount 1; + Inventory.MaxAmount 8; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 16; + } } Class Peacemaker : UnrealWeapon { + Default + { + Tag "$T_PEACE"; + Inventory.PickupMessage "$I_PEACE"; + Weapon.UpSound "peace/select"; + Weapon.SlotNumber 8; + Weapon.SelectionOrder 1; + Weapon.AmmoType "PeaceAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoGive 1; + UTWeapon.DropAmmo 1; + } + States + { + Spawn: + PEAP A -1; + Stop; + PEAP B -1; + Stop; + } } diff --git a/zscript/quadshot.zsc b/zscript/quadshot.zsc index ba54030..33e9545 100644 --- a/zscript/quadshot.zsc +++ b/zscript/quadshot.zsc @@ -1,11 +1,63 @@ Class UShells : Ammo { + Default + { + Tag "$T_SHELLS"; + Inventory.Icon "I_ShotSh"; + Inventory.PickupMessage ""; + Inventory.Amount 12; + Inventory.MaxAmount 60; + Ammo.BackpackAmount 12; + Ammo.BackpackMaxAmount 120; + Ammo.DropAmount 6; + } + override String PickupMessage() + { + if ( PickupMsg.Length() > 0 ) return Super.PickupMessage(); + return String.Format("%s%d%s",StringTable.Localize("$I_SHELLSL"),Amount,StringTable.Localize("$I_SHELLSR")); + } + States + { + Spawn: + QAMO A -1; + Stop; + } } Class UShells2 : UShells { + Default + { + Tag "$T_SHELLS2"; + Inventory.Amount 4; + Ammo.DropAmount 4; + +INVENTORY.IGNORESKILL; + } } Class QuadShot : UnrealWeapon { + Default + { + Tag "$T_QUADSHOT"; + Inventory.PickupMessage "$I_QUADSHOT"; + Weapon.UpSound "quadshot/select"; + Weapon.SlotNumber 3; + Weapon.SelectionOrder 2; + Weapon.AmmoType "UShells"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "UShells"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 20; + Weapon.Kickback 320; + UTWeapon.DropAmmo 10; + } + States + { + Spawn: + QUAP A -1; + Stop; + QUAP B -1; + Stop; + } } diff --git a/zscript/razorjack.zsc b/zscript/razorjack.zsc index c1bf0f2..f08c686 100644 --- a/zscript/razorjack.zsc +++ b/zscript/razorjack.zsc @@ -1,7 +1,51 @@ Class RazorAmmo : Ammo { + Default + { + Tag "$T_RIPPERAMMO"; + Inventory.Icon "I_RazorA"; + Inventory.PickupMessage "$I_RIPPERAMMO"; + Inventory.Amount 25; + Inventory.MaxAmount 75; + Ammo.BackpackAmount 20; + Ammo.BackpackMaxAmount 150; + Ammo.DropAmount 15; + } + States + { + Spawn: + BHOP A 8 A_CheckProximity(1,"PlayerPawn",80,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT); + Wait; + BHOP AA 16; + BHOP B 8 A_CheckProximity(1,"PlayerPawn",80,0,CPXF_ANCESTOR|CPXF_CHECKSIGHT|CPXF_EXACT); + Goto Spawn+3; + BHOP BB 16; + Goto Spawn; + } } Class Razorjack : UnrealWeapon { + Default + { + Tag "$T_RAZORJACK"; + Inventory.PickupMessage "$I_RAZORJACK"; + Weapon.UpSound "razorjack/select"; + Weapon.SlotNumber 7; + Weapon.SelectionOrder 7; + Weapon.AmmoType "RazorAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "RazorAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 15; + UTWeapon.DropAmmo 10; + } + States + { + Spawn: + RZRP A -1; + Stop; + RZRP B -1; + Stop; + } } diff --git a/zscript/rifle.zsc b/zscript/rifle.zsc index 89c61a8..dc11a33 100644 --- a/zscript/rifle.zsc +++ b/zscript/rifle.zsc @@ -1,11 +1,69 @@ Class URifleAmmo : Ammo { + Default + { + Tag "$T_RIFLEAMMO"; + Inventory.PickupMessage ""; + Inventory.Amount 8; + Inventory.MaxAmount 50; + Ammo.BackpackAmount 12; + Ammo.BackpackMaxAmount 100; + Ammo.DropAmount 8; + +INVENTORY.IGNORESKILL; + } + override String PickupMessage() + { + if ( PickupMsg.Length() > 0 ) return Super.PickupMessage(); + return String.Format("%s%d%s",StringTable.Localize("$I_RIFLEAMMOL"),Amount,StringTable.Localize("$I_RIFLEAMMOR")); + } + States + { + Spawn: + SBOX A -1; + Stop; + } } Class URifleAmmo2 : URifleAmmo { + Default + { + Tag "$T_RIFLEAMMO2"; + Inventory.PickupMessage "$I_RIFLEAMMO2"; + Inventory.Amount 1; + Ammo.DropAmount 1; + +INVENTORY.IGNORESKILL; + } + States + { + Spawn: + SRND A -1; + Stop; + } } Class URifle : UnrealWeapon { + Default + { + Tag "$T_RIFLE"; + Inventory.PickupMessage "$I_RIFLE"; + Weapon.UpSound "rifle/select"; + Weapon.SlotNumber 9; + Weapon.SelectionOrder 9; + Weapon.AmmoType "URifleAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "URifleAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 8; + UTWeapon.DropAmmo 4; + } + States + { + Spawn: + SRFP A -1; + Stop; + SRFP B -1; + Stop; + } } diff --git a/zscript/stunner.zsc b/zscript/stunner.zsc index fd5a578..9555b6f 100644 --- a/zscript/stunner.zsc +++ b/zscript/stunner.zsc @@ -1,7 +1,50 @@ Class StunnerAmmo : Ammo { + double rechargephase, rechargespeed; + + Default + { + Inventory.Icon "I_Stun"; + Inventory.Amount 10; + Inventory.MaxAmount 50; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 50; + } + override void Tick() + { + Super.Tick(); + if ( !Owner ) return; + if ( Amount < 10 ) rechargespeed = 1.1; + else rechargespeed = 0.11*Amount; + rechargephase += 1./rechargespeed; + if ( rechargephase < 7 ) return; + rechargephase = 0; + Amount = min(Amount+1,MaxAmount); + } } Class Stunner : UnrealWeapon { + Default + { + Tag "$T_STUNNER"; + Inventory.PickupMessage "$I_STUNNER"; + Weapon.UpSound "stun/select"; + Weapon.SlotNumber 4; + Weapon.SelectionOrder 9; + Weapon.AmmoType "StunnerAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "StunnerAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 50; + UTWeapon.DropAmmo 50; + } + States + { + Spawn: + STNP A -1; + Stop; + STNP B -1; + Stop; + } } diff --git a/zscript/ubiorifle.zsc b/zscript/ubiorifle.zsc index 5b3e324..e682a5d 100644 --- a/zscript/ubiorifle.zsc +++ b/zscript/ubiorifle.zsc @@ -1,10 +1,67 @@ Class UBioAmmo : Ammo { + Default + { + Tag "$T_SLUDGE"; + Inventory.Icon "I_Sludge"; + Inventory.PickupMessage ""; + Inventory.Amount 25; + Inventory.MaxAmount 100; + Ammo.BackpackAmount 50; + Ammo.BackpackMaxAmount 200; + Ammo.DropAmount 10; + } + override String PickupMessage() + { + if ( PickupMsg.Length() > 0 ) return Super.PickupMessage(); + return String.Format("%s%d%s",StringTable.Localize("$I_SLUDGEL"),Amount,StringTable.Localize("$I_SLUDGER")); + } + States + { + Spawn: + BIOA ABCDEFGHIJKLMNOPQRSTUVWYZ 1; + BIA2 ABCD 1; + Loop; + } } Class UBioAmmo2 : UBioAmmo { + Default + { + Tag "$T_SLUDGE2"; + Inventory.Amount 10; + Ammo.DropAmount 5; + } + States + { + Spawn: + BIOA ABCDEFGHIJKL 2; + Loop; + } } Class UBioRifle : UnrealWeapon { + Default + { + Tag "$T_BIORIFLE"; + Inventory.PickupMessage "$I_BIORIFLE"; + Weapon.UpSound "ges/select"; + Weapon.SlotNumber 8; + Weapon.SelectionOrder 8; + Weapon.AmmoType "UBioAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "UBioAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 25; + UTWeapon.DropAmmo 5; + } + States + { + Spawn: + BIOP A -1; + Stop; + BIOP B -1; + Stop; + } } diff --git a/zscript/ueightball.zsc b/zscript/ueightball.zsc index c82c037..280c685 100644 --- a/zscript/ueightball.zsc +++ b/zscript/ueightball.zsc @@ -1,10 +1,78 @@ Class URocketAmmo : Ammo { + Default + { + Tag "$T_ROCKETCAN"; + Inventory.Icon "I_Rocket"; + Inventory.PickupMessage ""; + Inventory.Amount 12; + Inventory.MaxAmount 48; + Ammo.BackpackAmount 9; + Ammo.BackpackMaxAmount 96; + Ammo.DropAmount 6; + +INVENTORY.IGNORESKILL; + } + override String PickupMessage() + { + if ( PickupMsg.Length() > 0 ) return Super.PickupMessage(); + return String.Format("%s%d%s",StringTable.Localize("$I_ROCKETCANL"),Amount,StringTable.Localize("$I_ROCKETCANR")); + } + States + { + Spawn: + RPAK A 8 A_CheckProximity(1,"PlayerPawn",80,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT); + Wait; + RPAK AABCDEFGHIJ 8; + RPAK J 8 A_CheckProximity(1,"PlayerPawn",80,0,CPXF_ANCESTOR|CPXF_CHECKSIGHT|CPXF_EXACT); + Goto Spawn+12; + RPAK JJIHGFEDCBA 8; + Goto Spawn; + } } Class URocketAmmo2 : URocketAmmo { + Default + { + Tag "$T_ROCKETCAN2"; + Inventory.Amount 2; + Ammo.DropAmount 2; + +INVENTORY.IGNORESKILL; + } + States + { + Spawn: + RCKT A 8 A_CheckProximity(1,"PlayerPawn",80,1,CPXF_ANCESTOR|CPXF_CHECKSIGHT); + Wait; + RCKT AA 8; + RCKT B 8 A_CheckProximity(1,"PlayerPawn",80,0,CPXF_ANCESTOR|CPXF_CHECKSIGHT|CPXF_EXACT); + Goto Spawn+3; + RCKT BB 8; + Goto Spawn; + } } Class Eightball : UnrealWeapon { + Default + { + Tag "$T_EIGHTBALL"; + Inventory.PickupMessage "$I_EIGHTBALL"; + Weapon.UpSound "eightball/select"; + Weapon.SlotNumber 5; + Weapon.SelectionOrder 5; + Weapon.AmmoType "URocketAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "URocketAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 6; + UTWeapon.DropAmmo 3; + } + States + { + Spawn: + EBLP A -1; + Stop; + EBLP B -1; + Stop; + } } diff --git a/zscript/uflakcannon.zsc b/zscript/uflakcannon.zsc index 72f13d3..ba735dd 100644 --- a/zscript/uflakcannon.zsc +++ b/zscript/uflakcannon.zsc @@ -43,6 +43,139 @@ Class UFlakAmmo : UFlakBox } } +// subclass to save time, much of the behavior is the same anyway +Class UFlakChunk : FlakChunk +{ + override void PostBeginPlay() + { + Actor.PostBeginPlay(); + // no trail, spin much slower + lifetime = 0; + rollvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1); + pitchvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1); + yawvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1); + scale *= Frandom[Flak](0.8,1.2); + SetState(ResolveState("Spawn")+Random[Flak](0,3)); + } + override void Tick() + { + oldvel = vel; + Actor.Tick(); + if ( isFrozen() ) return; + // no slowing down in water, only set to falling + if ( waterlevel > 0 ) + { + bNOGRAVITY = false; + bAMBUSH = true; + } + lifetime += lifespeed; + // no frame changes, smoke based on speed + age + if ( (waterlevel <= 0) && !bAMBUSH && !(GetAge()%2) ) + { + let s = Spawn("UTSmoke",pos); + s.vel = (FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1)); + s.alpha = (scale.x*clamp((120-GetAge())/120.+(vel.length()/20.),0.5,2.0))/0.5; + s.SetShade("AAAAAA"); + } + else if ( waterlevel > 0 ) + { + let s = Spawn("UTBubble",pos); + s.vel = (FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1)); + s.scale *= scale.x*0.5; + } + if ( InStateSequence(CurState,FindState("Death")) ) return; + roll += rollvel; + pitch += pitchvel; + angle += pitchvel; + } + Default + { + DamageFunction 17; // exactly 1 point higher than UT + Scale 0.5; + } + States + { + Bounce: + #### # 0 + { + A_HandleBounce(); + // override spin velocity changes from parent class + rollvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1); + pitchvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1); + yawvel = FRandom[Flak](5,10)*RandomPick[Flak](-1,1); + } + Goto Idle; + } +} + +// Also subclassed to save time, only the explosion needs to change +Class UFlakSlug : FlakSlug +{ + action void A_UFlakExplode() + { + bForceXYBillboard = true; + A_SetRenderStyle(1.0,STYLE_Add); + A_SprayDecal("RocketBlast",50); + A_NoGravity(); + A_SetScale(1.2); + UTMainHandler.DoBlast(self,120,75000); + A_Explode(70,120); + A_QuakeEx(4,4,4,8,0,170,"",QF_RELATIVE|QF_SCALEDOWN,falloff:120,rollIntensity:0.2); + A_PlaySound("flak/explode",CHAN_VOICE); + A_AlertMonsters(); + if ( !Tracer ) Spawn("SlugSmoke",pos); + Spawn("SlugLight",pos); + Vector3 x, y, z; + double a, s; + [x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll); + Actor p; + Vector3 spawnofs; + if ( BlockingMobj ) spawnofs = level.Vec3Diff(pos,BlockingMobj.Vec3Offset(0,0,BlockingMobj.height/2)).unit()*8; + else if ( BlockingFloor ) spawnofs = BlockingFloor.floorplane.Normal*8; + else if ( BlockingCeiling ) spawnofs = BlockingCeiling.ceilingplane.Normal*8; + else if ( BlockingLine ) + { + spawnofs = (-BlockingLine.delta.y,BlockingLine.delta.x,0).unit()*8; + if ( !BlockingLine.sidedef[1] || (CurSector == BlockingLine.frontsector) ) + spawnofs *= -1; + } + for ( int i=0; i<5; i++ ) + { + p = Spawn("UFlakChunk",Vec3Offset(spawnofs.x,spawnofs.y,spawnofs.z)); + p.bHITOWNER = true; + a = FRandom[Flak](0,360); + s = FRandom[Flak](0,0.1); + Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit(); + p.angle = atan2(dir.y,dir.x); + p.pitch = -asin(dir.z); + p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*(p.speed+FRandom[Flak](-3,3)); + p.target = target; + } + int numpt = Random[Flak](8,12); + for ( int i=0; i 0 ) return Super.PickupMessage(); return String.Format("%s%d%s",StringTable.Localize("$I_MINIAMMOL"),Amount,StringTable.Localize("$I_MINIAMMOR")); } + States + { + Spawn: + MAMO A -1; + Stop; + } } Class UMinigun : UnrealWeapon { + Default + { + Tag "$T_MINIGUN"; + Inventory.PickupMessage "$I_MINIGUN"; + Weapon.UpSound "minigun/select"; + Weapon.SlotNumber 0; + Weapon.SelectionOrder 10; + Weapon.AmmoType "UMiniAmmo"; + Weapon.AmmoUse 1; + Weapon.AmmoType2 "UMiniAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 50; + UTWeapon.DropAmmo 25; + } + States + { + Spawn: + MGNP A -1; + Stop; + MGNP B -1; + Stop; + } } diff --git a/zscript/unrealcommon.zsc b/zscript/unrealcommon.zsc index 6afb462..a9cf00b 100644 --- a/zscript/unrealcommon.zsc +++ b/zscript/unrealcommon.zsc @@ -78,6 +78,7 @@ Class UPlayer : UTPlayer { if ( !(AllActorClasses[i].GetParentClass() is "UnrealArmor") ) continue; let item = Inventory(Spawn(AllActorClasses[i])); + item.ClearCounters(); // don't increase item counts if ( !item.CallTryPickup(self) ) item.Destroy(); } if ( !giveall ) return; @@ -735,21 +736,13 @@ Class UnrealMainHandler : EventHandler if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') ) { if ( !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp'; - else switch ( Random[Replacements](0,3) ) + else if ( Random[Replacements](0,2) ) { - case 0: - e.Replacement = 'Bonesaw'; - break; - case 1: - e.Replacement = 'Stunner'; - break; - case 2: - e.Replacement = 'Betamag'; - break; - case 3: - e.Replacement = 'Automag'; - break; + if ( Random[Replacements](0,1) ) e.Replacement = 'Bonesaw'; + else e.Replacement = 'Stunner'; } + else if ( !Random[Replacements](0,2) ) e.Replacement = 'Betamag'; + else e.Replacement = 'Automag'; } else if ( (e.Replacee == 'Fist') || (e.Replacee == 'Staff') ) e.Replacement = 'DispersionPistol'; else if ( (e.Replacee == 'Pistol') || (e.Replacee == 'GoldWand') ) @@ -794,7 +787,7 @@ Class UnrealMainHandler : EventHandler } else if ( (e.Replacee == 'PlasmaRifle') || (e.Replacee == 'SkullRod') ) { - if ( !Random[Replacements](0,3) ) e.Replacement = 'Impaler'; + if ( !Random[Replacements](0,2) ) e.Replacement = 'Impaler'; else if ( Random[Replacements](0,1) ) e.Replacement = 'URifle'; else e.Replacement = 'UBioRifle'; } @@ -868,7 +861,11 @@ Class UnrealMainHandler : EventHandler } else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') ) { - if ( !Random[Replacements](0,4) ) e.Replacement = 'BigAmmo2'; + if ( !Random[Replacements](0,4) ) + { + if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo2'; + else e.Replacement = 'BigAmmo3'; + } else if ( !Random[Replacements](0,3) ) { if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo'; @@ -887,7 +884,11 @@ Class UnrealMainHandler : EventHandler } else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') ) { - if ( !Random[Replacements](0,4) ) e.Replacement = 'BigAmmo'; + if ( !Random[Replacements](0,4) ) + { + if ( !Random[Replacements](0,2) ) e.Replacement = 'BigAmmo'; + else e.Replacement = 'BigAmmo2'; + } else if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo'; else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo'; else e.Replacement = 'URifleAmmo'; diff --git a/zscript/unrealhud.zsc b/zscript/unrealhud.zsc index 378fd00..5b1d580 100644 --- a/zscript/unrealhud.zsc +++ b/zscript/unrealhud.zsc @@ -233,7 +233,7 @@ Class UnrealHUD : BaseStatusBar Screen.DrawTexture(IconBase,false,CurX,CurY,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true); Screen.DrawTexture(i.Icon,false,dx,dy,DTA_VirtualWidthF,dw,DTA_VirtualHeightF,dh,DTA_KeepRatio,true,DTA_TopOffset,0,DTA_LeftOffset,0); } - if ( (i is 'UnrealInventory') && (UnrealInventory(i).DefaultCharge > 0) ) + if ( (i is 'UnrealInventory') && (UnrealInventory(i).DefaultCharge > 0) && (UnrealInventory(i).bActive || (UnrealInventory(i).Charge < UnrealInventory(i).DefaultCharge)) ) Screen.DrawTexture(HudLine,false,CurX+2,CurY+29,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_WindowRightF,Min(28.*(UnrealInventory(i).Charge/double(UnrealInventory(i).DefaultCharge)),28.)); else if ( (i is 'UTArmor') && !HudMode ) Screen.DrawTexture(HudLine,false,CurX+2,CurY+29,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true,DTA_WindowRightF,Min(28.*(i.Amount/double(i.MaxAmount)),28.)); diff --git a/zscript/upowerups.zsc b/zscript/upowerups.zsc index ba347be..2a1742b 100644 --- a/zscript/upowerups.zsc +++ b/zscript/upowerups.zsc @@ -270,8 +270,41 @@ Class UJumpBoots : UnrealInventory Class MotionDetector : UnrealInventory { + Default + { + Tag "$T_DETECTOR"; + +COUNTITEM; + +INVENTORY.BIGPOWERUP; + +INVENTORY.ALWAYSPICKUP; + Inventory.MaxAmount 1; + Inventory.Icon "I_Detect"; + Inventory.PickupMessage "$I_DETECTOR"; + Inventory.RespawnTics 1050; + UnrealInventory.Charge 3500; + } + States + { + Spawn: + MDET A -1; + Stop; + } } Class SCUBAGear : UnrealInventory { + Default + { + Tag "$T_SCUBA"; + Inventory.MaxAmount 1; + Inventory.Icon "I_Scuba"; + Inventory.PickupMessage "$I_SCUBA"; + Inventory.RespawnTics 700; + UnrealInventory.Charge 4200; + } + States + { + Spawn: + SCUB A -1; + Stop; + } } diff --git a/zscript/utranslocator.zsc b/zscript/utranslocator.zsc index accdf9b..68fa73a 100644 --- a/zscript/utranslocator.zsc +++ b/zscript/utranslocator.zsc @@ -1,5 +1,14 @@ Class UTranslocatorAmmo : Ammo { + Default + { + Inventory.Icon "I_Tele"; + Inventory.Amount 1; + Inventory.MaxAmount 2; + Ammo.BackpackAmount 0; + Ammo.BackpackMaxAmount 2; + +INVENTORY.IGNORESKILL; + } } Class UTranslocator : UnrealWeapon @@ -9,4 +18,27 @@ Class UTranslocator : UnrealWeapon if ( !sting_telegun ) return false; // not allowed return Super.TryPickup(toucher); } + Default + { + Tag "$T_TELEGUN"; + Inventory.PickupMessage "$I_TELEGUN"; + Weapon.SlotNumber 9; + Weapon.SelectionOrder 10; + Weapon.AmmoType1 "UTranslocatorAmmo"; + Weapon.AmmoUse1 1; + Weapon.AmmoType2 "UTranslocatorAmmo"; + Weapon.AmmoUse2 1; + Weapon.AmmoGive 2; + UTWeapon.DropAmmo 2; + +WEAPON.NO_AUTO_SWITCH; + +WEAPON.CHEATNOTWEAPON; + } + States + { + Spawn: + TLCP A -1; + Stop; + TLCP B -1; + Stop; + } }