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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 N(w?qU~=?y zaSW-L^LEZzUuQ#}2HqqQi%lFdH<=Bc+#TK=6cl^NvHQTupp}n~l)bUY`+IlQzI|%< zPxn7oW7X(d^x?7B?}P2fm&d=_d%nN?Yi+q>XyZH)mEAIh4=sZxoGEf)o$led=~SY4 zlrrl{jrPz7lA0c7mWK~Tc{m!Kd?|J%h>PLC+q-}FU(a9P{!;9<>g+u$w~M5xsB4+* z*tRc`+l!0gz~|GAYb?G$jIeiUU`?tDnlMc!Gj;9L9esu}n#cdt)Ss=9Ww=qQy*<)X zi}j{!pSR57sZDPbj;nr}E6SXpyqq4+K6)8-seJFQ!IA*&3h8|YNlC5UGcq(o z!Y8#zT~7AV&lO-y7b}skDW9;2m)))CN|KSsK|SBt>ysA?P4+zXqROi;!pBW>@%gP! zI?|TPF6nu3w&P0m+M8LPMm3^y3>u}q=1i6FKIg@g{_2_EdnLm=@qEfJLt~77Tr0^n zja8ocM2Gvs1fC*|JJVQB@D=slOcLb0z}HviYt6ut{vk~DfabPy4_r^rJZgHNdy??H zgOBSjo-#b1^&xb-M1QQ$=7MOAuFPVv4uVHdn+dTD3wotWuqv`2mUboXar*OJS_Wlt-v zXpUhi{nEdHuUqKK$D}5!34Q_fi4FnvRe>U|f(PU$N9BK*@2<9jfq{X+)78&qol`;+ E0AN@i#{d8T 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 zcmeAS@N?(olHy`uVBq!ia0y~yV6bLjU@+rgV_;yY-2E_@fq{XsILO_JVcj{ImkbO{ zvYsxEAsLNtZ`t}Cb`W5Fz?ohs<-L=`L&0UXl~=2UQ(wah0aINkg@djW?mXD-&?t9n z&G-DW^q!BuLKW7_*7rr8pP?GH>B;@{sYWmUJ^ZL`mbU-4n(S+RVcUZu8b+lBAD&nQ zq?}54-}%%*Q2xi4H>ax4eBZAAwfo7R1|f~4X6FDGX&Z|jEFz2+tX&yR{#*Ebz7#*S z2vEA$`p`{uwzTdBt!=NXvaZcuQ)_x4>&Cj*_4Vgijqa;$N_qzW{4BTc(l)yh8Pdb5s${i)ht03Mb0!pJXT`JKFkHxSKyQvp zh0)&}4pr89JY_vTY|^uOywtT)8usqC-4Ivt^xDxh1LfTTK>bA!g`o|PAdfxSJo{%M0t9VuCx$~;X6`f~NIp0lEH9lc(!IV8? UWBBb43=9kmp00i_>zopr0Q`OnQvd(} 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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 TH(6`rL56y|`njxgN@xNAmD8G$ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index bc3865d75c..0ae2b2e3c7 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -519,3 +519,4 @@ 63184=crystal-orbs|block-crystal-orbs-ui 63183=conquer|unit-conquer-ui 63182=disrupt|unit-disrupt-ui +63181=krepost|unit-krepost-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index ecb86820fe3b411fc13512c98ca6baa3e53f3c6b..d6b1e0621030fd247f9c67fcf7543b9739af3f31 100644 GIT binary patch delta 27 icmZpW@08zgfrrsx^F^KqSS)?;?354u8aVLmk8zn 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);