- Jul 02, 2017
-
-
Chris Davidson authored
Number changes Redesign Biting Gale and Acid Wave some Finalize Mirror Image code Redesign Primal Infusion Lower NPC max attack rune count to 1 Move Shatter Afflictions and Wild to utility instead of protect Update AI tactical tables for inscriptions
-
- Jun 26, 2017
-
-
Chris Davidson authored
Add icons to new inscriptions Add charge counter to Stormshield Add remaining Ward display to Prismatic Ward Nerf Stormshield
-
Chris Davidson authored
-
Chris Davidson authored
Uncomment the legacy inscriptions but remove their rarity Replace Undead starting Heat Beam with Shatter Afflictions Remove material tier on inscriptions and adjust minimum level/rarities Move Taint of Purging and Rune of Dissipation to quest rewards Remove stat bonus from Heroism Remove immunities on Movement when the move speed breaks Redesign Ethereal Rune to give move speed instead of wall walking Move Mirror Image rune to fixedart
-
- Jun 23, 2017
-
-
Chris Davidson authored
-
Chris Davidson authored
Add Rune of Dissipation as a reward for killing Urkis via Angolwen
-
- Jun 18, 2017
-
-
Chris Davidson authored
# Conflicts: # game/modules/tome/data/general/stores/basic.lua
-
- Jun 09, 2017
-
-
DarkGod authored
Addons: Damage shield supports on_absorb callback
-
- Jun 08, 2017
-
-
DarkGod authored
Shop changes There are currently several problems with the shop system. - Tier 3 is available early on which creates a weird and problematic early game crutch - Shops use the zone level for their material tiers which is usually not updated and leads to weird unintuitive changes in the value of various shops, notably that most don't scale past material tier 1-2 at all - Restock times are at set game events that are arbitrary This changes shops to scale in a more sane way. Specifically: - AoA restock events are removed - New shop property player_material_level that makes shop material tier increase every 10 player levels. This is applied to most AoA shops. - New world property restock_by_level makes shops restock when the player achieves level 5 and every 10 levels. This is applied only to the AoA campaign. - Shop restock size is changed from usually 10 to 4 to balance the increased frequency of restocks and better shop scaling - Inscription shops now guarantee an ego - Gates of Morning shops are changed significantly. Instead of having standard rules they now only fill 2 items but are guaranteed to be double greater ego items to differentiate them from other shops. Prices are increased by 300% to provide another gold sink and to prevent early game Celestials from buying high end items. Bug fixes: - Fixed shops only restocking if you had opened them already - Fixed some shops trying to generate item types that don't exist (robe) See merge request !445
-
DarkGod authored
Ranged Weapon/Archer Balance - Removed the free +20% attack speed on ranged weapons - Swift Shot now grants an increased attack speed buff for 5 turns - Removed armor penetration on Headshot - Reduced damage dealt by Called Shots - Reduced damage dealt and removed confusion on Shadow Shot - Reduced damage dealt by Bullshot - Trueshot now grants a scaling bonus to mark chance rather than a flat 100% - Reduced number of talents placed on cooldown by Sentinel slightly - Buffed Pestilent Blight - Worm Rot now gains a scaling chance to trigger worm spawning on removal (including Catalepsy) - Removed sustain cost of Shadow Decoy See merge request !460
-
DarkGod authored
More Mummies Updated Mummy NPC definitions: The Greater Mummy Lord gets his shalore racial talents, cut immunity, a better selection of runes, and is size 3. New NPC "Greater Mummy" an elite melee-ranged hybrid version of the other mummies. (So the GML has some poker buddies.) Resolver filters can assign a complete object list to their base_list field. Fixed resolver definitions for mummy wrappings so that they can be generated more reliably. Elven ruins mummies automatically use their zone-specific object list regardless of where they're generated. See merge request !459
-
- Jun 07, 2017
-
-
razakai authored
- Swift Shot now grants an increased attack speed buff for 5 turns - Removed armor penetration on Headshot - Reduced damage dealt by Called Shots - Reduced damage dealt and removed confusion on Shadow Shot - Reduced damage dealt by Bullshot - Trueshot now grants a scaling bonus to mark chance rather than a flat 100% - Reduced number of talents placed on cooldown by Sentinel slightly - Buffed Pestilent Blight - Worm Rot now gains a scaling chance to trigger worm spawning on removal (including Catalepsy) - Removed sustain cost of Shadow Decoy
-
- Jun 06, 2017
-
-
Hachem_Muche authored
Moved definitions for Bindings of Eternal Night and Crown of Eternal Night back to ancient-elven-ruins/objects.lua. resolvers.resolveObject: filter.base_list can be a list of objects (matches zone:makeEntity) Elven ruins mummies will load their zone object list into the appropriate equipment resolvers (so they will always get their mummy wrappings, etc. in any zone where they are loaded). Greater Mummies get headgear. (This slightly increases the chance to drop the Crown.)
-
Hachem_Muche authored
-
- Jun 03, 2017
-
-
DarkGod authored
Further Object resolvers updates Streamlined base_list handling in game.zone:makeEntity (and resolvers.resolveObject) to prevent excessive reloading and processing entity lists. Priority is type (if a base_list) then filter.base_list Actor:addedToLevel: escorts will get an appropriate faction (hard_faction, game.zone.special_level_faction, summoner.faction) game.state:applyRandomClass: converted equipment resolvers will allow power_source.nature (for Psyshots) The I.D. sets special_level_faction = "enemies" for NPCs created after level generation dialogs/debug/DebugMain.lua: fixed a bug that could cause no exp to be awarded when killing NPCs See merge request !457
-
- May 31, 2017
-
-
Chris Davidson authored
Fix store restocks only happening if you had already opened the shop at some point. All restocks and their associated levels are now stored and applied at Store:loadup. Add support for player_material_level and restock_by_level
-
Chris Davidson authored
Add a new world property stores_restock_by_level that makes restocks happen at player level 5 and every multiple of 10. This is applied to only AoA. Fix some shops referencing type "robe" that doesn't actually exist Set most AoA shops nb_fill value to 4 from 10 Set most AoA shops to use player_material_level Set AoA inscription shops to guarantee an ego Create a new set of equipment shops specific to Gates of Morning. Each has nb_fill of 2, 300% sell price increase, and guarantees 2 greater egos. Material tier is controlled by the zone instead of using the new player_material_level.
-
- May 29, 2017
-
-
Hachem_Muche authored
The Greater Mummy Lord gets his shalore racial talents, cut immunity, a better selection of runes, and is size 3. New NPC "Greater Mummy" an elite melee-ranged hybrid version of the other mummies. (So the GML has some poker buddies.) Fixed resolver definitions for mummy wrappings so that they can be generated more reliably. mummy-wrappings.lua is loaded with objects.lua. Mummy wrappings are very rare by default, but have a "mummy_rarity" field to allow generating them more reliably without loading a separate base list. (They are more common in the Elven Ruins.) Moved Bindings of Eternal Night and Crown of Eternal Night to boss-artifacts-maj-eyal.lua.
-
Hachem_Muche authored
Streamlined base_list handling in game.zone:makeEntity (and resolvers.resolveObject) to prevent excessive reloading and processing entity lists. Priority is type (if a base_list) then filter.base_list Actor:addedToLevel: escorts will get an appropriate faction (hard_faction, game.zone.special_level_faction, summoner.faction) game.state:applyRandomClass: converted equipment resolvers will allow power_source.nature (for Psyshots) The I.D. sets special_level_faction = "enemies" for NPCs created after level generation dialogs/debug/DebugMain.lua: fixed a bug that could cause no exp to be awarded when killing NPCs
-
- May 28, 2017
-
-
Chris Davidson authored
-
Chris Davidson authored
-
- May 27, 2017
-
-
DarkGod authored
Major events update GameState:doneEvent is updated to allow incrementing the used count (which is returned), and it is automatically called for events that are placed or assigned to a level, allowing event code to check the count correctly. GameState:startEvents() updated: The zone events file supports some new fields: unique = true prevents triggering of events that have previously been triggered (anywhere in the game) level_range = a range of allowed levels the event is allowed to spawn on (complements the forbid field) special = an optional function(lev) that can determine if the event should spawn or not (The logic is updated to be consistent with other "special" functions used in filters, etc.) Fixed a bug in passing event_id to event functions (metatables). Added documentation and output to the relevant GameState functions. Fixed issues with major events that involve a change of zone (sub-vault, rat-lich, damp-cave, old-battle-field, drake-cave, naga-portal, fearscape-portal): .no_worldport is set to that of the parent zone. Actor levels are 5% to 15% higher than the parent zone and game difficulty adjustments are not compounded. Object material levels match the parent zone. Auto explore and minimap settings are updated. This makes these events "safe" to add anywhere in the game and at higher difficulties, and they are added as standard to the I.D. (with appropriate level restrictions). Fixed a bug in game:changeLevelReal that was causing the player to incorrectly be placed at level start when params.auto_level_stair was set. (Affected the old-battle-field event and some other stairs) Other event changes: The player can choose to ignore the naga-portal and fearscape-portal by hitting escape at the pop-up. The cultists event uniqueness is fixed (unique across the game) and it can only spawn from level 15+ in the I.D. Fixed a bug in the sub-vault event that was preventing the stairs from crumbling as intended. Updated the sludgenest and noxious-caldera events for the wilderness and the conclave-vault event for the halfling ruins. (No game play change; the special field is removed as it's not needed.) See merge request !441
-
DarkGod authored
Artifact Cheese
<dt>Artifact buffs and tweaks</dt> (contains !442 cloudcaller buffs) ___ Aetherwalk gains voidwalker effects and deals magic-based arcane damage in radius 3 on any teleport when worn ___ Frost Treads cost adjusted, gains 10% movespeed, has dex requirement removed and gains wil instead for nature flavor. New AoE effect on walking, beneficial to player, detrimental to enemies. ___ Cloudcaller now deals 15 lightning damage per turn in radius 3 around the user, light bonuses changed to cold for flavor. Active power buffed for more uses ___ Acera and Everpyre Blade now have their damage type changed to acid and fire respectively to reinforce identity Everpyre Blade loses active and gains it as an on-hit instead ___ Ring of the dead is now unvaultable ___ Behemoth Hide stats increased to reinforce usefulness ___ Mighty girdle and Girdle of Calm Waters tiers swapped (2 and 1 respectively) and level ranges swapped to make Calm Waters less common. Cost on Calm Waters adjusted slightly. See merge request !447 -
DarkGod authored
Object Resolvers Update Supplement debug/SummonCreature.lua : fixed a bug causing generated NPC's to not be removed from the level until actually added (affects RandomActor) Added log messages to Actor:wearAllInventory for party members (for cases like a quest auto equipping items for the player) Updated some auto_equip_filters: class descriptors: Bulwark, Sun Paladin: BODY: allows wearing light armor if nothing better is available Bulwark, Sun Paladin: Reaver: MAINHAND can equip a 2h weapon if it won't block the OFFHAND slot (for ogres, etc.) Berserker, Archer: OFFHAND can equip if there is a MAINHAND weapon already equipped (fixes an issue of for some randbosses not using MH weapons) Rogue, Shadowblade: BODY can wear mummy wrappings Summoner: removed auto_equip_filters See merge request !456
-
- May 26, 2017
-
-
Hachem_Muche authored
debug/SummonCreature.lua : fixed a bug causing previewed NPC's to be added to the level inappropriately Added log messages to Actor:wearAllInventory for party members (for cases like a quest auto equipping items for the player) Updated some auto_equip_filters class descriptors: Bulwark, Sun Paladin: BODY: allows wearing light armor if nothing better is available Bulwark, Sun Paladin: Reaver: MAINHAND can equip a 2h weapon if it won't block the OFFHAND slot (for ogres, etc.) Berserker, Archer: OFFHAND can equip if there is a MAINHAND weapon already equipped (fixes an issue of for some randbosses not using MH weapons) Rogue, Shadowblade: BODY can wear mummy wrappings Summoner: removed auto_equip_filters
-
- May 25, 2017
- May 24, 2017
-
-
Chris Davidson authored
-
- May 23, 2017
-
-
DarkGod authored
-
Hachem_Muche authored
-
DarkGod authored
-
DarkGod authored
-
DarkGod authored
Object resolvers update Summary: This updates object resolvers, eliminating redundant code to ensure consistent behaviour and integrating them into the debugging object creation interface -- allowing resolver filters to be debugged directly within the debugging dialogs. It adds a new system for NPCs choosing equipment to wear based on filters, and updates ToME character class descriptors and Entity definitions to ensure only appropriate equipment is worn (to prevent wearing Objects that interfere with talents). This fixes the issue of NPCs getting added random classes with many unusable talents. (Embers and Ashes class descriptors and Entities work as before, but need to be updated to benefit from the changes.) Details: New utility functions (useful for debugging): string.fromFunction(fct, fmt) returns a string abbreviation for a function, including filepath, line numbers string.fromValue(v, recurse, offset, prefix, suffix) -- enhancement of tostring function with more thorough handling of tables and functions string.fromTable(src, recurse, offset, prefix, suffix, key_recurse): returns a single-line string representation of a table, including string representations of subtables and functions. The recursion level for both keys and values can be set. The converted string is lua source code compatible, depending on arguments. engine.Zone:checkFilter: Added documentation, can set filter.allow_uniques to allow unique items to pass the filter, special function takes the filter as its 2nd argument engine.Zone:filterToString: updated -- handles subtables, functions, and other complex values engine.Zone:makeEntity: the type parameter can be a list of entities engine.Zone:makeEntityByName: Added documentation, type can be a string descriptor used to load a base list (follows makeEntity filter.base_list) engine.Entity:resolve: Added documentation engine.Birther: Bugfix: the order of resolvers is preserved when applying birth descriptors (causes resolver.attachtinker to fail with no equipment to attach to) engine.interface.ActorInventory:initBody() May be reapplied to an actor without overwriting existing inventories (merges properties), copies the inventory definition short_name dialogs.debug.SummonCreature, dialogs.debug.RandomActor: Actors are fully resolved before added: including "addedToLevel", "on_added", "on_added_to_level" (except spawning escorts) updating for game difficulty, etc. on generation, before adding Uniques (including inventory items) are not registered in the game until the actor is actually placed. dialogs.debug:RandomObject: Can set the working actor to be a NPC (defaults to the player) New button/hotkeys to open the working actor character sheet and inventory screens Can select from one of several object resolvers, which will call the appropriate code and resolve the object. This works like other object generation, allowing preview/inspection before adding the object to the game, which is controlled by the selected resolver as normal Uniques created are not registered until actually added to the game. CharacterSheet: can always open the inventory dialog in debug mode Actor:resolveLevelTalents: code to apply self.learn_tids moved from createRandomBoss to this function (enabling this function for all Actors) New function Object:wornLocations(use_actor, weight_fn, filter_field, no_type_check) (This functionality replaces the no_npc_weapon_equip flag.) Returns a table if inventory locations where an object can be worn, filtered and sorted The "best" locations appear first, permitting Actors to automatically optimize their equipment. The default criteria are simple (based on object "power", from material level and getPowerRank), but can be updated to be more sophisticated. New function Actor:wearAllInventory(force, ...) Attempts to wear all items in main inventory, using Object:wornLocations to find the best locations (currently does not attempt to attach tinkers, aggressively remove worn items, or support psionic focus) New function Actor:updateObjectRequirements(o) Returns object requirements modified by actor talents Used by Actor:canWearObject, Object:getRequirementDesc, and resolvers.resolveObject New function Actor:searchAllInventories(o, fct) Searches all inventories for an object (including attached tinkers). Triggers an optional callback on found items. NPC:addedToLevel: classes added from higher difficulty settings allow equipment to be updated and autolevel stats (if more than one class added) calls Actor:wearAllInventory to equip objects game.state:entityFilterAlter: Added documentation, updated RandomObject help game.state:entityFilter: Added documentation, updated RandomObject help game.state:entityFilterPost: Added documentation, updated RandomObject and RandomActor help game.state:egoFilter: Added documentation game.state:applyRandomClass: Fixed a bug causing starting class stats to not be added properly Copies all class resolvers with _allow_random_boss set true (resolvers.equip: ignore_material_restriction=true) Resolvers enabled: inscription, inscriptions, auto_equip_filters, attach_tinker, inventory, drops, drop_randart The can_tinker table is copied (allows resolvers.attach_tinker to work properly) autolevel set to "random_boss" unless data.autolevel == false May set data.update_body to force adding inventory slots to the actor May set data.spend_points to spend all unspent stat points data.force_classes can take numerical indexes. Fixed a bug causing multiple forced classes to be applied in definition order rather than randomly. (Example: {"Rogue", Alchemist=true, Necromancer=true} always adds the Rogue class first then Alchemist and Necromancer in random order, before adding any other random classes) game.state:createRandomBoss: Allows learn_tids to be applied by resolveLevelTalents (random class talents are learned before attempting to wear equipment with NPC:addedToLevel) No longer removes equip and drops resolvers from the base NPC This preserves important drops and equipment (updated to "boss" levels) required for NPC talents (i.e. randelite Naga Mymidons are not spawned disarmed/improperly armed with certain classes) -- applyRandomClass replaces equipment and updates inventory filters as needed. New resolver -- resolvers.auto_equip_filters(t, readonly): Sets filters by inventory slot to be checked before automatically wearing objects. Can be used by class descriptors and general npc definitions to ensure that equipment automatically equipped will not interfere with talents. Input is either a table of filters or a class descriptor name to load the filters from the referenced birth descriptors (i.e. resolvers.auto_equip_filters("Archmage")). As usual, multiple copies of this resolver overwrite each other by inventory slot (use readonly to prevent), so randbosses with more than one class will generally use the filters for the last class applied. (i.e. Alchemist (applied first), Rogue (applied second) will preferentially equip daggers in MAINHAND/OFFHAND and alchemist gems in QUIVER) New general object resolver function -- resolvers.resolveObject(e, filter, do_wear, tries): Called by all filter-based object resolvers for consistency, interprets the filter fields: base_list, random_art_replace, alter (takes the resolving actor as an argument), autoreq (can trigger actor levelup and learning talents in addition to stats), force_inven, force_item, force_drop, never_drop, _use_object (sets a pre-resolved object to use, skipping random generation), replace_unique (filter for generating a replacement for a specific object) Uses Object:wornLocations to find the best locations in which to wear objects. Correctly handles replaced objects and always places unworn objects into main inventory unless explicitly forbidden. (Calls game.zone:addObject only for objects that are actually added to the actor.) Documentation serves as core help in RandomObject dialog for resolvers. resolvers.equip: updated to use resolvers.resolveObject resolvers.inventory: updated to use resolvers.resolveObject resolvers.drops: updated to use resolvers.resolveObject resolvers.attachtinker: updated to use resolvers.resolveObject, will place the tinker in main inventory if .keep_object is set resolvers.drop_randart: interprets .data field as input to game.state:generateRandart, may set ._use_object to use a pre-resolved object and .no_add to return the generated object instead of adding it to inventory Class Descriptors updated with inventory filters: Spellpower based casters (Anorithil, Paradox Mage, Archmage, Alchemist, Necromancer, Corruptor): MAINHAND: staff OFFHAND: none unless a 1H weapon is equipped in MAINHAND Alchemist: QUIVER: alchemist-gem Oozemancer, Summoner, Doomed: MAINHAND/OFFHAND: mindstars Stone Warden: MAINHAND/OFFHAND: shield or weapon with the block combat field Brawler: MAINHAND/OFFHAND: unarmed Reaver: MAINHAND/OFFHAND: 1H weapon Archer: MAINHAND: Archery weapon QUIVER: Ammo must match type of MAINHAND weapon Temporal Warden: MAINHAND: longbow OFFHAND: none QUIVER: Ammo must match type of MAINHAND weapon QS_MAINHAND: 1H weapon Sun Paladin, Bullwark: MAINHAND: 1H weapon OFFHAND: shield or weapon with the block combat field BODY: heavy or massive armor Berzerker: MAINHAND: 2H weapon OFFHAND: unarmed Rogue, Shadowblade, Marauder: MAINHAND/OFFHAND: dagger Rogue, Shadowblade: BODY: light or cloth armor Skirmisher: MAINHAND: sling OFFHAND: shield or weapon with the block combat field QUIVER: Ammo must match type of MAINHAND weapon Some NPC Entity updates: Bosses in Trollmire, The Maze, Daikara, Dreadfell, Elven Ruins, High Peak, Orc Prides, Assassin Lord, Tannen, Golbug, Corrupted Oozemancer, Some major and minor demons, various caster npcs, many orcs, thieves, minotaurs, yaechs, naga See merge request !455
-
Hachem_Muche authored
string.fromValue can take negative recursion level to get std tostring Remove debugging code
-
- May 22, 2017
-
-
Hachem_Muche authored
-
Hachem_Muche authored
-
Hachem_Muche authored
New function: Object:wornLocations(use_actor, weight_fn, filter_field, no_type_check) Replaces Actor:getFilteredInventories Returns a table if locations (inventory and slot) where an object can be worn, filtered and sorted The locations are sorted ("best" first), permitting Actors to automatically optimize their equipment. The default weight_fn is a simple formula (based on object "power" from material level and getPowerRank), but can be updated to be more sophisticated. no_type_check can be specified to allow different type replacement equipment for unfiltered inventories game.state:applyRandomClass: data.update_body can be a list of inventory slots specifying which inventories to define/update when applying a class game.state:createRandomBoss: Base actor equipment resolvers are updated to "boss" level drops. resolvers.generateObject renamed resolvers.resolveObject: new filter fields supported: replace_unique: specifies a filter to replace a unique that could not be created (similar to randart_replace, but the replacement object is equipped rather than the existing unique) check_antimagic: force an antimagic check even if the object will not be worn resolvers.auto_equip_filters(t, readonly): set readonly to specify an inventory filter that cannot be overwritten (to ensure specific equipment is not removed, i.e. Elandar will not replace the Staff of Absorption if he gets extra classes from higher game difficulties) Object resolvers add the field _resolver_type to the objects they create. dialogs.debug.RandomObject: fixed a bug causing resolvers.equip to preview ineligible equipment (antimagic check) dialogs.debug.SummonCreature: fixed a bug causing summoned actors to try to wear equipment before being fully resolved Added/updated auto_equip_filters for a number of NPCs
-
- May 21, 2017
-
-
Hachem_Muche authored
-
- May 17, 2017
-
-
Hachem_Muche authored
Spellpower based casters (Anorithil, Paradox Mage, Archmage, Alchemist, Necromancer, Corruptor): MAINHAND: staff OFFHAND: none unless a 1H weapon is equipped in MAINHAND Alchemist: QUIVER: alchemist-gem Oozemancer, Summoner, Doomed: MAINHAND/OFFHAND: mindstars Stone Warden: MAINHAND/OFFHAND: shield or weapon with the block combat field Brawler: MAINHAND/OFFHAND: unarmed Reaver: MAINHAND/OFFHAND: 1H weapon Archer: MAINHAND: Archery weapon QUIVER: Ammo must match type of MAINHAND weapon Temporal Warden: MAINHAND: longbow OFFHAND: none QUIVER: Ammo must match type of MAINHAND weapon QS_MAINHAND: 1H weapon Sun Paladin, Bullwark: MAINHAND: 1H weapon OFFHAND: shield or weapon with the block combat field Berzerker: MAINHAND: 2H weapon OFFHAND: unarmed Rogue, Shadowblade, Marauder: MAINHAND/OFFHAND: dagger Rogue, Shadowblade: BODY: light or cloth armor Skirmisher: MAINHAND: sling OFFHAND: shield or weapon with the block combat field QUIVER: Ammo must match type of MAINHAND weapon Some NPC Entity updates: Bosses in Trollmire, The Maze, Daikara, Dreadfell, Elven Ruins, High Peak, Orc Prides, Assassin Lord, Tannen, Golbug, Corrupted Oozemancer, Some major and minor demons, various caster npcs, many orcs, thieves, minotaurs, yaechs, naga
-
Hachem_Muche authored
Actors are fully resolved before added: including "addedToLevel", "on_added", "on_added_to_level" (except spawning escorts) updating for game difficulty, etc. on generation, before adding Uniques (including inventory items) are not registered in the game until the actor is actually placed. dialogs.debug:RandomObject: Can set the working actor to be a NPC (defaults to the player) New button/hotkeys to open the working actor character sheet and inventory screens Can select from one of several object resolvers, which will call the appropriate code and resolve the object. This works like other object generation, allowing preview/inspection before adding the object to the game, which is controlled by the selected resolver as normal Uniques created are not registered until actually added to the game. CharacterSheet: can always open the inventory dialog in debug mode
-