Commit Graph

28 Commits

Author SHA1 Message Date
74ed88f2f3 Several new item abilities and one new monster ability
- Range augment ability for missiles
- Seeking ability for missiles (can strike an adjacent space if targeted space lacks a target, including chance of hitting invisible monsters)
- Weapon that calls node when attacking with it (works both in range and melee; the cases can be distinguished by the node with IF_CONTEXT)
- Armour that calls node when attacked while wearing (works both in range and melee; the cases can be distinguished by the node with IF_CONTEXT)
- Monster ability that calls node when monster attacked (works both in range and melee; the cases can be distinguished by the node with IF_CONTEXT)
- The above three only apply to non-magical attacks - some things don't trigger it, like spells, monster rays and breath weapons, possible a few others
- Armour that protects from all melee damage (including demon/undead, though less)
- Armour that decreases chance to be hit (both in range and melee, against non-magical attacks only)
- Armour that behaves like to the martyr's shield effect but also has a chance of adding some extra bonus damage
- Armour that's more encumbering than advertised (best for cursed items with concealed ability)
- Multiple items with the accuracy ability now stack
- Fix nephilim not getting their racial bonus to missile weapons
- In specials called as part of an attack, the reserved pointer -20 contains the target in a form ready to pass to a SELECT_TARGET node, while -21 and -22 contain the location of the target. This includes the new cases added in this commit plus the monster ability to call a special node on its turn. It does not include specials called in the spell targeting context (to do so would break legacy scenarios), nor specials called after a targeting node.
- If a PC is carrying more than their max weight, they gain encumbrance equal to one-tenth of the excess.
- Add some missing context cases to IF_CONTEXT node
2015-01-20 21:40:48 -05:00
7837459177 New item variety: Special
- When picked up or purchased, the party gains a special item
2015-01-20 17:45:15 -05:00
24f2bf455d Merge missile and melee weapon abilities
- Missiles now support arbitrary status effects (not just acid)
- Melee weapons now support the exploding ability (though such a weapon wouldn't be that great for the wielder)
- Melee weapons now support the heal target ability
- Lightning missile ability merged into damaging weapon abilit
- Missile slayer ability merged into slayer weapon ability; existing slayer weapons are slightly weakened (-1 damage for demons, -2 damage for undead)
- Exploding weapon ability now supports arbitrary damage types (not just fire)
- Missile weapons now support the weak weapon ability
- Missile weapons now support the soulsucker ability
- When firing a missile at a PC, all secondary effects now take place
- Fix thrown weapons, which were broken by the key weapon skill generalization
2015-01-20 17:18:47 -05:00
54a8ae8213 Merge more item abilities
- Bliss and doom merged into single ability (distinguished by item use type)
- The three party status abilities merged into one
- Major healing now has a negative version
- Summoning and mass summoning now use first ability data to determine duration; second ability data determines monster
- Added generic use message for spell abilities that didn't already have a specialized message
- Mass summoning no longer redundantly recalculates random number of summons after each summon
2015-01-20 17:18:44 -05:00
09b1dc35ab Fix alchemy being completely broken (in that brewed potions wouldn't work) 2015-01-20 17:18:43 -05:00
5450ae1caf Implement editing dialogs for individual monster abilities
Changes to game:
- Permanent martyr's shield is now customizable - extra1 is per-mille chance to activate each time damage is taken, and extra2 is percent of damage taken to apply to attacker
- Absort spells is now customizable - extra1 is per-mille chance to activate each time damage is taken or a magic effect is applied, and extra2 is how much hp to gain from non-damaging magic effects
- Splits ability is now customizable - extra1 is per-mille chance of splitting each time damage is taken
- Special node ability is now called before the monster tries its normal attack, and multiple monsters can use them per round (though each can only use theirs once)
- Fix issue with breath weapons and icy touch abilities conflicting (legacy import issue)
- Add two variations of the summoning ability - summon according to summoning level (like the spells), or summon a random creature of a particular species
- Fix touch abilities using the range as chance to use

Changes to dialog engine:
- Fix tab order handling to exclude fields that are currently hidden
- Add method to retrieve the parameter passed to toast(), as a quick way to distinguish between the user clicking OK or Cancel after run() has exited
- Fix hidden fields being drawn anyway
- Fix setting stack page sometimes crashing if the current page was invalid due to earlier reducing the page count to 0
2015-01-20 17:18:41 -05:00
3d7fcbd60e New special node to initiate conversation (should even work outdoors) 2015-01-17 15:00:22 -05:00
4e2c0100e8 Strictify and use talk node type enum 2015-01-17 02:41:25 -05:00
544cc80e56 Add special nodes that hook into the spell targeting system
- Node to initiate targeting mode and call a special once targets are chosen
- Nodes to place a spell pattern (one for fields and one for booms)
2015-01-17 02:09:50 -05:00
4ae1bf1d24 Make room to add more town specials by shifting the rectangle specials up 2015-01-17 01:48:41 -05:00
c5e302e0cc Several new special nodes
- A set of nodes for building complex strings in a string buffer; to reference the string buffer anywhere a string is expected, you can use -8 as the string number
- A node to pause the action for a specified period of time
- Nodes to alter traits, action points (only in combat), and PC/monster names
- Node to create a new level 1 PC with a specified race, name, graphic, hp, sp, basic stats; custom graphics supported too
- Nodes to test for deadness, spells, alchemy, and status effects
- Node to centre the view on an arbitrary space
- Node to lift the "fog of war", which currently means the unseen and light masks (which can actually be disabled in preferences anyway)
- Node to edit maps (ie, specify which areas are explored)
Changes to existing nodes:
- All the rectangle nodes that affect terrain now work outdoors.
- Play sound node now has an asynchronous option
- Fix min and max modes being swapped in the check statistic node
- Select PC now allows restricting to dead PCs or to PCs with free inventory space
- Select PC now calls the "on cancel" node if a non-interactive selection fails
- Affect deadness node now allows: setting/clearing the "fled outdoor combat" flag; setting/clearing the "absent" flag used for splitting the party; (un)deleting a PC
- If context node can now check if the party is in a specific boat/horse as opposed to any boat/horse
2015-01-16 22:57:39 -05:00
d729bcc86b Merge all the status effect special nodes
- It's now possible to affect weapon poison, martyr's shield, acid, and life detection from a special node
- Affect nodes now always take resistances into account when harming, but never when helping
2015-01-16 10:33:57 -05:00
5d9fd3cb5d Introduce enum to represent the whole-party statuses, and stop storing them in the stuff-done array.
- Also fix display of text on the text bar
2015-01-16 01:01:06 -05:00
9433060890 Changes to select/affect special nodes
- Select PC node can now select a specific monster, rather than a PC; it's renamed to Select Target
- Damage node no longer allows setting pic to 1 to damage active PC in combat
- Damage node now accepts a sound to accompany the damage
- Damage node now works on monsters
- All affect nodes that can work on monsters no longer get the monster to affect from ex2a - instead, they use the currently selected target

The default target selected when a special node chain begins execution has changed.
- When called in certain contexts (kill/see monster, monster special ability), the monster that triggered the node is the default target.
- In the use/target space contexts, if there's a monster on the space, it's selected as the default target.
- If neither of the above hold and the game is in combat mode, the currently active PC is selected
- Otherwise the previous behavour is used - if the party is split, select the sole PC, otherwise select the whole party.
2015-01-16 00:14:41 -05:00
aaa3cde16b Lots of special node changes
- Moved change/swap/transform terrain to the General section
- Merge change outdoor terrain into general change terrain
- Merge if town/outdoor terrain nodes
- Merge the if+take nodes with the equivalent base nodes
- Merge secret passage node into the can't enter node
- Move outdoor shop to the General section since it's not restricted to outdoors
- New story dialog node displays a sequence of strings one at a time, like the Exile 2 intro dialog
- New town nodes for animations: run missile, animate monster attack, draw simple boom with optional damage number
- If fields node expanded - now checks if the count of the desired field type existing within a specified rectangle falls within a given range
- Place items and move items nodes can now set the items as contained, provided there's a container on the destination space
- All rectangle nodes can now be restricted to just the boundary, as per the documentation
2015-01-16 00:06:12 -05:00
0b9593f3d1 Tweak monster ability system to reduce mechanical changes relative to original BoE 2015-01-15 16:13:48 -05:00
7b55262ed4 Several little fixes
- Fix custom missiles causing a crash if graphic not found
- Fix display in transcript of damage taken by monsters
- Fix missile start items not having their missile graphic set
- Fix immunity fields being signed (which would've prevented immunities from working properly)
- Don't bother generating a random number if min and max are the same
- Fix monster attack types not showing right
- Fix checking for item abilities returning 0 instead of 24 when not found
- Fix not updating screen when switching active PC
2015-01-15 15:03:32 -05:00
399572adf6 Rewrite the implementation of monster abilities
- Abilities are much more generic, but also much more complex; a set of "templates" is provided to try to make it more accessible
- There is now a possibility for monsters to charm each other
2015-01-14 22:37:43 -05:00
f282c06bfa Write the code to save the general scenario data to a file
- See monster strings are now fetched from the same list as the special encounter strings instead of a list of their own
- There is now a possibility for the scenario intro dialog to have a different icon than the scenario icon
- Remove unused intro_mess_len field
- Add method to the XML printer class to push a simple element with no attributes or child elements
- Automatically close any elements before writing the document to the stream
- Fix scenario editor File menu having an invisible "Close All" option that appeared when the option key was pressed
2015-01-13 20:54:51 -05:00
5587bbb0f2 Allow items to specify their missile animation and also allow for custom missiles
- Custom missiles are untested
- Items with custom missiles export the missile graphics in the party sheet
2015-01-13 14:40:53 -05:00
52c7bc126f Rename m_num_t -> mon_num_t 2015-01-13 13:52:02 -05:00
12c87a85af Merge more item abilities
- The strength, dexterity, and intelligence abilities have been merged; it's now possible to make items that boost some other skill, though the handling for this is not yet implemented.
- The occasional haste/bless/disease abilities have been merged.
- Move affect_pc and affect_party functions into cPlayer and cParty respectively
2015-01-13 11:45:45 -05:00
d6aeba8e0f Merge and generalize more item abilities
- It's now possible to create an item that protects from any type of damage, status effect, or species (though some status effects may not be implemented)
- It's now possible to create slayer weapons for any species
2015-01-13 10:35:12 -05:00
84689cacaf Strictify damage type enum 2015-01-13 00:12:47 -05:00
25ef2ed713 Initial reformation of item abilities
- Merge most of the spell usable abilities into a single "cast spell" ability which can take any spell as an additional parameter
- Merge the affect status usable abilities into a single "affect status" ability which can take any status as an additional parameter
- Merge acidic and poisoned weapon into a single "status weapon" ability which can take any status as an additional parameter (though the handling for other statuses isn't yet implemented)
- Fix mass charm spell getting worse as you intelligence bonus increases
- Mass charm item spell is now easier to resist (an unintended side-effect)
- PC versions of Wrack and Unholy Ravaging implemented (for use as item spells)
2015-01-12 21:18:45 -05:00
908652d168 Housekeeping
- Rename cItemRec -> cItem and cItemRec::type -> cItem::weap_type
- Clear out a lot of commented code
- Remove the flag_x members in the scenario that used to store the scenario's password hash (or something like that)
2015-01-12 01:01:24 -05:00
f5db91547c Fix Windows build 2015-01-11 15:18:35 -05:00
af0ee110c6 Rename osx directory to src since it's now the official source base 2014-12-28 12:12:38 -05:00