Various changes:

- Implemented FCB ammo type for Silver Bullet JET.
- Partially implemented mag management system (spare bullet saving).
- Finally started working on the Ynykron altfire.
- Doubled the Hammerspace embiggening limit (now 16x).
- Finally adjusted the dropped mags/casings so they don't clip through the floor.
- Prevent wall busting from breaking the Icon of Sin face.
- Biospark Carbine can't be partially reloaded now.
- Boosted Candygun damage.
This commit is contained in:
Mari the Deer 2020-08-06 20:21:32 +02:00
commit 9024175f53
59 changed files with 1520 additions and 176 deletions

View file

@ -253,16 +253,18 @@ their small size.
### Silver Bullet JET (slot 8), replaces Plasma Rifle, Hellstaff, Quietus (hilt)
A lighter (43kg), higher caliber (1.150 XSB) variant of the original Silver
A lighter (43kg), higher caliber (1.150) variant of the original Silver
Bullet, with built-in recoil compensation. A joint project of Blackmann Arms
and Forx Industries. This thing kills almost everything in one shot, provided
you can aim straight.
Primary fire shoots, duh. A second press chambers another round.
Secondary fire uses the scope. Can be held to go up to 16x.
Secondary fire picks the ammo for the next reload.
Reload reloads (what else is new).
Reload reloads (what else is new) or switches ammo types.
Zoom uses the scope. Can be held to go up to 16x.
This weapon is generally not recommended for human use outside of power armor.
Good thing you're not a human, then. Still, the recoil compensator jet engines
@ -272,9 +274,22 @@ careful.
### 1.150 XSB Bullets, replaces Cells, Runes
The 1.150 caliber eXplosive Super Burst bullets employ an explodium microcharge
to be shot with enough energy to reach a relatively high velocity. They are
hard to come by, so spawns are scarce, and they won't even pop up in
Hammerspace Embiggeners, only on higher tier Fabricators.
to be shot with enough energy to reach a relatively high velocity, allowing
their massive bulk to penetrate several targets including walls. They are hard
to come by, so spawns are scarce, and they won't even pop up in Hammerspace
Embiggeners, only on higher tier Fabricators.
In the world, they may pop up as spare bullets or full mags. Each five bullets
picked up will be automatically converted to a full mag in your inventory.
### 1.150 FCB Bullets, replaces Cells, Runes
The more directly explosive counterpart of the XSB. Personally baptized by
Hermann E. Ischer himself as "Fat Chode Bombs", these High-Explosive Squash
Head rounds will blast through walls on impact, hitting anything standing
behind them, and in some cases, tearing down the wall itself too.
Same spawn conditions as the standard bullets.
### Candy Gun (slot 9), replaces BFG9000, Firemace, Bloodscourge (stub)
@ -293,6 +308,15 @@ Holding primary fire during the first few moments of altfire will throws the
weapon away, armed and ready to explode if it hits anyone or anything. The
blast area for this is pretty ridiculous. You can hold spare guns, by the way.
### Candy Gun Bullets, replaces Cells, Runes
The ammo for this beast. Mags don't pop up on embiggeners, only on the highest
tier fabricator.
In the world, you may find either spare bullets or full mags. Each seven
bullets picked up will be automatically converted to a full mag in your
inventory.
### Ynykron Artifact (slot 0), replaces BFG9000, Firemace, Wraithverge (arc)
Popularly known as the "Death Cannon". One of the four ultimate weapons
@ -433,7 +457,7 @@ You're fucking invincible for a total of 30 seconds.
### Hammerspace Embiggener, replaces Backpack, Bag of Holding, Porkalator, Dragonskin Bracers
Each of these you pick up increase ammo capacity by half of its base value, up
to 5x, and also give you some extra ammo like a normal backpack.
to 16x, and also give you some extra ammo like a normal backpack.
### Universal Ammo Fabricator, replaces Mana / Krater of Might in Hexen

View file

@ -6,8 +6,7 @@ Not so fundamental things during beta:
- Item detection button (highlights nearby, visible items)
- Dual wielding Explodium Gun
- Quick grenade function (Explodium Mag)
- Mag refilling system (no more wasted ammo)
- 1.150 FCB alternate ammo for Silver Bullet
- Allow loading partial mags from spare bullets
- Parrying for hitscan weapons (currently parrying only handles vanilla LineAttack)
- Fun options
- Omnibusting (all weapons can bust walls)

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 835 B

After

Width:  |  Height:  |  Size: 344 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 B

After

Width:  |  Height:  |  Size: 138 B

Before After
Before After

View file

@ -51,7 +51,11 @@ T_HELLBURNINATORMAG = "Hellblazer Ravager Mag";
T_HELLNUKEMAG = "Hellblazer Warhead Mag";
T_SPARKUNIT = "Biospark Unit";
T_XSBMAG = "1.150 XSB Magazine";
T_FCBMAG = "1.150 FCB Magazine";
T_XSBBULLET = "1.150 XSB Bullet";
T_FCBBULLET = "1.150 FCB Bullet";
T_CANDYMAG = "Candy Gun Magazine";
T_CANDYBULLET = "Candy Gun Bullet";
T_CANDYSPARE = "Candy Gun Spare";
T_YNYKRONAMMO = "Crystal Box";
T_BLASTSUIT = "Blast Suit";
@ -605,6 +609,7 @@ O_EVISCERATOR = "%o was eviscerated by %k.";
O_HELLBLAZER = "%k blasted %o into burning bits.";
O_SPARKSTER = "%o got sparked hard by %k.";
O_SILVERBULLET = "%o could not ignore the girth of %k's bullets.";
O_SILVERBULLET2 = "%o was blasted by %k's girthy bullets.";
O_CANDYGUN = "%k made %o taste the sweetness (and death).";
O_YNYKRON = "%o was instantly removed by %k.";
O_YNYKRONALT = "%o was spaghettified by %k.";

View file

