Major rebalance and other changes:
- Tweaked health item values. - Allow Sandwich to save you from the Ynykron (usually). - Tweaked ammo availability again. - Disable ammo and weapon drops from enemies (can be re-enabled). - Adjusted refire behaviour of Biospark Carbine. - Tweaked the sizes of some pickup models. - Wallbuster gives only 5 ammo on pickup. - Tweaked score values for more balanced progression. - Overkill bonus also includes enemies that take twice their base health in damage (as was intended) - Add a reminder for myself to add wall collision to dashing.
This commit is contained in:
parent
cf028f7faa
commit
4af07111f1
18 changed files with 155 additions and 131 deletions
|
|
@ -82,11 +82,11 @@ Other items that can be bought at any moment. **Omnisights** and **Embiggeners**
|
|||
|
||||
Item | Price
|
||||
------------------ | -------
|
||||
Health Nugget | 1200
|
||||
Health Nugget | 200
|
||||
Health Tetrahedron | 3000
|
||||
Health Cube | 8000
|
||||
Refresher | 160000
|
||||
Armor Nugget | 1000
|
||||
Armor Nugget | 300
|
||||
Blast Suit | 40000
|
||||
War Armor | 100000
|
||||
Elemental Coating | 80000
|
||||
|
|
|
|||
43
README.md
43
README.md
|
|
@ -29,7 +29,7 @@ Additional features:
|
|||
- **Forx JetBurst™ Units:** Can be used for quick dashes in any direction, or even for short bursts of flight.
|
||||
- **Targetting Array:** Tracks nearby foes and provides basic information on their health. Compatible with **Omnisight™** mapping modules for tracking key items and nearby exits. Can also highlight nearby pickups by holding a dedicated button.
|
||||
- **Akari Labs CuteEmotion™ Display:** Equipped onto your visor to show a wide range of predefined facial expressions in order to convey simple emotions to others.
|
||||
- **Akari Labs LoudBoi™ Voicebox:** Allows you to emit. Additional voice options will be available through add-ons. Note that the default voice is in Japanese, but subtitles will be provided when available.
|
||||
- **Akari Labs LoudBoi™ Voicebox:** Allows you to 🇪 🇲 🇮 🇹. Additional voice options will be available through add-ons. Note that the default voice is in Japanese, but subtitles will be provided when available.
|
||||
|
||||
**Note:** Since you're a robutt you pretty much can swim indefinitely and are also inmune to poison.
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ Coming from the **Doom** modding side of things, this gun really packs a punch,
|
|||
|
||||
The **Spreadgun** uses 10 gauge ammunition, apparently just for the sake of making it feel more powerful due to the increased recoil.
|
||||
|
||||
### 10Ga shells ~ Replaces Clip / Shells, Wand Crystal / Ethereal Arrows, Flechette, Chaos Device/Banishment Device
|
||||
### 10Ga shells ~ Replaces Shells, Ethereal Arrows, Chaos Device/Banishment Device
|
||||

|
||||
|
||||
Available in the following types, with varying chances of appearing depending
|
||||
|
|
@ -155,7 +155,7 @@ Another signature weapon of the **SWWM** series. This time in its third and far
|
|||
|
||||
**Secondary fire:** Lob the rocket as a grenade that will bounce around.
|
||||
|
||||
**Tertiary fire:** Change the ammo type, there are four options (see ammo section below).
|
||||
**Tertiary fire (Zoom):** Change the ammo type, there are four options (see ammo section below).
|
||||
|
||||
This thing is more explosive than it looks, so if you're reading this, Icarus, ***DO NOT*** use it at close range.
|
||||
|
||||
|
|
@ -174,16 +174,13 @@ Ammo for the **Hellblazer**, found either as single units or packs. There are fo
|
|||
|
||||
A relic from the olden days of **UnSX**. A potent energy weapon that uses what's best described as *"sentient lightning"*.
|
||||
|
||||
**Primary fire:** Small blobs of energy that explode violently on impact.
|
||||
**Primary fire:** Small blobs of energy that explode violently on impact. Hold for rapid fire.
|
||||
|
||||
**Secondary fire:** Concentrated beam shot. A very old thing from the original **UnSX I** incarnation. Can penetrate multiple solid targets.
|
||||
**Secondary fire:** Concentrated beam shot. A very old thing from the original **UnSX I** incarnation. Can penetrate multiple solid targets. Can also be held for rapid fire.
|
||||
|
||||
Zoom deploys a capsule that releases a massive sphere of pure energy that
|
||||
tracks down any hostile targets. It will rip through everything and even bounce
|
||||
off surfaces, but it has a rather limited lifespan.
|
||||
**Tertiary fire (Zoom):** Deploy a capsule that releases a massive sphere of pure energy, which will track down any hostile targets. It will rip through everything and even bounce off surfaces, but it has a rather limited lifespan.
|
||||
|
||||
If the beam hits either of the other energy blobs, they will detonate with
|
||||
highly amplified damage and range.
|
||||
If the beam hits either of the other energy blobs, they will detonate with highly amplified damage and range. Note that it is possible to alternate between primary and secondary modes while rapid firing, making this combo just a matter of precise timing.
|
||||
|
||||
### Biospark Unit ~ Replaces Cells, Runes
|
||||

|
||||
|
|
@ -273,24 +270,24 @@ All of these can be carried in your inventory indefinitely before use, except in
|
|||
### Health Nugget ~ Replaces Health Bonus, Crystal Vial
|
||||

|
||||
|
||||
+5 health boost, up to a cap of 200 points.
|
||||
+1 health boost, up to a cap of 200 points.
|
||||
|
||||
### Health Tetrahedron ~ Replaces Stimpak, Quartz Flask
|
||||

