Everyone

This Content can be viewed by everyone, even people with no account.

ACR Creator

ALFA has in its core content a custom implementation of the DM Creator. The ACR Creator serves the same broad purpose as the default NWN2 creator, allowing DMs to create objects for use in play on the fly, but the ACR Creator puts emphasis on providing better information about the things to be spawned, making it easier to organize the items as they appear in the creator, improving the performance of the creator, and improving the stability of the creator.

Creator Tabs

The ACR creator does not use a tree control to display spawnable items to DMs. Instead, the primary interface is a list box and the contents of that list box are controlled by the tabstrip that lines the top of the creator:


(the ACR Creator tabs. Click for a full view of all tabs)

Classification Structure

Naming and Organization

All classifications inside of the ACR Creator are organized into the toolset style of classification structures, which may be an arbitrary number of levels deep. Classification structures are made deeper by delimiting the Classifications defined on the object with pipes. For example:

Humanoid_Goblinoid

Will appear inside of a single classification named "Humanoid_Goblinoid"

Humanoid|Goblinoid

Will appear inside of a classification named Goblinoid, which will be inside of a classification named Humanoid. If there are also creatures with classifications such as

Humanoid|Orc

Then both the Orc and Goblinoid classifications will appear inside the Humanoid classification.

If any classification names contain a colon ( a : ), then that colon will be replaced with a minus ( a - ) as the character is required by the ACR Creator to indicate that a list item represents a classification. There is no need to update existing classifications to this end, as the performance impact is trivial and executed on a background thread at server startup.

Objects without any classification appear in the root classification.

Navigation

The ACR Creator is opened as the DM Creator used to be. By default the comma ( , ) key opens the ACR Creator. However, this can be configured per user by opening the Game Options menu, selecting Keymapping from the resulting tabbed menu, and DM from the nested tabs therein. The key mapping for DM Creator controls the ACR Creator on servers which use the ACR.

In addition, the DM Creator button in the DM toolbar (the leftmost button, depicting a male conjuring something with his right hand) will open the ACR Creator on servers which use the ACR.

A DM may view the contents of a tab by clicking the tab. Icons on each of the tabs have mouse over effects to indicate when a click will be interpreted as navigation.

A DM may view the contents of a classification by double clicking the row that lists it on the DM Creator. He or she may view the classification's parent by double clicking the ".." row at the top of the list. If the list does not contain a ".." line, then the currently-viewed list is root classification and it has no parent to view.

At server reset, a DM will begin with every tab set to that tab's root classification. Thereafter, use of the ACR Creator will be remembered by the ACR Creator. Every tab will remain in the classification it was viewing last, and the ACR Creator will open to the last-focused tab.

Clicks which are not interpreted as spawning or navigation are valid for use to drag the creator. As with all UIs, individual game clients will remember the last location of the UI element. DMs who use multiple computers may notice the Creator placing itself in different locations on each of the computers, even though changes to tab and classification focus would persist across the two.

The close button for the ACR Creator is placed on the top right corner of the ACR Creator. It may also be closed by pressing Escape.

Spawning

Objects may be spawned from the ACR Creator by double clicking the item that one wishes to spawn. When the object is ready to spawn, your pointer will turn into a targeting UI, as if you were to cast a spell. If the object to be spawned exists at a single point, such as a creature, item, or placeable, then the UI will be a small circle that is roughly the size of a PC's clipping radius. If the object affects an area, such as a trap, the targeting UI will resemble the size and shape of the area to be affected.

When an object is spawned from the ACR Creator, the server will process the spawn and recycle the targeting UI to allow multiple spawning. The targeting UI may be dismissed by right clicking.

Sorting

The ACR Creator is not currently capable of sorting on more than just object names. All objects appear alphabetically by name, sorted by classification structure. While this may be changed in the future, it is reccommended that the newly-afforded nesting of classification structure be used to make objects easy to find.

Searching

The ACR Creator provides a search bar, listed above the resource list and indicated by its light gray bounding box. This field accepts any text entries. When an entry is completed, pressing enter executes a search against the text which has been entered into the field against the current contents of the resource lists and its sub directories. This process typically only takes a couple seconds after the enter key is pressed. No attempts to parse multiple words are made, so a search like "b a" will not find "Bill Anderson", but will find "Bob Anderson".

When the results of a search are no longer needed, a ".." classification link is present at the top of the resource list, which returns to the classification which was focused before the search was run.

Searches will attempt to match on the contents of any displayed field in the resource list, so searching on "Hostile" in the creature tab will return all creatures of the Hostile faction inside the current classification and its sub classifications.

Searching on "5" will collapse all current subclassifications into a single list.

Creature Tab

The leftmost tab, and the default tab.

The Creature tab on the ACR Creator displays the name of the creature to be spawned, the faction that the creature will have by default when spawned, and the creature's CR. Creatures will by default spawn only one at a time, facing the same direction as the DM who spawned it.

Item Tab

The second tab from the left.