@ -22,7 +22,7 @@ SWWM_LORETXT_MAIDBOT = "\cxFull Name:\c-\n\cf Maidbot \"Meido\" Miyamoto\c-\n\cf
SWWM_LORETAG_SPARKSTER = "Biospark Carbine";
SWWM_LORETAB_SPARKSTER = "Item";
SWWM_LOREREL_SPARKSTER = "DecadeMech;EngineTech;Saya";
SWWM_LORETXT_SPARKSTER = "\cxDesignation:\c-\n\cf Model S-5 Biospark Carbine\c-\n\cxManufacturer:\c-\n\cf Decade Mechanics\c-\n\cxClassification:\c-\n\cf Ancient Alien Energy Weapon\c-\n\nThe \cfBiospark Carbine\c-, also known by its nickname of \cf\"Sparkster\"\c-, was the flagship weapon of \cfDecade Mechanics\c-, back when it was still active. It is described as being powered by \"sentient lightning\", although it does not show any signs of being truly electric in nature.\n\nBlueprints were found for all models from the S-1 to S-6 (the latter being in early prototyping stages, and not yet functional), but it proved impossible to truly recreate them. Fortunately, over 30,000 ready-made S-5 units were stockpiled deeply inside the ruined facility in \cfSunkaeze\c-, all ready for use. Currently, \cfTach-Engine Technologies\c- and its associated partners manage the distribution of these units, and are also studying the weapons in detail for potential redesigns and enhancements.\n\nOne notable detail about the Biospark Carbine is how its \"sentient\" energy drives shot projectiles to seek nearby targets, somehow telling apart friend from foe, relative to the weapon's user. Arcs of lightning have a tendency to spread out from them, dealing additional damage.\n\n\cfPrimary Fire:\c- Small blobs of stabilised energy with slight target-seeking abilities. Leave a trail of arcs that gravitate towards them as they move, then spread out on impact, homing on hostile targets.\n\n\cfSecondary Fire:\c- Concentrated, penetrating beam shot. Also has some slight seeking.\n\n\cfTertiary Fire:\c- If the loaded charge is at least at 50%, the containment capsule inside will be ejected through the main barrel and detonated as a massive sphere of pure energy that tracks down nearby targets. The weapon must be reloaded afterwards.\n\n\cfReload:\c- Reloads, obviously.\n\n\cfTechniques:\c- If the secondary beam comes in contact with an energy blob it will be detonated with increased damage and range. This requires precise timing and aim to be truly effective.\n\n\cxSaya's Notes:\c-\n\cfFunny how these rusty-ass things somehow still work. And holy fuck do they work well, too...\c-\n\n\cfI'm also surprised that that nickname caught on. Most people nowadays probably won't even get the reference at all.\c-";
SWWM_LORETXT_SPARKSTER = "\cxDesignation:\c-\n\cf Model S-5 Biospark Carbine\c-\n\cxManufacturer:\c-\n\cf Decade Mechanics\c-\n\cxClassification:\c-\n\cf Ancient Alien Energy Weapon\c-\n\nThe \cfBiospark Carbine\c-, also known by its nickname of \cf\"Sparkster\"\c-, was the flagship weapon of \cfDecade Mechanics\c-, back when it was still active. It is described as being powered by \"sentient lightning\", although it does not show any signs of being truly electric in nature.\n\nBlueprints were found for all models from the S-1 to S-6 (the latter being in early prototyping stages, and not yet functional), but it proved impossible to truly recreate them. Fortunately, over 30,000 ready-made S-5 units were stockpiled deeply inside the ruined facility in \cfSunkaeze\c-, all ready for use. Currently, \cfTach-Engine Technologies\c- and its associated partners manage the distribution of these units, and are also studying the weapons in detail for potential redesigns and enhancements.\n\nOne notable detail about the Biospark Carbine is how its \"sentient\" energy drives shot projectiles to seek nearby targets, somehow telling apart friend from foe, relative to the weapon's user. Arcs of lightning have a tendency to spread out from them, dealing additional damage.\n\n\cfPrimary Fire:\c- Small blobs of stabilised energy with slight target-seeking abilities. Leave a trail of arcs that gravitate towards them as they move, then spread out on impact, homing on hostile targets.\n\n\cfSecondary Fire:\c- Concentrated, penetrating beam shot. Also has some slight seeking.\n\n\cfTertiary Fire:\c- If the loaded charge is at least at 50%, the containment capsule inside will be ejected through the main barrel and detonated as a massive sphere of pure energy that tracks down nearby targets. The weapon must be reloaded afterwards.\n\n\cfReload:\c- Reloads, obviously. Do note that the loaded charge has to be depleted completely before it can be removed.\n\n\cfTechniques:\c- If the secondary beam comes in contact with an energy blob it will be detonated with increased damage and range. This requires precise timing and aim to be truly effective.\n\n\cxSaya's Notes:\c-\n\cfFunny how these rusty-ass things somehow still work. And holy fuck do they work well, too...\c-\n\n\cfI'm also surprised that that nickname caught on. Most people nowadays probably won't even get the reference at all.\c-";
SWWM_LORETAG_KNOWLEDGEBASE = "Library";
SWWM_LORETAB_KNOWLEDGEBASE = "Item";
SWWM_LOREREL_KNOWLEDGEBASE = "Demolitionist;AkariLabs;Taro;Saya";
@ -102,7 +102,7 @@ SWWM_LORETXT_YNYKRON2 = "\cxDesignation:\c-\n\cf Ynykron Artifact\c-\n\cxManufac
SWWM_LORETAG_SILVERBULLET = "Silver Bullet JET";
SWWM_LORETAB_SILVERBULLET = "Item";
SWWM_LOREREL_SILVERBULLET = "Blackmann;Forx;Explodium";
SWWM_LORETXT_SILVERBULLET = "\cxDesignation:\c-\n\cf Silver Bullet JET\c-\n\cxManufacturer:\c-\n\cf Blackmann Arms Ltd.\c-\n\cf Forx Aeronautics\c-\n\cxClassification:\c-\n\cf Ultra-High Caliber Sniper Rifle\c-\n\nThe \cfSilver Bullet JET\c- is the 1.150 member of the \cfSilver Bullet\c- series of ultra-high caliber rifles manufactured by \cfBlackmann Arms\c-. It was created as a lighter, more \"reasonable\" alternative to the 1.350 \cfBehemoth\c- model. Weighing 43 kilograms and sporting a total length of 2.4 meters, it is sufficiently compact for non-augmented human use.\n\nThe main ammunition designed for this specific model is the 1.150 \cfXSB (eXplosive Super Burst)\c-. These beastly rounds are partially based on a NATO standard 30x113mm cartridge, and employ a low density \cfExplodium\c- shaped charge as propellant, allowing high velocity while still being safe for use. The bullets themselves are composed of a tungsten carbide core, snugly wrapped in an aluminum jacket, and decorated with a thin silver plating for aesthetic appearance (Silver Bullets are, indeed, NOT really made of silver).\n\nIn order to compensate for its massive recoil, the weapon redirects a part of the gasses from round ignition into a set of jet compensators designed by \cfForx Aeronautics\c-. Although partially cooled in the process, it is still hot enough to cause some damage to users not wearing adequate protection.\n\n\cfPrimary Fire:\c- Shoot the bullet. Any small targets hit by it are pretty much turned to paste. In addition, there's the potential for it to penetrate several targets in a row before eventually stopping, depending on their size. A second press after firing will chamber another round.\n\n\cfSecondary Fire:\c- Custom-tailored adjustable telescopic sight, up to 16x. Equipped with a soft foam covering to protect the user's face during scoped fire.\n\n\cfReloading:\c- Reloads the weapon. Each magazine holds 5 rounds. An extra round can also be kept chambered.\n\n\cxSaya's Notes:\c-\n\cfWhat was that quote again, \"there is no kill like overkill\"? Yeah, sounds about right for this thing.\c-\n\n\cfThe fuck are you even supposed to hunt with it, wild tanks? I suppose... bigass beefy demons could also count, but you're going to just turn them all to fucking paste.\c-";
SWWM_LORETXT_SILVERBULLET = "\cxDesignation:\c-\n\cf Silver Bullet JET\c-\n\cxManufacturer:\c-\n\cf Blackmann Arms Ltd.\c-\n\cf Forx Aeronautics\c-\n\cxClassification:\c-\n\cf Ultra-High Caliber Sniper Rifle\c-\n\nThe \cfSilver Bullet JET\c- is the 1.150 member of the \cfSilver Bullet\c- series of ultra-high caliber rifles manufactured by \cfBlackmann Arms\c-. It was created as a lighter, more \"reasonable\" alternative to the 1.350 \cfBehemoth\c- model. Weighing 43 kilograms and sporting a total length of 2.4 meters, it is sufficiently compact for non-augmented human use.\n\nThe main ammunition designed for this specific model is the 1.150 \cfXSB (eXplosive Super Burst)\c-. These beastly rounds are partially based on a NATO standard 30x113mm cartridge, and employ a low density \cfExplodium\c- shaped charge as propellant, allowing high velocity while still being safe for use. The bullets themselves are composed of a tungsten carbide core, snugly wrapped in an aluminum jacket, and decorated with a thin silver plating for aesthetic appearance (Silver Bullets are, indeed, NOT really made of silver). XSB rounds can penetrate several targets before eventually stopping, depending on their size, they may also do the same for thin walls.\n\nThe secondary ammunition is the 1.150 \cfFCB (Fat Chode Bomb)\c-. Personally named by the CEO of Blackmann Arms himself, FCBs are quite similar to the standard XSB ammunition, but instead the bullets are full of additional Explodium, which on impact, is released violently, propagating its deadly blast through solid surfaces. Due to the volatility of these bullets, the propellant employed is slightly less potent, which results in a diminished potential for target penetration, but the blast definitely compensates for this. The explosive charge is so powerful that it can break some walls to pieces.\n\nIn order to compensate for its massive recoil, the weapon redirects a part of the gasses from round ignition into a set of jet compensators designed by \cfForx Aeronautics\c-. Although partially cooled in the process, it is still hot enough to cause some damage to users not wearing adequate protection.\n\n\cfPrimary Fire:\c- Shoot the bullet. Any small targets hit by it are pretty much turned to paste. A second press after firing will chamber another round.\n\n\cfSecondary Fire:\c- Switches next reload between XSB and FCB ammunition, if available.\n\n\cfReloading:\c- Reloads the weapon. Each magazine holds 5 rounds. An extra round can also be kept chambered.\n\n\cfZoom:\c- Custom-tailored adjustable telescopic sight, up to 16x. Equipped with a soft foam covering to protect the user's face during scoped fire.\n\n\cxSaya's Notes:\c-\n\cfWhat was that quote again, \"there is no kill like overkill\"? Yeah, sounds about right for this thing.\c-\n\n\cfThe fuck are you even supposed to hunt with it, wild tanks? I suppose... bigass beefy demons could also count, but you're going to just turn them all to fucking paste.\c-";
SWWM_LORETAG_BIGSHOT = "Mr. BIG SHOT";
SWWM_LORETAB_BIGSHOT = "People";
SWWM_LOREREL_BIGSHOT = "Blackmann;Saya";
@ -158,7 +158,7 @@ SWWM_LORETXT_MUNCH = "\cxName:\c-\n\cf Munch Innovations\c-\n\cxClassification:\
SWWM_LORETAG_HAMMERSPACEEMBIGGENER = "Hs. Embiggener";
SWWM_LORETAB_HAMMERSPACEEMBIGGENER = "Item";
SWWM_LOREREL_HAMMERSPACEEMBIGGENER = "Cyrus;Hammerspace;Saya";
SWWM_LORETXT_HAMMERSPACEEMBIGGENER = "\cxDesignation:\c-\n\cf Hammerspace™ Embiggener\c-\n\cxManufacturer:\c-\n\cf Cyrus Enterprises\c-\n\cxClassification:\c-\n\cf Storage Expansion Contract\c-\n\nWhen \cfHammerspace™\c- containers first started being commercialized, \cfCyrus Enterprises\c- hadn't yet decided on how to handle the needs of those who might not be quite satisfied with the standard storage capacity provided to each customer. Then, one day, a \"revolutionary\" idea came forth, that of an extra \"expansion\" service, where existing customers could pay extra to gain access to additional containers, increasing their total storage. Each of these \cfHammerspace™ Embiggener\c- cards is completely unique, and only available for purchase from Cyrus Enterprises themselves. Customers can expand their storage limit up to eight times with these, which should be enough even for the needs of large armies seeking to store their weapons and ammo efficiently.\n\n\cxSaya's Notes:\c-\n\cfThe hell, is that a reference to what I think it is? This guy is an even bigger nerd than I thought... also that's not a real word, is it? ... Wait, it is? huh, so it really got accepted... ok then.\c-\n\n\cfOh yeah by the way, nerdboi says only your ammo container can be expanded with this, he was going on about something of \"backpacks\" and shit, I walked away before he began ranting for real. When he does that it's like someone scraping a chalkboard right in front of you, ugh...\c-";
SWWM_LORETXT_HAMMERSPACEEMBIGGENER = "\cxDesignation:\c-\n\cf Hammerspace™ Embiggener\c-\n\cxManufacturer:\c-\n\cf Cyrus Enterprises\c-\n\cxClassification:\c-\n\cf Storage Expansion Contract\c-\n\nWhen \cfHammerspace™\c- containers first started being commercialized, \cfCyrus Enterprises\c- hadn't yet decided on how to handle the needs of those who might not be quite satisfied with the standard storage capacity provided to each customer. Then, one day, a \"revolutionary\" idea came forth, that of an extra \"expansion\" service, where existing customers could pay extra to gain access to additional containers, increasing their total storage. Each of these \cfHammerspace™ Embiggener\c- cards is completely unique, and only available for purchase from Cyrus Enterprises themselves. Customers can expand their storage limit up to sixteen times with these, which should be enough even for the needs of large armies seeking to store their weapons and ammo efficiently.\n\n\cxSaya's Notes:\c-\n\cfThe hell, is that a reference to what I think it is? This guy is an even bigger nerd than I thought... also that's not a real word, is it? ... Wait, it is? huh, so it really got accepted... ok then.\c-\n\n\cfOh yeah by the way, nerdboi says only your ammo container can be expanded with this, he was going on about something of \"backpacks\" and shit, I walked away before he began ranting for real. When he does that it's like someone scraping a chalkboard right in front of you, ugh...\c-";
SWWM_LORETAG_BLASTSUIT = "Blast Suit";
SWWM_LORETAB_BLASTSUIT = "Item";
SWWM_LOREREL_BLASTSUIT = "Symnatek;Cyrus";