|
||||
|
||||
+15 health boost, up to a cap of 100 points.
|
||||
+10 health boost, up to a cap of 100 points.
|
||||
|
||||
### Health Cube ~ Replaces Medkit, Mystic Urn (Hexen), Quartz Flask (Heretic)
|
||||

|
||||
|
||||
+30 health boost, up to a cap of 100 points.
|
||||
+20 health boost, up to a cap of 100 points.
|
||||
|
||||
### Refresher ~ Replaces Soulsphere, Mystic Urn (Heretic), Mystic Ambit Incant
|
||||

|
||||
|
||||
This artifact provides a massive boost of health to 500, plus a regeneration effect that heals 5% every 2 seconds, for up to 60 seconds, thus it doubles as a powerup. Like other health items, the **Refresher** is auto-activated if you're about to die, though it sometimes won't be enough to save you.
|
||||
This artifact provides a massive +200 health boost plus a regeneration effect that heals 10% every 5 seconds, for up to 60 seconds, thus it doubles as a powerup. Its overhealing effects cap at 500 points (including the regen). Like other health items, the **Refresher** is auto-activated if you're about to die, though it sometimes won't be enough to save you.
|
||||
|
||||
### Armor Nugget ~ Replaces Armor Bonus, Timebomb of the Ancients, Disc of Repulsion
|
||||
### Armor Nugget ~ Replaces Armor Bonus, Timebomb of the Ancients, Disc of Repulsion, Flechette
|
||||

|
||||
|
||||
Cumulative armor items that can increase resistance to all damage by as much as you can find. Each nugget adds 5% to the total. Above 100%, damage gets turned into additional health (up to the standard 100% cap). The upper cap for these is 200%.
|
||||
|
|
@ -316,7 +313,7 @@ Can eat up a total of 250 damage points before breaking.
|
|||
### Grilled Cheese Sandwich ~ Replaces Megasphere, Morph Ovum, Platinum Helm
|
||||

|
||||
|
||||
The ultimate meal. Grants a full 1000 health and magically gives you a full stack of **Armor Nuggets**, a **Blast Suit** and a **War Armor**. In addition it prevents you from dying at all when it activates automatically (although not even this wondrous artifact can save you from the destruction of the **Ynykron Artifact**).
|
||||
The ultimate meal. Grants a full 1000 health and magically gives you a full stack of **Armor Nuggets**, a **Blast Suit** and a **War Armor**. In addition it prevents you from dying at all when it activates automatically (this wondrous artifact can even save you from the destruction of the **Ynykron Artifact**).
|
||||
|
||||
### Ghost Artifact ~ Replaces Blur Sphere, Shadowsphere, Amulet of Warding
|
||||

|
||||
|
|
@ -355,7 +352,7 @@ For 60 seconds, you can fly around in the air at 2x your normal walking speed, b
|
|||
|
||||
This thing makes you impervious to pretty much everything excluding the **Ynykron Artifact**.
|
||||
|
||||
You're fucking invincible for a total of 30 seconds.
|
||||
You're fucking invincible for a total of 20 seconds.
|
||||
|
||||
### Hammerspace Embiggener ~ Replaces Backpack, Bag of Holding, Porkalator, Dragonskin Bracers
|
||||