The Item tab on the ACR Creator displays the name of the item to be spawned, the value in gold of a single instance of the item, and the minimum level of a character who might potentially own such an item according to the current wealth guidelines. Items spawn one at a time, except for ammunition, which spawns in stacks of 50 when an object with an inventory (such as a creature or a chest) is targeted and single instances when placed on the ground.

Items may be placed in a placeable or creature's inventory by targeting the object to carry it. If an object with no inventory is targeted, the item will appear on the ground at that object's location.

If an object with an inventory (such as a creture or a treasure chest) is already selected when the item on the creator is double clicked, that item will be placed directly into that object's inventory without providing any further UI.

This tab also contains a button to open the ACR Loot Generator.

Placeable Tab

The third tab from the left.

The Placeable tab of the ACR Creator displays the name of the placeable, if the placeable is locked or trapped (and the DC of the lock and the trap if they are), and whether or not the placeable has an inventory. Placeables will spawn only one at a time, facng the same direction as the DM who spawned it.

Trap Tab

The middle tab

The Trap tab of the ACR Creator displays the name, the DC, and an approxomation of CR for the trap. Traps placed from the creator have the size and placement of the UI when it is clicked, and may be detected from 5-8 meters outside its outer border by default, with larger traps having a larger detection radius.

All modules are given a "Standard" classification, which contains the damage-doing default NWN2 traps, as adapted to the ACR Traps system.

** It is important to note that traps are invisible to DMs once they are spawned. The tick in the spawning UI when placing a trap is the indication that the spawning has happened. DMs can verify the presence and location of traps by removing the filters on persistent areas of effect in the DM Chooser and double clicking any object which they wish to look at. This will cause the DM Avatar to jump to the location of the trap. **

Visual Effects Tab

The third tab from the right

The Visual Effects tab of the ACR Creator only displays the name of the placed effect that it may spawn. Only one placed effect is spawned at a time, facing the same direction as the DM who spawned it.

Waypoint Tab

The second tab from the right

The Waypoint tab of the ACR Creator only displays the name of the waypoint that it may spawn. Only one waypoint is spawned at a time, facing the same direction as the DM who spawned it. These waypoints, when spawned, are not recognized by systems such as the ACR Spawn system currently. However, waypoints that define custom traps will not appear on this list. They will instead appear on the Trap tab.

Light Tab

The rightmost tab

The Light tab of the ACR Creator displays the name of the light that it may spawn, the brightness and radius of the light that will result, and the opacity of shadows cast by the light.

It is important to note that shadows are additive-- so if two lights cast overlapping shadows at 50% each, the overlap will be at 100% shadow. The second light will not make the previously-50% shadow into a 25% shadow. DMs seeking to light an area should attempt to use relatively-few sparsely-placed lights.

 

ALFA Release Notes v1.90

Change Log

Note: multiple hotfixes and interim updates are associated with this release. See the bottom of this page for details on updates that were not in the initial release of v1.90

Changed Time

The ACR has made necessary changes to support the alteration of time at the module level. This will cause some hour/level spells to last 13 minutes/CL regardless of module-specific settings; official word from responsible Admin to change time compression on modules to 13 minutes/game hour is expected to come with this release.

Changed Systems

Loading Screens

  • Loading screens no longer claim ALFA's previous one-PC policy as a pillar, and pillars are renumbered to reflect their new current state.

Non-Member Support

  • The concept of public and private servers, and the concept of member and non-member players, are introduced to the ACR. Non-members may not portal to private servers and may not level to any level what would increase their ECL to 4.

Chat, Dice, Voice Throwing

  • Added an #alist command, which will list all creatures anchored for chat command voice throwing.
  • #hide and #stealth now accounts for the roller's size modifier
  • The UI used to select languages is replaced with a newer, cleaner one.
  • $OBJECT_TARGET is now an alias for $s.GetPlayerCurrentTarget in #sa commands.

Subdual

  • Creatures which have been subdued are now regarded as stunned mechanically, to prevent AI-controlled NPCs from attempting to fight while subdued.

Swimming

  • Swim checks only take 10 when you would be successful when doing so.

Poisons

  • Lines 50 to 80 of poison.2da are now available for the construction of arbitrary poisons.

DM Creator

  • The DM Creator is entirely replaced. See the full documentaton here.

DMFI Tools, DM Wands, Widgets, Reports

  • The DMFI "Set Area Hostile" function will no longer alter the factions of things which are in PC parties, such as animal companions, summons, or familiars.
  • The Omega Wand now has a function to remove all spell effects from a targeted creature.
  • The ACR Inventory Report now includes a line for the player's carried gold.
  • The ACR Player Report now has an icon to indicate when a character is between 90% and 110% of target wealth (being a coin with a green check beside it). Old icons remain in the remaining space, with low now occupying 50%-90% and high occupying 110%-150%. Empty pockets (0-50%), very rich (150-200%), and cutoff (200%+) are unchanged in their ranges.
  • All wealth-related icons on the ACR Player Report now include arrows and exclamation points as an additional reference to indicate which side of the wealth spectrum they reflect, and how severely off the mark the character is. (more exclamation points = worse)
  • Tech has added a standalone application, distributed to HDMs and any they delegate as log reviewers, to allow reviewers high-level review of their servers, with emphasis on identifying severe outliers in wealth, DM time, travel, or potential misbehavior (such as combat logging or self looting) at a glance.

