Major ammo overhaul.

DoExplosion sector portal fix.
This commit is contained in:
Mari the Deer 2021-09-12 19:09:00 +02:00
commit c1de57b376
43 changed files with 1249 additions and 681 deletions

View file

@ -74,6 +74,8 @@ All the hard stuff *(some of these aren't guaranteed)*.
* **Photo Mode**
- Dedicated poses
- Stickers
* **Virtual Training Map**
- Featuring Maidbot as assistant
## Unspecified

View file

@ -63,3 +63,19 @@ HardwareShader Texture "models/matcap/glassmap.png"
{
Shader "shaders/glsl/Shinemap.fp"
}
HardwareShader Texture "models/matcap/kinymap.png"
{
Shader "shaders/glsl/Shinemap.fp"
}
HardwareShader Texture "models/matcap/nkrknmap.png"
{
Shader "shaders/glsl/Shinemap.fp"
}
HardwareShader Texture "models/matcap/nokromap.png"
{
Shader "shaders/glsl/Shinemap.fp"
}
HardwareShader Texture "models/matcap/pearlmap.png"
{
Shader "shaders/glsl/Shinemap.fp"
}

View file

@ -59,47 +59,76 @@ T_GOLDSHELL = "Golden Shell";
T_GOLDSHELLS = "Golden Shells";
T_EVISHELL = "Eviscerator Shell";
T_EVISHELLS = "Eviscerator Shells";
I_EVISHELLCLIP2 = "Eviscerator Duo Clip";
I_EVISHELLCLIP3 = "Eviscerator Trio Clip";
I_EVISHELLPAK = "Eviscerator 6-Pack";
T_HELLMISSILES = "Hellblazer Missiles";
T_HELLCLUSTERS = "Hellblazer Crackshots";
T_HELLBURNINATORS = "Hellblazer Ravagers";
T_HELLNUKES = "Hellblazer Warheads";
T_HELLMISSILE = "Hellblazer Missile";
T_HELLCLUSTER = "Hellblazer Crackshot";
T_HELLBURNINATOR = "Hellblazer Ravager";
T_HELLNUKE = "Hellblazer Warhead";
T_HELLMISSILES = "Hellblazer Missiles";
T_HELLMISSILE2 = "2 Hellblazer Missiles";
T_HELLMISSILE3 = "3 Hellblazer Missiles";
T_HELLMISSILEMAG = "Hellblazer Missile Mag";
T_HELLCLUSTER = "Hellblazer Crackshot";
T_HELLCLUSTERS = "Hellblazer Crackshots";
T_HELLCLUSTER2 = "2 Hellblazer Crackshots";
T_HELLCLUSTERMAG = "Hellblazer Crackshot Mag";
T_HELLBURNINATOR = "Hellblazer Ravager";
T_HELLBURNINATORS = "Hellblazer Ravagers";
T_HELLBURNINATORMAG = "Hellblazer Ravager Mag";
T_HELLNUKE = "Hellblazer Warhead";
T_HELLNUKES = "Hellblazer Warheads";
T_HELLNUKEMAG = "Hellblazer Warhead Mag";
T_SPARKUNIT = "Biospark Unit";
T_SPARKUNITS = "Biospark Units";
T_XSBMAG = "1.150 XSB Magazine";
T_XSBMAGS = "1.150 XSB Magazines";
T_FCBMAG = "1.150 FCB Magazine";
T_FCBMAGS = "1.150 FCB Magazines";
T_XSBBULLET = "1.150 XSB Bullet";
T_XSBBULLETS = "1.150 XSB Bullets";
T_FCBBULLET = "1.150 FCB Bullet";
T_FCBBULLETS = "1.150 FCB Bullets";
T_CANDYMAG = "Candy Gun Magazine";
T_CANDYMAGS = "Candy Gun Magazines";
T_CANDYBULLET = "Candy Gun Bullet";
T_CANDYBULLETS = "Candy Gun Bullet";
T_CANDYSPARE = "Candy Gun Spare";
T_CANDYSPARES = "Candy Gun Spares";
T_YNYKRONAMMO = "Crystal Box";
T_YNYKRONAMMOS = "Crystal Boxes";
T_SMW05BULLET = "SMW.05 Bullet";
T_SMW05BULLETS = "SMW.05 Bullets";
T_SHEENBULLET = "14.5x114mm MT Bullet";
T_SHEENBULLETS = "14.5x114mm MT Bullets";
T_QUADAMMO = "Quadravol Cell";
T_QUADAMMOS = "Quadravol Cells";
T_DARKAMMO = "Blackfire Canister";
T_DARKAMMOS = "Blackfire Canisters";
T_EMPCORE = "Dysedum Rod";
T_EMPCORES = "Dysedum Rods";
T_RAYBOLT = "Ray-Khom Bolt";
T_RAYBOLTS = "Ray-Khom Bolts";
T_RAYAMMO = "Ray-Khom Magazine";
T_RAYAMMOS = "Ray-Khom Magazines";
T_RAYBATTERY = "Ray-Khom Battery";
T_RAYBATTERYS = "Ray-Khom Batteries";
T_GRANDSPEAR = "Grand Lance Spear";
T_GRANDSPEARS = "Grand Lance Spears";
T_GRANDAMMO = "Grand Lance Magazine";
T_SPARKBAMMO = "Kinylum Cell";
T_SPARKRAMMO = "Nokron Cell";
T_GRANDAMMOS = "Grand Lance Magazines";
T_SPARKBCELL = "Kinylum Cell";
T_SPARKBCELLS = "Kinylum Cells";
T_SPARKRCELL = "Nokron Cell";
T_SPARKRCELLS = "Nokron Cells";
T_MRROUND = "Mortal Round";
T_MRROUNDS = "Mortal Rounds";
T_MRAMMO = "Mortal Magazine";
T_MRAMMOS = "Mortal Magazines";
T_MRGRENADE = "Mortal Grenade";
T_MRGRENADES = "Mortal Grenades";
T_ULTIMATEPOD = "Rafan-Kos Pod";
T_ULTIMATEPODS = "Rafan-Kos Pods";
T_ULTIMATEAMMO = "Rafan-Kos Magazine";
T_ULTIMATEAMMOS = "Rafan-Kos Magazines";
T_BLASTSUIT = "Blast Suit";
T_EMBIGGENER = "Hammerspace Embiggener";
T_BULKEMBIGGENER = "Bulk Hammerspace Embiggener";

View file

@ -49,47 +49,73 @@ T_GOLDSHELL = "Cartucho Dorado";
T_GOLDSHELLS = "Cartuchos Dorados";
T_EVISHELL = "Proyectil de Eviscerator";
T_EVISHELLS = "Proyectiles de Eviscerator";
I_EVISHELLCLIP2 = "Clip en Duo para Eviscerator";
I_EVISHELLCLIP3 = "Clip en Trio para Eviscerator";
I_EVISHELLPAK = "Pack de Seis para Eviscerator";
T_HELLMISSILES = "Misiles Hellblazer";
T_HELLCLUSTERS = "Estalladores Hellblazer";
T_HELLBURNINATORS = "Ruinadores Hellblazer";
T_HELLNUKES = "Cabezas Nucleares Hellblazer";
T_HELLMISSILE = "Misil Hellblazer";
T_HELLCLUSTER = "Estallador Hellblazer";
T_HELLBURNINATOR = "Ruinador Hellblazer";
T_HELLNUKE = "Cabeza Nuclear Hellblazer";
T_HELLMISSILES = "Misiles Hellblazer";
T_HELLMISSILEMAG = "Cargador de Misiles Hellblazer";
T_HELLCLUSTER = "Estallador Hellblazer";
T_HELLCLUSTERS = "Estalladores Hellblazer";
T_HELLCLUSTERMAG = "Cargador de Estalladores Hellblazer";
T_HELLBURNINATOR = "Ruinador Hellblazer";
T_HELLBURNINATORS = "Ruinadores Hellblazer";
T_HELLBURNINATORMAG = "Cargador de Ruinadores Hellblazer";
T_HELLNUKE = "Cabeza Nuclear Hellblazer";
T_HELLNUKES = "Cabezas Nucleares Hellblazer";
T_HELLNUKEMAG = "Cargador de Cabezas Nucleares Hellblazer";
T_SPARKUNIT = "Unidad Biospark";
T_SPARKUNITS = "Unidades Biospark";
T_XSBMAG = "Cargador 1.150 XSB";
T_XSBMAGS = "Cargadores 1.150 XSB";
T_FCBMAG = "Cargador 1.150 FCB";
T_FCBMAGS = "Cargadores 1.150 FCB";
T_XSBBULLET = "Bala 1.150 XSB";
T_XSBBULLETS = "Balas 1.150 XSB";
T_FCBBULLET = "Bala 1.150 FCB";
T_FCBBULLETS = "Balas 1.150 FCB";
T_CANDYMAG = "Cargador de Pistola Caramelo";
T_CANDYMAGS = "Cargadores de Pistola Caramelo";
T_CANDYBULLET = "Bala de Pistola Caramelo";
T_CANDYBULLETS = "Balas de Pistola Caramelo";
T_CANDYSPARE = "Repuesto de Pistola Caramelo";
T_CANDYSPARES = "Repuestos de Pistola Caramelo";
T_YNYKRONAMMO = "Contenedor de Cristal";
T_YNYKRONAMMOS = "Contenedores de Cristal";
T_SMW05BULLET = "Bala SMW.05";
T_SMW05BULLETS = "Balas SMW.05";
T_SHEENBULLET = "Bala 14.5x114mm MT";
T_SHEENBULLETS = "Balas 14.5x114mm MT";
T_QUADAMMO = "Célula de Quadravol";
T_QUADAMMOS = "Células de Quadravol";
T_DARKAMMO = "Frasco de Fuego Negro";
T_DARKAMMOS = "Frascos de Fuego Negro";
T_EMPCORE = "Barra de Dysedum";
T_EMPCORES = "Barras de Dysedum";
T_RAYBOLT = "Proyectil de Ray-Khom";
T_RAYBOLTS = "Proyectiles de Ray-Khom";
T_RAYAMMO = "Cargador de Ray-Khom";
T_RAYAMMOS = "Cargadores de Ray-Khom";
T_RAYBATTERY = "Batería de Ray-Khom";
T_RAYBATTERYS = "Baterías de Ray-Khom";
T_GRANDSPEAR = "Arpón de Gran Lanza";
T_GRANDSPEARS = "Arpones de Gran Lanza";
T_GRANDAMMO = "Cargador de Gran Lanza";
T_GRANDAMMOS = "Cargadores de Gran Lanza";
T_SPARKBAMMO = "Célula de Kinylum";
T_SPARKBAMMOS = "Células de Kinylum";
T_SPARKRAMMO = "Célula de Nokron";
T_SPARKRAMMOS = "Células de Nokron";
T_MRROUND = "Bala Mortal";
T_MRROUNDS = "Balas Mortales";
T_MRAMMO = "Cargador Mortal";
T_MRAMMOS = "Cargadores Mortales";
T_MRGRENADE = "Granada Mortal";
T_MRGRENADES = "Granadas Mortales";
T_ULTIMATEPOD = "Cápsula de Rafan-Kos";
T_ULTIMATEPODS = "Cápsulas de Rafan-Kos";
T_ULTIMATEAMMO = "Cargador de Rafan-Kos";
T_ULTIMATEAMMOS = "Cargadores de Rafan-Kos";
T_BLASTSUIT = "Chaleco Antiexplosivos";
T_EMBIGGENER = "Ensanchecedor de Hammerspace";
T_BULKEMBIGGENER = "Ensanchecedor de Hammerspace a Granel";

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1pre r15 \cu(Sat 11 Sep 21:15:52 CEST 2021)\c-";
SWWM_SHORTVER="\cw1.1pre r15 \cu(2021-09-11 21:15:52)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1pre r16 \cu(Sun 12 Sep 19:09:00 CEST 2021)\c-";
SWWM_SHORTVER="\cw1.1pre r16 \cu(2021-09-12 19:09:00)\c-";

View file

@ -275,6 +275,32 @@ Model "EvisceratorShell"
FrameIndex XZW1 A 0 0
}
Model "EvisceratorShell2"
{
Path "models"
Model 0 "EvisceratorClip_Two_d.3d"
SurfaceSkin 0 0 "EvisceratorShell.png"
SurfaceSkin 0 1 "EvisceratorClip.png"
Scale 0.18 0.18 0.18
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "EvisceratorShell3"
{
Path "models"
Model 0 "EvisceratorClip_Three_d.3d"
SurfaceSkin 0 0 "EvisceratorShell.png"
SurfaceSkin 0 1 "EvisceratorClip.png"
Scale 0.18 0.18 0.18
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "EvisceratorSixPack"
{
Path "models"
@ -302,6 +328,30 @@ Model "HellblazerMissiles"
FrameIndex XZW1 A 0 0
}
Model "HellblazerMissiles2"
{
Path "models"
Model 0 "HellblazerDuo_d.3d"
Skin 0 "HellblazerMissile.png"
Scale 0.16 0.16 0.16
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "HellblazerMissiles3"
{
Path "models"
Model 0 "HellblazerTrio_d.3d"
Skin 0 "HellblazerMissile.png"
Scale 0.16 0.16 0.16
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "HellblazerMissileMag"
{
Path "models"
@ -330,6 +380,18 @@ Model "HellblazerCrackshots"
FrameIndex XZW1 A 0 0
}
Model "HellblazerCrackshots2"
{
Path "models"
Model 0 "HellblazerDuo_d.3d"
Skin 0 "HellblazerMissile_Cluster.png"
Scale 0.16 0.16 0.16
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "HellblazerCrackshotMag"
{
Path "models"
@ -414,6 +476,18 @@ Model "SparkUnit"
FrameIndex XZW1 A 0 0
}
Model "SparkUnit2"
{
Path "models"
Model 0 "SparksterAmmo2_d.3d"
Skin 0 "SparksterAmmo.png"
Scale 0.16 0.16 0.16
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SilverBulletAmmo"
{
@ -454,6 +528,30 @@ Model "SilverBullets"
FrameIndex XZW1 A 0 0
}
Model "SilverBullets_2"
{
Path "models"
Model 0 "SilverbulletBullet2_d.3d"
Skin 0 "SilverbulletBullet.png"
Scale 0.05 0.05 0.05
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SilverBullets_3"
{
Path "models"
Model 0 "SilverbulletBullet3_d.3d"
Skin 0 "SilverbulletBullet.png"
Scale 0.05 0.05 0.05
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SilverBullets2"
{
Path "models"
@ -467,6 +565,30 @@ Model "SilverBullets2"
FrameIndex XZW1 A 0 0
}
Model "SilverBullets2_2"
{
Path "models"
Model 0 "SilverbulletBullet2_FCB_d.3d"
Skin 0 "SilverbulletBullet_FCB.png"
Scale 0.05 0.05 0.05
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SilverBullets2_3"
{
Path "models"
Model 0 "SilverbulletBullet3_FCB_d.3d"
Skin 0 "SilverbulletBullet_FCB.png"
Scale 0.05 0.05 0.05
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "CandyGunAmmo"
{
@ -495,6 +617,32 @@ Model "CandyGunBullets"
FrameIndex XZW1 A 0 0
}
Model "CandyGunBullets2"
{
Path "models"
Model 0 "ExplodiumBullet2_d.3d"
SurfaceSkin 0 0 "CandyBullet.png"
SurfaceSkin 0 1 "CandyCasing.png"
Scale 0.02 0.02 0.02
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "CandyGunBullets3"
{
Path "models"
Model 0 "ExplodiumBullet3_d.3d"
SurfaceSkin 0 0 "CandyBullet.png"
SurfaceSkin 0 1 "CandyCasing.png"
Scale 0.02 0.02 0.02
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "YnykronAmmo"
{

View file

@ -11,6 +11,32 @@ Model "SMW05Ammo"
FrameIndex XZW1 A 0 0
}
Model "SMW05Ammo2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.02 0.02 0.02
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SMW05Ammo3"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.02 0.02 0.02
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SMW05SmallAmmo"
{
Path "models/extra"
@ -51,6 +77,32 @@ Model "SheenAmmo"
FrameIndex XZW1 A 0 0
}
Model "SheenAmmo2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.015 0.015 0.015
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SheenAmmo3"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.015 0.015 0.015
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SheenTinyAmmo"
{
Path "models/extra"
@ -104,6 +156,19 @@ Model "QuadravolAmmo"
FrameIndex XZW1 A 0 0
}
Model "QuadravolAmmo2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "DarkCanister"
{
@ -132,6 +197,19 @@ Model "EMPCore"
FrameIndex XZW1 A 0 0
}
Model "EMPCore2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "RayBolt"
{
@ -146,6 +224,32 @@ Model "RayBolt"
FrameIndex XZW1 A 0 0
}
Model "RayBolt2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "RayBolt5"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "RayAmmo"
{
Path "models/extra"

View file

@ -11,6 +11,32 @@ Model "SparksterBAmmo"
FrameIndex XZW1 A 0 0
}
Model "SparksterBAmmo2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SparksterBAmmo3"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SparksterRAmmo"
{
Path "models/extra"
@ -24,6 +50,32 @@ Model "SparksterRAmmo"
FrameIndex XZW1 A 0 0
}
Model "SparksterRAmmo2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SparksterRAmmo3"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.025 0.025 0.025
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "MisterRound"
{
@ -38,6 +90,58 @@ Model "MisterRound"
FrameIndex XZW1 A 0 0
}
Model "MisterRound2"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.02 0.02 0.02
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "MisterRound3"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.02 0.02 0.02
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "MisterRound5"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.02 0.02 0.02
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "MisterRound10"
{
Path "models/extra"
Model 0 "BaseCube_d.3d"
Skin 0 "CHIPTILE"
Scale 0.02 0.02 0.02
ZOffset 16
PitchOffset 30
ROTATING
FrameIndex XZW1 A 0 0
}
Model "MisterAmmo"
{
Path "models/extra"

View file

@ -281,18 +281,26 @@ Model "ShinemapDebugSphere"
FrameIndex XZW1 H 0 0
Skin 0 "matcap/invincimap.png"
FrameIndex XZW1 I 0 0
Skin 0 "matcap/leadmap.png"
Skin 0 "matcap/kinymap.png"
FrameIndex XZW1 J 0 0
Skin 0 "matcap/pinkmap.png"
Skin 0 "matcap/leadmap.png"
FrameIndex XZW1 K 0 0
Skin 0 "matcap/puromap.png"
Skin 0 "matcap/nkrknmap.png"
FrameIndex XZW1 L 0 0
Skin 0 "matcap/purpmap.png"
Skin 0 "matcap/nokromap.png"
FrameIndex XZW1 M 0 0
Skin 0 "matcap/ragemap.png"
Skin 0 "matcap/pearlmap.png"
FrameIndex XZW1 N 0 0
Skin 0 "matcap/redmap.png"
Skin 0 "matcap/pinkmap.png"
FrameIndex XZW1 O 0 0
Skin 0 "matcap/silvermap.png"
Skin 0 "matcap/puromap.png"
FrameIndex XZW1 P 0 0
Skin 0 "matcap/purpmap.png"
FrameIndex XZW1 Q 0 0
Skin 0 "matcap/ragemap.png"
FrameIndex XZW1 R 0 0
Skin 0 "matcap/redmap.png"
FrameIndex XZW1 S 0 0
Skin 0 "matcap/silvermap.png"
FrameIndex XZW1 T 0 0
}

BIN
models/EvisceratorClip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

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/HellblazerDuo_a.3d Normal file

Binary file not shown.

BIN
models/HellblazerDuo_d.3d Normal file

Binary file not shown.

BIN
models/HellblazerTrio_a.3d Normal file

Binary file not shown.

BIN
models/HellblazerTrio_d.3d Normal file

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.

Binary file not shown.

BIN
models/SparksterAmmo2_a.3d Normal file

Binary file not shown.

BIN
models/SparksterAmmo2_d.3d Normal file

Binary file not shown.

View file

@ -1,37 +1,3 @@
Collectible models:
x Cube
x Akari Project
x Love Signals CD
x Nutatco Bar
x Frispy Corn
x Demo Plush
x Saya Bean
x Peach Juice
x Milk Breads
x Kirin Manga
x Kirin Plush
Collectible gestures:
x Cube
x Akari Project
x Love Signals CD
x Nutatco Bar
x Frispy Corn
x Saya Bean
x Demo Plush
x Peach Juice
x Milk Breads
x Kirin Manga
x Kirin Plush
Key gestures:
x Keycard
x Skull key
x Heretic Yellow Key
x Heretic Green Key
x Heretic Blue Key
x Heretic Red Key
# Post-release stuff
Extra items:
@ -39,9 +5,6 @@ Extra items:
x Devastation Sigil
x Divine Sprite
Character models:
- White Lady
Extra collectibles:
- Moth Plushy
- AA-12
@ -74,6 +37,7 @@ Ammo models:
- Gamma mag
- Sheen Ammo
- Single
- 10 Belt
- 50 Box
- 100 Box
- Quadravol Ammo
@ -100,9 +64,13 @@ Ammo models:
- Mortal Rifle Ammo
- Round
- Mag
- 1 Grenade
- 2 Grenades
- 3 Grenades
- Grenade
- Rafan-Kos Ammo
- Pod
- Mag
# Final Update
Character models:
- Maidbot
- White Lady

View file

@ -1,13 +1,7 @@
// All DLC weapon ammo pickups
Class SMW05Ammo : Ammo
Class SMW05Ammo : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x SMW.05 Bullets
@ -15,6 +9,7 @@ Class SMW05Ammo : Ammo
//$Sprite graphics/HUD/Icons/A_SMW05Ammo.png
//$Icon ammo
Tag "$T_SMW05BULLET";
SWWMAmmo.PickupTag "SMW05BULLET";
Stamina 300;
Inventory.Icon "graphics/HUD/Icons/A_SMW05Ammo.png";
Inventory.Amount 1;
@ -26,6 +21,11 @@ Class SMW05Ammo : Ammo
FloatBobStrength 0.25;
Accuracy 20;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = Random[ShellDrop](1,clamp(dropamount,1,3));
}
States
{
Spawn:
@ -33,21 +33,28 @@ Class SMW05Ammo : Ammo
Stop;
}
}
Class SMW05BundleSpawn : SWWMAmmoSpawner
Class SMW05Ammo2 : SMW05Ammo
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("SMW05Ammo",Vec3Angle(4,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 1x SMW.05 Bullets
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SMW05Ammo.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class SMW05Ammo3 : SMW05Ammo
{
Default
{
//$Title 1x SMW.05 Bullets
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SMW05Ammo.png
//$Icon ammo
Inventory.Amount 3;
}
}
Class SMW05SmallAmmo : SMW05Ammo
{
Default
@ -59,7 +66,6 @@ Class SMW05SmallAmmo : SMW05Ammo
Inventory.Amount 6;
}
}
Class SMW05BigAmmo : SMW05Ammo
{
Default
@ -72,32 +78,16 @@ Class SMW05BigAmmo : SMW05Ammo
}
}
Class SheenAmmo : Ammo
Class SheenAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
override string PickupMessage()
{
String tagstr = "$T_SHEENBULLET";
tagstr.MakeUpper();
if ( Amount > 1 )
{
tagstr = tagstr.."S";
return String.Format("%d %s",Amount,StringTable.Localize(tagstr));
}
return StringTable.Localize(tagstr);
}
Default
{
//$Title 1x Sheen Bullets
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SheenAmmo.png
//$Icon ammo
Tag "$T_SHEENBULLETS";
Tag "$T_SHEENBULLET";
SWWMAmmo.PickupTag "SHEENBULLET";
Stamina 400;
Inventory.Icon "graphics/HUD/Icons/A_SheenAmmo.png";
Inventory.Amount 1;
@ -109,6 +99,11 @@ Class SheenAmmo : Ammo
FloatBobStrength 0.25;
Accuracy 35;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = Random[ShellDrop](1,clamp(dropamount,1,3));
}
States
{
Spawn:
@ -116,7 +111,28 @@ Class SheenAmmo : Ammo
Stop;
}
}
Class SheenAmmo2 : SheenAmmo
{
Default
{
//$Title 2x Sheen Bullets
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SheenAmmo.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class SheenAmmo3 : SheenAmmo
{
Default
{
//$Title 3x Sheen Bullets
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SheenAmmo.png
//$Icon ammo
Inventory.Amount 3;
}
}
Class SheenTinyAmmo : SheenAmmo
{
Default
@ -128,7 +144,6 @@ Class SheenTinyAmmo : SheenAmmo
Inventory.Amount 10;
}
}
Class SheenSmallAmmo : SheenAmmo
{
Default
@ -140,7 +155,6 @@ Class SheenSmallAmmo : SheenAmmo
Inventory.Amount 50;
}
}
Class SheenBigAmmo : SheenAmmo
{
Default
@ -153,13 +167,8 @@ Class SheenBigAmmo : SheenAmmo
}
}
Class QuadravolAmmo : Ammo
Class QuadravolAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Quadravol Ammo
@ -167,7 +176,7 @@ Class QuadravolAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_QuadAmmo.png
//$Icon ammo
Tag "$T_QUADAMMO";
Inventory.PickupMessage "$T_QUADAMMO";
SWWMAmmo.PickupTag "QUADAMMO";
Stamina 10000;
Inventory.Icon "graphics/HUD/Icons/A_QuadAmmo.png";
Inventory.Amount 1;
@ -179,11 +188,6 @@ Class QuadravolAmmo : Ammo
FloatBobStrength 0.25;
Accuracy 45;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -191,28 +195,20 @@ Class QuadravolAmmo : Ammo
Stop;
}
}
Class QuadravolAmmoBundleSpawn : SWWMAmmoSpawner
Class QuadravolAmmo2 : QuadravolAmmo
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("QuadravolAmmo",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Quadravol Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_QuadAmmo.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class DarkCanister : Ammo
Class DarkCanister : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Dark Canister
@ -220,7 +216,7 @@ Class DarkCanister : Ammo
//$Sprite graphics/HUD/Icons/A_DarkAmmo.png
//$Icon ammo
Tag "$T_DARKAMMO";
Inventory.PickupMessage "$T_DARKAMMO";
SWWMAmmo.PickupTag "DARKAMMO";
Stamina 20000;
Inventory.Icon "graphics/HUD/Icons/A_DarkAmmo.png";
Inventory.Amount 1;
@ -232,11 +228,6 @@ Class DarkCanister : Ammo
FloatBobStrength 0.25;
Accuracy 60;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -245,12 +236,8 @@ Class DarkCanister : Ammo
}
}
Class EMPCore : Ammo
Class EMPCore : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Default
{
//$Title EMP Core
@ -258,7 +245,7 @@ Class EMPCore : Ammo
//$Sprite graphics/HUD/Icons/A_EMPCore.png
//$Icon ammo
Tag "$T_EMPCORE";
Inventory.PickupMessage "$T_EMPCORE";
SWWMAmmo.PickupTag "EMPCORE";
Stamina 60000;
Inventory.Icon "graphics/HUD/Icons/A_EMPCore.png";
Inventory.Amount 1;
@ -270,11 +257,6 @@ Class EMPCore : Ammo
FloatBobStrength 0.25;
Accuracy 80;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -282,18 +264,15 @@ Class EMPCore : Ammo
Stop;
}
}
Class EMPCoreBundleSpawn : SWWMAmmoSpawner
Class EMPCore2 : EMPCore
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<3; i++ )
{
let a = Spawn("EMPCore",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x EMP Core
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_EMPCore.png
//$Icon ammo
Inventory.Amount 2;
}
}
@ -306,7 +285,7 @@ Class RayBolt : MagAmmo
//$Sprite graphics/HUD/Icons/A_RayBolt.png
//$Icon ammo
Tag "$T_RAYBOLT";
Inventory.PickupMessage "$T_RAYBOLT";
MagAmmo.PickupTag "RAYBOLT";
Inventory.Icon "graphics/HUD/Icons/A_RayBolt.png";
MagAmmo.ParentAmmo "RayAmmo";
MagAmmo.ClipSize 10;
@ -321,28 +300,31 @@ Class RayBolt : MagAmmo
Stop;
}
}
Class RayBoltBundleSpawn : SWWMAmmoSpawner
Class RayBolt2 : RayBolt
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,5);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("RayBolt",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Ray-Khom Bolt
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_RayBolt.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class RayBolt5 : RayBolt
{
Default
{
//$Title 5x Ray-Khom Bolt
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_RayBolt.png
//$Icon ammo
Inventory.Amount 5;
}
}
Class RayAmmo : Ammo
Class RayAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Ray-Khom Mag
@ -350,7 +332,7 @@ Class RayAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_RayAmmo.png
//$Icon ammo
Tag "$T_RAYAMMO";
Inventory.PickupMessage "$T_RAYAMMO";
SWWMAmmo.PickupTag "RAYAMMO";
Stamina 150000;
Inventory.Icon "graphics/HUD/Icons/A_RayAmmo.png";
Inventory.Amount 1;
@ -358,15 +340,11 @@ Class RayAmmo : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 9;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "RayBolt";
+FLOATBOB;
FloatBobStrength 0.25;
Accuracy 90;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -375,13 +353,8 @@ Class RayAmmo : Ammo
}
}
Class RayBattery : Ammo
Class RayBattery : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Ray-Khom Battery
@ -389,7 +362,7 @@ Class RayBattery : Ammo
//$Sprite graphics/HUD/Icons/A_RayBattery.png
//$Icon ammo
Tag "$T_RAYBATTERY";
Inventory.PickupMessage "$T_RAYBATTERY";
SWWMAmmo.PickupTag "RAYBATTERY";
Stamina 320000;
Inventory.Icon "graphics/HUD/Icons/A_RayBattery.png";
Inventory.Amount 1;
@ -402,11 +375,6 @@ Class RayBattery : Ammo
FloatBobStrength 0.25;
Accuracy 90;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -424,7 +392,7 @@ Class GrandSpear : MagAmmo
//$Sprite graphics/HUD/Icons/A_GrandSpear.png
//$Icon ammo
Tag "$T_GRANDSPEAR";
Inventory.PickupMessage "$T_GRANDSPEAR";
MagAmmo.PickupTag "GRANDSPEAR";
Inventory.Icon "graphics/HUD/Icons/A_GrandSpear.png";
MagAmmo.ParentAmmo "GrandAmmo";
MagAmmo.ClipSize 5;
@ -440,13 +408,8 @@ Class GrandSpear : MagAmmo
}
}
Class GrandAmmo : Ammo
Class GrandAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Grand Lance Mag
@ -454,7 +417,7 @@ Class GrandAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_GrandAmmo.png
//$Icon ammo
Tag "$T_GRANDAMMO";
Inventory.PickupMessage "$T_GRANDAMMO";
SWWMAmmo.PickupTag "GRANDAMMO";
Stamina -1200000;
Inventory.Icon "graphics/HUD/Icons/A_GrandAmmo.png";
Inventory.Amount 1;
@ -462,14 +425,10 @@ Class GrandAmmo : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 4;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "GrandSpear";
+FLOATBOB;
FloatBobStrength 0.25;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:

View file

@ -1,20 +1,15 @@
// All DLC weapon ammo pickups
Class SparksterBAmmo : Ammo
Class SparksterBAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Sparkster Blue Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SparkBAmmo.png
//$Icon ammo
Tag "$T_SPARKBAMMO";
Inventory.PickupMessage "$T_SPARKBAMMO";
Tag "$T_SPARKBCELL";
SWWMAmmo.PickupTag "SPARKBCELL";
Stamina 16000;
Inventory.Icon "graphics/HUD/Icons/A_SparkBAmmo.png";
Inventory.Amount 1;
@ -26,11 +21,6 @@ Class SparksterBAmmo : Ammo
FloatBobStrength 0.25;
Accuracy 70;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -38,22 +28,39 @@ Class SparksterBAmmo : Ammo
Stop;
}
}
Class SparksterRAmmo : Ammo
Class SparksterBAmmo2 : SparksterBAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 2x Sparkster Blue Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SparkBAmmo.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class SparksterBAmmo3 : SparksterBAmmo
{
Default
{
//$Title 3x Sparkster Blue Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SparkBAmmo.png
//$Icon ammo
Inventory.Amount 3;
}
}
Class SparksterRAmmo : SWWMAmmo
{
Default
{
//$Title Sparkster Red Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SparkRAmmo.png
//$Icon ammo
Tag "$T_SPARKRAMMO";
Inventory.PickupMessage "$T_SPARKRAMMO";
Tag "$T_SPARKRCELL";
SWWMAmmo.PickupTag "SPARKRCELL";
Stamina 18000;
Inventory.Icon "graphics/HUD/Icons/A_SparkRAmmo.png";
Inventory.Amount 1;
@ -65,11 +72,6 @@ Class SparksterRAmmo : Ammo
FloatBobStrength 0.25;
Accuracy 75;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -77,34 +79,26 @@ Class SparksterRAmmo : Ammo
Stop;
}
}
Class SparksterAmmoBundleSpawn : SWWMAmmoSpawner
Class SparksterRAmmo2 : SparksterRAmmo
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn(Random[Bundle](0,2)?"SparksterBAmmo":"SparksterRAmmo",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Sparkster Red Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SparkRAmmo.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class SparksterBigAmmoBundleSpawn : SWWMAmmoSpawner
Class SparksterRAmmo3 : SparksterRAmmo
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](3,6);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn(Random[Bundle](0,2)?"SparksterBAmmo":"SparksterRAmmo",Vec3Angle(8,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
let a = Spawn(Random[Bundle](0,2)?"SparksterBAmmo":"SparksterRAmmo",pos);
a.angle = angle;
SWWMUtility.TransferItemProp(self,a,true);
//$Title 3x Sparkster Red Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SparkRAmmo.png
//$Icon ammo
Inventory.Amount 3;
}
}
@ -117,7 +111,7 @@ Class MisterRound : MagAmmo
//$Sprite graphics/HUD/Icons/A_MRRound.png
//$Icon ammo
Tag "$T_MRROUND";
Inventory.PickupMessage "$T_MRROUND";
MagAmmo.PickupTag "MRROUND";
Inventory.Icon "graphics/HUD/Icons/A_MRRound.png";
MagAmmo.ParentAmmo "MisterAmmo";
MagAmmo.ClipSize 30;
@ -132,28 +126,53 @@ Class MisterRound : MagAmmo
Stop;
}
}
Class MisterRoundBundleSpawn : SWWMAmmoSpawner
Class MisterRound2 : MisterRound
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](5,10);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("MisterRound",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Mortal Rifle Round
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_MRRound.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class MisterRound3 : MisterRound
{
Default
{
//$Title 3x Mortal Rifle Round
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_MRRound.png
//$Icon ammo
Inventory.Amount 3;
}
}
Class MisterRound5 : MisterRound
{
Default
{
//$Title 5x Mortal Rifle Round
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_MRRound.png
//$Icon ammo
Inventory.Amount 5;
}
}
Class MisterRound10 : MisterRound
{
Default
{
//$Title 10x Mortal Rifle Round
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_MRRound.png
//$Icon ammo
Inventory.Amount 10;
}
}
Class MisterAmmo : Ammo
Class MisterAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Mortal Rifle Mag
@ -161,7 +180,7 @@ Class MisterAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_MRAmmo.png
//$Icon ammo
Tag "$T_MRAMMO";
Inventory.PickupMessage "$T_MRAMMO";
SWWMAmmo.PickupTag "MRAMMO";
Stamina 120000;
Inventory.Icon "graphics/HUD/Icons/A_MRAmmo.png";
Inventory.Amount 1;
@ -169,15 +188,11 @@ Class MisterAmmo : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 6;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "MisterRound";
+FLOATBOB;
FloatBobStrength 0.25;
Accuracy 90;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:
@ -186,14 +201,8 @@ Class MisterAmmo : Ammo
}
}
Class MisterGAmmo : Ammo
Class MisterGAmmo : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Mortal Rifle Grenade
@ -201,6 +210,7 @@ Class MisterGAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_MRGrenade.png
//$Icon ammo
Tag "$T_MRGRENADE";
SWWMAmmo.PickupTag "MRGRENADE";
Stamina 90000;
Inventory.Icon "graphics/HUD/Icons/A_MRGrenade.png";
Inventory.Amount 1;
@ -251,7 +261,7 @@ Class UltimatePod : MagAmmo
//$Sprite graphics/HUD/Icons/A_UltimatePod.png
//$Icon ammo
Tag "$T_ULTIMATEPOD";
Inventory.PickupMessage "$T_ULTIMATEPOD";
MagAmmo.PickupTag "ULTIMATEPOD";
Inventory.Icon "graphics/HUD/Icons/A_UltimatePod.png";
MagAmmo.ParentAmmo "UltimateAmmo";
MagAmmo.ClipSize 4;
@ -267,13 +277,8 @@ Class UltimatePod : MagAmmo
}
}
Class UltimateAmmo : Ammo
Class UltimateAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Ultimate Mag
@ -281,7 +286,7 @@ Class UltimateAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_UltimateAmmo.png
//$Icon ammo
Tag "$T_ULTIMATEAMMO";
Inventory.PickupMessage "$T_ULTIMATEAMMO";
SWWMAmmo.PickupTag "ULTIMATEAMMO";
Stamina -2000000;
Inventory.Icon "graphics/HUD/Icons/A_UltimateAmmo.png";
Inventory.Amount 1;
@ -289,14 +294,10 @@ Class UltimateAmmo : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 5;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "UltimatePod";
+FLOATBOB;
FloatBobStrength 0.25;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:

View file

@ -85,8 +85,8 @@ Class AmmoFabricator : Inventory abstract
let a = (Class<Ammo>)(AllActorClasses[i]);
// skip over candy gun spares, they're "special ammo"
if ( a == 'CandyGunSpares' ) continue;
// only direct descendants of ammo with a set price below our max unit price
if ( !a || (a.GetParentClass() != 'Ammo') ) continue;
// only direct descendants of swwmammo with a set price below our max unit price
if ( !a || (a.GetParentClass() != 'SWWMAmmo') ) continue;
let def = GetDefaultByType(a);
if ( (def.Stamina <= 0) || (def.Stamina > maxunitprice) ) continue;
// only ammo for weapons that are valid (can be used)
@ -350,7 +350,7 @@ Class HammerspaceEmbiggener : Inventory
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
let type = (class<Ammo>)(AllActorClasses[i]);
if ( !type || (type.GetParentClass() != 'Ammo') ) continue;
if ( !type || (type.GetParentClass() != 'SWWMAmmo') ) continue;
// check that it's for a valid weapon
bool isvalid = false;
for ( int j=0; j<validweapons.Size(); j++ )

View file

@ -2,21 +2,16 @@
// Spreadgun / Wallbuster ammo
// ============================================================================
Class RedShell : Ammo
Class RedShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x Red Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsNormal.png
//$Icon ammo
Tag "$T_REDSHELLS";
Tag "$T_REDSHELL";
SWWMAmmo.PickupTag "REDSHELL";
Stamina 500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsNormal.png";
Inventory.Amount 1;
@ -62,21 +57,16 @@ Class RedShell4 : RedShell
}
}
Class GreenShell : Ammo
Class GreenShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x Green Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsSlug.png
//$Icon ammo
Tag "$T_GREENSHELLS";
Tag "$T_GREENSHELL";
SWWMAmmo.PickupTag "GREENSHELL";
Stamina 800;
Inventory.Icon "graphics/HUD/Icons/A_ShellsSlug.png";
Inventory.Amount 1;
@ -122,21 +112,16 @@ Class GreenShell4 : GreenShell
}
}
Class WhiteShell : Ammo
Class WhiteShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x White Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsDragon.png
//$Icon ammo
Tag "$T_WHITESHELLS";
Tag "$T_WHITESHELL";
SWWMAmmo.PickupTag "WHITESHELL";
Stamina 1000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsDragon.png";
Inventory.Amount 1;
@ -181,21 +166,16 @@ Class WhiteShell4 : WhiteShell
}
}
Class BlueShell : Ammo
Class BlueShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x Blue Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsKinylum.png
//$Icon ammo
Tag "$T_BLUESHELLS";
Tag "$T_BLUESHELL";
SWWMAmmo.PickupTag "BLUESHELL";
Stamina 2500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsKinylum.png";
Inventory.Amount 1;
@ -241,21 +221,16 @@ Class BlueShell4 : BlueShell
}
}
Class BlackShell : Ammo
Class BlackShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x Black Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsFuck.png
//$Icon ammo
Tag "$T_BLACKSHELLS";
Tag "$T_BLACKSHELL";
SWWMAmmo.PickupTag "BLACKSHELL";
Stamina 4000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsFuck.png";
Inventory.Amount 1;
@ -301,21 +276,16 @@ Class BlackShell4 : BlackShell
}
}
Class PurpleShell : Ammo
Class PurpleShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title 1x Purple Shells
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsBall.png
//$Icon ammo
Tag "$T_PURPLESHELLS";
Tag "$T_PURPLESHELL";
SWWMAmmo.PickupTag "PURPLESHELL";
Stamina 1500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsBall.png";
Inventory.Amount 1;
@ -395,14 +365,8 @@ Class GoldShellSparkle : Actor
}
}
Class GoldShell : Ammo
Class GoldShell : SWWMAmmo
{
Mixin SWWMShellAmmo;
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
action void A_GoldShellTrail()
{
if ( Random[Goldy](0,2) ) return;
@ -415,7 +379,8 @@ Class GoldShell : Ammo
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_ShellsGold.png
//$Icon ammo
Tag "$T_GOLDSHELLS";
Tag "$T_GOLDSHELL";
SWWMAmmo.PickupTag "GOLDSHELL";
Stamina -1000000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsGold.png";
Inventory.Amount 1;
@ -465,20 +430,16 @@ Class GoldShell4 : GoldShell
// Eviscerator ammo
// ============================================================================
Class EvisceratorShell : Ammo
Class EvisceratorShell : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Eviscerator Shell
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_Eviscerator.png
//$Icon ammo
Tag "$T_EVISHELLS";
Tag "$T_EVISHELL";
SWWMAmmo.PickupTag "EVISHELL";
Inventory.PickupMessage "$T_EVISHELL";
Stamina 3000;
Inventory.Icon "graphics/HUD/Icons/A_Eviscerator.png";
@ -488,6 +449,7 @@ Class EvisceratorShell : Ammo
Ammo.BackpackMaxAmount 60;
Ammo.DropAmount 1;
+FLOATBOB;
+SWWMAMMO.USEPICKUPMSG;
FloatBobStrength 0.25;
Radius 8;
Height 22;
@ -495,8 +457,8 @@ Class EvisceratorShell : Ammo
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,4);
Ammo.ModifyDropAmount(dropamount);
Amount = min(Amount,3);
}
States
{
@ -505,6 +467,32 @@ Class EvisceratorShell : Ammo
Stop;
}
}
Class EvisceratorShell2 : EvisceratorShell
{
Default
{
//$Title Eviscerator Dual Clip
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_Eviscerator.png
//$Icon ammo
Inventory.PickupMessage "$I_EVISHELLCLIP2";
Inventory.Amount 2;
Radius 16;
}
}
Class EvisceratorShell3 : EvisceratorShell
{
Default
{
//$Title Eviscerator Triple Clip
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_Eviscerator.png
//$Icon ammo
Inventory.PickupMessage "$I_EVISHELLCLIP3";
Inventory.Amount 3;
Radius 16;
}
}
Class EvisceratorSixPack : EvisceratorShell
{
@ -514,7 +502,6 @@ Class EvisceratorSixPack : EvisceratorShell
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_Eviscerator.png
//$Icon ammo
Tag "$I_EVISHELLPAK";
Inventory.PickupMessage "$I_EVISHELLPAK";
Inventory.Amount 6;
Radius 20;
@ -522,39 +509,20 @@ Class EvisceratorSixPack : EvisceratorShell
}
}
Class EvisceratorBundleSpawn : SWWMAmmoSpawner
{
override void SpawnAmmo()
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("EvisceratorShell",Vec3Angle(12,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
}
}
// ============================================================================
// Hellblazer ammo
// ============================================================================
Class HellblazerMissiles : Ammo
Class HellblazerMissiles : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Hellblazer Missile
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerMissile.png
//$Icon ammo
Tag "$T_HELLMISSILES";
Inventory.PickupMessage "$T_HELLMISSILE";
Tag "$T_HELLMISSILE";
SWWMAmmo.PickupTag "HELLMISSILE";
Stamina 8000;
Inventory.Icon "graphics/HUD/Icons/A_HellblazerMissile.png";
Inventory.Amount 1;
@ -570,7 +538,7 @@ Class HellblazerMissiles : Ammo
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Ammo.ModifyDropAmount(dropamount);
Amount = min(Amount,3);
}
States
@ -580,6 +548,28 @@ Class HellblazerMissiles : Ammo
Stop;
}
}
Class HellblazerMissiles2 : HellblazerMissiles
{
Default
{
//$Title 2x Hellblazer Missile
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerMissile.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class HellblazerMissiles3 : HellblazerMissiles
{
Default
{
//$Title 3x Hellblazer Missile
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerMissile.png
//$Icon ammo
Inventory.Amount 3;
}
}
Class HellblazerMissileMag : HellblazerMissiles
{
Default
@ -588,42 +578,24 @@ Class HellblazerMissileMag : HellblazerMissiles
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerMissile.png
//$Icon ammo
Tag "$T_HELLMISSILEMAG";
Inventory.PickupMessage "$T_HELLMISSILEMAG";
Inventory.Amount 6;
+SWWMAMMO.USEPICKUPMSG;
Radius 12;
Height 26;
}
}
Class HellblazerMissileBundleSpawn : SWWMAmmoSpawner
{
override void SpawnAmmo()
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("HellblazerMissiles",Vec3Angle(8,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
}
}
Class HellblazerCrackshots : Ammo
Class HellblazerCrackshots : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Hellblazer Crackshot
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerCrackshot.png
//$Icon ammo
Tag "$T_HELLCLUSTERS";
Inventory.PickupMessage "$T_HELLCLUSTER";
Tag "$T_HELLCLUSTER";
SWWMAmmo.PickupTag "HELLCLUSTER";
Stamina 15000;
Inventory.Icon "graphics/HUD/Icons/A_HellblazerCrackshot.png";
Inventory.Amount 1;
@ -639,7 +611,7 @@ Class HellblazerCrackshots : Ammo
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Ammo.ModifyDropAmount(dropamount);
Amount = min(Amount,2);
}
States
@ -649,6 +621,17 @@ Class HellblazerCrackshots : Ammo
Stop;
}
}
Class HellblazerCrackshots2 : HellblazerCrackshots
{
Default
{
//$Title 2x Hellblazer Crackshots
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerCrackshot.png
//$Icon ammo
Inventory.Amount 2;
}
}
Class HellblazerCrackshotMag : HellblazerCrackshots
{
Default
@ -657,42 +640,24 @@ Class HellblazerCrackshotMag : HellblazerCrackshots
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerCrackshot.png
//$Icon ammo
Tag "$T_HELLCLUSTERMAG";
Inventory.PickupMessage "$T_HELLCLUSTERMAG";
Inventory.Amount 3;
+SWWMAMMO.USEPICKUPMSG;
Radius 12;
Height 26;
}
}
Class HellblazerCrackshotBundleSpawn : SWWMAmmoSpawner
{
override void SpawnAmmo()
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("HellblazerCrackshots",Vec3Angle(8,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
}
}
Class HellblazerRavagers : Ammo
Class HellblazerRavagers : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Hellblazer Ravager
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerRavager.png
//$Icon ammo
Tag "$T_HELLBURNINATORS";
Inventory.PickupMessage "$T_HELLBURNINATOR";
Tag "$T_HELLBURNINATOR";
SWWMAmmo.PickupTag "HELLBURNINATOR";
Stamina 25000;
Inventory.Icon "graphics/HUD/Icons/A_HellblazerRavager.png";
Inventory.Amount 1;
@ -708,7 +673,7 @@ Class HellblazerRavagers : Ammo
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Ammo.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
@ -726,29 +691,24 @@ Class HellblazerRavagerMag : HellblazerRavagers
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerRavager.png
//$Icon ammo
Tag "$T_HELLBURNINATORMAG";
Inventory.PickupMessage "$T_HELLBURNINATORMAG";
Inventory.Amount 3;
+SWWMAMMO.USEPICKUPMSG;
Radius 12;
Height 26;
}
}
Class HellblazerWarheads : Ammo
Class HellblazerWarheads : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Hellblazer Warhead
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerWarhead.png
//$Icon ammo
Tag "$T_HELLNUKES";
Inventory.PickupMessage "$T_HELLNUKE";
Tag "$T_HELLNUKE";
SWWMAmmo.PickupTag "HELLNUKE";
Stamina 40000;
Inventory.Icon "graphics/HUD/Icons/A_HellblazerWarhead.png";
Inventory.Amount 1;
@ -764,7 +724,7 @@ Class HellblazerWarheads : Ammo
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Ammo.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
@ -782,9 +742,9 @@ Class HellblazerWarheadMag : HellblazerWarheads
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_HellblazerWarhead.png
//$Icon ammo
Tag "$T_HELLNUKEMAG";
Inventory.PickupMessage "$T_HELLNUKEMAG";
Inventory.Amount 2;
+SWWMAMMO.USEPICKUPMSG;
Radius 12;
Height 26;
}
@ -794,13 +754,8 @@ Class HellblazerWarheadMag : HellblazerWarheads
// Sparkster ammo
// ============================================================================
Class SparkUnit : Ammo
Class SparkUnit : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Spark Unit
@ -808,7 +763,7 @@ Class SparkUnit : Ammo
//$Sprite graphics/HUD/Icons/A_Sparkster.png
//$Icon ammo
Tag "$T_SPARKUNIT";
Inventory.PickupMessage "$T_SPARKUNIT";
SWWMAmmo.PickupTag "SPARKUNIT";
Stamina 50000;
Inventory.Icon "graphics/HUD/Icons/A_Sparkster.png";
Inventory.Amount 1;
@ -824,7 +779,7 @@ Class SparkUnit : Ammo
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Ammo.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
@ -834,32 +789,25 @@ Class SparkUnit : Ammo
Stop;
}
}
Class SparkUnitBundleSpawn : SWWMAmmoSpawner
Class SparkUnit2 : SparkUnit
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("SparkUnit",Vec3Angle(8,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Spark Unit
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_Sparkster.png
//$Icon ammo
Inventory.Amount 2;
Radius 8;
}
}
// ============================================================================
// Silver Bullet ammo
// ============================================================================
Class SilverBulletAmmo : Ammo
Class SilverBulletAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Silver Bullet Mag (XSB)
@ -867,7 +815,7 @@ Class SilverBulletAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_SilverBullet.png
//$Icon ammo
Tag "$T_XSBMAG";
Inventory.PickupMessage "$T_XSBMAG";
SWWMAmmo.PickupTag "XSBMAG";
Stamina 70000;
Inventory.Icon "graphics/HUD/Icons/A_SilverBullet.png";
Inventory.Amount 1;
@ -875,28 +823,13 @@ Class SilverBulletAmmo : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 8;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "SilverBullets";
+FLOATBOB;
FloatBobStrength 0.25;
Radius 10;
Height 26;
Accuracy 75;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
// attach our mag ammo if we have none
if ( Owner.FindInventory('SilverBullets') )
{
let ma = Inventory(Spawn('SilverBullets'));
ma.Amount = 0;
ma.AttachToOwner(Owner);
}
}
States
{
Spawn:
@ -905,13 +838,8 @@ Class SilverBulletAmmo : Ammo
}
}
Class SilverBulletAmmo2 : Ammo
Class SilverBulletAmmo2 : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Silver Bullet Mag (FCB)
@ -919,7 +847,7 @@ Class SilverBulletAmmo2 : Ammo
//$Sprite graphics/HUD/Icons/A_SilverBullet2.png
//$Icon ammo
Tag "$T_FCBMAG";
Inventory.PickupMessage "$T_FCBMAG";
SWWMAmmo.PickupTag "FCBMAG";
Stamina 80000;
Inventory.Icon "graphics/HUD/Icons/A_SilverBullet2.png";
Inventory.Amount 1;
@ -927,28 +855,13 @@ Class SilverBulletAmmo2 : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 4;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "SilverBullets2";
+FLOATBOB;
FloatBobStrength 0.25;
Radius 10;
Height 26;
Accuracy 80;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
// attach our mag ammo if we have none
if ( Owner.FindInventory('SilverBullets2') )
{
let ma = Inventory(Spawn('SilverBullets2'));
ma.Amount = 0;
ma.AttachToOwner(Owner);
}
}
States
{
Spawn:
@ -966,7 +879,7 @@ Class SilverBullets : MagAmmo
//$Sprite graphics/HUD/Icons/A_SilverBulletBullet.png
//$Icon ammo
Tag "$T_XSBBULLET";
Inventory.PickupMessage "$T_XSBBULLET";
MagAmmo.PickupTag "XSBBULLET";
Inventory.Icon "graphics/HUD/Icons/A_SilverBulletBullet.png";
MagAmmo.ParentAmmo "SilverBulletAmmo";
MagAmmo.ClipSize 5;
@ -983,6 +896,32 @@ Class SilverBullets : MagAmmo
Stop;
}
}
Class SilverBullets_2 : SilverBullets
{
Default
{
//$Title 2x Silver Bullet Round (XSB)
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SilverBulletBullet.png
//$Icon ammo
Inventory.Amount 2;
Radius 6;
Height 24;
}
}
Class SilverBullets_3 : SilverBullets
{
Default
{
//$Title 3x Silver Bullet Round (XSB)
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SilverBulletBullet.png
//$Icon ammo
Inventory.Amount 3;
Radius 6;
Height 24;
}
}
Class SilverBullets2 : MagAmmo
{
Default
@ -992,7 +931,7 @@ Class SilverBullets2 : MagAmmo
//$Sprite graphics/HUD/Icons/A_SilverBulletBullet2.png
//$Icon ammo
Tag "$T_FCBBULLET";
Inventory.PickupMessage "$T_FCBBULLET";
MagAmmo.PickupTag "FCBBULLET";
Inventory.Icon "graphics/HUD/Icons/A_SilverBulletBullet2.png";
MagAmmo.ParentAmmo "SilverBulletAmmo2";
MagAmmo.ClipSize 5;
@ -1009,31 +948,30 @@ Class SilverBullets2 : MagAmmo
Stop;
}
}
Class SilverBulletsBundleSpawn : SWWMAmmoSpawner
Class SilverBullets2_2 : SilverBullets2
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("SilverBullets",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Silver Bullet Round (FCB)
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SilverBulletBullet2.png
//$Icon ammo
Inventory.Amount 2;
Radius 6;
Height 24;
}
}
Class SilverBullets2BundleSpawn : SWWMAmmoSpawner
Class SilverBullets2_3 : SilverBullets2
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("SilverBullets2",Vec3Angle(6,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 3x Silver Bullet Round (FCB)
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_SilverBulletBullet2.png
//$Icon ammo
Inventory.Amount 3;
Radius 6;
Height 24;
}
}
@ -1041,13 +979,8 @@ Class SilverBullets2BundleSpawn : SWWMAmmoSpawner
// Candygun ammo
// ============================================================================
Class CandyGunAmmo : Ammo
Class CandyGunAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Candy Gun Mag
@ -1055,7 +988,7 @@ Class CandyGunAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_CandyGun.png
//$Icon ammo
Tag "$T_CANDYMAG";
Inventory.PickupMessage "$T_CANDYMAG";
SWWMAmmo.PickupTag "CANDYMAG";
Stamina 100000;
Inventory.Icon "graphics/HUD/Icons/A_CandyGun.png";
Inventory.Amount 1;
@ -1063,28 +996,13 @@ Class CandyGunAmmo : Ammo
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 6;
Ammo.DropAmount 1;
SWWMAmmo.MagAmmoType "CandyGunBullets";
+FLOATBOB;
FloatBobStrength 0.25;
Radius 6;
Height 24;
Accuracy 90;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
// attach our mag ammo if we have none
if ( Owner.FindInventory('CandyGunBullets') )
{
let ma = Inventory(Spawn('CandyGunBullets'));
ma.Amount = 0;
ma.AttachToOwner(Owner);
}
}
States
{
Spawn:
@ -1102,7 +1020,7 @@ Class CandyGunBullets : MagAmmo
//$Sprite graphics/HUD/Icons/A_CandyBullet.png
//$Icon ammo
Tag "$T_CANDYBULLET";
Inventory.PickupMessage "$T_CANDYBULLET";
MagAmmo.PickupTag "CANDYBULLET";
Inventory.Icon "graphics/HUD/Icons/A_CandyBullet.png";
MagAmmo.ParentAmmo "CandyGunAmmo";
MagAmmo.ClipSize 7;
@ -1119,26 +1037,37 @@ Class CandyGunBullets : MagAmmo
Stop;
}
}
Class CandyGunBulletsBundleSpawn : SWWMAmmoSpawner
Class CandyGunBullets2 : CandyGunBullets
{
override void SpawnAmmo()
Default
{
int bnd = Random[Bundle](2,3);
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("CandyGunBullets",Vec3Angle(4,i*(360/bnd)));
a.angle = i*(360/bnd);
SWWMUtility.TransferItemProp(self,a,true);
}
//$Title 2x Candy Gun Round
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_CandyBullet.png
//$Icon ammo
Inventory.Amount 2;
Radius 2.5;
}
}
Class CandyGunBullets3 : CandyGunBullets
{
Default
{
//$Title 2x Candy Gun Round
//$Group Ammo
//$Sprite graphics/HUD/Icons/A_CandyBullet.png
//$Icon ammo
Inventory.Amount 3;
Radius 3;
}
}
Class CandyGunSpares : Ammo
Class CandyGunSpares : SWWMAmmo
{
Default
{
Tag "$T_CANDYSPARE";
SWWMAmmo.PickupTag "CANDYSPARE";
Stamina 600000;
Inventory.Icon "graphics/HUD/Icons/W_CandyGun.png";
Inventory.Amount 1;
@ -1171,13 +1100,8 @@ Class CandyGunSpares : Ammo
// Ynykron ammo
// ============================================================================
Class YnykronAmmo : Ammo
Class YnykronAmmo : SWWMAmmo
{
Mixin SWWMAmmo;
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Default
{
//$Title Ynykron Ammo
@ -1185,7 +1109,7 @@ Class YnykronAmmo : Ammo
//$Sprite graphics/HUD/Icons/A_Ynykron.png
//$Icon ammo
Tag "$T_YNYKRONAMMO";
Inventory.PickupMessage "$T_YNYKRONAMMO";
SWWMAmmo.PickupTag "YNYKRONAMMO";
Stamina -3000000;
Inventory.Icon "graphics/HUD/Icons/A_Ynykron.png";
Inventory.Amount 1;
@ -1198,11 +1122,6 @@ Class YnykronAmmo : Ammo
Radius 8;
Height 24;
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = min(Amount,1);
}
States
{
Spawn:

View file

@ -17,7 +17,7 @@ Class SWWMShellAmmoSmall : SWWMAmmoSpawner
static Class<Actor> PickAmmo( bool notondemand = false )
{
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('PuntzerBeta') || SWWMUtility.ItemExists('PuntzerGamma')) )
return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05BundleSpawn';*/
return Random[Replacements](0,2)?'SMW05SmallAmmo':'SMW05Ammo3';*/
switch( Random[Replacements](0,8) )
{
case 0:
@ -88,7 +88,7 @@ Class SWWMClipAmmoBig : SWWMAmmoSpawner
{
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) )
return Random[Replacements](0,2)?'SheenSmallAmmo':'SheenBigAmmo';*/
return Random[Replacements](0,5)?'EvisceratorShell':'EvisceratorBundleSpawn';
return Random[Replacements](0,5)?'EvisceratorShell':Random[Replacements](0,2)?'EvisceratorShell2':'EvisceratorShell3';
}
}
Class SWWMBlastAmmoSmall : SWWMAmmoSpawner
@ -110,7 +110,7 @@ Class SWWMBlastAmmoBig : SWWMAmmoSpawner
{
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('HeavyMahsheenGun')) )
return Random[Replacements](0,2)?'SheenBigAmmo':'SheenSmallAmmo';*/
return Random[Replacements](0,2)?'EvisceratorShell':'EvisceratorBundleSpawn';
return Random[Replacements](0,2)?'EvisceratorShell':Random[Replacements](0,1)?'EvisceratorShell2':'EvisceratorShell3';
}
}
Class SWWMRocketAmmoSmall : SWWMAmmoSpawner
@ -131,9 +131,12 @@ Class SWWMRocketAmmoBig : SWWMAmmoSpawner
static Class<Actor> PickAmmo( bool notondemand = false )
{
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('ModernSparkster')) )
return Random[Replacements](0,2)?'SparksterAmmoBundleSpawn':'SparksterBigAmmoBundleSpawn';*/
{
if ( Random[Replacements](0,1) ) return Random[Replacements](0,2)?'SparksterBAmmo2':'SparksterBAmmo3';
return Random[Replacements](0,2)?'SparksterRAmmo2':'SparksterRAmmo3';
}*/
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('Quadravol')) )
return Random[Replacements](0,2)?'QuadravolAmmo':'QuadravolAmmoBundleSpawn';*/
return Random[Replacements](0,2)?'QuadravolAmmo':'QuadravolAmmo2';*/
switch ( Random[Replacements](0,11) )
{
case 0:
@ -141,12 +144,12 @@ Class SWWMRocketAmmoBig : SWWMAmmoSpawner
case 2:
case 3:
case 4:
return Random[Replacements](0,4)?'HellblazerMissiles':'HellblazerMissileBundleSpawn';
return Random[Replacements](0,4)?'HellblazerMissiles':Random[Replacements](0,2)?'HellblazerMissiles2':'HellblazerMissiles3';
case 5:
case 6:
case 7:
case 8:
return Random[Replacements](0,7)?'HellblazerCrackshots':'HellblazerCrackshotBundleSpawn';
return Random[Replacements](0,7)?'HellblazerCrackshots':'HellblazerCrackshots2';
case 9:
case 10:
return 'HellblazerRavagers';
@ -167,7 +170,7 @@ Class SWWMCellAmmoSmall : SWWMAmmoSpawner
if ( !Random[Replacements](0,3) )
{
/*if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return 'MisterGAmmo';*/
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('RayKhom')) ) return 'RayBolt';*/
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('RayKhom')) ) return 'RayBolt2';*/
if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return 'CandyGunBullets';
}
/*if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return 'EMPCore';*/
@ -194,17 +197,17 @@ Class SWWMCellAmmoBig : SWWMAmmoSpawner
}
/*if ( Random[Replacements](0,1) )
{
if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return Random[Replacements](0,3)?'EMPCoreBundleSpawn':'EMPCore';
if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return Random[Replacements](0,2)?'MisterRoundBundleSpawn':'MisterAmmo';
if ( notondemand || SWWMUtility.ItemExists('RayKhom') ) return Random[Replacements](0,2)?'RayBoltBundleSpawn':'RayAmmo';
if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('EMPCarbine')) ) return Random[Replacements](0,3)?'EMPCore2':'EMPCore';
if ( Random[Replacements](0,1) && (notondemand || SWWMUtility.ItemExists('MisterRifle')) ) return Random[Replacements](0,2)?'MisterRound5':'MisterAmmo';
if ( notondemand || SWWMUtility.ItemExists('RayKhom') ) return Random[Replacements](0,2)?'RayBolt5':'RayAmmo';
}*/
if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('SilverBullet')) )
{
if ( Random[Replacements](0,3) ) return Random[Replacements](0,2)?'SilverBulletsBundleSpawn':'SilverBullets2BundleSpawn';
if ( Random[Replacements](0,3) ) return Random[Replacements](0,2)?'SilverBullets_2':'SilverBullets2_2';
return Random[Replacements](0,2)?'SilverBulletAmmo':'SilverBulletAmmo2';
}
if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return Random[Replacements](0,3)?'CandyGunBulletsBundleSpawn':'CandyGunAmmo';
if ( notondemand || SWWMUtility.ItemExists('CandyGun') ) return Random[Replacements](0,3)?'CandyGunBullets3':'CandyGunAmmo';
/*if ( !Random[Replacements](0,2) && (notondemand || SWWMUtility.ItemExists('BlackfireIgniter')) ) return 'DarkCanister';*/
return Random[Replacements](0,3)?'SparkUnit':'SparkUnitBundleSpawn';
return Random[Replacements](0,3)?'SparkUnit':'SparkUnit2';
}
}

View file

@ -1,6 +1,39 @@
// Common code for ammo division
Mixin Class SWWMAmmo
Class SWWMAmmo : Ammo
{
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
String PickupTag;
Class<MagAmmo> MagAmmoType;
private int SAmmoFlags;
Property PickupTag : PickupTag;
Property MagAmmoType : MagAmmoType;
FlagDef UsePickupMsg : SAmmoFlags, 0; // use the set pickup message rather than generating from pickup tag
override Class<Ammo> GetParentAmmo()
{
Class<Object> type = GetClass();
while ( (type.GetParentClass() != "SWWMAmmo") && type.GetParentClass() )
type = type.GetParentClass();
return (Class<Ammo>)(type);
}
override string PickupMessage()
{
if ( bUsePickupMsg ) return Super.PickupMessage();
String tagstr = "$T_"..PickupTag;
if ( Amount > 1 )
{
tagstr = tagstr.."S";
return String.Format("%d %s",Amount,StringTable.Localize(tagstr));
}
return StringTable.Localize(tagstr);
}
private Inventory DoDrop( Class<Inventory> type )
{
let copy = Inventory(Spawn(type,Owner.Pos,NO_REPLACE));
@ -122,22 +155,7 @@ Mixin Class SWWMAmmo
ammotypes.Push((Class<Ammo>)(AllActorClasses[i]));
}
// sort from largest to smallest
for ( int i=0; i<ammotypes.Size(); i++ )
{
int j = 1;
while ( j < ammotypes.Size() )
{
int k = j;
while ( (k > 0) && CmpAmmo(ammotypes[k-1],ammotypes[k]) )
{
Class<Ammo> tmp = ammotypes[k];
ammotypes[k] = ammotypes[k-1];
ammotypes[k-1] = tmp;
k--;
}
j++;
}
}
qsort_ammotypes(ammotypes,0,ammotypes.Size()-1);
// drop spares
Inventory last;
while ( excess > 0 )
@ -196,6 +214,31 @@ Mixin Class SWWMAmmo
return true;
}
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
// attach our mag ammo if we have none
if ( MagAmmoType && !Owner.FindInventory(MagAmmoType) )
{
let ma = Inventory(Spawn(MagAmmoType));
ma.Amount = 0;
ma.AttachToOwner(Owner);
}
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
int maxdrop = 1;
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
if ( !(AllActorClasses[i] is GetParentAmmo()) ) continue;
let def = GetDefaultByType((Class<Ammo>)(AllActorClasses[i]));
maxdrop = max(maxdrop,def.amount);
}
Amount = Random[ShellDrop](1,clamp(dropamount,1,maxdrop));
}
default
{
+INVENTORY.IGNORESKILL;
@ -214,9 +257,11 @@ Class MagAmmo : Inventory abstract
Ammo pamo;
int ClipSize;
int countdown;
String PickupTag;
Property ParentAmmo : ParentAmmo;
Property ClipSize : ClipSize;
Property PickupTag : PickupTag;
default
{
@ -226,6 +271,59 @@ Class MagAmmo : Inventory abstract
Inventory.PickupFlash "SWWMPickupFlash";
}
virtual Class<MagAmmo> GetParentMagAmmo()
{
Class<Object> type = GetClass();
while ( (type.GetParentClass() != "MagAmmo") && type.GetParentClass() )
type = type.GetParentClass();
return (Class<MagAmmo>)(type);
}
private bool CmpAmmo( Class<MagAmmo> a, Class<MagAmmo> b )
{
let amta = GetDefaultByType(a).Amount;
let amtb = GetDefaultByType(b).Amount;
return (amta < amtb);
}
private int partition_ammotypes( Array<Class<MagAmmo> > a, int l, int h )
{
Class<MagAmmo> pv = a[h];
int i = (l-1);
for ( int j=l; j<=(h-1); j++ )
{
if ( CmpAmmo(pv,a[j]) )
{
i++;
Class<MagAmmo> tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
}
Class<MagAmmo> tmp = a[h];
a[h] = a[i+1];
a[i+1] = tmp;
return i+1;
}
private void qsort_ammotypes( Array<Class<MagAmmo> > a, int l, int h )
{
if ( l >= h ) return;
int p = partition_ammotypes(a,l,h);
qsort_ammotypes(a,l,p-1);
qsort_ammotypes(a,p+1,h);
}
override string PickupMessage()
{
String tagstr = "$T_"..PickupTag;
if ( Amount > 1 )
{
tagstr = tagstr.."S";
return String.Format("%d %s",Amount,StringTable.Localize(tagstr));
}
return StringTable.Localize(tagstr);
}
override bool HandlePickup( Inventory item )
{
// see if the mag can be split apart
@ -257,7 +355,78 @@ Class MagAmmo : Inventory abstract
return true;
}
}
return Super.HandlePickup(item);
// drop excess mag ammo
if ( (item is 'MagAmmo') && (MagAmmo(item).GetParentMagAmmo() == GetClass()) )
{
int excess = Amount+item.Amount;
if ( excess > MaxAmount ) excess -= MaxAmount;
if ( excess < item.Amount )
{
// enumerate all subclasses
Array<Class<MagAmmo> > ammotypes;
ammotypes.Clear();
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
if ( AllActorClasses[i] is GetParentMagAmmo() )
ammotypes.Push((Class<MagAmmo>)(AllActorClasses[i]));
}
// sort from largest to smallest
qsort_ammotypes(ammotypes,0,ammotypes.Size()-1);
// drop spares
Inventory last;
while ( excess > 0 )
{
for ( int i=0; i<ammotypes.Size(); i++ )
{
let def = GetDefaultByType(ammotypes[i]);
if ( excess >= def.Amount )
{
double ang = FRandom[Junk](0,360);
last = DoDrop(ammotypes[i]);
last.SetOrigin(item.pos,false);
last.vel.xy = (cos(ang),sin(ang))*FRandom[Junk](2,5);
excess -= def.Amount;
break;
}
}
}
}
if ( Amount < MaxAmount )
{
int receiving = item.Amount;
int oldamt = Amount;
if ( (Amount > 0) && ((Amount+item.Amount) < 0) ) Amount = int.max;
else Amount += item.Amount;
if ( Amount > MaxAmount && !sv_unlimited_pickup ) Amount = MaxAmount;
item.bPickupGood = true;
// autoswitch if needed (checks parent ammo type)
if ( (oldamt == 0) && Owner && Owner.player )
PlayerPawn(Owner).CheckWeaponSwitch(ParentAmmo);
}
return true;
}
return false;
}
override Inventory CreateCopy( Actor other )
{
Inventory copy;
int amount = Amount;
let type = GetParentMagAmmo();
if ( (GetClass() != type) && type )
{
if ( !GoAway() ) Destroy();
copy = Inventory(Spawn(type));
copy.Amount = amount;
copy.BecomeItem();
}
else
{
copy = Super.CreateCopy(other);
copy.Amount = amount;
}
if ( copy.Amount > copy.MaxAmount ) copy.Amount = copy.MaxAmount;
return copy;
}
override bool CanPickup( Actor toucher )
@ -363,6 +532,16 @@ Class MagAmmo : Inventory abstract
return null;
// cap
amt = min(amount,amt);
// enumerate all subclasses
Array<Class<MagAmmo> > ammotypes;
ammotypes.Clear();
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
if ( AllActorClasses[i] is GetParentMagAmmo() )
ammotypes.Push((Class<MagAmmo>)(AllActorClasses[i]));
}
// sort from largest to smallest
qsort_ammotypes(ammotypes,0,ammotypes.Size()-1);
// perform subdivision
Inventory last = null;
let pammo = GetDefaultByType(ParentAmmo);
@ -376,10 +555,18 @@ Class MagAmmo : Inventory abstract
Amount -= ClipSize;
continue;
}
// drop individual bullets
last = DoDrop(GetClass());
amt--;
Amount--;
// drop bullets otherwise
for ( int i=0; i<ammotypes.Size(); i++ )
{
let def = GetDefaultByType(ammotypes[i]);
if ( amt >= def.Amount )
{
last = DoDrop(ammotypes[i]);
amt -= def.Amount;
Amount -= def.Amount;
break;
}
}
}
return last;
}
@ -391,29 +578,7 @@ Class MagAmmo : Inventory abstract
}
}
// Common code for grouped shell handling and per-amount pickup messages
Mixin Class SWWMShellAmmo
{
override string PickupMessage()
{
String tagstr = "$T_"..GetParentAmmo().GetClassName();
tagstr.MakeUpper();
if ( Amount > 1 )
{
tagstr = tagstr.."S";
return String.Format("%d %s",Amount,StringTable.Localize(tagstr));
}
return StringTable.Localize(tagstr);
}
override void ModifyDropAmount( int dropamount )
{
Super.ModifyDropAmount(dropamount);
Amount = Random[ShellDrop](1,clamp(dropamount,1,4));
}
}
// Ref class for ammo spawners, used by both on-demand replacers and bundles
// Ref class for ammo spawners, used by on-demand replacers
Class SWWMAmmoSpawner : Actor abstract
{
virtual void SpawnAmmo() {}

View file

@ -1090,8 +1090,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -1136,8 +1138,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -1165,8 +1169,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -1211,8 +1217,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -1320,10 +1328,10 @@ Class DemolitionistMenu : GenericMenu
if ( sub )
{
int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]);
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,def.GetTag());
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
}
else if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag());
else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -1366,7 +1374,13 @@ Class DemolitionistMenu : GenericMenu
{
if ( !storelist[i] ) continue;
let def = GetDefaultByType(storelist[i]);
if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag());
if ( sub )
{
int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]);
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
}
else if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag());
else str = def.GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -1632,7 +1646,7 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
@ -1688,10 +1702,10 @@ Class DemolitionistMenu : GenericMenu
if ( sub )
{
int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]);
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,def.GetTag());
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
}
else if ( storeunits[i] > 1 ) str = String.Format("%dx %s",storeunits[i],def.GetTag());
else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -2374,7 +2388,7 @@ Class DemolitionistMenu : GenericMenu
if ( !ready || !ready.ValidateSpriteFrame() ) continue;
}
// ignore child ammos
if ( (type is 'Ammo') && (type.GetParentClass() != 'Ammo') ) continue;
if ( (type is 'Ammo') && (type.GetParentClass() != 'SWWMAmmo') ) continue;
if ( inv.Stamina == 0 ) continue;
// items with negative stamina can only be sold
if ( (inv.Stamina < 0) && !sub ) continue;
@ -3187,8 +3201,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -3199,8 +3215,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=ofs; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
int clscol = Font.CR_WHITE;
if ( invlist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD;
@ -3246,8 +3264,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=0; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
len = fnt.StringWidth(str);
if ( len > longest ) longest = len;
@ -3258,8 +3278,10 @@ Class DemolitionistMenu : GenericMenu
for ( int i=ofs; i<invlist.Size(); i++ )
{
if ( !invlist[i] ) continue;
if ( invlist[i] is 'Ammo' ) str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,invlist[i].GetTag());
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) ) str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
if ( (invlist[i] is 'Ammo') || (invlist[i] is 'MagAmmo') )
str = String.Format("(%d/%d) %s",invlist[i].Amount,invlist[i].MaxAmount,SWWMUtility.GetAmmoTag(invlist[i]));
else if ( (invlist[i].Amount > 1) || (!(invlist[i] is 'PuzzleItem') && !(invlist[i] is 'Weapon') && (invlist[i].MaxAmount > 1)) )
str = String.Format("%dx %s",invlist[i].Amount,invlist[i].GetTag());
else str = invlist[i].GetTag();
int clscol = Font.CR_WHITE;
if ( invlist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItem(invlist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD;
@ -3456,10 +3478,10 @@ Class DemolitionistMenu : GenericMenu
if ( sub )
{
int amt = (storelist[i] is 'CandyGun')?(players[consoleplayer].mo.CountInv("CandyGunSpares")+1):players[consoleplayer].mo.CountInv(storelist[i]);
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,def.GetTag());
if ( (amt > 1) || (storelist[i] is 'Ammo') ) str = String.Format("(%d/%d) %s",storeunits[i],amt,SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
}
else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],def.GetTag());
else if ( (storeunits[i] > 1) || (storelist[i] is 'Ammo') ) str = String.Format("%dx %s",storeunits[i],SWWMUtility.GetAmmoTagClass(storelist[i]));
else str = def.GetTag();
int clscol = Font.CR_WHITE;
if ( storelist[i] is 'Weapon' ) clscol = SWWMUtility.IsVIPItemClass(storelist[i])?Font.FindFontColor('VIPGold'):Font.CR_GOLD;

