Oh boy, it begins.

Assigned all pickup models.
Implemented all ammo types.
Finished Flak Cannon.
Additional cleanup.
Slot reassignments and other adjustments to match known Unreal prototype info.
This commit is contained in:
Marisa the Magician 2019-09-04 02:37:59 +02:00
commit 912cad96c5
71 changed files with 1949 additions and 73 deletions

View file

@ -285,11 +285,15 @@ The weapon is completely useless if the user or target are underwater.
## Fireblaster ## Fireblaster
Another Mercenary invention, and a direct evolution of the previously listed 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 Like its predecessor, the Fireblaster is obviously completely useless when
water is involved. A very clever human scientist would eventually solve this, water is involved. A very clever human scientist would eventually solve this,

View file

@ -13,6 +13,7 @@ Doom Tournament (currently the devel branch is required).
- Dual Automags - Dual Automags
- Stinger (slot 3) (replaces shotguns) - Stinger (slot 3) (replaces shotguns)
- ASMD (slot 4) (replaces shotguns) - ASMD (slot 4) (replaces shotguns)
- Flak Cannon (slot 6) (replaces rocket launcher)
- Backpack (replaces backpack, identical to Doom Tournament version) - Backpack (replaces backpack, identical to Doom Tournament version)
- Unreal 1 HUD - Unreal 1 HUD
- Translator (has to be spawned in, since it would only be useful for mappers) - 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 ## 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) - Flashlight (replaces light amplifier)
- Searchlight (must be placed manually for balance reasons) - Searchlight (must be placed manually for balance reasons)
@ -46,28 +51,28 @@ Doom Tournament (currently the devel branch is required).
## Planned ## Planned
- Implement Stinger behavior described in the Unreal Bible - Unreal Bible & prototype build behaviour restoration
- Eightball (slot 5) (replaces rocket launcher) - Stinger projectile remanence & explosion
- Razorjack (slot 7) (replaces chaingun) - Razorjack hold fire to increase blade speed
- Make altfire actually seek where player is aiming - Rifle restored rapid fire
- Unreal Bible spin speed behavior - Rifle restored flashlight
- GES Bio Rifle (slot 8) (replaces plasma rifle)
- Rifle (slot 9) (replaces plasma rifle)
- Restored rapid fire
- Restored flashlight
- Minigun (slot 0) (replaces chaingun)
- 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) - Razorclaw (slot 1) (replaces chainsaw)
- Teleport Capsule (slot 1) - Teleport Capsules (slot 9)
- Proto Automag (slot 2) (replaces pistol) - Protomag (slot 2) (replaces pistol)
- Dual Protomags - Dual Protomags
- Quadshot (slot 3) (replaces shotguns) - Quadshot (slot 3) (replaces shotguns)
- Peacemaker (slot 5) (rare spawn in backpacks) - Peacemaker (slot 8) (rare spawn in backpacks)
- Impaler (slot 4) (replaces plasma rifle) - Impaler (slot 7) (replaces plasma rifle)
- Flamethrower (slot 8) (replaces plasma rifle) - Flamethrower (slot 6) (replaces plasma rifle)
- Fireblaster (slot 7) (replaces rocket launcher) - Fireblaster (slot 5) (replaces rocket launcher)
- Demolisher (slot 9) (replaces bfg9000) - Demolisher (slot 0) (replaces bfg9000)
- Autocannon (slot 0) (replaces bfg9000) - Autocannon (slot 0) (replaces bfg9000)
- Motion Detector (replaces computer map) - Motion Detector (replaces computer map)

BIN
brightmaps/JNaliFruit1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,3 +1,5 @@
Models, textures and audio (C)1995-1999 Epic Games. 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. Porting and adjustments by Marisa Kirisame.

View file

