Secondary abilities (like spells, but without mana cost) will be added to fill in remaining weapon slots.

Both melee weapons will be implemented as sisters, kinda like the dual guns in Demolitionist.
This commit is contained in:
Marisa the Magician 2024-03-06 20:10:51 +01:00
parent 7db153f3eb
commit cae1062d88
15 changed files with 221 additions and 27 deletions

View File

@ -28,7 +28,7 @@ Note: **Ibuki** is 2.2m tall *(7'3" for 'mericans)*, which would generally make
**Ibuki**'s arsenal is a very personal one, composed of some of her favorites of all time (some of which are a bit too old, maybe, but still "gold").
Most weapons have the usual obvious controls of fire to shoot and reload to... reload. That's it as far as operating them goes. Additionally, as stated previously, you've got your *"quick kick"*, and of course *"quick grenades"* as well *(see **Items** section)*. Finally, you've also got a dedicated *"distraction spell"* when pressing alt-fire with any weapon out, where **Ibuki** will blow a magic kiss at enemies. Do note that these kisses are much stronger than **Demo-chan**'s so they'll stun foes for quite a while, and in addition they also have the ability to charm **Imps** *(they simply can't resist)*.
Most weapons have the usual obvious controls of fire to shoot and reload to... reload. That's it as far as operating them goes. Additionally, as stated previously, you've got your *"quick kick"*, and of course *"quick grenades"* as well *(see **Items** section)*.
Mag management is entirely hassle-free, as ammunition is autoloaded on-demand within Hammerspace.
@ -40,6 +40,8 @@ Guns of your own making, two of them. Bash in some skulls.
**Ibuki** will automatically alternate between right/left jabs until an enemy has been softened enough for a finisher hook, which will send the poor sod flying.
Pressing **Reload** will switch to your other melee weapon, once obtained.
### Slot 1 - Purifier *[Chainsaw, Gauntlets of the Necromancer]*
*"I'm not one for playing with balls, usually..."*
@ -48,6 +50,8 @@ Commissioned to **Misa Unissix** by **Ashley Knox** on what was basically a drun
Hold the fire button to ready a swing, release to strike at whatever is in front of you. Considerably slower than bare-handed melee, but has a longer reach. Note also that this weapon allows you to strike at projectiles to send them back.
Pressing **Reload** goes back to using your bare fists.
### Slot 2 - Ninnacht AS-12 *[Pistol, Elven Wand]*
*"The perfect tool for solving problems in an advanced way."*
@ -134,6 +138,22 @@ Portable **120mm** artillery? It's all possible thanks to **Cyrus Enterprises**.
They're fairly hefty and stick out like a sore thumb. Still, they're somewhat rare to find. Redeemers have a fairly wide blast radius, cooking everything within range in less than a second.
## Secondaries
Slots 8, 9 and 0 allow you to pick what you want to use for your alt-fire action, independent of the chosen weapon. Other characters would have these for spellcasting, but **Ibuki** isn't really into that sorta thing, she usually prefers to *"get physical"*.
### Slot 8 - Blow Kiss
A dedicated *"distraction spell"*, where **Ibuki** will blow a magic kiss at enemies. Do note that these kisses are much stronger than **Demo-chan**'s so they'll stun foes for quite a while, and in addition they also have the ability to charm **Imps** *(they simply can't resist)*.
### Slot 9 - Ground Slam
Hold alt-fire to charge, release to stamp your foot on the ground, causing all enemies around you to be temporarily staggered and pushed away. Note that you have to be standing in solid ground for this attack to work. Also note that this won't do anything against enemies that are not touching the ground, either.
### Slot 0 - Oni Tackle
Charge forward for as long as the alt-fire is held, pushing through all weak foes in your way until you hit something massive enough to stop you.
## Items
Gotta have some of these too to help in your adventure. **Ibuki** will happily hoard what she doesn't need to use right away. Items that are at max capacity will not be picked up, but nevertheless they will still be tallied and have their script specials activate when touched.
@ -178,7 +198,7 @@ A very potent timed explosive that will latch on to just about anything, includi
*"Bottoms up!"*
This will bring you back to full health and give you a fairly decent strength boost *(Enough to tear enemies apart with your bare hands)*. Do note however that **Ibuki**'s body metabolizes the drunkedness away quickly. Part of **Ellen**'s seemingly unending stash.
This will bring you back to full health and give you a fairly decent strength boost *(Enough to tear enemies apart with your bare hands)* for your melee attacks and secondary abilities. Do note however that **Ibuki**'s body metabolizes the drunkedness away quickly. Part of **Ellen**'s seemingly unending stash.
### Omnisight *[Computer Map, Map Scroll]*

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 B

After

Width:  |  Height:  |  Size: 187 B

View File

@ -4,6 +4,8 @@ addmenukey "$ONI_SECONDARYFIRE" "+altattack"
addmenukey "$ONI_RELOADFIRE" "+reload"
addmenukey "$ONI_MELEE" "+user1"
addmenukey "$ONI_EXTRAFIRE" "+user4"
addmenukey "$ONI_SPELLPREV" "netevent onispellslot -2"
addmenukey "$ONI_SPELLNEXT" "netevent onispellslot -1"
addmenukey "$SWWM_DODGE" "+user2"
addmenukey "$SWWM_MINIMAPIN" "event swwmzoomin"
addmenukey "$SWWM_MINIMAPOUT" "event swwmzoomout"
@ -13,6 +15,8 @@ defaultbind "r" "+reload"
defaultbind "f" "+user1"
defaultbind "g" "+user4"
defaultbind "h" "+user3"
defaultbind "n" "netevent onispellslot -2"
defaultbind "m" "netevent onispellslot -1"
defaultbind "alt" "+user2"
defaultbind "kp+" "event swwmzoomin"
defaultbind "kp-" "event swwmzoomout"

View File

@ -1,6 +1,7 @@
[default]
// tags, pickups
T_ONIUNARMED = "Knuckle Sandwich";
T_ONIBATTER = "Purifier";
T_ONISHOTGUN = "AS-12";
I_ONISHOTGUN = "Ninnacht \"AutoShot-12\" Automatic Shotgun";
T_ONISLAYER = "Boar Slayer";
@ -13,7 +14,9 @@ T_ONIPLASMARIFLE = "Psyker";
I_ONIPLASMARIFLE = "Cryptik \"Psyker\" Plasma Carbine";
T_ONITANKGUN = "Quaker";
I_ONITANKGUN = "Cyrus \"Quaker\" Portable Cannon";
T_ONIBATTER = "Purifier";
T_ONISECONDARY1 = "Magic Kiss";
T_ONISECONDARY2 = "Ground Slam";
T_ONISECONDARY3 = "Oni Tackle";
T_ONIAS12AMMO = "AS-12 Drum";
T_ONIAS12AMMOS = "AS-12 Drum";
T_ONIAS12SHELL = "12ga Shell";
@ -103,6 +106,11 @@ TT_ONIUNARMED =
"\n"
"Beat the crap out of your enemies.\n"
"Each punch hits like a freight train.";
TT_ONIBATTER =
"\cg\"I'm not one for playing with balls, usually...\"\c-\n"
"\n"
"Beat the crap out of your enemies even harder.\n"
"Can be used to deflect enemy projectiles.";
TT_ONISHOTGUN =
"\cg\"The perfect tool for solving problems in an advanced way.\"\c-\n"
"\n"
@ -135,11 +143,6 @@ TT_ONITANKGUN =
"\n"
"\cg120×935mm HEAT-MP-T\c-, single shot.\n"
"Somewhat slow to reload.";
TT_ONIBATTER =
"\cg\"I'm not one for playing with balls, usually...\"\c-\n"
"\n"
"Beat the crap out of your enemies even harder.\n"
"Can be used to deflect enemy projectiles.";
// intermission tips
ONI_NINTERTIP = "32";
ONI_INTERTIP = "Tip #%d:";
@ -155,7 +158,7 @@ ONI_INTERTIP9 = "The Quaker's warheads are very destructive, try to keep your di
ONI_INTERTIP10 = "By shaking from side to side, you can use your body to push enemies that get too close.";
ONI_INTERTIP11 = "Ibuki sinks quickly, but she can thankfully breathe underwater.";
ONI_INTERTIP12 = "Having bulletproof skin renders you impervious to poison attacks (Unless it's breathed in).";
ONI_INTERTIP13 = "You can send smaller enemies flying by sprinting into them.";
ONI_INTERTIP13 = "Tackling is the best secondary attack when dealing with rows of weaker foes. Watch 'em go fly!";
ONI_INTERTIP14 = "Your entire inventory is stored inside your cleavage. It's magic.";
ONI_INTERTIP15 = "Ibuki loves Galician blood sausage. With pine nuts, but no raisins.";
ONI_INTERTIP16 = "The AS-12 is the perfect tool for solving problems in an advanced way.";
@ -169,9 +172,9 @@ ONI_INTERTIP23 = "There is a skeleton inside you.";
ONI_INTERTIP24 = "Ibuki's collar provides extra damage reduction at low health.";
ONI_INTERTIP25 = "If an enemy knocks you out, you can get back up and pwn them.";
ONI_INTERTIP26 = "Ibuki can be a very kind and caring person.";
ONI_INTERTIP27 = "You can crush enemies by falling on them.";
ONI_INTERTIP27 = "The stomp secondary is very effective to clear personal space, but you have to charge it up.";
ONI_INTERTIP28 = "Ibuki's love for the AS-12 was enhanced by the existence of a certain mobile game character.";
ONI_INTERTIP29 = "Ibuki has her own sponsored brand of milk. Some people pay a decent amount for it, for some reason.";
ONI_INTERTIP30 = "When fighting hand to hand, enemies close to death will be finished off with a potent hook.";
ONI_INTERTIP31 = "Every time someone goes \"oof ouch her poor back\", Ibuki gets stronger.";
ONI_INTERTIP32 = "You can blow kisses with alt-fire. Unlike Demo-chan's, Ibuki's kisses are far more potent.";
ONI_INTERTIP32 = "Unlike Demo-chan's, Ibuki's blown kisses are far more potent, and can even charm Imps.";

View File

@ -2,10 +2,12 @@
// keybinds
ONI_KEYS = "RED ONI Bindings";
ONI_PRIMARYFIRE = "Fire";
ONI_SECONDARYFIRE = "Blow Kiss";
ONI_SECONDARYFIRE = "Secondary Action";
ONI_RELOADFIRE = "Reload";
ONI_MELEE = "Quick Kick";
ONI_EXTRAFIRE = "Grenade";
ONI_SPELLPREV = "Previous Secondary";
ONI_SPELLNEXT = "Next Secondary";
// skills
ONI_SKEASY="\cd7.62x51mm\c-";
ONI_SKNORMAL="\cf12.7x99mm\c-";
@ -51,7 +53,7 @@ ONI_HELP_PAGE3 = "Red Oni's Arsenal (Part 1: Weapons)";
ONI_HELP_PAGE3_TXT =
"\cr*Ahem*\c- As mentioned in the previous section, \crIbuki\c- really loves her guns. She's collected all sorts of weaponry over the years since her very first mission. You may find that most of these are fairly mundane... Or maybe not. Most people tend to bring a pistol along, but she doesn't need such a thing when she's got her most beloved automatic shotgun.\n"
"\n"
"Weapon operation tends to be very straightforward, as only two buttons are really needed: \crPrimary fire\c- and \crReload\c-. After that, there's two optional actions available, a \crQuick Kick\c- button to, well, kick, and your \crSecondary Fire\c-, which lets you blow a lil' kiss with any weapon out. Keep in mind \crIbuki\c-'s magic kisses are... Quite a lot more potent.\n"
"Weapon operation tends to be very straightforward, as only two buttons are really needed: \crPrimary fire\c- and \crReload\c-. After that, there's two optional actions available, a \crQuick Kick\c- button to, well, kick, and your \crSecondary Fire\c-, which lets you do actions such as blowing lil' kisses, stomping or doing sprint tackles, with any weapon out (selectable with slots 8, 9 and 0). Keep in mind \crIbuki\c-'s magic kisses are... Quite a lot more potent.\n"
"\n"
"Oh, and if you've got any bombs on ya, you can yeet them with a dedicated \crGrenade\c- key, they're not part of the inventory bar here.";
ONI_HELP_PAGE4 = "Red Oni's Arsenal (Part 2: Items)";

View File

@ -1,6 +1,7 @@
[es]
// tags, pickups
T_ONIUNARMED = "Bocata de Puño";
T_ONIBATTER = "Purificador";
I_ONISHOTGUN = "Escopeta Automática Ninnacht \"AutoShot-12\"";
T_ONISLAYER = "Mata-Jabalíes";
I_ONISLAYER = "Pistola de Caza Areka \"Mata-Jabalíes\"";
@ -9,7 +10,9 @@ I_ONIEXPLODER = "Lanzador de Proyectiles Autopropulsados Kemet ST-20";
I_ONIPLASMARIFLE = "Carabina de Plasma Cryptik \"Psyker\"";
T_ONITANKGUN = "Estremecedor";
I_ONITANKGUN = "Cañón Portátil Cyrus \"Estremecedor\"";
T_ONIBATTER = "Purificador";
T_ONISECONDARY1 = "Beso Mágico";
T_ONISECONDARY2 = "Gran Pisotón";
T_ONISECONDARY3 = "Embestida de Oni";
T_ONIAS12AMMO = "Tambor de AS-12";
T_ONIAS12AMMOS = "Tambores de AS-12";
T_ONIAS12SHELL = "Cartucho de 12ga";
@ -133,7 +136,7 @@ ONI_INTERTIP9 = "Las cabezas nucleares del Quaker son muy destructivas, intenta
ONI_INTERTIP10 = "Al sacudirte de lado a lado, puedes usar tu cuerpo para empujar a los enemigos que se acercan demasiado.";
ONI_INTERTIP11 = "Ibuki se hunde rápidamente, pero por suerte puede respirar bajo el agua.";
ONI_INTERTIP12 = "Tener piel a prueba de balas te protege contra ataques venenosos (A menos que los respires).";
ONI_INTERTIP13 = "Puedes mandar enemigos menores volando al correr contra ellos.";
ONI_INTERTIP13 = "La embestida es el mejor ataque secundario contra hordas de enemigos débiles. ¡Mira como vuelan!";
ONI_INTERTIP14 = "Todo tu inventario está metido en tu escote. Es magia.";
ONI_INTERTIP15 = "A Ibuki le encanta la morcilla Gallega. Con piñones, pero sin pasas.";
ONI_INTERTIP16 = "La AS-12 es la herramienta perfecta para resolver problemas de una forma avanzada.";
@ -147,9 +150,9 @@ ONI_INTERTIP23 = "Hay un esqueleto dentro de ti.";
ONI_INTERTIP24 = "El collar de Ibuki provee de protección extra contra daño en salud baja.";
ONI_INTERTIP25 = "Si un enemigo te noquea, puedes volver a levantarte y zurrarle la badana.";
ONI_INTERTIP26 = "Ibuki puede ser una persona muy amable y cariñosa.";
ONI_INTERTIP27 = "Puedes aplastar enemigos al caerles encima.";
ONI_INTERTIP27 = "El pisotón secundario es muy efectivo para ganar espacio personal, pero tienes que cargarlo bien.";
ONI_INTERTIP28 = "El amor de Ibuki por la AS-12 fue intensificado por la existencia de cierto personaje de juego de móvil.";
ONI_INTERTIP29 = "Ibuki tiene su propia marca patrocinada de leche. Hay gente que paga mucho por ella, por alguna razón.";
ONI_INTERTIP30 = "Al luchar cuerpo a cuerpo, los enemigos a punto de morir serán noqueados con un potente gancho.";
ONI_INTERTIP31 = "Cada vez que alguien dice \"uy pobre que dolor de espalda\", Ibuki se hace más fuerte.";
ONI_INTERTIP32 = "Puedes lanzar besos con fuego secundario. A diferencia de los de Demo-chan, los besos de Ibuki son mucho más potentes.";
ONI_INTERTIP32 = "A diferencia de los de Demo-chan, los besos de Ibuki son mucho más potentes, y pueden hasta hechizar Imps.";

View File

@ -2,10 +2,12 @@
// keybinds
ONI_KEYS = "Teclas de RED ONI";
ONI_PRIMARYFIRE = "Fuego";
ONI_SECONDARYFIRE = "Lanzar Beso";
ONI_SECONDARYFIRE = "Acción Secundaria";
ONI_RELOADFIRE = "Recargar";
ONI_MELEE = "Patada Rápida";
ONI_EXTRAFIRE = "Granada";
ONI_SPELLPREV = "Secundaria Anterior";
ONI_SPELLNEXT = "Secundaria Siguiente";
// skills
ONI_SKHARDCONFIRM="\ciEste es el modo difícil, ya sabes.\nLas cosas se pondrán duras.\c-\n\n\cg1.25x daño de monstruos\n25% extra aggressiveness\c-\n\n(Pulsa Y para luchar)";
ONI_SKHARDCORECONFIRM="\cm¿Seguro que quieres hacer eso?\nPuede que te pateen el culo.\c-\n\n\cg1.5x daño de monstruos\n50% de agresividad extra\nTrucos deshabilitados\nMonstruos de cooperativo\c-\n\n(Pulsa Y para un desafío)";
@ -43,7 +45,7 @@ ONI_HELP_PAGE3 = "Arsenal del Oni Rojo (Parte 1: Armas)";
ONI_HELP_PAGE3_TXT =
"\cr*Ejem*\c- Como se mencionaba en la sección anterior, a \crIbuki\c- le encantan realmente sus armas. Ha coleccionado toda clase de armamento durante años desde su primerísima misión. Puede que la mayoría te parezcan algo mundanas... O tal vez no. La mayoría de la gente viene con pistola, pero ella no necesita nada de eso cuando tiene su muy amada escopeta automática.\n"
"\n"
"La operación de las armas tiende a ser bastante simple, ya que solo se necesitan realmente dos botones: \crFuego primario\c- y \crRecarga\-. Luego, hay otras dos acciones opcionales disponibles, un botón de \crPatada Rápida\c- para, bueno, dar patadas, y tu \crFuego secundario\c-, que te permite lanzar un pequeño beso con cualquier arma equipada. Ten en cuenta que los besos mágicos de \crIbuki\c- son... Bastante más potentes.\n"
"La operación de las armas tiende a ser bastante simple, ya que solo se necesitan realmente dos botones: \crFuego primario\c- y \crRecarga\-. Luego, hay otras dos acciones opcionales disponibles, un botón de \crPatada Rápida\c- para, bueno, dar patadas, y tu \crFuego secundario\c-, que te permite realizar acciones como lanzar besitos, pisotear o embestir, con cualquier arma equipada (seleccionable a través de las ranuras 8, 9 y 0). Ten en cuenta que los besos mágicos de \crIbuki\c- son... Bastante más potentes.\n"
"\n"
"Oh, y si llevas bombas encima, puedes soltarlas con una tecla dedicada de \crGranada\c-, no forman parte de la barra de inventario aquí.";
ONI_HELP_PAGE4 = "Arsenal del Oni Rojo (Parte 2: Ítems)";

View File

@ -1,3 +1,3 @@
[default]
ONI_MODVER="\crRED ONI\c- \cw0.1a r163 \cu(Wed 3 Jan 14:41:48 CET 2024)\c-";
ONI_SHORTVER="\cw0.1a r163 \cu(2024-01-03 14:41:48)\c-";
ONI_MODVER="\crRED ONI\c- \cw0.1a r164 \cu(Wed 6 Mar 20:10:51 CET 2024)\c-";
ONI_SHORTVER="\cw0.1a r164 \cu(2024-03-06 20:10:51)\c-";

View File

@ -1,6 +1,6 @@
// Weapon pickup models
Model "OniBatter"
Model "OniBatterGiver"
{
Path "models/extra"

View File

@ -11,7 +11,19 @@ extend Class SWWMHandler
private ui void ModInterfaceProcess( ConsoleEvent e )
{
// nothing here yet
if ( e.IsManual ) return;
if ( e.Name ~== "onispellchange" )
{
let oni = IbukiPlayer(players[consoleplayer].mo);
if ( !oni ) return;
let bar = SWWMStatusBar(statusbar);
if ( bar )
{
bar.ntagstr = StringTable.Localize("$T_ONISECONDARY"..(oni.SpellSel+1));
bar.ntagtic = level.totaltime;
bar.ntagcol = nametagcolor;
}
}
}
private void ModNetworkProcess( ConsoleEvent e )
@ -21,5 +33,18 @@ extend Class SWWMHandler
if ( (e.Args[0] < 0) || (e.Args[0] > 9) ) return;
WeaponFlash[e.Args[0]] = gametic+25;
}
else if ( e.Name ~== "onispellslot" )
{
if ( (e.Args[0] < -2) || (e.Args[0] > 2) ) return;
let oni = IbukiPlayer(players[e.player].mo);
if ( oni )
{
int oldsel = oni.SpellSel;
if ( e.Args[0] == -2 ) oni.SpellSel = (oni.SpellSel>0)?(oni.SpellSel-1):2;
else if ( e.Args[0] == -1 ) oni.SpellSel = (oni.SpellSel+1)%3;
else oni.SpellSel = e.Args[0];
if ( oni.SpellSel != oldsel ) SendInterfaceEvent(e.player,"onispellchange");
}
}
}
}