View file

@ -46,7 +46,11 @@ T_HELLBURNINATORMAG = "Cargador de Ruinadores Hellblazer";
T_HELLNUKEMAG = "Cargador de Cabezas Nucleares Hellblazer";
T_SPARKUNIT = "Unidad Biospark";
T_XSBMAG = "Cargador 1.150 XSB";
T_FCBMAG = "Cargador 1.150 FCB";
T_XSBBULLET = "Bala 1.150 XSB";
T_FCBBULLET = "Bala 1.150 FCB";
T_CANDYMAG = "Cargador de Pistola Caramelo";
T_CANDYBULLET = "Bala de Pistola Caramelo";
T_CANDYSPARE = "Repuesto de Pistola Caramelo";
T_YNYKRONAMMO = "Contenedor de Cristal";
T_BLASTSUIT = "Chaleco Antiexplosivos";
@ -575,6 +579,7 @@ O_EVISCERATOR = "%o fue descuartizad@[ao_esp] por %k.";
O_HELLBLAZER = "%k reventó a %o en cachitos humeantes.";
O_SPARKSTER = "%o fue bien chispead@[ao_esp] por %k.";
O_SILVERBULLET = "%o no pudo ignorar el grosor de las balas de %k.";
O_SILVERBULLET2 = "%o fue reventad@[ao_esp] por las gruesas balas de %k.";
O_CANDYGUN = "%k hizo probar a %o un sabor dulce (de muerte).";
O_YNYKRON = "%o fue borrad@[ao_esp] instantáneamente por %k.";
O_YNYKRONALT = "%o fue espaguetificad@[ao_esp] por %k.";

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\chSWWM \cwGZ\c- r454 (Wed 5 Aug 12:38:18 CEST 2020)";
SWWM_MODVER="\chSWWM \cwGZ\c- r455 (Thu 6 Aug 20:21:32 CEST 2020)";

View file

@ -12,7 +12,7 @@ TXT
\cxClassification:\c-
\cf Storage Expansion Contract\c-
When **Hammerspace™** containers first started being commercialized, **Cyrus Enterprises** hadn't yet decided on how to handle the needs of those who might not be quite satisfied with the standard storage capacity provided to each customer. Then, one day, a "revolutionary" idea came forth, that of an extra "expansion" service, where existing customers could pay extra to gain access to additional containers, increasing their total storage. Each of these **Hammerspace™ Embiggener** cards is completely unique, and only available for purchase from Cyrus Enterprises themselves. Customers can expand their storage limit up to eight times with these, which should be enough even for the needs of large armies seeking to store their weapons and ammo efficiently.
When **Hammerspace™** containers first started being commercialized, **Cyrus Enterprises** hadn't yet decided on how to handle the needs of those who might not be quite satisfied with the standard storage capacity provided to each customer. Then, one day, a "revolutionary" idea came forth, that of an extra "expansion" service, where existing customers could pay extra to gain access to additional containers, increasing their total storage. Each of these **Hammerspace™ Embiggener** cards is completely unique, and only available for purchase from Cyrus Enterprises themselves. Customers can expand their storage limit up to sixteen times with these, which should be enough even for the needs of large armies seeking to store their weapons and ammo efficiently.
\cxSaya's Notes:\c-
\cfThe hell, is that a reference to what I think it is? This guy is an even bigger nerd than I thought... also that's not a real word, is it? ... Wait, it is? huh, so it really got accepted... ok then.\c-

View file

@ -15,16 +15,20 @@ TXT
The **Silver Bullet JET** is the 1.150 member of the **Silver Bullet** series of ultra-high caliber rifles manufactured by **Blackmann Arms**. It was created as a lighter, more "reasonable" alternative to the 1.350 **Behemoth** model. Weighing 43 kilograms and sporting a total length of 2.4 meters, it is sufficiently compact for non-augmented human use.
The main ammunition designed for this specific model is the 1.150 **XSB (eXplosive Super Burst)**. These beastly rounds are partially based on a NATO standard 30x113mm cartridge, and employ a low density **Explodium** shaped charge as propellant, allowing high velocity while still being safe for use. The bullets themselves are composed of a tungsten carbide core, snugly wrapped in an aluminum jacket, and decorated with a thin silver plating for aesthetic appearance (Silver Bullets are, indeed, NOT really made of silver).
The main ammunition designed for this specific model is the 1.150 **XSB (eXplosive Super Burst)**. These beastly rounds are partially based on a NATO standard 30x113mm cartridge, and employ a low density **Explodium** shaped charge as propellant, allowing high velocity while still being safe for use. The bullets themselves are composed of a tungsten carbide core, snugly wrapped in an aluminum jacket, and decorated with a thin silver plating for aesthetic appearance (Silver Bullets are, indeed, NOT really made of silver). XSB rounds can penetrate several targets before eventually stopping, depending on their size, they may also do the same for thin walls.
The secondary ammunition is the 1.150 **FCB (Fat Chode Bomb)**. Personally named by the CEO of Blackmann Arms himself, FCBs are quite similar to the standard XSB ammunition, but instead the bullets are full of additional Explodium, which on impact, is released violently, propagating its deadly blast through solid surfaces. Due to the volatility of these bullets, the propellant employed is slightly less potent, which results in a diminished potential for target penetration, but the blast definitely compensates for this. The explosive charge is so powerful that it can break some walls to pieces.
In order to compensate for its massive recoil, the weapon redirects a part of the gasses from round ignition into a set of jet compensators designed by **Forx Aeronautics**. Although partially cooled in the process, it is still hot enough to cause some damage to users not wearing adequate protection.
\cfPrimary Fire:\c- Shoot the bullet. Any small targets hit by it are pretty much turned to paste. In addition, there's the potential for it to penetrate several targets in a row before eventually stopping, depending on their size. A second press after firing will chamber another round.
\cfPrimary Fire:\c- Shoot the bullet. Any small targets hit by it are pretty much turned to paste. A second press after firing will chamber another round.
\cfSecondary Fire:\c- Custom-tailored adjustable telescopic sight, up to 16x. Equipped with a soft foam covering to protect the user's face during scoped fire.
\cfSecondary Fire:\c- Switches next reload between XSB and FCB ammunition, if available.
\cfReloading:\c- Reloads the weapon. Each magazine holds 5 rounds. An extra round can also be kept chambered.
\cfZoom:\c- Custom-tailored adjustable telescopic sight, up to 16x. Equipped with a soft foam covering to protect the user's face during scoped fire.
\cxSaya's Notes:\c-
\cfWhat was that quote again, "there is no kill like overkill"? Yeah, sounds about right for this thing.\c-

View file

@ -24,7 +24,7 @@ One notable detail about the Biospark Carbine is how its "sentient" energy drive
\cfTertiary Fire:\c- If the loaded charge is at least at 50%, the containment capsule inside will be ejected through the main barrel and detonated as a massive sphere of pure energy that tracks down nearby targets. The weapon must be reloaded afterwards.
\cfReload:\c- Reloads, obviously.
\cfReload:\c- Reloads, obviously. Do note that the loaded charge has to be depleted completely before it can be removed.
\cfTechniques:\c- If the secondary beam comes in contact with an energy blob it will be detonated with increased damage and range. This requires precise timing and aim to be truly effective.

View file

@ -8,7 +8,7 @@ TXT
\cxClasificación:\c-
\cf Contrato de Expansión de Almacenamiento\c-
Cuando los contenedores de **Hammerspace™** fueron inicialmente comercializados, **Cyrus Enterprises** aun no había decidido como manejar las necesitades de aquellos que no estuvieran satisfechos con la capacidad de almacenamiento estándar para cada cliente. Entonces, un día, una idea "revolucionaria" vino, la de un servicio extra de "expansión", por el cual clientes existentes pueden pagar un precio extra para obtener acceso a contenedores adicionales, incrementando su capacidad de almacenamiento total. Cada una de estas tarjetas de **Ensanchecedor de Hammerspace™** es completamente única, y sólo disponible para su compra desde Cyrus Enterprises. Los clientes pueden expandir su límite de almacenamiento hasta ocho veces con éstas, lo cual será suficiente incluso para los requisitos de grandes ejércitos que buscan almacenar eficientemente sus armas y munición.
Cuando los contenedores de **Hammerspace™** fueron inicialmente comercializados, **Cyrus Enterprises** aun no había decidido como manejar las necesitades de aquellos que no estuvieran satisfechos con la capacidad de almacenamiento estándar para cada cliente. Entonces, un día, una idea "revolucionaria" vino, la de un servicio extra de "expansión", por el cual clientes existentes pueden pagar un precio extra para obtener acceso a contenedores adicionales, incrementando su capacidad de almacenamiento total. Cada una de estas tarjetas de **Ensanchecedor de Hammerspace™** es completamente única, y sólo disponible para su compra desde Cyrus Enterprises. Los clientes pueden expandir su límite de almacenamiento hasta dieciseis veces con éstas, lo cual será suficiente incluso para los requisitos de grandes ejércitos que buscan almacenar eficientemente sus armas y munición.
\cxNotas de Saya:\c-
\cfQué hostias, ¿eso es una referencia a lo que creo que es? Este tío es más friki de lo que pensaba... aparte de que eso no es una palabra de verdad, ¿o no? ... Espera, ¿lo es? Vaya, así que sí la aceptaron... pues vale.\c-

View file

@ -9,16 +9,20 @@ TXT
El **Silver Bullet JET** es el miembro de calibre 1.150 de la serie **Silver Bullet** de rifles de calibre ultra-alto fabricados por **Blackmann Arms**. Fue creado como una alternativa ligera y más "razonable" del modelo **Behemoth** de calibre 1.350. Pesando 43 kilos y con una longitud total de 2.4 metros, es suficientemente compacto para el uso por humanos no mejorados.
La munición diseñada principalmente para este modelo son las balas **XSB (eXplosive Super Burst)** del calibre 1.150. Estas bestiales balas están basadas parcialmente en los cartuchos estándar de 30x113mm de la OTAN, y emplean una carga de baja densidad de **Explódium** como propulsor, permitiendo una alta velocidad siendo a la vez seguro de usar. Las balas en sí están compuestas de un núcleo de carburo de tungsteno, con una envoltura de aluminio, y decorado con una capa fina de plata para una apariencia más estética (estas Balas de Plata, ciertamente, NO están hechas de plata).
La munición diseñada principalmente para este modelo son las balas **XSB (eXplosive Super Burst)** del calibre 1.150. Estas bestiales balas están basadas parcialmente en los cartuchos estándar de 30x113mm de la OTAN, y emplean una carga de baja densidad de **Explódium** como propulsor, permitiendo una alta velocidad siendo a la vez seguro de usar. Las balas en sí están compuestas de un núcleo de carburo de tungsteno, con una envoltura de aluminio, y decorado con una capa fina de plata para una apariencia más estética (estas Balas de Plata, ciertamente, NO están hechas de plata). Las balas XSB pueden penetrar varios objetivos antes de detenerse, dependiendo de su tamaño, pueden incluso hacer lo mismo con paredes ligeras.
La munición secundaria son las balas **FCB (Fat Chode Bomb)** también de calibre 1.150. Llamadas así por el propio CEO de Blackmann Arms, las FCB son bastante similares a la munición XSB estándar, con la diferencia de que estas balas están llenas de Explodium, el cual, al impactar, es liberado violentamente, propagando su estallido mortífero a través de superficies sólidas. Dada la volatilidad de estas balas, el propulsor empleado es ligeramente menos potente, lo cual resulta en un disminuído potencial de penetración de objetivos, pero la explosión definitivamente lo compensa. La carga explosiva es tan potente que puede derribar completamente algunas paredes.
Para poder compensar su masivo retroceso, el arma redirige una parte de los gases de ignición hasta un grupo de jets compensadores diseñados por **Aeronáutica Forx**. Aunque son parcialmente refrigerados en el proceso, son aun lo suficientemente cálidos para causar ligero daño a usuarios que no lleven la protección adecuada.
\cfFuego Primario:\c- Dispara la bala. Cualquier objetivo alcanzado por ella queda hecho papilla. Adicionalmente, es posible que la bala penetre otros objetivos durante su trayecto hasta parar finalmente, dependiendo de su tamaño. Un segundo pulsado tras disparar cargará otra bala.
\cfFuego Primario:\c- Dispara la bala. Cualquier objetivo alcanzado por ella queda hecho papilla. Un segundo pulsado tras disparar cargará otra bala.
\cfFuego Secundario:\c- Mira telescópica hecha a medida, hasta 16 aumentos. Equipada con una cubierta de espuma suave para proteger la cara del usuario durante el disparo con mira.
\cfFuego Secundario:\c- Alterna entre balas XSB y FCB para la siguiente recarga, si están disponibles.
\cfRecarga:\c- Recarga el arma. Cada cargador tiene 5 balas. Se puede mantener también una bala extra en la recámara.
\cfZoom:\c- Mira telescópica hecha a medida, hasta 16 aumentos. Equipada con una cubierta de espuma suave para proteger la cara del usuario durante el disparo con mira.
\cxNotas de Saya:\c-
\cfComo era la frase esa, ¿"no hay kill como un overkill"? Ya, pues queda perfecta para la cosa esta.\c-

View file

@ -20,7 +20,7 @@ Un detalle notable sobre la Carabina Biospark es como su energía "consciente" l
\cfFuego Terciario:\c- Si la carga actual es de al menos un 50%, la cápsula de contención será expulsada por el cañón principal y detonará liberando una esfera masiva de energía pura que busca objetivos cercanos. El arma debe ser recargada después.
\cfRecarga:\c- Recarga, obviamente.
\cfRecarga:\c- Recarga, obviamente. Ten encuenta que la carga actual debe estar completamente vacía antes de poder ser extraída.
\cfTécnicas:\c- Si el rayo secundario entra en contacto con una bola de energía hará que detone con un daño y rango mayores. Esto requiere una puntería y tiempo precisos para ser realmente efectivo.

View file

