diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java index 52fcd653d..047b0f688 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/model/map/TMXMapTranslator.java @@ -405,6 +405,11 @@ public final class TMXMapTranslator { int tileID = tileCache.getTileID(tile.tilesetName, tile.localId); result.tiles[dx][dy] = tileID; usedTileIDs.add(tileID); + if(AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA){ + if(tileID == 0){ + L.log("Tileid 0 in "+ tile.tilesetName); + } + } } } return result; diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCache.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCache.java index a135c8ef4..4559fdd1c 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCache.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileCache.java @@ -74,6 +74,9 @@ public final class TileCache { HashMap> tilesToLoadPerSourceFile = new HashMap>(); for(int tileID : iconIDs) { ResourceFileTile tile = resourceTiles[tileID]; + if(tile == null && AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES){ + L.log("could not find resourceTiles for id: " + tileID); + } SparseArray tiles = tilesToLoadPerSourceFile.get(tile.tileset); if (tiles == null) { tiles = new SparseArray(); diff --git a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java index 56f17d1e3..fb6ef5dbd 100644 --- a/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java +++ b/AndorsTrail/app/src/main/java/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java @@ -18,6 +18,7 @@ import android.os.AsyncTask; import android.widget.ImageView; import android.widget.TextView; +import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.WorldContext; @@ -33,6 +34,7 @@ import com.gpl.rpg.AndorsTrail.model.map.MapObject; import com.gpl.rpg.AndorsTrail.model.map.MonsterSpawnArea; import com.gpl.rpg.AndorsTrail.model.map.PredefinedMap; import com.gpl.rpg.AndorsTrail.model.map.TMXMapTranslator; +import com.gpl.rpg.AndorsTrail.util.L; import com.gpl.rpg.AndorsTrail.util.ThemeHelper; public final class TileManager { @@ -374,6 +376,10 @@ public final class TileManager { cachedTileIDs = getTileIDsFor(adjacentMap, adjacentMapTiles, world); tileIDsPerMap.put(mapName, cachedTileIDs); } + + if(AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES){ + L.log("TileIDsFor " + mapName + "\n" + cachedTileIDs); + } dest.addAll(cachedTileIDs); } public void cacheAdjacentMaps(final Resources res, final WorldContext world, final PredefinedMap nextMap) { @@ -391,6 +397,9 @@ public final class TileManager { HashSet tileIDs = new HashSet(); for (String mapName : adjacentMapNames) { + if(AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES){ + L.log("addTileIDsFor " + mapName); + } addTileIDsFor(tileIDs, mapName, res, world); } diff --git a/ContentFormatReference/AndorsTrail_ContentFormatReference.md b/ContentFormatReference/AndorsTrail_ContentFormatReference.md index 166f24495..578eb233c 100644 --- a/ContentFormatReference/AndorsTrail_ContentFormatReference.md +++ b/ContentFormatReference/AndorsTrail_ContentFormatReference.md @@ -207,27 +207,27 @@ If you intend to enable or disable map objects dynamically (through a quest/dial - "**requireID**" with a textual value. The specifities of this property depends on the selected "requireType", and will be detailed below. - "**requireValue**" with a textual value. The specifities of this property depends on the selected "requireType", and will be detailed below. -When "requireType" is "questProgress" or "questLatestProgress", the "requireID" property must have a value matching a quest ID, and the "requireValue" must have a value matching a quest step ID. In both case, the player must have reached this quest stage in order to fulfill the requirement. The difference between "questProgress" and "latestQuestProgress" is that the latter also requires that no other quest stage with a greater ID must have been reached (numerical comparison between the stage IDs). +- When "requireType" is "questProgress" or "questLatestProgress", the "requireID" property must have a value matching a quest ID, and the "requireValue" must have a value matching a quest step ID. In both case, the player must have reached this quest stage in order to fulfill the requirement. The difference between "questProgress" and "latestQuestProgress" is that the latter also requires that no other quest stage with a greater ID must have been reached (numerical comparison between the stage IDs). - "**requireNegation**" with the value true or false. false being the default, this property can be omitted completely in this case. When the value is true, the required is fulfilled only when it shouldn't be. -When "requireType" is "**inventoryRemove**", "**inventoryKeep**" or "**usedItems**", the "requireID" property must have a value matching an item ID, and the "requireValue" must have a positive numerical value depicting the quantity of the item. In the case of the "**usedItems**" type, the player must have used at least the selected quantity of the selected item type (quaffed X potions, eat Y apples...). In the case of "**inventoryKeep**" and "**inventoryRemove**", the player must have at least the selected quantity of the selected item in his inventory, the difference is that with the latter, these items will be taken from the player. I'd suggest avoiding doing that outside of a dialogue though, or with proper warning. +- When "requireType" is "**inventoryRemove**", "**inventoryKeep**" or "**usedItems**", the "requireID" property must have a value matching an item ID, and the "requireValue" must have a positive numerical value depicting the quantity of the item. In the case of the "**usedItems**" type, the player must have used at least the selected quantity of the selected item type (quaffed X potions, eat Y apples...). In the case of "**inventoryKeep**" and "**inventoryRemove**", the player must have at least the selected quantity of the selected item in his inventory, the difference is that with the latter, these items will be taken from the player. I'd suggest avoiding doing that outside of a dialogue though, or with proper warning. -When "requireType" is "**wear**", the "requireID" property must have a value matching an item ID. "requireValue" is not used. To fulfill this, the player must have the selected item equipped. +- When "requireType" is "**wear**", the "requireID" property must have a value matching an item ID. "requireValue" is not used. To fulfill this, the player must have the selected item equipped. -When "requireType" is "**skillLevel**", the "requireID" property must have a value matching a skill ID, as found here: [url]https://github.com/Zukero/andors-trail/blob/master/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java[/url]. The "requireValue" property must have a numerical value that indicate the level of the skill that is needed to fulfill the requirement. +- When "requireType" is "**skillLevel**", the "requireID" property must have a value matching a skill ID, as found here: [url]https://github.com/Zukero/andors-trail/blob/master/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java[/url]. The "requireValue" property must have a numerical value that indicate the level of the skill that is needed to fulfill the requirement. -When "requireType" is "**killedMonster**", the "requireID" property must have a value matching a NPC ID, and the "requireValue" property must be a numerical value that indicate the number of the given NPC that the player must have killed. +- When "requireType" is "**killedMonster**", the "requireID" property must have a value matching a NPC ID, and the "requireValue" property must be a numerical value that indicate the number of the given NPC that the player must have killed. -When "requireType" is "**timerElapsed**", the "requireID" property must be a textual value matching the ID of a timer started by a dialogue. The "requireValue" must be a numerical value indicating the number of game rounds that must have passed since the timer was last started. +- When "requireType" is "**timerElapsed**", the "requireID" property must be a textual value matching the ID of a timer started by a dialogue. The "requireValue" must be a numerical value indicating the number of game rounds that must have passed since the timer was last started. -When "requireType" is "**factionScore**", the "requireID" property must be a textual value matching the ID of a faction whose score was changed by a dialogue using the "alignmentChange" reward. The "requireValue" must be a numerical value (positive or negative) indicating the minimum score the player must have for this faction to fulfill this requirement. +- When "requireType" is "**factionScore**", the "requireID" property must be a textual value matching the ID of a faction whose score was changed by a dialogue using the "alignmentChange" reward. The "requireValue" must be a numerical value (positive or negative) indicating the minimum score the player must have for this faction to fulfill this requirement. -When "requireType" is "**spentGold**", the "requireID" property is unused, and the "requireValue" must be a numerical value indicating the total amount of gold that the player must have spent overall. +- When "requireType" is "**spentGold**", the "requireID" property is unused, and the "requireValue" must be a numerical value indicating the total amount of gold that the player must have spent overall. -When "requireType" is "**consumedBonemeals**", the "requireID" property is unused, and the "requireValue" must be a numerical value indicating the total amount of bonemeal potions (all kind of bonemeals, including Lodar's) that the player must have consumed overall. +- When "requireType" is "**consumedBonemeals**", the "requireID" property is unused, and the "requireValue" must be a numerical value indicating the total amount of bonemeal potions (all kind of bonemeals, including Lodar's) that the player must have consumed overall. -When "requireType" is "**hasActorConditions**", the "requireID" property must have a value matching an actor condition ID. The "requireValue" property is unused. The requirement is fulfilled when the player is afflicted by the selected actor condition. +- When "requireType" is "**hasActorConditions**", the "requireID" property must have a value matching an actor condition ID. The "requireValue" property is unused. The requirement is fulfilled when the player is afflicted by the selected actor condition. **Full example using all tags and attributes.** ``` @@ -791,10 +791,10 @@ A **dialogue** ***can*** have the following fields defined: - A **reply** ***must*** have the following fields defined: - "**text**" with any textual value. This is the text displayed as a selectable reply (in english), as shown to the player in-game. Proper spelling and capitalization are required. Multi-line messages are NOT possible. The text can contain "**$playername**", and the game engine will replace this by the player's name in-game. There is a special case: when the value is "N", no replies are shown to the player, only the "Next" button. This is used to make the NPC continue talking. Use this to put pauses in the text said by the NPC, as long multi-line messages would be hard to follow (or worse, require scrolling) in-game, especially on tiny devices. - "**nextPhraseID**" with a textual value matching a dialogue ID or one of the following special values: "**X**", "**F**", "**R**", "**S**". When this reply is selected, the dialogue will continue to the dialogue whose ID is referenced in this field. -- When the value is "**X**", the dialogue ends. This is also the case when this field is omitted entirely. -- When the value is "**F**", the dialogue ends and the player will start fighting the NPC. The player always has the first turn. -- When the value is "**R**", the dialogue ends and the NPC is removed from the map, as if it was killed, but without loot or splatter. -- When the value is "**S**", the dialogue ends and the the player starts trading with the active NPC. + - When the value is "**X**", the dialogue ends. This is also the case when this field is omitted entirely. + - When the value is "**F**", the dialogue ends and the player will start fighting the NPC. The player always has the first turn. + - When the value is "**R**", the dialogue ends and the NPC is removed from the map, as if it was killed, but without loot or splatter. + - When the value is "**S**", the dialogue ends and the the player starts trading with the active NPC. - "**requires**" with a list value containing any number of objects as defined in the **requirements** definition below. All the requirements associated to a given reply must be fulfilled for the reply to be displayed to the player. Think of it as a boolean AND between all requirements of a given reply. If you need to perform a boolean OR, simply create two replies with different requirements, but the same "nextPhraseID". @@ -802,23 +802,23 @@ A **dialogue** ***can*** have the following fields defined: - A **requirement** ***must*** have the following field defined: - "**requireType**" with one of the following textual values: "**questProgress**", "**questLatestProgress**", "**inventoryRemove**", "**inventoryKeep**", "**wear**", "**skillLevel**", "**killedMonster**", "**timerElapsed**", "**usedItem**", "**spentGold**", "**consumedBonemeals**", "**hasActorCondition**", "**date**", "**dateEquals**", "**time**", "**timeEquals**". -A **requirement** ***can*** have the following field defined: - - "**requireID**" with a textual value. As it depends on the "**requireType**" selected, see below for details. - - "**value**" with a numerical value. As it depends on the "**requireType**" selected, see below for details. - - "**negate**" with the value true or false. false being the default, this property can be omitted completely in this case. When the value is true, the requirement is fulfilled only when it shouldn't be. -- When "requireType" is "**questProgress**" or "**questLatestProgress**", the "requireID" field must have a value matching a quest ID, and the "value" must have a value matching a quest step ID. In both case, the player must have reached this quest stage in order to fulfill the requirement. The difference between "questProgress" and "latestQuestProgress" is that the latter also requires that no other quest stage with a greater ID must have been reached (numerical comparison between the stage IDs). +- A **requirement** ***can*** have the following field defined: + - "**requireID**" with a textual value. As it depends on the "**requireType**" selected, see below for details. + - "**value**" with a numerical value. As it depends on the "**requireType**" selected, see below for details. + - "**negate**" with the value true or false. false being the default, this property can be omitted completely in this case. When the value is true, the requirement is fulfilled only when it shouldn't be. + - When "requireType" is "**questProgress**" or "**questLatestProgress**", the "requireID" field must have a value matching a quest ID, and the "value" must have a value matching a quest step ID. In both case, the player must have reached this quest stage in order to fulfill the requirement. The difference between "questProgress" and "latestQuestProgress" is that the latter also requires that no other quest stage with a greater ID must have been reached (numerical comparison between the stage IDs). -- When "requireType" is "**inventoryRemove**", "**inventoryKeep**" or "**usedItems**", the "requireID" field must have a value matching an item ID, and the "value" must have a positive numerical value depicting the quantity of the item. In the case of the "**usedItems**" type, the player must have used at least the selected quantity of the selected item type (quaffed X potions, eat Y apples...). In the case of "**inventoryKeep**" and "**inventoryRemove**", the player must have at least the selected quantity of the selected item in his inventory, the difference is that with the latter, these items will be taken from the player. I'd suggest avoiding doing that outside of a dialogue though, or with proper warning. -- When "requireType" is "**wear**", the "requireID" field must have a value matching an item ID. "value" is not used. To fulfill this, the player must have the selected item equipped. -- When "requireType" is "**skillLevel**", the "requireID" property must have a value matching a skill ID, as found here: [url]https://github.com/Zukero/andors-trail/blob/master/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java[/url]. The "value" field must have a numerical value that indicate the level of the skill that is needed to fulfill the requirement. -- When "requireType" is "**killedMonster**", the "requireID" field must have a value matching a NPC ID, and the "value" field must be a numerical value that indicate the number of the given NPC that the player must have killed. -- When "requireType" is "**timerElapsed**", the "requireID" field must be a textual value matching the ID of a timer started by a dialogue. The "value" must be a numerical value indicating the number of game rounds that must have passed since the timer was last started. -- When "requireType" is "**factionScore**", the "requireID" field must be a textual value matching the ID of a faction whose score was changed by a dialogue using the "alignmentChange" reward. The "value" must be a numerical value (positive or negative) indicating the minimum score the player must have for this faction to fulfill this requirement. -- When "requireType" is "**spentGold**", the "requireID" field is unused, and the "value" must be a numerical value indicating the total amount of gold that the player must have spent overall. -- When "requireType" is "**consumedBonemeals**", the "requireID" field is unused, and the "value" must be a numerical value indicating the total amount of bonemeal potions (all kind of bonemeals, including Lodar's) that the player must have consumed overall. -- When "requireType" is "**hasActorConditions**", the "requireID" field must have a value matching an actor condition ID. The "value" property is unused. The requirement is fulfilled when the player is afflicted by the selected actor condition. -- When "requireType" is "**date**" or "**dateEquals**", the "requireID" field must be one of these format values: YYYYMMDD, YYYYMM, YYYY, MMDD, MM, DD. The "value" property is a an integer in the length of the uses format. -- When "requireType" is "**time**" or "**timeEquals**", the "requireID" field must be one of these format values: HHMMSS, HHMM, HH, MMSS, MM, SS. The "value" property is a an integer in the length of the uses format. + - When "requireType" is "**inventoryRemove**", "**inventoryKeep**" or "**usedItems**", the "requireID" field must have a value matching an item ID, and the "value" must have a positive numerical value depicting the quantity of the item. In the case of the "**usedItems**" type, the player must have used at least the selected quantity of the selected item type (quaffed X potions, eat Y apples...). In the case of "**inventoryKeep**" and "**inventoryRemove**", the player must have at least the selected quantity of the selected item in his inventory, the difference is that with the latter, these items will be taken from the player. I'd suggest avoiding doing that outside of a dialogue though, or with proper warning. + - When "requireType" is "**wear**", the "requireID" field must have a value matching an item ID. "value" is not used. To fulfill this, the player must have the selected item equipped. + - When "requireType" is "**skillLevel**", the "requireID" property must have a value matching a skill ID, as found here: [url]https://github.com/Zukero/andors-trail/blob/master/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java[/url]. The "value" field must have a numerical value that indicate the level of the skill that is needed to fulfill the requirement. + - When "requireType" is "**killedMonster**", the "requireID" field must have a value matching a NPC ID, and the "value" field must be a numerical value that indicate the number of the given NPC that the player must have killed. + - When "requireType" is "**timerElapsed**", the "requireID" field must be a textual value matching the ID of a timer started by a dialogue. The "value" must be a numerical value indicating the number of game rounds that must have passed since the timer was last started. + - When "requireType" is "**factionScore**", the "requireID" field must be a textual value matching the ID of a faction whose score was changed by a dialogue using the "alignmentChange" reward. The "value" must be a numerical value (positive or negative) indicating the minimum score the player must have for this faction to fulfill this requirement. + - When "requireType" is "**spentGold**", the "requireID" field is unused, and the "value" must be a numerical value indicating the total amount of gold that the player must have spent overall. + - When "requireType" is "**consumedBonemeals**", the "requireID" field is unused, and the "value" must be a numerical value indicating the total amount of bonemeal potions (all kind of bonemeals, including Lodar's) that the player must have consumed overall. + - When "requireType" is "**hasActorConditions**", the "requireID" field must have a value matching an actor condition ID. The "value" property is unused. The requirement is fulfilled when the player is afflicted by the selected actor condition. + - When "requireType" is "**date**" or "**dateEquals**", the "requireID" field must be one of these format values: YYYYMMDD, YYYYMM, YYYY, MMDD, MM, DD. The "value" property is a an integer in the length of the uses format. + - When "requireType" is "**time**" or "**timeEquals**", the "requireID" field must be one of these format values: HHMMSS, HHMM, HH, MMSS, MM, SS. The "value" property is a an integer in the length of the uses format. - A **reward** ***must*** have the following fields defined: @@ -829,19 +829,19 @@ A **requirement** ***can*** have the following field defined: - A **reward** ***can*** have the following fields defined: - "**value**" with a numerical value. As it depends on the "**rewardType**" selected, see below for details. - "**mapName**" with a textual value matching a map ID. As it depends on the "**rewardType**" selected, see below for details. -- When "rewardType" is "**questProgress**" or "**removeQuestProgress**", the "rewardID" field must match a quest's ID, and the "value" field must match a step ID that is defined in the selected quest. The "mapName" field is unused. "**questProgress**" will grant that progress, while "**removeQuestProgress**" will remove that progress from the player. The latter should be used only for *hidden* quests, as removing entries from the player's quest log can be awkward. -- When "rewardType" is "**dropList**", the "rewardID" field must match a droplist's ID, and the "value" and "mapName" fields are unused. + - When "rewardType" is "**questProgress**" or "**removeQuestProgress**", the "rewardID" field must match a quest's ID, and the "value" field must match a step ID that is defined in the selected quest. The "mapName" field is unused. "**questProgress**" will grant that progress, while "**removeQuestProgress**" will remove that progress from the player. The latter should be used only for *hidden* quests, as removing entries from the player's quest log can be awkward. + - When "rewardType" is "**dropList**", the "rewardID" field must match a droplist's ID, and the "value" and "mapName" fields are unused. When granted this reward, the player will receive all the items from the droplists, taking the variability of the droplist into account (some may have random quantities, or even random presence). -- When "rewardType" is "**skillIncrease**", the "rewardID" field must match a skill ID, as found here: [url]https://github.com/Zukero/andors-trail/blob/master/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java[/url]. The "value" and "mapName" fields are unused. + - When "rewardType" is "**skillIncrease**", the "rewardID" field must match a skill ID, as found here: [url]https://github.com/Zukero/andors-trail/blob/master/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/SkillCollection.java[/url]. The "value" and "mapName" fields are unused. When granted this reward, the player will see this skill's level incremented by one. -- When "rewardType" is "**actorCondition**", the "rewardID" field must match an actor condition's ID, and the "value" field will indicate the number of rounds this actor conditions last. The "mapName" field is unused. When granted this reward, the player will be afflicted by the actor condition for the selected number of rounds. Use a "value" of 999 to indicate that this actor condition lasts forever (rotworms anyone?). Another special case: when the "value" is -99, it means the player will be cleared of all active instances of this actor condition. + - When "rewardType" is "**actorCondition**", the "rewardID" field must match an actor condition's ID, and the "value" field will indicate the number of rounds this actor conditions last. The "mapName" field is unused. When granted this reward, the player will be afflicted by the actor condition for the selected number of rounds. Use a "value" of 999 to indicate that this actor condition lasts forever (rotworms anyone?). Another special case: when the "value" is -99, it means the player will be cleared of all active instances of this actor condition. When the "rewardType" is "**alignmentChange**" or "**alignmentSet**", the "rewardID" field must be an arbitrary textual value that will serve as the faction ID to use in "factionScore" requirements or NPCs' "faction" field, and the "value" field must be an integer indicating the score. In the case of "alignmentChange", the score set in "value" is added to the current score for that faction ID, while "alignmentSet" sets the value as the new score, regardless of the previous value. -- When "rewardType" is "**giveItem**", the "rewardID" field must match an item's ID, and the "value" field indicate the quantity. The "mapName" field is unused. When granted this reward, the player will receive the selected quantity of the selected item. This is quite similar to the "droplist" reward type, but it is simpler (no variability possible), and avoids the burden of creating a droplist when you just want to give one or two items, or some gold. -- When "rewardType" is "**createTimer**", the "rewardID" field must contain any textual value that will be this timer's ID. The "value" and "mapName" fields are unused. When granted this reward, the game will keep note of the game time (in game rounds elapsed since you started the game), and use this for comparison in requirements. Every time you *create* a timer, any previous note with the same timer ID will be overwritten. -- When "rewardType" is "**spawnAll**", "**removeSpawnArea**", or "**deactivateSpawnArea**", the "mapName" field must match a map's ID, and the "rewardID" field must match a spawn area's ID within the selected map. The "value" field is unused. In the case of "**spawnAll**", when granted this reward, this spawn area will be activated (if it was inactive), and all included NPCs will be spawned immediately. In the case of "**removeSpawnArea**", when granted this reward, this spawn area will be deactivated, and all included NPCs will be removed immediately. In the case of "**deactivateSpawnArea**", when granted this reward, this spawn area will be deactivated, but all included NPCs will remain on the map until killed or removed by a dialogue reward. -- When "rewardType" id "**activateMapObjectGroup**", or "**deactivateMapObjectGroup**", the "mapName" field must match a map's ID, and the "rewardID" field must match an object group's ID within the selected map. The "value" field is unused. In the case of "**activateMapObjectGroup**", when granted this reward, all map objects (except spawn areas) within this object group will be made active. In the case of "**deactivateMapObjectGroup**", when granted this reward, all map objects (except spawn areas) within this object group will be made inactive (they have no effect on the game anymore). :!: Beware though, as deactivating an object group containing a replace area that has already been triggered will NOT revert the map to its previous look. -- When "rewardType" id "**changeMapFilter**", the "mapName" field must match a map's ID, and the "rewardID" field must match a color filter's ID, as found here: [url]https://github.com/AndorsTrailRelease/ATCS/blob/master/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMap.java[/url]. The "value" field is unused. When granted this reward, the selected map will have its "colorFilter" property changed to the value of the "rewardID" field. See the post about maps to know the effect of the different available color filters. -- When "rewardType" id "**mapchange**", the "mapName" field must match a map's ID, and the "rewardID" field must match a mapchange target within the selected map. The "value" field is unused. + - When "rewardType" is "**giveItem**", the "rewardID" field must match an item's ID, and the "value" field indicate the quantity. The "mapName" field is unused. When granted this reward, the player will receive the selected quantity of the selected item. This is quite similar to the "droplist" reward type, but it is simpler (no variability possible), and avoids the burden of creating a droplist when you just want to give one or two items, or some gold. + - When "rewardType" is "**createTimer**", the "rewardID" field must contain any textual value that will be this timer's ID. The "value" and "mapName" fields are unused. When granted this reward, the game will keep note of the game time (in game rounds elapsed since you started the game), and use this for comparison in requirements. Every time you *create* a timer, any previous note with the same timer ID will be overwritten. + - When "rewardType" is "**spawnAll**", "**removeSpawnArea**", or "**deactivateSpawnArea**", the "mapName" field must match a map's ID, and the "rewardID" field must match a spawn area's ID within the selected map. The "value" field is unused. In the case of "**spawnAll**", when granted this reward, this spawn area will be activated (if it was inactive), and all included NPCs will be spawned immediately. In the case of "**removeSpawnArea**", when granted this reward, this spawn area will be deactivated, and all included NPCs will be removed immediately. In the case of "**deactivateSpawnArea**", when granted this reward, this spawn area will be deactivated, but all included NPCs will remain on the map until killed or removed by a dialogue reward. + - When "rewardType" id "**activateMapObjectGroup**", or "**deactivateMapObjectGroup**", the "mapName" field must match a map's ID, and the "rewardID" field must match an object group's ID within the selected map. The "value" field is unused. In the case of "**activateMapObjectGroup**", when granted this reward, all map objects (except spawn areas) within this object group will be made active. In the case of "**deactivateMapObjectGroup**", when granted this reward, all map objects (except spawn areas) within this object group will be made inactive (they have no effect on the game anymore). :!: Beware though, as deactivating an object group containing a replace area that has already been triggered will NOT revert the map to its previous look. + - When "rewardType" id "**changeMapFilter**", the "mapName" field must match a map's ID, and the "rewardID" field must match a color filter's ID, as found here: [url]https://github.com/AndorsTrailRelease/ATCS/blob/master/src/com/gpl/rpg/atcontentstudio/model/maps/TMXMap.java[/url]. The "value" field is unused. When granted this reward, the selected map will have its "colorFilter" property changed to the value of the "rewardID" field. See the post about maps to know the effect of the different available color filters. + - When "rewardType" id "**mapchange**", the "mapName" field must match a map's ID, and the "rewardID" field must match a mapchange target within the selected map. The "value" field is unused. **The special case of selectors**