diff --git a/src/main/java/com/comandante/creeper/common/AttackMessage.java b/src/main/java/com/comandante/creeper/common/AttackMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..867f112a3839e323aff01c76a598932255645ffb --- /dev/null +++ b/src/main/java/com/comandante/creeper/common/AttackMessage.java @@ -0,0 +1,26 @@ +package com.comandante.creeper.common; + + +public class AttackMessage { + + private final Type type; + private final String attackMessage; + + public AttackMessage(Type type, String attackMessage) { + this.type = type; + this.attackMessage = attackMessage; + } + + public Type getType() { + return type; + } + + public String getAttackMessage() { + return attackMessage; + } + + public enum Type { + NORMAL, + CRITICAL + } +} diff --git a/src/main/java/com/comandante/creeper/common/ColorizedTextTemplate.java b/src/main/java/com/comandante/creeper/common/ColorizedTextTemplate.java new file mode 100644 index 0000000000000000000000000000000000000000..4a5cd6d4ac3f4a19855102eaaae739d65be283c5 --- /dev/null +++ b/src/main/java/com/comandante/creeper/common/ColorizedTextTemplate.java @@ -0,0 +1,79 @@ +package com.comandante.creeper.common; + + +import com.comandante.creeper.server.player_communication.Color; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.regex.Pattern; + +public class ColorizedTextTemplate { + + private final static Map<String, Set<String>> colors = new ImmutableMap.Builder<String, Set<String>>() + .put("c-yellow", Sets.newHashSet(Color.YELLOW)) + .put("c-default", Sets.newHashSet(Color.DEFAULT)) + .put("c-white", Sets.newHashSet(Color.WHITE)) + .put("c-cyan", Sets.newHashSet(Color.CYAN)) + .put("c-black", Sets.newHashSet(Color.BLACK)) + .put("c-blue", Sets.newHashSet(Color.BLUE)) + .put("c-magenta", Sets.newHashSet(Color.MAGENTA)) + .put("c-red", Sets.newHashSet(Color.RED)) + .put("c-green", Sets.newHashSet(Color.GREEN)) + //Seems that there are two valid RESET sequences that I have to account for. + .put("c-reset", Sets.newHashSet(Color.RESET, "\u001b[0m")) + .put("c-bold-on", Sets.newHashSet(Color.BOLD_ON)) + .put("c-bold-off", Sets.newHashSet(Color.BOLD_OFF)) + .build(); + + private final static Map<String, Set<String>> defaults = new ImmutableMap.Builder<String, Set<String>>() + .putAll(colors) + .build(); + + public static String renderFromTemplateLanguage(String rawTemplateText) { + return renderFromTemplateLanguage(Maps.newHashMap(), rawTemplateText); + } + + public static String renderFromTemplateLanguage(Map<String, String> variables, String rawTemplateText) { + + for (Map.Entry<String, Set<String>> def : defaults.entrySet()) { + String key = def.getKey(); + Optional<String> first = def.getValue().stream().findFirst(); + if (first.isPresent()) { + rawTemplateText = rawTemplateText.replaceAll(Pattern.quote("@" + key + "@"), first.get()); + } + } + + for (String key : variables.keySet()) { + String renderedValue = variables.get(key); + rawTemplateText = rawTemplateText.replaceAll(Pattern.quote("@" + key + "@"), renderedValue); + } + + return rawTemplateText; + } + + public static String renderToTemplateLanguage(String raw) { + return renderToTemplateLanguage(Maps.newHashMap(), raw); + } + + public static String renderToTemplateLanguage(Map<String, String> variables, String raw) { + + for (Map.Entry<String, Set<String>> keyToValues : defaults.entrySet()) { + String templateKey = keyToValues.getKey(); + for (String templateValue : keyToValues.getValue()) { + raw = raw.replaceAll(Pattern.quote(templateValue), "@" + templateKey + "@"); + } + } + + for (Map.Entry<String, String> next : variables.entrySet()) { + String templateKey = next.getKey(); + raw = raw.replaceAll(Pattern.quote(next.getValue()), "@" + templateKey + "@"); + } + + return raw; + } + +} diff --git a/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java b/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java index 4460c42b6e593619558a3cc92c5ad3eabff4c92a..3c37af4dd9877fe71977b15950bacac6127f5364 100644 --- a/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java +++ b/src/main/java/com/comandante/creeper/configuration/ConfigureNpc.java @@ -35,7 +35,7 @@ public class ConfigureNpc { configureAllNpcs(gameManager); - List<ItemMetadata> allItemMetadata = gameManager.getItemStorage().getAllItemMetadata(); + List<ItemMetadata> allItemMetadata = gameManager.getItemStorage().getItemMetadatas(); for (ItemMetadata itemMetadata : allItemMetadata) { for (SpawnRule spawnRule : itemMetadata.getSpawnRules()) { diff --git a/src/main/java/com/comandante/creeper/npc/Npc.java b/src/main/java/com/comandante/creeper/npc/Npc.java index d6c524547f3a4f2639d58d03680669cb95b3d4d9..7b6a51c6c43c354ea0226bd18f210e0ecee7564e 100644 --- a/src/main/java/com/comandante/creeper/npc/Npc.java +++ b/src/main/java/com/comandante/creeper/npc/Npc.java @@ -1,6 +1,7 @@ package com.comandante.creeper.npc; +import com.comandante.creeper.common.AttackMessage; import com.comandante.creeper.core_game.GameManager; import com.comandante.creeper.core_game.SentryManager; import com.comandante.creeper.entity.CreeperEntity; @@ -62,9 +63,14 @@ public class Npc extends CreeperEntity { private int effectsTickBucket = 0; private Set<CoolDown> coolDowns = Sets.newHashSet(); private final Experience experience = new Experience(); + private final Set<AttackMessage> attackMessages; - protected Npc(GameManager gameManager, String name, String colorName, long lastPhraseTimestamp, Stats stats, String dieMessage, Temperament temperament, Set<Area> roamAreas, Set<String> validTriggers, Loot loot, Set<SpawnRule> spawnRules) { + public Set<AttackMessage> getAttackMessages() { + return attackMessages; + } + + protected Npc(GameManager gameManager, String name, String colorName, long lastPhraseTimestamp, Stats stats, String dieMessage, Temperament temperament, Set<Area> roamAreas, Set<String> validTriggers, Loot loot, Set<SpawnRule> spawnRules, Set<AttackMessage> attackMessages) { this.gameManager = gameManager; this.name = name; this.colorName = colorName; @@ -76,6 +82,8 @@ public class Npc extends CreeperEntity { this.loot = loot; this.spawnRules = spawnRules; this.temperament = temperament; + this.attackMessages = attackMessages; + } @Override @@ -439,4 +447,16 @@ public class Npc extends CreeperEntity { } } + public AttackMessage getRandomAttackMessage() { + int size = attackMessages.size(); + int item = random.nextInt(size); // In real life, the Random object should be rather more shared than this + int i = 0; + for(AttackMessage attackMessage : attackMessages) { + if (i == item) { + return attackMessage; + } + i++; + } + return null; + } } diff --git a/src/main/java/com/comandante/creeper/npc/NpcBuilder.java b/src/main/java/com/comandante/creeper/npc/NpcBuilder.java index d0e246eb3364c311f585776bd4d3470f2b07def0..391568e45ca8796152b1a3095fae2f58e671caa5 100644 --- a/src/main/java/com/comandante/creeper/npc/NpcBuilder.java +++ b/src/main/java/com/comandante/creeper/npc/NpcBuilder.java @@ -1,5 +1,6 @@ package com.comandante.creeper.npc; +import com.comandante.creeper.common.AttackMessage; import com.comandante.creeper.core_game.GameManager; import com.comandante.creeper.items.Loot; import com.comandante.creeper.spawner.SpawnRule; @@ -23,6 +24,7 @@ public class NpcBuilder { private Loot loot; private Set<SpawnRule> spawnRules; private Temperament temperament; + private Set<AttackMessage> attackMessages; public NpcBuilder() { } @@ -39,6 +41,7 @@ public class NpcBuilder { this.spawnRules = npc.getSpawnRules(); this.gameManager = npc.getGameManager(); this.temperament = npc.getTemperament(); + this.attackMessages = npc.getAttackMessages(); } public NpcBuilder(NpcMetadata npcMetadata) { @@ -51,6 +54,7 @@ public class NpcBuilder { this.loot = npcMetadata.getLoot(); this.spawnRules = npcMetadata.getSpawnRules(); this.temperament = npcMetadata.getTemperament(); + this.attackMessages = npcMetadata.getAttackMessages(); } public NpcBuilder setGameManager(GameManager gameManager) { @@ -108,11 +112,16 @@ public class NpcBuilder { return this; } + public NpcBuilder setAttackMessages(Set<AttackMessage> attackMessages) { + this.attackMessages = attackMessages; + return this; + } + public Npc createNpc() { checkNotNull(gameManager); if (loot.getLootGoldMin() > loot.getLootGoldMax()) { throw new RuntimeException("Invalid loot configuration."); } - return new Npc(gameManager, name, colorName, lastPhraseTimestamp, stats, dieMessage, temperament, roamAreas, validTriggers, loot, spawnRules); + return new Npc(gameManager, name, colorName, lastPhraseTimestamp, stats, dieMessage, temperament, roamAreas, validTriggers, loot, spawnRules, attackMessages); } } \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/storage/ItemStorage.java b/src/main/java/com/comandante/creeper/storage/ItemStorage.java index 1ad24419f4568d74dc7023180d446c7de86c8061..f19ddafa6cca15b1eb1ccbd878c99dfae0bb04a7 100644 --- a/src/main/java/com/comandante/creeper/storage/ItemStorage.java +++ b/src/main/java/com/comandante/creeper/storage/ItemStorage.java @@ -1,11 +1,13 @@ package com.comandante.creeper.storage; +import com.comandante.creeper.common.ColorizedTextTemplate; import com.comandante.creeper.items.ItemMetadata; import org.apache.log4j.Logger; import java.io.IOException; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; public class ItemStorage { @@ -18,14 +20,27 @@ public class ItemStorage { public ItemStorage(FilebasedJsonStorage filebasedJsonStorage) { this.filebasedJsonStorage = filebasedJsonStorage; - this.itemMetadatas = filebasedJsonStorage.readAllMetadatas(LOCAL_ITEM_DIRECTORY, true, new ItemMetadata()); + this.itemMetadatas = getAllItemMetadata(); } - public List<ItemMetadata> getAllItemMetadata() { + private List<ItemMetadata> getAllItemMetadata() { + return filebasedJsonStorage.readAllMetadatas(LOCAL_ITEM_DIRECTORY, true, new ItemMetadata()).stream() + .map(itemMetadata -> { + itemMetadata.setItemDescription(ColorizedTextTemplate.renderFromTemplateLanguage(itemMetadata.getItemDescription())); + itemMetadata.setItemName(ColorizedTextTemplate.renderFromTemplateLanguage(itemMetadata.getItemName())); + itemMetadata.setRestingName(ColorizedTextTemplate.renderFromTemplateLanguage(itemMetadata.getRestingName())); + return itemMetadata; + }).collect(Collectors.toList()); + } + + public List<ItemMetadata> getItemMetadatas() { return itemMetadatas; } public void saveItemMetadata(ItemMetadata itemMetadata) throws IOException { + itemMetadata.setItemName(ColorizedTextTemplate.renderToTemplateLanguage(itemMetadata.getItemName())); + itemMetadata.setItemDescription(ColorizedTextTemplate.renderToTemplateLanguage(itemMetadata.getItemDescription())); + itemMetadata.setRestingName(ColorizedTextTemplate.renderToTemplateLanguage(itemMetadata.getRestingName())); filebasedJsonStorage.saveMetadata(itemMetadata.getInternalItemName(), LOCAL_ITEM_DIRECTORY, itemMetadata); } diff --git a/src/main/java/com/comandante/creeper/storage/MerchantStorage.java b/src/main/java/com/comandante/creeper/storage/MerchantStorage.java index 00e4db471522bb8cf4753d0b6bfbfe2b5a2dc919..bd2835abd6fcaf62a1e6513970add86e476ec628 100644 --- a/src/main/java/com/comandante/creeper/storage/MerchantStorage.java +++ b/src/main/java/com/comandante/creeper/storage/MerchantStorage.java @@ -1,5 +1,6 @@ package com.comandante.creeper.storage; +import com.comandante.creeper.common.ColorizedTextTemplate; import com.comandante.creeper.core_game.GameManager; import com.comandante.creeper.merchant.Merchant; import com.comandante.creeper.merchant.MerchantMetadata; @@ -22,7 +23,20 @@ public class MerchantStorage { public MerchantStorage(GameManager gameManager, FilebasedJsonStorage filebasedJsonStorage) { this.gameManager = gameManager; this.filebasedJsonStorage = filebasedJsonStorage; - this.merchantMetadatas = filebasedJsonStorage.readAllMetadatas(LOCAL_MERCHANT_DIRECTORY, true, new MerchantMetadata()); + this.merchantMetadatas = getAllMerchantMetadata(); + } + + private List<MerchantMetadata> getAllMerchantMetadata() { + return filebasedJsonStorage.readAllMetadatas(LOCAL_MERCHANT_DIRECTORY, true, new MerchantMetadata()).stream() + .map(merchantMetadata -> { + merchantMetadata.setColorName(ColorizedTextTemplate.renderFromTemplateLanguage(merchantMetadata.getColorName())); + merchantMetadata.setWelcomeMessage(ColorizedTextTemplate.renderFromTemplateLanguage(merchantMetadata.getWelcomeMessage())); + return merchantMetadata; + }).collect(Collectors.toList()); + } + + public List<MerchantMetadata> getMerchantMetadatas() { + return merchantMetadatas; } public List<Merchant> getAllMerchants() { @@ -56,6 +70,8 @@ public class MerchantStorage { } public void saveMerchantMetadata(MerchantMetadata merchantMetadata) throws IOException { + merchantMetadata.setColorName(ColorizedTextTemplate.renderToTemplateLanguage(merchantMetadata.getColorName())); + merchantMetadata.setWelcomeMessage(ColorizedTextTemplate.renderToTemplateLanguage(merchantMetadata.getWelcomeMessage())); filebasedJsonStorage.saveMetadata(merchantMetadata.getInternalName(), LOCAL_MERCHANT_DIRECTORY, merchantMetadata); } diff --git a/src/main/java/com/comandante/creeper/storage/NpcMetadata.java b/src/main/java/com/comandante/creeper/storage/NpcMetadata.java index 8694c9e8d3b73c1f8823b2ec2cc787fdc8b2bc41..8bb4ab6748ff53f64b2057bd518e49b539091510 100644 --- a/src/main/java/com/comandante/creeper/storage/NpcMetadata.java +++ b/src/main/java/com/comandante/creeper/storage/NpcMetadata.java @@ -1,5 +1,6 @@ package com.comandante.creeper.storage; +import com.comandante.creeper.common.AttackMessage; import com.comandante.creeper.items.Loot; import com.comandante.creeper.npc.Temperament; import com.comandante.creeper.spawner.SpawnRule; @@ -19,10 +20,19 @@ public class NpcMetadata { private Set<String> validTriggers; private Set<SpawnRule> spawnRules; private Loot loot; + private Set<AttackMessage> attackMessages; public NpcMetadata() { } + public Set<AttackMessage> getAttackMessages() { + return attackMessages; + } + + public void setAttackMessages(Set<AttackMessage> attackMessages) { + this.attackMessages = attackMessages; + } + public String getName() { return name; } diff --git a/src/main/java/com/comandante/creeper/storage/NpcStorage.java b/src/main/java/com/comandante/creeper/storage/NpcStorage.java index 75c41a954bf9c45375b2affa5c0de0ab09822e66..fae5e4c503ed0dfdb4d6d37cd8bb7a7b613dc3df 100644 --- a/src/main/java/com/comandante/creeper/storage/NpcStorage.java +++ b/src/main/java/com/comandante/creeper/storage/NpcStorage.java @@ -1,6 +1,7 @@ package com.comandante.creeper.storage; +import com.comandante.creeper.common.ColorizedTextTemplate; import com.comandante.creeper.core_game.GameManager; import com.comandante.creeper.npc.Npc; import com.comandante.creeper.npc.NpcBuilder; @@ -16,24 +17,38 @@ public class NpcStorage { private final static String LOCAL_NPC_DIRECTORY = "world/npcs/"; private static final Logger log = Logger.getLogger(NpcStorage.class); private final FilebasedJsonStorage filebasedJsonStorage; + private final List<NpcMetadata> npcMetadatas; public NpcStorage(GameManager gameManager, FilebasedJsonStorage filebasedJsonStorage) { this.gameManager = gameManager; this.filebasedJsonStorage = filebasedJsonStorage; + this.npcMetadatas = readAllNpcs(); } public List<Npc> getAllNpcs() { - List<NpcMetadata> npcMetadata = readAlLNpcs(); + List<NpcMetadata> npcMetadata = readAllNpcs(); return npcMetadata.stream() .map(metadata -> new NpcBuilder(metadata).setGameManager(gameManager).createNpc()) .collect(Collectors.toList()); } public void saveNpcMetadata(NpcMetadata npcMetadata) throws IOException { - filebasedJsonStorage.saveMetadata(npcMetadata.getName(), LOCAL_NPC_DIRECTORY, npcMetadata); + npcMetadata.setDieMessage(ColorizedTextTemplate.renderToTemplateLanguage(npcMetadata.getDieMessage())); + npcMetadata.setColorName(ColorizedTextTemplate.renderToTemplateLanguage(npcMetadata.getColorName())); + filebasedJsonStorage.saveMetadata(npcMetadata.getName(), LOCAL_NPC_DIRECTORY, npcMetadata); } - private List<NpcMetadata> readAlLNpcs() { - return filebasedJsonStorage.readAllMetadatas(LOCAL_NPC_DIRECTORY, true, new NpcMetadata()); + public List<NpcMetadata> getNpcMetadatas() { + return npcMetadatas; + } + + private List<NpcMetadata> readAllNpcs() { + List<NpcMetadata> npcMetadatas = filebasedJsonStorage.readAllMetadatas(LOCAL_NPC_DIRECTORY, true, new NpcMetadata()); + + for (NpcMetadata npcMetadata: npcMetadatas) { + npcMetadata.setColorName(ColorizedTextTemplate.renderFromTemplateLanguage(npcMetadata.getColorName())); + npcMetadata.setDieMessage(ColorizedTextTemplate.renderFromTemplateLanguage(npcMetadata.getDieMessage())); + } + return npcMetadatas; } } diff --git a/src/test/com/comandante/creeper/common/ColorizedTextTemplateTest.java b/src/test/com/comandante/creeper/common/ColorizedTextTemplateTest.java new file mode 100644 index 0000000000000000000000000000000000000000..62d336b0ad5cb53702ea5e12b928c902dd1293ce --- /dev/null +++ b/src/test/com/comandante/creeper/common/ColorizedTextTemplateTest.java @@ -0,0 +1,113 @@ +package com.comandante.creeper.common; + +import com.comandante.creeper.items.ItemMetadata; +import com.comandante.creeper.merchant.MerchantMetadata; +import com.comandante.creeper.server.player_communication.Color; +import com.comandante.creeper.storage.*; +import com.google.common.collect.Maps; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; +import java.text.NumberFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.function.Consumer; + + +public class ColorizedTextTemplateTest { + + + @Test + public void testConversion() throws Exception { + + final String fightMsg = + Color.BOLD_ON + Color.RED + "[attack] " + + Color.RESET + Color.YELLOW + "The " + "worm wobbler" + " was caught off guard by the attack! " + "+" + + NumberFormat.getNumberInstance(Locale.US).format(12) + + Color.RESET + Color.BOLD_ON + Color.RED + " DAMAGE" + Color.RESET + " done to " + "worm wobbler"; + + String test = "@c-bold-on@" + "@c-red@" + "[attack] " + "@c-reset@" + "@c-yellow@" + "The " + "@npc-name@" + " was caught off guard by the attack! " + "+" + "@damage-done@" + "@c-reset@" + "@c-bold-on@" + "@c-red@" + " DAMAGE" + "@c-reset@" + " done to " + "@npc-name@"; + + HashMap<String, String> variableMap = Maps.newHashMap(); + + variableMap.put("npc-name", "worm wobbler"); + variableMap.put("damage-done", String.valueOf(12)); + + String render = ColorizedTextTemplate.renderFromTemplateLanguage(variableMap, test); + + Assert.assertTrue(render.equals(fightMsg)); + + String s = ColorizedTextTemplate.renderToTemplateLanguage(variableMap, render); + + Assert.assertTrue(s.equals(test)); + + } + + @Test + public void testConvertToTemplateLanguage() throws Exception { + + + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + + NpcStorage npcStorage = new NpcStorage(null, new FilebasedJsonStorage(gson)); + + + List<NpcMetadata> npcMetadata = npcStorage.getNpcMetadatas(); + + npcMetadata.forEach(new Consumer<NpcMetadata>() { + @Override + public void accept(NpcMetadata npcMetadata) { + System.out.println(npcMetadata.getColorName()); + try { + npcStorage.saveNpcMetadata(npcMetadata); + } catch (IOException e) { + e.printStackTrace(); + } + + } + }); + + MerchantStorage merchantStorage = new MerchantStorage(null, new FilebasedJsonStorage(gson)); + List<MerchantMetadata> merchantMetadatas = merchantStorage.getMerchantMetadatas(); + + merchantMetadatas.forEach(new Consumer<MerchantMetadata>() { + @Override + public void accept(MerchantMetadata merchantMetadata) { + + System.out.println(merchantMetadata.getColorName()); + try { + merchantStorage.saveMerchantMetadata(merchantMetadata); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + + ItemStorage itemStorage = new ItemStorage(new FilebasedJsonStorage(gson)); + + itemStorage.getItemMetadatas().forEach(new Consumer<ItemMetadata>() { + @Override + public void accept(ItemMetadata itemMetadata) { + System.out.println(itemMetadata.getItemName()); + try { + itemStorage.saveItemMetadata(itemMetadata); + } catch (IOException e) { + + + } + + } + }); + + String green = Color.GREEN; + String test = "\u001b[32m"; + + + System.out.printf("u"); + } + +} \ No newline at end of file diff --git a/world/items/basic_key.json b/world/items/basic_key.json index 3f408daebf0c085807cd324ea2800efcbab75607..b9ee96c3298bdd1c2302b413c25eb337d5518205 100644 --- a/world/items/basic_key.json +++ b/world/items/basic_key.json @@ -1,8 +1,8 @@ { "internalItemName": "basic key", - "itemName": "a shiny \u001b[33mgold key\u001b[m", + "itemName": "a shiny @c-yellow@gold key@c-reset@", "itemDescription": "A basic key with nothing really remarkable other than its made of gold.", - "restingName": "a shiny \u001b[33mgold key\u001b[m catches your eye.", + "restingName": "a shiny @c-yellow@gold key@c-reset@ catches your eye.", "valueInGold": 10, "itemHalfLifeTicks": 60, "rarity": "BASIC", diff --git a/world/items/beserker_baton.json b/world/items/beserker_baton.json index 87fba918d030ceace1eedcda90abfb5635ffb35f..2f82b15ee570ea702d9fa09ab2adffa4b767790d 100644 --- a/world/items/beserker_baton.json +++ b/world/items/beserker_baton.json @@ -1,6 +1,6 @@ { "internalItemName": "beserker baton", - "itemName": "\u001b[36ma berserker baton\u001b[m", + "itemName": "@c-cyan@a berserker baton@c-reset@", "itemDescription": "a berserker baton", "restingName": "a berserker baton rests upon the ground.", "valueInGold": 100, diff --git a/world/items/beserker_boots.json b/world/items/beserker_boots.json index eb5f0bd7b0e421e7d3e815c591d66ff33a68184d..2f4c6a4ff3be8397ae4540675c2e460960d5571d 100644 --- a/world/items/beserker_boots.json +++ b/world/items/beserker_boots.json @@ -1,6 +1,6 @@ { "internalItemName": "beserker boots", - "itemName": "\u001b[36mberserker boots\u001b[m", + "itemName": "@c-cyan@berserker boots@c-reset@", "itemDescription": "a pair of berserker boots", "restingName": "a pair of berserker boots are here on the ground.", "valueInGold": 50, diff --git a/world/items/beserker_bracers.json b/world/items/beserker_bracers.json index 9cd91c21c3232fa7c328b9136487a2ea579f9d1b..155e4e9b6754ea87c184a2508410a86eb5346ab1 100644 --- a/world/items/beserker_bracers.json +++ b/world/items/beserker_bracers.json @@ -1,6 +1,6 @@ { "internalItemName": "beserker bracers", - "itemName": "\u001b[36mberserker bracers\u001b[m", + "itemName": "@c-cyan@berserker bracers@c-reset@", "itemDescription": "a pair of berserker bracers", "restingName": "a pair of berserker bracers are here on the ground.", "valueInGold": 40, diff --git a/world/items/beserker_chest.json b/world/items/beserker_chest.json index 813b8c501770ee7705851f744702c47e474f0f75..71210122fde6b424f59e5b316baee8c308f5e565 100644 --- a/world/items/beserker_chest.json +++ b/world/items/beserker_chest.json @@ -1,6 +1,6 @@ { "internalItemName": "beserker chest", - "itemName": "\u001b[36mberserker chest\u001b[m", + "itemName": "@c-cyan@berserker chest@c-reset@", "itemDescription": "a berserker chest", "restingName": "a berserker chest is on the ground.", "valueInGold": 70, diff --git a/world/items/beserker_helm.json b/world/items/beserker_helm.json index 41167b0885716e518e15a61e171a98ca9e32ad0c..51d8f188f550537dd3d98e162ea493d1692045fc 100644 --- a/world/items/beserker_helm.json +++ b/world/items/beserker_helm.json @@ -1,6 +1,6 @@ { "internalItemName": "beserker helm", - "itemName": "\u001b[36mberserker helm\u001b[m", + "itemName": "@c-cyan@berserker helm@c-reset@", "itemDescription": "a berserker helm", "restingName": "a berserker helm is on the ground.", "valueInGold": 40, diff --git a/world/items/beserker_shorts.json b/world/items/beserker_shorts.json index f223c806e5c27b83393b09b537559eba5323530e..625e629626a1f0cfd00c01a74d6e50c3eaaaa791 100644 --- a/world/items/beserker_shorts.json +++ b/world/items/beserker_shorts.json @@ -1,6 +1,6 @@ { "internalItemName": "beserker shorts", - "itemName": "\u001b[36mberserker shorts\u001b[m", + "itemName": "@c-cyan@berserker shorts@c-reset@", "itemDescription": "a pair of berserker shorts", "restingName": "a pair of berserker shorts are here on the ground.", "valueInGold": 80, diff --git a/world/items/biggers_skin_satchel.json b/world/items/biggers_skin_satchel.json index b458e7689e0a5e0bdf5950d4fcf400cf07587268..cf3b9d2fac6b59a66c341354fd5582658a062c5d 100644 --- a/world/items/biggers_skin_satchel.json +++ b/world/items/biggers_skin_satchel.json @@ -1,8 +1,8 @@ { "internalItemName": "biggers skin satchel", - "itemName": "a \u001b[32mbiggers skin satchel\u001b[m", - "itemDescription": "a \u001b[32mbiggers skin satchel\u001b[m with room to store 100 items.", - "restingName": "a \u001b[32mbiggers skin satchel\u001b[m", + "itemName": "a @c-green@biggers skin satchel@c-reset@", + "itemDescription": "a @c-green@biggers skin satchel@c-reset@ with room to store 100 items.", + "restingName": "a @c-green@biggers skin satchel@c-reset@", "valueInGold": 3000, "itemHalfLifeTicks": 60, "rarity": "BASIC", diff --git a/world/items/leather_satchel.json b/world/items/leather_satchel.json index 6cc70f06bad0cfcc954ce94d3099007677087486..8edb0725df8d6001342173d850f1207ff8d2319e 100644 --- a/world/items/leather_satchel.json +++ b/world/items/leather_satchel.json @@ -1,8 +1,8 @@ { "internalItemName": "leather satchel", - "itemName": "a \u001b[32mleather satchel\u001b[m", - "itemDescription": "a \u001b[32mleather satchel\u001b[m (15 items)", - "restingName": "a \u001b[32mleather satchel\u001b[m", + "itemName": "a @c-green@leather satchel@c-reset@", + "itemDescription": "a @c-green@leather satchel@c-reset@ (15 items)", + "restingName": "a @c-green@leather satchel@c-reset@", "valueInGold": 800, "itemHalfLifeTicks": 60, "rarity": "BASIC", diff --git a/world/items/lightning_spellbook.json b/world/items/lightning_spellbook.json index b0d55c1f3697c259514d62620fbb082fb65b6a38..97c65945c100f7bfff2dee9b84e22c49e5ee416d 100644 --- a/world/items/lightning_spellbook.json +++ b/world/items/lightning_spellbook.json @@ -1,8 +1,8 @@ { "internalItemName": "lightning spellbook", - "itemName": "a \u001b[33mlightning\u001b[m spell book.\u001b[m", - "itemDescription": "a \u001b[33mlightning\u001b[m spell book.\u001b[m", - "restingName": "a \u001b[33mlightning\u001b[m spell book.\u001b[m", + "itemName": "a @c-yellow@lightning@c-reset@ spell book.@c-reset@", + "itemDescription": "a @c-yellow@lightning@c-reset@ spell book.@c-reset@", + "restingName": "a @c-yellow@lightning@c-reset@ spell book.@c-reset@", "valueInGold": 3000, "itemHalfLifeTicks": 60, "rarity": "RARE", diff --git a/world/items/marijuana.json b/world/items/marijuana.json index 12353731e870c541513d684f8e30e8e8520c675f..63051ff7783e00de713eb54bee59228553e7d346 100644 --- a/world/items/marijuana.json +++ b/world/items/marijuana.json @@ -1,8 +1,8 @@ { "internalItemName": "marijuana", - "itemName": "\u001b[32mmarijuana\u001b[m flowers\u001b[m", - "itemDescription": "some \u001b[32mmarijuana\u001b[m flowers\u001b[m", - "restingName": "some \u001b[32mmarijuana\u001b[m flowers\u001b[m are here on the ground.", + "itemName": "@c-green@marijuana@c-reset@ flowers@c-reset@", + "itemDescription": "some @c-green@marijuana@c-reset@ flowers@c-reset@", + "restingName": "some @c-green@marijuana@c-reset@ flowers@c-reset@ are here on the ground.", "valueInGold": 10, "itemHalfLifeTicks": 60, "rarity": "BASIC", @@ -17,23 +17,6 @@ "validTimeOfDays": [], "isDisposable": true, "maxUses": 0, - "forages": [ - { - "minLevel": 0, - "pctOfSuccess": 40.0, - "minAmt": 1, - "maxAmt": 3, - "forageExperience": 4, - "coolDownTicks": 600, - "coolDownTicksLeft": 0, - "forageAreas": [ - "BLOODRIDGE2_ZONE", - "BLOODRIDGE1_ZONE", - "WESTERN9_ZONE", - "NORTH3_ZONE" - ] - } - ], "itemApplyStats": { "strength": 0, "intelligence": 0, @@ -53,5 +36,22 @@ "foraging": 0, "inventorySize": 0, "maxEffects": 0 - } + }, + "forages": [ + { + "minLevel": 0, + "pctOfSuccess": 40.0, + "minAmt": 1, + "maxAmt": 3, + "forageExperience": 4, + "coolDownTicks": 600, + "coolDownTicksLeft": 0, + "forageAreas": [ + "BLOODRIDGE2_ZONE", + "BLOODRIDGE1_ZONE", + "WESTERN9_ZONE", + "NORTH3_ZONE" + ] + } + ] } \ No newline at end of file diff --git a/world/items/purple_drank.json b/world/items/purple_drank.json index 81e4f82ea65eb69cceec94baef692b48ff678041..5bdbca718374b6e0f97e3c7e27831d8f13a315e5 100644 --- a/world/items/purple_drank.json +++ b/world/items/purple_drank.json @@ -1,8 +1,8 @@ { "internalItemName": "purple drank", - "itemName": "a double cup of \u001b[35mpurple\u001b[m drank", - "itemDescription": "a tonic called \u001b[35mpurple\u001b[m drank that restores health\u001b[m", - "restingName": "a double cup of \u001b[35mpurple\u001b[m drank rests on the ground.", + "itemName": "a double cup of @c-magenta@purple@c-reset@ drank", + "itemDescription": "a tonic called @c-magenta@purple@c-reset@ drank that restores health@c-reset@", + "restingName": "a double cup of @c-magenta@purple@c-reset@ drank rests on the ground.", "valueInGold": 30, "itemHalfLifeTicks": 60, "rarity": "BASIC", diff --git a/world/items/rad_claw_hoodie.json b/world/items/rad_claw_hoodie.json index f2d64214ab8316c4096a1dc13f1dbcadeabf68e9..272cd922f212465ce4713ac0d1e01a757e36c077 100644 --- a/world/items/rad_claw_hoodie.json +++ b/world/items/rad_claw_hoodie.json @@ -1,8 +1,8 @@ { "internalItemName": "rad claw hoodie", - "itemName": "\u001b[31mred-claw \u001b[mhoodie\u001b[m", + "itemName": "@c-red@red-claw @c-reset@hoodie@c-reset@", "itemDescription": "a red-claw hoodie", - "restingName": "a \u001b[31mred-claw \u001b[mhoodie is on the ground.", + "restingName": "a @c-red@red-claw @c-reset@hoodie is on the ground.", "valueInGold": 3500, "itemHalfLifeTicks": 60, "rarity": "LEGENDARY", diff --git a/world/items/rad_claw_pants.json b/world/items/rad_claw_pants.json index ee9f6b53de35ccbfbe80bee9470be4dc1eb7f6a6..9e714c6cb555c3748c87433eea466f15351182a7 100644 --- a/world/items/rad_claw_pants.json +++ b/world/items/rad_claw_pants.json @@ -1,8 +1,8 @@ { "internalItemName": "rad claw pants", - "itemName": "\u001b[31mred-claw \u001b[mpants\u001b[m", + "itemName": "@c-red@red-claw @c-reset@pants@c-reset@", "itemDescription": "a red-claw pants", - "restingName": "a \u001b[31mred-claw \u001b[mpants is on the ground.", + "restingName": "a @c-red@red-claw @c-reset@pants is on the ground.", "valueInGold": 3500, "itemHalfLifeTicks": 60, "rarity": "LEGENDARY", diff --git a/world/items/red_claw_beanie.json b/world/items/red_claw_beanie.json index 6c8503bd31df632ddfd0203bc1bcefd2765eecc9..f9ea845edbf4b853420c620d68b77941b7195768 100644 --- a/world/items/red_claw_beanie.json +++ b/world/items/red_claw_beanie.json @@ -1,8 +1,8 @@ { "internalItemName": "red claw beanie", - "itemName": "\u001b[31mred-claw \u001b[mbeanie\u001b[m", + "itemName": "@c-red@red-claw @c-reset@beanie@c-reset@", "itemDescription": "a red-claw beanie", - "restingName": "a \u001b[31mred-claw \u001b[mbeanie is on the ground.", + "restingName": "a @c-red@red-claw @c-reset@beanie is on the ground.", "valueInGold": 3500, "itemHalfLifeTicks": 60, "rarity": "LEGENDARY", diff --git a/world/items/small_health_potion.json b/world/items/small_health_potion.json index 662f162b5dda9b8c888b27e25ff3f3e3804d49b4..2ebe1bad6761e0aff3a3ea4f90bf3331b63aca9f 100644 --- a/world/items/small_health_potion.json +++ b/world/items/small_health_potion.json @@ -1,8 +1,8 @@ { "internalItemName": "small health potion", - "itemName": "a small vial of \u001b[31mhealth potion\u001b[m", - "itemDescription": "a small vial of \u001b[31mhealth potion\u001b[m that restores 50 health\u001b[m", - "restingName": "a small vial of \u001b[31mhealth potion\u001b[m rests on the ground.", + "itemName": "a small vial of @c-red@health potion@c-reset@", + "itemDescription": "a small vial of @c-red@health potion@c-reset@ that restores 50 health@c-reset@", + "restingName": "a small vial of @c-red@health potion@c-reset@ rests on the ground.", "valueInGold": 1, "itemHalfLifeTicks": 60, "rarity": "OFTEN", diff --git a/world/items/stick_of_justice.json b/world/items/stick_of_justice.json index 4a2e3230c9b3480fbba5f7d51888dc4b652e2ff4..fd41d908813a49a17c75b0109aaf7b1ba949a74d 100644 --- a/world/items/stick_of_justice.json +++ b/world/items/stick_of_justice.json @@ -1,8 +1,8 @@ { "internalItemName": "stick of justice", - "itemName": "a \u001b[1m\u001b[35mstick\u001b[22m\u001b[32m of \u001b[1m\u001b[34mjustice\u001b[m", - "itemDescription": "a \u001b[1m\u001b[35mstick\u001b[22m\u001b[32m of \u001b[1m\u001b[34mjustice\u001b[m", - "restingName": "a \u001b[1m\u001b[35mstick\u001b[22m\u001b[32m of \u001b[1m\u001b[34mjustice\u001b[m", + "itemName": "a @c-bold-on@@c-magenta@stick@c-bold-off@@c-green@ of @c-bold-on@@c-blue@justice@c-reset@", + "itemDescription": "a @c-bold-on@@c-magenta@stick@c-bold-off@@c-green@ of @c-bold-on@@c-blue@justice@c-reset@", + "restingName": "a @c-bold-on@@c-magenta@stick@c-bold-off@@c-green@ of @c-bold-on@@c-blue@justice@c-reset@", "valueInGold": 3000, "itemHalfLifeTicks": 60, "rarity": "RARE", diff --git a/world/merchants/a_bank_of_lockers.json b/world/merchants/a_bank_of_lockers.json index 094a16ae97ed82df9d7d1fa40f52bc7b029bb9c4..3c6bee8538430f67f91614741615d55772a9579b 100644 --- a/world/merchants/a_bank_of_lockers.json +++ b/world/merchants/a_bank_of_lockers.json @@ -4,7 +4,7 @@ 63 ], "name": "a bank of lockers", - "colorName": "\u001b[1m\u001b[36ma bank of lockers\u001b[m", + "colorName": "@c-bold-on@@c-cyan@a bank of lockers@c-reset@", "validTriggers": [ "a bank of lockers", "lockers", diff --git a/world/merchants/biggers_the_blacksmith.json b/world/merchants/biggers_the_blacksmith.json index afa9c10b28a25c15a96aaa1628de360c8e444a4b..b73c00b50cbecfeedd0d90ed81e35172cf6c07d3 100644 --- a/world/merchants/biggers_the_blacksmith.json +++ b/world/merchants/biggers_the_blacksmith.json @@ -5,7 +5,7 @@ 66 ], "name": "biggers the blacksmith", - "colorName": "\u001b[1m\u001b[36mbiggers the blacksmith\u001b[m", + "colorName": "@c-bold-on@@c-cyan@biggers the blacksmith@c-reset@", "validTriggers": [ "blacksmith", "biggers", diff --git a/world/merchants/jim_the_banker.json b/world/merchants/jim_the_banker.json index 868c0a5586846c3b4164b06806f4da71728ede71..6dcecda920589ea46762c659aefc8eecfe68f75a 100644 --- a/world/merchants/jim_the_banker.json +++ b/world/merchants/jim_the_banker.json @@ -5,7 +5,7 @@ 209 ], "name": "jim the banker", - "colorName": "\u001b[1m\u001b[36mjim the banker\u001b[m", + "colorName": "@c-bold-on@@c-cyan@jim the banker@c-reset@", "validTriggers": [ "bank", "j", diff --git a/world/merchants/lloyd_the_bartender.json b/world/merchants/lloyd_the_bartender.json index 49660afd28dfae9c8340b486c131490a5fc88499..0e8e3797589537afcc66d25645c3a8bca261da11 100644 --- a/world/merchants/lloyd_the_bartender.json +++ b/world/merchants/lloyd_the_bartender.json @@ -4,7 +4,7 @@ 64 ], "name": "lloyd the bartender", - "colorName": "\u001b[1m\u001b[36mlloyd the bartender\u001b[m", + "colorName": "@c-bold-on@@c-cyan@lloyd the bartender@c-reset@", "validTriggers": [ "lloyd the bartender", "bartender", diff --git a/world/merchants/nigel_the_bartender.json b/world/merchants/nigel_the_bartender.json index be98637d92eb33d4f0f8fd34a73fc3120581d01f..675935c7c6e64bb002ce196d412e8139ecc58120 100644 --- a/world/merchants/nigel_the_bartender.json +++ b/world/merchants/nigel_the_bartender.json @@ -4,7 +4,7 @@ 377 ], "name": "nigel the bartender", - "colorName": "\u001b[1m\u001b[36mnigel the bartender\u001b[m", + "colorName": "@c-bold-on@@c-cyan@nigel the bartender@c-reset@", "validTriggers": [ "nigel the bartender", "bartender", diff --git a/world/merchants/old_wise_man.json b/world/merchants/old_wise_man.json index 08bd894b1f5a1fa7f78f608ff08e04274f932275..857359e6feaf7bcbf4109014dc5a6e6dafeee1dd 100644 --- a/world/merchants/old_wise_man.json +++ b/world/merchants/old_wise_man.json @@ -4,7 +4,7 @@ 2 ], "name": "old wise man", - "colorName": "\u001b[1m\u001b[36mold wise man\u001b[m", + "colorName": "@c-bold-on@@c-cyan@old wise man@c-reset@", "validTriggers": [ "old wise man", "wise", @@ -13,6 +13,6 @@ "man", "m" ], - "welcomeMessage": "The \u001b[1m\u001b[36mold wise man\u001b[m can assist you in choosing a character class.\r\n", + "welcomeMessage": "The @c-bold-on@@c-cyan@old wise man@c-reset@ can assist you in choosing a character class.\r\n", "merchantType": "PLAYERCLASS_SELECTOR" } \ No newline at end of file diff --git a/world/merchants/willy_the_wizard.json b/world/merchants/willy_the_wizard.json index 8da84c20f97e7137bdfd414ae06c4b145a8e7bcf..dace79ff51dd426480342835787bddfe208438f2 100644 --- a/world/merchants/willy_the_wizard.json +++ b/world/merchants/willy_the_wizard.json @@ -4,7 +4,7 @@ 98 ], "name": "willy the wizard", - "colorName": "\u001b[1m\u001b[36mwilly the wizard\u001b[m", + "colorName": "@c-bold-on@@c-cyan@willy the wizard@c-reset@", "validTriggers": [ "willy the wizard", "willy", diff --git a/world/npcs/blood_wolf.json b/world/npcs/blood_wolf.json index 6544bf54f5293554d970e50f50a9dd51dce5b727..6687254ebb46ac2bc69ec6553222d332a3f161d8 100644 --- a/world/npcs/blood_wolf.json +++ b/world/npcs/blood_wolf.json @@ -1,6 +1,6 @@ { "name": "blood wolf", - "colorName": "blood \u001b[1m\u001b[35mwolf\u001b[0m", + "colorName": "blood @c-bold-on@@c-magenta@wolf@c-reset@", "stats": { "strength": 10, "intelligence": 0, @@ -21,7 +21,7 @@ "inventorySize": 0, "maxEffects": 0 }, - "dieMessage": "a blood \u001b[1m\u001b[35mwolf\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m", + "dieMessage": "a blood @c-bold-on@@c-magenta@wolf@c-reset@ breathes his last breath in a pool of @c-bold-on@@c-red@blood@c-reset@", "temperament": "PASSIVE", "roamAreas": [ "BLOODRIDGE1_ZONE", @@ -50,7 +50,6 @@ } ], "loot": { - "items": [], "lootGoldMax": 18, "lootGoldMin": 16 } diff --git a/world/npcs/demon_cat.json b/world/npcs/demon_cat.json index 5b5578f66f600069b72e2032f9f313bfbe78a151..0f6087dc1a9dad5fe683d55d96c6944d56f236e1 100644 --- a/world/npcs/demon_cat.json +++ b/world/npcs/demon_cat.json @@ -1,6 +1,6 @@ { "name": "demon cat", - "colorName": "demon \u001b[1m\u001b[35mcat\u001b[0m", + "colorName": "demon @c-bold-on@@c-magenta@cat@c-reset@", "stats": { "strength": 9, "intelligence": 0, @@ -21,7 +21,7 @@ "inventorySize": 0, "maxEffects": 0 }, - "dieMessage": "a demon \u001b[1m\u001b[35mcat\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m", + "dieMessage": "a demon @c-bold-on@@c-magenta@cat@c-reset@ breathes his last breath in a pool of @c-bold-on@@c-red@blood@c-reset@", "temperament": "PASSIVE", "roamAreas": [ "NEWBIE_ZONE" @@ -42,9 +42,6 @@ } ], "loot": { - "items": [ - "small health potion" - ], "lootGoldMax": 3, "lootGoldMin": 1 } diff --git a/world/npcs/red-eyed_bear.json b/world/npcs/red-eyed_bear.json index cbf9498e9030a72883b319eedd0a5b5e1498ba00..3cee329807b0dfce1d3335d9b3ba707a7551c904 100644 --- a/world/npcs/red-eyed_bear.json +++ b/world/npcs/red-eyed_bear.json @@ -1,6 +1,6 @@ { "name": "red-eyed bear", - "colorName": "red-eyed \u001b[1m\u001b[35mbear\u001b[0m", + "colorName": "red-eyed @c-bold-on@@c-magenta@bear@c-reset@", "stats": { "strength": 14, "intelligence": 0, @@ -21,7 +21,7 @@ "inventorySize": 0, "maxEffects": 0 }, - "dieMessage": "a red-eyed \u001b[1m\u001b[35mbear\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m", + "dieMessage": "a red-eyed @c-bold-on@@c-magenta@bear@c-reset@ breathes his last breath in a pool of @c-bold-on@@c-red@blood@c-reset@", "temperament": "AGGRESSIVE", "roamAreas": [ "TOFT1_ZONE", @@ -52,12 +52,6 @@ } ], "loot": { - "items": [ - "berserker helm", - "red claw beanie", - "red claw pants", - "red claw hoodie" - ], "lootGoldMax": 24, "lootGoldMin": 18 } diff --git a/world/npcs/swamp_bear.json b/world/npcs/swamp_bear.json index bb064a67f5f38773ebaa3c533119d8ed5728c6e6..3ef0fb4e3bd86b4d6ba3f5806c98c04225290607 100644 --- a/world/npcs/swamp_bear.json +++ b/world/npcs/swamp_bear.json @@ -1,6 +1,6 @@ { "name": "swamp bear", - "colorName": "swamp \u001b[1m\u001b[35mbear\u001b[0m", + "colorName": "swamp @c-bold-on@@c-magenta@bear@c-reset@", "stats": { "strength": 13, "intelligence": 0, @@ -21,7 +21,7 @@ "inventorySize": 0, "maxEffects": 0 }, - "dieMessage": "a swamp \u001b[1m\u001b[35mbear\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m", + "dieMessage": "a swamp @c-bold-on@@c-magenta@bear@c-reset@ breathes his last breath in a pool of @c-bold-on@@c-red@blood@c-reset@", "temperament": "PASSIVE", "roamAreas": [ "TOFT1_ZONE", @@ -51,10 +51,6 @@ } ], "loot": { - "items": [ - "berserker bracers", - "berserker chest" - ], "lootGoldMax": 18, "lootGoldMin": 12 } diff --git a/world/npcs/swamp_berserker.json b/world/npcs/swamp_berserker.json index 90ecbccda32a426ff98916cc276d42dd9bd10f3f..43e6f9acd04c61bc6874b90d5042c42fdeecd69f 100644 --- a/world/npcs/swamp_berserker.json +++ b/world/npcs/swamp_berserker.json @@ -1,6 +1,6 @@ { "name": "swamp berserker", - "colorName": "swamp \u001b[1m\u001b[35mberserker\u001b[0m", + "colorName": "swamp @c-bold-on@@c-magenta@berserker@c-reset@", "stats": { "strength": 10, "intelligence": 0, @@ -21,7 +21,7 @@ "inventorySize": 0, "maxEffects": 0 }, - "dieMessage": "a swamp \u001b[1m\u001b[35mberserker\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m", + "dieMessage": "a swamp @c-bold-on@@c-magenta@berserker@c-reset@ breathes his last breath in a pool of @c-bold-on@@c-red@blood@c-reset@", "temperament": "PASSIVE", "roamAreas": [ "NORTH1_ZONE" @@ -42,9 +42,6 @@ } ], "loot": { - "items": [ - "berserker baton" - ], "lootGoldMax": 10, "lootGoldMin": 5 } diff --git a/world/npcs/tree_berserker.json b/world/npcs/tree_berserker.json index b0cbf18963680e83f97601c33097f3335b7d215a..559e52d00a98215f08ede7e438039c147a2bba2f 100644 --- a/world/npcs/tree_berserker.json +++ b/world/npcs/tree_berserker.json @@ -1,6 +1,6 @@ { "name": "tree berserker", - "colorName": "tree \u001b[1m\u001b[35mberserker\u001b[0m", + "colorName": "tree @c-bold-on@@c-magenta@berserker@c-reset@", "stats": { "strength": 15, "intelligence": 0, @@ -21,7 +21,7 @@ "inventorySize": 0, "maxEffects": 0 }, - "dieMessage": "a tree \u001b[1m\u001b[35mberserker\u001b[0m breathes his last breath in a pool of \u001b[1m\u001b[31mblood\u001b[0m", + "dieMessage": "a tree @c-bold-on@@c-magenta@berserker@c-reset@ breathes his last breath in a pool of @c-bold-on@@c-red@blood@c-reset@", "temperament": "PASSIVE", "roamAreas": [ "NORTH1_ZONE" @@ -43,11 +43,6 @@ } ], "loot": { - "items": [ - "beserker boots", - "beserker shorts", - "small health potion" - ], "lootGoldMax": 14, "lootGoldMin": 8 }