View file

@ -171,7 +171,7 @@ Class Demolitionist : PlayerPawn
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
let type = (class<Ammo>)(AllActorClasses[i]);
if ( !type || (type.GetParentClass() != "Ammo") )
if ( !type || (type == "Ammo") || (type == "SWWMAmmo") || ((type.GetParentClass() != "Ammo") && (type.GetParentClass() != "SWWMAmmo")) )
continue;
// Only give if it's for a valid weapon
bool isvalid = false;

View file

@ -232,17 +232,8 @@ Class SWWMItemSense : Thinker
let i = item;
if ( i is 'SWWMRespawnTimer' ) i = i.tracer;
if ( !i ) return;
// certain ammo types use the pickup message as it's amount-aware
if ( (i is 'RedShell') || (i is 'GreenShell')
|| (i is 'WhiteShell') || (i is 'BlueShell')
|| (i is 'BlackShell') || (i is 'PurpleShell')
|| (i is 'GoldShell') || (i is 'EvisceratorShell')
|| (i is 'HellblazerMissiles')
|| (i is 'HellblazerCrackshots')
|| (i is 'HellblazerRavagers')
|| (i is 'HellblazerWarheads')
|| (i is 'SMW05Ammo')
|| (i is 'SheenAmmo') )
// our ammo types use the pickup message, as it's amount-aware
if ( (i is 'SWWMAmmo') || (i is 'MagAmmo') )
tag = Inventory(i).PickupMessage();
else tag = i.GetTag();
}

View file

@ -888,6 +888,16 @@ Class SWWMUtility
basetag = "BOSSBRAIN";
break;
case 'WolfensteinSS':
// ensure it's not being replaced
let def = GetDefaultByType('WolfensteinSS');
bool dehackery = false;
for ( State s=def.SpawnState; s; s=s.NextState )
{
if ( s.bDEHACKED ) dehackery = true;
// keep checking until we hit a loop, just in case
if ( s.NextState && (s.DistanceTo(s.NextState) <= 0) ) break;
}
if ( dehackery ) break;
case 'SWWMSS':
basetag = "WOLFSS";
break;
@ -1073,9 +1083,12 @@ Class SWWMUtility
Actor Instigator = (flags&DE_NOTMISSILE)?Source:Source.target;
BlockThingsIterator bi = BlockThingsIterator.Create(Source,ExplosionRadius);
int nhit = 0, nkill = 0;
Array<Actor> washit;
washit.Clear();
while ( bi.Next() )
{
Actor a = bi.Thing;
washit.Push(a);
// early checks for self and ignored actor (usually the instigator)
if ( !a || (a == ignoreme) || (a == Source) )
continue;
@ -1129,6 +1142,76 @@ Class SWWMUtility
if ( (flags&DE_HOWL) && a && (a.Health > 0) && a.bISMONSTER && !Random[DoBlast](0,3) ) a.Howl();
if ( (!a || (a.Health <= 0)) && (!(flags&DE_COUNTENEMIES) || hostile) && (!(flags&DE_COUNTSTEALTH) || inactive) ) nkill++;
}
// traverse portals (needed since BlockThingsIterator can't properly cross sector portals in both vertical directions)
let hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
if ( !hnd || (hnd.psectors.Size() <= 1) ) return nhit, nkill;
int thisgroup = Source.CurSector.portalgroup;
for ( int i=0; i<hnd.psectors.Size(); i++ )
{
if ( i == thisgroup ) continue;
Vector2 relpos = Source.pos.xy+SWWMUtility.PortalDisplacement(level.Sectors[hnd.psectors[thisgroup]],level.Sectors[hnd.psectors[i]]);
bi = BlockThingsIterator.CreateFromPos(relpos.x,relpos.y,Source.pos.z,Source.pos.z+Source.height,ExplosionRadius,false);
while ( bi.Next() )
{
Actor a = bi.Thing;
// early exit for already processed actors
if ( washit.Find(a) < washit.Size() )
continue;
washit.Push(a);
// early checks for self and ignored actor (usually the instigator)
if ( !a || (a == ignoreme) || (a == Source) )
continue;
// can't be affected
if ( !a.bSHOOTABLE && !a.bVULNERABLE )
continue;
// no blasting if no radius dmg (unless forced)
if ( a.bNORADIUSDMG && !Source.bFORCERADIUSDMG )
continue;
// check the DONTHARMCLASS/DONTHARMSPECIES flags
if ( !a.player && ((Source.bDONTHARMCLASS && (a.GetClass() == Source.GetClass())) || (Source.bDONTHARMSPECIES && (a.GetSpecies() == Source.GetSpecies()))) )
continue;
// can we see it
if ( !(flags&DE_THRUWALLS) && !Source.CheckSight(a,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
// intersecting?
if ( !SWWMUtility.SphereIntersect(a,Source.pos,ExplosionRadius) )
continue;
// calculate factor
Vector3 dir = level.Vec3Diff(Source.pos,a.Vec3Offset(0,0,a.Height/2));
double dist = dir.length();
// intersecting, randomize direction
if ( dir.length() <= double.epsilon )
{
double ang = FRandom[DoBlast](0,360);
double pt = FRandom[DoBlast](-90,90);
dir = (cos(ang)*cos(pt),sin(ang)*cos(pt),-sin(pt));
}
dir /= dist;
dist = clamp(dist-FullDamageRadius,0,min(dist,ExplosionRadius));
double damagescale = 1.-clamp((dist-a.Radius)*brange,0.,1.);
double mm = MomentumTransfer*damagescale;
// no knockback if massive/unpushable
if ( (abs(mm) > 0.) && !a.bDORMANT && !a.bDONTTHRUST && (a.Mass < Actor.LARGE_MASS) )
{
Vector3 Momentum = dir*mm;
if ( (a.pos.z <= a.floorz) || !a.TestMobjZ() )
Momentum.z = max(Momentum.z,(flags&DE_EXTRAZTHRUST?.4:.1)*Momentum.length());
Momentum /= GameTicRate*max(50,a.Mass); // prevent tiny things from getting yeeted at warp speed
a.vel += Momentum;
if ( (flags&DE_BLAST) && a.bCANBLAST && !a.bDONTBLAST ) a.bBLASTED = true;
}
// hit it
bool inactive = (!a.player&&!a.target);
bool hostile = (Instigator&&a.IsHostile(Instigator)&&(a.bISMONSTER||a.player));
if ( (!(flags&DE_COUNTENEMIES) || hostile) && (!(flags&DE_COUNTSTEALTH) || inactive) ) nhit++;
int dmg = int(Damage*damagescale);
if ( dmg <= 0 ) continue; // no harm
int ndmg = a.DamageMobj(Source,Instigator,dmg,(DamageType=='')?Source.DamageType:DamageType,DMG_EXPLOSION,atan2(-dir.y,-dir.x));
if ( a && !(flags&DE_NOBLEED) ) a.TraceBleed((ndmg>0)?ndmg:dmg,Source);
if ( (flags&DE_HOWL) && a && (a.Health > 0) && a.bISMONSTER && !Random[DoBlast](0,3) ) a.Howl();
if ( (!a || (a.Health <= 0)) && (!(flags&DE_COUNTENEMIES) || hostile) && (!(flags&DE_COUNTSTEALTH) || inactive) ) nkill++;
}
}
return nhit, nkill;
}
@ -1467,7 +1550,7 @@ Class SWWMUtility
// to be filled
static bool IsKnownCustomWAD()
{
if ( (gameinfo.gametype&GAME_DOOM) )
if ( gameinfo.gametype&GAME_DOOM )
{
if ( IsEviternity() ) return true;
}
@ -1558,9 +1641,25 @@ Class SWWMUtility
if ( i is 'WarArmor' ) return true;
if ( i is 'FuckingInvinciball' ) return true;
if ( i is 'SWWMLamp' ) return true;
if ( i is 'AngerySigil' ) return true;
return false;
}
// returns the plural tag (if available)
static clearscope string GetAmmoTag( Inventory i )
{
if ( i is 'MagAmmo' ) return StringTable.Localize("$T_"..MagAmmo(i).PickupTag.."S");
if ( i is 'SWWMAmmo' ) return StringTable.Localize("$T_"..SWWMAmmo(i).PickupTag.."S");
return i.GetTag();
}
// because of zscript fuckery with GetDefaultByType
static clearscope string GetAmmoTagClass( Class<Inventory> i )
{
if ( i is 'MagAmmo' ) return StringTable.Localize("$T_"..GetDefaultByType((Class<MagAmmo>)(i)).PickupTag.."S");
if ( i is 'SWWMAmmo' ) return StringTable.Localize("$T_"..GetDefaultByType((Class<SWWMAmmo>)(i)).PickupTag.."S");
return GetDefaultByType(i).GetTag();
}
static bool, TextureID DefaceTexture( TextureID checkme )
{
String tn = TexMan.GetName(checkme);
@ -1929,13 +2028,17 @@ Class ShinemapDebugSphere : Actor
XZW1 G -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 H -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 I -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 J -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 J -1 Bright A_SetRenderStyle(1.,STYLE_Add);
XZW1 K -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 L -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 M -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 L -1 Bright A_SetRenderStyle(1.,STYLE_Add);
XZW1 M -1 Bright A_SetRenderStyle(1.,STYLE_Add);
XZW1 N -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 O -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 P -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 Q -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 R -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 S -1 A_SetRenderStyle(1.,STYLE_Normal);
XZW1 T -1 A_SetRenderStyle(1.,STYLE_Normal);
Loop;
}
}