From 092ce9d5ff2c2979b927f97ce931507b3c2f1b1d Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 1 Feb 2022 00:07:00 -0500 Subject: [PATCH] WIP actually insect-like unit --- android/build.gradle | 11 ++++++ ...lanetary-accelerator-team_TODO_UNUSED.png} | Bin .../assets-raw/sprites/units/conquer.aseprite | Bin 13961 -> 14141 bytes .../assets-raw/sprites/units/krepost-cell.png | Bin 0 -> 1620 bytes .../sprites/units/krepost-foot__.png | Bin 0 -> 647 bytes .../sprites/units/krepost-leg-base.png | Bin 0 -> 611 bytes core/assets-raw/sprites/units/krepost-leg.png | Bin 0 -> 691 bytes core/assets-raw/sprites/units/krepost.png | Bin 3422 -> 5768 bytes core/assets/icons/icons.properties | 1 + core/assets/logicids.dat | Bin 3968 -> 3977 bytes core/src/mindustry/content/Blocks.java | 6 +-- core/src/mindustry/content/SectorPresets.java | 2 +- core/src/mindustry/content/UnitTypes.java | 36 +++++++++++++++++ .../src/mindustry/entities/comp/LegsComp.java | 37 +++++++++++++++--- core/src/mindustry/type/UnitType.java | 23 +++++++---- 15 files changed, 100 insertions(+), 16 deletions(-) rename core/assets-raw/sprites/blocks/campaign/{interplanetary-accelerator-team.png => interplanetary-accelerator-team_TODO_UNUSED.png} (100%) create mode 100644 core/assets-raw/sprites/units/krepost-cell.png create mode 100644 core/assets-raw/sprites/units/krepost-foot__.png create mode 100644 core/assets-raw/sprites/units/krepost-leg-base.png create mode 100644 core/assets-raw/sprites/units/krepost-leg.png diff --git a/android/build.gradle b/android/build.gradle index c215486765..586efca310 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -92,6 +92,17 @@ android{ } } + buildTypes{ + all{ + minifyEnabled = true + shrinkResources = true + //this is the ONLY WAY I could find to force r8 to keep its filthy hands off of my default interfaces. + //may have undesirable side effects + debuggable = true + proguardFiles("proguard-rules.pro") + } + } + if(project.hasProperty("RELEASE_STORE_FILE") || System.getenv("CI") == "true"){ buildTypes{ release{ diff --git a/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team.png b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team_TODO_UNUSED.png similarity index 100% rename from core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team.png rename to core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team_TODO_UNUSED.png diff --git a/core/assets-raw/sprites/units/conquer.aseprite b/core/assets-raw/sprites/units/conquer.aseprite index a03661e3479f3fb32010bc22c25d7a36d4bfb3c5..a867d6e0c0f1525df77452b8c747e555b490f31b 100644 GIT binary patch delta 5284 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 F{{xgJwq^hT diff --git a/core/assets-raw/sprites/units/krepost-cell.png b/core/assets-raw/sprites/units/krepost-cell.png new file mode 100644 index 0000000000000000000000000000000000000000..2e87344fb53193620ca2fff83269cd21d396faa9 GIT binary patch literal 1620 zcmaizeKgYx7{}-Rr4iCuBS~E^o#mxTQnoZPQf*CgTUpdehBN(biNl{p_U-QFPb;opYaap67F(^F8Nz&Us$W68GRO%i>@dg&xQ4#w+WIRS$iTZZn~zK?!QDUC|Iy3@*-$N)+cak9M7 ztG6W8{$FiS=DsChs7t#Yy(U+-%QPMF#4 zv>Ks0qmON8yc7{2FJ4QJ7g9RA z9S9l|@Q%3mvjUZJYJJ7$+63%5$~W-O zk*p8rW!h4$yv{>L;aRu8_PIGu7+uo*G2}$Rm%+khF2Z+bJY5@H#l$kqy1EBRJ=t;E z1ByUA*S=t)VD`DfdqT8Sx}K(erKz;b*);!)$r5)E4nLvo$IM>u7`MRs4tpb>Kq8Z< zoD&2-ey9a%@|3c9z(YZ8-6G9eSg%HmGqNVazk<`xd)=}WkqU4c>^@UH>z=5n_Vp0< zE-XO`do7?)F}48iaP2ated zJD@)Lb`52h*>WM72|3f9CH8*w7?nz9(}u|e2o{tN9b+6yaze_sWS}c=aba;)^s_)_kJ6#DrY_}X;lVI(y)4cXR(=B%$vJ=0HG zbslrVMWRz`WUSeQg?wLKtCyxL;|-I^7r6H7UA@+u``<@s$fCd-k3owb#yumCi|x4r zySA9P&9oj(i<3SgycO%~AdLB%(5<+cBw*NLF06$v)ePL(=qNlyGOm@NF0F$yBXxr)vyVzvBR0UvyBLaK`NzMjt3XlH`?{9sXey zN`2Pu_9}QF@Kujyx-Iq>Th93TGIzR;%)!5br~&u&lkkCJ{~oON>Cu-cRE{7uqk*8< zBhT$ZnBnRrF_*!J87K`|;FP!ep_0SLV{nm!>98~-^{I~h$Z{|O?fVsPl1$CckK}+6 znglt=T-Km8r8syjM+jVq*>|Ix#n7$FBZ$^9xWL)!2Bk2`R#<{bMoJ8;bwb4&M9PEX ztz`jaSq?L)PR=buxvQnai-HgZI^pE$gHrW=(Fx`j}Nf>I2W)9!c9G`VNpZ&)4m%_DQ}$D%>*r`u&-f zFIRvY`Q^cX*(A7_u!U+=fOi>$E@pCYBpk0>Ss9VC@vi<&8z4 zGn)8B>{pt7keAyPaU5e{oKNDW*aHQdhuG|4z zEGv>Tx%EXi(8}NI7Uz=Q!+7XKjX%7WC_Z0VIQKO0&GWnWt2xlLtPdDzZRP*s0J|p^ Y^yJ9)N7LWer~Z^fgZAv;;iB{Z1CV|Q@Bjb+ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/krepost-foot__.png b/core/assets-raw/sprites/units/krepost-foot__.png new file mode 100644 index 0000000000000000000000000000000000000000..f035f791d4816aef3efa8cce1957f85b9dae645d GIT binary patch literal 647 zcmV;20(kw2P)Px%K}keGRCt{2oXt%`F${nWViY*C2pri1F+xW`?7T1Y`M$>|o3y%HmAi?Fl46C6m}n_fSCWJp(_>68 zZ4d!x7IYtccaWkD2S#$#VlqgAU-p26dO(aJH$YVcLJ7>`{{ zvv6A|r|c>*=koh?53!g_kOENKKuBui5Wx-SqSXU!imhg~Ik7=)XKi5BeYkQ?vxCuR zqug`8oL10EnMx~Zy^(22GQ20Jmq+GS)?;^99m^r8gIol4^pBtpixSlFVuCu5PEdbg hKu~{rQ4~cHz#o%ZZ}6W-Ca3@a002ovPDHLkV1i&+9>)Lx literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/krepost-leg-base.png b/core/assets-raw/sprites/units/krepost-leg-base.png new file mode 100644 index 0000000000000000000000000000000000000000..9915e77d4b3a22c020710c61282c0c2bff3d906a GIT binary patch literal 611 zcmV-p0-XJcP)Px%9Z5t%RA_m9 zWXfRgiRC~MANcg_%6rWBw2gwDd3_O zj{|k>6M`ZpI5s{8PWt+}lY{d3*>Q#Y#hw*OzC`VOjBkgIFynGB((Y z)rKN2F#b+Cx4J7f*jZGJ1tlUnzqma5-JFneYieHx*fF69z%HC5cryKL2qguc40eo6 z1{<1;N+&90fW5mtuwHoO*2QKpBfC&iP$JJaJ0{qE^q4qFDA7_>9A{4DVswJixTU$b zJ?GI=)Cg45;#JeUSMyq?nip;*|HVrM=R&!Yr5(|7G3Bunn`C_3OQA#xwQ&fXS`pdf zB%nk}jerZxE&VWF3QDBd^_bw?8dnlZq}<}QZIcbvSZ*+xe%6fEx(Ze7ez#q5Ph4{W xN!?3>kZKlvA=NDBL#kP*iOgjQ?vf=l$Tv6wYnZWD+wcGY002ovPDHLkV1oR93sV39 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/krepost-leg.png b/core/assets-raw/sprites/units/krepost-leg.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8fba6a7fb1fea9bf14310fffafe51e132bc39a GIT binary patch literal 691 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 literal 3422 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 delta 19 acmeB_Z;;<`frn9l^F^K<#?5Yg&Wr#?G6qZl diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index d3a9ea1dae..6fa79887f1 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3147,14 +3147,14 @@ public class Blocks{ //TODO balance, set up, where is liquid/sec displayed? status effects maybe? ammo( Liquids.ozone, new ContinuousFlameBulletType(){{ - damage = 85f; + damage = 90f; length = range; knockback = 1f; colors = new Color[]{Color.valueOf("eb7abe").a(0.55f), Color.valueOf("e189f5").a(0.7f), Color.valueOf("907ef7").a(0.8f), Color.valueOf("91a4ff"), Color.white}; }}, Liquids.cyanogen, new ContinuousFlameBulletType(){{ - damage = 180f; + damage = 200f; rangeChange = 70f; length = range + rangeChange; knockback = 2f; @@ -3167,7 +3167,7 @@ public class Blocks{ ); acceptCoolant = false; - scaledHealth = 320; + scaledHealth = 330; shootLength = 7f; size = 3; }}; diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index 0bc24a8e27..c94c3e6e0e 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -125,7 +125,7 @@ public class SectorPresets{ three = new SectorPreset("three", erekir, 32){{ captureWave = 8; - difficulty = 8; + difficulty = 5; }}; //endregion diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 8dcb38a3b1..72db812aaf 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2650,6 +2650,42 @@ public class UnitTypes{ }}); }}; + krepost = new UnitType("krepost"){{ + drag = 0.1f; + speed = 1f; + hitSize = 19f; + health = 7300; + armor = 5f; + outlineColor = Pal.darkOutline; + envDisabled = Env.space; + rotateSpeed = 1.8f; + lockLegBase = true; + legStraightness = 1f; + baseLegStraightness = 0.6f; + + legCount = 8; + legLength = 30f; + legTrns = 2f; + legMoveSpace = 1.05f; + rippleScale = 1.2f; + landShake = 0.5f; + legGroupSize = 2; + legExtension = -5f; + legBaseOffset = 19f; + legStraightLength = 0.9f; + maxStretch = 1.2f; + + ammoType = new PowerAmmoType(2000); + + legSplashDamage = 32; + legSplashRange = 32; + drownTimeMultiplier = 2f; + + hovering = true; + visualElevation = 0.4f; + groundLayer = Layer.legUnit; + }}; + //endregion //region erekir - flying diff --git a/core/src/mindustry/entities/comp/LegsComp.java b/core/src/mindustry/entities/comp/LegsComp.java index f147217c57..a5512a19fb 100644 --- a/core/src/mindustry/entities/comp/LegsComp.java +++ b/core/src/mindustry/entities/comp/LegsComp.java @@ -17,7 +17,9 @@ import mindustry.world.blocks.environment.*; @Component abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ - @Import float x, y; + private static final Vec2 straightVec = new Vec2(); + + @Import float x, y, rotation; @Import UnitType type; @Import Team team; @@ -83,6 +85,10 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ baseRotation = Angles.moveToward(baseRotation, Mathf.angle(deltaX(), deltaY()), type.rotateSpeed); } + if(type.lockLegBase){ + baseRotation = rotation; + } + float rot = baseRotation; float legLength = type.legLength; @@ -106,8 +112,8 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ int deeps = 0; for(int i = 0; i < legs.length; i++){ - float dstRot = legAngle(rot, i); - Vec2 baseOffset = Tmp.v5.trns(dstRot, type.legBaseOffset).add(x, y); + float dstRot = legAngle(i); + Vec2 baseOffset = legOffset(Tmp.v5, i).add(x, y); Leg l = legs[i]; l.joint.sub(baseOffset).limit(type.maxStretch * legLength/2f).add(baseOffset); @@ -121,6 +127,7 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ //back legs have reversed directions boolean backLeg = Math.abs((i + 0.5f) - legs.length/2f) <= 0.501f; if(backLeg && type.flipBackLegs) side = !side; + if(type.flipLegSide) side = !side; l.moving = move; l.stage = moving ? stageF % 1f : Mathf.lerpDelta(l.stage, 0f, 0.1f); @@ -180,9 +187,29 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ } } + Vec2 legOffset(Vec2 out, int index){ + out.trns(defaultLegAngle(index), type.legBaseOffset); + + if(type.legStraightness > 0){ + straightVec.trns(defaultLegAngle(index) - baseRotation, type.legBaseOffset); + straightVec.y = Mathf.sign(straightVec.y) * type.legBaseOffset * type.legStraightLength; + straightVec.rotate(baseRotation); + out.lerp(straightVec, type.baseLegStraightness); + } + + return out; + } + /** @return outwards facing angle of leg at the specified index. */ - float legAngle(float rotation, int index){ - return rotation + 360f / legs.length * index + (360f / legs.length / 2f); + float legAngle(int index){ + if(type.legStraightness > 0){ + return Mathf.slerp(defaultLegAngle(index), (index >= legs.length/2 ? -90 : 90f) + baseRotation, type.legStraightness); + } + return defaultLegAngle(index); + } + + float defaultLegAngle(int index){ + return baseRotation + 360f / legs.length * index + (360f / legs.length / 2f); } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index dbc290fd45..7c738f3b8e 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -111,7 +111,12 @@ public class UnitType extends UnlockableContent{ public int legCount = 4, legGroupSize = 2; public float legLength = 10f, legSpeed = 0.1f, legTrns = 1f, legBaseOffset = 0f, legMoveSpace = 1f, legExtension = 0, legPairOffset = 0, legLengthScl = 1f, kinematicScl = 1f, maxStretch = 1.75f; public float legSplashDamage = 0f, legSplashRange = 5; - public boolean flipBackLegs = true; + public float legStraightLength = 1f; + /** If true, legs are locked to the base of the unit instead of being on an implicit rotating "mount". */ + public boolean lockLegBase = false; + public float baseLegStraightness, legStraightness; + /** TODO neither of these appear to do much */ + public boolean flipBackLegs = true, flipLegSide = false; public float mechSideSway = 0.54f, mechFrontSway = 0.1f; public float mechStride = -1f; @@ -1028,23 +1033,25 @@ public class UnitType extends UnlockableContent{ float rotation = unit.baseRotation(); float invDrown = 1f - unit.drownTime; - for(Leg leg : legs){ - Drawf.shadow(leg.base.x, leg.base.y, ssize, invDrown); + if(footRegion.found()){ + for(Leg leg : legs){ + Drawf.shadow(leg.base.x, leg.base.y, ssize, invDrown); + } } //legs are drawn front first for(int j = legs.length - 1; j >= 0; j--){ int i = (j % 2 == 0 ? j/2 : legs.length - 1 - j/2); Leg leg = legs[i]; - float angle = unit.legAngle(rotation, i); + float angle = unit.legAngle(i); boolean flip = i >= legs.length/2f; int flips = Mathf.sign(flip); - Vec2 position = legOffset.trns(angle, legBaseOffset).add(unit); + Vec2 position = unit.legOffset(legOffset, i).add(unit); Tmp.v1.set(leg.base).sub(leg.joint).inv().setLength(legExtension); - if(leg.moving && visualElevation > 0){ + if(footRegion.found() && leg.moving && visualElevation > 0){ float scl = visualElevation * invDrown; float elev = Mathf.slope(1f - leg.stage) * scl; Draw.color(Pal.shadow); @@ -1054,7 +1061,9 @@ public class UnitType extends UnlockableContent{ Draw.mixcol(Tmp.c3, Tmp.c3.a); - Draw.rect(footRegion, leg.base.x, leg.base.y, position.angleTo(leg.base)); + if(footRegion.found()){ + Draw.rect(footRegion, leg.base.x, leg.base.y, position.angleTo(leg.base)); + } Lines.stroke(legRegion.height * Draw.scl * flips); Lines.line(legRegion, position.x, position.y, leg.joint.x, leg.joint.y, false);