@ -516,6 +516,45 @@ Model "SilverBulletAmmo"
FrameIndex XZW1 A 0 0
}
Model "SilverBulletAmmo2"
{
Path "models"
Model 0 "SilverbulletMag_d.3d"
Skin 0 "SilverbulletAmmo_FCB.png"
Scale 0.25 0.25 0.25
PitchOffset 30
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SilverBullets"
{
Path "models"
Model 0 "SilverbulletBullet_d.3d"
Skin 0 "SilverbulletBullet.png"
Scale 0.05 0.05 0.05
PitchOffset 30
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "SilverBullets2"
{
Path "models"
Model 0 "SilverbulletBullet_FCB_d.3d"
Skin 0 "SilverbulletBullet_FCB.png"
Scale 0.05 0.05 0.05
PitchOffset 30
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "CandyGunAmmo"
{
@ -530,6 +569,20 @@ Model "CandyGunAmmo"
FrameIndex XZW1 A 0 0
}
Model "CandyGunBullets"
{
Path "models"
Model 0 "ExplodiumBullet_d.3d"
SurfaceSkin 0 0 "BooletCandy.png"
SurfaceSkin 0 1 "CandyCasing_Boolet.png"
Scale 0.02 0.02 0.02
PitchOffset 30
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "YnykronAmmo"
{

View file

@ -21,23 +21,14 @@ Model "CandyMag"
USEACTORPITCH
USEACTORROLL
Skin 0 "CandyGun.png"
FrameIndex XZW1 A 0 0
}
Model "CandyMagEmpty"
{
Path "models"
Model 0 "ExplodiumMag_d.3d"
Scale 0.03 0.03 0.03
USEACTORPITCH
USEACTORROLL
Skin 0 "CandyGun_EmptyMag.png"
FrameIndex XZW1 A 0 0
RollOffset 90
ZOffset 1
FrameIndex XZW1 B 0 0
RollOffset -90
FrameIndex XZW1 C 0 0
}
Model "CandyMagProj"
{
Path "models"

View file

@ -9,6 +9,11 @@ Model "EvisceratorCasing"
USEACTORROLL
FrameIndex XZW1 A 0 0
PitchOffset 90
ZOffset 2
FrameIndex XZW1 B 0 0
PitchOffset -90
FrameIndex XZW1 C 0 0
}
Model "EvisceratorProj"

View file

@ -21,21 +21,13 @@ Model "ExplodiumMag"
USEACTORPITCH
USEACTORROLL
Skin 0 "ExplodiumGun.png"
FrameIndex XZW1 A 0 0
}
Model "ExplodiumMagEmpty"
{
Path "models"
Model 0 "ExplodiumMag_d.3d"
Scale 0.03 0.03 0.03
USEACTORPITCH
USEACTORROLL
Skin 0 "ExplodiumGun_EmptyMag.png"
FrameIndex XZW1 A 0 0
RollOffset 90
ZOffset 1
FrameIndex XZW1 B 0 0
RollOffset -90
FrameIndex XZW1 C 0 0
}
Model "ExplodiumMagProj"

View file

@ -12,19 +12,21 @@ Model "SilverBulletCasing"
FrameIndex XZW1 A 0 0
}
Model "SilverBulletMag"
Model "SilverBulletCasing2"
{
Path "models"
Model 0 "SilverbulletMag_d.3d"
Skin 0 "SilverbulletAmmo.png"
Scale 0.2 0.2 0.2
Model 0 "SilverbulletCase_FCB_d.3d"
Skin 0 "SilverbulletBullet_FCB.png"
Scale 0.04 0.04 0.04
ZOffset 1
AngleOffset 90
USEACTORPITCH
USEACTORROLL
FrameIndex XZW1 A 0 0
}
Model "SilverBulletMagEmpty"
Model "SilverBulletMag"
{
Path "models"
@ -35,6 +37,28 @@ Model "SilverBulletMagEmpty"
USEACTORROLL
FrameIndex XZW1 A 0 0
RollOffset 90
ZOffset 2
FrameIndex XZW1 B 0 0
RollOffset -90
FrameIndex XZW1 C 0 0
}
Model "SilverBulletMag2"
{
Path "models"
Model 0 "SilverbulletMag_d.3d"
Skin 0 "SilverbulletAmmo_FCB_EmptyMag.png"
Scale 0.2 0.2 0.2
USEACTORPITCH
USEACTORROLL
FrameIndex XZW1 A 0 0
RollOffset 90
ZOffset 2
FrameIndex XZW1 B 0 0
RollOffset -90
FrameIndex XZW1 C 0 0
}
Model "SilverBullet"
@ -75,7 +99,7 @@ Model "SilverBullet"
Scale -0.005 0.0025 0.005
DONTCULLBACKFACES
// Casing
// Casing (XSB)
SurfaceSkin 2 5 "SilverbulletBullet.png"
FrameIndex XZW7 D 2 30
FrameIndex XZW7 E 2 31
@ -89,6 +113,20 @@ Model "SilverBullet"
FrameIndex XZW7 M 2 39
FrameIndex XZW7 N 2 40
FrameIndex XZW7 O 2 41
// Casing (FCB)
SurfaceSkin 2 5 "SilverbulletBullet_FCB.png"
FrameIndex XZWD D 2 30
FrameIndex XZWD E 2 31
FrameIndex XZWD F 2 32
FrameIndex XZWD G 2 33
FrameIndex XZWD H 2 34
FrameIndex XZWD I 2 35
FrameIndex XZWD J 2 36
FrameIndex XZWD K 2 37
FrameIndex XZWD L 2 38
FrameIndex XZWD M 2 39
FrameIndex XZWD N 2 40
FrameIndex XZWD O 2 41
// Jets
SurfaceSkin 2 5 ""
SurfaceSkin 2 6 "SilverbulletJetSmoke.png"
@ -116,6 +154,7 @@ Model "SilverBullet"
AngleOffset -90
Scale -0.005 0.0025 0.005
// EXPLOSIVE SUPER BURST
// Still / Deselect
FrameIndex XZW2 A 1 0
FrameIndex XZW2 B 1 1
@ -260,4 +299,150 @@ Model "SilverBullet"
FrameIndex XZW7 A 1 125
FrameIndex XZW7 B 1 126
FrameIndex XZW7 C 1 127
//// FAT CHODE BOMB
SurfaceSkin 1 4 "SilverbulletAmmo_FCB.png"
// Still / Deselect
FrameIndex XZW8 A 1 0
FrameIndex XZW8 B 1 1
FrameIndex XZW8 C 1 2
FrameIndex XZW8 D 1 3
FrameIndex XZW8 E 1 4
FrameIndex XZW8 F 1 5
FrameIndex XZW8 G 1 6 // Select
FrameIndex XZW8 H 1 7
FrameIndex XZW8 I 1 8
FrameIndex XZW8 J 1 9
FrameIndex XZW8 K 1 10
FrameIndex XZW8 L 1 11
FrameIndex XZW8 M 1 12
FrameIndex XZW8 N 1 13
// Fire
FrameIndex XZW8 O 1 15
FrameIndex XZW8 P 1 16
FrameIndex XZW8 Q 1 17
FrameIndex XZW8 R 1 18
FrameIndex XZW8 S 1 19
FrameIndex XZW8 T 1 20
FrameIndex XZW8 U 1 21
FrameIndex XZW8 V 1 22
FrameIndex XZW8 W 1 23
// Bolt
FrameIndex XZW8 X 1 25
FrameIndex XZW8 Y 1 26
FrameIndex XZW8 Z 1 27
FrameIndex XZW9 A 1 28
FrameIndex XZW9 B 1 29
FrameIndex XZW9 C 1 30 // StartCasing
FrameIndex XZW9 D 1 31
FrameIndex XZW9 E 1 32
FrameIndex XZW9 F 1 33
FrameIndex XZW9 G 1 34
FrameIndex XZW9 H 1 35
FrameIndex XZW9 I 1 36
FrameIndex XZW9 J 1 37
FrameIndex XZW9 K 1 38
FrameIndex XZW9 L 1 39
FrameIndex XZW9 M 1 40
FrameIndex XZW9 N 1 41 // EndCasing
FrameIndex XZW9 O 1 42
FrameIndex XZW9 P 1 43
FrameIndex XZW9 Q 1 44
FrameIndex XZW9 R 1 45
// ZoomIn
FrameIndex XZW9 S 1 47
FrameIndex XZW9 T 1 48
FrameIndex XZW9 U 1 49
FrameIndex XZW9 V 1 50
FrameIndex XZW9 W 1 51
FrameIndex XZW9 X 1 52 // ZoomStill / ZoomOut
FrameIndex XZW9 Y 1 53
FrameIndex XZW9 Z 1 54
FrameIndex XZWA A 1 55
FrameIndex XZWA B 1 56
FrameIndex XZWA C 1 57
// Unload
FrameIndex XZWA D 1 59
FrameIndex XZWA E 1 60
FrameIndex XZWA F 1 61
FrameIndex XZWA G 1 62
FrameIndex XZWA H 1 63
FrameIndex XZWA I 1 64
FrameIndex XZWA J 1 65
FrameIndex XZWA K 1 66
FrameIndex XZWA L 1 67
FrameIndex XZWA M 1 68
FrameIndex XZWA N 1 69
// UnloadEmpty
SurfaceSkin 1 4 "SilverbulletAmmo_FCB_EmptyMag.png"
FrameIndex XZWA O 1 59
FrameIndex XZWA P 1 60
FrameIndex XZWA Q 1 61
FrameIndex XZWA R 1 62
FrameIndex XZWA S 1 63
FrameIndex XZWA T 1 64
FrameIndex XZWA U 1 65
FrameIndex XZWA V 1 66
FrameIndex XZWA W 1 67
FrameIndex XZWA X 1 68
FrameIndex XZWA Y 1 69
SurfaceSkin 1 4 "SilverbulletAmmo_FCB.png"
// Load
FrameIndex XZWA Z 1 70
FrameIndex XZWB A 1 71
FrameIndex XZWB B 1 72
FrameIndex XZWB C 1 73
FrameIndex XZWB D 1 74
FrameIndex XZWB E 1 75
FrameIndex XZWB F 1 76
FrameIndex XZWB G 1 77
FrameIndex XZWB H 1 78
FrameIndex XZWB I 1 79
FrameIndex XZWB J 1 80
FrameIndex XZWB K 1 81
FrameIndex XZWB L 1 82
FrameIndex XZWB M 1 83
FrameIndex XZWB N 1 84
// Idle
FrameIndex XZWB O 1 86
FrameIndex XZWB P 1 87
FrameIndex XZWB Q 1 88
FrameIndex XZWB R 1 89
FrameIndex XZWB S 1 90
FrameIndex XZWB T 1 91
FrameIndex XZWB U 1 92
FrameIndex XZWB V 1 93
FrameIndex XZWB W 1 94
FrameIndex XZWB X 1 95
FrameIndex XZWB Y 1 96
FrameIndex XZWB Z 1 97
FrameIndex XZWC A 1 98
FrameIndex XZWC B 1 99
FrameIndex XZWC C 1 100
FrameIndex XZWC D 1 101
FrameIndex XZWC E 1 102
FrameIndex XZWC F 1 103
FrameIndex XZWC G 1 104
FrameIndex XZWC H 1 105
// Melee
FrameIndex XZWC I 1 107
FrameIndex XZWC J 1 108
FrameIndex XZWC K 1 109
FrameIndex XZWC L 1 110
FrameIndex XZWC M 1 111
FrameIndex XZWC N 1 112
FrameIndex XZWC O 1 113
FrameIndex XZWC P 1 114
FrameIndex XZWC Q 1 115
FrameIndex XZWC R 1 116
FrameIndex XZWC S 1 117
FrameIndex XZWC T 1 118
FrameIndex XZWC U 1 119
FrameIndex XZWC V 1 120
FrameIndex XZWC W 1 121
FrameIndex XZWC X 1 122
FrameIndex XZWC Y 1 123
FrameIndex XZWC Z 1 124
FrameIndex XZWD A 1 125
FrameIndex XZWD B 1 126
FrameIndex XZWD C 1 127
}

BIN
models/BooletCandy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
models/BooletExplodium.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
models/ExplodiumBullet_a.3d Normal file

Binary file not shown.

BIN
models/ExplodiumBullet_d.3d Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -739,6 +739,10 @@ silverbullet/fire1 sounds/silverbullet/silver_fire1.ogg
silverbullet/fire2 sounds/silverbullet/silver_fire2.ogg
silverbullet/fire3 sounds/silverbullet/silver_fire3.ogg
$random silverbullet/fire { silverbullet/fire1 silverbullet/fire2 silverbullet/fire3 }
silverbullet/altfire1 sounds/silverbullet/silver_altfire1.ogg
silverbullet/altfire2 sounds/silverbullet/silver_altfire2.ogg
silverbullet/altfire3 sounds/silverbullet/silver_altfire3.ogg
$random silverbullet/altfire { silverbullet/altfire1 silverbullet/altfire2 silverbullet/altfire3 }
silverbullet/jet sounds/silverbullet/silver_jet.ogg
silverbullet/casing1 sounds/silverbullet/silver_casing1.ogg
silverbullet/casing2 sounds/silverbullet/silver_casing2.ogg
@ -755,6 +759,9 @@ $random silverbullet/hit { silverbullet/hit1 silverbullet/hit2 }
silverbullet/flesh1 sounds/silverbullet/silver_hitf1.ogg
silverbullet/flesh2 sounds/silverbullet/silver_hitf2.ogg
$random silverbullet/flesh { silverbullet/flesh1 silverbullet/flesh2 }
silverbullet/chode1 sounds/silverbullet/silver_chode1.ogg
silverbullet/chode2 sounds/silverbullet/silver_chode2.ogg
$random silverbullet/chode { silverbullet/chode1 silverbullet/chode2 }
candygun/fire1 sounds/candygun/candy_fire1.ogg
candygun/fire2 sounds/candygun/candy_fire2.ogg
@ -815,6 +822,7 @@ misc/p_pkup sounds/general/ppickup.ogg
misc/i_pkup sounds/general/ipickup.ogg
misc/k_pkup sounds/general/kpickup.ogg
misc/ammo_pkup sounds/general/apickup.ogg
misc/bullet_pkup sounds/general/bpickup.ogg
misc/armor_pkup sounds/general/spickup.ogg
misc/health_pkup sounds/general/hpickup.ogg
misc/spawn sounds/CORK.ogg

BIN
sounds/general/bpickup.ogg 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.

View file

@ -160,6 +160,115 @@ Mixin Class SWWMAmmo
}
}
// Common code for individual bullets
Class MagAmmo : Inventory abstract
{
Mixin SWWMOverlapPickupSound;
Class<Ammo> ParentAmmo;
Ammo pamo;
int ClipSize;
int countdown;
Property ParentAmmo : ParentAmmo;
Property ClipSize : ClipSize;
default
{
+INVENTORY.KEEPDEPLETED;
Inventory.PickupSound "misc/bullet_pkup";
}
private Inventory DoDrop( Class<Inventory> type )
{
let copy = Inventory(Spawn(type,Owner.Pos,NO_REPLACE));
if ( !copy ) return null;
copy.DropTime = 30;
copy.bSpecial = copy.bSolid = false;
copy.SetOrigin(Owner.Vec3Offset(0,0,10.),false);
copy.Angle = Owner.Angle;
copy.VelFromAngle(5.);
copy.Vel.Z = 1.;
copy.Vel += Owner.Vel;
copy.bNoGravity = false;
copy.ClearCounters();
copy.OnDrop(Owner);
copy.vel += (RotateVector((FRandom[Junk](-1.5,.5),FRandom[Junk](-2.5,2.5)),Owner.angle),FRandom[Junk](2.,5.));
return copy;
}
override bool SpecialDropAction( Actor dropper )
{
if ( Amount != default.Amount )
{
// needed for positioning to work
Owner = dropper;
CreateTossable(Amount);
return true;
}
return false;
}
override void DoEffect()
{
Super.DoEffect();
if ( !pamo )
{
pamo = Ammo(Owner.FindInventory(ParentAmmo));
if ( !pamo )
{
pamo = Ammo(Spawn(ParentAmmo));
pamo.AttachToOwner(Owner);
pamo.Amount = 0;
}
}
// check if we can fill a mag (delayed)
if ( (Amount < ClipSize) || (pamo.Amount >= pamo.MaxAmount) )
{
countdown = 35;
return;
}
if ( countdown-- > 0 ) return;
bool given = false;
while ( (pamo.Amount < pamo.MaxAmount) && (Amount >= ClipSize) )
{
pamo.Amount++;
Amount -= ClipSize;
given = true;
if ( Owner.CheckLocalView() )
pamo.PrintPickupMessage(true,pamo.PickupMessage());
}
if ( given ) pamo.PlayPickupSound(Owner);
}
override inventory CreateTossable( int amt )
{
if ( bUndroppable || bUntossable || !Owner || (Amount <= 0) || (amt == 0) )
return null;
// cap
amt = min(amount,amt);
// perform subdivision
Inventory last = null;
let pammo = GetDefaultByType(ParentAmmo);
while ( amt > 0 )
{
// drop full mag if possible
if ( amt >= pammo.Amount )
{
last = DoDrop(ParentAmmo);
amt -= pammo.Amount;
Amount -= pammo.Amount;
continue;
}
// drop individual bullets
last = DoDrop(GetClass());
amt--;
Amount--;
}
return last;
}
}
// ============================================================================
// Spreadgun / Wallbuster ammo
// ============================================================================
@ -786,7 +895,7 @@ Class SilverBulletAmmo : Ammo
{
Tag "$T_XSBMAG";
Inventory.PickupMessage "$T_XSBMAG";
Stamina 80000;
Stamina 70000;
Inventory.Icon "graphics/HUD/Icons/A_SilverBullet.png";
Inventory.Amount 1;
Inventory.MaxAmount 3;
@ -803,6 +912,78 @@ Class SilverBulletAmmo : Ammo
}
}
Class SilverBulletAmmo2 : Ammo
{
Mixin SWWMOverlapPickupSound;
Default
{
Tag "$T_FCBMAG";
Inventory.PickupMessage "$T_FCBMAG";
Stamina 80000;
Inventory.Icon "graphics/HUD/Icons/A_SilverBullet2.png";
Inventory.Amount 1;
Inventory.MaxAmount 2;
Ammo.BackpackAmount 0;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class SilverBullets : MagAmmo
{
Mixin SWWMOverlapPickupSound;
Default
{
Tag "$T_XSBBULLET";
Inventory.PickupMessage "$T_XSBBULLET";
Inventory.Icon "graphics/HUD/Icons/A_SilverBulletBullet.png";
Inventory.Amount 1;
Inventory.MaxAmount 5;
MagAmmo.ParentAmmo "SilverBulletAmmo";
MagAmmo.ClipSize 5;
+FLOATBOB;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class SilverBullets2 : MagAmmo
{
Mixin SWWMOverlapPickupSound;
Default
{
Tag "$T_FCBBULLET";
Inventory.PickupMessage "$T_FCBBULLET";
Inventory.Icon "graphics/HUD/Icons/A_SilverBulletBullet2.png";
Inventory.Amount 1;
Inventory.MaxAmount 5;
MagAmmo.ParentAmmo "SilverBulletAmmo2";
MagAmmo.ClipSize 5;
+FLOATBOB;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
// ============================================================================
// Candygun ammo
// ============================================================================
@ -818,7 +999,7 @@ Class CandyGunAmmo : Ammo
Stamina 100000;
Inventory.Icon "graphics/HUD/Icons/A_CandyGun.png";
Inventory.Amount 1;
Inventory.MaxAmount 2;
Inventory.MaxAmount 3;
Ammo.BackpackAmount 0;
Ammo.DropAmount 1;
+FLOATBOB;
@ -832,6 +1013,30 @@ Class CandyGunAmmo : Ammo
}
}
Class CandyGunBullets : MagAmmo
{
Mixin SWWMOverlapPickupSound;
Default
{
Tag "$T_CANDYBULLET";
Inventory.PickupMessage "$T_CANDYBULLET";
Inventory.Icon "graphics/HUD/Icons/A_CandyBullet.png";
Inventory.Amount 1;
Inventory.MaxAmount 7;
MagAmmo.ParentAmmo "CandyGunAmmo";
MagAmmo.ClipSize 7;
+FLOATBOB;
FloatBobStrength 0.25;
}
States
{
Spawn:
XZW1 A -1;
Stop;
}
}
Class CandyGunSpares : Ammo
{
Default
@ -942,6 +1147,8 @@ Class AmmoFabricator : Inventory abstract
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
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;
let def = GetDefaultByType(a);
@ -1145,8 +1352,9 @@ Class HammerspaceEmbiggener : Inventory
// The player did not have the ammoitem. Add it.
ammoitem = Ammo(Spawn(type));
ammoitem.Amount = amount;
if ( ammoitem.BackpackMaxAmount != ammoitem.default.MaxAmount )
ammoitem.MaxAmount = int(ammoitem.default.MaxAmount*(1+self.Amount/2.));
ammoitem.MaxAmount = int(ammoitem.default.MaxAmount*(1+self.Amount/2.));
if ( ammoitem.BackpackMaxAmount > 0 )
ammoitem.MaxAmount = min(ammoitem.MaxAmount,ammoitem.BackpackMaxAmount);
if ( (ammoitem.Amount > ammoitem.MaxAmount) && !sv_unlimited_pickup )
ammoitem.Amount = ammoitem.MaxAmount;
ammoitem.AttachToOwner(other);
@ -1154,8 +1362,9 @@ Class HammerspaceEmbiggener : Inventory
else
{
// The player had the ammoitem. Give some more.
if ( ammoitem.BackpackMaxAmount != ammoitem.default.MaxAmount )
ammoitem.MaxAmount = int(ammoitem.default.MaxAmount*(1+self.Amount/2.));
ammoitem.MaxAmount = int(ammoitem.default.MaxAmount*(1+self.Amount/2.));
if ( ammoitem.BackpackMaxAmount > 0 )
ammoitem.MaxAmount = min(ammoitem.MaxAmount,ammoitem.BackpackMaxAmount);
if ( ammoitem.Amount < ammoitem.MaxAmount )
{
ammoitem.Amount += amount;
@ -1174,11 +1383,13 @@ Class HammerspaceEmbiggener : Inventory
{
if ( !HammerspaceEmbiggener(item).cheatedin ) Owner.A_StartSound("powerup/embiggener",CHAN_ITEMEXTRA);
// readjust ammo values to new capacity
// also do the same for spare bullets
for ( Inventory i=Owner.Inv; i; i=i.Inv )
{
if ( !(i is 'Ammo') ) continue;
if ( Ammo(i).BackpackMaxAmount != i.default.MaxAmount )
i.MaxAmount = int(i.Default.MaxAmount*(1+self.Amount/2.));
i.MaxAmount = int(i.Default.MaxAmount*(1+self.Amount/2.));
if ( Ammo(i).BackpackMaxAmount > 0 )
i.MaxAmount = min(i.MaxAmount,Ammo(i).BackpackMaxAmount);
int amount = Ammo(i).BackpackAmount;
if ( !bIgnoreSkill ) amount = int(amount*G_SkillPropertyFloat(SKILLP_AmmoFactor));
i.Amount += amount;
@ -1194,7 +1405,7 @@ Class HammerspaceEmbiggener : Inventory
// reset upgrade
for ( Inventory i=Owner.Inv; i; i=i.Inv )
{
if ( !(i is 'Ammo') ) continue;
if ( !(i is 'Ammo') && !(i is 'MagAmmo') ) continue;
i.MaxAmount = i.Default.MaxAmount;
if ( i.Amount > i.MaxAmount )
i.Amount = i.MaxAmount;
@ -1205,8 +1416,8 @@ Class HammerspaceEmbiggener : Inventory
{
Tag "$T_EMBIGGENER";
Inventory.PickupMessage "$T_EMBIGGENER";
Inventory.MaxAmount 8;
Inventory.InterHubAmount 8;
Inventory.MaxAmount 16;
Inventory.InterHubAmount 16;
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
+INVENTORY.ALWAYSPICKUP;

View file

@ -520,6 +520,25 @@ Class BusterWall : Thinker
}
}
private static bool IsIOSWall( Line l )
{
TextureID facetex[5];
facetex[0] = TexMan.CheckForTexture("ZZZFACE1",TexMan.Type_Wall);
facetex[1] = TexMan.CheckForTexture("ZZZFACE2",TexMan.Type_Wall);
facetex[2] = TexMan.CheckForTexture("ZZZFACE3",TexMan.Type_Wall);
facetex[3] = TexMan.CheckForTexture("ZZZFACE4",TexMan.Type_Wall);
facetex[4] = TexMan.CheckForTexture("ZZZFACE5",TexMan.Type_Wall);
for ( int i=0; i<5; i++ )
{
for ( int j=0; j<3; j++ )
{
if ( l.sidedef[0].GetTexture(j) == facetex[i] ) return true;
if ( l.sidedef[1] && l.sidedef[1].GetTexture(j) == facetex[i] ) return true;
}
}
return false;
}
static void Bust( TraceResults d, int accdamage, Actor instigator, Vector3 x, double hitz )
{
// we can't blow up 3D floors (yet)
@ -528,6 +547,8 @@ Class BusterWall : Thinker
int hp;
if ( d.HitType == TRACE_HitWall )
{
// no busting the goat
if ( IsIOSWall(d.HitLine) ) return;
// onesided wall? no bust (TODO: bust polyobjects)
if ( !d.HitLine.sidedef[1] ) return;
// sector is opposite of side hit

View file

@ -3653,12 +3653,9 @@ Class SWWMHandler : EventHandler
}
else if ( (e.Replacee == 'Cell') || (e.Replacee == 'SkullRodAmmo') )
{
if ( Random[Replacements](0,6) )
{
if ( Random[Replacements](0,2) ) e.Replacement = 'HellblazerRavagers';
else e.Replacement = 'HellblazerWarheads';
}
else e.Replacement = 'SparkUnit';
if ( Random[Replacements](0,3) ) e.Replacement = 'SparkUnit';
else if ( !Random[Replacements](0,2) ) e.Replacement = 'CandyGunBullets';
else e.Replacement = Random[Replacements](0,2)?'SilverBullets':'SilverBullets2';
}
else if ( (e.Replacee == 'ArtiTeleport') || (e.Replacee == 'ArtiTeleportOther') )
{
@ -3667,8 +3664,7 @@ Class SWWMHandler : EventHandler
}
else if ( (e.Replacee == 'CellPack') || (e.Replacee == 'SkullRodHefty') )
{
if ( !Random[Replacements](0,2) ) e.Replacement = 'SilverBulletAmmo';
else if ( Random[Replacements](0,1) ) e.Replacement = 'SparkUnit';
if ( !Random[Replacements](0,2) ) e.Replacement = Random[Replacements](0,2)?'SilverBulletAmmo':'SilverBulletAmmo2';
else e.Replacement = 'CandyGunAmmo';
}
else if ( e.Replacee == 'Mana1' ) e.Replacement = 'FabricatorTier1';

View file

@ -505,11 +505,11 @@ Class EvisceratorCasing : SWWMCasing
States
{
Death:
#### # -1
XZW1 BC -1
{
pitch = RandomPick[Junk](-90,90);
pitch = roll = 0;
angle = FRandom[Junk](0,360);
roll = 0;
frame = RandomPick[Junk](1,2);
}
Stop;
}

View file

@ -996,6 +996,251 @@ Class YnykronShot : Actor
}
}
Class YnykronAltTracer : LineTracer
{
Actor ignore;
Array<Line> ShootThroughList;
Array<WaterHit> WaterHitList;
override ETraceStatus TraceCallback()
{
// liquid splashes
if ( Results.CrossedWater )
{
let hl = new("WaterHit");
hl.sect = Results.CrossedWater;
hl.hitpos = Results.CrossedWaterPos;
WaterHitList.Push(hl);
}
else if ( Results.Crossed3DWater )
{
let hl = new("WaterHit");
hl.sect = Results.Crossed3DWater;
hl.hitpos = Results.Crossed3DWaterPos;
WaterHitList.Push(hl);
}
if ( Results.HitType == TRACE_HitActor )
{
if ( Results.HitActor == ignore ) return TRACE_Skip;
if ( Results.HitActor.bSHOOTABLE ) return TRACE_Stop;
return TRACE_Skip;
}
else if ( (Results.HitType == TRACE_HitWall) && (Results.Tier == TIER_Middle) )
{
if ( !Results.HitLine.sidedef[1] || (Results.HitLine.Flags&Line.ML_BlockHitscan) )
return TRACE_Stop;
ShootThroughList.Push(Results.HitLine);
return TRACE_Skip;
}
return TRACE_Stop;
}
}
Class YnykronAltBeam : Actor
{
bool nospread;
void TraceOut()
{
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
let t = new("YnykronAltTracer");
t.ignore = target;
t.ShootThroughList.Clear();
t.WaterHitList.Clear();
t.Trace(pos,cursector,x,64,TRACE_HitSky);
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
{
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
}
for ( int i=0; i<t.WaterHitList.Size(); i++ )
{
let b = Spawn("InvisibleSplasher",t.WaterHitList[i].hitpos);
b.A_CheckTerrain();
}
for ( int i=0; i<t.Results.Distance; i+=32 )
{
if ( Random[Ynykron](0,5) ) continue;
let b = Spawn("SWWMHalfSmoke",level.Vec3Offset(pos,x*i));
b.Scale *= FRandom[Ynykron](1.6,2.8);
b.special1 = Random[Ynykron](3,5);
b.A_SetRenderStyle(b.alpha*.3,STYLE_Subtract);
b.vel += x*FRandom[Ynykron](-.2,.4);
}
if ( t.Results.HitType == TRACE_HasHitSky )
{
// goodbye
nospread = true;
return;
}
if ( t.Results.HitType != TRACE_HitNone )
{
// hit something
Vector3 norm = -t.Results.HitVector;
if ( t.Results.HitType == TRACE_HitWall )
{
norm = (t.Results.HitLine.delta.y,-t.Results.HitLine.delta.x,0).unit();
if ( t.Results.Side ) norm *= -1;
t.Results.HitLine.RemoteActivate(tracer,t.Results.Side,SPAC_Impact,t.Results.HitPos);
}
else if ( t.Results.HitType == TRACE_HitFloor )
{
if ( t.Results.ffloor ) norm = -t.Results.ffloor.top.Normal;
else norm = t.Results.HitSector.floorplane.Normal;
}
else if ( t.Results.HitType == TRACE_HitCeiling )
{
if ( t.Results.ffloor ) norm = -t.Results.ffloor.bottom.Normal;
else norm = t.Results.HitSector.ceilingplane.Normal;
}
/*let b = Spawn("YnykronSingularity",level.Vec3Offset(t.Results.HitPos,norm*16));
b.target = target;
b.angle = atan2(norm.y,norm.x);
b.pitch = asin(-norm.z);*/
nospread = true;
return;
}
if ( special1 >= 25600 )
{
// end of the line, dissipate
int numpt = Random[Ynykron](4,8);
for ( int i=0; i<numpt; i++ )
{
let b = Spawn("SWWMSmoke",level.Vec3Offset(pos,x*128));
b.Scale *= FRandom[Ynykron](.6,1.8);
b.special1 = Random[Ynykron](1,2);
b.A_SetRenderStyle(.3,STYLE_Subtract);
b.vel += x*FRandom[Ynykron](0.,5.);
}
nospread = true;
return;
}
}
void SpreadOut()
{
if ( nospread ) return;
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
// propagate
let next = Spawn("YnykronAltBeam",level.Vec3Offset(pos,x*128));
next.angle = atan2(x.y,x.x);
next.pitch = asin(-x.z);
next.roll = roll;
next.target = target;
next.master = master;
next.special1 = special1+64;
next.SetStateLabel("TrailSpawn");
}
override void PostBeginPlay()
{
special2 = Random[Ynykron](-1,0);
TraceOut();
}
override void Tick()
{
if ( isFrozen() ) return;
A_FadeOut(FRandom[Ynykron](.01,.02));
special2++;
if ( special2 == 1 )
SpreadOut();
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
Default
{
RenderStyle "Subtract";
Radius .1;
Height 0;
Alpha .4;
+NOGRAVITY;
+NOBLOCKMAP;
+NOCLIP;
+NOTELEPORT;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+ROLLSPRITE;
+ROLLCENTER;
+NOINTERACTION;
}
States
{
Spawn:
XZW1 A -1 Bright NoDelay
{
return FindState("StarterDev")+Random[Ynykron](0,3)*2;
}
Stop;
TrailSpawn:
XZW2 A -1 Bright
{
return FindState("TrailerDev")+Random[Ynykron](0,3)*2;
}
Stop;
StarterDev:
#### # 50 Bright;
XZW1 B -1 Bright;
Stop;
#### # 50 Bright;
XZW1 C -1 Bright;
Stop;
#### # 50 Bright;
XZW1 D -1 Bright;
Stop;
#### # 50 Bright;
XZW1 E -1 Bright;
Stop;
TrailerDev:
#### # 50 Bright;
XZW2 B -1 Bright;
Stop;
#### # 50 Bright;
XZW2 C -1 Bright;
Stop;
#### # 50 Bright;
XZW2 D -1 Bright;
Stop;
#### # 50 Bright;
XZW2 E -1 Bright;
Stop;
}
}
Class YnykronAltShot : Actor
{
Default
{
Radius .1;
Height 0;
+NOGRAVITY;
+NOBLOCKMAP;
+NOTELEPORT;
+DONTSPLASH;
+NOINTERACTION;
}
override void PostBeginPlay()
{
A_QuakeEx(4,4,4,80,0,65536,"",QF_RELATIVE|QF_SCALEDOWN,falloff:65536,rollIntensity:.8);
A_StartSound("ynykron/altbeam",CHAN_VOICE,CHANF_DEFAULT,1.,0.);
let b = Spawn("YnykronAltBeam",pos);
b.target = target;
b.angle = angle;
b.pitch = pitch;
}
override void Tick()
{
if ( isFrozen() || IsActorPlayingSound(CHAN_VOICE) ) return;
Destroy();
}
}
Class Ynykron : SWWMWeapon
{
transient ui TextureID WeaponBox, ChargeBar[2], BoxSide[2];

View file

@ -402,7 +402,7 @@ Class SWWMCasing : Actor abstract
}
Loop;
Bounce:
#### # 0
XZW1 A 0
{
pitchvel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
anglevel = FRandom[Junk](10,30)*RandomPick[Junk](-1,1);
@ -416,7 +416,7 @@ Class SWWMCasing : Actor abstract
}
Goto Spawn;
Death:
#### # -1
XZW1 A -1
{
pitch = roll = 0;
angle = FRandom[Junk](0,360);

View file

@ -1459,13 +1459,17 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
{
int ta = 0, tb = 0;
if ( a is 'Weapon' ) ta = 2;
else if ( (a is 'Ammo') || (a is 'BackpackItem') || (a is 'HammerspaceEmbiggener') ) ta = 3;
else if ( (a is 'BackpackItem') || (a is 'HammerspaceEmbiggener') ) ta = 3;
else if ( (a is 'Ammo') ) ta = 4;
else if ( (a is 'MagAmmo') ) ta = 5;
else if ( (a is 'PowerupGiver') || (a is 'AmmoFabricator') || a.bBIGPOWERUP ) ta = -3;
else if ( (a is 'Health') || (a is 'HealthPickup') || (a is 'SWWMHealth') ) ta = -2;
else if ( (a is 'Armor') || (a is 'SWWMSpareArmor') ) ta = -1;
else if ( a is 'PuzzleItem' ) ta = 1;
if ( b is 'Weapon' ) tb = 2;
else if ( (b is 'Ammo') || (b is 'BackpackItem') || (b is 'HammerspaceEmbiggener') ) tb = 3;
else if ( (b is 'BackpackItem') || (b is 'HammerspaceEmbiggener') ) tb = 3;
else if ( (b is 'Ammo') ) tb = 4;
else if ( (b is 'MagAmmo') ) tb = 5;
else if ( (b is 'PowerupGiver') || (b is 'AmmoFabricator') || b.bBIGPOWERUP ) tb = -3;
else if ( (b is 'Health') || (b is 'HealthPickup') || (b is 'SWWMHealth') ) tb = -2;
else if ( (b is 'Armor') || (b is 'SWWMSpareArmor') ) tb = -1;
@ -1610,7 +1614,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
// alphabetically sorted inventory
for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv )
{
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (inv is 'SWWMGesture') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') ) continue;
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (inv is 'SWWMGesture') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue;
String tag = inv.GetTag();
bool greater = false;
for ( int i=0; i<invlist.Size(); i++ )
@ -1774,7 +1778,7 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
// alphabetically sorted inventory
for ( Inventory inv=players[consoleplayer].mo.Inv; inv; inv=inv.Inv )
{
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (inv is 'SWWMGesture') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') ) continue;
if ( (inv.Amount <= 0) || !inv.SpawnState.ValidateSpriteFrame() || (inv is 'Key') || (inv is 'BasicArmor') || (inv is 'HexenArmor') || (inv is 'Powerup') || (inv is 'SWWMArmor') || (inv is 'SWWMGesture') || (!(inv is 'Ammo') && !(inv is 'Weapon') && !inv.bINVBAR) && !(inv is 'HammerspaceEmbiggener') && !(inv is 'SWWMCollectable') && !(inv is 'MagAmmo') ) continue;
String tag = inv.GetTag();
bool greater = false;
for ( int i=0; i<invlist.Size(); i++ )
@ -2293,7 +2297,9 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
else str = invlist[i].GetTag();
int clscol = Font.CR_WHITE;
if ( invlist[i] is 'Weapon' ) clscol = Font.CR_GOLD;
else if ( (invlist[i] is 'Ammo') || (invlist[i] is 'BackpackItem') || (invlist[i] is 'HammerspaceEmbiggener') ) clscol = Font.CR_BROWN;
else if ( invlist[i] is 'MagAmmo' ) clscol = Font.CR_TAN;
else if ( (invlist[i] is 'BackpackItem') || (invlist[i] is 'HammerspaceEmbiggener') ) clscol = Font.CR_DARKBROWN;
else if ( invlist[i] is 'Ammo' ) clscol = Font.CR_BROWN;
else if ( (invlist[i] is 'PowerupGiver') || (invlist[i] is 'AmmoFabricator') || invlist[i].bBIGPOWERUP ) clscol = Font.CR_PURPLE;
else if ( (invlist[i] is 'Health') || (invlist[i] is 'HealthPickup') || (invlist[i] is 'SWWMHealth') ) clscol = Font.CR_RED;
else if ( (invlist[i] is 'Armor') || (invlist[i] is 'SWWMSpareArmor') ) clscol = Font.CR_GREEN;

View file

@ -2155,7 +2155,7 @@ Class Sparkster : SWWMWeapon
XZW2 A 20;
Goto Ready;
Reload:
XZW2 A 0 A_JumpIf((invoker.clipcount>=invoker.default.clipcount)||((invoker.Ammo1.Amount<=0)&&!sv_infiniteammo&&!FindInventory('PowerInfiniteAmmo',true)),"Idle");
XZW2 A 0 A_JumpIf((invoker.clipcount>0)||((invoker.Ammo1.Amount<=0)&&!sv_infiniteammo&&!FindInventory('PowerInfiniteAmmo',true)),"Idle");
XZW2 A 2
{
A_StartSound("biospark/meleestart",CHAN_WEAPON,CHANF_OVERLAP);

View file

@ -20,18 +20,16 @@ Class ExplodiumMag : SWWMCasing
States
{
Death:
#### # -1
XZW1 BC -1
{
pitch = 0;
pitch = roll = 0;
angle = FRandom[Junk](0,360);
roll = RandomPick[Junk](-90,90);
frame = RandomPick[Junk](1,2);
}
Stop;
}
}
Class ExplodiumMagEmpty : ExplodiumMag {}
Class ExplodiumMagArm : Actor
{
Default
@ -391,12 +389,12 @@ Class ExplodiumGun : SWWMWeapon
p.vel += vel*.5;
}
action void A_DropMag( bool loaded = false )
action void A_DropMag()
{
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x-2*y-10*z);
let c = Spawn(loaded?"ExplodiumMag":"ExplodiumMagEmpty",origin);
let c = Spawn("ExplodiumMag",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-1.2,.3)-(0,0,FRandom[Junk](2,3));
@ -501,7 +499,7 @@ Class ExplodiumGun : SWWMWeapon
XZW3 C 1;
XZW3 D 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 EFGH 1;
XZW3 I 1 A_DropMag(true);
XZW3 I 1 A_DropMag();
Goto ReloadEnd;
ReloadEmpty:
XZW2 A 1;

View file

@ -7,8 +7,6 @@ Class CandyMag : ExplodiumMag
{
}
Class CandyMagEmpty : ExplodiumMag {}
Class CandyLight : PaletteLight
{
Default
@ -529,7 +527,7 @@ Class CandyGunProj : Actor
A_SetRenderStyle(1.,STYLE_Add);
Scale *= 6.+.2*special1;
A_AlertMonsters(40000);
SWWMHandler.DoExplosion(self,3500+500*special1,80000+8000*special1,300+20*special1,120,DE_EXTRAZTHRUST);
SWWMHandler.DoExplosion(self,4000+700*special1,80000+15000*special1,400+20*special1,250,DE_EXTRAZTHRUST);
A_QuakeEx(9,9,9,70,0,1500+100*special1,"",QF_RELATIVE|QF_SCALEDOWN,falloff:1200,rollintensity:2.);
A_StartSound("candygun/gunhit",CHAN_VOICE,attenuation:.24);
A_StartSound("candygun/gunhit",CHAN_WEAPON,attenuation:.12);
@ -639,7 +637,7 @@ Class CandyMagProj : Actor
A_SetRenderStyle(1.,STYLE_Add);
Scale *= 3.+.2*special1;
A_AlertMonsters(20000);
SWWMHandler.DoExplosion(self,700+600*special1,80000+8000*special1,150+15*special1,90,DE_EXTRAZTHRUST);
SWWMHandler.DoExplosion(self,800+700*special1,60000+15000*special1,200+15*special1,100,DE_EXTRAZTHRUST);
A_QuakeEx(9,9,9,30,0,500+80*special1,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollintensity:2.);
A_StartSound("candygun/maghit",CHAN_VOICE,attenuation:.24);
A_StartSound("candygun/maghit",CHAN_WEAPON,attenuation:.12);
@ -1031,18 +1029,36 @@ Class CandyGun : SWWMWeapon
p.vel += vel*.5;
}
action void A_DropMag( bool loaded = false )
action void A_DropMag()
{
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x-2*y-10*z);
let c = Spawn(loaded?"CandyMag":"CandyMagEmpty",origin);
let c = Spawn("CandyMag",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-1.2,.3)-(0,0,FRandom[Junk](2,3));
c.vel += vel*.5;
}
action void A_EmptyMag()
{
MagAmmo ma = MagAmmo(FindInventory("CandyGunBullets"));
if ( !ma )
{
ma = MagAmmo(Spawn("CandyGunBullets"));
ma.Amount = 0;
ma.AttachToOwner(self);
}
int maxgiveamt = min(ma.MaxAmount-ma.Amount,invoker.clipcount);
int dropamt = invoker.clipcount-maxgiveamt;
if ( dropamt > 0 ) ma.CreateTossable(dropamt);
ma.Amount = min(ma.MaxAmount,ma.Amount+invoker.clipcount);
if ( CheckLocalView() ) for ( int i=0; i<(invoker.clipcount-dropamt); i++ ) ma.PrintPickupMessage(true,ma.PickupMessage());
ma.PlayPickupSound(self);
invoker.clipcount = 0;
}
action void A_DropCasing()
{
Vector3 x, y, z;
@ -1186,11 +1202,11 @@ Class CandyGun : SWWMWeapon
}
XZW2 TUVWXYZ 1;
XZW3 A 1 A_StartSound("explodium/slideback",CHAN_WEAPON,CHANF_OVERLAP,.3);
XZW3 B 1 { invoker.clipcount = 0; }
XZW3 B 1 A_EmptyMag();
XZW3 C 1;
XZW3 D 1 A_StartSound("explodium/magout",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 EFGH 1;
XZW3 I 1 A_DropMag(true);
XZW3 I 1 A_DropMag();
Goto ReloadEnd;
ReloadEmpty:
XZW2 A 1;

File diff suppressed because it is too large Load diff