@ -43,6 +43,28 @@ Object StingerAmmo2
{ {
Frame "SAMO" { light "STINGERAMMOLIGHT2" } 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 PointLight FLAKAMMOLIGHT
{ {
Color 0.1 0.4 0.0 Color 0.1 0.4 0.0
@ -64,6 +86,29 @@ Object StingerProjectile
{ {
Frame "TPRJA" { light "STINGERLIGHT" } 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 PointLight DAMPENERLIGHT0
{ {
@ -242,6 +287,18 @@ Object DAmmo5
Frame "DISM" { light "DAMMOLIGHT5" } 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 // Shaders / Brightmaps
HardwareShader Texture "graphics/MenuBarr.png" HardwareShader Texture "graphics/MenuBarr.png"
{ {
@ -491,9 +548,9 @@ HardwareShader Texture "models/JInvisibility1.png"
{ {
Shader "shaders/glsl/AmbientGlow.fp" 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" HardwareShader Texture "models/JNapalm1_.png"
{ {

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

@ -53,7 +53,7 @@ I_IMPAMMO2 = "You picked up an Enriched Tarydium Shard.";
I_FLAMEAMMO = "You picked up a can of Napalm."; I_FLAMEAMMO = "You picked up a can of Napalm.";
I_BIGAMMOL = "You picked up "; I_BIGAMMOL = "You picked up ";
I_BIGAMMOR = " Big Bullets."; 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_DPISTOL = "You got the Dispersion Pistol.";
I_AUTOMAG = "You picked up the Automag."; I_AUTOMAG = "You picked up the Automag.";
I_AUTOMAG2 = "You picked up another 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_FLAMEAMMO = "Has recogido una lata de Napalm.";
I_BIGAMMOL = "Has recogido "; I_BIGAMMOL = "Has recogido ";
I_BIGAMMOR = " Grandes Balas."; 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_DPISTOL = "Has obtenido una Pistola de Dispersión.";
I_AUTOMAG = "Has recogido la Autoarma."; I_AUTOMAG = "Has recogido la Autoarma.";
I_AUTOMAG2 = "Has recogido otra Autoarma."; I_AUTOMAG2 = "Has recogido otra Autoarma.";

15
modeldef.betamag Normal file
View file

@ -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
}

44
modeldef.biggun Normal file
View file

@ -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
}

15
modeldef.bonesaw Normal file
View file

@ -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
}

48
modeldef.eightball Normal file
View file

@ -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
}

14
modeldef.flamegun Normal file
View file

@ -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
}

14
modeldef.gatling Normal file
View file

@ -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
}

43
modeldef.impaler Normal file
View file

@ -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
}

45
modeldef.napalm Normal file
View file

@ -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
}

15
modeldef.peacemaker Normal file
View file

@ -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
}

39
modeldef.quadshot Normal file
View file

@ -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
}

28
modeldef.razorjack Normal file
View file

@ -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
}

37
modeldef.rifle Normal file
View file

@ -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
}

14
modeldef.stunner Normal file
View file

@ -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
}

76
modeldef.ubiorifle Normal file
View file

@ -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
}

View file

@ -22,6 +22,36 @@ Model "UFlakAmmo"
FrameIndex FAMO B 0 0 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" Model "UFlakCannon"
{ {
Path "models" Path "models"
@ -33,12 +63,11 @@ Model "UFlakCannon"
FrameIndex FPCK B 1 0 FrameIndex FPCK B 1 0
ZOffset 12 ZOffset 13
ROTATING ROTATING
FrameIndex FPCK A 1 0 FrameIndex FPCK A 1 0
} }
Model "UFlakCannon" Model "UFlakCannon"
{ {
Path "models" Path "models"

27
modeldef.uminigun Normal file
View file

@ -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
}

View file

@ -388,7 +388,245 @@ Model "UJumpBoots"
Model 0 "lboot_d.3d" Model 0 "lboot_d.3d"
Skin 0 "Jlboot1.png" Skin 0 "Jlboot1.png"
Scale 0.06 0.06 0.072 Scale 0.06 0.06 0.072
AngleOffset 180
ZOffset 6 ZOffset 6
FrameIndex JBUT A 0 0 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
}

15
modeldef.utranslocator Normal file
View file

@ -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
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
models/ChnkX_a.3d Normal file

Binary file not shown.

BIN
models/ChnkX_d.3d Normal file

Binary file not shown.

BIN
models/JFlame2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
models/JFlame3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
models/JRocket1_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

3
textures.biggun Normal file
View file

@ -0,0 +1,3 @@
Sprite "BIGAA0",1,1{}
Sprite "BIGPA0",1,1{}
Sprite "BIGSA0",1,1{}

3
textures.flamegun Normal file
View file

@ -0,0 +1,3 @@
Sprite "FGNPA0",1,1{}
Sprite "FGNSA0",1,1{}
Sprite "FIRBA0",1,1{}

2
textures.gatling Normal file
View file

@ -0,0 +1,2 @@
Sprite "SMIPA0",1,1{}
Sprite "SMISA0",1,1{}

1
textures.impaler Normal file
View file

@ -0,0 +1 @@
Sprite "IAMOA0",1,1{}

6
textures.napalm Normal file
View file

@ -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{}

4
textures.peacemaker Normal file
View file

@ -0,0 +1,4 @@
Sprite "PEAPA0",1,1{}
Sprite "PEASA0",1,1{}
Sprite "PEAMA0",1,1{}
Sprite "PEARA0",1,1{}

3
textures.quadshot Normal file
View file

@ -0,0 +1,3 @@
Sprite "QAMOA0",1,1{}
Sprite "QUAPA0",1,1{}
Sprite "QUASA0",1,1{}

View file

@ -21,3 +21,5 @@ Sprite "SEEDA0",1,1{}
Sprite "FRUTA0",1,1{} Sprite "FRUTA0",1,1{}
Sprite "FLARA0",1,1{} Sprite "FLARA0",1,1{}
Sprite "SCUBA0",1,1{} Sprite "SCUBA0",1,1{}
Sprite "MDETA0",1,1{}
Sprite "SENTA0",1,1{}

View file

@ -290,20 +290,25 @@ Class ViewASMDSpark : ShockSpark
Class ASMDHitbox : ShockHitbox Class ASMDHitbox : ShockHitbox
{ {
Default override void Tick()
{ {
Health 1; Super.Tick();
+SHOOTABLE; if ( !target ) return;
+NOBLOOD; let t = ThinkerIterator.Create("ASMDHitbox");
} Actor a;
override void Die( Actor source, Actor inflictor, int dmgflags, Name MeansOfDeath ) while ( a = Actor(t.Next()) )
{
if ( target && target.InStateSequence(target.CurState,target.FindState("Spawn")) )
{ {
target.bAMBUSH = true; if ( (a == self) || !(a is 'ASMDHitbox') || a.bAMBUSH || (Distance3D(a) > radius*2) ) continue;
target.ExplodeMissile(); 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); 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; let b = t.Results.HitActor.target;
b.bAMBUSH = true;
b.ExplodeMissile();
b.pitch = 90; b.pitch = 90;
b.angle = 0; b.angle = 0;
b.roll = 0; b.roll = 0;

View file

@ -38,6 +38,11 @@ Class Automag : UnrealWeapon
} }
return Super.HandlePickup(item); return Super.HandlePickup(item);
} }
override String PickupMessage()
{
if ( Owner ) return Super.PickupMessage();
return StringTable.Localize("$I_AUTOMAG2");
}
override Inventory CreateTossable( int amt ) override Inventory CreateTossable( int amt )
{ {
Inventory inv = Super.CreateTossable(amt); Inventory inv = Super.CreateTossable(amt);

View file

@ -1,3 +1,29 @@
Class Betamag : UnrealWeapon 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;
}
} }

View file

@ -1,11 +1,79 @@
Class BigAmmo : Ammo 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 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 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;
}
} }

View file

@ -1,3 +1,22 @@
Class Bonesaw : UnrealWeapon 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;
}
} }

View file

@ -18,19 +18,16 @@ Class WeaponPowerUp : Inventory
damo.Amount = min(damo.MaxAmount,damo.Amount+10); damo.Amount = min(damo.MaxAmount,damo.Amount+10);
} }
let dpis = DispersionPistol(toucher.FindInventory("DispersionPistol")); 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) ) if ( toucher.player && (toucher.player.ReadyWeapon == dpis) && (toucher.player.PendingWeapon == WP_NOCHANGE) )
{ {
dpis.upgradelevel++;
let psp = toucher.player.FindPSprite(PSP_Weapon); let psp = toucher.player.FindPSprite(PSP_Weapon);
psp.SetState(dpis.FindState("Upgrade")); if ( toucher.player.WeaponState&WF_WEAPONREADY )
} psp.SetState(dpis.FindState("Upgrade"));
else
{
dpis.pendingupgrade = true;
ScriptUtil.SetWeapon(toucher,"DispersionPistol");
} }
else ScriptUtil.SetWeapon(toucher,"DispersionPistol");
} }
GoAwayAndDie(); GoAwayAndDie();
return true; return true;
@ -478,8 +475,7 @@ Class DispLight5 : EnforcerLight
Class DispersionPistol : UnrealWeapon Class DispersionPistol : UnrealWeapon
{ {
int upgradelevel; int upgradelevel, pendingupgrade;
bool pendingupgrade;
double chargesize, count; double chargesize, count;
bool bCharging; bool bCharging;
int MainUse, ChargeUse; int MainUse, ChargeUse;
@ -725,12 +721,8 @@ Class DispersionPistol : UnrealWeapon
Idle: Idle:
#### # 0 #### # 0
{ {
if ( invoker.pendingupgrade ) if ( invoker.pendingupgrade > invoker.upgradelevel )
{
invoker.pendingupgrade = false;
invoker.upgradelevel++;
return ResolveState("Upgrade"); return ResolveState("Upgrade");
}
A_Overlay(-9999,"Dummy"); A_Overlay(-9999,"Dummy");
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle1"); if ( invoker.upgradelevel == 0 ) return ResolveState("Idle1");
else if ( invoker.upgradelevel == 1 ) return ResolveState("Idle2"); else if ( invoker.upgradelevel == 1 ) return ResolveState("Idle2");
@ -845,10 +837,11 @@ Class DispersionPistol : UnrealWeapon
DPI5 A 6; DPI5 A 6;
Goto Idle; Goto Idle;
Upgrade: Upgrade:
#### # 0 #### # 1
{ {
A_Overlay(-9999,"Null"); A_Overlay(-9999,"Null");
invoker.MainUse = min(6,invoker.upgradelevel+1); invoker.MainUse = min(6,invoker.upgradelevel+1);
invoker.upgradelevel++;
if ( invoker.upgradelevel == 0 ) return ResolveState("Idle"); if ( invoker.upgradelevel == 0 ) return ResolveState("Idle");
else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1"); else if ( invoker.upgradelevel == 1 ) return ResolveState("Upgrade1");
else if ( invoker.upgradelevel == 2 ) return ResolveState("Upgrade2"); else if ( invoker.upgradelevel == 2 ) return ResolveState("Upgrade2");

View file

@ -1,3 +1,25 @@
Class FlameGun : UnrealWeapon 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;
}
} }

View file

@ -1,7 +1,40 @@
Class SMiniAmmo : Ammo Class SMiniAmmo : Ammo
{ {
Default
{
Inventory.Icon "I_SMini";
Inventory.Amount 4;
Inventory.MaxAmount 16;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 32;
}
} }
Class SMiniGun : UnrealWeapon 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;
}
} }

View file

@ -1,10 +1,73 @@
Class ImpalerAmmo : Ammo 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 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 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;
}
} }

View file

