More Quadravol progress. Document charge levels in library.

This commit is contained in:
Mari the Deer 2022-08-18 18:33:42 +02:00
commit c80c2f0e1b
14 changed files with 143 additions and 18 deletions

View file

@ -3150,6 +3150,18 @@ SWWM_LORETXT_QUADRAVOL =
"\n"
"\cfTechniques:\c- The weapon has a certain \"extra effective\" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.\n"
"\n"
"The various charge levels of the internal crucible appear to dramatically alter the behavior of fired projectiles. The most notable changes are reflected as such:\n"
"\n"
"\cfLevel 1:\c- Fast and steady projectile, with moderate blast radius.\n"
"\n"
"\cfLevel 2:\c- Slower projectile with some drift, doubled blast radius and intensity.\n"
"\n"
"\cfLevel 3:\c- Slow, massive, erratic projectile, with much more dramatic blast potential. Ruptures into sub-projectiles on impact.\n"
"\n"
"\cfLevel 4:\c- Projectile bursts into multiple fragments as it leaves the barrel. Each sub-projectile is only slightly weaker than a level 1 fireball.\n"
"\n"
"\cfLevel 5:\c- At this point, whatever projectile was to be fired will instantly explode outwards. This attack is very destructive, and its damage may increase further if a full cell is still chambered.\n"
"\n"
"\cxSaya's Notes:\c-\n"
"\cfTypical overly dramatic Xekkian stuff. The \"Ardent Cross\", really... But it's as badass as it sounds, at least.\c-\n"
"\n"

View file