zSpawn

  • zSpawn spawn widgets come with a Spawn Nonhostile option. zSpawn creatures made in this fashion will be part of the commoner faction, instead of hostile.
  • zSpawn bards now learn Perform (Oratory) instead of other less-useful skills.
  • zSpawn movement rate is now Normal by default
  • zSpawn perception range is now PC -5 by default.

Traps

  • Traps as they are created by the Creator are entirely replaced. See the full documentation here.

Spawns

  • Spawn points can now spawn Placed Effects

Quests

  • The quest reward scrips provided by Obsidian are now all disabled. All quest rewards should be done through ACR scripts.
  • acr_quest_collection is now available as a standard script, for turnins of piles of resources (such as herbs or goblin ears), and is the preferred way to reward for quests which are ongoing and based on amassing items of relatively-little value.
  • ACR_AwardStaticQuestXPFromCR now exists, and is the preferred way to reward for quests with clear beginnings and ends.
  • acr_quest_rewardbycr now exists, implementing ACR_AwardStaticQuestXPFromCR
  • Static quests now provide diminishing returns when performed by over-level characters, losing 10% of the XP reward value when compared to the previous level when the PC's current level is greater than the quest's CR
  • All quests default to CR 0.5, until set otherwise by builders.

Client Extension Check

  • Checker for client extension now looks for 1.0.0.24

Collections

  • acr_collections_i now exists, to emulate the functionality of enumerable collections typically available in more-advanced languages than NWScript.

Arbitrary Creation of Targeting UI

  • Circular and Wall targeting UIs can now be called on arbitrarily, without requiring that they be part of another GUI or a spell.

Logging

  • Item Acquire events now log the value of the acquired item.
  • Item Acquire events now note the DM source of an item, if the DM carried it into the module on an avatar.
  • SetXP now logs what the target's XP was before the Set
  • All objects made through the creator log that they were created and into whose inventory, in the case of items spawned in such fashion, or the location, in the case of all other items.

Feat Changes

  • Feats which require Combat Expertise as a prerequisite now respect ALFA's Combat Expertise.
  • Prestige classes also refer to the new Combat Expertise
  • Resist Energy feats are now available for use when toolsetting and for the construction of prestige classes, but still may not be selected on level up.

Spell Changes

  • Trade Scrolls can now contain any spell, even if that spell doesn't have an associated item property. 
  • Dancing Light, Ghost Sound, Message, Meteor Swarm, Prestidigitation, Water Breathing, and Wind Wall can now be used on trade scrolls and crafting projects.
  • Sleep is now capable of tracking forms of unconsciousness which are not magical sleep, such as PCs who are below 0 hit points, and will not attempt to put said creatures to sleep.
  • Stoneskin is now 10 minutes/level, and is now a 5th level druid spell (instead of 4th)
  • Longstrider no longer confuses the AI into believing that you've cast barkskin.
  • Faerie Fire is now a spell, available to druids as a level 1 spell.
  • Dimensional Anchor now targets hostile creatures, not friendlies.
  • The ACR now contains a standard spellbook template, so they may still spawn if an individual module does not have one.
  • Preparing spells now clears the free spell preparation flag, so that players who have rested instead of taking a free spell preparation can still craft items.
  • While Find Traps will continue to automatically reveal OE traps, it will provide a bonus to search and the rogue trapfinding ability for 1 minute/level against ACR traps.

Deity Changes

  • Uthgar blesses druids.

NPC Changes

  • Undead touch attacks now have a negative energy VFX to represent the injury they imply.
  • Mounted appearances now exist for the playable races, and cloaks may carry the appearance of horses. This option is purely esthetic; no functionality exists to mechanically make horses operate yet, and any builder seeking to implement mounted NPCs will have to handle the implications themselves.
  • Pixies are small, not tiny.
  • Creatures who spawn with less-than-full hit points (if, for example, they wear constitution-boosting items) are healed on spawning.

Race Changes

  • Gnomes and gnome subraces receive +2 on craft (alchemy) checks.

Class Changes

  • Frenzied Berzerkers no longer get Inspire Frenzy
  • Barbarian Rage and Frenzied Berzerker Frenzy now disallow Combat Expertise while active
  • The Elf cleric domain provides Treestride and Commune at spell levels 4 and 5, instead of 3 and 4, per its description. It also no longer has Stonetell, which was simply an erroneous entry.

Placeable Changes

  • Placeable lines 11068-11110 now mirror the placeable lines used in Exodus' haks.

 

ACR v1.90 is build using the Advanced Script Compiler version 13. Module maintainers are encouraged to use the latest ASC for module build and script compilation needs.

1.90.1 Release

  • ACR_Candlekeep now has a PRINT_DEBUG command, to provide a list of errors encountered on its background thread and any resources that it identified as part of the module, but could not parse the contents of.
  • The server log contains occasional readouts of the progress of ACR_Candlekeep's resource loading
  • The ACR_VERSION constant is "1.90", as would have been expected with the initial release.
  • If the DM Creator is instructed to spawn an item while a creature is selected, it will spawn one of those items, instead of continuing to spawn until the creature is deselected.
  • Traps have examined descriptions which require no skill check to observe. Once a trap disarm target is in play, that may be examined to see what the trap looks like. Standard traps are generic in this regard, providing hints as to the damage source and area of effect, and builders may specify other descriptions by setting a local string titled ACR_TRAP_DESCRIPTION on the tooled waypoint.
  • Traps indicate whether they are mechanical or spell traps when discovered, in the mouse over text of the disarm target.
  • #sa rs commands no longer break based on the absence of an $OBJECT_TARGET
  • Objects which have different Resource names than template ResRefs will now spawn
  • Previous syntax errors in ServerCommunicator, which caused the synchronization of online servers to fail and flooded SQL logs, are corrected.
  • If the DM Creator is instructed to move back a classification when it is already on the root classification of a tab, it will remain on the root classification instead of disabling the tab. If a tab is ever not associated with any classification, that tab will associate itself with the root classification and provide its contents for navigation from there.
  • Debug outputs that are not appropriate for live modules are disabled for the performance improvement.
  • Creatures whose factions have been deleted now appear in the DM Creator, with a faction of "Unknown" -- these creatures are likely to attack everything if deployed.
  • RPXP ticks come every 6 minutes and 30 seconds. The total XP gain for active roleplaying remains constant, at 15 per real life hour.
  • The IRC Bot provides more information about hotfixes when they are applied.
  • When XP rewards are calculated with diminishing returns, those results are rounded, not truncated.
  • When crafting an item worth a quantity of gold that is not even or is not divisible by 25, the extra point of XP or gold coin is charged for the project. Notably, this means that cantrips are no longer free.

Deities (test)

Deities of ALFAs realm
Different Pantheons

  • Major Deities
  • Other Deities
  • Drow Pantheon
  • Dwarven Pantheon
  • Elven Pantheon
  • Gnomish Pantheon
  • Halfling Pantheon
  • Mulhorandi Pantheon
  • Orcish Pantheon

 

Major Deitys

 

Deity Alignment Favoured Weapon Domains
Azuth LN Quarterstaff Knowledge, Law, Magic

 

 

Faerun - a land where the gods live.  Deities walk amongst their flock; Clerics control powerful magics at the will of their masters; Warriors wage wars across the lands in the name of the gods; Evil creeps throughout Faerun in service to dark lords.  It is not easy to avoid the machinations of the deities and their followers when you walk the surface of Faerun, let alone when you have departed.  No matter who you are, what walk of life you are from, or what your beliefs are, the gods will affect your adventures in some way.
 
 The deities of Toril take an active interest in their world, channeling power through their clerics, druids, rangers, paladins and other worshippers, and sometimes intervening directly in the affairs of mortals.  At the same time they plot, war, intrigue and ally amongst themselves, with powerful mortals and extra planar beings such as elemental rulers and demons.  In this they resemble their mortal worshippers, for to an extent, deities are defined and shaped by their worshippers, their areas of interest and their divine spark.  Because they lose strength if their worship dwindles away and is forgotten, deities task their clerics, and others to whom they grant divine spells, with spreading their praise and doctrine, recruiting new worshippers and keeping the faith alive. 
Patron Deities:
 
The deities of Faerun are deeply entangled in the functioning lives of mortals.  Characters of Toril nearly always have a patron deity.  Everyone in Faerun knows, those who die without having a patron deity to send a servant to collect them at their death, spend eternity writhing in the Wall of the Faithless or disappearing into the hells of the devils or the infernos of the demons.
 
 Having a patron deity implies some true personal attachment to that deity.  Given this relationship, it is practically unheard of for a character to have a patron with a radically different alignment than her own.  When choosing a Patron, if you are a divine spell caster, you must follow the 'one-step' rule (unless noted otherwise) - that is, your alignment must be within one step of your patron's.
 
Using the alignment chart below, find your deities alignment, then your options are one step up, down or to the side.  
LG NG CG
LN TN CN
LE NE CE

LG NG CG LN TN CN LE NE CE

 If the alignment is true neutral, your options would form a cross. If your deities alignment is LN, the cross does not carry over to the other side, leaving LG, TN, and LE as your only options.
 
 You can only have on patron deity at a time.  It is possible to change patrons, but doing so is not a decision made lightly or quickly.  If you are a cleric, druid, paladin, or spell casting ranger, this process is more difficult and requires the help of your new church.  If you are any other character class, changing a patron is a simple matter of deciding to do so, that does not require intervention by the church of your new patron (although obtaining its blessing is customary, to show allegiance to the new deity).  A character who frequently changes patron deities is likely to gain a reputation of being weak in her faith, and risks being branded as one of the false in the afterlife. 
Domains:
 
A complete list of NWN2 workable domains can be found here.
 
