From 9cb4645b1187b35bf459a6ccbe1ffcfcd4984a3a Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Jul 2020 20:04:45 -0400 Subject: [PATCH] More unit progress --- .../main/resources/revisions/MinerUnit/0.json | 1 + core/assets-raw/sprites/units/ghoul-cell.png | Bin 336 -> 0 bytes core/assets-raw/sprites/units/ghoul.png | Bin 1436 -> 0 bytes core/assets-raw/sprites/units/lich-cell.png | Bin 1165 -> 0 bytes core/assets-raw/sprites/units/lich.png | Bin 7559 -> 0 bytes core/assets-raw/sprites/units/reaper-cell.png | Bin 1533 -> 0 bytes core/assets-raw/sprites/units/reaper.aseprite | Bin 12883 -> 0 bytes core/assets-raw/sprites/units/reaper.png | Bin 10836 -> 0 bytes .../sprites/units/revenant-cell.png | Bin 950 -> 0 bytes core/assets-raw/sprites/units/revenant.png | Bin 2983 -> 0 bytes .../sprites/units/weapons/lich-missiles.png | Bin 639 -> 0 bytes .../sprites/units/weapons/reaper-weapon.png | Bin 465 -> 0 bytes .../units/weapons/revenant-missiles.png | Bin 467 -> 0 bytes core/assets-raw/sprites/units/wraith.png | Bin 697 -> 0 bytes core/assets/bundles/bundle.properties | 10 -- core/src/mindustry/content/Blocks.java | 6 +- core/src/mindustry/content/Bullets.java | 18 --- core/src/mindustry/content/UnitTypes.java | 73 +++++++-- .../entities/bullet/ArtilleryBulletType.java | 3 +- .../mindustry/entities/bullet/BulletType.java | 31 ++-- .../bullet/ContinuousLaserBulletType.java | 4 +- .../entities/bullet/FlakBulletType.java | 2 +- .../entities/bullet/HealBulletType.java | 4 +- .../entities/bullet/LaserBulletType.java | 6 +- .../entities/bullet/LightningBulletType.java | 2 +- .../entities/bullet/MissileBulletType.java | 21 +-- core/src/mindustry/input/DesktopInput.java | 2 +- core/src/mindustry/input/InputHandler.java | 1 + .../mindustry/io/legacy/LegacyTypeTable.java | 139 ------------------ .../blocks/defense/PointDefenseTurret.java | 4 +- 30 files changed, 106 insertions(+), 221 deletions(-) create mode 100644 annotations/src/main/resources/revisions/MinerUnit/0.json delete mode 100644 core/assets-raw/sprites/units/ghoul-cell.png delete mode 100644 core/assets-raw/sprites/units/ghoul.png delete mode 100644 core/assets-raw/sprites/units/lich-cell.png delete mode 100644 core/assets-raw/sprites/units/lich.png delete mode 100644 core/assets-raw/sprites/units/reaper-cell.png delete mode 100644 core/assets-raw/sprites/units/reaper.aseprite delete mode 100644 core/assets-raw/sprites/units/reaper.png delete mode 100644 core/assets-raw/sprites/units/revenant-cell.png delete mode 100644 core/assets-raw/sprites/units/revenant.png delete mode 100644 core/assets-raw/sprites/units/weapons/lich-missiles.png delete mode 100644 core/assets-raw/sprites/units/weapons/reaper-weapon.png delete mode 100644 core/assets-raw/sprites/units/weapons/revenant-missiles.png delete mode 100644 core/assets-raw/sprites/units/wraith.png delete mode 100644 core/src/mindustry/io/legacy/LegacyTypeTable.java diff --git a/annotations/src/main/resources/revisions/MinerUnit/0.json b/annotations/src/main/resources/revisions/MinerUnit/0.json new file mode 100644 index 0000000000..5df97253d8 --- /dev/null +++ b/annotations/src/main/resources/revisions/MinerUnit/0.json @@ -0,0 +1 @@ +{fields:[{name:ammo,type:int,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/core/assets-raw/sprites/units/ghoul-cell.png b/core/assets-raw/sprites/units/ghoul-cell.png deleted file mode 100644 index 704b0dea1524c22b25ebd23a481bd1544d1a3dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336 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 diff --git a/core/assets-raw/sprites/units/reaper-cell.png b/core/assets-raw/sprites/units/reaper-cell.png deleted file mode 100644 index eba8627f99eef0c865c348d99223b1280518010a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1533 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Xs4mJh`hO-lvu3}(dU@Q)DcVbv~PUa;81M7BA z7srr_IdAV~=Uw)ZXt=oJSDBOf#W(RM)h=zFVc(*!vaiQj{QBp4%8HFqE3E6DCrU{b zSurvY1+JL?+xWdy;QEH|tOA#df3zhUbep8V$jEzlMZIZD+JlU&x88ArOH>cL8L#aB z-l?#*=1nalL$#oTf(|3gAt55EB{Sc@-g@G(luy>=deUz}ntl3<1e{5|3|7{;b zl8{XulRCtxPmhdEN_WSI#Y?>WTw^xbB>6^0o?g=<_iVPlSR40%KScS7LPZVo`8R$u z^<~H$|M>CxVS@x=k#SOH+Q*IGS!GV%xv+Mx?xs1V8<$-^lW55_ zLnCzq&;2ds*N#T{8Mmi$CN$|Xr~X(LdAR1<1{=nhjinRzt-l^My{N)ZzjE8TXbNtgcf{8|p1gPc^9+{_Jd8C;buz6S&x8-K zZ$GVST{r*v=6si>T`OPFN~h$L<$8xQXS1O5N7I!bTrwt2aI6 zc;NQv`#fFgkU!U^b|^6I==|~2^X3AxLMy>D>J6Po*7q#s&H9|D-c-qA(D-Aj>DGB> zZ-2XdsAbyW^ykx=wO7A?{dK-ycmMQor5|#PHJ>a@9)%yX&Q6=VJ-T~=!ak#v9?OPgx^DXFOEHP;O0GN>5@Jk?pdv{dhS)H1;XqHHVotTf$v?rG%Z zQn42%|7UbEE@FRHJx}-n&tXUXGoNf2=OiS&=$)B%@okahUw+9i=jJfuiA4u9{b@A; zk1h7?+4kCi=UqDUwSDq=w-|kM4_HfY)XTmsdZD>|1~R==R$y zo~~W{@|NwxbfE*yLI=x^tdD1^NKlHH|Ksb~=56eyyJP<4or#Z+?|%RK;LqHahWDuB}~j%By0p zSn-dqr%T`7xpeY_$7=JfRKFDo#dP1lw5ucj{u~Bt^KzjYyT2|~ey=Y**Q?vO zJeKJ;^V+Ix7?-uh{Yffd;!!Gf{$3*_Vn2^FL1Ch@MxBq~fdnPDfIl;o8yIiCSii>8 zhe=`z?|=Jj!RZWaX^*3uU)-rt+wZz;yMfCO8T_S0)~7=kOw9WppYEPA-*5S41Do;~{Bk0tZuhKpyS{=9RU5XK|ryW|*1=-`CFyVri)?Nrz*X|Srwysliy!?&&b zQPE;^cOK2N4uK(SL6WMqZ)zF8JTBWA(i^|J-%;kD+0u^V27iD3TJ_0r-}>wO?f=`% zKdX0h4uj@9!w~zQ=UEt+bWJ)aWS{jhmF1|9t=;tBPd|kGsrl)x$=12Z%Pru~in9iR zF`XP;^12clt4?$-_;Imo;i6gPN*Z-rQZ}r}@@6^Oe~m}{>Qa}0KR22g7k94pPZYL~ zGDtC*Eamudv1qefaJHa`eUwp-iMhDrM|=qnPntxRx^XZ+>kPlzyp)F)ASq8*KbLh* G2~7ZpmQbkx diff --git a/core/assets-raw/sprites/units/reaper.aseprite b/core/assets-raw/sprites/units/reaper.aseprite deleted file mode 100644 index 51eb8f345b6fcb38757bd0013f8440c4f622aeb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12883 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 ZXB2nk_(!uIWME)m@O1TaS?83{1ORZ57WDuC diff --git a/core/assets-raw/sprites/units/revenant-cell.png b/core/assets-raw/sprites/units/revenant-cell.png deleted file mode 100644 index 852af589049efb015788e893051092770cf11b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 950 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 diff --git a/core/assets-raw/sprites/units/weapons/reaper-weapon.png b/core/assets-raw/sprites/units/weapons/reaper-weapon.png deleted file mode 100644 index 016e6dacf439e30ba968a11bbae1e29fad2f01d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 465 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F~)y=j|w*no#M zA>J(eqH@U>!LBo|jQKOIzozvVTTIC4>K93Ue%$E8G6S*wW*bE^C5{(*82e71^}^L9 z>rOa(iG#q0k3XkA{rzV$>t4I|OJ_{8Ds1=1v+t2raP?Tfm&M`q)A#c)DKMvCX6<#kbEy6V&jyzn zH#U8I@Ra2OAHypK#({HTw^B>>aXmw!Iz4f{Gtl}gB zZY;?C)VzE{`734xmK&Mtn5LAyOZc46Jwd>`IAi~P?g`)gmTo-TAIPh~dqXNf>N>B6 z;)Rvn>VC?mD zaSX|5d^^L?@34VL+kT}R77Ri>JTsLP4GqJ2czo_O^%k|rEeuI|%H}cG%3y&}0mC#O zS*tBUYU={n47`HWeeZWqUig0Yq-$mS_J8bt-H<5JmMC%T-=)hXbrmw}9$PRyc=AW* z``zCq)2#RJd;9#{<)cCkDl@+`99z8b#6yQG-SI!|8D9#ldmm-P(8VAp=qq2?;l@JGNoE-@>t)@k?{3DchQuh>Bzp?pZ&aDNTJMdAxcAklMYEi42}D(9EMQxrIBNpC zE3ZxLTBCGrw#%0&cMLH;OXk;vd$@?2>^KC&Po6P diff --git a/core/assets-raw/sprites/units/wraith.png b/core/assets-raw/sprites/units/wraith.png deleted file mode 100644 index 435c9d24cf3ace2d51b91ec568de2d94c1a89839..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FU@G=> zaSX|5d>f(b&+I5LS7;UIl0}P{8nc{!F=qut6o|Sia&&zVey2WR)iS0~7ug7r|BXwy z0s{kuCb4;H@m*Fe-)y{j^X~Gcjn%J;c7K1icjnE0u?0@8T>sh4w|joG+`H5F5|c%- z%}oiZH$Qyj?x@;3?p>sjVByQ78^TubY_C#kiQQ`XF(KlX*sU2A z_hvu zJ+Wt1d}jQ$b?E$HIQ!|TdHmfsW2VZav#NZY_4Aft zS9Eaa{#rhU8>!{7%u6=yj$$g#j`G;bHmiMYjAgPVsTFG tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index ee1d71fc5f..05f51600fe 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1535,7 +1535,7 @@ public class Blocks implements ContentList{ @Override public void init(Bullet b){ for(int i = 0; i < rays; i++){ - Damage.collideLine(b, b.team(), hitEffect, b.x, b.y, b.rotation(), rayLength - Math.abs(i - (rays / 2)) * 20f); + Damage.collideLine(b, b.team, hitEffect, b.x, b.y, b.rotation(), rayLength - Math.abs(i - (rays / 2)) * 20f); } } @@ -1689,7 +1689,7 @@ public class Blocks implements ContentList{ plans = new UnitPlan[]{ new UnitPlan(UnitTypes.dagger, 200f, with(Items.silicon, 10, Items.lead, 10)), new UnitPlan(UnitTypes.crawler, 200f, with(Items.silicon, 10, Items.blastCompound, 5)), - new UnitPlan(UnitTypes.nova, 200f, with(Items.silicon, 20, Items.lead, 10)), + new UnitPlan(UnitTypes.nova, 200f, with(Items.silicon, 20, Items.lead, 20, Items.titanium, 20)), }; size = 3; consumes.power(1.2f); @@ -1699,7 +1699,7 @@ public class Blocks implements ContentList{ requirements(Category.units, with(Items.copper, 30, Items.lead, 70)); plans = new UnitPlan[]{ new UnitPlan(UnitTypes.flare, 200f, with(Items.silicon, 10)), - new UnitPlan(UnitTypes.mono, 200f, with(Items.silicon, 10)), + new UnitPlan(UnitTypes.mono, 200f, with(Items.silicon, 15, Items.lead, 15)), //new UnitPlan(UnitTypes.phantom, 200f, with(Items.silicon, 10)), }; size = 3; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 069a8a7f3c..21d6744255 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -289,24 +289,6 @@ public class Bullets implements ContentList{ lightningLength = 14; }}; - missileJavelin = new MissileBulletType(5f, 10.5f, "missile"){{ - width = 8f; - height = 8f; - shrinkY = 0f; - drag = -0.003f; - keepVelocity = false; - splashDamageRadius = 20f; - splashDamage = 1f; - lifetime = 90f; - trailColor = Color.valueOf("b6c6fd"); - hitEffect = Fx.blastExplosion; - despawnEffect = Fx.blastExplosion; - backColor = Pal.bulletYellowBack; - frontColor = Pal.bulletYellow; - weaveScale = 8f; - weaveMag = 2f; - }}; - missileSwarm = new MissileBulletType(2.7f, 12, "missile"){{ width = 8f; height = 8f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 05fe79f429..d3ce100382 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -29,8 +29,8 @@ public class UnitTypes implements ContentList{ //air (no special traits) public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra; - //air + building - public static @EntityDef({Unitc.class, Builderc.class}) UnitType mono; + //air + mining + public static @EntityDef({Unitc.class, Minerc.class}) UnitType mono; //air + building + mining public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType poly; @@ -363,7 +363,7 @@ public class UnitTypes implements ContentList{ }}; zenith = new UnitType("zenith"){{ - health = 220; + health = 450; speed = 1.9f; accel = 0.04f; drag = 0.016f; @@ -376,12 +376,15 @@ public class UnitTypes implements ContentList{ engineSize = 3f; weapons.add(new Weapon("zenith-missiles"){{ - reload = 70f; + reload = 32f; x = 7f; rotate = true; shake = 1f; + shots = 2; + inaccuracy = 5f; + velocityRnd = 0.2f; - bullet = new MissileBulletType(2.7f, 12, "missile"){{ + bullet = new MissileBulletType(3f, 12){{ width = 8f; height = 8f; shrinkY = 0f; @@ -451,20 +454,28 @@ public class UnitTypes implements ContentList{ mono = new UnitType("mono"){{ flying = true; drag = 0.05f; - accel = 0.2f; + accel = 0.15f; speed = 2f; - range = 50f; health = 100; engineSize = 1.8f; engineOffset = 5.7f; + + mineTier = 1; + mineSpeed = 2.5f; + weapons.add(new Weapon(){{ y = 1.5f; + x = 0f; + reload = 40f; - x = 0.5f; ejectEffect = Fx.none; recoil = 2f; - bullet = Bullets.healBulletBig; shootSound = Sounds.pew; + mirror = false; + + bullet = new HealBulletType(5.2f, 10){{ + healPercent = 4f; + }}; }}); }}; @@ -473,29 +484,63 @@ public class UnitTypes implements ContentList{ flying = true; drag = 0.05f; - speed = 3f; + speed = 2f; rotateSpeed = 15f; - accel = 0.3f; + accel = 0.1f; range = 70f; itemCapacity = 70; health = 400; buildSpeed = 0.5f; engineOffset = 6.5f; hitsize = 8f; + lowAltitude = true; + + mineTier = 2; + mineSpeed = 3.5f; + + abilities.add(new HealFieldAbility(5f, 60f * 5, 50f)); + + weapons.add(new Weapon("heal-weapon-mount"){{ + y = -2.5f; + x = 3.5f; + reload = 34f; + ejectEffect = Fx.none; + recoil = 2f; + shootSound = Sounds.pew; + shots = 1; + velocityRnd = 0.5f; + inaccuracy = 15f; + alternate = true; + + bullet = new MissileBulletType(4f, 10){{ + homingPower = 0.08f; + weaveMag = 4; + weaveScale = 4; + lifetime = 50f; + keepVelocity = false; + shootEffect = Fx.shootHeal; + smokeEffect = Fx.hitLaser; + frontColor = Color.white; + + backColor = Pal.heal; + trailColor = Pal.heal; + }}; + }}); }}; mega = new UnitType("mega"){{ health = 500; - speed = 2f; - accel = 0.05f; - drag = 0.016f; + speed = 1.8f; + accel = 0.06f; + drag = 0.017f; lowAltitude = true; flying = true; engineOffset = 10.5f; rotateShooting = false; hitsize = 15f; engineSize = 3f; + payloadCapacity = 3; weapons.add( new Weapon("heal-weapon-mount"){{ diff --git a/core/src/mindustry/entities/bullet/ArtilleryBulletType.java b/core/src/mindustry/entities/bullet/ArtilleryBulletType.java index 08d02fe8f5..dfcab76e8a 100644 --- a/core/src/mindustry/entities/bullet/ArtilleryBulletType.java +++ b/core/src/mindustry/entities/bullet/ArtilleryBulletType.java @@ -2,12 +2,10 @@ package mindustry.entities.bullet; import arc.graphics.g2d.*; import mindustry.content.*; -import mindustry.entities.*; import mindustry.gen.*; //TODO scale velocity depending on fslope() public class ArtilleryBulletType extends BasicBulletType{ - protected Effect trailEffect = Fx.artilleryTrail; public ArtilleryBulletType(float speed, float damage, String bulletSprite){ super(speed, damage, bulletSprite); @@ -17,6 +15,7 @@ public class ArtilleryBulletType extends BasicBulletType{ scaleVelocity = true; hitShake = 1f; hitSound = Sounds.explosion; + trailEffect = Fx.artilleryTrail; } public ArtilleryBulletType(){ diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index baad95b1bc..0cf9cf60ed 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -75,6 +75,11 @@ public abstract class BulletType extends Content{ public BulletType fragBullet = null; public Color hitColor = Color.white; + public Color trailColor = Pal.missileYellowBack; + public float trailChance = -0.0001f; + public Effect trailEffect = Fx.missileTrail; + public float trailParam = 2f; + /** Use a negative value to disable splash damage. */ public float splashDamageRadius = -1f; @@ -118,7 +123,7 @@ public abstract class BulletType extends Content{ } public void hit(Bullet b){ - hit(b, b.getX(), b.getY()); + hit(b, b.x, b.y); } public void hit(Bullet b, float x, float y){ @@ -140,20 +145,20 @@ public abstract class BulletType extends Content{ } if(splashDamageRadius > 0){ - Damage.damage(b.team(), x, y, splashDamageRadius, splashDamage * b.damageMultiplier(), collidesAir, collidesGround); + Damage.damage(b.team, x, y, splashDamageRadius, splashDamage * b.damageMultiplier(), collidesAir, collidesGround); if(status != StatusEffects.none){ - Damage.status(b.team(), x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround); + Damage.status(b.team, x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround); } } for(int i = 0; i < lightning; i++){ - Lightning.create(b.team(), Pal.surge, lightningDamage < 0 ? damage : lightningDamage, b.getX(), b.getY(), Mathf.random(360f), lightningLength); + Lightning.create(b.team, Pal.surge, lightningDamage < 0 ? damage : lightningDamage, b.x, b.y, Mathf.random(360f), lightningLength); } } public void despawned(Bullet b){ - despawnEffect.at(b.getX(), b.getY(), b.rotation()); + despawnEffect.at(b.x, b.y, b.rotation()); hitSound.at(b); if(fragBullet != null || splashDamageRadius > 0 || lightning > 0){ @@ -165,7 +170,7 @@ public abstract class BulletType extends Content{ } public void drawLight(Bullet b){ - Drawf.light(b.team(), b, lightRadius, lightColor, lightOpacity); + Drawf.light(b.team, b, lightRadius, lightColor, lightOpacity); } public void init(Bullet b){ @@ -180,14 +185,20 @@ public abstract class BulletType extends Content{ public void update(Bullet b){ if(homingPower > 0.0001f){ - Teamc target = Units.closestTarget(b.team(), b.getX(), b.getY(), homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround); + Teamc target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround); if(target != null){ b.vel.setAngle(Mathf.slerpDelta(b.rotation(), b.angleTo(target), homingPower)); } } if(weaveMag > 0){ - b.vel.rotate(Mathf.sin(Time.time() + b.id() * 3, weaveScale, weaveMag) * Time.delta()); + b.vel.rotate(Mathf.sin(Mathf.randomSeed(b.id, 10f) + b.time, weaveScale, weaveMag) * Time.delta()); + } + + if(trailChance > 0){ + if(Mathf.chanceDelta(trailChance)){ + trailEffect.at(b.x, b.y, trailParam, trailColor); + } } } @@ -213,11 +224,11 @@ public abstract class BulletType extends Content{ } public Bullet create(Bullet parent, float x, float y, float angle){ - return create(parent.owner(), parent.team(), x, y, angle); + return create(parent.owner(), parent.team, x, y, angle); } public Bullet create(Bullet parent, float x, float y, float angle, float velocityScl){ - return create(parent.owner(), parent.team(), x, y, angle, velocityScl); + return create(parent.owner(), parent.team, x, y, angle, velocityScl); } public Bullet create(@Nullable Entityc owner, Team team, float x, float y, float angle, float damage, float velocityScl, float lifetimeScl, Object data){ diff --git a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java index c38bb7e32f..ef40d9b95b 100644 --- a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java +++ b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java @@ -48,7 +48,7 @@ public class ContinuousLaserBulletType extends BulletType{ //damage every 5 ticks if(b.timer(1, 5f)){ - Damage.collideLine(b, b.team(), hitEffect, b.x, b.y, b.rotation(), length, true); + Damage.collideLine(b, b.team, hitEffect, b.x, b.y, b.rotation(), length, true); } if(shake > 0){ @@ -72,7 +72,7 @@ public class ContinuousLaserBulletType extends BulletType{ Tmp.v1.trns(b.rotation(), baseLen * 1.1f); - Drawf.light(b.team(), b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, 40, Color.orange, 0.7f); + Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, 40, Color.orange, 0.7f); Draw.reset(); } diff --git a/core/src/mindustry/entities/bullet/FlakBulletType.java b/core/src/mindustry/entities/bullet/FlakBulletType.java index 5c3e9bc2ec..ad5f8be7fa 100644 --- a/core/src/mindustry/entities/bullet/FlakBulletType.java +++ b/core/src/mindustry/entities/bullet/FlakBulletType.java @@ -28,7 +28,7 @@ public class FlakBulletType extends BasicBulletType{ if(b.data() instanceof Integer) return; if(b.timer(2, 6)){ - Units.nearbyEnemies(b.team(), Tmp.r1.setSize(explodeRange * 2f).setCenter(b.x, b.y), unit -> { + Units.nearbyEnemies(b.team, Tmp.r1.setSize(explodeRange * 2f).setCenter(b.x, b.y), unit -> { if(b.data() instanceof Float || !unit.checkTarget(collidesAir, collidesGround)) return; if(unit.dst(b) < explodeRange){ diff --git a/core/src/mindustry/entities/bullet/HealBulletType.java b/core/src/mindustry/entities/bullet/HealBulletType.java index deaf47fd27..af66a4c931 100644 --- a/core/src/mindustry/entities/bullet/HealBulletType.java +++ b/core/src/mindustry/entities/bullet/HealBulletType.java @@ -29,7 +29,7 @@ public class HealBulletType extends BulletType{ @Override public boolean collides(Bullet b, Building tile){ - return tile.team() != b.team() || tile.healthf() < 1f; + return tile.team() != b.team || tile.healthf() < 1f; } @Override @@ -46,7 +46,7 @@ public class HealBulletType extends BulletType{ public void hitTile(Bullet b, Building tile){ super.hit(b); - if(tile.team() == b.team() && !(tile.block() instanceof BuildBlock)){ + if(tile.team() == b.team && !(tile.block() instanceof BuildBlock)){ Fx.healBlockFull.at(tile.x, tile.y, tile.block().size, Pal.heal); tile.heal(healPercent / 100f * tile.maxHealth()); } diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index 4c5e3b3a40..571a78826d 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -54,11 +54,11 @@ public class LaserBulletType extends BulletType{ furthest = null; world.raycast(b.tileX(), b.tileY(), world.toTile(b.x + Tmp.v1.x), world.toTile(b.y + Tmp.v1.y), - (x, y) -> (furthest = world.tile(x, y)) != null && furthest.team() != b.team() && furthest.block().absorbLasers); + (x, y) -> (furthest = world.tile(x, y)) != null && furthest.team() != b.team && furthest.block().absorbLasers); float resultLength = furthest != null ? Math.max(6f, b.dst(furthest.worldx(), furthest.worldy())) : length; - Damage.collideLine(b, b.team(), hitEffect, b.x, b.y, b.rotation(), resultLength); + Damage.collideLine(b, b.team, hitEffect, b.x, b.y, b.rotation(), resultLength); if(furthest != null) b.data(resultLength); laserEffect.at(b.x, b.y, b.rotation(), resultLength * 0.75f); @@ -93,7 +93,7 @@ public class LaserBulletType extends BulletType{ Draw.reset(); Tmp.v1.trns(b.rotation(), baseLen * 1.1f); - Drawf.light(b.team(), b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, width * 1.4f * b.fout(), colors[0], 0.6f); + Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, width * 1.4f * b.fout(), colors[0], 0.6f); } @Override diff --git a/core/src/mindustry/entities/bullet/LightningBulletType.java b/core/src/mindustry/entities/bullet/LightningBulletType.java index 901f7a2f0e..2104c94e67 100644 --- a/core/src/mindustry/entities/bullet/LightningBulletType.java +++ b/core/src/mindustry/entities/bullet/LightningBulletType.java @@ -32,6 +32,6 @@ public class LightningBulletType extends BulletType{ @Override public void init(Bullet b){ - Lightning.create(b.team(), lightningColor, damage, b.x, b.y, b.rotation(), lightningLength + Mathf.random(lightningLengthRand)); + Lightning.create(b.team, lightningColor, damage, b.x, b.y, b.rotation(), lightningLength + Mathf.random(lightningLengthRand)); } } diff --git a/core/src/mindustry/entities/bullet/MissileBulletType.java b/core/src/mindustry/entities/bullet/MissileBulletType.java index 6e15bd5b8b..a3670ac3c0 100644 --- a/core/src/mindustry/entities/bullet/MissileBulletType.java +++ b/core/src/mindustry/entities/bullet/MissileBulletType.java @@ -1,32 +1,27 @@ package mindustry.entities.bullet; -import arc.graphics.*; -import arc.math.*; -import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; public class MissileBulletType extends BasicBulletType{ - protected Color trailColor = Pal.missileYellowBack; public MissileBulletType(float speed, float damage, String bulletSprite){ super(speed, damage, bulletSprite); backColor = Pal.missileYellowBack; frontColor = Pal.missileYellow; homingPower = 0.08f; + shrinkY = 0f; + width = 8f; + height = 8f; hitSound = Sounds.explosion; + trailChance = 0.2f; + } + + public MissileBulletType(float speed, float damage){ + this(speed, damage, "missile"); } public MissileBulletType(){ this(1f, 1f, "missile"); } - - @Override - public void update(Bullet b){ - super.update(b); - - if(Mathf.chanceDelta(0.2)){ - Fx.missileTrail.at(b.x, b.y, 2f, trailColor); - } - } } diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 2e82e71c63..a2fea83cc9 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -603,7 +603,7 @@ public class DesktopInput extends InputHandler{ Payloadc pay = (Payloadc)unit; if(Core.input.keyTap(Binding.pickupCargo) && pay.payloads().size < unit.type().payloadCapacity){ - Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitsize * 1.1f, u -> u.isAI() && u.isGrounded()); + Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitsize * 1.1f, u -> u.isAI() && u.isGrounded() && u.mass() < unit.mass()); if(target != null){ Call.pickupUnitPayload(player, target); }else if(!pay.hasPayload()){ diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 5237a2c117..e59784dd0b 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -112,6 +112,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Payloadc pay = (Payloadc)unit; if(target.isAI() && target.isGrounded() && pay.payloads().size < unit.type().payloadCapacity + && target.mass() < unit.mass() && target.within(unit, unit.type().hitsize * 1.5f)){ pay.pickup(target); } diff --git a/core/src/mindustry/io/legacy/LegacyTypeTable.java b/core/src/mindustry/io/legacy/LegacyTypeTable.java deleted file mode 100644 index 642c48a189..0000000000 --- a/core/src/mindustry/io/legacy/LegacyTypeTable.java +++ /dev/null @@ -1,139 +0,0 @@ -package mindustry.io.legacy; - -/* -Latest data: [build 81] - -0 = Player -1 = Fire -2 = Puddle -3 = MinerDrone -4 = RepairDrone -5 = BuilderDrone -6 = GroundUnit -7 = GroundUnit -8 = GroundUnit -9 = GroundUnit -10 = GroundUnit -11 = FlyingUnit -12 = FlyingUnit -13 = Revenant - -Before removal of lightining/bullet: [build 80] - -0 = Player -1 = Fire -2 = Puddle -3 = Bullet -4 = Lightning -5 = MinerDrone -6 = RepairDrone -7 = BuilderDrone -8 = GroundUnit -9 = GroundUnit -10 = GroundUnit -11 = GroundUnit -12 = GroundUnit -13 = FlyingUnit -14 = FlyingUnit -15 = Revenant - -Before addition of new units: [build 79 and below] - -0 = Player -1 = Fire -2 = Puddle -3 = Bullet -4 = Lightning -5 = RepairDrone -6 = GroundUnit -7 = GroundUnit -8 = GroundUnit -9 = GroundUnit -10 = GroundUnit -11 = FlyingUnit -12 = FlyingUnit -13 = BuilderDrone -14 = Revenant - */ -public class LegacyTypeTable{ - /* - 0 = Player -1 = Fire -2 = Puddle -3 = Draug -4 = Spirit -5 = Phantom -6 = Dagger -7 = Crawler -8 = Titan -9 = Fortress -10 = Eruptor -11 = Wraith -12 = Ghoul -13 = Revenant - - private static final Prov[] build81Table = { - Player::new, - Fire::new, - Puddle::new, - MinerDrone::new, - RepairDrone::new, - BuilderDrone::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - FlyingUnit::new, - FlyingUnit::new, - HoverUnit::new - }; - - private static final Prov[] build80Table = { - Player::new, - Fire::new, - Puddle::new, - Bullet::new, - Lightning::new, - MinerDrone::new, - RepairDrone::new, - BuilderDrone::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - FlyingUnit::new, - FlyingUnit::new, - HoverUnit::new - }; - - private static final Prov[] build79Table = { - Player::new, - Fire::new, - Puddle::new, - Bullet::new, - Lightning::new, - RepairDrone::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - GroundUnit::new, - FlyingUnit::new, - FlyingUnit::new, - BuilderDrone::new, - HoverUnit::new - }; - - public static Prov[] getTable(int build){ - if(build == -1 || build == 81){ - //return most recent one since that's probably it; not guaranteed - return build81Table; - }else if(build == 80){ - return build80Table; - }else{ - return build79Table; - } - }*/ -} diff --git a/core/src/mindustry/world/blocks/defense/PointDefenseTurret.java b/core/src/mindustry/world/blocks/defense/PointDefenseTurret.java index 656f1bde0e..25e5439c69 100644 --- a/core/src/mindustry/world/blocks/defense/PointDefenseTurret.java +++ b/core/src/mindustry/world/blocks/defense/PointDefenseTurret.java @@ -69,11 +69,11 @@ public class PointDefenseTurret extends Block{ //retarget if(timer(timerTarget, retargetTime)){ - target = Groups.bullet.intersect(x - range, y - range, range*2, range*2).min(b -> b.team() == team || !b.type().hittable ? Float.MAX_VALUE : b.dst2(this)); + target = Groups.bullet.intersect(x - range, y - range, range*2, range*2).min(b -> b.team == team || !b.type().hittable ? Float.MAX_VALUE : b.dst2(this)); } //look at target - if(target != null && target.within(this, range) && target.team() != team && target.type().hittable){ + if(target != null && target.within(this, range) && target.team != team && target.type().hittable){ float dest = angleTo(target); rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta()); reload -= edelta();