Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion assets/bundles/bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -304,12 +304,16 @@ block.meld-pad-phi.name = Pad: Phi
block.meld-pad-phi.description = Outpost of the base. Only one can be active at a time.\n[red]Cannot support a base alone.[]
block.meld-pad-phi.details = Golden ratio? What's that?

block.meld-aspect-incinerator.name = Aspect Incinerator
block.meld-aspect-incinerator.description = Incinerates items when fed [meld-aspect]Aspect[].\n\nBuffers items otherwise.
block.meld-aspect-incinerator.details = Shoulda been named output terminal or smthing

block.meld-core-raft-dormant.name = Core: Raft[lightgray](Dormant)[]
block.meld-core-raft-dormant.description = Core of the base. Allows units to pass through freely. [accent]Activates when inside a powered facility.[]
block.meld-core-raft-dormant.details = Cheap bunker with intra-sector item transport and radar built in.

block.meld-core-raft.name = Core: Raft
block.meld-core-raft.description = Core of the base. Allows units to pass through freely. Once all are destroyed, the sector is lost.
block.meld-core-raft.description = Core of the base. Allows units to pass through freely. Once all are destroyed, the sector is lost.\n\n[accent]Requires an adjacent incinerator to void excess items.[]
block.meld-core-raft.details = A great logistics hub. Equipped with single-use launch thrusters.

block.meld-core-bunker.name = Core: Bunker
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/sprites/blocks/effect/aspect-incinerator.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion mod.hjson
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ main: "meld.Meld"
description: "Meld Java.\n\n[[]accent]Only has custom game content! (play the info map to understand)[[]]\n\nIncompatable with hjson meld"

#the mod version
version: gameplay expirimental v3
version: gameplay expirimental v4

#the minimum game build required to run this mod
minGameVersion: 154
Expand Down
1 change: 1 addition & 0 deletions src/meld/Meld.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public static String prefix(String in){
}
private static final StringBuilder b = new StringBuilder();