Nature Deities:
 
 As mentioned in Chapter 2, on classes, divine spell casters receive their spells from the deities.  While paladins follow a lawful good line and clerics follow the line of their chosen patron, druids must serve a nature deity in order to be granted spells.  The following are a list of deities that can grant druids spells - if there is another deity you have in mind, contact your HDM about it.  Some, of course, may not be able to be taken with the NWN2 engine (given its current limitations), but this will hopefully soon be corrected.  Details on these gods can be found in the following section.  Note that in ALFA, Rangers do not need to follow a Nature diety in order to gain spells.
Aerdrie Faenya, Angharradh, Anhur, Auril, Baervan Wildwanderer, Chauntea, Deep Sashelas, Eldath, Gwaeron Windstrom, Isis, Lurue, Malar, Mielikki, Nobanion, Osiris, Rillifane Rallathil, Sebek, Segojan Earthcaller, Set, Sheela Peryroyl, Shiallia, Silvanus, Solonor Thelandira, Talona, Talos, Thard Harr, Ubtao, Ulutiu and Umberlee. 
Gods of Faerun
 
 Instead of typing out an entry for each of the hundred and one gods, there are plenty of good sources on the web already, including the one below. Note: there are a few references to events that have not yet occoured, as the year in ALFA is still 1376. If you see mention of a Spell Plague or to the Upheavel era, these are not included in ALFA Lore.  If you have any questions, feel free to ask in our Realm's Lore forum.
 
Forgotten Realms Wiki : Deity Portal 
Death, Dying and Deities
 
 When mortals die their souls are drawn to the Fugue Plane.  Most of this place is flat, gray, bland, and no notable topographical features.  The spirits of the dead gather here, usually unaware that they have died.  From time to time (anywhere from once a day to over a tenday, depending on the deity involved), the powers send representatives - usually outsiders of the appropriate alignment - to the Fugue Plane to gather the souls of their own worshippers.
While most souls wander the Fugue Plane until their deity calls them, the Faithless and the False are compelled to enter the city of Judgment and be judged by Kelemvor.  The Faithless firmly denied any faith or only gave lip service to gods for most of their lives without truly believing.  The False intentionally betrayed a faith they believed in and to which they had made a personal commitment.
 
 All Faithless receive the same punishment: They form a living wall around the City of Judgment, held together by a super-natural greenish mould.  This mould prevents them from escaping the wall and eventually breaks down their substance until the soul and its consciousness are dissolved.
 
The False are punished according to their crimes in life and serve their sentence in the City of Judgment for eternity. 
 
 Nearly all of the beings in the city are members of the False, the rest being deceased followers of Jergal and Kelemvor who enact the will of their deities upon the doomed souls.  Depending upon the severity of their crimes, some of the False may receive relatively light punishment, such as escorting visiting baatezu or patrolling the city for unauthorized guests.  Others are punished in ways that would surprise the cruelest of demons.
 
 For an Adventurer (and anyone else) been labeled as a False or Faithless has further consequences - it becomes near impossible to be raised from the dead.  Any attempts made through the Resurrection or Raise Dead spells fail.  Short of a Miracle or Wish, attempting to raise a False or Faithless from the dead is futile

Technical Glossary: Constant

A constant is an identifier which has a value that can not change at runtime.

This can certainly be directed toward many purposes, but the overwhelming majority of use of constants is to provide a human-readable name for something that needs to be stored and referenced as a number. This makes it easier to talk about, reference, and write with these structures. When such is used by scripters or developers, these numbers are typically written out all together with a clear human-readable name, and then assigning it the value that the underlying data structure understands. It is then used like a variable (e.g. writing code with SKILL_PARRY instead of 10), and is then automatically compiled as its cheaper/smaller integer form.

This is typically made necessary by features which are designed to be expanded or configured, or by cases where storage/retrieval is faster or more efficient if the data is stored and handled as numbers, and only translated to human-readable output when displaying for human consumption. Examples of things that are actually integers would be skills, feats, spells, cleric domains, visual effects, or character classes. Examples of things that are not referenced by constants would be items (not item properties or base item types-- the items themselves), areas, or waypoints.

When used by builders, it often becomes necessary to learn a constant's value, due to things like the conversation editor not accepting constants by their names. These are typically stored in include files, such as nwscript.nss (which is present in every module, and contains constants defined by OE), acr_i.nss (which contains many constants which are specific to the ACR), or dmfi_inc_const.nss (which contains many constants which are specific to dmfi tools). You can read the lines of these files to learn what to place into a script that expects one of these constants. For instance, line 148 of acr_i contains this line:

const int SKILL_DECIPHER_SCRIPT = 32;

This tells you that, if you needed to refer to decipher script in a place that only accepts a number, that number would be 32.

ACR Quest Tutorial: Turnins

A quest turnin is the last part of a quest. It provides rewards for the completion of the quest and sets the quest to its finished state.

Quest Turnins in Conversations

This is the most common kind of turnin, as it is usually the most convenient. We usually expect to pay characters at the end of quests, and a quest turnin from an NPC is a very convenient way to do so.

The conversation tree will be a lot like the quest hook. You need a PC option to mention that work has been done, and a conversation line down that tree.

