diff --git a/language.version b/language.version index b7986bd45..16ff0ec02 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r474 \cu(Sun 9 May 18:20:22 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r474 \cu(2021-05-09 18:20:22)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r474 \cu(Sun 9 May 23:22:28 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r474 \cu(2021-05-09 23:22:28)\c-"; diff --git a/zscript/weapons/swwm_baseweapon_melee.zsc b/zscript/weapons/swwm_baseweapon_melee.zsc index 22d58ba67..9c5d4293e 100644 --- a/zscript/weapons/swwm_baseweapon_melee.zsc +++ b/zscript/weapons/swwm_baseweapon_melee.zsc @@ -290,6 +290,12 @@ Class UseLineTracer : LineTracer } } +Class MHitList +{ + Actor a; + Vector3 dir, pos; +} + extend Class SWWMWeapon { Actor pfield; // instance of parry field for current melee attack @@ -308,65 +314,114 @@ extend Class SWWMWeapon if ( !FindInventory("ParryDamageChecker") ) GiveInventory("ParryDamageChecker",1); // need this so parried projectiles deal extra damage } - private action bool TryMelee( double angle, int dmg, String hitsound = "", double rangemul = 1. ) + // multi-hit cone rather than the usual one-hit arc, more fun + private action bool TryMelee( double spread, int dmg, String hitsound = "", double rangemul = 1. ) { - FTranslatedLineTarget t; - double slope = AimLineAttack(angle,1.5*DEFMELEERANGE*rangemul,t,0.,ALF_CHECK3D); + Vector3 x, y, z, dir; + [x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll); + Vector3 origin = Vec2OffsetZ(0,0,player.viewz); + Array hits; + hits.Clear(); FLineTraceData d; - LineTrace(angle,1.5*DEFMELEERANGE*rangemul,slope,0,player.viewheight,data:d); + int rings = 1; + double step = spread/10.; + double range = 1.5*DEFMELEERANGE*rangemul; bool raging = CountInv("RagekitPower"); - if ( (d.HitType == TRACE_HitActor) && !d.HitActor.FindInventory("ParriedBuff") ) + for ( double i=0; i 2 ) SWWMUtility.DoKnockback(self,-x,18000); + else if ( waterlevel > 2 ) SWWMUtility.DoKnockback(self,-x,50000); if ( swwm_extraalert || !(invoker.hitcnt%20) ) A_AlertMonsters(swwm_uncapalert?0:500); invoker.hitcnt++; } @@ -351,7 +351,7 @@ Class PusherWeapon : SWWMWeapon XZW5 ABC 2; XZW5 D 1 A_Parry(9); XZW5 EFGH 1; - XZW5 I 0 A_Melee(70,"demolitionist/whitl",1.1); + XZW5 I 0 A_Melee(70,"demolitionist/whitl",1.1,1.2); XZW5 IJ 2; XZW5 K 2 { invoker.PlayUpSound(self); } XZW5 LM 2; diff --git a/zscript/weapons/swwm_sparkyboi.zsc b/zscript/weapons/swwm_sparkyboi.zsc index 29a7e8073..5bf4912d8 100644 --- a/zscript/weapons/swwm_sparkyboi.zsc +++ b/zscript/weapons/swwm_sparkyboi.zsc @@ -540,7 +540,7 @@ Class Sparkster : SWWMWeapon XZW4 EFG 2; XZW4 H 1 A_Parry(9); XZW4 IJ 1; - XZW4 K 2 A_Melee(60,"demolitionist/whitm"); + XZW4 K 2 A_Melee(60,"demolitionist/whitm",1.,1.1); XZW4 LMNOPQ 2; XZW4 R 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP); XZW4 STUVWX 2; @@ -550,7 +550,7 @@ Class Sparkster : SWWMWeapon XZW7 RST 2; XZW7 U 1 A_Parry(9); XZW7 VW 1; - XZW7 X 2 A_Melee(60,"demolitionist/whitm"); + XZW7 X 2 A_Melee(60,"demolitionist/whitm",1.,1.1); XZW7 YZ 2; XZW8 ABCD 2; XZW8 E 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP); diff --git a/zscript/weapons/swwm_thiccboolet.zsc b/zscript/weapons/swwm_thiccboolet.zsc index dc2b049b4..c30671d1e 100644 --- a/zscript/weapons/swwm_thiccboolet.zsc +++ b/zscript/weapons/swwm_thiccboolet.zsc @@ -1421,7 +1421,7 @@ Class SilverBullet : SWWMWeapon XZW6 IJK 3; XZW6 L 1 A_Parry(9); XZW6 MN 1; - XZW6 O 1 A_Melee(90,"demolitionist/whitl",1.6); + XZW6 O 1 A_Melee(90,"demolitionist/whitl",1.6,2.); XZW6 PQ 1; XZW6 RST 2; XZW6 U 3 A_StartSound("silverbullet/meleeend",CHAN_WEAPON,CHANF_OVERLAP); @@ -1438,7 +1438,7 @@ Class SilverBullet : SWWMWeapon XZWC IJK 3; XZWC L 1 A_Parry(9); XZWC MN 1; - XZWC O 1 A_Melee(90,"demolitionist/whitl",1.6); + XZWC O 1 A_Melee(90,"demolitionist/whitl",1.6,2.); XZWC PQ 1; XZWC RST 2; XZWC U 3 A_StartSound("silverbullet/meleeend",CHAN_WEAPON,CHANF_OVERLAP);