@ -708,14 +708,31 @@ Class BetaFlare : UnrealInventory
if ( !sting_flares ) return false; // not allowed if ( !sting_flares ) return false; // not allowed
return Super.TryPickup(toucher); return Super.TryPickup(toucher);
} }
Default
{
Inventory.MaxAmount 1;
UnrealInventory.Charge 100;
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
}
} }
Class LightFlare : BetaFlare Class LightFlare : BetaFlare
{ {
Default
{
Tag "$T_LFLARES";
Inventory.Icon "I_FlarBL";
}
} }
Class DarkFlare : BetaFlare Class DarkFlare : BetaFlare
{ {
Default
{
Tag "$T_DFLARES";
Inventory.Icon "I_FlarBD";
}
} }
Class Dampener : UnrealInventory Class Dampener : UnrealInventory
@ -907,16 +924,101 @@ Class ForcefieldEffect : Actor
Class UFlashlight : UnrealInventory 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 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 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;
}
} }

View file

@ -1,7 +1,50 @@
Class FlameAmmo : Ammo 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 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;
}
} }

View file

@ -1,7 +1,35 @@
Class PeaceAmmo : Ammo Class PeaceAmmo : Ammo
{ {
Default
{
Inventory.Icon "I_Peace";
Inventory.Amount 1;
Inventory.MaxAmount 8;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 16;
}
} }
Class Peacemaker : UnrealWeapon 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;
}
} }

View file

@ -1,11 +1,63 @@
Class UShells : Ammo 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 Class UShells2 : UShells
{ {
Default
{
Tag "$T_SHELLS2";
Inventory.Amount 4;
Ammo.DropAmount 4;
+INVENTORY.IGNORESKILL;
}
} }
Class QuadShot : UnrealWeapon 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;
}
} }

View file

@ -1,7 +1,51 @@
Class RazorAmmo : Ammo 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 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;
}
} }

View file

@ -1,11 +1,69 @@
Class URifleAmmo : Ammo 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 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 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;
}
} }

View file

@ -1,7 +1,50 @@
Class StunnerAmmo : Ammo 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 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;
}
} }

View file

@ -1,10 +1,67 @@
Class UBioAmmo : Ammo 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 Class UBioAmmo2 : UBioAmmo
{ {
Default
{
Tag "$T_SLUDGE2";
Inventory.Amount 10;
Ammo.DropAmount 5;
}
States
{
Spawn:
BIOA ABCDEFGHIJKL 2;
Loop;
}
} }
Class UBioRifle : UnrealWeapon 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;
}
} }

View file

@ -1,10 +1,78 @@
Class URocketAmmo : Ammo 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 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 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;
}
} }

View file

@ -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<numpt; i++ )
{
Vector3 pvel = (FRandom[Flak](-1,1),FRandom[Flak](-1,1),FRandom[Flak](-1,1)).unit()*FRandom[Flak](2,8);
let s = Spawn("UTSpark",pos);
s.vel = pvel;
}
numpt = Random[Flak](15,30);
for ( int i=0; i<numpt; i++ )
{
Vector3 pvel = (FRandom[Flak](-1,1),FRandom[Flak](-1,1),FRandom[Flak](-1,1)).unit()*FRandom[Flak](6,16);
let s = Spawn("UTChip",pos);
s.vel = pvel;
s.scale *= FRandom[Flak](0.9,1.8);
}
}
States
{
Death:
FEXP A 0 A_UFlakExplode();
FEXP ABCDEFGHIJ 2 BRIGHT;
Stop;
}
}
Class UFlakCannon : UnrealWeapon Class UFlakCannon : UnrealWeapon
{ {
action void A_Loading( bool first = false ) action void A_Loading( bool first = false )
@ -65,6 +198,49 @@ Class UFlakCannon : UnrealWeapon
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.3,-0.8),FRandom[Flak](-0.5,0.5)),4,-1.5,2,SWING_Spring,2,2); UTMainHandler.DoSwing(self,(FRandom[Flak](-0.3,-0.8),FRandom[Flak](-0.5,0.5)),4,-1.5,2,SWING_Spring,2,2);
if ( !Dampener.Active(self) ) A_AlertMonsters(); if ( !Dampener.Active(self) ) A_AlertMonsters();
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05);
Vector3 x, y, z;
double a, s;
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+5.0*y-4.0*z;
[x, y, z] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
Vector3 offsets[8]; // vanilla adds these to each chunk
offsets[0] = (0,0,0);
offsets[1] = -z;
offsets[2] = 2*y+z;
offsets[3] = -y;
offsets[4] = 2*y-z;
offsets[5] = (0,0,0);
offsets[6] = y-z;
offsets[7] = 2*y+z;
Actor p;
for ( int i=0; i<8; i++ )
{
p = Spawn("UFlakChunk",level.Vec3Offset(origin,offsets[i]));
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 = self;
}
int numpt = Random[Flak](20,30);
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("UTViewSpark",origin);
UTViewSpark(s).ofs = (10,5,-4);
UTViewSpark(s).vvel = (FRandom[Flak](3,12),FRandom[Flak](-4,4),FRandom[Flak](-4,4));
s.target = self;
}
for ( int i=0; i<10; i++ )
{
let s = Spawn("UTViewSmoke",origin);
UTViewSmoke(s).ofs = (10,5,-4);
UTViewSmoke(s).vvel = (FRandom[Flak](0,1.2),FRandom[Flak](-.4,.4),FRandom[Flak](-.4,.4));
s.target = self;
s.scale *= 1.6;
s.alpha *= 0.5;
}
} }
action void A_FireSlug() action void A_FireSlug()
{ {
@ -81,6 +257,32 @@ Class UFlakCannon : UnrealWeapon
UTMainHandler.DoSwing(self,(FRandom[Flak](-0.4,-0.8),FRandom[Flak](0.4,0.8)),4,-1,3,SWING_Spring,3,5); UTMainHandler.DoSwing(self,(FRandom[Flak](-0.4,-0.8),FRandom[Flak](0.4,0.8)),4,-1,3,SWING_Spring,3,5);
if ( !Dampener.Active(self) ) A_AlertMonsters(); if ( !Dampener.Active(self) ) A_AlertMonsters();
A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
Vector3 x, y, z;
double a, s;
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+5.0*y-4.0*z;
Actor p = Spawn("UFlakSlug",origin);
p.angle = angle;
p.pitch = BulletSlope();
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
p.target = self;
int numpt = Random[Flak](10,15);
for ( int i=0; i<numpt; i++ )
{
let s = Spawn("UTViewSpark",origin);
UTViewSpark(s).ofs = (10,5,-4);
UTViewSpark(s).vvel = (FRandom[Flak](3,12),FRandom[Flak](-4,4),FRandom[Flak](-4,4));
s.target = self;
}
for ( int i=0; i<8; i++ )
{
let s = Spawn("UTViewSmoke",origin);
UTViewSmoke(s).ofs = (10,5,-4);
UTViewSmoke(s).vvel = (FRandom[Flak](0,1.2),FRandom[Flak](-.8,.8),FRandom[Flak](-.8,.8));
s.target = self;
s.scale *= 1.6;
s.alpha *= 0.5;
}
} }
Default Default
{ {

View file

@ -3,6 +3,7 @@ Class UMiniAmmo : Ammo
Default Default
{ {
Tag "$T_MINIAMMO"; Tag "$T_MINIAMMO";
Inventory.Icon "I_ShellA";
Inventory.PickupMessage ""; Inventory.PickupMessage "";
Inventory.Amount 50; Inventory.Amount 50;
Inventory.MaxAmount 200; Inventory.MaxAmount 200;
@ -15,8 +16,36 @@ Class UMiniAmmo : Ammo
if ( PickupMsg.Length() > 0 ) return Super.PickupMessage(); if ( PickupMsg.Length() > 0 ) return Super.PickupMessage();
return String.Format("%s%d%s",StringTable.Localize("$I_MINIAMMOL"),Amount,StringTable.Localize("$I_MINIAMMOR")); return String.Format("%s%d%s",StringTable.Localize("$I_MINIAMMOL"),Amount,StringTable.Localize("$I_MINIAMMOR"));
} }
States
{
Spawn:
MAMO A -1;
Stop;
}
} }
Class UMinigun : UnrealWeapon 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;
}
} }

View file

@ -78,6 +78,7 @@ Class UPlayer : UTPlayer
{ {
if ( !(AllActorClasses[i].GetParentClass() is "UnrealArmor") ) continue; if ( !(AllActorClasses[i].GetParentClass() is "UnrealArmor") ) continue;
let item = Inventory(Spawn(AllActorClasses[i])); let item = Inventory(Spawn(AllActorClasses[i]));
item.ClearCounters(); // don't increase item counts
if ( !item.CallTryPickup(self) ) item.Destroy(); if ( !item.CallTryPickup(self) ) item.Destroy();
} }
if ( !giveall ) return; if ( !giveall ) return;
@ -735,21 +736,13 @@ Class UnrealMainHandler : EventHandler
if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') ) if ( (e.Replacee == 'Chainsaw') || (e.Replacee == 'Gauntlets') )
{ {
if ( !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp'; if ( !Random[Replacements](0,3) ) e.Replacement = 'WeaponPowerUp';
else switch ( Random[Replacements](0,3) ) else if ( Random[Replacements](0,2) )
{ {
case 0: if ( Random[Replacements](0,1) ) e.Replacement = 'Bonesaw';
e.Replacement = 'Bonesaw'; else e.Replacement = 'Stunner';
break;
case 1:
e.Replacement = 'Stunner';
break;
case 2:
e.Replacement = 'Betamag';
break;
case 3:
e.Replacement = 'Automag';
break;
} }
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 == 'Fist') || (e.Replacee == 'Staff') ) e.Replacement = 'DispersionPistol';
else if ( (e.Replacee == 'Pistol') || (e.Replacee == 'GoldWand') ) else if ( (e.Replacee == 'Pistol') || (e.Replacee == 'GoldWand') )
@ -794,7 +787,7 @@ Class UnrealMainHandler : EventHandler
} }
else if ( (e.Replacee == 'PlasmaRifle') || (e.Replacee == 'SkullRod') ) 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 if ( Random[Replacements](0,1) ) e.Replacement = 'URifle';
else e.Replacement = 'UBioRifle'; else e.Replacement = 'UBioRifle';
} }
@ -868,7 +861,11 @@ Class UnrealMainHandler : EventHandler
} }
else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') ) 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) ) else if ( !Random[Replacements](0,3) )
{ {
if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo'; if ( !Random[Replacements](0,3) ) e.Replacement = 'ImpalerAmmo';
@ -887,7 +884,11 @@ Class UnrealMainHandler : EventHandler
} }
else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') ) 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,3) ) e.Replacement = 'ImpalerAmmo';
else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo'; else if ( Random[Replacements](0,1) ) e.Replacement = 'UBioAmmo';
else e.Replacement = 'URifleAmmo'; else e.Replacement = 'URifleAmmo';

View file

@ -233,7 +233,7 @@ Class UnrealHUD : BaseStatusBar
Screen.DrawTexture(IconBase,false,CurX,CurY,DTA_VirtualWidthF,ClipX,DTA_VirtualHeightF,ClipY,DTA_KeepRatio,true); 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); 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.)); 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 ) 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.)); 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.));

View file

@ -270,8 +270,41 @@ Class UJumpBoots : UnrealInventory
Class MotionDetector : 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 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;
}
} }

View file

@ -1,5 +1,14 @@
Class UTranslocatorAmmo : Ammo 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 Class UTranslocator : UnrealWeapon
@ -9,4 +18,27 @@ Class UTranslocator : UnrealWeapon
if ( !sting_telegun ) return false; // not allowed if ( !sting_telegun ) return false; // not allowed
return Super.TryPickup(toucher); 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;
}
} }