View File

@ -94,8 +94,8 @@ extend Class OniStatusBar
Screen.DrawText(MiniHUDFont,mhudfontcol[(CPlayer.ReadyWeapon.Ammo1.Amount<=0)?MCR_RED:MCR_BRASS],xx,yy+2,str,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
}
}
Screen.DrawTexture(WeaponTex,false,ss.x-(xmargin+56),ss.y-(ymargin+10),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
double xx = ss.x-(xmargin+54), yy = ss.y-(ymargin+8);
Screen.DrawTexture(WeaponTex,false,ss.x-(xmargin+84),ss.y-(ymargin+10),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
double xx = ss.x-(xmargin+82), yy = ss.y-(ymargin+8);
for ( int i=1; i<=7; i++,xx+=8 )
{
if ( (i>1) && !CPlayer.HasWeaponsInSlot(i) )
@ -143,6 +143,14 @@ extend Class OniStatusBar
Screen.DrawText(MiniHUDFont,mhudfontcol[MCR_FLASH],xx,yy,String.Format("%d",i),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_Alpha,alph,DTA_LegacyRenderStyle,STYLE_Add);
}
}
xx += 4;
int selslot = -1;
if ( IbukiPlayer(CPlayer.mo) ) selslot = IbukiPlayer(CPlayer.mo).SpellSel;
for ( int i=8; i<=10; i++,xx+=8 )
{
int ncolor = mhudfontcol[(i==(selslot+8))?MCR_FIRE:MCR_SKIN];
Screen.DrawText(MiniHUDFont,ncolor,xx,yy,String.Format("%d",(i%10)),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
}
xx = ss.x-(xmargin+54);
yy = ss.y-(ymargin+59);
Screen.DrawTexture(AmmoTex,false,xx,yy,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);

View File

@ -13,6 +13,8 @@ Enum EOniFaceState
Class IbukiPlayer : SWWMPlayer
{
int SpellSel;
Default
{
Tag "$T_ONIIBUKI";
@ -149,4 +151,12 @@ Class IbukiPlayer : SWWMPlayer
}
}
override Weapon PickWeapon( int slot, bool checkammo )
{
if ( slot == 8 ) EventHandler.SendNetworkEvent("onispellslot",0);
else if ( slot == 9 ) EventHandler.SendNetworkEvent("onispellslot",1);
else if ( slot == 0 ) EventHandler.SendNetworkEvent("onispellslot",2);
else return Super.PickWeapon(slot,checkammo);
return player.ReadyWeapon;
}
}

View File

@ -41,9 +41,23 @@ extend Class SWWMUtility
return target.bCOUNTITEM;
}
// check if any player needs the bat
static bool NeedsBatter()
{
for ( int i=0; i<MAXPLAYERS; i++ )
{
if ( !playeringame[i] || !players[i].mo ) continue;
let bat = OniBatter(players[i].mo.FindInventory("OniBatter"));
if ( !bat ) return true; // welp
if ( bat.bHasBatter ) continue;
return true;
}
return false;
}
static Class<Inventory> PickOniSlot1()
{
if ( !ItemExists('OniBatter') ) return 'OniBatter';
if ( !ItemExists('OniBatterGiver') && NeedsBatter() ) return 'OniBatterGiver';
return 'OniBoarAmmo';
}
static Class<Inventory> PickOniSlot2()

