Much stuff, starting work on Demolitionist Menu.
This commit is contained in:
parent
631fcb4e7c
commit
ec1db7a42e
64 changed files with 1185 additions and 90 deletions
96
PriceTable.md
Normal file
96
PriceTable.md
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
### Prices for SWWM GZ items
|
||||
|
||||
These are the prices of any items that can be bought in the in-game store.
|
||||
For items that are also available in bundles (e.g.: Shells), the price of
|
||||
those follows the formula (price*(1+0.75*amount)).
|
||||
These values may be adjusted in the future after things are tested properly.
|
||||
|
||||
#### Weapons and ammo
|
||||
|
||||
Can only buy weapons you don't own. Ammo can still be bought even if you don't
|
||||
own the respective weapon.
|
||||
|
||||
Item | Price
|
||||
------------- | -----
|
||||
Pusher | 5000
|
||||
Deep Impact | 2000
|
||||
Explodium Gun | 3000
|
||||
Spreadgun | 10000
|
||||
Red Shell | 500
|
||||
Green Shell | 600
|
||||
White Shell | 900
|
||||
Blue Shell | 700
|
||||
Black Shell | 1000
|
||||
Purple Shell | 800
|
||||
Gold Shell | 120000
|
||||
Wallbuster | 15000
|
||||
Eviscerator | 25000
|
||||
Evisc. Shell | 2500
|
||||
Hellblazer | 40000
|
||||
Missiles | 6000
|
||||
Crackshots | 8000
|
||||
Ravagers | 12000
|
||||
Warheads | 25000
|
||||
Sparkster | 80000
|
||||
Spark Unit | 20000
|
||||
Silver Bullet | 120000
|
||||
S.B. Mag | 30000
|
||||
Candygun | 200000
|
||||
Candy Mag | 80000
|
||||
Spare Gun | 150000
|
||||
Ynykron | 2000000
|
||||
Crystal Unit | 400000
|
||||
|
||||
#### DLC weapons and ammo (when available)
|
||||
|
||||
These will be available long after the first release.
|
||||
|
||||
Item | Price
|
||||
------------- | -----
|
||||
Sledgehammer | 4000
|
||||
Gravity Gun | 12000
|
||||
Gravity Cell | 2000
|
||||
Splatter | 20000
|
||||
Splat Core | 4000
|
||||
Skull Launch. | 35000
|
||||
Skull Bomb | 8000
|
||||
Blackfire Ig. | 50000
|
||||
Blackfire C. | 12000
|
||||
Puntzer Gamma | 70000
|
||||
SMW.05 Mag | 20000
|
||||
EMP Carbine | 90000
|
||||
EMP Core | 35000
|
||||
PROWEL&TADEL | 160000
|
||||
Insane Core | 40000
|
||||
S.H. Fun Ball | 2500000
|
||||
Spare Balls | 2000000
|
||||
|
||||
#### Other items
|
||||
|
||||
Other items that can be bought at any moment. Omnisights and Embiggeners cannot
|
||||
be purchased from the store, they have to be found in maps.
|
||||
|
||||
Item | Price
|
||||
------------- | -----
|
||||
Health Nugget | 1200
|
||||
H.Tetrahedron | 3000
|
||||
H.Cube | 8000
|
||||
Refresher | 60000
|
||||
Armor Nugget | 1000
|
||||
Blast Suit | 15000
|
||||
War Armor | 50000
|
||||
Ghost Arti. | 20000
|
||||
Gravity Supp. | 16000
|
||||
Invinciball | 150000
|
||||
Ragekit | 120000
|
||||
Lämp | 12000
|
||||
Omnisight | N/A
|
||||
Embiggener | N/A
|
||||
T1 Fabricator | 3000
|
||||
T2 Fabricator | 12000
|
||||
T3 Fabricator | 480000
|
||||
T4 Fabricator | 1920000
|
||||
T1 Chancebox | 1000
|
||||
T2 Chancebox | 10000
|
||||
T3 Chancebox | 100000
|
||||
T4 Chancebox | 1000000
|
||||
|
|
@ -400,10 +400,9 @@ you from dying at all if it autoactivates on low health.
|
|||
|
||||
Actual 100% invisibility guaranteed, a relic from the old UnSX days.
|
||||
|
||||
The ghost artifact is capable of turning you absolutely invisible when standing
|
||||
still, and just slightly more visible when moving, depending on speed.
|
||||
|
||||
Firing of course nullifies the effect for a while.
|
||||
The ghost artifact is capable of turning you absolutely invisible. However, it
|
||||
does not prevent you from making noise, so it's best to use it to sneak past
|
||||
certain encounters, or prepare surprise attacks.
|
||||
|
||||
This powerup lasts 60 seconds and cannot be toggled.
|
||||
|
||||
|
|
|
|||
|
|
@ -15,3 +15,4 @@ user int swwm_mutevoice = 0; // mute demolitionist voice
|
|||
user int swwm_chatduration = 900; // lifespan of chat messages
|
||||
user int swwm_msgduration = 240; // lifespan of other messages
|
||||
user int swwm_pickduration = 120; // lifespan of pickup messages
|
||||
user noarchive int swwm_lasttab = 0; // last selected tab in the menu
|
||||
|
|
|
|||
BIN
graphics/KBase/MainWindow.png
Normal file
BIN
graphics/KBase/MainWindow.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
BIN
graphics/KBase/TabSeparator.png
Normal file
BIN
graphics/KBase/TabSeparator.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 95 B |
BIN
graphics/KBase/WindowSeparator.png
Normal file
BIN
graphics/KBase/WindowSeparator.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 121 B |
BIN
graphics/KBaseMockup.xcf
Normal file
BIN
graphics/KBaseMockup.xcf
Normal file
Binary file not shown.
124
language.txt
124
language.txt
|
|
@ -11,23 +11,93 @@ SWWM_DASH = "Dash";
|
|||
SWWM_GESTURE1 = "Point Down";
|
||||
SWWM_GESTURE2 = "Thumbs Up";
|
||||
SWWM_GESTURE3 = "Victory";
|
||||
SWWM_KBASE = "Knowledge Base";
|
||||
SWWM_KBASE = "Demolitionist Menu";
|
||||
// mod menu
|
||||
SWWM_MENUTITLE = "SWWM Options";
|
||||
SWWM_VOICETYPE = "Demolitionist Voice Type";
|
||||
SWWM_MUTELEVEL = "Voice Muting Level";
|
||||
SWWM_MUTENONE = "None";
|
||||
SWWM_MUTECOMBAT = "Combat Comments";
|
||||
SWWM_MUTEINTER = "Interaction Comments";
|
||||
SWWM_MUTELINERS = "Map Start Oneliners";
|
||||
SWWM_MUTEALL = "Everything";
|
||||
// knowledge base
|
||||
SWWM_TOOSMALL = "Your resolution is too small to fit this menu.\n640x400 or higher is required.";
|
||||
SWWM_COMINGSOON = "(coming soon)";
|
||||
SWWM_MISSTAB = "Mission";
|
||||
SWWM_STATTAB = "Stats";
|
||||
SWWM_STATUPTIME = "Uptime:";
|
||||
SWWM_STATONFOOT = "Distance on Foot:";
|
||||
SWWM_STATFLIGHT = "Distance in Air:";
|
||||
SWWM_STATBOOST = "Times Boosted:";
|
||||
SWWM_STATDASH = "Times Dashed:";
|
||||
SWWM_STATSTOMP = "Times Stomped:";
|
||||
SWWM_STATSPEED = "Top Speed:";
|
||||
SWWM_STATAIRTIME = "Longest Air Time:";
|
||||
SWWM_STATHISCORE = "Highest Score:";
|
||||
SWWM_INVTAB = "Inventory";
|
||||
SWWM_KEYTAB = "Keychain";
|
||||
SWWM_KBASETAB = "Library";
|
||||
SWWM_STORETAB = "Store";
|
||||
SWWM_STOREFULL = "You can't hold more of that";
|
||||
SWWM_STOREMUNS = "You don't have enough money";
|
||||
SWWM_TRADETAB = "Trading";
|
||||
SWWM_TRADEFULL = "They can't hold more of that";
|
||||
SWWM_TRADEHIST = "History";
|
||||
SWWM_TRADETO = "Sent to";
|
||||
SWWM_TRADEFROM = "Received from";
|
||||
SWWM_MSGSENT = "You sent %s to %s.";
|
||||
SWWM_MSGRECV = "%s sent you %s.";
|
||||
SWWM_CHATTAB = "Chat Log";
|
||||
SWWM_MAINCONTROLS = "PgUp/PgDn: Switch Tab | Arrows: Navigate | ";
|
||||
SWWM_EXTCONTROLS = "Enter: Select | Escape: Cancel | ";
|
||||
SWWM_CHATCONTROLS = "Del: Clear | ";
|
||||
// mission entries
|
||||
SWWM_MISSION_DOOM =
|
||||
"Welcome to your first mission, Demolitionist. Since I have very little confidence in those UAC idiots, I have decided to send you up ahead to assist on the fight against the demon invaders that came to Earth, thanks to their very wonderful and very reliable teleportation experiments backfiring, which is something absolutely no one saw coming, oh no, definitely not. It's not like that hasn't happened like... several times now? If Samuel Hayden didn't have me blocked I'd be sending him all sorts of trash right now. Oh I'd love to see his reaction to this...\n"
|
||||
"\n"
|
||||
"Anyway, let's get to the point here. Your main objective is to eliminate all hostile forces in the region. There's going to be a hell a of a lot of fighting up ahead, but I know you can do it, that's why I built you. Do this job well and maybe you'll be rewarded when you come back home, who knows. No, Ibuki won't hug you again, I promise, your chassis will be safe. Your reward will actually be something else, but I won't tell you more details, I want it to be a surprise.\n"
|
||||
"\n"
|
||||
"By the way, we haven't been able to provide you with all the available equipment, it would've been very expensive. Instead, be on the lookout for strategically placed supplies along the way. If that sounds too videogamey, you can eat my pants, I wasn't the one who made that decision. Whatever.\n"
|
||||
"\n"
|
||||
"Saya out.";
|
||||
SWWM_MISSION_HERETIC = "Welcome to your second mission, Demolitionist. This one will be quite different, as you may see. While scouring the multiverse with our new portal technology we came across this cool little place called Parthoris. It's got elves 'n magic stuff, very fantasy-like setting, I dig it. Anyway I hope the ride wasn't too bumpy, crossing between universes and all.\n"
|
||||
"\n"
|
||||
"Here's what's up: We have information that there is some sort of ongoing war between a bunch of elves and some crazy cult. Your objective is to neutralize this cult, preferably also taking out its leader, some sort of wizard dude. They call him D'Sparil and he's part of a triad of big baddies called the \"Serpent Riders\", because they ride dragons or something I guess? Guy's tall, wears red robes, and talks backwards, can't miss him. I'm sure that when you get back you'll want to transfer over to your maidbot body again, so I'll be working on a couple extensions there to make things more... \"fun\", if you catch my drift.\n"
|
||||
"\n"
|
||||
"Once again, I'm sorry that we couldn't give you all your stuff. I'm taking the blame this time, I think I screwed something up with the deployment and it got scattered all over the place. It's possible that the locals may have also moved stuff around so... good luck finding it all.\n"
|
||||
"\n"
|
||||
"Saya out.";
|
||||
SWWM_MISSION_HEXEN = "Welcome to your third mission, Demolitionist. We're sending you into another world, but this is actually related to your previous mission. First of all, yes I fucked up again, I'm sorry, really. All your stuff got lost... again, my bad. On top of that there was some sort of mixup with the ammo supplies and instead we got these weird \"Fabricator\" things from Cyrus. They do provide ammo, at least.\n"
|
||||
"\n"
|
||||
"So yeah, you're now in the land of Cronos, more of that cool dark fantasy stuff around. It seems that some old pal of that wizard dude from last time is being a stinky ass here, and we need that sorted out before we can start studying this place in more detail. So there you go, beat the crap outta him! As a reward, we can do some more of \"that\". Just you, me, maybe Ibuki too... hnnn... and then... *heavy breathing*\n"
|
||||
"\n"
|
||||
"OK, wow... phew. Saya, focus. No hornyposting on mission statements. Anyway, more details about your target. Evil dragonish-looking dude, deep voice, and also a Serpent Rider, though I can't even begin to understand how he'd ride one. Maybe he's the one that receives the riding... u... ggdfgfhfhdfh... ok, pls no, BAD mental image, UGH. I think I'm going to need to spend a couple more hours drowning in Ibuki's tiddies to get this out of my head...\n"
|
||||
"\n"
|
||||
"Saya out.";
|
||||
// lore entries
|
||||
SWWM_LORE_ENTRY_ = "";
|
||||
SWWM_LORE_GRAPHIC_ = "";
|
||||
SWWM_LORE_CONTENTS_ = "";
|
||||
/* GAME STUFF */
|
||||
// tags
|
||||
T_PUSHER = "\"Pusher\" Microfusion Rotary Hammer";
|
||||
T_DEEPIMPACT = "\"Deep Impact\" Airblaster";
|
||||
// tags, pickups
|
||||
T_PUSHER = "Pusher";
|
||||
I_PUSHER = "\"Pusher\" Microfusion Rotary Hammer";
|
||||
T_DEEPIMPACT = "Deep Impact";
|
||||
I_DEEPIMPACT = "\"Deep Impact\" Airblaster";
|
||||
T_EXPLODIUM = "Explodium Gun";
|
||||
T_SPREADGUN = "\"Rhino Stopper\" Spreadgun";
|
||||
T_WALLBUSTER = "\"Wallbuster\" Heavy Perforator Shotgun";
|
||||
T_EVISCERATOR = "\"Eviscerator\" High Load Flechette Cannon";
|
||||
T_HELLBLAZER = "\"Hellblazer\" Rocket Launcher";
|
||||
T_SPARKSTER = "Model S-5 Biospark Carbine";
|
||||
T_SPREADGUN = "Spreadgun";
|
||||
I_SPREADGUN = "\"Rhino Stopper\" Spreadgun";
|
||||
T_WALLBUSTER = "Wallbuster";
|
||||
I_WALLBUSTER = "\"Wallbuster\" Heavy Perforator Shotgun";
|
||||
T_EVISCERATOR = "Eviscerator";
|
||||
I_EVISCERATOR = "\"Eviscerator\" High Load Flechette Cannon";
|
||||
T_HELLBLAZER = "Hellblazer";
|
||||
I_HELLBLAZER = "\"Hellblazer\" Rocket Launcher";
|
||||
T_SPARKSTER = "Sparkster";
|
||||
I_SPARKSTER = "Model S-5 Biospark Carbine";
|
||||
T_SILVERBULLET = "Silver Bullet JET";
|
||||
T_CANDYGUN = "\"Taste the Sweetness\" Candy Gun";
|
||||
T_CANDYGUN = "Candy Gun";
|
||||
I_CANDYGUN = "\"Taste the Sweetness\" Candy Gun";
|
||||
T_YNYKRON = "Ynykron Artifact";
|
||||
T_REDSHELL = "Shell";
|
||||
T_REDSHELLS = "Shells";
|
||||
|
|
@ -67,6 +137,8 @@ T_TETRAHEALTH = "Health Tetrahedron";
|
|||
T_CUBEHEALTH = "Health Cube";
|
||||
T_INVINCIBALL = "Fuckin' Invinciball";
|
||||
T_LAMP = "Lämp";
|
||||
T_MOTH = "Moth";
|
||||
T_MASHIRO = "White Moth";
|
||||
T_NUGGETH = "Health Nugget";
|
||||
T_NUGGETA = "Armor Nugget";
|
||||
T_OMNISIGHT = "Omnisight";
|
||||
|
|
@ -126,6 +198,8 @@ SWWM_INTERTIP11 = "The Lämp has a chance to attract a rare type of moth that is
|
|||
SWWM_INTERTIP12 = "Most healing items will auto-activate if you're about to die, though sometimes they may not be enough to really save you... unless it's a Grilled Cheese Sandwich.";
|
||||
SWWM_INTERTIP13 = "The Ynykron Artifact will instantly kill everything you aim it at, unless it's really unkillable, though usually that's only the case for gods. You're not planning on going after any gods, right?";
|
||||
SWWM_INTERTIP14 = "Do not be deceived by the Candy Gun, it may seem like a simple recolor, but it is A LOT stronger than your starting weapon.";
|
||||
SWWM_INTERTIP15 = "The Ragekit will greatly increase the strength of your melee attacks and reduce incoming damage, but it'll also make you scream, all the time.";
|
||||
SWWM_INTERTIP16 = "You can share items with other players in multiplayer using the trading tab in your Demolitionist menu. Items that won't fit in the destination inventory will not be traded.";
|
||||
|
||||
/* SUBTITLES */
|
||||
// new weapon received
|
||||
|
|
@ -210,6 +284,7 @@ SWWM_SUBS_DEFAULT_FINDSECRET9 = "It was a piece of cake.";
|
|||
SWWM_SUBS_DEFAULT_FINDSECRET10 = "I still got it.";
|
||||
SWWM_SUBS_DEFAULT_FINDSECRET11 = "I did good work, didn't I?";
|
||||
SWWM_SUBS_DEFAULT_FINDSECRET12 = "Wow, that's pretty lucky!";
|
||||
SWWM_SUBS_DEFAULT_FINDSECRET13 = "Yeah, well, I am pretty awesome.";
|
||||
// frag taunts
|
||||
SWWM_SUBS_DEFAULT_SCOREKILL1 = "Good riddance.";
|
||||
SWWM_SUBS_DEFAULT_SCOREKILL2 = "One down.";
|
||||
|
|
@ -257,5 +332,32 @@ SWWM_SUBS_DEFAULT_GETHIT15 = "And now it's your turn.";
|
|||
SWWM_SUBS_DEFAULT_GETHIT16 = "Time to shut you up for good.";
|
||||
SWWM_SUBS_DEFAULT_GETHIT17 = "You're not leaving here in one piece.";
|
||||
SWWM_SUBS_DEFAULT_GETHIT18 = "You're obviously upset...";
|
||||
// getting hurt by friendlies
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT1 = "Are you ticked off at me?";
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT2 = "Are you serious?";
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT3 = "What? Why?";
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT4 = "That's awfully rude.";
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT5 = "Sorry, what?";
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT6 = "Not very friendly, are you?";
|
||||
SWWM_SUBS_DEFAULT_FRIENDHIT7 = "Whoa, whoa. Easy there.";
|
||||
// hurting a friendly
|
||||
SWWM_SUBS_DEFAULT_HITFRIEND1 = "I... sorry.";
|
||||
SWWM_SUBS_DEFAULT_HITFRIEND2 = "I'm sorry.";
|
||||
SWWM_SUBS_DEFAULT_HITFRIEND3 = "Sorry.";
|
||||
// greeting another player
|
||||
SWWM_SUBS_DEFAULT_GREET1 = "Hi.";
|
||||
SWWM_SUBS_DEFAULT_GREET2 = "Hey there.";
|
||||
SWWM_SUBS_DEFAULT_GREET3 = "Hey.";
|
||||
SWWM_SUBS_DEFAULT_GREET4 = "Hey.";
|
||||
SWWM_SUBS_DEFAULT_GREET5 = "Hey.";
|
||||
SWWM_SUBS_DEFAULT_GREET6 = "Well hello.";
|
||||
SWWM_SUBS_DEFAULT_GREET7 = "Hi there.";
|
||||
// ragekit
|
||||
SWWM_SUBS_DEFAULT_RAGEKIT1 = "AAAAAAAAAAAAAAAAAAAAAA!!!!!";
|
||||
SWWM_SUBS_DEFAULT_RAGEKIT2 = "FFFFFFUUUUUUUUUUUCKKKK!!!";
|
||||
SWWM_SUBS_DEFAULT_RAGEKIT3 = "FUCKFUCKFUCCKKKK!!";
|
||||
SWWM_SUBS_DEFAULT_RAGEKIT4 = "AAAAAAAAAARGH!!!!";
|
||||
SWWM_SUBS_DEFAULT_RAGEKIT5 = "KILLLLL!!!!";
|
||||
SWWM_SUBS_DEFAULT_RAGEKIT6 = "RAAAARGH!!! BRING IT!!!";
|
||||
|
||||
[es]
|
||||
|
|
|
|||
24
sndinfo.txt
24
sndinfo.txt
|
|
@ -42,6 +42,7 @@ voice/default/findsecret9 sounds/voice/default/findsecret9.ogg
|
|||
voice/default/findsecret10 sounds/voice/default/findsecret10.ogg
|
||||
voice/default/findsecret11 sounds/voice/default/findsecret11.ogg
|
||||
voice/default/findsecret12 sounds/voice/default/findsecret12.ogg
|
||||
voice/default/findsecret13 sounds/voice/default/findsecret13.ogg
|
||||
voice/default/getweapon1 sounds/voice/default/getweapon1.ogg
|
||||
voice/default/getweapon2 sounds/voice/default/getweapon2.ogg
|
||||
voice/default/getweapon3 sounds/voice/default/getweapon3.ogg
|
||||
|
|
@ -151,6 +152,29 @@ voice/default/gethit15 sounds/voice/default/gethit15.ogg
|
|||
voice/default/gethit16 sounds/voice/default/gethit16.ogg
|
||||
voice/default/gethit17 sounds/voice/default/gethit17.ogg
|
||||
voice/default/gethit18 sounds/voice/default/gethit18.ogg
|
||||
voice/default/friendhit1 sounds/voice/default/friendhit1.ogg
|
||||
voice/default/friendhit2 sounds/voice/default/friendhit2.ogg
|
||||
voice/default/friendhit3 sounds/voice/default/friendhit3.ogg
|
||||
voice/default/friendhit4 sounds/voice/default/friendhit4.ogg
|
||||
voice/default/friendhit5 sounds/voice/default/friendhit5.ogg
|
||||
voice/default/friendhit6 sounds/voice/default/friendhit6.ogg
|
||||
voice/default/friendhit7 sounds/voice/default/friendhit7.ogg
|
||||
voice/default/greet1 sounds/voice/default/greet1.ogg
|
||||
voice/default/greet2 sounds/voice/default/greet2.ogg
|
||||
voice/default/greet3 sounds/voice/default/greet3.ogg
|
||||
voice/default/greet4 sounds/voice/default/greet4.ogg
|
||||
voice/default/greet5 sounds/voice/default/greet5.ogg
|
||||
voice/default/greet6 sounds/voice/default/greet6.ogg
|
||||
voice/default/greet7 sounds/voice/default/greet7.ogg
|
||||
voice/default/hitfriend1 sounds/voice/default/hitfriend1.ogg
|
||||
voice/default/hitfriend2 sounds/voice/default/hitfriend2.ogg
|
||||
voice/default/hitfriend3 sounds/voice/default/hitfriend3.ogg
|
||||
voice/default/ragekit1 sounds/voice/default/ragekit1.ogg
|
||||
voice/default/ragekit2 sounds/voice/default/ragekit2.ogg
|
||||
voice/default/ragekit3 sounds/voice/default/ragekit3.ogg
|
||||
voice/default/ragekit4 sounds/voice/default/ragekit4.ogg
|
||||
voice/default/ragekit5 sounds/voice/default/ragekit5.ogg
|
||||
voice/default/ragekit6 sounds/voice/default/ragekit6.ogg
|
||||
|
||||
$random voice/default/grunt { voice/default/grunt1 voice/default/grunt2 voice/default/grunt3 voice/default/grunt4 voice/default/grunt5 voice/default/grunt6 }
|
||||
$random voice/default/lopain { voice/default/lopain1 voice/default/lopain2 voice/default/lopain3 voice/default/lopain4 voice/default/lopain5 }
|
||||
|
|
|
|||
BIN
sounds/SUNDOWNER.ogg
Normal file
BIN
sounds/SUNDOWNER.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/findsecret13.ogg
Normal file
BIN
sounds/voice/default/findsecret13.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit1.ogg
Normal file
BIN
sounds/voice/default/friendhit1.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit2.ogg
Normal file
BIN
sounds/voice/default/friendhit2.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit3.ogg
Normal file
BIN
sounds/voice/default/friendhit3.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit4.ogg
Normal file
BIN
sounds/voice/default/friendhit4.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit5.ogg
Normal file
BIN
sounds/voice/default/friendhit5.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit6.ogg
Normal file
BIN
sounds/voice/default/friendhit6.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/friendhit7.ogg
Normal file
BIN
sounds/voice/default/friendhit7.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet1.ogg
Normal file
BIN
sounds/voice/default/greet1.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet2.ogg
Normal file
BIN
sounds/voice/default/greet2.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet3.ogg
Normal file
BIN
sounds/voice/default/greet3.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet4.ogg
Normal file
BIN
sounds/voice/default/greet4.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet5.ogg
Normal file
BIN
sounds/voice/default/greet5.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet6.ogg
Normal file
BIN
sounds/voice/default/greet6.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/greet7.ogg
Normal file
BIN
sounds/voice/default/greet7.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/hitfriend1.ogg
Normal file
BIN
sounds/voice/default/hitfriend1.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/hitfriend2.ogg
Normal file
BIN
sounds/voice/default/hitfriend2.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/hitfriend3.ogg
Normal file
BIN
sounds/voice/default/hitfriend3.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/ragekit1.ogg
Normal file
BIN
sounds/voice/default/ragekit1.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/ragekit2.ogg
Normal file
BIN
sounds/voice/default/ragekit2.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/ragekit3.ogg
Normal file
BIN
sounds/voice/default/ragekit3.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/ragekit4.ogg
Normal file
BIN
sounds/voice/default/ragekit4.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/ragekit5.ogg
Normal file
BIN
sounds/voice/default/ragekit5.ogg
Normal file
Binary file not shown.
BIN
sounds/voice/default/ragekit6.ogg
Normal file
BIN
sounds/voice/default/ragekit6.ogg
Normal file
Binary file not shown.
|
|
@ -11,7 +11,6 @@ version "4.3"
|
|||
#include "zscript/swwm_player.zsc"
|
||||
#include "zscript/swwm_inventory.zsc"
|
||||
#include "zscript/swwm_hud.zsc"
|
||||
#include "zscript/swwm_loudboi.zsc"
|
||||
#include "zscript/swwm_menu.zsc"
|
||||
// items
|
||||
#include "zscript/swwm_health.zsc"
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Unissix Crafts Blackfire Igniter (from UnSX 4, cut from initial SWWM GZ release)
|
||||
// Slot 6, spawns shared with Hellblazer
|
||||
|
||||
Class BlackfireIgniter : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
37
zscript/dlc/swwm_dlcammo.zsc
Normal file
37
zscript/dlc/swwm_dlcammo.zsc
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
// All DLC weapon ammo pickups
|
||||
|
||||
Class GravityCell : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class SplatCore : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class SkullAmmo : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class SkullBox : SkullAmmo
|
||||
{
|
||||
}
|
||||
|
||||
Class DarkCanister : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class SMW05Ammo : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class EMPCore : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class MadCore : Ammo
|
||||
{
|
||||
}
|
||||
|
||||
Class FunBalls : Ammo
|
||||
{
|
||||
}
|
||||
|
|
@ -1,2 +1,6 @@
|
|||
// Tach-Engine Technologies Microgravity Manipulator aka "Gravity Gun" (from Zanaveth Ultra Suite)
|
||||
// Slot 4, spawns shared with Wallbuster
|
||||
// Slot 3, spawns shared with Spreadgun
|
||||
|
||||
Class GravityGun : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Symnatek Reinforced Combat Hammer (from UnSX 5)
|
||||
// Slot 1, spawns shared with Pusher
|
||||
|
||||
Class ItamexHammer : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
// Dr. Locke's Instant Clone Army Deployer aka "Miniclone Machine" (from UnSX and SWWM series)
|
||||
// Slot 9, spawns shared with Candygun
|
||||
|
|
@ -1,2 +1,6 @@
|
|||
// PROWEL and TADEL artifacts, unknown creator (from UnSX series, based on nonsensical gibberish)
|
||||
// Slot 0, spawns shared with Ynykron Artifact
|
||||
// PROWEL and TADEL artifacts, by Nukritas 2xx of the University of Nos-Kora (from UnSX series, based on nonsensical gibberish)
|
||||
// Slot 9, spawns shared with Candy Gun
|
||||
|
||||
Class PROWELfartsupintheTADEL : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Dr. Locke's Instant Room Painter aka "Splatter" (from SWWM Series)
|
||||
// Slot 9, spawns shared with Candygun
|
||||
// Slot 4, spawns shared with Wallbuster
|
||||
|
||||
Class Splatter : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Dr. Locke's Spooky Scary Skeleton Shooter aka "Skull Launcher" (from unreleased "Weirdweapons" mod)
|
||||
// Slot 5, spawns shared with Eviscerator
|
||||
|
||||
Class SkullLauncher : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Dr. Locke's Super Happy Fun Ball (was meant for SWWM Z)
|
||||
// Slot 0, spawns shared with Ynykron Artifact
|
||||
|
||||
Class SuperHappyFunBall : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Blackmann Arms "Puntzer Gamma" SMW.05 Assault Carbine (was planned for SWWM Z)
|
||||
// Slot 7, spawns shared with Legacy Sparkster
|
||||
|
||||
Class PuntzerGamma : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
// Tach-Engine Technologies EMP Rail Carbine (planned for unreleased Zanaveth Ultra Suite 2, successor to EMP Rifle from first Ultra Suite)
|
||||
// Slot 8, shared spawn with Silver Bullet JET
|
||||
|
||||
Class EMPCarbine : SWWMWeapon
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1,414 @@
|
|||
// All the ammo items go here
|
||||
|
||||
// ============================================================================
|
||||
// Spreadgun / Wallbuster ammo
|
||||
// ============================================================================
|
||||
|
||||
// Common code for grouped shell handling and per-amount pickup messages
|
||||
Mixin Class SWWMShellAmmo
|
||||
{
|
||||
override string PickupMessage()
|
||||
{
|
||||
String tagstr = "$"..GetParentAmmo().GetClassName();
|
||||
tagstr.MakeUpper();
|
||||
if ( Amount > 1 )
|
||||
{
|
||||
tagstr = tagstr.."S";
|
||||
return String.Format("%d %s",Amount,StringTable.Localize(tagstr));
|
||||
}
|
||||
return StringTable.Localize(tagstr);
|
||||
}
|
||||
|
||||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
// drop unwanted shells
|
||||
if ( (item is 'Ammo') && (Ammo(item).GetParentAmmo() == GetParentAmmo()) )
|
||||
{
|
||||
int excess = Amount+item.Amount;
|
||||
if ( excess > MaxAmount ) excess -= MaxAmount;
|
||||
if ( excess < item.Amount )
|
||||
{
|
||||
// drop spares
|
||||
for ( int i=0; i<excess; i++ )
|
||||
{
|
||||
let s = Spawn(GetParentAmmo(),item.pos);
|
||||
double ang = FRandom[SpareShells](0,360);
|
||||
s.vel.xy = (cos(ang),sin(ang))*FRandom[SpareShells](1.,3.);
|
||||
s.vel.z = FRandom[SpareShells](2,5);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Super.HandlePickup(item);
|
||||
}
|
||||
}
|
||||
|
||||
Class RedShell : Ammo
|
||||
{
|
||||
Mixin SWWMShellAmmo;
|
||||
|
||||
Default
|
||||
{
|
||||
Stamina 500;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 60;
|
||||
Ammo.BackpackAmount 6;
|
||||
}
|
||||
}
|
||||
Class RedShell2 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
}
|
||||
}
|
||||
Class RedShell4 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
}
|
||||
}
|
||||
Class RedShell6 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
Class RedShell8 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 8;
|
||||
}
|
||||
}
|
||||
Class RedShell12 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 12;
|
||||
}
|
||||
}
|
||||
|
||||
Class GreenShell : Ammo
|
||||
{
|
||||
Mixin SWWMShellAmmo;
|
||||
|
||||
Default
|
||||
{
|
||||
Stamina 600;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 48;
|
||||
Ammo.BackpackAmount 4;
|
||||
}
|
||||
}
|
||||
Class GreenShell2 : GreenShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
}
|
||||
}
|
||||
Class GreenShell4 : GreenShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
}
|
||||
}
|
||||
Class GreenShell6 : GreenShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
Class GreenShell8 : GreenShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
|
||||
Class WhiteShell : Ammo
|
||||
{
|
||||
Mixin SWWMShellAmmo;
|
||||
|
||||
Default
|
||||
{
|
||||
Stamina 900;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 24;
|
||||
Ammo.BackpackAmount 2;
|
||||
}
|
||||
}
|
||||
Class WhiteShell2 : WhiteShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
}
|
||||
}
|
||||
Class WhiteShell4 : WhiteShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
}
|
||||
}
|
||||
Class WhiteShell6 : WhiteShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
|
||||
Class BlueShell : Ammo
|
||||
{
|
||||
Mixin SWWMShellAmmo;
|
||||
|
||||
Default
|
||||
{
|
||||
Stamina 700;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 30;
|
||||
Ammo.BackpackAmount 3;
|
||||
}
|
||||
}
|
||||
Class BlueShell2 : BlueShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
}
|
||||
}
|
||||
Class BlueShell4 : BlueShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
}
|
||||
}
|
||||
Class BlueShell6 : BlueShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
|
||||
Class BlackShell : Ammo
|
||||
{
|
||||
Mixin SWWMShellAmmo;
|
||||
|
||||
Default
|
||||
{
|
||||
Stamina 1000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 20;
|
||||
Ammo.BackpackAmount 2;
|
||||
}
|
||||
}
|
||||
Class BlackShell2 : BlackShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
}
|
||||
}
|
||||
Class BlackShell4 : BlackShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
}
|
||||
}
|
||||
|
||||
Class PurpleShell : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 800;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 24;
|
||||
Ammo.BackpackAmount 4;
|
||||
}
|
||||
}
|
||||
Class PurpleShell2 : PurpleShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
}
|
||||
}
|
||||
Class PurpleShell4 : PurpleShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
}
|
||||
}
|
||||
Class PurpleShell6 : PurpleShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
|
||||
Class GoldShell : Ammo
|
||||
{
|
||||
Mixin SWWMShellAmmo;
|
||||
|
||||
Default
|
||||
{
|
||||
Stamina 120000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 6;
|
||||
Ammo.BackpackAmount 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Eviscerator ammo
|
||||
// ============================================================================
|
||||
|
||||
Class EvisceratorShell : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 2500;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 60;
|
||||
Ammo.BackpackAmount 6;
|
||||
}
|
||||
}
|
||||
|
||||
Class EvisceratorSixPack : EvisceratorShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 6;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Hellblazer ammo
|
||||
// ============================================================================
|
||||
|
||||
Class HellblazerMissiles : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 6000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 12;
|
||||
Ammo.BackpackAmount 4;
|
||||
}
|
||||
}
|
||||
|
||||
Class HellblazerCrackshots : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 8000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 8;
|
||||
Ammo.BackpackAmount 2;
|
||||
}
|
||||
}
|
||||
|
||||
Class HellblazerRavagers : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 12000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 4;
|
||||
Ammo.BackpackAmount 1;
|
||||
}
|
||||
}
|
||||
|
||||
Class HellblazerWarheads : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 25000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 2;
|
||||
Ammo.BackpackAmount 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Sparkster ammo
|
||||
// ============================================================================
|
||||
|
||||
Class SparkUnit : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 20000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 20;
|
||||
Ammo.BackpackAmount 2;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Silver Bullet ammo
|
||||
// ============================================================================
|
||||
|
||||
Class SilverBulletAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 6000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 12;
|
||||
Ammo.BackpackAmount 1;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Candygun ammo
|
||||
// ============================================================================
|
||||
|
||||
Class CandyGunAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 80000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 8;
|
||||
Ammo.BackpackAmount 0;
|
||||
}
|
||||
}
|
||||
|
||||
Class CandyGunSpares : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 150000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 4;
|
||||
Ammo.BackpackAmount 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Ynykron ammo
|
||||
// ============================================================================
|
||||
|
||||
Class YnykronAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 400000;
|
||||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 2;
|
||||
Ammo.BackpackAmount 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,2 +1,10 @@
|
|||
// Imanaki Corp Hellfire Cannon Mk3, aka "Hellblazer" (from SWWM series, originally inspired by the Hellraiser from OMGWEAPONS)
|
||||
// Slot 6, replaces Rocket Launcher, Phoenix Rod, Firestorm
|
||||
|
||||
Class Hellblazer : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 40000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,14 @@
|
|||
// Blackmann Arms "Wallbuster" Heavy Armor Perforator Shotgun (planned for unreleased Total Destruction UT mod as the "Armor Perforator")
|
||||
// Slot 3, replaces Super Shotgun, Ethereal Crossbow, Frost Shards
|
||||
|
||||
Class WallbusterReloadMenu : GenericMenu
|
||||
{
|
||||
}
|
||||
|
||||
Class Wallbuster : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 15000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,35 +10,69 @@ enum ESWWMGZChannels
|
|||
CHAN_JETPACK = 63206
|
||||
};
|
||||
|
||||
// Scoreing
|
||||
// Misc. Utility code
|
||||
Class SWWMUtility
|
||||
{
|
||||
static void StripColor( out String str )
|
||||
{
|
||||
int len = str.CodePointCount();
|
||||
for ( int i=0; i<len; i++ )
|
||||
{
|
||||
int remlen = 0;
|
||||
if ( str.GetNextCodePoint(i) != 0x1C )
|
||||
continue;
|
||||
remlen++;
|
||||
if ( str.GetNextCodePoint(i+remlen) == 0x5B )
|
||||
while ( str.GetNextCodePoint(i+remlen) != 0x5D )
|
||||
remlen++;
|
||||
remlen++;
|
||||
str.Remove(i,remlen);
|
||||
len -= remlen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scoring
|
||||
Class SWWMCredits : Thinker
|
||||
{
|
||||
PlayerInfo myplayer;
|
||||
int credits;
|
||||
|
||||
static void GiveCredits( PlayerInfo p, int amount )
|
||||
static void Give( PlayerInfo p, int amount )
|
||||
{
|
||||
let c = FindCredits(p);
|
||||
let c = Find(p);
|
||||
if ( !c ) return;
|
||||
if ( (c.credits+amount < c.credits) || (c.credits+amount > 999999999) ) c.credits = 999999999;
|
||||
else c.credits += amount;
|
||||
}
|
||||
|
||||
static bool TakeCredits( PlayerInfo p, int amount )
|
||||
static clearscope bool CanTake( PlayerInfo p, int amount )
|
||||
{
|
||||
let c = FindCredits(p);
|
||||
let c = Find(p);
|
||||
if ( !c ) return false;
|
||||
// too much!
|
||||
if ( (c.credits-amount < 0) || (c.credits-amount > c.credits) ) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool Take( PlayerInfo p, int amount )
|
||||
{
|
||||
let c = Find(p);
|
||||
if ( !c ) return false;
|
||||
// too much!
|
||||
if ( (c.credits-amount < 0) || (c.credits-amount > c.credits) ) return false;
|
||||
c.credits -= amount;
|
||||
return true;
|
||||
}
|
||||
|
||||
static int GetCredits( PlayerInfo p )
|
||||
static clearscope int Get( PlayerInfo p )
|
||||
{
|
||||
let c = FindCredits(p);
|
||||
let c = Find(p);
|
||||
if ( !c ) return 0;
|
||||
return c.credits;
|
||||
}
|
||||
|
||||
private static SWWMCredits FindCredits( PlayerInfo p )
|
||||
static clearscope SWWMCredits Find( PlayerInfo p )
|
||||
{
|
||||
let ti = ThinkerIterator.Create("SWWMCredits",STAT_STATIC);
|
||||
SWWMCredits t;
|
||||
|
|
@ -47,10 +81,129 @@ Class SWWMCredits : Thinker
|
|||
if ( t.myplayer != p ) continue;
|
||||
return t;
|
||||
}
|
||||
t = new("SWWMCredits");
|
||||
t.ChangeStatNum(STAT_STATIC);
|
||||
t.myplayer = p;
|
||||
return t;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Trading history between players
|
||||
Class SWWMTrade
|
||||
{
|
||||
int timestamp, type;
|
||||
String other, what;
|
||||
}
|
||||
|
||||
Class SWWMTradeHistory : Thinker
|
||||
{
|
||||
PlayerInfo myplayer;
|
||||
Array<SWWMTrade> ent;
|
||||
|
||||
static void RegisterSend( PlayerInfo p, PlayerInfo other, String what )
|
||||
{
|
||||
let th = Find(p);
|
||||
if ( !th ) return;
|
||||
SWWMTrade t = new("SWWMTrade");
|
||||
t.timestamp = gametic;
|
||||
t.type = 0;
|
||||
t.other = other.GetUserName();
|
||||
t.what = what;
|
||||
th.ent.Push(t);
|
||||
}
|
||||
static void RegisterReceive( PlayerInfo p, PlayerInfo other, String what )
|
||||
{
|
||||
let th = Find(p);
|
||||
if ( !th ) return;
|
||||
SWWMTrade t = new("SWWMTrade");
|
||||
t.timestamp = gametic;
|
||||
t.type = 1;
|
||||
t.other = other.GetUserName();
|
||||
t.what = what;
|
||||
th.ent.Push(t);
|
||||
}
|
||||
|
||||
static clearscope SWWMTradeHistory Find( PlayerInfo p )
|
||||
{
|
||||
let ti = ThinkerIterator.Create("SWWMTradeHistory",STAT_STATIC);
|
||||
SWWMTradeHistory th;
|
||||
while ( th = SWWMTradeHistory(ti.Next()) )
|
||||
{
|
||||
if ( th.myplayer != p ) continue;
|
||||
return th;
|
||||
}
|
||||
return Null;
|
||||
}
|
||||
}
|
||||
|
||||
// Lore holder
|
||||
Class SWWMLore
|
||||
{
|
||||
String tag, text;
|
||||
}
|
||||
|
||||
Class SWWMLoreLibrary : Thinker
|
||||
{
|
||||
PlayerInfo myplayer;
|
||||
Array<SWWMLore> ent;
|
||||
|
||||
void DirectAdd( String ref )
|
||||
{
|
||||
ref.MakeUpper();
|
||||
String tag = String.Format("SWWM_LORETAG_%s",ref);
|
||||
String text = String.Format("SWWM_LORETXT_%s",ref);
|
||||
// check that it's valid
|
||||
if ( StringTable.Localize(tag,false) == tag ) return;
|
||||
if ( StringTable.Localize(text,false) == text ) return;
|
||||
// check if existing
|
||||
for ( int i=0; i<ent.Size(); i++ )
|
||||
{
|
||||
if ( ent[i].tag != tag ) continue;
|
||||
return;
|
||||
}
|
||||
SWWMLore e = new("SWWMLore");
|
||||
e.tag = "$"..tag;
|
||||
e.text = "$"..text;
|
||||
// sorted add
|
||||
String loca = StringTable.Localize(e.tag), locb;
|
||||
int cpa, cpb;
|
||||
for ( int i=0; i<ent.Size(); i++ )
|
||||
{
|
||||
locb = StringTable.Localize(ent[i].tag);
|
||||
bool less = false;
|
||||
int lena = loca.CodePointCount(),
|
||||
lenb = locb.CodePointCount();
|
||||
int lim = min(lena,lenb);
|
||||
for ( int j=0; j<lim; j++ )
|
||||
{
|
||||
cpa = loca.GetNextCodePoint(j);
|
||||
cpb = locb.GetNextCodePoint(j);
|
||||
if ( cpa >= cpb ) continue;
|
||||
less = true;
|
||||
break;
|
||||
}
|
||||
if ( !less ) continue;
|
||||
ent.Insert(i,e);
|
||||
return;
|
||||
}
|
||||
// append otherwise
|
||||
ent.Push(e);
|
||||
}
|
||||
|
||||
static void Add( PlayerInfo p, String ref )
|
||||
{
|
||||
let ll = Find(p);
|
||||
if ( !ll ) return;
|
||||
ll.DirectAdd(ref);
|
||||
}
|
||||
|
||||
static clearscope SWWMLoreLibrary Find( PlayerInfo p )
|
||||
{
|
||||
let ti = ThinkerIterator.Create("SWWMLoreLibrary",STAT_STATIC);
|
||||
SWWMLoreLibrary ll;
|
||||
while ( ll = SWWMLoreLibrary(ti.Next()) )
|
||||
{
|
||||
if ( ll.myplayer != p ) continue;
|
||||
return ll;
|
||||
}
|
||||
return Null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -638,7 +791,6 @@ Class SWWMHandler : EventHandler
|
|||
int lastkill[MAXPLAYERS];
|
||||
int multilevel[MAXPLAYERS];
|
||||
int lastitemcount[MAXPLAYERS];
|
||||
int creditsbridge[MAXPLAYERS]; // curse the gap between play/ui
|
||||
|
||||
transient CVar mutevoice;
|
||||
|
||||
|
|
@ -682,10 +834,72 @@ Class SWWMHandler : EventHandler
|
|||
|
||||
override void PlayerEntered( PlayerEvent e )
|
||||
{
|
||||
// create some static thinkers for this player
|
||||
PlayerInfo p = players[e.playernumber];
|
||||
SWWMTradeHistory th = SWWMTradeHistory.Find(p);
|
||||
if ( !th )
|
||||
{
|
||||
th = new("SWWMTradeHistory");
|
||||
th.ChangeStatNum(Thinker.STAT_STATIC);
|
||||
th.myplayer = p;
|
||||
}
|
||||
SWWMCredits c = SWWMCredits.Find(p);
|
||||
if ( !c )
|
||||
{
|
||||
c = new("SWWMCredits");
|
||||
c.ChangeStatNum(Thinker.STAT_STATIC);
|
||||
c.myplayer = p;
|
||||
}
|
||||
SWWMLoreLibrary l = SWWMLoreLibrary.Find(p);
|
||||
if ( !l )
|
||||
{
|
||||
l = new("SWWMLoreLibrary");
|
||||
l.ChangeStatNum(Thinker.STAT_STATIC);
|
||||
l.myplayer = p;
|
||||
// pre-add some lore
|
||||
l.DirectAdd("Belt");
|
||||
l.DirectAdd("Collar");
|
||||
l.DirectAdd("Demolitionist");
|
||||
l.DirectAdd("Display");
|
||||
l.DirectAdd("Hammerspace");
|
||||
l.DirectAdd("Ibuki");
|
||||
l.DirectAdd("Knowledgebase");
|
||||
l.DirectAdd("Propulsor");
|
||||
l.DirectAdd("Saya");
|
||||
l.DirectAdd("Voicebox");
|
||||
if ( gameinfo.gametype&GAME_Doom )
|
||||
{
|
||||
l.DirectAdd("Doomguy");
|
||||
l.DirectAdd("Earth");
|
||||
l.DirectAdd("Hell");
|
||||
l.DirectAdd("UAC");
|
||||
}
|
||||
else if ( gameinfo.gametype&GAME_Heretic )
|
||||
{
|
||||
l.DirectAdd("Corvus");
|
||||
l.DirectAdd("Parthoris");
|
||||
l.DirectAdd("SerpentRiders");
|
||||
l.DirectAdd("Sidhe");
|
||||
}
|
||||
else if ( gameinfo.gametype&GAME_Hexen )
|
||||
{
|
||||
l.DirectAdd("Baratus");
|
||||
l.DirectAdd("Cronos");
|
||||
l.DirectAdd("Daedolon");
|
||||
l.DirectAdd("Parias");
|
||||
l.DirectAdd("SerpentRiders");
|
||||
}
|
||||
}
|
||||
// reset some vars
|
||||
multilevel[e.playernumber] = 0;
|
||||
lastkill[e.playernumber] = int.min;
|
||||
}
|
||||
|
||||
override void PlayerRespawned( PlayerEvent e )
|
||||
{
|
||||
PlayerEntered(e);
|
||||
}
|
||||
|
||||
override void WorldTick()
|
||||
{
|
||||
if ( !mutevoice ) mutevoice = CVar.GetCVar('swwm_mutevoice',players[consoleplayer]);
|
||||
|
|
@ -706,8 +920,6 @@ Class SWWMHandler : EventHandler
|
|||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
if ( !playeringame[i] ) continue;
|
||||
// while we're at it, also update the bridge var for counting credits
|
||||
creditsbridge[i] = SWWMCredits.GetCredits(players[i]);
|
||||
if ( players[i].itemcount > lastitemcount[i] )
|
||||
{
|
||||
int score = 25;
|
||||
|
|
@ -716,7 +928,7 @@ Class SWWMHandler : EventHandler
|
|||
score = 2500;
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTITEM"),players[i].GetUserName(),score);
|
||||
}
|
||||
SWWMCredits.GiveCredits(players[i],score);
|
||||
SWWMCredits.Give(players[i],score);
|
||||
lastitemcount[i] = players[i].itemcount;
|
||||
}
|
||||
}
|
||||
|
|
@ -775,17 +987,18 @@ Class SWWMHandler : EventHandler
|
|||
{
|
||||
if ( !mutevoice ) mutevoice = CVar.GetCVar('swwm_mutevoice',players[consoleplayer]);
|
||||
if ( e.Thing.player ) tookdamage[e.Thing.PlayerNumber()] = true;
|
||||
if ( e.DamageSource && e.DamageSource.bISMONSTER && (e.Thing == players[consoleplayer].mo) && (e.Thing.Health > 0) )
|
||||
if ( e.DamageSource && (e.DamageSource.bISMONSTER || e.DamageSource.player) && (e.Thing == players[consoleplayer].mo) && (e.Thing.Health > 0) )
|
||||
{
|
||||
if ( (!lastcombat || (gametic > lastcombat+20)) && (mutevoice.GetInt() < 1) )
|
||||
lastcombat = AddOneliner(e.Thing.IsFriend(e.DamageSource)?"friendhit":"gethit",15);
|
||||
highesttic = gametic;
|
||||
}
|
||||
if ( e.DamageSource && (e.DamageSource == players[consoleplayer].mo) && (e.Thing.bISMONSTER || e.Thing.player) )
|
||||
{
|
||||
if ( e.Thing.IsFriend(e.DamageSource) )
|
||||
{
|
||||
// no comment if it's a friendly (to be added)
|
||||
}
|
||||
else
|
||||
{
|
||||
// hurt comment
|
||||
if ( (!lastcombat || (gametic > lastcombat+20)) && (mutevoice.GetInt() < 1) )
|
||||
lastcombat = AddOneliner("gethit",15);
|
||||
lastcombat = AddOneliner("hitfriend",15);
|
||||
highesttic = gametic;
|
||||
}
|
||||
}
|
||||
|
|
@ -817,7 +1030,7 @@ Class SWWMHandler : EventHandler
|
|||
score += 5000;
|
||||
Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER",e.DamageSource.player.GetUserName()),5000);
|
||||
}
|
||||
SWWMCredits.GiveCredits(e.DamageSource.player,score);
|
||||
SWWMCredits.Give(e.DamageSource.player,score);
|
||||
// TODO floating score for HUD
|
||||
spreecount[pnum]++;
|
||||
}
|
||||
|
|
@ -870,6 +1083,17 @@ Class SWWMHandler : EventHandler
|
|||
}
|
||||
}
|
||||
|
||||
override void CheckReplacement( ReplaceEvent e )
|
||||
{
|
||||
if ( (e.Replacee is 'Pistol') || (e.Replacee is 'GoldWand') || (e.Replacee is 'FWeapFist') || (e.Replacee is 'CWeapMace') || (e.Replacee is 'MWeapWand') ) e.Replacement = 'ExplodiumGun';
|
||||
else if ( (e.Replacee is 'BFG9000') || (e.Replacee is 'Mace') )
|
||||
{
|
||||
if ( Random[Replacements](0,1) ) e.Replacement = 'Ynykron';
|
||||
else e.Replacement = 'CandyGun';
|
||||
}
|
||||
else if ( e.Replacee is 'MWeaponPiece1' ) e.Replacement = 'CandyGun';
|
||||
}
|
||||
|
||||
override void NetworkProcess( ConsoleEvent e )
|
||||
{
|
||||
if ( e.Name ~== "swwmgesture" )
|
||||
|
|
@ -890,6 +1114,32 @@ Class SWWMHandler : EventHandler
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if ( e.Name.Left(14) ~== "swwmstoregive." )
|
||||
{
|
||||
Class<Inventory> item = e.Name.Mid(14);
|
||||
if ( !item ) return;
|
||||
if ( SWWMCredits.Take(players[e.Args[0]],e.Args[1]) )
|
||||
{
|
||||
players[e.Args[0]].mo.GiveInventory(item,1);
|
||||
if ( item is 'Weapon' ) players[e.Args[0]].mo.A_SelectWeapon((Class<Weapon>)(item));
|
||||
}
|
||||
}
|
||||
else if ( e.Name.Left(10) ~== "swwmtrade." )
|
||||
{
|
||||
Class<Inventory> item = e.Name.Mid(10);
|
||||
if ( !item ) return;
|
||||
let def = GetDefaultByType(item);
|
||||
if ( players[e.Args[1]].mo.GiveInventory(item,1) )
|
||||
{
|
||||
players[e.Args[0]].mo.TakeInventory(item,1);
|
||||
// add to history
|
||||
SWWMTradeHistory.RegisterSend(players[e.Args[0]],players[e.Args[1]],def.GetTag());
|
||||
SWWMTradeHistory.RegisterReceive(players[e.Args[1]],players[e.Args[0]],def.GetTag());
|
||||
// add messages
|
||||
if ( e.Args[0] == consoleplayer ) Console.Printf(StringTable.Localize("$SWWM_MSGSENT"),def.GetTag(),players[e.Args[1]].GetUserName());
|
||||
if ( e.Args[1] == consoleplayer ) Console.Printf(StringTable.Localize("$SWWM_MSGRECV"),players[e.Args[0]].GetUserName(),def.GetTag());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void DoFlash( Actor camera, Color c, int duration )
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Mr. BIG SHOT Industries "Eviscerator" High Load Flak Cannon (from SWWM series)
|
||||
// Slot 5, replaces Chaingun, Dragon Claw, Hammer of Retribution
|
||||
|
||||
Class Eviscerator : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 25000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Ynykron Artifact (from UnSX Series, featured in SWWM Platinum as a secret weapon)
|
||||
// Slot 0, replaces BFG9000, Firemace, Wraithverge (arc)
|
||||
|
||||
Class Ynykron : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 600000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Dr. Locke's Mighty Wolf Breath Airgun aka "Deep Impact" Airblaster (from SWWM series)
|
||||
// Slot 1, replaces Fist, Staff, Hexen starting weapons
|
||||
|
||||
Class DeepImpact : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 2000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,8 +107,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
// update interpolators
|
||||
HealthInter.Update(CPlayer.health);
|
||||
let hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
|
||||
if ( hnd ) ScoreInter.Update(hnd.creditsbridge[CPlayer.mo.PlayerNumber()]);
|
||||
else ScoreInter.Update(0);
|
||||
ScoreInter.Update(SWWMCredits.Get(CPlayer));
|
||||
let d = Demolitionist(CPlayer.mo);
|
||||
if ( d )
|
||||
{
|
||||
|
|
@ -325,18 +324,7 @@ Class SWWMStatusBar : BaseStatusBar
|
|||
Screen.Dim("Black",.8,0,Screen.GetHeight()-int(15*hs.y),Screen.GetWidth(),int(15*hs.y));
|
||||
String pname = players[consoleplayer].GetUserName();
|
||||
// strip colors
|
||||
for ( int i=0; i<pname.CodePointCount(); i++ )
|
||||
{
|
||||
int remlen = 0;
|
||||
if ( pname.GetNextCodePoint(i) != 0x1C )
|
||||
continue;
|
||||
remlen++;
|
||||
if ( pname.GetNextCodePoint(i+remlen) == 0x5B )
|
||||
while ( pname.GetNextCodePoint(i+remlen) != 0x5D )
|
||||
remlen++;
|
||||
remlen++;
|
||||
pname.Remove(i,remlen);
|
||||
}
|
||||
SWWMUtility.StripColor(pname);
|
||||
String fullstr = String.Format("\cq%s\cd@\cqdemolitionist%d\cn ~ \c-wall %s%s",pname,consoleplayer+1,txt,mTewiFont.mFont.GetCursor());
|
||||
// cut out to fit
|
||||
int w = mTewiFont.mFont.StringWidth(fullstr);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,11 @@ Class SWWMArmor : Armor
|
|||
}
|
||||
}
|
||||
|
||||
// gives armor when used
|
||||
Class SWWMSpareArmor : Inventory
|
||||
{
|
||||
}
|
||||
|
||||
// Base casing classes
|
||||
Class SWWMCasing : Actor
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Tach-Engine Technologies Microfusion Rotary Hammer aka "Pusher" (planned for unreleased Zanaveth Ultra Suite 2)
|
||||
// Slot 1, replaces Chainsaw, Gauntlets, Timon's Axe
|
||||
|
||||
Class PusherWeapon : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 5000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
// Akari Labs "Loudboi" Voicebox
|
||||
// With this you can E M I T
|
||||
// Additional voice packs will be made later
|
||||
|
|
@ -2,7 +2,25 @@
|
|||
Class SWWMKnowledgeBaseMenu : GenericMenu
|
||||
{
|
||||
// TODO everything, just have it be a blank menu for now
|
||||
TextureID MainWindow, TabSeparator, WindowSeparator;
|
||||
Font TewiFont;
|
||||
int curtab;
|
||||
// for scrolling
|
||||
int sel0, sel1, sel2;
|
||||
// inventory lists
|
||||
Array<Inventory> invlist;
|
||||
// lore stuff
|
||||
SWWMLoreLibrary lorelib;
|
||||
// store prompt
|
||||
Array<Class<Inventory> > storelist;
|
||||
bool buying;
|
||||
int buyitem;
|
||||
int buyamount;
|
||||
// trading
|
||||
SWWMTradeHistory tradelib;
|
||||
// temporary bottom messages, such as "not enough money"
|
||||
String tmsg;
|
||||
int tmsgtic;
|
||||
|
||||
override void Init( Menu parent )
|
||||
{
|
||||
|
|
@ -14,6 +32,11 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
return;
|
||||
}
|
||||
TewiFont = Font.GetFont('TewiShaded');
|
||||
MainWindow = TexMan.CheckForTexture("graphics/KBase/MainWindow.png",TexMan.Type_Any);
|
||||
TabSeparator = TexMan.CheckForTexture("graphics/KBase/TabSeparator.png",TexMan.Type_Any);
|
||||
WindowSeparator = TexMan.CheckForTexture("graphics/KBase/WindowSeparator.png",TexMan.Type_Any);
|
||||
curtab = CVar.GetCVar('swwm_lasttab',players[consoleplayer]).GetInt();
|
||||
if ( (curtab < 0) || (curtab > 7) ) curtab = 0;
|
||||
}
|
||||
|
||||
override bool MenuEvent( int mkey, bool fromcontroller )
|
||||
|
|
@ -33,22 +56,11 @@ Class SWWMKnowledgeBaseMenu : GenericMenu
|
|||
{
|
||||
Super.Drawer();
|
||||
String str;
|
||||
double hs = min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/400.));
|
||||
if ( hs < 1. )
|
||||
{
|
||||
str = StringTable.Localize("$SWWM_TOOSMALL");
|
||||
BrokenLines l = TewiFont.BreakLines(str,CleanWidth/2);
|
||||
int xx, yy = (CleanHeight-l.Count()*TewiFont.GetHeight())/2;
|
||||
for ( int i=0; i<l.Count(); i++ )
|
||||
{
|
||||
xx = (CleanWidth-TewiFont.StringWidth(l.StringAt(i)))/2;
|
||||
Screen.DrawText(TewiFont,Font.CR_FIRE,xx,yy,l.StringAt(i),DTA_Clean,true);
|
||||
yy += TewiFont.GetHeight();
|
||||
}
|
||||
return;
|
||||
}
|
||||
double hs = max(min(floor(Screen.GetWidth()/640.),floor(Screen.GetHeight()/400.)),1.);
|
||||
Vector2 ss = (Screen.GetWidth(),Screen.GetHeight())/hs;
|
||||
Vector2 origin = (ss.x-640,ss.y-400)/2.;
|
||||
Screen.DrawTexture(MainWindow,false,origin.x,origin.y,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
str = StringTable.Localize("$SWWM_COMINGSOON");
|
||||
Vector2 ss = (Screen.GetWidth()/hs,Screen.GetHeight()/hs);
|
||||
Screen.DrawText(TewiFont,Font.CR_FIRE,(ss.x-TewiFont.StringWidth(str))/2.,(ss.y-TewiFont.GetHeight())/2.,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ Class Demolitionist : PlayerPawn
|
|||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( !player ) return;
|
||||
if ( !myvoice ) myvoice = CVar.GetCVar('swwm_voicetype',player);
|
||||
if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player);
|
||||
if ( player.onground && !bNoGravity && !lastground && (waterlevel < 2) && (health > 0) )
|
||||
|
|
@ -156,7 +157,8 @@ Class Demolitionist : PlayerPawn
|
|||
Actor a;
|
||||
for ( int i=-1; i<=1; i+=2 ) for ( int j=1; j<4; j++ )
|
||||
{
|
||||
a = Spawn("DashTrail",Vec3Angle(30,angle+i*160,30));
|
||||
a = Spawn("DashTrail",Vec3Angle(15,angle+i*140,35));
|
||||
a.target = self;
|
||||
a.vel = (RotateVector((j,0),angle+i*160),0)-(0,0,1)*j;
|
||||
a.vel -= vel*.5;
|
||||
}
|
||||
|
|
@ -166,7 +168,8 @@ Class Demolitionist : PlayerPawn
|
|||
Actor a;
|
||||
for ( int i=-1; i<=1; i+=2 ) for ( int j=1; j<4; j++ )
|
||||
{
|
||||
a = Spawn("DashTrail",Vec3Angle(10,angle+i*160,30));
|
||||
a = Spawn("DashTrail",Vec3Angle(10,angle+i*140,40));
|
||||
a.target = self;
|
||||
a.vel = .5*(RotateVector((j,0),angle+i*160),0)-(0,0,1)*j;
|
||||
a.vel -= vel*.5;
|
||||
}
|
||||
|
|
@ -289,6 +292,12 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
override void PlayIdle()
|
||||
{
|
||||
if ( !player )
|
||||
{
|
||||
if ( !InStateSequence(CurState,FindState("Spawn")) )
|
||||
SetStateLabel("Spawn");
|
||||
return;
|
||||
}
|
||||
if ( player.health <= 0 ) return;
|
||||
if ( !bNoGravity && player.onground && (waterlevel < 3) )
|
||||
{
|
||||
|
|
@ -356,6 +365,12 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
override void PlayRunning()
|
||||
{
|
||||
if ( !player )
|
||||
{
|
||||
if ( !InStateSequence(CurState,FindState("See")) )
|
||||
SetStateLabel("See");
|
||||
return;
|
||||
}
|
||||
if ( player.health <= 0 ) return;
|
||||
if ( !bNoGravity && player.onground && (waterlevel < 3) )
|
||||
{
|
||||
|
|
@ -416,7 +431,7 @@ Class Demolitionist : PlayerPawn
|
|||
if ( InStateSequence(CurState,FindState("Dash"))
|
||||
|| InStateSequence(CurState,FindState("Jump")) )
|
||||
return; // don't cancel dash/jump
|
||||
if ( player.crouchdir == -1 ) SetStateLabel("CrouchMissile");
|
||||
if ( player && (player.crouchdir == -1) ) SetStateLabel("CrouchMissile");
|
||||
else SetStateLabel("Missile");
|
||||
}
|
||||
override void PlayAttacking2()
|
||||
|
|
@ -435,19 +450,19 @@ Class Demolitionist : PlayerPawn
|
|||
if ( lastdamage > 60 )
|
||||
{
|
||||
A_StartSound("*pain25",CHAN_VOICE);
|
||||
if ( mute.GetInt() < 4 )
|
||||
if ( mute && myvoice && (mute.GetInt() < 4) )
|
||||
A_StartSound(String.Format("voice/%s/hipain",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP);
|
||||
}
|
||||
else if ( lastdamage > 40 )
|
||||
{
|
||||
A_StartSound("*pain50",CHAN_VOICE);
|
||||
if ( mute.GetInt() < 4 )
|
||||
if ( mute && myvoice && (mute.GetInt() < 4) )
|
||||
A_StartSound(String.Format("voice/%s/pain",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP);
|
||||
}
|
||||
else if ( lastdamage > 0 )
|
||||
{
|
||||
A_StartSound("*pain100",CHAN_VOICE);
|
||||
if ( mute.GetInt() < 4 )
|
||||
if ( mute && myvoice && (mute.GetInt() < 4) )
|
||||
A_StartSound(String.Format("voice/%s/lopain",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP);
|
||||
}
|
||||
}
|
||||
|
|
@ -456,11 +471,12 @@ Class Demolitionist : PlayerPawn
|
|||
if ( !myvoice ) myvoice = CVar.GetCVar('swwm_voicetype',player);
|
||||
if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player);
|
||||
A_PlayerScream();
|
||||
if ( mute.GetInt() < 4 )
|
||||
if ( mute && myvoice && (mute.GetInt() < 4) )
|
||||
A_StartSound(String.Format("voice/%s/death",myvoice.GetString()),CHAN_DEMOVOICE,CHANF_OVERLAP);
|
||||
}
|
||||
override bool OnGiveSecret( bool printmsg, bool playsound )
|
||||
{
|
||||
if ( !player ) return false;
|
||||
if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player);
|
||||
int score = 500;
|
||||
// last secret (this is called before counting it up, so have to subtract)
|
||||
|
|
@ -471,13 +487,16 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
else Console.Printf(StringTable.Localize("$SWWM_FINDSECRET"),player.GetUserName(),score);
|
||||
if ( CheckLocalView() && (mute.GetInt() < 2) ) SWWMHandler.AddOneliner("findsecret",40);
|
||||
SWWMCredits.GiveCredits(player,score);
|
||||
SWWMCredits.Give(player,score);
|
||||
return true;
|
||||
}
|
||||
override void AddInventory( Inventory item )
|
||||
{
|
||||
if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player);
|
||||
Super.AddInventory(item);
|
||||
if ( !player ) return;
|
||||
// add lore if any
|
||||
SWWMLoreLibrary.Add(player,item.GetClassName());
|
||||
if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player);
|
||||
if ( (item is 'Weapon') && CheckLocalView() && (mute.GetInt() < 2) )
|
||||
SWWMHandler.AddOneliner("getweapon");
|
||||
if ( (item is 'Key') && !key_reentrant )
|
||||
|
|
@ -485,7 +504,7 @@ Class Demolitionist : PlayerPawn
|
|||
// score
|
||||
int score = 250;
|
||||
Console.Printf(StringTable.Localize("$SWWM_FINDKEY"),player.GetUserName(),item.GetTag(),score);
|
||||
SWWMCredits.GiveCredits(player,score);
|
||||
SWWMCredits.Give(player,score);
|
||||
// share all keys in mp
|
||||
for ( int i=0; i<MAXPLAYERS; i++ )
|
||||
{
|
||||
|
|
@ -499,6 +518,7 @@ Class Demolitionist : PlayerPawn
|
|||
}
|
||||
override bool UseInventory( Inventory item )
|
||||
{
|
||||
if ( !player ) return Super.UseInventory(item);
|
||||
if ( !mute ) mute = CVar.GetCVar('swwm_mutevoice',player);
|
||||
if ( !(item is 'PuzzleItem') || (mute.GetInt() >= 2) )
|
||||
return Super.UseInventory(item);
|
||||
|
|
@ -522,6 +542,14 @@ Class Demolitionist : PlayerPawn
|
|||
b.A_CheckTerrain();
|
||||
}
|
||||
}
|
||||
override bool Used( Actor user )
|
||||
{
|
||||
if ( !(user is 'Demolitionist') || !user.player ) return false;
|
||||
CVar othermute = CVar.GetCVar('swwm_mutevoice',user.player);
|
||||
if ( (user.player == players[consoleplayer]) && (othermute.GetInt() < 2) )
|
||||
SWWMHandler.AddOneliner("greet");
|
||||
return false;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -723,15 +751,22 @@ Class DashTrail : Actor
|
|||
{
|
||||
Super.PostBeginPlay();
|
||||
SetState(FindState("Spawn")+Random[ExploS](0,7));
|
||||
let t = Spawn("DashTrail2",pos);
|
||||
let t = Spawn("DashTrail2",level.Vec3Offset(pos,vel*.3));
|
||||
t.target = target;
|
||||
t.vel = vel*1.2;
|
||||
let s = Spawn("SWWMSmoke",pos);
|
||||
let s = Spawn("SWWMSmoke",level.Vec3Offset(pos,vel*1.6));
|
||||
s.vel = vel*.8;
|
||||
s.SetShade(Color(1,1,1)*Random[ExploS](64,128));
|
||||
s.special1 = Random[ExploS](2,4);
|
||||
s.scale *= 1.4;
|
||||
s.alpha *= .3;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
// hack
|
||||
if ( target && (players[consoleplayer].Camera == target) ) Warp(target,pos.x,pos.y,pos.z,0,WARPF_ABSOLUTEPOSITION|WARPF_COPYINTERPOLATION);
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -762,6 +797,12 @@ Class DashTrail2 : Actor
|
|||
Super.PostBeginPlay();
|
||||
SetState(FindState("Spawn")+Random[ExploS](0,7));
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
// hack
|
||||
if ( target && (players[consoleplayer].Camera == target) ) Warp(target,pos.x,pos.y,pos.z,0,WARPF_ABSOLUTEPOSITION|WARPF_COPYINTERPOLATION);
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Blackmann "Rhino Stopper" Spreadgun (from Instant Action 3, also planned for Zanaveth Ultra Suite 2)
|
||||
// Slot 3, replaces Shotgun, Ethereal Crossbow, Serpent Staff
|
||||
|
||||
Class Spreadgun : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 10000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Decade Mechanics Model S-5 Biospark Carbine aka "Legacy Sparkster" (from UnSX series, also featured in SWWM series)
|
||||
// Slot 7, replaces Plasma Rifle, Hellstaff, Arc of Death
|
||||
|
||||
Class Sparkster : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 80000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -293,6 +293,13 @@ Class ExplodiumGun : SWWMWeapon
|
|||
ui TextureID WeaponBox;
|
||||
ui HUDFont mTewiFont;
|
||||
|
||||
override void AttachToOwner( Actor other )
|
||||
{
|
||||
Super.AttachToOwner(other);
|
||||
// additional lore
|
||||
SWWMLoreLibrary.Add(other.player,"Munch");
|
||||
}
|
||||
|
||||
override void DrawWeapon( double TicFrac, double bx, double by, Vector2 hs, Vector2 ss )
|
||||
{
|
||||
if ( !WeaponBox ) WeaponBox = TexMan.CheckForTexture("graphics/HUD/ExplodiumDisplay.png",TexMan.Type_Any);
|
||||
|
|
@ -433,6 +440,7 @@ Class ExplodiumGun : SWWMWeapon
|
|||
Obituary "$O_EXPLODIUM";
|
||||
Weapon.UpSound "explodium/select";
|
||||
Weapon.SlotNumber 2;
|
||||
Stamina 600;
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,2 +1,15 @@
|
|||
// Munch Innovations "Taste the Sweetness" Candy Gun (from unreleased "Weird Weapons" UT minimod)
|
||||
// Slot 9, replaces BFG9000, Firemace, Bloodscourge (stub)
|
||||
|
||||
Class CandyGun : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_CANDYGUN";
|
||||
Inventory.PickupMessage "$T_CANDYGUN";
|
||||
Obituary "$O_CANDYGUN";
|
||||
Weapon.UpSound "explodium/select";
|
||||
Weapon.SlotNumber 9;
|
||||
Stamina 70000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,10 @@
|
|||
// Blackmann-Forx Silver Bullet JET (successor to Silver Bullet from Zanaveth Ultra Suite)
|
||||
// Slot 8, replaces Plasma Rifle, Hellstaff, Quietus (hilt)
|
||||
|
||||
Class SilverBullet : SWWMWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Stamina 120000;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue