QUESTCORE MANUAL ---------------- October 19, 2018 Jon S. ABOUT QUESTCORE --------------- QuestCore is a MOO database designed to facilitate the creation of game environments which very closely mimic those of traditional MUD servers, such as Diku and ROM. This core database was derived from another, RPGCore. Released in the early 2000's, RPGCore was quite possibly the first coherent game database for MOO servers, featuring weapons, armor, AI monsters and NPCs, and healing items. All of this has been retained in QuestCore, including the combat and statistics system. Several features unique to QuestCore include: ANSI Color Intergration: DarkOwl's ANSI Color Script was included as part of RPGCore, and it has been preserved in QuestCore, but it is automatically turned on for all players (as very few clients will not support it). Colors are featured everywhere in the game; much of it has been built into the code of verbs, such as $rpg_room:look_self, $player:inv, and $rpgamer:@stats, to name a few. New Character Generator: Character Generator ($chargen) is still present in QuestCore, but a different, unrelated one has been created in QuestCore. Unlike $chargen, the QuestCore character generator ($local_chargen) may be altered directly and easily by a programmer to add or modify races and classes. Unique Races & Classes: Races existed in RPGCore, but not classes. QuestCore includes four classes: Warrior, Blue Mage, Red Mage, and Alchemist, each with their specific abilities. Unique Advancement System: An entirely new advancement system has been created in QuestCore, similar to the systems found in traditional RPG MUDs. Player levels 1 through 50 are supported, and are attained by gathering experience points. Each level gives the player Advancement Points, which are used to advance one of the five original RPGCore statistics (Strength, Dexterity, Intelligence, Health, Combat). In addition to this, the original system of slowly accumulating statistics and "free points" (called "Bonus Points" in QuestCore) has been preserved. Improved Combat System: The combat interface has been modified so that players cannot attack Builders, Programmers or Wizards. (They can, however, cast spells on them.) The somewhat dysfunctional 'kill' command has been removed, so that each attack will require an 'attack', or 'a' command. This was changed to prevent errors such as monsters dying several times based on how many queued attacks were in the room. When an enemy is killed, its value in experience points (stored in its .exp property) is automatically applied, all carried items are immediately dropped, and, if the enemy is a monster, any gold it is carrying is immediately transferred to the person who killed it. In a sense, this defeats the 'search' command when used on an enemy. Additionally, QuestCore includes damage displays when it is inflicted or taken. PKILL System: QuestCore features the most common PKILL system. By default, a player has PKILL set to 'off' (that is, 0 in the player.pkill property). It can only be turned on once, which will allow the player to attack and be attacked by other players, and it cannot be turned off by the player. A dead or @reset player has their PKILL option reset to 'off' upon death or player reset. Magic Spells: All players may cast powerful magic spells from items, or innately as a Blue Mage or Red Mage. The included spells are listed and described in 'help spells' within the game. The generics for the items themselves may be found in $magic_item_warehouse. Optional Information Bar: An especially nice feature is the infobar, which gives a player's level, experience, health and gold at a glance each time a command is entered. It is turned on for all players by default, and can be disabled and re-enabled by individual players with the '@infobar ' command, which works as the '@pkill' command; a player's .infobar property is binary (0 or 1). Optional Minimap: A player may see a small compass showing available exits when entering rooms, or manually with the 'compass', or 'm' command. As with the infobar, it may be turned on or off in the same manner with the @map command, but this feature is turned off by default. NOTE: QuestCore was not developed or endorsed by the creators of RPGCore. Having listed these features, it is now necessary to explain them in greater detail. This document assumes some knowledge of MOO administration and coding. The information given here will prove helpful to anyone running the QuestCore database. CHARACTER GENERATOR, RACES & CLASSES ------------------------------------ A single, built-in character generator is invoked when a new character is created (see the final lines of $login:create) or when a player uses '@reset' to start a new character, erasing the previous. The newly created account is moved directly to $local_chargen as opposed to $player_start to ensure that all new players have configured their race and class before entering the actual game. After gender, race and class have been decided, the player is shown a their abilities, Advancement Points, and a few lines explaining their selected class, then they are moved to $player_start. NOTE: New players and @reset players always begin with 32 gold. This can be adjusted in $login:create and $rpgamer:@reset. The QuestCore Character Generator is a simply a room which calls verbs on itself in a specific order as soon as it is entered. This is an interactive process in which the player is asked to type a gender, male or female; then the player is shown a table of races and their statistic modifiers, and must choose one of these races; finally, the player is shown the table of classes and a brief description of each, and must choose one. The first prompt initiates a 'force_input()' called to the player with '@gender male' or '@gender female'. This a bit simpler than setting all the individual pronouns. The base values for all beginning stats is 10.0. The information displayed at the second prompt shows how each stat will be modified depending upon selected race, stored in the player's .race property. Players then choose a class by the same manner. A player's class, with the exception of Warrior, has no effect on their starting statistics, but will determine what the player cannot do in the game, such as casting innate spells or alchemizing weapons and armor. This selection is stored in the player's .class property. If you are adding or modifying classes, the verbs on $local_chargen should be modified accordingly. For the two types of Mages, the '$' verb on $rpgamer must be updated whenever a spell is added or removed from the game. The verb $rpgamer:alchemize is the one to modify for the Alchemist. Programmers: The code for the QuestCore character generator begins with $local_chargen:enterfunc and ends with $local_chargen:description. These are the above-mentioned tables as taken from the database. They can be viewed in 'help races' and 'help classes'. TABLE OF RACES -------------- Starting Statistic Adjustments Race STR DEX INT HEA Human... | n/a n/a n/a n/a* Elf..... | -1.0 +2.0 n/a -1.0 Gnome... | -2.0 +3.0 +1.0 -1.0 Dwarf... | +2.0 -1.5 n/a +1.0 Orc..... | +3.0 n/a -3.0 +1.0 Sprite.. | -3.0 +5.0 +1.0 -2.0 * Humans begin with 2 more Starting Points than the other races, which begin with 3. TABLE OF CLASSES ---------------- Class | Description Warrior..... | Begins with 3.0 Combat Blue Mage... | Can cast: Knowledge, Heal, Enchantment, Sleep, Power, Speed, Escape, Pacifism Red Mage.... | Can cast: Knowledge, Enchantment, Sleep, Fear, Power, Speed, Magic Missile, Death Alchemist... | Can convert items to gold or bonus points STATISTICS ---------- The five statistics in QuestCore are Strength, Dexterity, Intelligence, Health, and Combat. These are always maintained as floating-points and not integers, as the game very slowly increases a player's statistics as they play. Strength (STR) affects a player's melee combat damage. Dexterity (DEX) affects a player's accuracy and ability to dodge attacks. Intelligence (INT) affects a player's ability to cast magic spells, both from items and innately. Health (HEA) is the equivalent to Hit Points; the amount of life a player has. Combat (COM) affects a player's overall combat ability, such as initiative, accuracy and dodging. LEVELS & ADVANCEMENT -------------------- From 'help levels': TABLE OF LEVELS --------------- Level Exp. Level Exp. Level Exp. Level Exp. ---------------+---------------+-----------------+---------------+ 1 0 | 16 25,500 | 31 105,700 | 46 240,200 | 2 100 | 17 29,900 | 32 112,200 | 47 254,200 | 3 300 | 18 34,800 | 33 118,900 | 48 269,700 | 4 700 | 19 40,000 | 34 125,900 | 49 286,700 | 5 1,300 | 20 45,600 | 35 133,200 | 50 307,700 | 6 2,100 | 21 50,100 | 36 140,800 +---------------+ 7 3,100 | 22 55,100 | 37 148,700 ^Gain 8 Points 8 4,300 | 23 60,400 | 38 157,000 9 5,900 | 24 66,000 | 39 165,500 10 7,700 | 25 71,900 | 40 174,500 11 9,900 | 26 77,100 | 41 183,900 12 12,400 | 27 82,500 | 42 193,700 13 15,100 | 28 88,100 | 43 204,200 14 18,200 | 29 93,700 | 44 215,200 15 21,600 | 30 99,500 | 45 227,200 ---------------+---------------+---------------------------------- Gain 2 Points|^ Gain 4 Points|^ Gain 6 Points Each time you gain a level, you will be given 2, 4, 6, or 8 Advancement Points (see above table) to be used with @advance. Advancement Points stay with you until they are spent. You will see a red exclamation point [!] next your level in your information bar when you have one or more Advancement Points available to you. You can also check this in @advance, @stats and @info. [end of 'help levels'] A player gains experience by killing enemies. The amount of experience a player receives is stored as an integer in the enemy's .exp property. This should be set separately for each type of $monster you @create. For emphasis, this must be an integer and cannot contain a decimal point. The level information is stored on $server_options.level_info in the form of a list. Each element is also a list; the first value is the level number, the second is the experience points required to reach the next level, and the third value is the number of Advancement Points a player will receive upon reaching that level; these are all integer values. MAGIC ----- Spells may be cast from items by any player, or innately by the Blue and Red Mages. The generic items may be found in $magic_item_warehouse. Innate spells are cast by Mages using the $ command, e.g. $heal me ; $enchant greataxe ; $sleep goblin , in contrast to the usage for items, cast on , e.g. cast book on me ; cast scroll of death on goblin ; cast scroll of escape . At the end of character generation, a Blue or Red Mage is encouraged to read 'help magic', 'help spells', and 'help casting', which contains all necessary information. Spell Name INT Description ---------- ---- ------------------------------------------------------ Knowledge 11.0 Learn detailed information about target enemy or item* Healing 11.0 Target gains up to 10.0 health Enchantment 11.0 Add permanent +1.0 to weapon or armor Sleep 11.0 Target becomes unconscious for 45 seconds Escape 12.0 Teleport to your home+ Fear 12.0 Target flees in random direction* Power 13.0 Target gains +4 Strength for 3 minutes Speed 13.0 Target gains +4 Dexterity for 3 minutes Pacifism 14.0 Target's combat skill reduced to 0 for 2 minutes* Magic Missile 14.0 Deal 50 damage to one target instantly Death 16.0 Kill target instantly* * Cannot be cast on a player. + Can only be cast on oneself; i.e. no target is required. For Mages, the respective commands for innate casting of these spells are: $know, $heal, $enchant, $sleep, $escape, $fear, $power, $speed, $pacify, $missile, $death PLAYER COMMANDS --------------- Basic player commands in QuestCore include: GENERAL - look, examine, compass, @map, remember, @remembered, know, @knowledge, @forget, help CHARACTER - @stats, @kills, @info, @pkill, @advance, @sethome, @infobar, @reset SOCIAL - say, emote, whisper INVENTORY - inv, gold, take, drop, wield, wear COMBAT - attack (or simply ('a'), @enemies Each will be explained below; any shortcut for a command will appear in square brackets. The "object" is the text typed after the command. General Commands ---------------- look [l] - By itself, player looks in the room. With an object, player looks at that object. examine [exam] - A more detailed version of 'look', which will also list verbs for the object. compass [m] - Provides a visual representation of exits in the current room; an alternative to the automatic compass displayed with '@minimap on'. @map - Enables or disables the minimap display showing in a room when entered or looked in. remember as - Adds to player's remembered names (which are not automatically known.) @remembered - Displays a list of people remembered by their names. know [journal] - Writes text to a personal journal (.knowledge property) on the player. (Players can '@edit me.knowledge') know - Prompts the user for what is to be remembered. Useful for larger entries. know - Adds a single line to the journal. @knowledge - Displays the full contents of a personal journal, including information from Knowledge spells. @forget - Clear the personal journal. help - Displays help on any given command or topic. Character Commands ------------------ @stats - Shows a player all stastical information of their character. Note: Cannot be used view the same information of another player. @kills - Displays the number of enemies a player has killed. @info - Similar to '@stats', but displays the information which would also be shown in the infobar in a more compact format. @pkill - Sets player's PKILL option to 'on' (player.pkill = 1); player cannot '@pkill off'. @advance - Advances a statistic by one full point if used with ; shows unused Advancement Points (player.adv_points) if omitted. @sethome - Sets the location as the player's home if possible (here.free_home = 1). @infobar - Turns the player's information bar on and off. @reset - Allows a player to reset their character and return to the Character Generator. Items are dropped and money is lost. Social Verbs - These are all the same as LambdaCore, from which RPGCore is derived. However, the RPGCore 'language' mechanism is not used in QuestCore. say or " emote or : whisper to Inventory Commands ------------------ inv [i] - Shows a player their inventory. gold - Displays the amount of gold carried. take [t] - Take an object. drop [dr] - Drop an object. wield - Equip a weapon. wear/hold - Equip armor or shield. Combat Commands --------------- attack [a] - Executes a single attack on enemy immediately. One attack must be completed before the command can be used again. @enemies [@en] - Displays all monsters with their object numbers in the room, or nothing if there are none. BUILDER COMMANDS ---------------- In addition to the LambdaCore verbs: @botlock - Bots can/cannot exist in or enter the room. (here.bot_locked) @retail - The room is or is not a place with a $sales_bot. (here.retail) @dark - Sets the room's .dark property to 1 or 0; i.e. the description and contents of the room are not shown until it is illuminated. @sanc - Any attacks in sanctuaries are automatically punished, and monsters cannot attack in them. PROGRAMMER COMMANDS ------------------- @setk - Sets the .learn property of manually, the information which is revealed through a Knowledge spell. (This may be set automatically by wizards using '@kgen after all relevant properties on the object are set. Read the Note carried by Wizard (#2).) @seek - Displays the .knowledge information of . @scr - Generates a script for easy reference from . Object must be from $weapon, $clothing or $monster. These are of the same format seen in the Script Example Note in Wizard's inventory. & - force_input() an @dig command with exit names and aliases properly set for the exit to and back from . A very helpful tool for building rooms. % - Creates a child of , which must be a $monster, sets its home to the user's current location, and moves it to the current location using force_input(). The & and % commands are intended as shortcuts and are not necessarily required. Examples Of & Interface: &n Cabin - Equivalent to: @dig "North [n],north,n|South [s],south,s" to Cabin &w Cottage - Equivalent to: @dig "West [w],west,w|East [e],east,e" to Cottage &d Basement - Equivalent to: @dig "Down [d],down,d|Up [u],up,u" to Basement The following directions may be used: north, south, east, west, northeast, northwest, southeast, southwest, up, down And these may of course be written as: n, s, e, w, ne, nw, se, sw, u, d Important Note On Building Rooms -------------------------------- It is recommended that if you choose not to build with the & command, you should be sure that the final entry in .aliases for all exits you create is either the one-letter or two-letter name of the direction, e.g. s, d, ne etc. The minimap feature relies on this, and will fail to notice the exit altogether. Examples Of % Interface: %goblin - Equivalent to: @create $goblin named Goblin, @set goblin.home to , @move goblin to here %feral_elf - Same as above, but will actually name the new monster 'Feral_elf'. Anything generic with a space in its name will need to be @renamed manually for now. WIZARD COMMANDS --------------- @kgen - Generates, displays and sets .learn to the correct information for as apporpriate for a Knowledge spell. Target must be a $weapon, $clothing or $monster. SEE ALSO -------- Be sure to read the Script Examples Note in your hand when you first login to QuestCore, as it provides the information necessary to create new weapons, armor and monsters which function correctly within the core. Use the game's 'help' system for more information about any topic or command. APPENIX ------- * The .money and .startmoney properties must be set on any new $monster, or killing it will cause a traceback. The .money and .startmoney properties take the following format: {{"gold", 2.5}} The property is a list within a list, and its numeric value (at [1][2]) must be a floating-point number and not an integer. * The code for the compass (or map) and the infobar are on $rpgamer:map and $rpgamer:infobar respectively. Not to be confuse with @map and @infobar, which only turns the option on and off for the player who typed it. * The player:infobar() verb is written into #0:do_command, $rpgamer:take_hit, $rpg_room:look_self, and a few other places. Because it is part of $do_command, extra special care must be taken when modifying (or removing) the infobar from the game. It would be more easily accomplished using @set $player_class.infobar to 0, then @rmverb $player:@infobar. * $special_warehouse contains the generics Healing Orb and Cursed Artifact, which are re-usable and can be locked to a location. ------------------------------ QuestCore is a derivative work of RPGCore, which is in the public domain, and is therefore itself in the public domain. It may be freely copied, modified and distributed by anyone. Created by Centroid (centroid.cc) - Contact: centroid@icloud.com Revision 1