//Thanks smolkey
public static String gradient(String in, Color... colors){
if(colors.length == 1) return "[#" + colors[0].toString().substring(0, 6) + "]" + in + "[]";

Expand Down
47 changes: 38 additions & 9 deletions src/meld/content/MeldBlocks.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import meld.world.blocks.consumers.StupidConsumeAspects;
import meld.world.blocks.crafting.ModularCrafter;
import meld.world.blocks.crafting.RecipeCrafter;
import meld.world.blocks.crafting.StorageIncinerator;
import meld.world.blocks.crafting.recipe.ItemRecipe;
import meld.world.blocks.crafting.recipe.SpoolRecipe;
import meld.world.blocks.crafting.modules.*;
Expand All @@ -29,6 +30,7 @@
import meld.world.blocks.production.SingleBeamDrill;
import meld.world.meta.*;
import mindustry.Vars;
import mindustry.content.Blocks;
import mindustry.content.Fx;
import mindustry.content.StatusEffects;
import mindustry.entities.bullet.*;
Expand Down Expand Up @@ -80,7 +82,14 @@ public class MeldBlocks {
//Suture shoots healing needles in a cone at the closest damaged block. Impales enemies, causing them to take constant chip damage and be sedated.
bruisekit, gauze, suture;

public static Block coreRaft, aetherAccumulator, elementalBlaster, pneumaticPulsear,
//Core Blocks
public static Block coreRaft;

//Core Incinerator does what core incinerator does... it core incinerator

public static ItemIncinerator aspectIncinerator;

public static Block aetherAccumulator, elementalBlaster, pneumaticPulsear,
earthboundInfuser, fumehood, sharkFactory;

public static ModularCrafter gasKiln, rotaryKiln, pneumaticExtruder;
Expand Down Expand Up @@ -999,8 +1008,7 @@ public void update(Bullet b){
consume(new ConsumeAspects(outletRate/2, MeldLiquids.aspectEfficiencies, MeldLiquids.aspectDensities));
}};

coreRaft = new CoreRaft("core-raft"){
{
coreRaft = new CoreRaft("core-raft"){{
requirements(Category.effect, with(
MeldItems.debris, 900
));
Expand All @@ -1012,7 +1020,16 @@ public void update(Bullet b){
unitCapModifier = 6;

unitType = MeldUnits.bulbhead;
solid = true;
solid = false;
}};

aspectIncinerator = new StorageIncinerator("aspect-incinerator"){{
requirements(Category.effect, with(MeldItems.debris, 40));
health = 120;
liquidCapacity = 10;
itemCapacity = 10;

consume(new StupidConsumeAspects(outletRate/10, AspectGroup.aspect));
}};

aetherAccumulator = new AttributeCrafter("aether-accumulator"){{
Expand Down Expand Up @@ -1088,9 +1105,19 @@ public void update(Bullet b){

optionalBoostIntensity = 2;

consume(new ConsumeAspects(
outletRate, MeldLiquids.aspectEfficiencies, MeldLiquids.aspectDensities
));
drillMultipliers.put(
MeldItems.clayMallows, 0.5f
);
drillMultipliers.put(
MeldItems.resonarum, 0.5f
);

consume(new StupidConsumeAspects(
outletRate, AspectGroup.aspect
){{
optional = booster = false;
}}
);

consume(new ConsumeLiquid(
MeldLiquids.meld, 1
Expand Down Expand Up @@ -1610,7 +1637,7 @@ public void update(Bullet b){

carbonicBarrier = new Wall("stone-blocker"){{
requirements(Category.defense, with(MeldItems.stonyParticulate, 15));
health = 400;
health = 650;
armor = 85;

customShadow = true;
Expand All @@ -1621,7 +1648,7 @@ public void update(Bullet b){
carbonicBarrierLarge = new Wall("stone-blocker-large"){{
requirements(Category.defense, with(MeldItems.stonyParticulate, 60));
size = 2;
health = 400;
health = 2600;
armor = 85;

customShadow = true;
Expand Down Expand Up @@ -1666,6 +1693,8 @@ public void update(Bullet b){
liquidCapacity = 100;
liquidPressure = 4;
range = 8;

((Conduit) pipeline).rotBridgeReplacement = this;
}};

meldCultivator = new AttributeCrafter("meld-cultivator"){{
Expand Down
6 changes: 1 addition & 5 deletions src/meld/entities/unit/BulbheadEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,7 @@ public class BulbheadEntity extends UnitWaterMove {
public EntityCollisions.SolidPred solidity() {
return (x, y) -> {
Tile tile = Vars.world.tile(x, y);
if(tile == null) return true;

if(tile.synthetic() || !tile.solid()) return false;

return !(tile.floor().isLiquid);
return tile == null || tile.solid();
};
}

Expand Down
1 change: 0 additions & 1 deletion src/meld/entities/unit/abilities/BezerkAbility.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ public void update(Unit unit) {
public void death(Unit unit) {
if(bezerk && deathBomb != null) {
deathBomb.create(null, unit.team, unit.x, unit.y, unit.vel.angle());
Log.info("boomies!");
}
super.death(unit);
}
Expand Down
6 changes: 6 additions & 0 deletions src/meld/world/WorldUtil.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package meld.world;

import arc.func.Cons;
import arc.math.Mathf;
import arc.math.geom.Point2;
import arc.struct.Seq;
import arc.util.Nullable;
import arc.util.Tmp;
import mindustry.world.Block;
import mindustry.world.Tile;
import mindustry.world.meta.Attribute;

Expand All @@ -23,6 +25,10 @@ public static float sumAttribute(@Nullable Attribute attr, int x, int y){
return tempTiles.sumf(other -> other.floor().attributes.get(attr));
}

public static void nearbyTiles(float x, float y, int size, Cons<Tile> cons){
Tmp.v1.set(size, (size - 1)/2f);
}

//Just to note
//Rotation 0/0: (1, 0)
//Rotation 90/1: (0, 1)
Expand Down
4 changes: 1 addition & 3 deletions src/meld/world/blocks/Bruisekit.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class BruisekitBuild extends PulsarBuild{

@Override
public boolean shouldConsume() {
return super.shouldConsume() && target != null && lastRadius < range;
return super.shouldConsume() && (target != null || Math.abs(smoothRadius - range) > 1);
}

@Override
Expand All @@ -42,8 +42,6 @@ public void updateTile() {
if(target.wasRecentlyDamaged()) healAmount *= recentDamageMultiplier;
if(target.block.size == 0) healAmount *= smallMultiplier;

Log.info(healAmount);

target.heal(healAmount);
}
}
Expand Down
77 changes: 76 additions & 1 deletion src/meld/world/blocks/CoreRaft.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import arc.util.Nullable;
import arc.util.Time;
import meld.content.MeldStatusEffects;
import meld.world.blocks.crafting.StorageIncinerator;
import mindustry.Vars;
import mindustry.content.Fx;
import mindustry.entities.Units;
Expand All @@ -16,14 +17,20 @@
import mindustry.game.Team;
import mindustry.gen.Building;
import mindustry.gen.Player;
import mindustry.gen.Teamc;
import mindustry.gen.Unit;
import mindustry.graphics.Layer;
import mindustry.graphics.Pal;
import mindustry.type.Item;
import mindustry.type.UnitType;
import mindustry.world.Tile;
import mindustry.world.blocks.production.Incinerator;
import mindustry.world.blocks.production.ItemIncinerator;
import mindustry.world.blocks.production.WallCrafter;
import mindustry.world.blocks.storage.CoreBlock;

import static mindustry.Vars.tilesize;
import static mindustry.Vars.*;
import static mindustry.Vars.net;


//Rallies units nearby, provides an extended build radius for core units
Expand Down Expand Up @@ -103,6 +110,23 @@ public class CoreRaftBuild extends CoreBuild {
public @Nullable Tile targetTile;
public boolean building = false, lastBuilding = false;

public Building incinerator;

public boolean canIncinerate = false;

@Override
public void onProximityUpdate() {
super.onProximityUpdate();
incinerator= null;
proximity.each(b -> {
if(b instanceof Incinerator.IncineratorBuild ||
b instanceof ItemIncinerator.ItemIncineratorBuild ||
b.block instanceof StorageIncinerator
) incinerator = b;
});
canIncinerate = incinerator != null;
}

@Override
public void onRemoved() {
super.onRemoved();
Expand All @@ -115,6 +139,57 @@ public Building init(Tile tile, Team team, boolean shouldAdd, int rotation) {
return super.init(tile, team, shouldAdd, rotation);
}

@Override
public boolean acceptItem(Building source, Item item){
return items.get(item) < getMaximumAccepted(item) || canIncinerate && incinerator.acceptItem(source, item);
}

@Override
public int getMaximumAccepted(Item item){
return canIncinerate ? incinerator.getMaximumAccepted(item) : storageCapacity;
}

@Override
public void handleStack(Item item, int amount, Teamc source){
boolean incinerate = canIncinerate && incinerateNonBuildable && !item.buildable;
int realAmount = incinerate ? 0 : Math.min(amount, storageCapacity - items.get(item));
super.handleStack(item, realAmount, source);

if(team == state.rules.defaultTeam && state.isCampaign()){
if(!incinerate){
state.rules.sector.info.handleCoreItem(item, amount);
}

if(realAmount == 0 && wasVisible && canIncinerate){
incinerator.handleStack(item, amount, source);
}
}
}

@Override
public void handleItem(Building source, Item item){
boolean incinerate = incinerateNonBuildable && !item.buildable;

if(team == state.rules.defaultTeam){
state.stats.coreItemCount.increment(item);
}

if(net.server() || !net.active()){
if(team == state.rules.defaultTeam && state.isCampaign() && !incinerate){
state.rules.sector.info.handleCoreItem(item, 1);
}

if(items.get(item) >= storageCapacity || incinerate){
//create item incineration effect at random intervals
incinerator.handleItem(source, item);
}else{
super.handleItem(source, item);
}
}else if(((state.rules.coreIncinerates && canIncinerate && items.get(item) >= storageCapacity) || incinerate) && !noEffect){
incinerator.handleItem(source, item);
}
}

@Override
public void updateTile() {
super.updateTile();
Expand Down
1 change: 0 additions & 1 deletion src/meld/world/blocks/FieldPulsar.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ public class PulsarBuild extends Building{

public float smoothRadius;
public float duration, uptime, grace;
public float lastRadius = 0f;

@Override
public void update() {
Expand Down
2 changes: 1 addition & 1 deletion src/meld/world/blocks/LiquidUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static boolean hasAll(LiquidStack[] liquids, Building build){

public static boolean has(LiquidStack[] liquids, Building build){
for(LiquidStack stack: liquids){
if(build.liquids.get(stack.liquid) <= 0) {
if(build.liquids.get(stack.liquid) < stack.amount) {
return false;
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/meld/world/blocks/SonarSpire.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public SonarSpire(String name) {
}

public class SonarSpireBuild extends PulsarBuild {
public float lastRadius = 0f;

@Override
public void updateTile() {
super.updateTile();
Expand All @@ -41,7 +43,7 @@ public void updateTile() {
}
@Override
public float fogRadius() {
return smoothRadius/ tilesize;
return smoothRadius/tilesize;
}

@Override
Expand Down
Loading
Loading