@ -2924,6 +2924,18 @@ SWWM_LORETXT_QUADRAVOL =
"\n"
"\cfTécnicas:\c- El arma tiene un cierto movimiento especial \"extra efectivo\" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.\n"
"\n"
"Los diversos niveles de carga del crisol interno parecen alterar dramáticamente el comportamiento del proyectil. Los cambios más notables se reflejan aquí:\n"
"\n"
"\cfNivel 1:\c- Proyectil estable y veloz, con un radio de explosión moderado.\n"
"\n"
"\cfNivel 2:\c- Proyectil más lento con algo de desviación, doble de radio e intensidad de explosión.\n"
"\n"
"\cfNivel 3:\c- Proyectil lento, masivo, errático, con un potencial de explosión más dramático. Se rompe en sub-proyectiles al impactar.\n"
"\n"
"\cfNivel 4:\c- El proyectil estalla en múltiples fragmentos al salir del cañón. Cada sub-proyectil es solo ligeramente más débil que una bola de fuego de nivel 1.\n"
"\n"
"\cfNivel 5:\c- Llegado este punto, cualquier proyectil que fuera disparado explotará al instante hacia fuera. Este ataque es muy destructivo, y su daño puede incrementar aun más si todavía queda una célula llena en la recámara.\n"
"\n"
"\cxNotas de Saya:\c-\n"
"\cfTípicas ñoñerías superdramáticas de los Xekkian. La \"Cruz Ardiente\", en serio... Pero mola tanto como suena, al menos.\c-\n"
"\n"

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r341 \cu(Thu 18 Aug 16:18:22 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r341 \cu(2022-08-18 16:18:22)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r343 \cu(Thu 18 Aug 18:33:57 CEST 2022)\c-";
SWWM_SHORTVER="\cw1.3pre r343 \cu(2022-08-18 18:33:57)\c-";

View file

@ -32,6 +32,18 @@ The Ardent Cross was the name of the general's sword which, when imbued with mag
\cfTechniques:\c- The weapon has a certain "extra effective" special move should you be close enough to your target. Plunging the four bayonets into an enemy and immediately pulling the trigger afterwards will result in a potent point blank explosion that will send them flying, covered in flames.
The various charge levels of the internal crucible appear to dramatically alter the behavior of fired projectiles. The most notable changes are reflected as such:
\cfLevel 1:\c- Fast and steady projectile, with moderate blast radius.
\cfLevel 2:\c- Slower projectile with some drift, doubled blast radius and intensity.
\cfLevel 3:\c- Slow, massive, erratic projectile, with much more dramatic blast potential. Ruptures into sub-projectiles on impact.
\cfLevel 4:\c- Projectile bursts into multiple fragments as it leaves the barrel. Each sub-projectile is only slightly weaker than a level 1 fireball.
\cfLevel 5:\c- At this point, whatever projectile was to be fired will instantly explode outwards. This attack is very destructive, and its damage may increase further if a full cell is still chambered.
\cxSaya's Notes:\c-
\cfTypical overly dramatic Xekkian stuff. The "Ardent Cross", really... But it's as badass as it sounds, at least.\c-

View file

@ -26,6 +26,18 @@ La Cruz Ardiente era el nombre de la espada del general la cual, al ser imbuida
\cfTécnicas:\c- El arma tiene un cierto movimiento especial "extra efectivo" si te encuentras a poca distancia de tu objetivo. Hundiendo las cuatro bayonetas en el enemigo e inmediatamente después apretando el gatillo resultará en una potente explosión a bocajarro que lo enviará volando, cubierto en llamas.
Los diversos niveles de carga del crisol interno parecen alterar dramáticamente el comportamiento del proyectil. Los cambios más notables se reflejan aquí:
\cfNivel 1:\c- Proyectil estable y veloz, con un radio de explosión moderado.
\cfNivel 2:\c- Proyectil más lento con algo de desviación, doble de radio e intensidad de explosión.
\cfNivel 3:\c- Proyectil lento, masivo, errático, con un potencial de explosión más dramático. Se rompe en sub-proyectiles al impactar.
\cfNivel 4:\c- El proyectil estalla en múltiples fragmentos al salir del cañón. Cada sub-proyectil es solo ligeramente más débil que una bola de fuego de nivel 1.
\cfNivel 5:\c- Llegado este punto, cualquier proyectil que fuera disparado explotará al instante hacia fuera. Este ataque es muy destructivo, y su daño puede incrementar aun más si todavía queda una célula llena en la recámara.
\cxNotas de Saya:\c-
\cfTípicas ñoñerías superdramáticas de los Xekkian. La "Cruz Ardiente", en serio... Pero mola tanto como suena, al menos.\c-

View file

@ -95,7 +95,13 @@ quadshot/casing2 sounds/dlc1/quadshot/quad_casing2.ogg
quadshot/casing3 sounds/dlc1/quadshot/quad_casing3.ogg
quadshot/casing4 sounds/dlc1/quadshot/quad_casing4.ogg
$random quadshot/casing { quadshot/casing1 quadshot/casing2 quadshot/casing3 quadshot/casing4 }
// TODO projectile sounds
quadshot/hit1 sounds/dlc1/quadshot/quad_explo1.ogg
quadshot/hit2 sounds/dlc1/quadshot/quad_explo2.ogg
quadshot/hit3 sounds/dlc1/quadshot/quad_explo3.ogg
$random quadshot/hit { quadshot/hit1 quadshot/hit2 quadshot/hit3 }
quadshot/extrahit sounds/dlc1/quadshot/quad_xexpl.ogg
quadshot/pointblank sounds/dlc1/quadshot/quad_xxexpl.ogg
quadshot/fly sounds/dlc1/quadshot/quad_fly.ogg
// TODO sparkster rifle

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -5,7 +5,7 @@ Class Quadravol : SWWMWeapon
{
int clipcount;
int chargelevel;
bool chambered, charged, waschambered, wascharged;
bool chambered, charged, waschambered, wascharged, fromfire;
bool onehand;
bool initialized;
@ -76,6 +76,37 @@ Class Quadravol : SWWMWeapon
else origin.A_StartSound(UpSound,CHAN_WEAPON,CHANF_OVERLAP);
}
action State A_QuadFire()
{
static const String BaseNum[] = {"one","two","three","four","five"};
static const StateLabel FireStates[] = {"FireOne","FireTwo","FireThree","FireFour","FireFive"};
int idx = clamp(invoker.chargelevel-1,0,4);
A_StartSound("quadshot/fire"..BaseNum[idx],CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerFire();
switch ( idx )
{
case 0:
A_Log("\cg// TODO - Fire Level 1\c-");
break;
case 1:
A_Log("\cg// TODO - Fire Level 2\c-");
break;
case 2:
A_Log("\cg// TODO - Fire Level 3\c-");
break;
case 3:
A_Log("\cg// TODO - Fire Level 4\c-");
break;
case 4:
if ( !invoker.charged ) A_Log("\cg// TODO - Fire Level 5+\c-");
else A_Log("\cg// TODO - Fire Level 5\c-");
break;
}
invoker.chargelevel = 0;
invoker.charged = true; // eat it up
return ResolveState(FireStates[idx]);
}
action void A_Eject()
{
invoker.waschambered = invoker.chambered;
@ -182,7 +213,6 @@ Class Quadravol : SWWMWeapon
Super.AttachToOwner(other);
}
Default
{
Tag "$T_QUADRAVOL";
@ -220,23 +250,50 @@ Class Quadravol : SWWMWeapon
XZW2 A 1
{
A_Fill(); // just in case
int flg = WRF_ALLOWUSER1|WRF_ALLOWZOOM;
if ( invoker.clipcount < invoker.default.clipcount ) flg |= WRF_ALLOWRELOAD;
int flg = WRF_ALLOWRELOAD|WRF_ALLOWUSER1|WRF_ALLOWZOOM;
if ( (invoker.chargelevel <= 0) && (invoker.Ammo1.Amount <= 0) && (invoker.clipcount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) ) flg |= WRF_NOPRIMARY;
invoker.fromfire = false;
A_WeaponReady(flg);
if ( player.cmd.buttons&BT_ATTACK )
invoker.CheckAmmo(EitherFire,true);
}
Wait;
Fire:
// TODO firing
XZW2 A 1
{
if ( invoker.chargelevel <= 0 )
{
if ( invoker.clipcount > 0 ) return ResolveState("AltFire");
invoker.fromfire = true;
return ResolveState("Reload");
}
return ResolveState(null);
return A_QuadFire();
}
FireOne:
XZW2 A 1;
XZW3 OPQR 2;
XZW3 STUV 3;
Goto Ready;
FireTwo:
XZW2 A 1;
XZW3 WXYZ 2;
XZW4 ABCD 3;
Goto Ready;
FireThree:
XZW2 A 1;
XZW4 EFGH 2;
XZW4 IJKL 3;
Goto Ready;
FireFour:
XZW2 A 1;
XZW4 MNOP 2;
XZW4 QRST 3;
Goto Ready;
FireFive:
XZW2 A 1;
XZW4 UVWX 2;
XZW4 YZ 3;
XZW5 AB 3;
Goto Ready;
AltFire:
XZW2 A 2 A_PlayerCheckGun();
@ -256,8 +313,13 @@ Class Quadravol : SWWMWeapon
TNT1 A 1 A_DropCasing();
Stop;
Reload:
// TODO idle animation on full load
XZW2 A 2 A_StartSound("quadshot/onehand",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 A 2
{
if ( (invoker.clipcount >= invoker.default.clipcount) || ((invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true)) )
return ResolveState("Idle");
A_StartSound("quadshot/onehand",CHAN_WEAPON,CHANF_OVERLAP);
return ResolveState(null);
}
XZW5 MNO 3;
Goto ReloadHold;
ReloadHold:
@ -272,6 +334,9 @@ Class Quadravol : SWWMWeapon
{
if ( (invoker.clipcount >= invoker.default.clipcount) || ((invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true)) )
return ResolveState(null);
if ( invoker.fromfire && (player.cmd.buttons&BT_ATTACK) )
return ResolveState("ReloadHold");
invoker.fromfire = false;
return A_JumpIf(player.cmd.buttons&BT_RELOAD,"ReloadHold");
}
XZW6 B 2 A_StartSound("quadshot/twohand",CHAN_WEAPON,CHANF_OVERLAP);
@ -282,18 +347,26 @@ Class Quadravol : SWWMWeapon
XZWZ HIJKLMN 2;
XZWZ O 0;
Stop;
Idle:
// TODO idle
XZW2 A 1 A_Log("\cg// TODO - Idle Animation\c-");
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&BT_RELOAD),"Ready");
Wait;
Zoom:
// TODO stance switch
XZW2 A 1;
Goto Ready;
XZW2 A 1 A_Log("\cg// TODO - Stance Switch\c-");
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&BT_ZOOM),"Ready");
Wait;
User1:
// TODO melee
XZW2 A 1;
Goto Ready;
XZW2 A 1 A_Log("\cg// TODO - Quick Melee\c-");
XZW2 A 1 A_JumpIf(!(player.cmd.buttons&BT_USER1),"Ready");
Wait;
Deselect:
XZW2 A 1 A_StartSound("quadshot/deselect",CHAN_WEAPON,CHANF_OVERLAP);
XZW2 BCDEFGHIJKLMNOPQR 1;
XZW2 R -1 A_FullLower();
Stop;
// TODO one-handed states
}
}

View file

@ -104,9 +104,7 @@ Class mkBloodSpray : Actor
return;
}
if ( isFrozen() ) return;
Vector3 setofs;
setofs.xy = RotateVector(attachofs.xy,target.angle);
setofs.z = attachofs.z;
Vector3 setofs = SWWMUtility.RotateVector3(attachofs,target.angle);
SetOrigin(level.Vec3Offset(target.pos,setofs),false);
int sz = max(1,args[0]/2);
double ang, pt;