On the player bringing up the topic of work, you're going to have a conditional-- it will be just like the other ones checking for quest progress, but this time, we want to have nState be the one we set at the end of the challenge. We're also going to want to have a new journal entry, just like the ones we set up for the others. Our action script, which will be on the NPC's response to the character indicating that the job is done, will be the special one, because now we need to give out gold and XP.

So instead of acr_quest_update, we're going to use acr_quest_reward. This script does a few things:
-- It gives nGold to any character being rewarded
-- It gives the amount of XP specified in the journal classification to the character being rewarded
-- It takes away any quest item that was managed through the ACR
-- It logs that the quest was completed and the amount of XP earned
-- It updates the player's journal to read as nState is one point higher (so if the last challenge put nState at 2, this will make nState into 3)

Additionally you'll want that last journal entry to be called the endpoint of its journal category

This doesn't actually drive anything mechanical-- using acr_quest_reward is what tells the ACR that the quest is done, so that experience and rewards can be given out and our logs can say that it's complete. What it does is determine where in the PC's journal this item will appear once this state is achieved. Namely, it will start to appear on the "Completed" tab instead of the "Quests" tab. It's usually a friendly gesture to keep that particular thing up to date; it's much easier for a player to forget the errata of a video game than it is for a character to forget how they'll be paying for their food and shelter later, after all.

Checking for Items

It might also be necessary to check if a given character owns an item when turning in a quest. If the character was told to carry a message to someone, and then arrived without the message, we shouldn't pretend that everything is fine and reward them, right? But this is slightly more complex-- because what if the character killed someone with a message and stole it. They're not working for anyone here, so they'd probably have a hard time collecting payment. This means that we need to have a conversation line with two conditional scripts on it: one to look for the item and one to look for the quest.

acr_quest_progress should look familiar. It's the same conditional we're using above. We're adding a new script to this in similar pattern-- again, you'll want to click Add over the conditions and then type the script name into the script column and refresh. acr_cs_has_item takes two parameters, sTag, which is the item's tag, and sQuest, which is the quest that the item is for. You should leave sQuest blank if the item isn't dropped using the ACR Quest System, though, as it will only regard an item dropped by the quest system for the PC on the quest as valid if it's told to look for an item by the quest name.

Also notice that there's the "And" button to the left of the next line, once we've added a second one. We want it to be an "and" in this case, but if this quest could feasibly be completed by someone who found this item or by someone who was hired to work, then you could click that button and it would accept both.

The rest of the turnin follows as above in this case.

Quest Turnins on Triggers

TODO: Describe how to turn in a quest on a trigger.

Quest Turnins on Placeables

TODO: Describe how to turn in a quest on a placeable

 

Completed Quests as Prerequisites

One thing to note about the state of a quest after you've gotten this far-- that combination of sQuest and nState doesn't go away. Once this quest is completed, you can reference that nState anywhere you need to. Does a merchant have a special store available because a PC has completed a long and complex quest arc? You can do that-- make two merchants, and two branches of conversation available. Put NPC responses under conditionals, just like you did in the Hook section, but this time we want nState to be or whatever the finished journal number is, instead of 0. Do you want a few quests to be done in order? Also doable-- just check for two conditionals:

In this example, this conversation option is only available of sample_quest_0 is nState of 3 (which is finished, if you've been following our especially-simplistic example) and sample_quest_1 isn't started. We could put the rest of our hook down this conversation line and thus have the two operate as a chain, and you could do it again with this quest once it's done (and so on).

Finalizing the Quest

Once you're done, don't forget that there's an XP field in the quest journal. You'll want to run your quest yourself to see how long it takes and how much it should reward. At the time of this writing, the standard was to award 25 xp per CR, assuming that the static takes about an hour-- but use your good judgment. If it feels like it's rewarding too much like that, it's usually safer to reward low than high: a quest that rewards too low doesn't get done as often as we like, but a quest that rewards too high disrupts play for the server. Once you have a value, it goes into the journal category, where you should have put a low number as a placeholder during your hook writing.

Main Page -- Hook -- Challenge -- Turnin

ACR Quest Tutorial: Challenges

When determining the challenge portion of an ACR quest, the thing to keep foremost in one's mind is how you're going to advance the state of the quest. This page assumes that you've already set up a quest Hook that initializes the quest. The challenge portion of a quest is also the easiest to combine or repeat-- by simply adding more states that the quest must pass through before it's considered completed.

Conversation Challenges

When writing a challenge that operates through a conversation, we will again be creating a conversation tree-- we'll need a conversation option somewhere for the player to bring up the quest they're on, and some responses to indicate what the player needs to do next.

Like with the hook, we'll need to have a conditional statement to check if the conversation option should exist, but this time it will go on the player's broaching of the topic ("Hello! I have gotten going" in the example above). Just as before, click on the node, then the condition. Again, you'll want to use acr_quest_progress, and the same sQuest, but this time we don't want nState to be 0 (because 0 means that the quest isn't started) -- now we want it to be 1. That tells us that the character is on the quest-- moreover, it tells us that the player is on this step of the quest.

Once that is done, we move on to the NPC's response (in this case, "So I see! You should go back to...") -- we want to update the quest state so that we know the PC has spoken to the target of the quest, so we'll be on the actions tab. But because we're not starting a quest this time, we'll be using acr_quest_update. In this case, we're just advancing the quest-- so we want the same sQuest we've been using, but we want to set nState to a whole new number: in this case, 2. bAllPartyMembers is, as always, the question of whether or not doing this should advance the quest for everyone.

Now, we accomplish a few things when we do this.
1. Remember the quest giver? He wants nState to be 0 to give the quest, so he won't restart the quest, or offer to, when the player goes back.
2. Remember the conditional we set up on this conversation? It wants nState to be 1, so we can't repeat this step of the quest.
3. nState being 2 is a unique number, so we can use it to configure our turnin later.

After you've done that, open the journal and add an entry to this quest's category, number it 2, and give it a description that explains what they would believe they need to do next.

So with that done, it's time to test. Start up a server and try it out. Make sure that you don't get quest conversation points when you don't have the quest, but that you do if you've taken the quest and can't repeat the step.

 

Of course, this doesn't sound very challenging-- the first thing to point out is that this person probably isn't going to be standing next to the quest giver; he might be far away, hard to find, in a dangerous locale, or all three. But if that's not enough, we can also set up another level of difficulty here. First, we'll need to expand our conversation tree to allow us to have other checks happening-- and maybe let the character pick how they solve whatever problem it is.

In this example, moving nState 1 to 2 requires some avenue to convince the quest giver that progress is acceptable. We'll leave the scripts on "Hello! I have gotten going" from the previous example, so that we know that we're only dealing with people who are on the quest, and then we need to concern ourselves with the skill checks. So, let's take the first option-- a Perform (Dance) check. We leave the player option there without any scripts. Anyone can try to dance. You only need training to be good at it.

So we have two NPC responses to the attempted dance, the same way that we did when we were asking the hook NPC for work. On the first response ("All right, you win" in the example), we're going to set our skill check:

We're using acr_cs_skcheck, which will roll nSkill against nDC. nSkill is a constant, and simply needs to be looked up, while nDC is the minimum roll that 1d20 + skill modifier must be to pass the check.

Once this is done, we can place the action on the player response ("Yay" in the example above) that we had on the simpler quest setup, to set nState to 2.

Now we're stuck with the question of what to do if the check fails. It's very easy for a player to just mash buttons through conversations until they pass a skill check, so it's usually wise to provide some sort of failure state in these sorts of quests. Add an action to the player's response to the failure conversation ("You suck!") that sets nState to something else-- it can be any number, as long as it's unique-- and write a journal entry that describes the failure (and, if you like, you can provide some challenge-type interaction that looks for the quest's failure state and resets it-- such as bringing this NPC flowers and an apology; such would follow the same pattern as here).

 

Now, the other three checks would follow very similar patterns-- but let's have a look at that second one. Tumble requires training. Most characters would know that they can't impress anyone with tumble. Of course, the players probably know that too, but if we're nice builders, we'll just never show non-tumbling characters the option to tumble their way to victory. It's a little mean, after all; they're promised to fail if they try.

So what we'll do is put a conditional on the tumble option-- just like before, but we'll be using gc_skill_rank as our conditional. Now, the prefix ("gc_") tells you that this script is only meant for Obsidian resources, so we wouldn't be able to use this on Perform(Dance) like we did with the acr script, abut it's perfectly functional for checking if a player has ranks in tumble. So, we'll pick the script and refresh, as before, but because this is an Obsidian script, we're going to want to read the comment lines on the script (that is the green text that appears in the box when you have the row highlighted). It tells us that:

int nSkill = skill int to check
int nRank = minimum rank to return TRUE

But notice that right below that, it tells us what integers refer to which skills for this script. So tumble is 26 here, even though tumble's constant is 21. Quirks like this are why it's important to read those comment lines on any new script-- most people who write them are trying to help you by writing them.

So we'll set nSkill to 26, and nRank to 1. This way, the tumble check will never be an option for a character who can't tumble.

There are a number of scripts that you can use in this way, and the comment lines will generally tell you how (and the names will give you hints). You can click the down arrow beside the entry field for a script to pull up a searchable list-- for conditional scripts, scripts starting with "acr_cs_" and "gc_" are valid for use. The acr_cs_ scripts are those that ALFA has assembled for itself, and are usually the best place to look for anything that is specific to us (such as checking a player's progress on a quest), while the gc_ scripts cover a number of universal concepts that wouldn't need any special handling (such as gc_is_female, which is exactly what it sounds like)

 

Trigger Challenges

Perhaps this quest isn't meant to be completed through a conversation or an interaction with an NPC. It is possible that the challenge is in arriving at some destination, retrieving some item, or slaying some sort of threat. Generally speaking, these sorts of quests are completed with triggers. The first step is going to be setting a new trigger. In the triggers tab of your blueprints panel, find the Quest OnEnter trigger template, and draw it on the ground where you wish the quest to be completed. As with the placement of any trigger, each click will add a new corner to the trigger, and as the basic rules of geometry declare, you need at least three corners to make a shape with straight sides (and circular triggers can't be drawn; there are only polygons with many sides).

Looks 'bout right

Now select the trigger you just placed (the "Select Objects" button on your toolbar will allow you to select objects, instead of painting more corners on your trigger). View the properties of the trigger and find the "Scripts" subsection of the trigger's properties.

You'll first want to verify that the acf_trg_ series of scripts are in use on the trigger, and that the name of each script matches up with the event that it is placed on. acf_trg_onenter in the On Enter Script field, for example. Once that is set, click into the "Variables" field and then click on the "..." button on the right side of the field. This will open the variable editing window. At this point, we branch slightly based on what we want this trigger to do:

For All Quest Triggers

Identify the Quest: First, every quest needs to be identified by its tag, which you defined originally when you created the hook for this quest. This is set on ACR_QST_NAME as a string, like this:

Identify the Prerequisite State: Every quest needs to know what you expect nState to be when a player on this quest enters the trigger. By default, this is set to 1, assuming that nState was set to 1 in the initial conversation. However, if you have a more complex quest (Bob says to talk to Harry, who tells you to check on the tree at the top of the hill and come back to him), you might need to change this. The value is stored in ACR_QST_LOWER_STATE, and is an integer (and so may be set in the ValueInt field, like this:)

Identify if This Finishes the Quest: Every quest also needs to know if visiting this trigger provides the reward for the quest. This is set in ACR_QST_UPPER_STATE. If you don't want the trigger to reward experience (if, for example, the rewards will be present when the PC returns to the quest giver), this should be set to 0. If you do wish to reward XP, this should be set to one higher than ACR_QST_LOWER_STATE. It is also an integer, and editing it looks exactly as ACR_QST_LOWER_STATE.

For Scouting Quest Triggers

That's it. You've written this challenge. When a PC visits your trigger and nState is ACR_QST_LOWER_STATE, they will get a journal entry and an nState of one higher. So if ACR_QST_LOWER_STATE was 1, they leave with 2, and you may check for that at the turnin.

For Combat Quest Triggers

You'll need to tool a creature for the PC to fight. Once this is done, you'll set two variables: ACR_QST_SPAWN_CRESREF is set to the resource name of the creature you wish to spawn. Important: Resource Names and Blueprint ResRefs are not necessarily the same. To prevent confusion, you should tool your creatures to always have the same ResRef as Resource Name.

Next, you will set the value of ACR_QST_SPAWN_WAYPOINT to be the unique tag of a waypoint at which your creature will spawn. Usually, this is near or inside of the trigger that is being tooled. Because this needs to be unique, you should pick a tag that is unlikely to be used by anyone else in the future-- usually appending "_spn##" to the quest's tag is a reliable way to ensure as much. In this case, it would be "sample_quest_0_spn01"

With that done, your quest is ready. As with a scouting quest, nState will be 1 higher than ACR_QST_LOWER_STATE, once the creature is killed. For example, if ACR_QST_LOWER_STATE is 1, you should check for nState to be 2 at the next step of the quest.

For Retrieval Quest Triggers

If your quest is a retrieval, you have two more variables to set and one more thing to place. First, you will need to pick a unique tag for a container for your retrieved thing. You don't need to style it like a box or a bag-- it can, for instance, be a hollow tree trunk or a shallow hole, but you'll be tooling it like one. Because this needs to be unique, you should pick a tag that is unlikely to be used by anyone else in the future-- usually, appending "_cntr##" to the quest's tag is a reliable way to ensure as much. In this case, it would be "sample_quest_0_cntr01"

First, create a new string named "ACR_QST_CONTAINER_TAG" and set its value to your unique container tag.

Next, we will want to pick what sort of item will appear in this box. Tool a new item with a new resource name and flavor text to represent the object being retrieved-- and be sure to consider if the item itself is to be part of the challenge (it might apply penalties to the PC, or might be especially heavy, for example). Then create a new variable named "ACR_QST_SPAWN_IRESREF" which has the same value as the item's Resource Name. Important: Resource Names and Blueprint ResRefs are not necessarily the same. To prevent confusion, you should tool your items to always have the same ResRef as Resource Name.

Finally, we need to place a container which has the tag we set in ACR_QST_CONTAINER. Place a placeable in the area (usually near or in the trigger) and ensure five features:

1. The container has no scripts on it
2. The container is set to plot
3. The container has an inventory
4. The container's tag is the one you specified before.
5. The container is empty

As with scouting quests, the item will appear in the chest only if a character whose nState is at ACR_QST_LOWER_STATE enters the trigger, and nState will advance to the next number once they pick up the item (so a 1 becomes a 2, for example), which can be checked later to drive further challenges or a turning.

Placeable Challenges

TODO: Describe how to set up a placeable-based quest challenge

#39;ll need to expand our conversation tree to allow us to have other checks happening-- and maybe let the character pick how they solve whatever problem it is.

Main Page -- Hook -- Challenge -- Turnin

Syndicate content