From f6f1353e52217978ac7d35d4f3e58b65e139c571 Mon Sep 17 00:00:00 2001 From: "oskar.wiksten" Date: Thu, 5 Jan 2012 21:17:50 +0000 Subject: [PATCH] Added alignments & factions to the player object. This will be used to make several groups of monsters hostile under certain circumstances. git-svn-id: https://andors-trail.googlecode.com/svn/trunk@211 08aca716-68be-ccc6-4d58-36f5abd142ac --- .../AndorsTrail/AndorsTrailApplication.java | 2 +- .../AndorsTrail/activity/MainActivity.java | 2 ++ .../controller/ConversationController.java | 3 +++ .../controller/MovementController.java | 11 ++++++++ .../rpg/AndorsTrail/conversation/Phrase.java | 1 + .../rpg/AndorsTrail/model/actor/Monster.java | 3 +++ .../AndorsTrail/model/actor/MonsterType.java | 5 +++- .../rpg/AndorsTrail/model/actor/Player.java | 26 +++++++++++++++++++ .../resource/parsers/MonsterTypeParser.java | 1 + 9 files changed, 52 insertions(+), 2 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java index 2ecf4e6..e117b94 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java @@ -19,7 +19,7 @@ public final class AndorsTrailApplication extends Application { public static final boolean DEVELOPMENT_DEBUGBUTTONS = false; public static final boolean DEVELOPMENT_VALIDATEDATA = false; public static final boolean DEVELOPMENT_DEBUGMESSAGES = false; - public static final int CURRENT_VERSION = 25; + public static final int CURRENT_VERSION = 26; public static final String CURRENT_VERSION_DISPLAY = "0.6.11dev"; public final WorldContext world = new WorldContext(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java index beff64a..4694d10 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java @@ -10,6 +10,7 @@ import com.gpl.rpg.AndorsTrail.Savegames; import com.gpl.rpg.AndorsTrail.context.ViewContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.controller.CombatController; +import com.gpl.rpg.AndorsTrail.controller.MovementController; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer.ItemEntry; @@ -120,6 +121,7 @@ public final class MainActivity extends Activity { } break; case INTENTREQUEST_CONVERSATION: + MovementController.refreshMonsterAggressiveness(world.model.currentMap, world.model.player); if (resultCode == ConversationActivity.ACTIVITYRESULT_ATTACK) { final Coord p = world.model.player.nextPosition; Monster m = world.model.currentMap.getMonsterAt(p); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java index 44bbb3a..2f5f098 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ConversationController.java @@ -50,6 +50,9 @@ public final class ConversationController { } } break; + case Reward.REWARD_TYPE_ALIGNMENT_CHANGE: + player.addAlignment(reward.rewardID, reward.value); + break; } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java index e33a7fa..bdafddb 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java @@ -83,6 +83,8 @@ public final class MovementController implements TimedMessageTask.Callback { if (!newMap.visited) playerVisitsMapFirstTime(world, newMap); else playerVisitsMap(world, newMap); + + refreshMonsterAggressiveness(newMap, model.player); } private static void playerVisitsMapFirstTime(final WorldContext world, PredefinedMap m) { @@ -300,4 +302,13 @@ public final class MovementController implements TimedMessageTask.Callback { return true; } + + public static void refreshMonsterAggressiveness(final PredefinedMap map, final Player player) { + for(MonsterSpawnArea a : map.spawnAreas) { + for (Monster m : a.monsters) { + if (m.faction == null) continue; + if (player.getAlignment(m.faction) < 0) m.forceAggressive = true; + } + } + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/Phrase.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/Phrase.java index f9915a0..35bdca0 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/Phrase.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/conversation/Phrase.java @@ -49,6 +49,7 @@ public final class Phrase { public static final int REWARD_TYPE_DROPLIST = 1; public static final int REWARD_TYPE_SKILL_INCREASE = 2; public static final int REWARD_TYPE_ACTOR_CONDITION = 3; + public static final int REWARD_TYPE_ALIGNMENT_CHANGE = 4; public final int rewardType; public final String rewardID; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java index 5dcf648..7c95758 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java @@ -24,6 +24,7 @@ public final class Monster extends Actor { public final String phraseID; public final int exp; public final DropList dropList; + public final String faction; public Monster(MonsterType monsterType, Coord position) { super(monsterType, false); @@ -34,6 +35,7 @@ public final class Monster extends Actor { this.phraseID = monsterType.phraseID; this.exp = monsterType.exp; this.dropList = monsterType.dropList; + this.faction = monsterType.faction; } public void createLoot(Loot container, Player player) { @@ -72,6 +74,7 @@ public final class Monster extends Actor { this.exp = monsterType.exp; this.dropList = monsterType.dropList; this.forceAggressive = src.readBoolean(); + this.faction = monsterType.faction; } private static Monster readFromParcel_pre_v0610(DataInputStream src, int fileversion, MonsterType monsterType) throws IOException { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java index 65f4287..f340a31 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/MonsterType.java @@ -12,6 +12,7 @@ public final class MonsterType extends ActorTraits { public final DropList dropList; public final String phraseID; public boolean isRespawnable = true; + public final String faction; public MonsterType( String id, @@ -26,7 +27,8 @@ public final class MonsterType extends ActorTraits { ItemTraits_OnUse onHitEffects, int exp, DropList dropList, - String phraseID) { + String phraseID, + String faction) { super(iconID, tileSize, baseCombatTraits, moveCost, onHitEffects == null ? null : new ItemTraits_OnUse[] { onHitEffects }); this.id = id; this.spawnGroup = spawnGroup; @@ -37,5 +39,6 @@ public final class MonsterType extends ActorTraits { this.moveCost = moveCost; this.dropList = dropList; this.phraseID = phraseID; + this.faction = faction; } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java index 23a9ec0..ec64dc3 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -37,6 +37,7 @@ public final class Player extends Actor { public String spawnMap; public String spawnPlace; public int availableSkillIncreases = 0; + private final HashMap alignments = new HashMap(); public Player() { super(new ActorTraits(TileManager.CHAR_HERO, new Size(1, 1), new CombatTraits(), DEFAULT_PLAYER_MOVECOST, null), true); @@ -70,6 +71,7 @@ public final class Player extends Actor { totalExperience = 1; availableSkillIncreases = 0; skillLevels.clear(); + alignments.clear(); recalculateLevelExperience(); Loot startItems = new Loot(); @@ -160,6 +162,16 @@ public final class Player extends Actor { return availableSkillIncreases > 0; } + public int getAlignment(String faction) { + Integer v = alignments.get(faction); + if (v == null) return 0; + return v; + } + public void addAlignment(String faction, int delta) { + int newValue = getAlignment(faction) + delta; + alignments.put(faction, newValue); + } + // ====== PARCELABLE =================================================================== @@ -264,6 +276,15 @@ public final class Player extends Actor { if (hasExactQuestProgress("prim_hunt", 240)) addQuestProgress(new QuestProgress("bwm_agent", 250)); if (hasExactQuestProgress("bwm_agent", 240)) addQuestProgress(new QuestProgress("prim_hunt", 250)); } + + if (fileversion < 26) return; + + final int size3 = src.readInt(); + for(int i = 0; i < size3; ++i) { + final String faction = src.readUTF(); + final int alignment = src.readInt(); + alignments.put(faction, alignment); + } } public void writeToParcel(DataOutputStream dest, int flags) throws IOException { @@ -291,6 +312,11 @@ public final class Player extends Actor { } } dest.writeInt(availableSkillIncreases); + dest.writeInt(alignments.size()); + for(Entry e : alignments.entrySet()) { + dest.writeUTF(e.getKey()); + dest.writeInt(e.getValue()); + } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java index ddf8f95..e2fc2bc 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/MonsterTypeParser.java @@ -47,6 +47,7 @@ public final class MonsterTypeParser extends ResourceParserFor { , exp // Exp , droplists.getDropList(parts[16]) // Droplist , ResourceParserUtils.parseNullableString(parts[17]) // PhraseID + , null // Faction )); } -- 2.49.0