View File

@ -1,15 +1,90 @@
// Purification in progress
Class OniBatter : SWWMWeapon
{
bool bHasBatter, bBatterSelected;
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
return bHasBatter;
}
override bool ReportHUDAmmo()
{
return true;
}
override bool Use( bool pickup )
{
// need to override here because other mods could screw it up
if ( !bHasBatter ) return false;
// switch to bare fists if not explicitly selected
if ( !bBatterSelected )
{
if ( SisterWeapon && (Owner.player.ReadyWeapon != SisterWeapon) )
Owner.player.PendingWeapon = SisterWeapon;
return false;
}
return Super.Use(pickup);
}
override bool IsSisterActive()
{
return (SisterWeapon && (!bHasBatter || !bBatterSelected));
}
Default
{
Tag "$T_ONIBATTER";
Inventory.PickupMessage "$T_ONIBATTER";
SWWMWeapon.Tooltip "$TT_ONIBATTER";
Weapon.SisterWeapon "OniUnarmed";
Weapon.SlotNumber 1;
Weapon.SlotPriority 2.;
Weapon.SelectionOrder 900;
+WEAPON.MELEEWEAPON;
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
+SWWMWEAPON.HIDEINMENU;
}
}
Class OniBatterGiver : Inventory
{
Mixin SWWMOverlapPickupSound;
Mixin SWWMUseToPickup;
Mixin SWWMRespawn;
Mixin SWWMRotatingPickup;
Mixin SWWMUnrealStyleDrop;
override bool TryPickup( in out Actor toucher )
{
Actor rt = toucher;
if ( toucher.player ) rt = toucher.player.mo;
let bat = OniBatter(rt.FindInventory('OniBatter'));
if ( !bat )
{
// not technically supposed to happen, but we'll deal
// with this later when the weapons are implemented
return false;
}
if ( !bat.bHasBatter )
{
bat.bBatterSelected = true; // auto-change
if ( toucher.player.ReadyWeapon == bat.SisterWeapon )
toucher.player.PendingWeapon = bat;
}
bat.bHasBatter = true;
GoAwayAndDie();
return true;
}
Default
{
Tag "$T_ONIBATTER";
Inventory.PickupSound "misc/w_pkup";
Inventory.PickupMessage "$T_ONIBATTER";
Inventory.PickupFlash "SWWMRedPickupFlash";
Inventory.MaxAmount 0;
+INVENTORY.ALWAYSPICKUP;
+FLOATBOB;
+DONTGIB;
FloatBobStrength 0.25;
}
States
{

View File

@ -1,6 +1,31 @@
// Door faceslam simulator
Class OniUnarmed : SWWMWeapon
{
override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount )
{
return true;
}
override bool ReportHUDAmmo()
{
return true;
}
override bool Use( bool pickup )
{
// need to override here because other mods could screw it up
let sw = OniBatter(SisterWeapon);
// switch to bat if not explicitly selected
if ( sw && sw.bHasBatter && sw.bBatterSelected )
{
if ( Owner.player.ReadyWeapon != sw )
Owner.player.PendingWeapon = sw;
return false;
}
return Super.Use(pickup);
}
override bool IsSisterActive()
{
return (SisterWeapon && OniBatter(SisterWeapon).bHasBatter && OniBatter(SisterWeapon).bBatterSelected);
}
Default
{
Tag "$T_ONIUNARMED";
@ -9,7 +34,10 @@ Class OniUnarmed : SWWMWeapon
Weapon.SlotNumber 1;
Weapon.SlotPriority 1.;
Weapon.SelectionOrder 1000;
Weapon.SisterWeapon "OniBatter";
+WEAPON.MELEEWEAPON;
+WEAPON.WIMPY_WEAPON;
+INVENTORY.UNDROPPABLE;
+INVENTORY.UNTOSSABLE;
}
}