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.
38
README.md
|
|
@ -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
|
||||
|
||||
|
|
|
|||
3
TODO.md
|
|
@ -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)
|
||||
|
|
|
|||
BIN
graphics/HUD/Icons/A_CandyBullet.png
Normal file
|
After Width: | Height: | Size: 206 B |
BIN
graphics/HUD/Icons/A_SilverBullet2.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
graphics/HUD/Icons/A_SilverBulletBullet.png
Normal file
|
After Width: | Height: | Size: 510 B |
BIN
graphics/HUD/Icons/A_SilverBulletBullet2.png
Normal file
|
After Width: | Height: | Size: 547 B |
|
Before Width: | Height: | Size: 835 B After Width: | Height: | Size: 344 B |
BIN
graphics/HUD/SilverBulletFCB.png
Normal file
|
After Width: | Height: | Size: 259 B |
BIN
graphics/HUD/SilverBulletFCBMag.png
Normal file
|
After Width: | Height: | Size: 524 B |
BIN
graphics/HUD/SilverBulletXSB.png
Normal file
|
After Width: | Height: | Size: 225 B |
BIN
graphics/HUD/SilverBulletXSBMag.png
Normal file
|
After Width: | Height: | Size: 516 B |
|
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 138 B |
|
|
@ -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.";
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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.";
|
||||
|
|
|
|||
|
|
@ -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)";
|
||||
|
|
|
|||
|
|
@ -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-
|
||||
|
|
|
|||
|
|
@ -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-
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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-
|
||||
|
|
|
|||
|
|
@ -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-
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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
|
After Width: | Height: | Size: 2.6 KiB |
BIN
models/BooletExplodium.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
models/CandyCasing_Boolet.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
models/ExplodiumBullet_a.3d
Normal file
BIN
models/ExplodiumBullet_d.3d
Normal file
BIN
models/ExplodiumCasing_Boolet.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
models/SilverbulletAmmo_FCB.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
models/SilverbulletAmmo_FCB_EmptyMag.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
models/SilverbulletBullet_FCB.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
models/SilverbulletBullet_FCB_a.3d
Normal file
BIN
models/SilverbulletBullet_FCB_d.3d
Normal file
BIN
models/SilverbulletCase_FCB_a.3d
Normal file
BIN
models/SilverbulletCase_FCB_d.3d
Normal 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
BIN
sounds/silverbullet/silver_altfire1.ogg
Normal file
BIN
sounds/silverbullet/silver_altfire2.ogg
Normal file
BIN
sounds/silverbullet/silver_altfire3.ogg
Normal file
BIN
sounds/silverbullet/silver_chode1.ogg
Normal file
BIN
sounds/silverbullet/silver_chode2.ogg
Normal 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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||