|
||||
|
|
@ -389,16 +386,16 @@ Message display. Can be configured to show different numbers of messages dependi
|
|||
|
||||
Current score.
|
||||
|
||||
The scoring system is pretty straightforward. Each enemy you kill will give you points according to a quarter of its base health, rounded up to the nearest multiple of 10 and capped to 1000, plus some bonuses (in order of application):
|
||||
The scoring system is pretty straightforward. Each enemy you kill will give you points according to 5% of its base health, rounded up to the nearest multiple of 10 and capped to 1000, plus some bonuses (in order of application):
|
||||
|
||||
* x1.25 for an overkill (enemy received twice its base health in damage).
|
||||
* +500 if the enemy was killed with the **Deep Impact** primary (humiliation).
|
||||
* x2 for an overkill (enemy was gibbed or received twice its base health in damage).
|
||||
* x1.5 for each combo level, up to x8 in steps of x0.5. Kills are considered combos if multiple enemies are killed within 5 seconds of each other.
|
||||
* +100 for killing an enemy without having taken damage since last spawn, with extra +10 boosts for consecutive kills (extra boosts taper off after 10x).
|
||||
* +5000 if the enemy killed is a boss.
|
||||
* +2000 if you've killed the last enemy in the map.
|
||||
* +1000 if the enemy was killed with the **Deep Impact** primary (humiliation).
|
||||
* +2000 if the enemy killed is a boss.
|
||||
* +1000 if you've killed the last enemy in the map.
|
||||
|
||||
You are also given +500 points for each secret found, +5000 if it's the final secret. Countable items give +25 points each or +2500 if it's the final item.
|
||||
You are also given +100 points for each secret found, +1000 if it's the final secret. Countable items give +10 points each or +500 if it's the final item.
|
||||
|
||||
Score can be used to buy items on the in-game store, and it is preserved between hubs.
|
||||
|
||||
|
|
|
|||
|
|
@ -80,3 +80,4 @@ user bool swwm_funtags = true; // replace vanilla monster names with silly one
|
|||
server bool swwm_simplefog = false; // simplified teleport fogs (useful to speed up slaughterwads)
|
||||
user bool swwm_bigtags = false; // use a bigger font for targeter tags
|
||||
user bool swwm_intermusic = false; // use original intermission music
|
||||
server bool swwm_enemydrops = false; // allow enemies to drop ammo and weapons
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ SWWM_MAXBLOOD = "Blood Limit";
|
|||
SWWM_MAXGIBS = "Gib Limit";
|
||||
SWWM_MAXCASINGS = "Casing Limit";
|
||||
SWWM_MAXDEBRIS = "Debris Limit";
|
||||
SWWM_ENEMYDROPS = "Enemies Drop Weapons and Ammo";
|
||||
TOOLTIP_SWWM_VOICETYPE = "Sets the voice pack for the player.";
|
||||
TOOLTIP_SWWM_MUTEVOICE = "Control what gets muted, if you'd rather have a more silent protagonist.";
|
||||
TOOLTIP_SWWM_FLASHSTRENGTH = "Screen flashes usually happen when firing some weapons, you can lower this if these effects are harmful for you.";
|
||||
|
|
@ -185,6 +186,7 @@ TOOLTIP_SWWM_MAXBLOOD = "Caps the maximum amount of blood effects. Surpassing th
|
|||
TOOLTIP_SWWM_MAXGIBS = "Caps the maximum amount of gibs. Surpassing this limit will cause the excess to fade out.";
|
||||
TOOLTIP_SWWM_MAXCASINGS = "Caps the maximum amount of casings and spent magazines. Surpassing this limit will cause the excess to fade out.";
|
||||
TOOLTIP_SWWM_MAXDEBRIS = "Caps the maximum amount of rubble from explosions and others. Surpassing this limit will cause the excess to fade out.";
|
||||
TOOLTIP_SWWM_ENEMYDROPS = "If enabled, enemies will drop weapons and ammo like they would in vanilla. This is not recommended as it easily breaks progression.";
|
||||
// knowledge base
|
||||
SWWM_COMINGSOON = "(coming soon)";
|
||||
SWWM_MISSTAB = "Mission";
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ SWWM_MAXBLOOD = "Límite de Sangre";
|
|||
SWWM_MAXGIBS = "Límite de Vísceras";
|
||||
SWWM_MAXCASINGS = "Límite de Casquillos";
|
||||
SWWM_MAXDEBRIS = "Límite de Escombros";
|
||||
SWWM_ENEMYDROPS = "Enemigos Sueltan Armas y Munición";
|
||||
TOOLTIP_SWWM_VOICETYPE = "Selecciona el pack de voz para el jugador.";
|
||||
TOOLTIP_SWWM_MUTEVOICE = "Controla lo que se mutea, si prefieres tener un protagonista más silencioso.";
|
||||
TOOLTIP_SWWM_FLASHSTRENGTH = "Los destellos en pantalla suelen ocurrir al disparar algunas armas, puedes reducirlo si este tipo de effectos te causan malestar.";
|
||||
|
|
@ -182,6 +183,7 @@ TOOLTIP_SWWM_MAXBLOOD = "Limita la cantidad máxima de efectos de sangre. Sobrep
|
|||
TOOLTIP_SWWM_MAXGIBS = "Limita la cantidad máxima de vísceras. Sobrepasar este límite causará que el exceso se desvanezca.";
|
||||
TOOLTIP_SWWM_MAXCASINGS = "Limita la cantidad máxima de casquillos y cargadores usados. Sobrepasar este límite causará que el exceso se desvanezca.";
|
||||
TOOLTIP_SWWM_MAXDEBRIS = "Limita la cantidad máxima de escombros por explosiones y otros. Sobrepasar este límite causará que el exceso se desvanezca.";
|
||||
TOOLTIP_SWWM_ENEMYDROPS = "Al activar, los enemigos soltarán armas y munición como harían en vanilla. Ésto no se recomienda ya que rompe fácilmente la progresión.";
|
||||
// knowledge base
|
||||
SWWM_COMINGSOON = "(próximamente)";
|
||||
SWWM_MISSTAB = "Misión";
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \cwGZ\c- r532 (Mon 7 Sep 23:29:06 CEST 2020)";
|
||||
SWWM_MODVER="\chSWWM \cwGZ\c- r533 (Tue 8 Sep 22:47:29 CEST 2020)";
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ OptionMenu "SWWMOptionMenu"
|
|||
Option "$SWWM_FUNTAGS", "swwm_funtags", "YesNo"
|
||||
StaticText " "
|
||||
StaticText "$SWWM_BTITLE", "Gold"
|
||||
Option "$SWWM_ENEMYDROPS", "swwm_enemydrops", "YesNo"
|
||||
Option "$SWWM_RESETSCORE", "swwm_resetscore", "YesNo"
|
||||
Option "$SWWM_EXTRAALERT", "swwm_extraalert", "YesNo"
|
||||
Option "$SWWM_BOSSENHANCE", "swwm_upgradebosses", "YesNo"
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ Model "ArmorNuggetItem"
|
|||
Path "models"
|
||||
Model 0 "Nugget_d.3d"
|
||||
Skin 0 "Nugget_Armor.png"
|
||||
Scale 0.03 0.03 0.03
|
||||
Scale 0.02 0.02 0.02
|
||||
ZOffset 16
|
||||
ROTATING
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ Model "HealthNuggetItem"
|
|||
Path "models"
|
||||
Model 0 "Nugget_d.3d"
|
||||
Skin 0 "Nugget.png"
|
||||
Scale 0.03 0.03 0.03
|
||||
Scale 0.02 0.02 0.02
|
||||
ZOffset 16
|
||||
ROTATING
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ Model "CubeHealthItem"
|
|||
Path "models"
|
||||
Model 0 "CubeHealth_d.3d"
|
||||
Skin 0 "CubeHealth.png"
|
||||
Scale 0.03 0.03 0.03
|
||||
Scale 0.025 0.025 0.025
|
||||
ZOffset 16
|
||||
ROTATING
|
||||
|
||||
|
|
@ -64,7 +64,7 @@ Model "RefresherItem"
|
|||
Path "models"
|
||||
Model 0 "Refresher_d.3d"
|
||||
Skin 0 "Refresher.png"
|
||||
Scale 0.05 0.05 0.05
|
||||
Scale 0.04 0.04 0.04
|
||||
ZOffset 16
|
||||
RollOffset 30
|
||||
ROTATING
|
||||
|
|
@ -102,7 +102,7 @@ Model "GrilledCheeseSandwich"
|
|||
Model 0 "Sandwich_d.3d"
|
||||
SurfaceSkin 0 0 "goldmap.png"
|
||||
SurfaceSkin 0 1 "Sandwich.png"
|
||||
Scale 0.05 0.05 0.05
|
||||
Scale 0.04 0.04 0.04
|
||||
PitchOffset -45
|
||||
ZOffset 16
|
||||
ROTATING
|
||||
|
|
|
|||
|
|
@ -23,14 +23,16 @@ Mixin Class SWWMAmmo
|
|||
|
||||
override bool SpecialDropAction( Actor dropper )
|
||||
{
|
||||
if ( Amount != default.Amount )
|
||||
if ( swwm_enemydrops )
|
||||
{
|
||||
// needed for positioning to work
|
||||
Owner = dropper;
|
||||
if ( Amount == default.Amount ) return false;
|
||||
// subdivide
|
||||
Owner = dropper; // needed for positioning to work
|
||||
CreateTossable(Amount);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
// no ammo drops from enemies
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool CmpAmmo( Class<Ammo> a, Class<Ammo> b )
|
||||
|
|
@ -200,14 +202,16 @@ Class MagAmmo : Inventory abstract
|
|||
|
||||
override bool SpecialDropAction( Actor dropper )
|
||||
{
|
||||
if ( Amount != default.Amount )
|
||||
if ( swwm_enemydrops )
|
||||
{
|
||||
// needed for positioning to work
|
||||
Owner = dropper;
|
||||
if ( Amount == default.Amount ) return false;
|
||||
// subdivide
|
||||
Owner = dropper; // needed for positioning to work
|
||||
CreateTossable(Amount);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
// no ammo drops from enemies
|
||||
return true;
|
||||
}
|
||||
|
||||
override void DoEffect()
|
||||
|
|
@ -332,7 +336,7 @@ Class RedShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_ShellsNormal.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 50;
|
||||
Ammo.BackpackAmount 8;
|
||||
Ammo.BackpackAmount 3;
|
||||
Ammo.DropAmount 3;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -393,7 +397,7 @@ Class GreenShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_ShellsSlug.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 48;
|
||||
Ammo.BackpackAmount 4;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.DropAmount 2;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -447,7 +451,7 @@ Class WhiteShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_ShellsDragon.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 32;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.BackpackAmount 1;
|
||||
Ammo.DropAmount 1;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -494,7 +498,7 @@ Class BlueShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_ShellsKinylum.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 40;
|
||||
Ammo.BackpackAmount 4;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.DropAmount 2;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -541,7 +545,7 @@ Class BlackShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_ShellsFuck.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 20;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.DropAmount 1;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -581,7 +585,7 @@ Class PurpleShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_ShellsBall.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 32;
|
||||
Ammo.BackpackAmount 4;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.DropAmount 2;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -691,7 +695,7 @@ Class EvisceratorShell : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_Eviscerator.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 48;
|
||||
Ammo.BackpackAmount 3;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.DropAmount 2;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -757,7 +761,7 @@ Class HellblazerMissiles : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_HellblazerMissile.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 48;
|
||||
Ammo.BackpackAmount 3;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.DropAmount 1;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -817,7 +821,7 @@ Class HellblazerCrackshots : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_HellblazerCrackshot.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 30;
|
||||
Ammo.BackpackAmount 2;
|
||||
Ammo.BackpackAmount 1;
|
||||
Ammo.DropAmount 1;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -856,7 +860,7 @@ Class HellblazerRavagers : Ammo
|
|||
Inventory.Icon "graphics/HUD/Icons/A_HellblazerRavager.png";
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 18;
|
||||
Ammo.BackpackAmount 1;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.DropAmount 1;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
@ -1373,7 +1377,7 @@ Class FabricatorTier1 : AmmoFabricator
|
|||
Tag "$T_FABRICATOR1";
|
||||
Inventory.Icon "graphics/HUD/Icons/I_Fabricator1.png";
|
||||
Inventory.PickupMessage "$T_FABRICATOR1";
|
||||
Inventory.MaxAmount 30;
|
||||
Inventory.MaxAmount 20;
|
||||
AmmoFabricator.Budget 5000;
|
||||
AmmoFabricator.PerType 2;
|
||||
AmmoFabricator.MaxUnitPrice 2500;
|
||||
|
|
@ -1389,7 +1393,7 @@ Class FabricatorTier2 : AmmoFabricator
|
|||
Tag "$T_FABRICATOR2";
|
||||
Inventory.Icon "graphics/HUD/Icons/I_Fabricator2.png";
|
||||
Inventory.PickupMessage "$T_FABRICATOR2";
|
||||
Inventory.MaxAmount 20;
|
||||
Inventory.MaxAmount 15;
|
||||
AmmoFabricator.Budget 15000;
|
||||
AmmoFabricator.PerType 4;
|
||||
AmmoFabricator.MaxUnitPrice 10000;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ Class ArmorNuggetItem : SWWMSpareArmor
|
|||
Default
|
||||
{
|
||||
Tag "$T_NUGGETA";
|
||||
Stamina 1000;
|
||||
Stamina 300;
|
||||
Inventory.Icon "graphics/HUD/Icons/I_ArmorNugget.png";
|
||||
Inventory.PickupMessage "$T_NUGGETA";
|
||||
Inventory.MaxAmount 20;
|
||||
|
|
|
|||
|
|
@ -916,10 +916,10 @@ Class Wallbuster : SWWMWeapon
|
|||
Super.AttachToOwner(other);
|
||||
if ( !initialized )
|
||||
{
|
||||
// first wallbuster is fully loaded
|
||||
// first wallbuster has five barrels loaded
|
||||
initialized = true;
|
||||
for ( int i=0; i<25; i++ )
|
||||
loaded[i] = "RedShell";
|
||||
loaded[i] = (i<5)?(Class<Ammo>)("RedShell"):null;
|
||||
for ( int i=0; i<25; i++ )
|
||||
fired[i] = false;
|
||||
}
|
||||
|
|
@ -1474,7 +1474,7 @@ Class Wallbuster : SWWMWeapon
|
|||
Weapon.SelectionOrder 400;
|
||||
Weapon.UpSound "wallbuster/select";
|
||||
Weapon.AmmoType1 "RedShell";
|
||||
Weapon.AmmoGive1 25;
|
||||
Weapon.AmmoGive1 5;
|
||||
Stamina 35000;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -328,7 +328,15 @@ Class YnykronImpact : Actor
|
|||
// voodoo dolls just get erased (how convenient)
|
||||
// otherwise instantly vaporize the fucker
|
||||
if ( tracer.player && (tracer.player.mo != tracer) ) tracer.Destroy();
|
||||
else tracer.DamageMobj(self,target,int.max,'Ynykron',DMG_FORCED|DMG_THRUSTLESS);
|
||||
else if ( tracer.CountInv("GrilledCheeseSandwich") > 0 )
|
||||
{
|
||||
// force use the sandwich
|
||||
let gc = GrilledCheeseSandwich(tracer.FindInventory("GrilledCheeseSandwich"));
|
||||
tracer.A_StartSound(gc.UseSound,CHAN_ITEMEXTRA);
|
||||
gc.DoTheThing(true);
|
||||
gc.Amount--;
|
||||
}
|
||||
else if ( !tracer.FindInventory("GrilledCheeseSafeguard") ) tracer.DamageMobj(self,target,int.max,'Ynykron',DMG_FORCED|DMG_THRUSTLESS);
|
||||
if ( tracer && (tracer.Health <= 0) )
|
||||
{
|
||||
if ( tracer.player ) PlayerGone.FeckOff(tracer);
|
||||
|
|
@ -1430,7 +1438,24 @@ Class YnykronSingularity : Actor
|
|||
// voodoo dolls just get erased (how convenient)
|
||||
// otherwise instantly vaporize the fucker
|
||||
if ( a.player && (a.player.mo != a) ) a.Destroy();
|
||||
else a.DamageMobj(self,a,int.max,'Ynykron',DMG_FORCED|DMG_THRUSTLESS);
|
||||
else if ( a.CountInv("GrilledCheeseSandwich") > 0 )
|
||||
{
|
||||
// force use the sandwich, warp to safe spot
|
||||
let gc = GrilledCheeseSandwich(a.FindInventory("GrilledCheeseSandwich"));
|
||||
Spawn("SWWMItemFog",a.Vec3Offset(0,0,a.Height/2));
|
||||
Vector3 safepos;
|
||||
int safeangle;
|
||||
if ( deathmatch ) [safepos, safeangle] = level.PickDeathmatchStart();
|
||||
else [safepos, safeangle] = level.PickPlayerStart(a.PlayerNumber());
|
||||
a.vel *= 0.;
|
||||
a.SetOrigin(safepos,false);
|
||||
a.angle = safeangle;
|
||||
a.pitch = 0;
|
||||
a.A_StartSound(gc.UseSound,CHAN_ITEMEXTRA);
|
||||
gc.DoTheThing(true);
|
||||
gc.Amount--;
|
||||
}
|
||||
else if ( !a.FindInventory("GrilledCheeseSafeguard") ) a.DamageMobj(self,a,int.max,'Ynykron',DMG_FORCED|DMG_THRUSTLESS);
|
||||
if ( a && (a.Health <= 0) )
|
||||
{
|
||||
if ( a.player ) PlayerGone.FeckOff(a);
|
||||
|
|
|
|||
|
|
@ -696,12 +696,12 @@ Class SWWMHandler : EventHandler
|
|||
if ( !playeringame[i] ) continue;
|
||||
if ( players[i].itemcount > lastitemcount[i] )
|
||||
{
|
||||
int score = 25*(players[i].itemcount-lastitemcount[i]);
|
||||
int score = 10*(players[i].itemcount-lastitemcount[i]);
|
||||
if ( (level.total_items == level.found_items) && !allitems )
|
||||
{
|
||||
allitems = true;
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),2500);
|
||||
score += 2475;
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),500);
|
||||
score += 490;
|
||||
}
|
||||
SWWMCredits.Give(players[i],score);
|
||||
SWWMScoreObj.Spawn(score,players[i].mo.Vec3Offset(0,0,players[i].mo.Height/2));
|
||||
|
|
@ -909,14 +909,14 @@ Class SWWMHandler : EventHandler
|
|||
s.mkill = multilevel[pnum]+1;
|
||||
lastkill[pnum] = level.maptime;
|
||||
// scoring
|
||||
int score = min(1000,int(ceil(e.Thing.SpawnHealth()*.25)*10));
|
||||
int score = min(1000,int(ceil(e.Thing.SpawnHealth()*.05)*10));
|
||||
SWWMScoreObj scr = null;
|
||||
if ( e.DamageSource.player == players[consoleplayer] )
|
||||
scr = SWWMScoreObj.Spawn(score,e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
|
||||
int ofs = 0;
|
||||
if ( e.DamageType == 'Push' )
|
||||
{
|
||||
score += 1000;
|
||||
score += 500;
|
||||
if ( scr )
|
||||
{
|
||||
scr.xscore[ofs] = 0;
|
||||
|
|
@ -925,9 +925,9 @@ Class SWWMHandler : EventHandler
|
|||
scr.xcnt = ++ofs;
|
||||
}
|
||||
}
|
||||
if ( ((e.Thing.Health <= e.Thing.GetGibHealth()) || (e.DamageSource.bEXTREMEDEATH) || (e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageType == 'Extreme')) && !e.DamageSource.bNOEXTREMEDEATH && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) )
|
||||
if ( (e.Damage >= e.Thing.GetSpawnHealth()*2) || (((e.Thing.Health <= e.Thing.GetGibHealth()) || (e.DamageSource.bEXTREMEDEATH) || (e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageType == 'Extreme')) && !e.DamageSource.bNOEXTREMEDEATH && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH)) )
|
||||
{
|
||||
score = int(score*1.25);
|
||||
score *= 2;
|
||||
if ( scr )
|
||||
{
|
||||
scr.xscore[ofs] = 0;
|
||||
|
|
@ -963,7 +963,7 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
if ( e.Thing.bBOSS )
|
||||
{
|
||||
score += 5000;
|
||||
score += 2000;
|
||||
if ( scr )
|
||||
{
|
||||
scr.xscore[ofs] = 0;
|
||||
|
|
@ -977,9 +977,9 @@ Class SWWMHandler : EventHandler
|
|||
if ( (level.killed_monsters+1 == level.total_monsters) && !allkills )
|
||||
{
|
||||
allkills = true;
|
||||
SWWMCredits.Give(e.DamageSource.player,2000);
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER"),e.DamageSource.player.GetUserName(),2000);
|
||||
SWWMScoreObj.Spawn(2000,e.DamageSource.Vec3Offset(0,0,e.DamageSource.Height/2));
|
||||
SWWMCredits.Give(e.DamageSource.player,1000);
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER"),e.DamageSource.player.GetUserName(),1000);
|
||||
SWWMScoreObj.Spawn(1000,e.DamageSource.Vec3Offset(0,0,e.DamageSource.Height/2));
|
||||
}
|
||||
spreecount[pnum]++;
|
||||
if ( s && (spreecount[pnum] > s.skill) && !tookdamage[pnum] )
|
||||
|
|
@ -1195,29 +1195,8 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
else if ( e.Replacee is 'CWeaponPiece2' ) e.Replacement = 'CandyGun';
|
||||
else if ( e.Replacee is 'MWeaponPiece1' ) e.Replacement = 'Ynykron';
|
||||
else if ( (e.Replacee == 'Clip') || (e.Replacee == 'GoldWandAmmo') || (e.Replacee == 'GoldWandHefty') || (e.Replacee is 'ArtiPoisonBag') )
|
||||
{
|
||||
switch( Random[Replacement](0,14) )
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
e.Replacement = redpool[Random[Replacement](0,1)];
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
e.Replacement = greenpool[Random[Replacement](0,1)];
|
||||
break;
|
||||
case 7:
|
||||
case 8:
|
||||
e.Replacement = purplepool[0];
|
||||
break;
|
||||
default:
|
||||
e.Replacement = 'SWWMNothing';
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ( (e.Replacee == 'Clip') || (e.Replacee == 'GoldWandAmmo') || (e.Replacee == 'GoldWandHefty') )
|
||||
e.Replacement = 'SWWMNothing';
|
||||
else if ( (e.Replacee == 'Shell') || (e.Replacee is 'CrossbowAmmo') )
|
||||
{
|
||||
switch( Random[Replacement](0,13) )
|
||||
|
|
@ -1285,14 +1264,14 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
else if ( e.Replacee == 'ClipBox' )
|
||||
{
|
||||
if ( Random[Replacements](0,2) ) e.Replacement = 'EvisceratorShell';
|
||||
if ( Random[Replacements](0,3) ) e.Replacement = 'EvisceratorShell';
|
||||
else if ( Random[Replacements](0,4) ) e.Replacement = 'EvisceratorTrioSpawn';
|
||||
else e.Replacement = 'EvisceratorSixPack';
|
||||
}
|
||||
else if ( e.Replacee == 'BlasterAmmo' ) e.Replacement = 'EvisceratorShell';
|
||||
else if ( e.Replacee == 'BlasterHefty' )
|
||||
{
|
||||
if ( Random[Replacements](0,3) ) e.Replacement = 'EvisceratorTrioSpawn';
|
||||
if ( Random[Replacements](0,4) ) e.Replacement = 'EvisceratorTrioSpawn';
|
||||
else e.Replacement = 'EvisceratorSixPack';
|
||||
}
|
||||
else if ( (e.Replacee == 'RocketAmmo') || (e.Replacee == 'PhoenixRodAmmo') || (e.Replacee == 'MaceAmmo') )
|
||||
|
|
@ -1321,7 +1300,7 @@ Class SWWMHandler : EventHandler
|
|||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
if ( Random[Replacements](0,2) ) e.Replacement = 'HellblazerMissiles';
|
||||
if ( Random[Replacements](0,3) ) e.Replacement = 'HellblazerMissiles';
|
||||
else if ( Random[Replacements](0,2) ) e.Replacement = 'HellblazerMissileTrioSpawn';
|
||||
else e.Replacement = 'HellblazerMissileMag';
|
||||
break;
|
||||
|
|
@ -1329,7 +1308,7 @@ Class SWWMHandler : EventHandler
|
|||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
if ( Random[Replacements](0,3) ) e.Replacement = 'HellblazerCrackshots';
|
||||
if ( Random[Replacements](0,4) ) e.Replacement = 'HellblazerCrackshots';
|
||||
else e.Replacement = 'HellblazerCrackshotMag';
|
||||
break;
|
||||
case 9:
|
||||
|
|
@ -1346,7 +1325,7 @@ Class SWWMHandler : EventHandler
|
|||
else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') )
|
||||
{
|
||||
if ( Random[Replacements](0,3) ) e.Replacement = 'SparkUnit';
|
||||
else if ( !Random[Replacements](0,2) ) e.Replacement = 'CandyGunBullets';
|
||||
else if ( !Random[Replacements](0,3) ) e.Replacement = 'CandyGunBullets';
|
||||
else e.Replacement = Random[Replacements](0,2)?'SilverBullets':'SilverBullets2';
|
||||
}
|
||||
else if ( (e.Replacee == 'ArtiTeleport') || (e.Replacee == 'ArtiTeleportOther') )
|
||||
|
|
@ -1358,7 +1337,7 @@ Class SWWMHandler : EventHandler
|
|||
{
|
||||
if ( !Random[Replacements](0,2) )
|
||||
{
|
||||
if ( Random[Replacements](0,2) ) e.Replacement = Random[Replacements](0,2)?'SilverBulletsBundleSpawn':'SilverBullets2BundleSpawn';
|
||||
if ( Random[Replacements](0,3) ) e.Replacement = Random[Replacements](0,2)?'SilverBulletsBundleSpawn':'SilverBullets2BundleSpawn';
|
||||
else e.Replacement = Random[Replacements](0,2)?'SilverBulletAmmo':'SilverBulletAmmo2';
|
||||
}
|
||||
else if ( Random[Replacements](0,2) ) e.Replacement = 'CandyGunBulletsBundleSpawn';
|
||||
|
|
@ -1377,7 +1356,7 @@ Class SWWMHandler : EventHandler
|
|||
else if ( Random[Replacements](0,5) ) e.Replacement = 'HammerspaceEmbiggener';
|
||||
else e.Replacement = 'GoldShell';
|
||||
}
|
||||
else if ( (e.Replacee == 'ArmorBonus') || (e.Replacee == 'ArtiTimeBomb') || (e.Replacee == 'ArtiBlastRadius') ) e.Replacement = 'ArmorNuggetItem';
|
||||
else if ( (e.Replacee == 'ArmorBonus') || (e.Replacee == 'ArtiTimeBomb') || (e.Replacee == 'ArtiBlastRadius') || (e.Replacee is 'ArtiPoisonBag') ) e.Replacement = 'ArmorNuggetItem';
|
||||
else if ( (e.Replacee == 'HealthBonus') || (e.Replacee == 'CrystalVial') ) e.Replacement = 'HealthNuggetItem';
|
||||
else if ( e.Replacee == 'Stimpack' ) e.Replacement = 'TetraHealthItem';
|
||||
else if ( e.Replacee == 'Medikit' ) e.Replacement = 'CubeHealthItem';
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ Class HealthNugget : Health
|
|||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 5;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 200;
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ Class TetraHealth : Health
|
|||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 15;
|
||||
Inventory.Amount 10;
|
||||
Inventory.MaxAmount 100;
|
||||
}
|
||||
}
|
||||
|
|
@ -21,7 +21,7 @@ Class CubeHealth : Health
|
|||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 30;
|
||||
Inventory.Amount 20;
|
||||
Inventory.MaxAmount 100;
|
||||
}
|
||||
}
|
||||
|
|
@ -30,7 +30,7 @@ Class RefresherHealth : Health
|
|||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 500;
|
||||
Inventory.Amount 200;
|
||||
Inventory.MaxAmount 500;
|
||||
}
|
||||
override bool TryPickup( in out Actor other )
|
||||
|
|
@ -53,7 +53,7 @@ Class RefresherRegen : Powerup
|
|||
{
|
||||
Inventory.Icon "graphics/HUD/Icons/I_Refresher.png";
|
||||
Powerup.Duration -60;
|
||||
Powerup.Strength 5;
|
||||
Powerup.Strength 10;
|
||||
}
|
||||
|
||||
override void EndEffect()
|
||||
|
|
@ -65,7 +65,7 @@ Class RefresherRegen : Powerup
|
|||
override void DoEffect()
|
||||
{
|
||||
Super.DoEffect();
|
||||
if ( Owner && (Owner.health > 0) && !(EffectTics%70) )
|
||||
if ( Owner && (Owner.health > 0) && !(EffectTics%175) )
|
||||
{
|
||||
if ( Owner.GiveBody(int(Strength),500) )
|
||||
{
|
||||
|
|
@ -88,7 +88,7 @@ Class HealthNuggetItem : SWWMHealth
|
|||
Default
|
||||
{
|
||||
Tag "$T_NUGGETH";
|
||||
Stamina 1200;
|
||||
Stamina 200;
|
||||
Inventory.Icon "graphics/HUD/Icons/I_HealthNugget.png";
|
||||
Inventory.PickupMessage "$T_NUGGETH";
|
||||
Inventory.MaxAmount 20;
|
||||
|
|
|
|||
|
|
@ -1312,6 +1312,12 @@ Class SWWMWeapon : Weapon abstract
|
|||
if ( (AmmoGive2 <= 0) && (default.AmmoGive2 > 0) )
|
||||
AmmoGive2 = 1;
|
||||
}
|
||||
override bool SpecialDropAction( Actor dropper )
|
||||
{
|
||||
if ( swwm_enemydrops ) return false;
|
||||
// no weapon drops from enemies
|
||||
return true;
|
||||
}
|
||||
override Inventory CreateTossable( int amt )
|
||||
{
|
||||
// disallow dropping if weapon isn't ready for switching
|
||||
|
|
|
|||
|
|
@ -640,6 +640,7 @@ Class Demolitionist : PlayerPawn
|
|||
dir = dir/spd;
|
||||
Vector3 viewdir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
||||
// look for things we could potentially bump into
|
||||
// TODO check for wall/ceiling collision
|
||||
let bi = BlockThingsIterator.Create(self,500);
|
||||
bool bumped = false;
|
||||
bool raging = FindInventory("RagekitPower");
|
||||
|
|
@ -1385,13 +1386,13 @@ Class Demolitionist : PlayerPawn
|
|||
override bool OnGiveSecret( bool printmsg, bool playsound )
|
||||
{
|
||||
if ( !player ) return false;
|
||||
int score = 500;
|
||||
int score = 100;
|
||||
// last secret (this is called before counting it up, so have to subtract)
|
||||
let hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
||||
if ( (level.found_secrets == level.total_secrets-1) && (!hnd || !hnd.allsecrets) )
|
||||
{
|
||||
if ( hnd ) hnd.allsecrets = true;
|
||||
score = 5000;
|
||||
score = 1000;
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTSECRET"),player.GetUserName(),score);
|
||||
}
|
||||
else Console.Printf(StringTable.Localize("$SWWM_FINDSECRET"),player.GetUserName(),score);
|
||||
|
|
@ -1411,10 +1412,10 @@ Class Demolitionist : PlayerPawn
|
|||
if ( (item is 'Key') && !key_reentrant && !deathmatch )
|
||||
{
|
||||
// score
|
||||
int score = 250;
|
||||
int score = 100;
|
||||
Console.Printf(StringTable.Localize("$SWWM_FINDKEY"),player.GetUserName(),item.GetTag(),score);
|
||||
SWWMCredits.Give(player,score);
|
||||
SWWMScoreObj.Spawn(250,Vec3Offset(0,0,Height/2));
|
||||
SWWMScoreObj.Spawn(100,Vec3Offset(0,0,Height/2));
|
||||
if ( !swwm_sharekeys ) return;
|
||||
// share all keys in mp
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ Class GrilledCheeseSandwich : Inventory
|
|||
SWWMLoreLibrary.Add(other.player,"GCSandwich");
|
||||
return Super.CreateCopy(other);
|
||||
}
|
||||
private void DoTheThing()
|
||||
void DoTheThing( bool extrasafe = false )
|
||||
{
|
||||
SWWMHandler.DoFlash(Owner,Color(64,255,255,64),10);
|
||||
Owner.A_QuakeEx(9,9,9,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:1.);
|
||||
|
|
@ -52,6 +52,10 @@ Class GrilledCheeseSandwich : Inventory
|
|||
SWWMLoreLibrary.Add(Owner.player,"Nugget");
|
||||
SWWMLoreLibrary.Add(Owner.player,"BlastSuit");
|
||||
SWWMLoreLibrary.Add(Owner.player,"WarArmor");
|
||||
if ( !extrasafe ) return;
|
||||
let s = Owner.FindInventory("GrilledCheeseSafeguard");
|
||||
if ( !s ) Owner.GiveInventory("GrilledCheeseSafeguard",1);
|
||||
else Powerup(s).EffectTics = Powerup(s).default.EffectTics;
|
||||
}
|
||||
override bool Use( bool pickup )
|
||||
{
|
||||
|
|
@ -80,10 +84,7 @@ Class GrilledCheeseSandwich : Inventory
|
|||
{
|
||||
newdamage = 0;
|
||||
if ( (Owner.player == players[consoleplayer]) || bBigPowerup ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA);
|
||||
DoTheThing();
|
||||
let s = Owner.FindInventory("GrilledCheeseSafeguard");
|
||||
if ( !s ) Owner.GiveInventory("GrilledCheeseSafeguard",1);
|
||||
else Powerup(s).EffectTics = Powerup(s).default.EffectTics;
|
||||
DoTheThing(true);
|
||||
Amount--;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2115,32 +2115,37 @@ Class Sparkster : SWWMWeapon
|
|||
XZW4 Y 12;
|
||||
XZW4 Y 1 A_FireSpark(0);
|
||||
XZW2 NOPQ 2;
|
||||
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK))||(invoker.ClipCount<=0),"Vent");
|
||||
XZW4 Y 3;
|
||||
XZW4 Y 0
|
||||
{
|
||||
if ( player.cmd.buttons&BT_ALTATTACK )
|
||||
return ResolveState("AltFire")+3;
|
||||
return ResolveState("Fire")+3;
|
||||
}
|
||||
Goto Ready;
|
||||
Goto PreVent;
|
||||
AltFire:
|
||||
XZW2 A 0 A_JumpIf(invoker.ClipCount<=0,"Reload");
|
||||
XZW2 A 1 A_StartSound("biospark/prefire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW4 Z 12;
|
||||
XZW4 Z 1 A_FireSpark(1);
|
||||
XZW2 RSTU 2;
|
||||
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK))||(invoker.ClipCount<=0),"Vent");
|
||||
XZW4 Y 3;
|
||||
XZW4 Y 0
|
||||
Goto PreVent;
|
||||
PreVent:
|
||||
XZW2 AAAAAAAA 1
|
||||
{
|
||||
if ( player.cmd.buttons&BT_ATTACK )
|
||||
return ResolveState("Fire")+3;
|
||||
return ResolveState("AltFire")+3;
|
||||
if ( invoker.ClipCount > 0 )
|
||||
{
|
||||
if ( player.cmd.buttons&BT_ATTACK )
|
||||
return ResolveState("Refire");
|
||||
if ( player.cmd.buttons&BT_ALTATTACK )
|
||||
return ResolveState("AltRefire");
|
||||
}
|
||||
return ResolveState(null);
|
||||
}
|
||||
Goto Ready;
|
||||
Goto Vent;
|
||||
Refire:
|
||||
XZW2 A 1;
|
||||
XZW4 Y 3;
|
||||
Goto Fire+3;
|
||||
AltRefire:
|
||||
XZW2 A 1;
|
||||
XZW4 Y 3;
|
||||
Goto AltFire+3;
|
||||
Vent:
|
||||
XZW2 A 12
|
||||
XZW2 A 8
|
||||
{
|
||||
A_Overlay(PSP_WEAPON+2,"VentFlash");
|
||||
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue