diff --git a/src/main/java/com/riprod/hexcode/Hexcode.java b/src/main/java/com/riprod/hexcode/Hexcode.java index 4b124b14..5dad31d2 100644 --- a/src/main/java/com/riprod/hexcode/Hexcode.java +++ b/src/main/java/com/riprod/hexcode/Hexcode.java @@ -94,6 +94,7 @@ import com.riprod.hexcode.state.StateRouter; import com.riprod.patchly.PatchManager; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import com.hypixel.hytale.assetstore.AssetRegistry; @@ -124,6 +125,7 @@ import com.riprod.hexcode.api.event.CraftingEvent; import com.riprod.hexcode.api.event.GlyphFizzleEvent; import com.riprod.hexcode.api.event.GlyphDrawnEvent; +import com.riprod.hexcode.builtin.eventListeners.GlyphDrawNotificationListener; import com.riprod.hexcode.builtin.eventListeners.GlyphMemoryListener; import com.riprod.hexcode.core.common.memories.GlyphMemory; import com.riprod.hexcode.core.common.memories.GlyphMemoryProvider; @@ -153,7 +155,7 @@ public Hexcode(JavaPluginInit init) { } @Override - public java.util.concurrent.CompletableFuture preLoad() { + public CompletableFuture preLoad() { return super.preLoad(); } @@ -481,6 +483,7 @@ private void registerEvents() { this.getEventRegistry().registerGlobal(HexStateChangeEvent.class, new HexStateDiagnosticListener()); this.getEventRegistry().registerGlobal(CraftingEvent.class, new CraftingNotificationListener()); this.getEventRegistry().registerGlobal(GlyphDrawnEvent.class, new GlyphMemoryListener()); + this.getEventRegistry().registerGlobal(GlyphDrawnEvent.class, new GlyphDrawNotificationListener()); this.getEventRegistry().register(EventPriority.LAST, LoadAssetEvent.class, e -> { GlyphIconStore.generateMissing(this.getManifest()); patchManager.rebuildAndApply("boot:LoadAssetEvent"); diff --git a/src/main/java/com/riprod/hexcode/builtin/eventListeners/GlyphDrawNotificationListener.java b/src/main/java/com/riprod/hexcode/builtin/eventListeners/GlyphDrawNotificationListener.java new file mode 100644 index 00000000..c957122f --- /dev/null +++ b/src/main/java/com/riprod/hexcode/builtin/eventListeners/GlyphDrawNotificationListener.java @@ -0,0 +1,39 @@ +package com.riprod.hexcode.builtin.eventListeners; + +import java.util.function.Consumer; + +import com.hypixel.hytale.component.Ref; +import com.hypixel.hytale.component.Store; +import com.hypixel.hytale.server.core.Message; +import com.hypixel.hytale.server.core.universe.PlayerRef; +import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; +import com.hypixel.hytale.server.core.util.NotificationUtil; +import com.riprod.hexcode.api.event.GlyphDrawnEvent; +import com.riprod.hexcode.core.common.glyphs.component.Glyph; +import com.riprod.hexcode.core.common.glyphs.registry.GlyphAsset; + +public class GlyphDrawNotificationListener implements Consumer { + + private static final String ICON_DIR = "UI/Custom/Pages/Memories/glyphs/"; + + @Override + public void accept(GlyphDrawnEvent event) { + Ref playerRef = event.getPlayerRef(); + if (playerRef == null || !playerRef.isValid()) return; + + Glyph glyph = event.getGlyph(); + if (glyph == null || glyph.getGlyphId() == null) return; + + Store store = playerRef.getStore(); + PlayerRef pr = store.getComponent(playerRef, PlayerRef.getComponentType()); + if (pr == null) return; + + GlyphAsset asset = event.getMatchedGlyphAsset(); + Message name = asset != null && asset.getTitle() != null + ? Message.translation(asset.getTitle()) + : Message.raw(glyph.getGlyphId()); + + String icon = ICON_DIR + glyph.getGlyphId() + ".png"; + NotificationUtil.sendNotification(pr.getPacketHandler(), name, icon); + } +} diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/arc/ArcConstructHandler.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/arc/ArcConstructHandler.java index adafa040..e74f5145 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/arc/ArcConstructHandler.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/arc/ArcConstructHandler.java @@ -116,17 +116,12 @@ private boolean tryConsumePerHopVolatility(ArcState state, HexContext hexContext VolatilityTracker tracker = hexContext.getVolatilityTracker(); if (tracker == null) return false; - int usage = tracker.getGlyphUsage(arcGlyph.getId()); - float baseCost = VolatilityTracker.computeGlyphCost(arcGlyph, usage); + float baseCost = VolatilityTracker.computeGlyphCost(arcGlyph); float rangeScale = state.getMaxJumpDistance() / DEFAULT_JUMP_RANGE; float finalCost = baseCost * rangeScale; if (hexContext.getHexRoot() == null) return true; - boolean ok = tracker.consumeVolatility(finalCost); - if (ok) { - tracker.incrementGlyphUsage(arcGlyph.getId()); - } - return ok; + return tracker.consumeVolatility(finalCost); } private boolean hopToNext(ArcState state, HexStatus status, ConstructTickContext ctx) { diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/area/AreaGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/area/AreaGlyph.java index 82b5c811..a3aedb1e 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/area/AreaGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/area/AreaGlyph.java @@ -52,8 +52,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(GlyphHandler.sphereVolume(radius), asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) + float cost = VolatilityTracker.computeGlyphCost(glyph) * VOLATILITY_COST_MULTIPLIER * areaScale; if (cost <= 0) return true; return tracker.consumeVolatility(cost); diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/bolt/BoltGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/bolt/BoltGlyph.java index e5262238..3984552f 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/bolt/BoltGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/bolt/BoltGlyph.java @@ -61,8 +61,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(magnitude, asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/concentration/ConcentrationConstructHandler.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/concentration/ConcentrationConstructHandler.java index 04ee1979..de30e104 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/concentration/ConcentrationConstructHandler.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/concentration/ConcentrationConstructHandler.java @@ -50,13 +50,10 @@ private void fireReleaseAndKillHeld(HexStatus status, if (trigger == null || heldCtx == null) return; - // q-cancel zeroes the held tracker; in that case skip the release branch - // entirely VolatilityTracker heldTracker = heldCtx.getVolatilityTracker(); if (heldTracker != null && heldTracker.getRemainingBudget() <= 0f) return; - // strip the held-time bonus so the release branch inherits the unboosted budget ConcentrationState state = status.getState(); float bonus = state != null ? state.getVolatilityBonus() : 0f; if (heldTracker != null && bonus > 0f) { @@ -64,11 +61,9 @@ private void fireReleaseAndKillHeld(HexStatus status, heldTracker.setBudget(adjusted); } - // deep copy gives the release branch its own VolatilityTracker so zeroing the - // held one (to kill any sustaining children of NEXT) won't take it down too HexContext releaseCtx = HexContext.cloneState(heldCtx); + releaseCtx.updateRuntimeAccessors(buffer); - // register the release tracker so subsequent q presses can still cancel it HexcasterIdleComponent idle = buffer.getComponent( casterRef, HexcasterIdleComponent.getComponentType()); if (idle != null) { diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/ConjureGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/ConjureGlyph.java index eba7a45e..a96926af 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/ConjureGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/ConjureGlyph.java @@ -83,8 +83,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(volume, asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } @@ -158,8 +157,6 @@ public void execute(Glyph glyph, HexContext hexContext) { ConjureZoneComponent zoneComp = new ConjureZoneComponent(halfExtents, interval, durationSeconds); - Vector3f debugColor = ConjureStyle.resolveColor(hexContext); - HitboxCollisionConfig collisionConfig = HitboxCollisionConfig.getAssetMap() .getAsset(HARD_COLLISION_ID); @@ -169,11 +166,15 @@ public void execute(Glyph glyph, HexContext hexContext) { holder.ensureComponent(PropComponent.getComponentType()); holder.ensureComponent(ProjectileModule.get().getProjectileComponentType()); holder.ensureComponent(EffectControllerComponent.getComponentType()); - DebugComponent debugComp = new DebugComponent(DebugShape.Cube, debugColor, size, 0.1f); - debugComp.setOpacity(hexContext.getColors().getPrimaryAlpha() * 0.5f); - debugComp.setIntervalMultiplier(0.01f); - debugComp.setFlags(DebugUtils.FLAG_NO_WIREFRAME); - holder.addComponent(DebugComponent.getComponentType(), debugComp); + // alpha of 0 means an invisible zone: skip the debug shape but keep the functional zone + if (hexContext.getColors().getPrimaryAlpha() != 0f) { + Vector3f debugColor = ConjureStyle.resolveColor(hexContext); + DebugComponent debugComp = new DebugComponent(DebugShape.Cube, debugColor, size, 0.1f); + debugComp.setOpacity(hexContext.getColors().getPrimaryAlpha() * 0.5f); + debugComp.setIntervalMultiplier(0.01f); + debugComp.setFlags(DebugUtils.FLAG_NO_WIREFRAME); + holder.addComponent(DebugComponent.getComponentType(), debugComp); + } holder.addComponent(BoundingBox.getComponentType(), new BoundingBox(Box.horizontallyCentered(halfExtents.x * 2, halfExtents.y * 2, halfExtents.z * 2))); diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/system/ConjureConstructHandler.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/system/ConjureConstructHandler.java index 698ecbbb..4d042b05 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/system/ConjureConstructHandler.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/conjure/system/ConjureConstructHandler.java @@ -46,7 +46,7 @@ public void onFirstTick(HexStatus status, ConstructTickContext ctx) { UUID entityId = ctx.getBuffer().getComponent(ctx.getEntityRef(), UUIDComponent.getComponentType()) .getUuid(); - hexContext.setVariable(hexContext.getDefaultSlot(), new EntityVar(entityId, ctx.getEntityRef())); + hexContext.setDefaultVariable(new EntityVar(entityId, ctx.getEntityRef())); HexExecuter.continueExecution(Arrays.asList(links), hexContext); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/debug/DebugGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/debug/DebugGlyph.java index 7ce306cd..c3d5733a 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/debug/DebugGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/debug/DebugGlyph.java @@ -85,6 +85,9 @@ private void dump(Glyph glyph, HexContext hexContext) { } } + HexVar defaultVar = hexContext.getDefaultVariable(); + sb.append("Default: ").append(defaultVar != null ? defaultVar.describe() : "[none]").append("\n"); + Map vars = hexContext.getVariables(); if (vars.isEmpty()) { sb.append("Vars: [empty]"); diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyph.java index 5b789621..6fb86da3 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyph.java @@ -26,11 +26,12 @@ import com.riprod.hexcode.core.common.execution.component.HexContext; import com.riprod.hexcode.core.common.glyphs.component.Glyph; import com.riprod.hexcode.core.common.glyphs.component.GlyphHandler; +import com.riprod.hexcode.core.common.glyphs.variables.BlockVar; import com.riprod.hexcode.core.common.glyphs.variables.EntityVar; import com.riprod.hexcode.core.common.glyphs.variables.HexVar; import com.riprod.hexcode.api.event.GlyphFizzleEvent; +import com.riprod.hexcode.core.common.glyphs.variables.PositionVar; import com.riprod.hexcode.core.common.glyphs.variables.RotationVar; -import com.riprod.hexcode.api.event.GlyphFizzleEvent; import com.riprod.hexcode.utils.HexVarUtil; public class DelayGlyph implements GlyphHandler { @@ -49,30 +50,73 @@ public void execute(Glyph glyph, HexContext hexContext) { float seconds = HexVarUtil.numberOrDefault( glyph.readSlot(DelayGlyphSlots.DURATION, hexContext), 1.0).floatValue(); - if (seconds <= 0f) { - HexExecuter.continueFromSlot(glyph, Glyph.NEXT_SLOT, hexContext); - return; + CommandBuffer accessor = hexContext.getAccessor(); + + HexVar incomingDefault = hexContext.getDefaultVariable(); + HexVar sourceVar = glyph.readSlot(DelayGlyphSlots.SOURCE, hexContext); + if (sourceVar == null) { + sourceVar = incomingDefault; } - if (seconds < 0.5f) { // early gate + boolean indefinite = seconds < 0f; + EntityVar entityVar = sourceVar instanceof EntityVar ev ? ev : null; - // check if the delay is shorter than the TPS of the world - World world = hexContext.getAccessor().getExternalData().getWorld(); - if (1.0f / world.getTps() > seconds) { + if (!indefinite && entityVar == null) { + if (seconds <= 0f) { HexExecuter.continueFromSlot(glyph, Glyph.NEXT_SLOT, hexContext); return; } + if (seconds < 0.5f) { + World world = accessor.getExternalData().getWorld(); + if (1.0f / world.getTps() > seconds) { + HexExecuter.continueFromSlot(glyph, Glyph.NEXT_SLOT, hexContext); + return; + } + } } List nextLinks = glyph.getNextLinks(); - if (nextLinks.isEmpty()) { + + DelayState state = new DelayState(seconds, new ArrayList<>(nextLinks), + hexContext.getColors(), entityVar == null); + + if (entityVar != null) { + Ref targetRef = entityVar.getRef(accessor); + if (targetRef == null || !targetRef.isValid()) { + HexExecuter.fail(glyph, hexContext, + GlyphFizzleEvent.Reason.HANDLER_FAILED, + "delay target entity gone"); + return; + } + TransformComponent targetTransform = accessor.getComponent( + targetRef, TransformComponent.getComponentType()); + if (targetTransform != null) { + DelayStyle.renderAt(targetTransform.getPosition(), hexContext); + } + HexConstructSpawner.applyWithState(accessor, targetRef, hexContext, glyph, ID, state); return; } - CommandBuffer accessor = hexContext.getAccessor(); - - HexVar defaultVar = hexContext.getVariable(hexContext.getDefaultSlot()); - Vector3d spawnPos = HexVarUtil.position(defaultVar, accessor); + Vector3d spawnPos; + Rotation3f rot; + switch (sourceVar) { + case RotationVar r -> { + rot = HexVarUtil.rotation(r, accessor); + spawnPos = HexVarUtil.position(incomingDefault, accessor); + } + case PositionVar p -> { + spawnPos = HexVarUtil.position(p, accessor); + rot = HexVarUtil.rotation(incomingDefault, accessor); + } + case BlockVar b -> { + spawnPos = HexVarUtil.position(b, accessor); + rot = HexVarUtil.rotation(b, accessor); + } + case null, default -> { + spawnPos = HexVarUtil.position(incomingDefault, accessor); + rot = HexVarUtil.rotation(incomingDefault, accessor); + } + } if (spawnPos == null) { Ref casterRef = hexContext.getCasterRef(); if (casterRef != null && casterRef.isValid()) { @@ -83,51 +127,24 @@ public void execute(Glyph glyph, HexContext hexContext) { spawnPos = new Vector3d(); } } - EntityVar entityVar = HexVarUtil.resolveEntityVar(defaultVar, hexContext); - - DelayStyle.render(hexContext); - DelayState state = new DelayState(seconds, new ArrayList<>(nextLinks), hexContext.getColors(), - seconds >= 1f || entityVar == null); + DelayStyle.renderAt(spawnPos, hexContext); - if (seconds < 1f && entityVar != null) { - Ref targetRef = entityVar.getRef(accessor); - if (targetRef == null || !targetRef.isValid()) { - HexExecuter.fail(glyph, hexContext, - GlyphFizzleEvent.Reason.HANDLER_FAILED, - "delay target entity gone"); - return; - } - HexConstructSpawner.applyWithState(accessor, targetRef, hexContext, glyph, ID, state); - return; - } Holder holder = HexConstructSpawner.createWithState( accessor, hexContext, glyph, DelayGlyph.ID, spawnPos, state); + if (rot != null) { + holder.putComponent(TransformComponent.getComponentType(), + new TransformComponent(spawnPos, rot)); + } + ModelAsset modelAsset = ModelAsset.getAssetMap().getAsset(MODEL_ID); if (modelAsset != null) { - Model model = new Model(modelAsset.getId(), 1.0f, (Map) null, - modelAsset.getAttachments(null), - modelAsset.getBoundingBox(), modelAsset.getModel(), modelAsset.getTexture(), - modelAsset.getGradientSet(), modelAsset.getGradientId(), modelAsset.getEyeHeight(), - modelAsset.getCrouchOffset(), modelAsset.getSittingOffset(), - modelAsset.getSleepingOffset(), - modelAsset.getAnimationSetMap(), modelAsset.getCamera(), - modelAsset.getLight(), modelAsset.getParticles(), modelAsset.getTrails(), - modelAsset.getPhysicsValues(), - modelAsset.getDetailBoxes(), modelAsset.getPhobia(), - modelAsset.getPhobiaModelAssetId() - ); + Model model = Model.createScaledModel(modelAsset, 1.0f); holder.addComponent(ModelComponent.getComponentType(), new ModelComponent(model)); holder.addComponent(PersistentModel.getComponentType(), new PersistentModel(model.toReference())); - - Rotation3f rotVar = HexVarUtil.rotation(defaultVar, accessor); - if (rotVar != null) { - holder.putComponent(TransformComponent.getComponentType(), - new TransformComponent(spawnPos, rotVar)); - } } else { LOGGER.atWarning().log("delay: model asset '%s' not found", MODEL_ID); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyphSlots.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyphSlots.java index edd5a483..758d8fab 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyphSlots.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayGlyphSlots.java @@ -5,4 +5,5 @@ private DelayGlyphSlots() { } public static final String DURATION = "duration"; + public static final String SOURCE = "Source"; } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayState.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayState.java index 748118ef..d31774ed 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayState.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/DelayState.java @@ -33,11 +33,13 @@ public float getRemainingSeconds() { } public void tick(float dt) { - remainingSeconds -= dt; + if (remainingSeconds > 0f) { + remainingSeconds = Math.max(0f, remainingSeconds - dt); + } } public boolean isExpired() { - return remainingSeconds <= 0f; + return remainingSeconds == 0f; } public List getNextGlyphIds() { diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/style/DelayStyle.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/style/DelayStyle.java index a9a37472..9f03d63a 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/style/DelayStyle.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/delay/style/DelayStyle.java @@ -11,7 +11,6 @@ import com.riprod.hexcode.core.common.glyphs.component.Glyph; import com.riprod.hexcode.core.common.glyphs.registry.GlyphAsset; import com.riprod.hexcode.core.common.hexes.registry.HexStyleAsset; -import com.riprod.hexcode.utils.HexVarUtil; import com.riprod.hexcode.utils.VfxUtil; public class DelayStyle { @@ -25,13 +24,9 @@ private static GlyphAsset asset() { return GlyphAsset.getAssetMap().getAsset(GLYPH_ID); } - public static void render(HexContext hexContext) { - Vector3d casterPos = HexVarUtil.position( - hexContext.getVariable(hexContext.getDefaultSlot()), hexContext.getAccessor()); - if (casterPos == null) return; - - HexStyleAsset overrides = hexContext.getStyle(); - VfxUtil.spawnPrimary(overrides, asset(), casterPos, hexContext.getAccessor()); + public static void renderAt(Vector3d pos, HexContext hexContext) { + if (pos == null) return; + VfxUtil.spawnPrimary(hexContext.getStyle(), asset(), pos, hexContext.getAccessor()); } public static ColorLight resolveLight(HexContext ctx) { diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainConstructHandler.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainConstructHandler.java index 0ed10fe0..998a2233 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainConstructHandler.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainConstructHandler.java @@ -1,5 +1,6 @@ package com.riprod.hexcode.builtin.glyphs.domain; +import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.UUID; @@ -48,7 +49,7 @@ public void onFirstTick(HexStatus status, ConstructTickContext ctx) { if (links == null || links.length == 0) return; HexContext hexContext = status.getHexContext(); hexContext.updateRuntimeAccessors(ctx.getBuffer()); - HexExecuter.continueExecution(java.util.Arrays.asList(links), hexContext); + HexExecuter.continueExecution(Arrays.asList(links), hexContext); } @Override diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainGlyph.java index ff508007..89beed17 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/domain/DomainGlyph.java @@ -62,8 +62,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(GlyphHandler.sphereVolume(radius), asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } @@ -122,18 +121,21 @@ public void execute(Glyph glyph, HexContext hexContext) { DomainZoneComponent zoneComp = new DomainZoneComponent( (float) radius, durationSeconds, baseDrainPerSecond, BASE_TRIGGER_COST, power, casterUuid, casterRef); - Vector3f debugColor = DomainStyle.resolveColor(hexContext.getColors()); - Vector3d debugScale = new Vector3d(radius * 2, radius * 2, radius * 2); - DebugComponent debugComp = new DebugComponent(DebugShape.Sphere, debugColor, debugScale, 0.1f); - debugComp.setOpacity(0.15f); - debugComp.setIntervalMultiplier(0.01f); - debugComp.setFadeMultiplier(2.0f); - debugComp.setFlags(DebugUtils.FLAG_NO_WIREFRAME); - holder.ensureComponent(PropComponent.getComponentType()); holder.ensureComponent(ProjectileModule.get().getProjectileComponentType()); holder.ensureComponent(EffectControllerComponent.getComponentType()); - holder.addComponent(DebugComponent.getComponentType(), debugComp); + + // alpha of 0 means an invisible zone: skip the debug shape but keep the functional zone + if (hexContext.getColors().getPrimaryAlpha() != 0f) { + Vector3f debugColor = DomainStyle.resolveColor(hexContext.getColors()); + Vector3d debugScale = new Vector3d(radius * 2, radius * 2, radius * 2); + DebugComponent debugComp = new DebugComponent(DebugShape.Sphere, debugColor, debugScale, 0.1f); + debugComp.setOpacity(0.15f); + debugComp.setIntervalMultiplier(0.01f); + debugComp.setFadeMultiplier(2.0f); + debugComp.setFlags(DebugUtils.FLAG_NO_WIREFRAME); + holder.addComponent(DebugComponent.getComponentType(), debugComp); + } holder.addComponent(DomainZoneComponent.getComponentType(), zoneComp); Ref zoneRef = hexContext.getAccessor().addEntity(holder, AddReason.SPAWN); diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/ensnare/EnsnareGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/ensnare/EnsnareGlyph.java index 25fe6537..8db941c4 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/ensnare/EnsnareGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/ensnare/EnsnareGlyph.java @@ -74,8 +74,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { harshScale(radius, DEFAULT_RADIUS, RADIUS_THRESHOLD, 2.0) + harshScale(damage, DEFAULT_DAMAGE, DAMAGE_THRESHOLD, 2.0)); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * scale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * scale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/erode/ErodeGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/erode/ErodeGlyph.java index ed303c93..a06995f3 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/erode/ErodeGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/erode/ErodeGlyph.java @@ -59,8 +59,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { glyph.readSlot(ErodeGlyphSlots.AMOUNT, hexContext), DEFAULT_AMOUNT); float amountScale = (float) Math.max(1.0, amount / DEFAULT_AMOUNT); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * amountScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * amountScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/force/ForceGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/force/ForceGlyph.java index b4fb9668..0e50165a 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/force/ForceGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/force/ForceGlyph.java @@ -51,8 +51,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(appliedMagnitude, asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/fortify/FortifyGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/fortify/FortifyGlyph.java index 7c224e70..a455fa3c 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/fortify/FortifyGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/fortify/FortifyGlyph.java @@ -60,8 +60,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { glyph.readSlot(FortifyGlyphSlots.AMOUNT, hexContext), DEFAULT_AMOUNT); float amountScale = (float) Math.max(1.0, amount / DEFAULT_AMOUNT); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * amountScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * amountScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/glaciate/GlaciateConstructHandler.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/glaciate/GlaciateConstructHandler.java index 57613611..f2b68558 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/glaciate/GlaciateConstructHandler.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/glaciate/GlaciateConstructHandler.java @@ -48,7 +48,7 @@ public void onFirstTick(HexStatus status, ConstructTickContext ct UUID entityId = ctx.getBuffer().getComponent(ctx.getEntityRef(), UUIDComponent.getComponentType()) .getUuid(); - hexContext.setVariable(hexContext.getDefaultSlot(), new EntityVar(entityId, ctx.getEntityRef())); + hexContext.setDefaultVariable(new EntityVar(entityId, ctx.getEntityRef())); HexExecuter.continueExecution(Arrays.asList(links), hexContext); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/gust/GustGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/gust/GustGlyph.java index 3ab285e6..5cadfecb 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/gust/GustGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/gust/GustGlyph.java @@ -42,8 +42,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(effective, asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } @@ -62,7 +61,7 @@ public void execute(Glyph glyph, HexContext hexContext) { Vector3d center = HexVarUtil.position(centerVar, hexContext.getAccessor()); if (center == null) { center = HexVarUtil.position( - hexContext.getVariable(hexContext.getDefaultSlot()), hexContext.getAccessor()); + hexContext.getDefaultVariable(), hexContext.getAccessor()); } if (center == null) { HexExecuter.fail(glyph, hexContext, GlyphFizzleEvent.Reason.HANDLER_FAILED, diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/phase/PhaseGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/phase/PhaseGlyph.java index ef182619..466401b1 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/phase/PhaseGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/phase/PhaseGlyph.java @@ -65,8 +65,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { float intensityScale = (float) Math.max(1.0, intensity / asset.getSlot(PhaseGlyphSlots.INTENSITY).getDefaultValue()); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * intensityScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * intensityScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileBounceInteraction.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileBounceInteraction.java index f41bed34..a26c151b 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileBounceInteraction.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileBounceInteraction.java @@ -11,6 +11,7 @@ import org.joml.Vector3d; import org.joml.Vector4d; import org.joml.Vector3i; +import com.hypixel.hytale.protocol.BlockPosition; import com.hypixel.hytale.protocol.InteractionState; import com.hypixel.hytale.protocol.InteractionType; import com.hypixel.hytale.protocol.WaitForDataFrom; @@ -28,6 +29,7 @@ import com.riprod.hexcode.core.common.glyphs.component.Glyph; import com.riprod.hexcode.core.common.glyphs.component.Slot; import com.riprod.hexcode.core.common.glyphs.variables.BlockVar; +import com.riprod.hexcode.core.common.glyphs.variables.PositionVar; import com.riprod.hexcode.core.common.glyphs.variables.HexVar; public class HexProjectileBounceInteraction extends SimpleInteraction { @@ -67,7 +69,10 @@ protected void tick0(boolean firstRun, float time, @Nonnull InteractionType type return; } Vector3d hitPos = new Vector3d(hitLocation.x, hitLocation.y, hitLocation.z); - HexVar resultVar = new BlockVar(new Vector3i((int) Math.floor(hitPos.x), (int) Math.floor(hitPos.y), (int) Math.floor(hitPos.z))); + BlockPosition hitBlock = ctx.getMetaStore().getMetaObject(Interaction.TARGET_BLOCK_RAW); + HexVar resultVar = hitBlock != null + ? new BlockVar(new Vector3i(hitBlock.x, hitBlock.y, hitBlock.z)) + : new PositionVar(hitPos, true); Glyph triggering = state.getTriggeringGlyph(); if (triggering == null) { diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileHitInteraction.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileHitInteraction.java index 6caf7c49..13098c81 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileHitInteraction.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileHitInteraction.java @@ -8,7 +8,9 @@ import com.hypixel.hytale.component.RemoveReason; import com.hypixel.hytale.logger.HytaleLogger; import org.joml.Vector3d; +import org.joml.Vector3i; import org.joml.Vector4d; +import com.hypixel.hytale.protocol.BlockPosition; import com.hypixel.hytale.protocol.InteractionState; import com.hypixel.hytale.protocol.InteractionType; import com.hypixel.hytale.protocol.WaitForDataFrom; @@ -24,6 +26,7 @@ import com.riprod.hexcode.api.execution.HexExecuter; import com.riprod.hexcode.core.common.execution.component.HexContext; import com.riprod.hexcode.core.common.glyphs.component.Glyph; +import com.riprod.hexcode.core.common.glyphs.variables.BlockVar; import com.riprod.hexcode.core.common.glyphs.variables.EntityVar; import com.riprod.hexcode.core.common.glyphs.variables.PositionVar; import com.riprod.hexcode.core.common.glyphs.variables.HexVar; @@ -81,7 +84,10 @@ protected void tick0(boolean firstRun, float time, @Nonnull InteractionType type ProjectileStyle.renderEntityHit(hitPos, hitPos, hexContext, buffer); } } else if (hitPos != null) { - resultVar = new PositionVar(hitPos, true); + BlockPosition hitBlock = ctx.getMetaStore().getMetaObject(Interaction.TARGET_BLOCK_RAW); + resultVar = hitBlock != null + ? new BlockVar(new Vector3i(hitBlock.x, hitBlock.y, hitBlock.z)) + : new PositionVar(hitPos, true); ProjectileStyle.renderBlockHit(hitPos, hexContext, buffer); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileMissInteraction.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileMissInteraction.java index 81e8c85f..3968df20 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileMissInteraction.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/interaction/HexProjectileMissInteraction.java @@ -10,6 +10,7 @@ import org.joml.Vector3d; import org.joml.Vector3i; import org.joml.Vector4d; +import com.hypixel.hytale.protocol.BlockPosition; import com.hypixel.hytale.protocol.InteractionState; import com.hypixel.hytale.protocol.InteractionType; import com.hypixel.hytale.protocol.WaitForDataFrom; @@ -25,6 +26,7 @@ import com.riprod.hexcode.core.common.execution.component.HexContext; import com.riprod.hexcode.core.common.glyphs.component.Glyph; import com.riprod.hexcode.core.common.glyphs.variables.BlockVar; +import com.riprod.hexcode.core.common.glyphs.variables.PositionVar; public class HexProjectileMissInteraction extends SimpleInteraction { private static final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass(); @@ -70,7 +72,10 @@ protected void tick0(boolean firstRun, float time, @Nonnull InteractionType type Glyph triggering = state.getTriggeringGlyph(); if (hitPos != null) { if (triggering != null) { - triggering.writeOutput(new BlockVar(new Vector3i((int) Math.floor(hitPos.x), (int) Math.floor(hitPos.y), (int) Math.floor(hitPos.z))), hexContext); + BlockPosition hitBlock = ctx.getMetaStore().getMetaObject(Interaction.TARGET_BLOCK_RAW); + triggering.writeOutput(hitBlock != null + ? new BlockVar(new Vector3i(hitBlock.x, hitBlock.y, hitBlock.z)) + : new PositionVar(hitPos, true), hexContext); } ProjectileStyle.renderBlockHit(hitPos, hexContext, buffer); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/system/ProjectileConstructHandler.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/system/ProjectileConstructHandler.java index 0cd67383..e218a340 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/system/ProjectileConstructHandler.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/projectile/system/ProjectileConstructHandler.java @@ -47,7 +47,7 @@ public void onFirstTick(HexStatus status, ConstructTickContext ctx) { UUID entityId = ctx.getBuffer().getComponent(ctx.getEntityRef(), UUIDComponent.getComponentType()) .getUuid(); - hexContext.setVariable(hexContext.getDefaultSlot(), new EntityVar(entityId, ctx.getEntityRef())); + hexContext.setDefaultVariable(new EntityVar(entityId, ctx.getEntityRef())); HexExecuter.continueExecution(Arrays.asList(links), hexContext); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/scale/ScaleGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/scale/ScaleGlyph.java index 95313870..d53c339c 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/scale/ScaleGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/scale/ScaleGlyph.java @@ -61,8 +61,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { VolatilityTracker tracker = hexContext.getVolatilityTracker(); if (tracker == null) return true; - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float baseCost = VolatilityTracker.computeGlyphCost(glyph, repeatCount); + float baseCost = VolatilityTracker.computeGlyphCost(glyph); if (baseCost <= 0) return true; diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/swap/SwapGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/swap/SwapGlyph.java index 1ba55278..50f7f748 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/swap/SwapGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/swap/SwapGlyph.java @@ -45,8 +45,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(distance, asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/variable/VariableValue.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/variable/VariableValue.java index 72f835f7..8ea8a348 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/variable/VariableValue.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/variable/VariableValue.java @@ -50,7 +50,7 @@ public void execute(Glyph glyph, HexContext hexContext) { } } - hexContext.setVariable(hexContext.getDefaultSlot(), input); + hexContext.setDefaultVariable(input); hexContext.setVariable(glyph.getId(), input); HexExecuter.continueFromSlot(glyph, Glyph.NEXT_SLOT, hexContext); } diff --git a/src/main/java/com/riprod/hexcode/builtin/glyphs/warp/WarpGlyph.java b/src/main/java/com/riprod/hexcode/builtin/glyphs/warp/WarpGlyph.java index 7e7aa6a4..2eb82426 100644 --- a/src/main/java/com/riprod/hexcode/builtin/glyphs/warp/WarpGlyph.java +++ b/src/main/java/com/riprod/hexcode/builtin/glyphs/warp/WarpGlyph.java @@ -50,8 +50,7 @@ public boolean consumeVolatility(Glyph glyph, HexContext hexContext) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); float areaScale = computeAreaScale(distance, asset); - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount) * areaScale; + float cost = VolatilityTracker.computeGlyphCost(glyph) * areaScale; return tracker.consumeVolatility(cost); } diff --git a/src/main/java/com/riprod/hexcode/builtin/obelisks/importexport/ImportExportPage.java b/src/main/java/com/riprod/hexcode/builtin/obelisks/importexport/ImportExportPage.java index a8c4d1ae..dcc8c676 100644 --- a/src/main/java/com/riprod/hexcode/builtin/obelisks/importexport/ImportExportPage.java +++ b/src/main/java/com/riprod/hexcode/builtin/obelisks/importexport/ImportExportPage.java @@ -74,7 +74,8 @@ public void handleDataEvent(@Nonnull Ref ref, @Nonnull Store, Object, HexVar> payloadProjecti protected Ref resolveSubject(Glyph glyph, HexContext hexContext) { Ref caster = hexContext.getCasterRef(); - HexVar slotZero = hexContext.getVariable(hexContext.getDefaultSlot()); + HexVar slotZero = hexContext.getDefaultVariable(); if (slotZero instanceof EntityVar ev) { Ref r = ev.getRef(hexContext.getAccessor()); if (r != null && r.isValid()) return r; diff --git a/src/main/java/com/riprod/hexcode/builtin/triggers/HexResumeCallback.java b/src/main/java/com/riprod/hexcode/builtin/triggers/HexResumeCallback.java index 2e988174..5a8e7629 100644 --- a/src/main/java/com/riprod/hexcode/builtin/triggers/HexResumeCallback.java +++ b/src/main/java/com/riprod/hexcode/builtin/triggers/HexResumeCallback.java @@ -39,7 +39,7 @@ public static TriggerCallback build(@Nonnull HexContext hexContext, if (projection != null) { HexVar projected = projection.apply(buffer, event.payload()); if (projected != null) { - hexContext.setVariable(hexContext.getDefaultSlot(), projected); + hexContext.setDefaultVariable(projected); } } diff --git a/src/main/java/com/riprod/hexcode/command/hex/HexInspectCommand.java b/src/main/java/com/riprod/hexcode/command/hex/HexInspectCommand.java index 9ba1e4a2..08b3eecf 100644 --- a/src/main/java/com/riprod/hexcode/command/hex/HexInspectCommand.java +++ b/src/main/java/com/riprod/hexcode/command/hex/HexInspectCommand.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -92,7 +93,7 @@ private void printFormatted(PlayerRef playerRef, Hex hex, String style) { int idx = 1; String currentId = hex.getFirstGlyphId(); - Set walked = new java.util.HashSet<>(); + Set walked = new HashSet<>(); List execQueue = new ArrayList<>(); if (currentId != null) execQueue.add(currentId); diff --git a/src/main/java/com/riprod/hexcode/core/common/execution/CoreHexExecuter.java b/src/main/java/com/riprod/hexcode/core/common/execution/CoreHexExecuter.java index e8377c73..1bfd9f11 100644 --- a/src/main/java/com/riprod/hexcode/core/common/execution/CoreHexExecuter.java +++ b/src/main/java/com/riprod/hexcode/core/common/execution/CoreHexExecuter.java @@ -59,7 +59,7 @@ public static void runPostGate(HexContext context, CommandBuffer bu defaultVar = context.getHexRoot().getRootVar(context); } if (defaultVar != null) { - context.setVariable(context.getDefaultSlot(), defaultVar); + context.setDefaultVariable(defaultVar); } continueExecution(List.of(startingGlyph), context); @@ -118,9 +118,6 @@ public static void drainStep(String nodeId, HexContext hexContext) { HexExecuter.fail(nextNode, hexContext); return; } - if (tracker != null) { - tracker.incrementGlyphUsage(nextNode.getId()); - } nextHandler.execute(nextNode, hexContext); } catch (Exception e) { HexExecuter.fail(nextNode, hexContext, GlyphFizzleEvent.Reason.HANDLER_FAILED, e); diff --git a/src/main/java/com/riprod/hexcode/core/common/execution/component/HexContext.java b/src/main/java/com/riprod/hexcode/core/common/execution/component/HexContext.java index 04db8c9d..2c82596c 100644 --- a/src/main/java/com/riprod/hexcode/core/common/execution/component/HexContext.java +++ b/src/main/java/com/riprod/hexcode/core/common/execution/component/HexContext.java @@ -3,10 +3,10 @@ import java.util.ArrayDeque; import java.util.Deque; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; -import java.util.concurrent.ThreadLocalRandom; import javax.annotation.Nullable; @@ -33,7 +33,6 @@ public class HexContext { private float manaMultiplier = 1.0f; @Nullable private HexStyleAsset style; @Nullable private HexVar defaultVariable; - private String defaultSlot = Glyph.DEFAULT_SLOT; @Nullable private String castSlotKey; private float castDecayRate = 0f; private Map variables = new HashMap<>(); @@ -80,7 +79,6 @@ public static HexContext cloneState(HexContext src) { copy.manaMultiplier = src.manaMultiplier; copy.style = src.style != null ? src.style.clone() : null; copy.defaultVariable = src.defaultVariable; - copy.defaultSlot = src.defaultSlot; copy.castSlotKey = src.castSlotKey; copy.castDecayRate = src.castDecayRate; copy.variables = new HashMap<>(src.variables); @@ -102,9 +100,6 @@ public HexContext branch() { branch.defaultVariable = this.defaultVariable; branch.castSlotKey = this.castSlotKey; branch.castDecayRate = this.castDecayRate; - String slot = "$d_" + Long.toHexString(ThreadLocalRandom.current().nextLong()); - branch.variables.put(slot, this.variables.get(this.defaultSlot)); - branch.defaultSlot = slot; return branch; } @@ -276,14 +271,6 @@ public void setDefaultVariable(@Nullable HexVar defaultVariable) { this.defaultVariable = defaultVariable; } - public String getDefaultSlot() { - return defaultSlot != null ? defaultSlot : Glyph.DEFAULT_SLOT; - } - - public void setDefaultSlot(String defaultSlot) { - this.defaultSlot = defaultSlot; - } - @Nullable public String getCastSlotKey() { return castSlotKey; @@ -328,7 +315,7 @@ public void toStringWalk(String id, StringBuilder sb, String prefix, boolean las sb.append("\n"); String childPrefix = prefix + (last ? " " : "│ "); - java.util.List nextLinks = node.getNextLinks(); + List nextLinks = node.getNextLinks(); for (int i = 0; i < nextLinks.size(); i++) { toStringWalk(nextLinks.get(i), sb, childPrefix, i == nextLinks.size() - 1, visited); } @@ -366,11 +353,6 @@ public void toStringWalk(String id, StringBuilder sb, String prefix, boolean las (c, v) -> c.defaultVariable = v, c -> c.defaultVariable) .add() - .append(new KeyedCodec<>("DefaultSlot", Codec.STRING), - (c, v) -> c.defaultSlot = v, - c -> c.defaultSlot) - .metadata(UIDisplayMode.HIDDEN) - .add() .append(new KeyedCodec<>("CastSlotKey", Codec.STRING), (c, v) -> c.castSlotKey = v, c -> c.castSlotKey) diff --git a/src/main/java/com/riprod/hexcode/core/common/execution/component/HexcasterIdleComponent.java b/src/main/java/com/riprod/hexcode/core/common/execution/component/HexcasterIdleComponent.java index 35ec5b90..9a27b5c9 100644 --- a/src/main/java/com/riprod/hexcode/core/common/execution/component/HexcasterIdleComponent.java +++ b/src/main/java/com/riprod/hexcode/core/common/execution/component/HexcasterIdleComponent.java @@ -1,6 +1,7 @@ package com.riprod.hexcode.core.common.execution.component; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -160,7 +161,7 @@ public float getCumulativeDecay() { } public void addDependency(UUID hexId, Ref dependent) { - dependencies.computeIfAbsent(hexId, k -> new java.util.ArrayList<>()).add(dependent); + dependencies.computeIfAbsent(hexId, k -> new ArrayList<>()).add(dependent); } public Map>> getDependencies() { @@ -168,7 +169,7 @@ public Map>> getDependencies() { } public List> getDependenciesForHex(UUID hexId) { - return dependencies.getOrDefault(hexId, java.util.Collections.emptyList()); + return dependencies.getOrDefault(hexId, Collections.emptyList()); } public List> getDependencyList() { diff --git a/src/main/java/com/riprod/hexcode/core/common/execution/component/VolatilityTracker.java b/src/main/java/com/riprod/hexcode/core/common/execution/component/VolatilityTracker.java index e7a1f0a7..95dc3fad 100644 --- a/src/main/java/com/riprod/hexcode/core/common/execution/component/VolatilityTracker.java +++ b/src/main/java/com/riprod/hexcode/core/common/execution/component/VolatilityTracker.java @@ -1,7 +1,5 @@ package com.riprod.hexcode.core.common.execution.component; -import java.util.HashMap; -import java.util.Map; import java.util.UUID; import javax.annotation.Nullable; @@ -18,8 +16,7 @@ public class VolatilityTracker { private float volatilityMultiplier; private float magicPowerMultiplier; private UUID executionId; - private Map glyphUsageMap = new HashMap<>(); - @javax.annotation.Nullable + @Nullable private String slotKey; public VolatilityTracker(float startingBudget, float volatilityMultiplier) { @@ -42,14 +39,10 @@ public VolatilityTracker() { } public static float computeGlyphCost(Glyph glyph) { - return computeGlyphCost(glyph, 0); - } - - public static float computeGlyphCost(Glyph glyph, int repeatCount) { GlyphAsset asset = GlyphAsset.getAssetMap().getAsset(glyph.getGlyphId()); if (asset == null) return 0; - float baseCost = asset.getVolatility().getCostForRepeat(repeatCount); + float baseCost = asset.getVolatility().getInstantCost(); // perfect draw (1.0) = 0.5x cost, worst draw (0.0) = 1.0x cost float qualityFactor = (1 - glyph.getVolatility()) * 0.5f + 0.5f; return baseCost * qualityFactor; @@ -103,16 +96,6 @@ public void setMagicPowerMultiplier(float magicPowerMultiplier) { this.magicPowerMultiplier = magicPowerMultiplier; } - public int getGlyphUsage(String glyphId) { - return glyphUsageMap.getOrDefault(glyphId, 0); - } - - public int incrementGlyphUsage(String glyphId) { - int usage = getGlyphUsage(glyphId) + 1; - glyphUsageMap.put(glyphId, usage); - return usage; - } - public UUID getExecutionId() { return executionId; } @@ -180,7 +163,6 @@ public VolatilityTracker copy() { copy.volatilityMultiplier = this.volatilityMultiplier; copy.magicPowerMultiplier = this.magicPowerMultiplier; copy.executionId = this.executionId; - copy.glyphUsageMap = new HashMap<>(this.glyphUsageMap); copy.slotKey = this.slotKey; return copy; } diff --git a/src/main/java/com/riprod/hexcode/core/common/glyphs/component/Glyph.java b/src/main/java/com/riprod/hexcode/core/common/glyphs/component/Glyph.java index 5b9e81f5..eb392560 100644 --- a/src/main/java/com/riprod/hexcode/core/common/glyphs/component/Glyph.java +++ b/src/main/java/com/riprod/hexcode/core/common/glyphs/component/Glyph.java @@ -1,6 +1,7 @@ package com.riprod.hexcode.core.common.glyphs.component; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -181,17 +182,17 @@ public HexVar readSlot(String key, HexContext hexContext, @Nullable HexVar javaD } public void writeOutput(HexVar value, HexContext hexContext) { - hexContext.setVariable(hexContext.getDefaultSlot(), value); + hexContext.setDefaultVariable(value); hexContext.setVariable(this.id, value); } public void writeOutput(HexVar defaultSlotValue, HexVar selfValue, HexContext hexContext) { - hexContext.setVariable(hexContext.getDefaultSlot(), defaultSlotValue); + hexContext.setDefaultVariable(defaultSlotValue); hexContext.setVariable(this.id, selfValue); } public void writeDefaultOutput(HexVar value, HexContext hexContext) { - hexContext.setVariable(hexContext.getDefaultSlot(), value); + hexContext.setDefaultVariable(value); } public void writeSelfOutput(HexVar value, HexContext hexContext) { @@ -207,7 +208,7 @@ private HexVar resolveAssetDefault(String key, HexContext hexContext, @Nullable return new NumberVar(defaultNum); if (javaDefault != null) return javaDefault; - HexVar slotZero = hexContext.getVariable(hexContext.getDefaultSlot()); + HexVar slotZero = hexContext.getDefaultVariable(); if (slotZero != null) return slotZero; return new NumberVar(0.0); @@ -220,7 +221,7 @@ public List getNextLinks() { String[] links = slot.getLinks(); if (links.length == 0) return List.of(); - return java.util.Arrays.asList(links); + return Arrays.asList(links); } public List readSlotAll(String key, HexContext hexContext) { diff --git a/src/main/java/com/riprod/hexcode/core/common/glyphs/component/GlyphHandler.java b/src/main/java/com/riprod/hexcode/core/common/glyphs/component/GlyphHandler.java index a1b5cf9a..0b2bb859 100644 --- a/src/main/java/com/riprod/hexcode/core/common/glyphs/component/GlyphHandler.java +++ b/src/main/java/com/riprod/hexcode/core/common/glyphs/component/GlyphHandler.java @@ -34,8 +34,7 @@ default boolean consumeVolatility(Glyph glyph, HexContext hexContext) { VolatilityTracker tracker = hexContext.getVolatilityTracker(); if (tracker == null) return true; - int repeatCount = tracker.getGlyphUsage(glyph.getId()); - float cost = VolatilityTracker.computeGlyphCost(glyph, repeatCount); + float cost = VolatilityTracker.computeGlyphCost(glyph); if (cost <= 0) return true; boolean consumed = tracker.consumeVolatility(cost); diff --git a/src/main/java/com/riprod/hexcode/core/common/glyphs/registry/VolatilityAsset.java b/src/main/java/com/riprod/hexcode/core/common/glyphs/registry/VolatilityAsset.java index 6a1294eb..dfc23fe1 100644 --- a/src/main/java/com/riprod/hexcode/core/common/glyphs/registry/VolatilityAsset.java +++ b/src/main/java/com/riprod/hexcode/core/common/glyphs/registry/VolatilityAsset.java @@ -9,7 +9,6 @@ public class VolatilityAsset { private float instantCost = 0.0f; // legacy default matching the old hardcoded dt*0.15f used in every construct handler private float drainPerSecond = 0.15f; - private RepeatEscalation repeatEscalation = new RepeatEscalation(); private AreaTax areaTax = null; public VolatilityAsset() { @@ -23,56 +22,10 @@ public float getDrainPerSecond() { return drainPerSecond; } - public RepeatEscalation getRepeatEscalation() { - return repeatEscalation; - } - public AreaTax getAreaTax() { return areaTax; } - // asymptotic: cost approaches instantCost * (1 + base) as N grows. - // base=1, k=5 -> 5 uses = +50%, 20 uses = +80%, ceiling = 2x. - public float getCostForRepeat(int repeatCount) { - if (repeatCount <= 0) { - return instantCost; - } - float base = repeatEscalation.getBase(); - float k = repeatEscalation.getK(); - float scale = 1.0f + base * (repeatCount / (repeatCount + k)); - return instantCost * scale; - } - - public float getTotalCostForDuration(float durationSeconds, int repeatCount) { - return getCostForRepeat(repeatCount) + drainPerSecond * durationSeconds; - } - - public static class RepeatEscalation { - private float base = 1.0f; - private float k = 5.0f; - - public RepeatEscalation() { - } - - public float getBase() { - return base; - } - - public float getK() { - return k; - } - - public static final BuilderCodec CODEC = BuilderCodec - .builder(RepeatEscalation.class, RepeatEscalation::new) - .append(new KeyedCodec<>("Base", Codec.FLOAT), - (s, v) -> s.base = v, s -> s.base) - .add() - .append(new KeyedCodec<>("K", Codec.FLOAT), - (s, v) -> s.k = v, s -> s.k) - .add() - .build(); - } - public static class AreaTax { private float defaultMagnitude = 1.0f; private float exponent = 1.0f; @@ -107,9 +60,6 @@ public float getExponent() { .append(new KeyedCodec<>("DrainPerSecond", Codec.FLOAT), (s, v) -> s.drainPerSecond = v, s -> s.drainPerSecond) .add() - .append(new KeyedCodec<>("RepeatEscalation", RepeatEscalation.CODEC), - (s, v) -> s.repeatEscalation = v, s -> s.repeatEscalation) - .add() .append(new KeyedCodec<>("AreaTax", AreaTax.CODEC), (s, v) -> s.areaTax = v, s -> s.areaTax) .add() diff --git a/src/main/java/com/riprod/hexcode/core/common/hexes/codec/CodecUtil.java b/src/main/java/com/riprod/hexcode/core/common/hexes/codec/CodecUtil.java index 5d2de7f6..ebc215f3 100644 --- a/src/main/java/com/riprod/hexcode/core/common/hexes/codec/CodecUtil.java +++ b/src/main/java/com/riprod/hexcode/core/common/hexes/codec/CodecUtil.java @@ -1,6 +1,10 @@ package com.riprod.hexcode.core.common.hexes.codec; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; @@ -12,6 +16,7 @@ import java.util.Set; import java.util.TreeSet; import java.util.zip.Deflater; +import java.util.zip.CRC32; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; @@ -227,7 +232,7 @@ static String readPrefixedString(BitReader br) { // --- byte-level prefixed string i/o (for v5) --- - static void writePrefixedByte(java.io.DataOutputStream out, String s) throws java.io.IOException { + static void writePrefixedByte(DataOutputStream out, String s) throws IOException { int pfx; String suffix; if (s.startsWith("Glyph_")) { @@ -245,7 +250,7 @@ static void writePrefixedByte(java.io.DataOutputStream out, String s) throws jav out.write(bytes); } - static String readPrefixedByte(java.io.DataInputStream in) throws java.io.IOException { + static String readPrefixedByte(DataInputStream in) throws IOException { int header = in.readUnsignedByte(); int pfx = (header >> 6) & 0x03; int len = header & 0x3F; @@ -310,7 +315,7 @@ static byte[] deflate(byte[] data) { @Nullable static byte[] inflate(byte[] data) { try (InflaterInputStream iis = new InflaterInputStream( - new java.io.ByteArrayInputStream(data))) { + new ByteArrayInputStream(data))) { return iis.readAllBytes(); } catch (Exception e) { return null; @@ -395,7 +400,7 @@ static int[] readByteVarInt(byte[] buf, int off) { } static long crc32(byte[] data) { - java.util.zip.CRC32 c = new java.util.zip.CRC32(); + CRC32 c = new CRC32(); c.update(data); return c.getValue(); } diff --git a/src/main/java/com/riprod/hexcode/core/common/triggers/registry/TriggerListenerRegistry.java b/src/main/java/com/riprod/hexcode/core/common/triggers/registry/TriggerListenerRegistry.java index 284a16f6..4e6a4f50 100644 --- a/src/main/java/com/riprod/hexcode/core/common/triggers/registry/TriggerListenerRegistry.java +++ b/src/main/java/com/riprod/hexcode/core/common/triggers/registry/TriggerListenerRegistry.java @@ -7,6 +7,8 @@ import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -36,18 +38,15 @@ public static void setResourceType(ResourceType> bootstraps = new ConcurrentHashMap<>(); private final Map listenerCounts = new HashMap<>(); - // factories run on every new registry instance — lets builtin/plugin code - // install bootstrap subscriptions (e.g. imbuement binders) that should - // exist on every per-store registry without needing explicit per-store hooks. - private static final List> bootstrapFactories = - new java.util.concurrent.CopyOnWriteArrayList<>(); + private static final List> bootstrapFactories = + new CopyOnWriteArrayList<>(); - public static void registerBootstrap(@Nonnull java.util.function.Consumer factory) { + public static void registerBootstrap(@Nonnull Consumer factory) { bootstrapFactories.add(factory); } public TriggerListenerRegistry() { - for (java.util.function.Consumer f : bootstrapFactories) { + for (Consumer f : bootstrapFactories) { try { f.accept(this); } catch (Exception e) { diff --git a/src/main/resources/Server/Hexcode/Glyphs/Absolute.json b/src/main/resources/Server/Hexcode/Glyphs/Absolute.json index f89d9ebc..fbd25fa1 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Absolute.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Absolute.json @@ -30,10 +30,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Add.json b/src/main/resources/Server/Hexcode/Glyphs/Add.json index 7780c70c..d0764046 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Add.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Add.json @@ -36,10 +36,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Arc.json b/src/main/resources/Server/Hexcode/Glyphs/Arc.json index eb9874ef..3cdba64a 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Arc.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Arc.json @@ -55,10 +55,5 @@ }, "Volatility": { "InstantCost": 5, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 3.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Area.json b/src/main/resources/Server/Hexcode/Glyphs/Area.json index e7c2dcdc..5adf51e1 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Area.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Area.json @@ -51,10 +51,6 @@ "Volatility": { "InstantCost": 3, "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 1500.0, "Exponent": 0.6667 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Beam.json b/src/main/resources/Server/Hexcode/Glyphs/Beam.json index e0a7f098..869a2029 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Beam.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Beam.json @@ -53,10 +53,5 @@ }, "Volatility": { "InstantCost": 2, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Bolt.json b/src/main/resources/Server/Hexcode/Glyphs/Bolt.json index be3ebe20..79df5584 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Bolt.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Bolt.json @@ -51,10 +51,6 @@ "Volatility": { "InstantCost": 6, "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 15.0, "Exponent": 1.0 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Burning.json b/src/main/resources/Server/Hexcode/Glyphs/Burning.json index d1cef582..581534d4 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Burning.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Burning.json @@ -48,10 +48,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Ceiling.json b/src/main/resources/Server/Hexcode/Glyphs/Ceiling.json index f9da44ed..ce56e397 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Ceiling.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Ceiling.json @@ -34,10 +34,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Chaos.json b/src/main/resources/Server/Hexcode/Glyphs/Chaos.json index 69c7c915..8f13fa87 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Chaos.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Chaos.json @@ -35,10 +35,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Concentration.json b/src/main/resources/Server/Hexcode/Glyphs/Concentration.json index d22fd238..d1a1368a 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Concentration.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Concentration.json @@ -29,12 +29,7 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - }, + "DrainPerSecond": 0.0}, "Style": { "PrimaryModel": "Concentration_Focus", "PrimaryParticle": { diff --git a/src/main/resources/Server/Hexcode/Glyphs/Conjure.json b/src/main/resources/Server/Hexcode/Glyphs/Conjure.json index 3892cd72..4a106d93 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Conjure.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Conjure.json @@ -76,10 +76,6 @@ "Volatility": { "InstantCost": 6, "DrainPerSecond": 0.25, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 125.0, "Exponent": 1.0 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Cos.json b/src/main/resources/Server/Hexcode/Glyphs/Cos.json index 0f180ac4..6802853e 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Cos.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Cos.json @@ -30,10 +30,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Cross.json b/src/main/resources/Server/Hexcode/Glyphs/Cross.json index e6b55ef2..8b3cd880 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Cross.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Cross.json @@ -41,10 +41,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Debug.json b/src/main/resources/Server/Hexcode/Glyphs/Debug.json index be962c0d..09652165 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Debug.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Debug.json @@ -29,10 +29,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Delay.json b/src/main/resources/Server/Hexcode/Glyphs/Delay.json index 05e259c2..0cdb91a4 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Delay.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Delay.json @@ -30,6 +30,12 @@ "Unique": true, "DefaultValue": 1 }, + "Source": { + "Style": "Input", + "Label": "hexcode.glyphs.Delay.source.name", + "Description": "hexcode.glyphs.Delay.source.description", + "Unique": true + }, "Next": { "Style": "Next", "Label": "hexcode.glyphs.Delay.Next.name", @@ -38,10 +44,6 @@ }, "Volatility": { "InstantCost": 0.5, - "DrainPerSecond": 0.05, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } + "DrainPerSecond": 0.1 } } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Divide.json b/src/main/resources/Server/Hexcode/Glyphs/Divide.json index 9e3e00c2..51eadc99 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Divide.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Divide.json @@ -32,10 +32,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Domain.json b/src/main/resources/Server/Hexcode/Glyphs/Domain.json index df73293d..c2c5275a 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Domain.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Domain.json @@ -61,10 +61,6 @@ "Volatility": { "InstantCost": 10, "DrainPerSecond": 0.5, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 1500.0, "Exponent": 0.6667 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Dot.json b/src/main/resources/Server/Hexcode/Glyphs/Dot.json index ccac80bd..516ca1bc 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Dot.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Dot.json @@ -37,10 +37,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Drain.json b/src/main/resources/Server/Hexcode/Glyphs/Drain.json index 6accec1f..0f4e4af2 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Drain.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Drain.json @@ -59,10 +59,5 @@ }, "Volatility": { "InstantCost": 3, - "DrainPerSecond": 0.3, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.3} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Ensnare.json b/src/main/resources/Server/Hexcode/Glyphs/Ensnare.json index 706cdb41..81a2498a 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Ensnare.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Ensnare.json @@ -68,10 +68,5 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.15, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.15} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Equal.json b/src/main/resources/Server/Hexcode/Glyphs/Equal.json index e4e3e83f..fd089c6d 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Equal.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Equal.json @@ -45,10 +45,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Erode.json b/src/main/resources/Server/Hexcode/Glyphs/Erode.json index 3fe26176..93df6b38 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Erode.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Erode.json @@ -57,10 +57,5 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.1, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.1} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Floor.json b/src/main/resources/Server/Hexcode/Glyphs/Floor.json index f72ed8bd..c44babe4 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Floor.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Floor.json @@ -34,10 +34,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Force.json b/src/main/resources/Server/Hexcode/Glyphs/Force.json index 7009d30e..c04c8d51 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Force.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Force.json @@ -46,10 +46,6 @@ "Volatility": { "InstantCost": 3, "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 30.0, "Exponent": 1.0 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Fortify.json b/src/main/resources/Server/Hexcode/Glyphs/Fortify.json index 34119429..8e851ec6 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Fortify.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Fortify.json @@ -57,10 +57,5 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.1, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.1} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Freeze.json b/src/main/resources/Server/Hexcode/Glyphs/Freeze.json index 1ea0a8b0..9c6b1c03 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Freeze.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Freeze.json @@ -50,10 +50,5 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.2, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.2} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Glaciate.json b/src/main/resources/Server/Hexcode/Glyphs/Glaciate.json index 8267cb13..87f3b72c 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Glaciate.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Glaciate.json @@ -67,10 +67,5 @@ }, "Volatility": { "InstantCost": 6, - "DrainPerSecond": 0.3, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.3} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Glyph_Template.json b/src/main/resources/Server/Hexcode/Glyphs/Glyph_Template.json index 327dfd52..32bfc877 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Glyph_Template.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Glyph_Template.json @@ -3,10 +3,5 @@ "ManaConsumption": 25, "Volatility": { "InstantCost": 1, - "DrainPerSecond": 0.15, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.15} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Greater.json b/src/main/resources/Server/Hexcode/Glyphs/Greater.json index a2244915..e4b1e0bd 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Greater.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Greater.json @@ -32,10 +32,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Growth.json b/src/main/resources/Server/Hexcode/Glyphs/Growth.json index 099f67ac..1d978864 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Growth.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Growth.json @@ -57,10 +57,5 @@ }, "Volatility": { "InstantCost": 3, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Gust.json b/src/main/resources/Server/Hexcode/Glyphs/Gust.json index 297bade6..7c19447c 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Gust.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Gust.json @@ -63,10 +63,6 @@ "Volatility": { "InstantCost": 4, "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 375.0, "Exponent": 1.0 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Halt.json b/src/main/resources/Server/Hexcode/Glyphs/Halt.json index 7197adf1..0664116f 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Halt.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Halt.json @@ -39,10 +39,5 @@ }, "Volatility": { "InstantCost": 2, - "DrainPerSecond": 0.1, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.1} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Ignite.json b/src/main/resources/Server/Hexcode/Glyphs/Ignite.json index a072e033..433da6dc 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Ignite.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Ignite.json @@ -46,10 +46,5 @@ }, "Volatility": { "InstantCost": 3, - "DrainPerSecond": 0.1, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.1} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Interfere.json b/src/main/resources/Server/Hexcode/Glyphs/Interfere.json index 3c8362cf..5770f2b0 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Interfere.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Interfere.json @@ -43,10 +43,5 @@ }, "Volatility": { "InstantCost": 5, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/IsHolding.json b/src/main/resources/Server/Hexcode/Glyphs/IsHolding.json index e7f40b45..c2838d2c 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/IsHolding.json +++ b/src/main/resources/Server/Hexcode/Glyphs/IsHolding.json @@ -24,10 +24,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Less.json b/src/main/resources/Server/Hexcode/Glyphs/Less.json index 51eb0089..e82073ac 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Less.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Less.json @@ -32,10 +32,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Levitate.json b/src/main/resources/Server/Hexcode/Glyphs/Levitate.json index 11bb8c19..1b4d068b 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Levitate.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Levitate.json @@ -53,10 +53,5 @@ }, "Volatility": { "InstantCost": 2, - "DrainPerSecond": 0.15, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.15} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Multiply.json b/src/main/resources/Server/Hexcode/Glyphs/Multiply.json index c4c93e05..e7b6f861 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Multiply.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Multiply.json @@ -36,10 +36,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_1.json b/src/main/resources/Server/Hexcode/Glyphs/Number_1.json index 20878c8b..49661ac3 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_1.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_1.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_10.json b/src/main/resources/Server/Hexcode/Glyphs/Number_10.json index 5f81d6d0..a6b34990 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_10.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_10.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_11.json b/src/main/resources/Server/Hexcode/Glyphs/Number_11.json index b60359ec..4780f039 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_11.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_11.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_12.json b/src/main/resources/Server/Hexcode/Glyphs/Number_12.json index 3a5c41ae..908e5c12 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_12.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_12.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_13.json b/src/main/resources/Server/Hexcode/Glyphs/Number_13.json index a13056ed..04126854 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_13.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_13.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_14.json b/src/main/resources/Server/Hexcode/Glyphs/Number_14.json index 9e33f0e8..d013ab42 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_14.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_14.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_15.json b/src/main/resources/Server/Hexcode/Glyphs/Number_15.json index 702232a3..f2b55bcf 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_15.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_15.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_16.json b/src/main/resources/Server/Hexcode/Glyphs/Number_16.json index f023427e..c386ae55 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_16.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_16.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_2.json b/src/main/resources/Server/Hexcode/Glyphs/Number_2.json index 0b8a4c51..8362f386 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_2.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_2.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_3.json b/src/main/resources/Server/Hexcode/Glyphs/Number_3.json index f9955ddd..fd5d7e56 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_3.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_3.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_4.json b/src/main/resources/Server/Hexcode/Glyphs/Number_4.json index 88ed8a27..3acbe778 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_4.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_4.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_5.json b/src/main/resources/Server/Hexcode/Glyphs/Number_5.json index a63e66bf..825819d8 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_5.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_5.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_6.json b/src/main/resources/Server/Hexcode/Glyphs/Number_6.json index c6640e37..76ce3e8b 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_6.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_6.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_7.json b/src/main/resources/Server/Hexcode/Glyphs/Number_7.json index 9336f395..a29ab23b 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_7.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_7.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_8.json b/src/main/resources/Server/Hexcode/Glyphs/Number_8.json index 5d30f930..c11c414f 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_8.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_8.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Number_9.json b/src/main/resources/Server/Hexcode/Glyphs/Number_9.json index 42fec8de..dd83df05 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Number_9.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Number_9.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/OnCast.json b/src/main/resources/Server/Hexcode/Glyphs/OnCast.json index 112a93c5..56a46bb6 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/OnCast.json +++ b/src/main/resources/Server/Hexcode/Glyphs/OnCast.json @@ -28,10 +28,5 @@ }, "Volatility": { "InstantCost": 0.5, - "DrainPerSecond": 0.05, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.05} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/OnDeath.json b/src/main/resources/Server/Hexcode/Glyphs/OnDeath.json index 21c0be0e..e7fa4611 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/OnDeath.json +++ b/src/main/resources/Server/Hexcode/Glyphs/OnDeath.json @@ -28,10 +28,5 @@ }, "Volatility": { "InstantCost": 0.5, - "DrainPerSecond": 0.05, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.05} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/OnPrimary.json b/src/main/resources/Server/Hexcode/Glyphs/OnPrimary.json index f56aeae7..bfda2025 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/OnPrimary.json +++ b/src/main/resources/Server/Hexcode/Glyphs/OnPrimary.json @@ -28,10 +28,5 @@ }, "Volatility": { "InstantCost": 0.5, - "DrainPerSecond": 0.05, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.05} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/OnSecondary.json b/src/main/resources/Server/Hexcode/Glyphs/OnSecondary.json index cef4993e..4789af51 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/OnSecondary.json +++ b/src/main/resources/Server/Hexcode/Glyphs/OnSecondary.json @@ -28,10 +28,5 @@ }, "Volatility": { "InstantCost": 0.5, - "DrainPerSecond": 0.05, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.05} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/OnUse.json b/src/main/resources/Server/Hexcode/Glyphs/OnUse.json index 41ff7884..ba8b8e12 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/OnUse.json +++ b/src/main/resources/Server/Hexcode/Glyphs/OnUse.json @@ -28,10 +28,5 @@ }, "Volatility": { "InstantCost": 0.5, - "DrainPerSecond": 0.05, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.05} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Output.json b/src/main/resources/Server/Hexcode/Glyphs/Output.json index 923d35d5..325e841f 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Output.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Output.json @@ -30,10 +30,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Phase.json b/src/main/resources/Server/Hexcode/Glyphs/Phase.json index aac5c925..955a3132 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Phase.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Phase.json @@ -60,12 +60,7 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.2, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - }, + "DrainPerSecond": 0.2}, "IsEnabled": false, "IsReversable": false } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Pi.json b/src/main/resources/Server/Hexcode/Glyphs/Pi.json index 97b8e9a3..0acf9182 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Pi.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Pi.json @@ -23,10 +23,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Position.json b/src/main/resources/Server/Hexcode/Glyphs/Position.json index 0189c60f..82def6cb 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Position.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Position.json @@ -41,10 +41,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Power.json b/src/main/resources/Server/Hexcode/Glyphs/Power.json index 9b16f582..283469bf 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Power.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Power.json @@ -32,10 +32,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Projectile.json b/src/main/resources/Server/Hexcode/Glyphs/Projectile.json index 9351f5d0..27623fd7 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Projectile.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Projectile.json @@ -81,10 +81,5 @@ }, "Volatility": { "InstantCost": 2, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Resonate.json b/src/main/resources/Server/Hexcode/Glyphs/Resonate.json index 2fb555d0..995eaccf 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Resonate.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Resonate.json @@ -39,10 +39,5 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 3.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Root.json b/src/main/resources/Server/Hexcode/Glyphs/Root.json index 96644eb3..4ebeb0dc 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Root.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Root.json @@ -36,10 +36,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Rotation.json b/src/main/resources/Server/Hexcode/Glyphs/Rotation.json index 517aa6b6..ce6e0fd8 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Rotation.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Rotation.json @@ -46,10 +46,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Round.json b/src/main/resources/Server/Hexcode/Glyphs/Round.json index 1b8e8c73..527f1d80 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Round.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Round.json @@ -34,10 +34,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Scale.json b/src/main/resources/Server/Hexcode/Glyphs/Scale.json index b4c655c6..8c689281 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Scale.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Scale.json @@ -58,10 +58,5 @@ }, "Volatility": { "InstantCost": 2, - "DrainPerSecond": 0.1, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.1} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Self.json b/src/main/resources/Server/Hexcode/Glyphs/Self.json index 87523a09..8492cf0f 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Self.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Self.json @@ -21,10 +21,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Shatter.json b/src/main/resources/Server/Hexcode/Glyphs/Shatter.json index 11c9a9c6..b5a62539 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Shatter.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Shatter.json @@ -81,10 +81,5 @@ }, "Volatility": { "InstantCost": 4, - "DrainPerSecond": 0.1, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.1} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Sin.json b/src/main/resources/Server/Hexcode/Glyphs/Sin.json index 98fbf807..cc242912 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Sin.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Sin.json @@ -30,10 +30,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Skull.json b/src/main/resources/Server/Hexcode/Glyphs/Skull.json index 7e571e2c..3ba599fc 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Skull.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Skull.json @@ -28,10 +28,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Style.json b/src/main/resources/Server/Hexcode/Glyphs/Style.json index 91d0bbc4..173ac818 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Style.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Style.json @@ -57,10 +57,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Subtract.json b/src/main/resources/Server/Hexcode/Glyphs/Subtract.json index 25702f4d..0c7affb3 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Subtract.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Subtract.json @@ -32,10 +32,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Swap.json b/src/main/resources/Server/Hexcode/Glyphs/Swap.json index aad43bf1..7b9ca1ed 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Swap.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Swap.json @@ -47,10 +47,6 @@ "Volatility": { "InstantCost": 0.5, "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 5.0, "Exponent": 1.0 diff --git a/src/main/resources/Server/Hexcode/Glyphs/Tan.json b/src/main/resources/Server/Hexcode/Glyphs/Tan.json index 1e380aea..8cb69eae 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Tan.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Tan.json @@ -30,10 +30,5 @@ }, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Terraform.json b/src/main/resources/Server/Hexcode/Glyphs/Terraform.json index da4ad6a8..b88aac1e 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Terraform.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Terraform.json @@ -33,10 +33,5 @@ }, "Volatility": { "InstantCost": 8, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Variable.json b/src/main/resources/Server/Hexcode/Glyphs/Variable.json index a8c48dbf..f7a97359 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Variable.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Variable.json @@ -29,10 +29,5 @@ "ManaConsumption": 0, "Volatility": { "InstantCost": 0.1, - "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 10.0 - } - } + "DrainPerSecond": 0.0} } diff --git a/src/main/resources/Server/Hexcode/Glyphs/Warp.json b/src/main/resources/Server/Hexcode/Glyphs/Warp.json index c3009505..b1f69eb0 100644 --- a/src/main/resources/Server/Hexcode/Glyphs/Warp.json +++ b/src/main/resources/Server/Hexcode/Glyphs/Warp.json @@ -50,10 +50,6 @@ "Volatility": { "InstantCost": 6, "DrainPerSecond": 0.0, - "RepeatEscalation": { - "Base": 1.0, - "K": 5.0 - }, "AreaTax": { "DefaultMagnitude": 10.0, "Exponent": 1.0 diff --git a/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Arcane.json b/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Arcane.json index a3109193..a393cf02 100644 --- a/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Arcane.json +++ b/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Arcane.json @@ -93,25 +93,5 @@ "Id": "Arcanebench" } ] - }, - "InteractionConfig": { - "Priorities": { - "Secondary": { - "MainHand": 10 - } - }, - "UseDistance": { - "Creative": 10 - } - }, - "Interactions": { - "Secondary": "Hexstaff_Drawmode" - }, - "InteractionVars": { - "Drawmode": { - "Interactions": [ - "Drawmode_Arcane" - ] - } } } diff --git a/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Development.json b/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Development.json index a812862c..5980dd7a 100644 --- a/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Development.json +++ b/src/main/resources/Server/Item/Items/Weapon/Hexstaff/Hexstaff_Special_Development.json @@ -4,7 +4,7 @@ "Name": "hexcode.items.hexstaff.special.arcane.name", "Description": "hexcode.items.hexstaff.special.arcane.description" }, - "Quality": "Legendary", + "Quality": "Developer", "ItemLevel": 35, "Model": "Items/Weapons/Staff/Blue_Staff.blockymodel", "Texture": "Items/Weapons/Staff/Blue_Staff.png", @@ -66,34 +66,6 @@ "Compatible": true }, "MaxStack": 1, - "Recipe": { - "Input": [ - { - "ItemId": "Hexstaff_Special_Life" - }, - { - "ItemId": "Hexstaff_Special_Ice" - }, - { - "ItemId": "Hexstaff_Special_Fire" - }, - { - "ItemId": "Hexstaff_Special_Astral" - }, - { - "ItemId": "Rock_Gem_Diamond", - "Quantity": 2 - } - ], - "BenchRequirement": [ - { - "Categories": [ - "Arcane_Hexcode" - ], - "Id": "Arcanebench" - } - ] - }, "InteractionConfig": { "Priorities": { "Secondary": { @@ -104,6 +76,9 @@ "Creative": 10 } }, + "Interactions": { + "Secondary": "Hexstaff_Drawmode" + }, "InteractionVars": { "Drawmode": { "Interactions": [ diff --git a/src/main/resources/Server/Languages/en-US/hexcode/glyphs.lang b/src/main/resources/Server/Languages/en-US/hexcode/glyphs.lang index 947d3ed6..82d59f4b 100644 --- a/src/main/resources/Server/Languages/en-US/hexcode/glyphs.lang +++ b/src/main/resources/Server/Languages/en-US/hexcode/glyphs.lang @@ -124,7 +124,9 @@ Debug.Next.description=The next glyph in the execution chain Delay.name=Delay Delay.description=Delays execution of child glyphs by a duration in seconds Delay.duration.name=Duration -Delay.duration.description=How long to delay in seconds +Delay.duration.description=Duration in Seconds. Negative is indef +Delay.source.name=Source +Delay.source.description=Position of the delay Delay.Next.name=Next Delay.Next.description=The next glyph in the execution chain diff --git a/src/test/java/com/riprod/hexcode/core/common/execution/component/VolatilityTrackerTest.java b/src/test/java/com/riprod/hexcode/core/common/execution/component/VolatilityTrackerTest.java index 68f6fa1f..98e2416c 100644 --- a/src/test/java/com/riprod/hexcode/core/common/execution/component/VolatilityTrackerTest.java +++ b/src/test/java/com/riprod/hexcode/core/common/execution/component/VolatilityTrackerTest.java @@ -9,22 +9,17 @@ class VolatilityTrackerTest { @Test - void copyPreservesRuntimeIdentityAndUsageWithoutSharingUsageMap() { + void copyPreservesRuntimeIdentity() { VolatilityTracker original = new VolatilityTracker(10f, 1.0f, 2.0f); UUID executionId = UUID.randomUUID(); original.setExecutionId(executionId); original.setSlotKey("book:1"); - original.incrementGlyphUsage("Beam"); - original.incrementGlyphUsage("Beam"); VolatilityTracker copy = original.copy(); - copy.incrementGlyphUsage("Beam"); assertEquals(10f, copy.getStartingBudget()); assertEquals(2.0f, copy.getMagicPowerMultiplier()); assertEquals(executionId, copy.getExecutionId()); assertEquals("book:1", copy.getSlotKey()); - assertEquals(2, original.getGlyphUsage("Beam")); - assertEquals(3, copy.getGlyphUsage("Beam")); } }