Convert HTML files to Markdown.
catseye
9 years ago
0 | <html> | |
1 | <head> | |
2 | <title>CARPE DIEM v2000.12.04 Game Engine Documentation</title> | |
3 | <body bgcolor=#e0d0ff text=#000000> | |
4 | ||
5 | <h1>Game Engine Documentation</h1> | |
6 | <h3>CARPE DIEM v2000.12.04</h3> | |
7 | <p>Computer-Assisted Role Playing Engine for | |
8 | Diverse Interactive Entertainment Modules | |
9 | <hr> | |
10 | <p>(c)2000 Cat's Eye Technologies. All rights reserved. | |
11 | <br>This software is OSI Certified Open Source Software. | |
12 | <br>See the file <a href="license.txt">license.txt</a> for license information. | |
13 | <p> | |
14 | ||
15 | <h2>Table of Contents</h2> | |
16 | ||
17 | <ul> | |
18 | <li>About CARPE DIEM | |
19 | <li><a href="development.html">Development Notes</a> | |
20 | <li><a href="object_model.html">Object Model Reference</a> | |
21 | </ul> | |
22 | ||
23 | <h3>About CARPE DIEM</h3> | |
24 | ||
25 | <p>CARPE DIEM is an engine and framework for games. | |
26 | ||
27 | <p>CARPE DIEM can be loosely described as a 'roguelike' game engine. | |
28 | It is primarily keypress-controlled, but a menu-driven interface | |
29 | is also employed, and players more comfortable with menus can use | |
30 | them exclusively. | |
31 | ||
32 | <p>In this context, roguelike primarily means: the area surrounding the | |
33 | currently active characters is displayed as a two-dimensional | |
34 | iconic map on the computer or terminal's screen. This map may be | |
35 | larger than the current screen (it will scroll as needed.) | |
36 | ||
37 | <p>First-person perspective is not supported. | |
38 | ||
39 | <p>You, as the player, can command an entire party of adventurers, both | |
40 | those totally under your control (PC's) and those you have hired | |
41 | (NPC's.) | |
42 | ||
43 | <p>Eventually management of multiple parties will be possible, so that | |
44 | a party of more than one character can split into two parties, and | |
45 | two parties can join to form a bigger party. Play may switch between | |
46 | parties at any point. | |
47 | ||
48 | <p>Only turn-based gameplay is supported, not real-time. | |
49 | ||
50 | <p>The combat and talent systems need work, but show promise. | |
51 | ||
52 | ||
53 | <h3>The Implementation</h3> | |
54 | ||
55 | <p>CARPE DIEM is written entirely in Perl 5.x. It uses few external | |
56 | modules so there should be little need to worry about obtaining | |
57 | the "right extras"; as long as you have a stable, basic configuration | |
58 | of Perl installed, it should run. | |
59 | ||
60 | <p>CARPE DIEM uses a display abstraction layer, so as long as you can | |
61 | describe exactly how to render any given object (say, a dragon,) | |
62 | you can, with enough work, make it display on any display device | |
63 | you could possibly access via Perl. | |
64 | ||
65 | <p>By default, however, only generic, console-or-terminal based | |
66 | display drivers are selected. Drivers are included for console | |
67 | input and output under 32-bit Windows, terminal input under POSIX, | |
68 | and terminal output under ANSI (or VT100); the output functionality | |
69 | includes colour modules which support sixteen colours under 32-bit | |
70 | Windows and ANSI, and a crude approximation on VT100 terminals | |
71 | which only support an intensity bit. | |
72 | ||
73 | <p>Curses is only used if it has already been installed as a | |
74 | library for the Perl interpreter, so display refreshing is not | |
75 | guaranteed to be particularly optimized, and it is recommended | |
76 | CARPE DIEM be run from a console if Curses is not available. | |
77 | ||
78 | <p>In order to coexist with ANSI keypress sequences which begin | |
79 | with an escape character, the escape key must be 'double-clicked' | |
80 | in order for it to register as 'escape'. | |
81 | ||
82 | <p>This display/input abstraction layer has been tested on: | |
83 | ||
84 | <ul> | |
85 | <li> Windows 95: console | |
86 | <li> Windows 98 SE: console | |
87 | <li> Windows NT: console | |
88 | <li> FreeBSD 4.0-RELEASE: console (ANSI and Curses) | |
89 | <li> Linux 2.2.17: console, xterm (X), gsh-term (KDE) | |
90 | <li> SCO v3.x(?): console | |
91 | <li> Solaris SunOS 4: telnet | |
92 | </ul> | |
93 | ||
94 | <p>The _screen module will select what kind of character set to assume | |
95 | based on the current operating system - it assumes Windows, Linux, | |
96 | and FreeBSD are running on hardware with the IBM PC OEM textmode | |
97 | font. When the Mac version is done, it may use the Mac's built-in | |
98 | symbolset (if not a set of dedicated graphical icons). If a dedicated | |
99 | font is one day created, that may be invoked/configured here as well. | |
100 | In all other cases, generic ASCII symbols are used to represent things. | |
101 | Because there are more things than symbols, some things look the same | |
102 | in ASCII, and the What Is...? command can be used to identify things | |
103 | on the screen. | |
104 | ||
105 | <p>The mappings which translate keypresses into actions are configurable. | |
106 | The key/ directory contains keymaps for the game Corona, and ones | |
107 | resembling Hack, Rogue, Larn, ADOM, and Angband (Roguelike), and of | |
108 | course it offers the possibility of rolling your own custom keymapping. | |
109 | ||
110 | <h3>Thanks</h3> | |
111 | ||
112 | <p>Thanks go to: | |
113 | ||
114 | <ul> | |
115 | Russell Bornschlegel, John Colagioia, Brian Connors, | |
116 | Matthias Giwer, Ben Olmstead, Steve Mosher, Rafal Sulejman, | |
117 | Greg Velichansky, and anyone else who chipped in their | |
118 | two cents whose name I've managed to forget... | |
119 | <ul> | |
120 | for their ideas, insights, criticisms, witticisms, | |
121 | and especially for their seemingly endless testing | |
122 | </ul></ul> | |
123 | ||
124 | <ul> | |
125 | Larry Wall | |
126 | <ul> | |
127 | for making a gigantic hack that works | |
128 | in mostly the same way everywhere | |
129 | </ul></ul> | |
130 | ||
131 | <ul> | |
132 | The Authors of Rogue, [Net]Hack, Moria, Angband, Alphaman, & ADOM | |
133 | <ul> | |
134 | for letting me stand on the shoulders of giants | |
135 | </ul></ul> | |
136 | ||
137 | <p> <p>Chris Pressey | |
138 | <br>Winnipeg, Manitoba, Canada | |
139 | <br>Dec 4 2000 | |
140 | <p> | |
141 | </body> | |
142 | </html> |
0 | Game Engine Documentation | |
1 | ========================= | |
2 | ||
3 | ### CARPE DIEM v2000.12.04 | |
4 | ||
5 | Computer-Assisted Role Playing Engine for Diverse Interactive | |
6 | Entertainment Modules | |
7 | ||
8 | * * * * * | |
9 | ||
10 | (c)2000 Cat's Eye Technologies. All rights reserved. | |
11 | This software is OSI Certified Open Source Software. | |
12 | See the file [license.txt](license.txt) for license information. | |
13 | ||
14 | Table of Contents | |
15 | ----------------- | |
16 | ||
17 | - About CARPE DIEM | |
18 | - [Development Notes](development.html) | |
19 | - [Object Model Reference](object_model.html) | |
20 | ||
21 | ### About CARPE DIEM | |
22 | ||
23 | CARPE DIEM is an engine and framework for games. | |
24 | ||
25 | CARPE DIEM can be loosely described as a 'roguelike' game engine. It is | |
26 | primarily keypress-controlled, but a menu-driven interface is also | |
27 | employed, and players more comfortable with menus can use them | |
28 | exclusively. | |
29 | ||
30 | In this context, roguelike primarily means: the area surrounding the | |
31 | currently active characters is displayed as a two-dimensional iconic map | |
32 | on the computer or terminal's screen. This map may be larger than the | |
33 | current screen (it will scroll as needed.) | |
34 | ||
35 | First-person perspective is not supported. | |
36 | ||
37 | You, as the player, can command an entire party of adventurers, both | |
38 | those totally under your control (PC's) and those you have hired | |
39 | (NPC's.) | |
40 | ||
41 | Eventually management of multiple parties will be possible, so that a | |
42 | party of more than one character can split into two parties, and two | |
43 | parties can join to form a bigger party. Play may switch between parties | |
44 | at any point. | |
45 | ||
46 | Only turn-based gameplay is supported, not real-time. | |
47 | ||
48 | The combat and talent systems need work, but show promise. | |
49 | ||
50 | ### The Implementation | |
51 | ||
52 | CARPE DIEM is written entirely in Perl 5.x. It uses few external modules | |
53 | so there should be little need to worry about obtaining the "right | |
54 | extras"; as long as you have a stable, basic configuration of Perl | |
55 | installed, it should run. | |
56 | ||
57 | CARPE DIEM uses a display abstraction layer, so as long as you can | |
58 | describe exactly how to render any given object (say, a dragon,) you | |
59 | can, with enough work, make it display on any display device you could | |
60 | possibly access via Perl. | |
61 | ||
62 | By default, however, only generic, console-or-terminal based display | |
63 | drivers are selected. Drivers are included for console input and output | |
64 | under 32-bit Windows, terminal input under POSIX, and terminal output | |
65 | under ANSI (or VT100); the output functionality includes colour modules | |
66 | which support sixteen colours under 32-bit Windows and ANSI, and a crude | |
67 | approximation on VT100 terminals which only support an intensity bit. | |
68 | ||
69 | Curses is only used if it has already been installed as a library for | |
70 | the Perl interpreter, so display refreshing is not guaranteed to be | |
71 | particularly optimized, and it is recommended CARPE DIEM be run from a | |
72 | console if Curses is not available. | |
73 | ||
74 | In order to coexist with ANSI keypress sequences which begin with an | |
75 | escape character, the escape key must be 'double-clicked' in order for | |
76 | it to register as 'escape'. | |
77 | ||
78 | This display/input abstraction layer has been tested on: | |
79 | ||
80 | - Windows 95: console | |
81 | - Windows 98 SE: console | |
82 | - Windows NT: console | |
83 | - FreeBSD 4.0-RELEASE: console (ANSI and Curses) | |
84 | - Linux 2.2.17: console, xterm (X), gsh-term (KDE) | |
85 | - SCO v3.x(?): console | |
86 | - Solaris SunOS 4: telnet | |
87 | ||
88 | The \_screen module will select what kind of character set to assume | |
89 | based on the current operating system - it assumes Windows, Linux, and | |
90 | FreeBSD are running on hardware with the IBM PC OEM textmode font. When | |
91 | the Mac version is done, it may use the Mac's built-in symbolset (if not | |
92 | a set of dedicated graphical icons). If a dedicated font is one day | |
93 | created, that may be invoked/configured here as well. In all other | |
94 | cases, generic ASCII symbols are used to represent things. Because there | |
95 | are more things than symbols, some things look the same in ASCII, and | |
96 | the What Is...? command can be used to identify things on the screen. | |
97 | ||
98 | The mappings which translate keypresses into actions are configurable. | |
99 | The key/ directory contains keymaps for the game Corona, and ones | |
100 | resembling Hack, Rogue, Larn, ADOM, and Angband (Roguelike), and of | |
101 | course it offers the possibility of rolling your own custom keymapping. | |
102 | ||
103 | ### Thanks | |
104 | ||
105 | Thanks go to: | |
106 | ||
107 | Russell Bornschlegel, John Colagioia, Brian Connors, Matthias Giwer, Ben | |
108 | Olmstead, Steve Mosher, Rafal Sulejman, Greg Velichansky, and anyone | |
109 | else who chipped in their two cents whose name I've managed to forget... | |
110 | ||
111 | Larry Wall | |
112 | ||
113 | The Authors of Rogue, [Net]Hack, Moria, Angband, Alphaman, & ADOM | |
114 | ||
115 | Â | |
116 | ||
117 | Chris Pressey | |
118 | Winnipeg, Manitoba, Canada | |
119 | Dec 4 2000 |
0 | <html> | |
1 | <head> | |
2 | <title>CARPE DIEM v2000.12.04 Development Notes</title> | |
3 | <body bgcolor=#e0d0ff text-#000000> | |
4 | ||
5 | <h1>Development Notes</h1> | |
6 | <h3>CARPE DIEM v2000.12.04</h3> | |
7 | <hr> | |
8 | <p> | |
9 | ||
10 | <h2>Caveats</h2> | |
11 | ||
12 | <h3>Known Bugs</h3> | |
13 | ||
14 | <p>Loading a saved game does not restore the entire game, only the | |
15 | Region that the leader is currently in. | |
16 | ||
17 | <h3>Gotchas</h3> | |
18 | ||
19 | <p>Is not really a game yet. Things may seem too hard, or too | |
20 | easy. Keybindings may seem awkward and are subject to change. | |
21 | ||
22 | <p>Certainly storing the data for all Regions in Perl's perception of | |
23 | the 'core' will stress virtual memory to inhuman extremes. | |
24 | ||
25 | <p>Loading and saving the game are <b>slow</b> and produce <b>huge</b> saved-game files! | |
26 | Plus there are bugs involved with loading a game. | |
27 | ||
28 | <p>Mixing spells can result in unpredictable effects, such as | |
29 | permanency of a spell effect. | |
30 | ||
31 | <p>Travelling from one region to another, especially one filled | |
32 | with a large amount of unpassable Terrain (such as ocean,) can cause | |
33 | the character so travelling to become 'lost at sea.' | |
34 | ||
35 | <h3>Operating Systems</h3> | |
36 | ||
37 | <ul> | |
38 | <li> Windows 98 and ActivePerl 5.6 | |
39 | ||
40 | <p>Arrow keys do not navigate. | |
41 | ||
42 | <p>carpe.pl seems to run somewhat more quickly and smoothly when started | |
43 | from the command line (start an MS-DOS prompt, then type 'perl | |
44 | carpe.pl') instead of when double-clicking 'carpe.pl'. Almost surely | |
45 | a Windows/ActivePerl memory/console/performance setting thing. | |
46 | <p> | |
47 | <li> FreeBSD (4.0-RELEASE) and Perl 5.005: | |
48 | ||
49 | <p>Using a Video BIOS subsystem which uses a custom font on boot (such | |
50 | as for displaying an "Energy Star compliant" logo) under FreeBSD may | |
51 | make some on-screen characters look strange while playing the game, | |
52 | because AFAICT FreeBSD doesn't reset the textmode font to the OEM one. | |
53 | ||
54 | <p>The keystroke ^M cannot be bound (always results in ^J.) This might | |
55 | or might not apply under Linux and SCO as well. | |
56 | ||
57 | </ul> | |
58 | ||
59 | <h2>To-Do List</h2> | |
60 | ||
61 | <ol> | |
62 | <li>Reflex skills at thrown/fired weapons, shield use. | |
63 | <li>Armour and weapons should occasionally be damaged. | |
64 | <li>Implement the actions 'sleep', 'climb', 'run', 'yell'. | |
65 | <li>Physical makeup in one list of adjectivals (for example 'Flesh'), damage type in another, seperate list of adjs (e.g. 'crushing'.) | |
66 | <li>All attacks of items should be used/compared (look for: {melee_attacks}[0].) (two down) | |
67 | <li>Encumbrance. Should not be able to haul a dozen boulders around unless strength is near 40. | |
68 | <li>Freshness of carcasses and other food. Food preservation. | |
69 | <li>Split party. Join (merge) parties. | |
70 | <li>Journal-keeping (quests & other important info) and view. | |
71 | <li>Food, water, starvation, dehydration. | |
72 | <li>Dieties, virtues, vows. | |
73 | <li>Vehicular actors (horses, ships.) | |
74 | <li>Load/Save World/Saveable object definately needs to be correctly implemented. | |
75 | </ol> | |
76 | ||
77 | <h2>History</h2> | |
78 | ||
79 | <p>v2000.10.05 | |
80 | ||
81 | <ul> | |
82 | <li> first public release | |
83 | </ul> | |
84 | ||
85 | <p>v2000.10.08 | |
86 | ||
87 | <ul> | |
88 | <li> 7-bit ASCII set completed, | |
89 | <li> 16 colour display under ANSI, | |
90 | <li> Resistances to forces (slightly wrong, but there.) | |
91 | <li> Regions created on-the-fly. | |
92 | </ul> | |
93 | ||
94 | <p>v2000.10.10 | |
95 | ||
96 | <ul> | |
97 | <li> Default boilerplate for naming characters, parties. | |
98 | <li> Regions border one another. | |
99 | <li> Only able to see creatures nearby, not anywhere. | |
100 | <li> Able to see nearby creatures attacking one another. | |
101 | <li> Charm spell, adds monsters to your party | |
102 | <li> How closely party members follow the leader | |
103 | depends on the leader's charisma | |
104 | <li> Moved many world-dependent definitions into world/ | |
105 | </ul> | |
106 | ||
107 | <p>v2000.10.12 | |
108 | ||
109 | <ul> | |
110 | <li> Added Region generation style capability. | |
111 | <li> Generation styles 'random', 'accretion', and 'recursive'. | |
112 | <li> Fixed bug in Vandalize. | |
113 | <li> Allows vandalizing whatever message you wish. | |
114 | <li> Message on hitting edge of world (for now.) | |
115 | <li> Food is identified upon consume. | |
116 | <li> Equipment is identified upon wield. | |
117 | <li> Item or Talent may be purveyor of hurt(), | |
118 | in which case there is no strength bonus (wand of lightning.) | |
119 | <li> Letter shortcuts on menus. | |
120 | <li> Handles ANSI arrow keys. Double-click Escape to cancel menu. | |
121 | </ul> | |
122 | ||
123 | <p>v2000.10.15 | |
124 | ||
125 | <ul> | |
126 | <li> Double-click Escape to bring up game menu (consistency.) | |
127 | <li> Support for other-than-numberpad direction-pads (Rogue.) | |
128 | <li> Adapted hmaon's AngRogue module into Angband_Roguelike keymap. | |
129 | <li> Added escape key, long form (type "\move northwest" to try.) | |
130 | <li> Added mostly-accurate keymaps for Rogue, Hack, and Larn. | |
131 | <li> Arguments to actions - 'Move' menu now works (whee.) | |
132 | <li> Ability to review previous 20-odd messages (usually bound to ^P.) | |
133 | <li> Version synchronization in configuration file. | |
134 | <li> Help screen prettied up ("* = unimplemented" now implemented.) | |
135 | <li> Rudimentary support for supplementary materials. | |
136 | <li> Support for each Region having it's own background music. | |
137 | </ul> | |
138 | ||
139 | <p>v2000.10.16 | |
140 | ||
141 | <ul> | |
142 | <li> Fixed bugs under cygwin w.r.t. Win32 modules and POSIX (I hope.) | |
143 | <li> Added 'canned' (pre-designed) region generation (Bakersport.) | |
144 | <li> Cleaned up character display, esp. colors, esp. in Equipment | |
145 | <li> Many body parts for wielded items (wear loincloth on head.) | |
146 | <li> Nonweapon items (such as berries) can be used as weapons. | |
147 | <li> Cleaned up Encounter code (no goto's) - might not crash under Perl 5.00x | |
148 | </ul> | |
149 | ||
150 | <p>v2000.10.20 | |
151 | ||
152 | <ul> | |
153 | <li> Added dynamic dungeon creation (Giant Beehives, Dwarkling Hideouts.) | |
154 | <li> Monsters can be unilaterally hostile towards the player's party. | |
155 | <li> Extracted common code of Item, Terrain, Actor to Physical superclass. | |
156 | <li> Migrated away from AUTOLOAD routines for sake of performance. | |
157 | <li> Almost all world-definitions in world/ subdirectory. | |
158 | <li> Re-aranged and extended Corona keymap. | |
159 | <li> Actor incapacitated when any stat drops to 0. | |
160 | <li> Message noting items on ground is not repeated during combat. | |
161 | <li> Meaningful color used in character status display. | |
162 | <li> Slightly more realistic experience reward (sum-of-stats.) | |
163 | </ul> | |
164 | ||
165 | <p>v2000.10.24 | |
166 | ||
167 | <ul> | |
168 | <li> 'Attack' and 'Bash' unified. | |
169 | <li> Each Terrain element is aware of it's coordinates and Region. | |
170 | <li> Preferences configurable by menus: wield, actor, bump. | |
171 | <li> Split engine (CARPE DIEM) from game universe (Corona.) | |
172 | <li> Character now has lit seeing range of four squares. | |
173 | <li> Speeded up Region generation (Terrain is cloned on-demand) | |
174 | <li> Extended command introducer in keymap, ':' for ADOM. | |
175 | <li> Fixed bugs which looked beyond edge of map: | |
176 | fleeing or following the leader, and searching. | |
177 | <li> Talents are compared by name in Actor->has(talent). | |
178 | <li> Key re-assignment while in game ("\bind M move north" to try.) | |
179 | <li> 'impression' view added, used in 'look' at creature. | |
180 | <li> Ability to switch party leader (TAB key.) | |
181 | </ul> | |
182 | ||
183 | <p>v2000.10.25 | |
184 | ||
185 | <ul> | |
186 | <li> Seperated CARPE DIEM documentation from Corona documentation. | |
187 | <li> Moved title screen and initial equipment from engine to game. | |
188 | <li> Moved specific Encounter definitions from engine to game. | |
189 | <li> Moved list of allowed PC races from engine to game. | |
190 | <li> Different races have different randomly-generated names. | |
191 | <li> Made delayed-usage talents safer under older Perl (5.005.) | |
192 | <li> Made menu hackably configurable (menu/Corona.pm). | |
193 | <li> Added ANSI arrow keys as fallback move commands. | |
194 | <li> States 'blind deaf dumb confused paralyzed placid' reported. | |
195 | <li> Bugs in armour fixed. | |
196 | <li> Statistics now kept on average attack and defense scores. | |
197 | <li> Incapacitation by stat reaching zero now works as expected. | |
198 | </ul> | |
199 | ||
200 | <p>v2000.10.27 | |
201 | ||
202 | <ul> | |
203 | <li> Name creature now implemented, gives generic Actors proper names. | |
204 | <li> Added 'dungeon' (rougelike) region generation. | |
205 | <li> Added 'primate', 'bovine', 'porcine' symbols. | |
206 | <li> Throw item implemented. Arbitrary (crosshairs) aiming. | |
207 | <li> Range determined by stength vs logarithmic weight. | |
208 | <li> Item's projectile damage seperate from default damage. | |
209 | <li> Missiles bump off of obstacles and injure actors. | |
210 | <li> Exploding missiles disappear after landing. | |
211 | <li> Aerodynamics simulated with 'aeroweight' (may be higher or lower.) | |
212 | <li> Fast, medium, or slow missile animation option. | |
213 | <li> Establishing eval'ed on_xxx event methods: on_move, on_consume, etc. | |
214 | <li> Bugs with searching fixed. %hidden hash replaced by on_reveal event. | |
215 | <li> Slightly optimized Distribution objects (sorted upon creation.) | |
216 | <li> Line-of-sight calculations for lighted actors. | |
217 | </ul> | |
218 | ||
219 | <p>v2000.10.30 | |
220 | ||
221 | <ul> | |
222 | <li> Added dominant hand (right, left, ambidextrous) for humanoids. | |
223 | <li> Displays character's appearance and dominant hand on roll screen. | |
224 | <li> Player Character races described in roll screen. | |
225 | <li> Cleaned up healing code. All stats heal now, faster when resting. | |
226 | <li> Cleaned up guild interface - single method class('class',level). | |
227 | <li> Cleaned up talent code. No effect hash, instead on_perform event. | |
228 | <li> Object factory for scrolls etc ($item->enchant($talent).) | |
229 | <li> Object factory for talents (Talent->create($terrain).) | |
230 | <li> Object factory for magicked, finely crafted, cursed weapons. | |
231 | <li> Charges on magical items such as wands is now tracked. | |
232 | <li> Blindness (and insufficient light) now prevents: | |
233 | redrawing other actors, noting items and obstacles, | |
234 | looking around, reading and examining items. | |
235 | <li> Added proficiency levels on talents, fixed learn method. | |
236 | <li> Added lesson points, improving talents through practice. | |
237 | <li> Added capturing souls in items. | |
238 | <li> Fixed bug in message-displaying, now word wraps long messages. | |
239 | <li> Actors only displayed when in line of sight of leader. | |
240 | <li> Confused actors move randomly. Blind NPC's act confused. | |
241 | <li> Confusion prevents reading items. Dumbness prevents reading scrolls. | |
242 | <li> Dumbness prevents using talents with verbal components. | |
243 | </ul> | |
244 | ||
245 | <p>v2000.11.02 | |
246 | ||
247 | <ul> | |
248 | <li> Added ::script routine for executing scripts in many languages. | |
249 | <li> General-purpose Fuse objects. Set up things to happen later. | |
250 | <li> Material components for talents, which may or may not be consumed. | |
251 | <li> $physical->seen() now uses format string (w/accusative etc.) | |
252 | Correct definate/indefinate articles/counts now. | |
253 | <li> Missile weapons as ammunition (arrow->bow, bolt->X-bow, etc.) | |
254 | Launcher affects range and damage (not accuracy yet.) | |
255 | <li> When dropping items, asks for how many to drop. Deprecates 'halve'. | |
256 | <li> Help screen prettied up - better coloring and mnemonics. | |
257 | <li> 'yank' now referred to as 'pull'. on_pull event implemented. | |
258 | <li> Different kinds of poisons and diseases with different effects. | |
259 | <li> HTMLized documentation, added Object Model Reference document. | |
260 | </ul> | |
261 | ||
262 | <p>v2000.11.03 | |
263 | ||
264 | <ul> | |
265 | <li> Added 'current' fuse method for Fuses object, modified in scripts. | |
266 | <li> Added diseases which pass information back to the current fuse. | |
267 | <li> Fixed bug w.r.t. combining items (needs to be looked at again) | |
268 | <li> Fixed bug in drop (how many.) | |
269 | <li> Fixed bug in posions (etc) which cause constitution to drop below | |
270 | zero; this actually results in death now, not just infinite | |
271 | incapacitation. | |
272 | <li> Fixed bugs w.r.t. bashing and vandalizing terrain in the dark. | |
273 | <li> Fixed bug allowing characters to jump out of bounds, beyond map. | |
274 | <li> Fixed bug in line-of-sight determination for hostile Actors. | |
275 | <li> Cleaned up $actor->death now displays messages, dispenses experience, etc. | |
276 | <li> Moved 'hitbonus', 'on_strike', 'on_struck' to Physical object superclass. | |
277 | <li> Moved 'los' to Physical object. Cleaned up 'los' and 'seen'. | |
278 | <li> Moved supplementary materials to game universe, not game engine. | |
279 | </ul> | |
280 | ||
281 | <p>v2000.11.05 | |
282 | ||
283 | <ul> | |
284 | <li>Added 'wield by item' option. | |
285 | <li>Wielded items can now cover many body parts, for | |
286 | two-handed weapons and jackets with sleeves. | |
287 | <li>Fixed bugs with removing talents under older (5.00x) Perl. | |
288 | <li>Added 'Please wait' message before loading game module. | |
289 | <li>Implemented 'interact' and 'trade_places' actions. | |
290 | <li>Not-quite implemented 'sleep' and 'destroy_item' actions. | |
291 | <li>Fixed bugs with line-of-sight for Items and Talents. | |
292 | <li>Apropos messages when wielding and taking off items. | |
293 | <li>Rudimentary support for adjusting both screen size and map size. | |
294 | </ul> | |
295 | ||
296 | <p>v2000.11.06 | |
297 | ||
298 | <ul> | |
299 | <li>Adjectivals (Adj superclass of Physical and Force classes.) | |
300 | <li>Routine to 'prep' newly created Actors, sexualizing them, | |
301 | putting their main weapon in their dominant hand, and adjusting | |
302 | for any magical benefits conferred from wielded items/armour. | |
303 | <li>New on_open event allows opening and closing of doors and static containers | |
304 | like chests. | |
305 | <li>New on_enter and on_exit events on Terrain elements. | |
306 | <li>New on_pickup event on Items allows for various boobytraps. | |
307 | <li>Added 'coastline' Region generation algorithm. | |
308 | <li>Terrain objects now support opacity (0% = fully transparent.) | |
309 | <li>'make' constructor uses Adjectival table to determine new | |
310 | defense value, weight, durability etc for Items. | |
311 | <li>Fixed bugs in: Fuses object, Party view, Enter action, carcass | |
312 | creation, initial belongings of Actors. | |
313 | </ul> | |
314 | ||
315 | <p>v2000.11.10 | |
316 | ||
317 | <ul> | |
318 | <li>Physical objects handle composition (via condition, durability, hurt method.) | |
319 | <li>Composition is expressed as a list of Adjectivals (which may imply other Adjectivals.) | |
320 | <li>Attack object. Support for multiple attacks (which cease | |
321 | if the defender is killed), attacks which | |
322 | can only be attempted if n previous attacks succeeded, | |
323 | attacks which automatically succeed if n previous attacks succeeded, | |
324 | on_strike event handler, individual identity (cloned) on attacks. | |
325 | <li>$actor->choose_item takes a list of Adjectival objects as an 'OR'ed filter. | |
326 | <li>Magic, cursed, written, edible, liquid, | |
327 | type of instrument, and type of missile ammunition, are all Adjectivals. | |
328 | <li>$actor->learn improves, degrades, and removes Talents, as well as acquiring them. | |
329 | <li>Ambidextrous characters are able to switch stance (switch_stance action). | |
330 | <li>Report of Items seen on Terrain square now in single message. | |
331 | <li>Full or short body part menu in wield. Body parts always have same letters in full menu. | |
332 | Short menu only shows body parts which are vacant. | |
333 | <li>Implemented 'push' and 'destroy_item' actions. | |
334 | <li>Resistances can be specified with Adjectivals. | |
335 | <li>$physical->alter_resistances does for Resistances what learn does for Talents. | |
336 | <li>Cleaned up message display (erased when no messages pending that turn.) | |
337 | <li>Actors can dodge missiles (5%/DEX point, sliding, no automatic successes.) | |
338 | <li>The make() constructor, now located in the Physical class, bestows resistances from Adjectivals. | |
339 | <li>Smarter NPC's don't attack each other when blocked from their target. | |
340 | <li>Reworked supplementary materials interface, uses web browser and connects to | |
341 | IP network to retrieve multimedia objects (images, music, etc.) | |
342 | <li>Supplementary materials, keymap, and location of web browser are preferences, | |
343 | not configuration options. | |
344 | <li>Ability to save preferences to user prefs file added. | |
345 | <li>New action 'repeat_action' (bound to '.' in the Corona keymap) repeats an action until | |
346 | the leader notices something new. | |
347 | <li>Added sentinel to detect when 100 moves have passed with no user input, pops up a | |
348 | menu to ask what to do (needed to handle otherwise infinite loops caused by repeat.) | |
349 | <li>Explosion, fire, cold damage etc, are not subject to strength bonus, only crushing, cutting, and piercing (kinetic attacks). | |
350 | <li>Character background influences initial equipment, belongings, talents, and | |
351 | start location. | |
352 | <li>Added Curses display abstraction, requires Curses for Perl module be installed. | |
353 | <li>Clear to EOL and refresh display interfaces in virtual console. | |
354 | <li>Created SemiOEM symbolset for SCO Unix and Curses (can't display ASCII < 32.) | |
355 | </ul> | |
356 | ||
357 | <p>v2000.11.12 | |
358 | ||
359 | <ul> | |
360 | <li>Fixed bugs in automatically creating two-way portals back from newly-created dungeons. | |
361 | <li>Fixed bugs in tombstone-drawing routine and Win32 clreol routine. | |
362 | <li>Encounter -> Buy Services. Added support for guilds and training. | |
363 | <li>Encounter -> Sell Items. Encounter -> Bribe. | |
364 | <li>Fixed fleeing encounter, getting away, getting initiative | |
365 | if situation decays into combat. | |
366 | <li>Encounter -> Negotiate logic for individual creatures. | |
367 | <li>Monogrammed items which are forced to always show up with a given letter in menus. | |
368 | <li>Menu object w/erase background, etc which supports the above. | |
369 | <li>Boolean passed to 'put_on' that redirects to 'take' if Actor already has one on. | |
370 | <li>Improved reviewing previous messages. Added Messages view. View meta-action takes arguments. | |
371 | <li>Fixed small bugs in help screen and cloning items. | |
372 | <li>Better redirection of actions (esp. move -> interact and bash) on bump. | |
373 | </ul> | |
374 | ||
375 | <p>v2000.11.19 | |
376 | ||
377 | <ul> | |
378 | <li>Added color to Curses display abstraction, made initial setup easier (default abstraction is Curses if it's installed.) | |
379 | <li>Fixed bugs in redirection of 'move' w.r.t. travelling from Region to Region. | |
380 | <li>Added 'freeze channels' to Fuses so that magic can progress in orderly fashion. | |
381 | <li>Hostile creatures and party members now pursue their targets/leaders from Region to Region. | |
382 | <li>Implemented View Guilds, shows ranking attained in each guild. | |
383 | <li>$physical->throw routine supplies animation for both weapons and spells. | |
384 | <li>NPC's fall asleep, wake up, and do not move when sleeping. | |
385 | <li>Improved armour system for realism (coverage factors.) | |
386 | </ul> | |
387 | ||
388 | <p>v2000.12.04 | |
389 | ||
390 | <ul> | |
391 | <li>Allowed for recharging talents (creature "once per day" type talents, magic artefacts) | |
392 | <li>Diseased and poisoned terrain floors are now a constructor. | |
393 | <li>Terrain squares use adjectivals for composition. 'water' field on Terrain objects replaced with adjectival. | |
394 | <li>Movement through terrain is now relative to actor's aquatic, airborne, or ethereal nature. | |
395 | <li>Fixed bugs w.r.t. cloning talents upon Actor prep. | |
396 | <li>on_consider event on Talent objects allows for smarter choice of talents by creatures. | |
397 | <li>Tracking of game time in Party view. | |
398 | <li>Better portrayal of confusion, affects moving, attacking, interacting, and looking around more thoroughly. | |
399 | <li>Support for unique Actors, Items, and Terrain squares during Region generation. | |
400 | <li>Talents with moves greater than zero (e.g. calisthenics) no longer automatically succeed. | |
401 | <li>When a party member dies, it is now removed from the party roster. | |
402 | <li>Absolutely-trapped party members following leader no longer cause game to hang. | |
403 | <li>Automatically-created 'dungeon' levels now have more apropos exits (not always ascending staircases.) | |
404 | <li>Reflex skills such as proficiency at melee weapons and armour use (cover head etc). | |
405 | <li>Fixed bugs in armour coverage roll. | |
406 | <li>Added rudimentary 'Save World' and 'Load World' functionalities. | |
407 | </ul> | |
408 | ||
409 | </body> | |
410 | </html> |
0 | Development Notes | |
1 | ================= | |
2 | ||
3 | ### CARPE DIEM v2000.12.04 | |
4 | ||
5 | * * * * * | |
6 | ||
7 | Caveats | |
8 | ------- | |
9 | ||
10 | ### Known Bugs | |
11 | ||
12 | Loading a saved game does not restore the entire game, only the Region | |
13 | that the leader is currently in. | |
14 | ||
15 | ### Gotchas | |
16 | ||
17 | Is not really a game yet. Things may seem too hard, or too easy. | |
18 | Keybindings may seem awkward and are subject to change. | |
19 | ||
20 | Certainly storing the data for all Regions in Perl's perception of the | |
21 | 'core' will stress virtual memory to inhuman extremes. | |
22 | ||
23 | Loading and saving the game are **slow** and produce **huge** saved-game | |
24 | files! Plus there are bugs involved with loading a game. | |
25 | ||
26 | Mixing spells can result in unpredictable effects, such as permanency of | |
27 | a spell effect. | |
28 | ||
29 | Travelling from one region to another, especially one filled with a | |
30 | large amount of unpassable Terrain (such as ocean,) can cause the | |
31 | character so travelling to become 'lost at sea.' | |
32 | ||
33 | ### Operating Systems | |
34 | ||
35 | - Windows 98 and ActivePerl 5.6 | |
36 | ||
37 | Arrow keys do not navigate. | |
38 | ||
39 | carpe.pl seems to run somewhat more quickly and smoothly when | |
40 | started from the command line (start an MS-DOS prompt, then type | |
41 | 'perl carpe.pl') instead of when double-clicking 'carpe.pl'. Almost | |
42 | surely a Windows/ActivePerl memory/console/performance setting | |
43 | thing. | |
44 | ||
45 | - FreeBSD (4.0-RELEASE) and Perl 5.005: | |
46 | ||
47 | Using a Video BIOS subsystem which uses a custom font on boot (such | |
48 | as for displaying an "Energy Star compliant" logo) under FreeBSD may | |
49 | make some on-screen characters look strange while playing the game, | |
50 | because AFAICT FreeBSD doesn't reset the textmode font to the OEM | |
51 | one. | |
52 | ||
53 | The keystroke \^M cannot be bound (always results in \^J.) This | |
54 | might or might not apply under Linux and SCO as well. | |
55 | ||
56 | To-Do List | |
57 | ---------- | |
58 | ||
59 | 1. Reflex skills at thrown/fired weapons, shield use. | |
60 | 2. Armour and weapons should occasionally be damaged. | |
61 | 3. Implement the actions 'sleep', 'climb', 'run', 'yell'. | |
62 | 4. Physical makeup in one list of adjectivals (for example 'Flesh'), | |
63 | damage type in another, seperate list of adjs (e.g. 'crushing'.) | |
64 | 5. All attacks of items should be used/compared (look for: | |
65 | {melee\_attacks}[0].) (two down) | |
66 | 6. Encumbrance. Should not be able to haul a dozen boulders around | |
67 | unless strength is near 40. | |
68 | 7. Freshness of carcasses and other food. Food preservation. | |
69 | 8. Split party. Join (merge) parties. | |
70 | 9. Journal-keeping (quests & other important info) and view. | |
71 | 10. Food, water, starvation, dehydration. | |
72 | 11. Dieties, virtues, vows. | |
73 | 12. Vehicular actors (horses, ships.) | |
74 | 13. Load/Save World/Saveable object definately needs to be correctly | |
75 | implemented. | |
76 | ||
77 | History | |
78 | ------- | |
79 | ||
80 | v2000.10.05 | |
81 | ||
82 | - first public release | |
83 | ||
84 | v2000.10.08 | |
85 | ||
86 | - 7-bit ASCII set completed, | |
87 | - 16 colour display under ANSI, | |
88 | - Resistances to forces (slightly wrong, but there.) | |
89 | - Regions created on-the-fly. | |
90 | ||
91 | v2000.10.10 | |
92 | ||
93 | - Default boilerplate for naming characters, parties. | |
94 | - Regions border one another. | |
95 | - Only able to see creatures nearby, not anywhere. | |
96 | - Able to see nearby creatures attacking one another. | |
97 | - Charm spell, adds monsters to your party | |
98 | - How closely party members follow the leader depends on the leader's | |
99 | charisma | |
100 | - Moved many world-dependent definitions into world/ | |
101 | ||
102 | v2000.10.12 | |
103 | ||
104 | - Added Region generation style capability. | |
105 | - Generation styles 'random', 'accretion', and 'recursive'. | |
106 | - Fixed bug in Vandalize. | |
107 | - Allows vandalizing whatever message you wish. | |
108 | - Message on hitting edge of world (for now.) | |
109 | - Food is identified upon consume. | |
110 | - Equipment is identified upon wield. | |
111 | - Item or Talent may be purveyor of hurt(), in which case there is no | |
112 | strength bonus (wand of lightning.) | |
113 | - Letter shortcuts on menus. | |
114 | - Handles ANSI arrow keys. Double-click Escape to cancel menu. | |
115 | ||
116 | v2000.10.15 | |
117 | ||
118 | - Double-click Escape to bring up game menu (consistency.) | |
119 | - Support for other-than-numberpad direction-pads (Rogue.) | |
120 | - Adapted hmaon's AngRogue module into Angband\_Roguelike keymap. | |
121 | - Added escape key, long form (type "\\move northwest" to try.) | |
122 | - Added mostly-accurate keymaps for Rogue, Hack, and Larn. | |
123 | - Arguments to actions - 'Move' menu now works (whee.) | |
124 | - Ability to review previous 20-odd messages (usually bound to \^P.) | |
125 | - Version synchronization in configuration file. | |
126 | - Help screen prettied up ("\* = unimplemented" now implemented.) | |
127 | - Rudimentary support for supplementary materials. | |
128 | - Support for each Region having it's own background music. | |
129 | ||
130 | v2000.10.16 | |
131 | ||
132 | - Fixed bugs under cygwin w.r.t. Win32 modules and POSIX (I hope.) | |
133 | - Added 'canned' (pre-designed) region generation (Bakersport.) | |
134 | - Cleaned up character display, esp. colors, esp. in Equipment | |
135 | - Many body parts for wielded items (wear loincloth on head.) | |
136 | - Nonweapon items (such as berries) can be used as weapons. | |
137 | - Cleaned up Encounter code (no goto's) - might not crash under Perl | |
138 | 5.00x | |
139 | ||
140 | v2000.10.20 | |
141 | ||
142 | - Added dynamic dungeon creation (Giant Beehives, Dwarkling Hideouts.) | |
143 | - Monsters can be unilaterally hostile towards the player's party. | |
144 | - Extracted common code of Item, Terrain, Actor to Physical | |
145 | superclass. | |
146 | - Migrated away from AUTOLOAD routines for sake of performance. | |
147 | - Almost all world-definitions in world/ subdirectory. | |
148 | - Re-aranged and extended Corona keymap. | |
149 | - Actor incapacitated when any stat drops to 0. | |
150 | - Message noting items on ground is not repeated during combat. | |
151 | - Meaningful color used in character status display. | |
152 | - Slightly more realistic experience reward (sum-of-stats.) | |
153 | ||
154 | v2000.10.24 | |
155 | ||
156 | - 'Attack' and 'Bash' unified. | |
157 | - Each Terrain element is aware of it's coordinates and Region. | |
158 | - Preferences configurable by menus: wield, actor, bump. | |
159 | - Split engine (CARPE DIEM) from game universe (Corona.) | |
160 | - Character now has lit seeing range of four squares. | |
161 | - Speeded up Region generation (Terrain is cloned on-demand) | |
162 | - Extended command introducer in keymap, ':' for ADOM. | |
163 | - Fixed bugs which looked beyond edge of map: fleeing or following the | |
164 | leader, and searching. | |
165 | - Talents are compared by name in Actor-\>has(talent). | |
166 | - Key re-assignment while in game ("\\bind M move north" to try.) | |
167 | - 'impression' view added, used in 'look' at creature. | |
168 | - Ability to switch party leader (TAB key.) | |
169 | ||
170 | v2000.10.25 | |
171 | ||
172 | - Seperated CARPE DIEM documentation from Corona documentation. | |
173 | - Moved title screen and initial equipment from engine to game. | |
174 | - Moved specific Encounter definitions from engine to game. | |
175 | - Moved list of allowed PC races from engine to game. | |
176 | - Different races have different randomly-generated names. | |
177 | - Made delayed-usage talents safer under older Perl (5.005.) | |
178 | - Made menu hackably configurable (menu/Corona.pm). | |
179 | - Added ANSI arrow keys as fallback move commands. | |
180 | - States 'blind deaf dumb confused paralyzed placid' reported. | |
181 | - Bugs in armour fixed. | |
182 | - Statistics now kept on average attack and defense scores. | |
183 | - Incapacitation by stat reaching zero now works as expected. | |
184 | ||
185 | v2000.10.27 | |
186 | ||
187 | - Name creature now implemented, gives generic Actors proper names. | |
188 | - Added 'dungeon' (rougelike) region generation. | |
189 | - Added 'primate', 'bovine', 'porcine' symbols. | |
190 | - Throw item implemented. Arbitrary (crosshairs) aiming. | |
191 | - Range determined by stength vs logarithmic weight. | |
192 | - Item's projectile damage seperate from default damage. | |
193 | - Missiles bump off of obstacles and injure actors. | |
194 | - Exploding missiles disappear after landing. | |
195 | - Aerodynamics simulated with 'aeroweight' (may be higher or lower.) | |
196 | - Fast, medium, or slow missile animation option. | |
197 | - Establishing eval'ed on\_xxx event methods: on\_move, on\_consume, | |
198 | etc. | |
199 | - Bugs with searching fixed. %hidden hash replaced by on\_reveal | |
200 | event. | |
201 | - Slightly optimized Distribution objects (sorted upon creation.) | |
202 | - Line-of-sight calculations for lighted actors. | |
203 | ||
204 | v2000.10.30 | |
205 | ||
206 | - Added dominant hand (right, left, ambidextrous) for humanoids. | |
207 | - Displays character's appearance and dominant hand on roll screen. | |
208 | - Player Character races described in roll screen. | |
209 | - Cleaned up healing code. All stats heal now, faster when resting. | |
210 | - Cleaned up guild interface - single method class('class',level). | |
211 | - Cleaned up talent code. No effect hash, instead on\_perform event. | |
212 | - Object factory for scrolls etc (\$item-\>enchant(\$talent).) | |
213 | - Object factory for talents (Talent-\>create(\$terrain).) | |
214 | - Object factory for magicked, finely crafted, cursed weapons. | |
215 | - Charges on magical items such as wands is now tracked. | |
216 | - Blindness (and insufficient light) now prevents: redrawing other | |
217 | actors, noting items and obstacles, looking around, reading and | |
218 | examining items. | |
219 | - Added proficiency levels on talents, fixed learn method. | |
220 | - Added lesson points, improving talents through practice. | |
221 | - Added capturing souls in items. | |
222 | - Fixed bug in message-displaying, now word wraps long messages. | |
223 | - Actors only displayed when in line of sight of leader. | |
224 | - Confused actors move randomly. Blind NPC's act confused. | |
225 | - Confusion prevents reading items. Dumbness prevents reading scrolls. | |
226 | - Dumbness prevents using talents with verbal components. | |
227 | ||
228 | v2000.11.02 | |
229 | ||
230 | - Added ::script routine for executing scripts in many languages. | |
231 | - General-purpose Fuse objects. Set up things to happen later. | |
232 | - Material components for talents, which may or may not be consumed. | |
233 | - \$physical-\>seen() now uses format string (w/accusative etc.) | |
234 | Correct definate/indefinate articles/counts now. | |
235 | - Missile weapons as ammunition (arrow-\>bow, bolt-\>X-bow, etc.) | |
236 | Launcher affects range and damage (not accuracy yet.) | |
237 | - When dropping items, asks for how many to drop. Deprecates 'halve'. | |
238 | - Help screen prettied up - better coloring and mnemonics. | |
239 | - 'yank' now referred to as 'pull'. on\_pull event implemented. | |
240 | - Different kinds of poisons and diseases with different effects. | |
241 | - HTMLized documentation, added Object Model Reference document. | |
242 | ||
243 | v2000.11.03 | |
244 | ||
245 | - Added 'current' fuse method for Fuses object, modified in scripts. | |
246 | - Added diseases which pass information back to the current fuse. | |
247 | - Fixed bug w.r.t. combining items (needs to be looked at again) | |
248 | - Fixed bug in drop (how many.) | |
249 | - Fixed bug in posions (etc) which cause constitution to drop below | |
250 | zero; this actually results in death now, not just infinite | |
251 | incapacitation. | |
252 | - Fixed bugs w.r.t. bashing and vandalizing terrain in the dark. | |
253 | - Fixed bug allowing characters to jump out of bounds, beyond map. | |
254 | - Fixed bug in line-of-sight determination for hostile Actors. | |
255 | - Cleaned up \$actor-\>death now displays messages, dispenses | |
256 | experience, etc. | |
257 | - Moved 'hitbonus', 'on\_strike', 'on\_struck' to Physical object | |
258 | superclass. | |
259 | - Moved 'los' to Physical object. Cleaned up 'los' and 'seen'. | |
260 | - Moved supplementary materials to game universe, not game engine. | |
261 | ||
262 | v2000.11.05 | |
263 | ||
264 | - Added 'wield by item' option. | |
265 | - Wielded items can now cover many body parts, for two-handed weapons | |
266 | and jackets with sleeves. | |
267 | - Fixed bugs with removing talents under older (5.00x) Perl. | |
268 | - Added 'Please wait' message before loading game module. | |
269 | - Implemented 'interact' and 'trade\_places' actions. | |
270 | - Not-quite implemented 'sleep' and 'destroy\_item' actions. | |
271 | - Fixed bugs with line-of-sight for Items and Talents. | |
272 | - Apropos messages when wielding and taking off items. | |
273 | - Rudimentary support for adjusting both screen size and map size. | |
274 | ||
275 | v2000.11.06 | |
276 | ||
277 | - Adjectivals (Adj superclass of Physical and Force classes.) | |
278 | - Routine to 'prep' newly created Actors, sexualizing them, putting | |
279 | their main weapon in their dominant hand, and adjusting for any | |
280 | magical benefits conferred from wielded items/armour. | |
281 | - New on\_open event allows opening and closing of doors and static | |
282 | containers like chests. | |
283 | - New on\_enter and on\_exit events on Terrain elements. | |
284 | - New on\_pickup event on Items allows for various boobytraps. | |
285 | - Added 'coastline' Region generation algorithm. | |
286 | - Terrain objects now support opacity (0% = fully transparent.) | |
287 | - 'make' constructor uses Adjectival table to determine new defense | |
288 | value, weight, durability etc for Items. | |
289 | - Fixed bugs in: Fuses object, Party view, Enter action, carcass | |
290 | creation, initial belongings of Actors. | |
291 | ||
292 | v2000.11.10 | |
293 | ||
294 | - Physical objects handle composition (via condition, durability, hurt | |
295 | method.) | |
296 | - Composition is expressed as a list of Adjectivals (which may imply | |
297 | other Adjectivals.) | |
298 | - Attack object. Support for multiple attacks (which cease if the | |
299 | defender is killed), attacks which can only be attempted if n | |
300 | previous attacks succeeded, attacks which automatically succeed if n | |
301 | previous attacks succeeded, on\_strike event handler, individual | |
302 | identity (cloned) on attacks. | |
303 | - \$actor-\>choose\_item takes a list of Adjectival objects as an | |
304 | 'OR'ed filter. | |
305 | - Magic, cursed, written, edible, liquid, type of instrument, and type | |
306 | of missile ammunition, are all Adjectivals. | |
307 | - \$actor-\>learn improves, degrades, and removes Talents, as well as | |
308 | acquiring them. | |
309 | - Ambidextrous characters are able to switch stance (switch\_stance | |
310 | action). | |
311 | - Report of Items seen on Terrain square now in single message. | |
312 | - Full or short body part menu in wield. Body parts always have same | |
313 | letters in full menu. Short menu only shows body parts which are | |
314 | vacant. | |
315 | - Implemented 'push' and 'destroy\_item' actions. | |
316 | - Resistances can be specified with Adjectivals. | |
317 | - \$physical-\>alter\_resistances does for Resistances what learn does | |
318 | for Talents. | |
319 | - Cleaned up message display (erased when no messages pending that | |
320 | turn.) | |
321 | - Actors can dodge missiles (5%/DEX point, sliding, no automatic | |
322 | successes.) | |
323 | - The make() constructor, now located in the Physical class, bestows | |
324 | resistances from Adjectivals. | |
325 | - Smarter NPC's don't attack each other when blocked from their | |
326 | target. | |
327 | - Reworked supplementary materials interface, uses web browser and | |
328 | connects to IP network to retrieve multimedia objects (images, | |
329 | music, etc.) | |
330 | - Supplementary materials, keymap, and location of web browser are | |
331 | preferences, not configuration options. | |
332 | - Ability to save preferences to user prefs file added. | |
333 | - New action 'repeat\_action' (bound to '.' in the Corona keymap) | |
334 | repeats an action until the leader notices something new. | |
335 | - Added sentinel to detect when 100 moves have passed with no user | |
336 | input, pops up a menu to ask what to do (needed to handle otherwise | |
337 | infinite loops caused by repeat.) | |
338 | - Explosion, fire, cold damage etc, are not subject to strength bonus, | |
339 | only crushing, cutting, and piercing (kinetic attacks). | |
340 | - Character background influences initial equipment, belongings, | |
341 | talents, and start location. | |
342 | - Added Curses display abstraction, requires Curses for Perl module be | |
343 | installed. | |
344 | - Clear to EOL and refresh display interfaces in virtual console. | |
345 | - Created SemiOEM symbolset for SCO Unix and Curses (can't display | |
346 | ASCII \< 32.) | |
347 | ||
348 | v2000.11.12 | |
349 | ||
350 | - Fixed bugs in automatically creating two-way portals back from | |
351 | newly-created dungeons. | |
352 | - Fixed bugs in tombstone-drawing routine and Win32 clreol routine. | |
353 | - Encounter -\> Buy Services. Added support for guilds and training. | |
354 | - Encounter -\> Sell Items. Encounter -\> Bribe. | |
355 | - Fixed fleeing encounter, getting away, getting initiative if | |
356 | situation decays into combat. | |
357 | - Encounter -\> Negotiate logic for individual creatures. | |
358 | - Monogrammed items which are forced to always show up with a given | |
359 | letter in menus. | |
360 | - Menu object w/erase background, etc which supports the above. | |
361 | - Boolean passed to 'put\_on' that redirects to 'take' if Actor | |
362 | already has one on. | |
363 | - Improved reviewing previous messages. Added Messages view. View | |
364 | meta-action takes arguments. | |
365 | - Fixed small bugs in help screen and cloning items. | |
366 | - Better redirection of actions (esp. move -\> interact and bash) on | |
367 | bump. | |
368 | ||
369 | v2000.11.19 | |
370 | ||
371 | - Added color to Curses display abstraction, made initial setup easier | |
372 | (default abstraction is Curses if it's installed.) | |
373 | - Fixed bugs in redirection of 'move' w.r.t. travelling from Region to | |
374 | Region. | |
375 | - Added 'freeze channels' to Fuses so that magic can progress in | |
376 | orderly fashion. | |
377 | - Hostile creatures and party members now pursue their targets/leaders | |
378 | from Region to Region. | |
379 | - Implemented View Guilds, shows ranking attained in each guild. | |
380 | - \$physical-\>throw routine supplies animation for both weapons and | |
381 | spells. | |
382 | - NPC's fall asleep, wake up, and do not move when sleeping. | |
383 | - Improved armour system for realism (coverage factors.) | |
384 | ||
385 | v2000.12.04 | |
386 | ||
387 | - Allowed for recharging talents (creature "once per day" type | |
388 | talents, magic artefacts) | |
389 | - Diseased and poisoned terrain floors are now a constructor. | |
390 | - Terrain squares use adjectivals for composition. 'water' field on | |
391 | Terrain objects replaced with adjectival. | |
392 | - Movement through terrain is now relative to actor's aquatic, | |
393 | airborne, or ethereal nature. | |
394 | - Fixed bugs w.r.t. cloning talents upon Actor prep. | |
395 | - on\_consider event on Talent objects allows for smarter choice of | |
396 | talents by creatures. | |
397 | - Tracking of game time in Party view. | |
398 | - Better portrayal of confusion, affects moving, attacking, | |
399 | interacting, and looking around more thoroughly. | |
400 | - Support for unique Actors, Items, and Terrain squares during Region | |
401 | generation. | |
402 | - Talents with moves greater than zero (e.g. calisthenics) no longer | |
403 | automatically succeed. | |
404 | - When a party member dies, it is now removed from the party roster. | |
405 | - Absolutely-trapped party members following leader no longer cause | |
406 | game to hang. | |
407 | - Automatically-created 'dungeon' levels now have more apropos exits | |
408 | (not always ascending staircases.) | |
409 | - Reflex skills such as proficiency at melee weapons and armour use | |
410 | (cover head etc). | |
411 | - Fixed bugs in armour coverage roll. | |
412 | - Added rudimentary 'Save World' and 'Load World' functionalities. | |
413 |
0 | <html> | |
1 | <head> | |
2 | <title>CARPE DIEM v2000.11.10 Object Model Reference</title> | |
3 | <body bgcolor=#e0d0ff text-#000000> | |
4 | ||
5 | <h1>Object Model Reference</h1> | |
6 | <h3>CARPE DIEM v2000.11.10</h3> | |
7 | <hr> | |
8 | <h2>Introduction</h2> | |
9 | ||
10 | <p>This document aims to be a brief but comprehensive overview | |
11 | and help guide to the object networks used in | |
12 | the <a href="http://www.catseye.mb.ca/games/carpe/">CARPE DIEM</a> roguelike game engine. | |
13 | ||
14 | <p>It is certainly incomplete and inaccurate in places, | |
15 | but is better than no documentation at all (knock on wood.) | |
16 | All information contained herein is subject to change, in | |
17 | terms of interface, naming, and implementation. Interfaces | |
18 | marked with <b>(???)</b> are extremely likely to change. | |
19 | ||
20 | <h2>Object Framework</h2> | |
21 | ||
22 | <p>Members on objects are of two basic types: <i>methods</i>, | |
23 | which are Perl functions, and <i>attributes</i>, which are | |
24 | mutable data members. | |
25 | ||
26 | <p>Kinds of methods include: <i>derivations</i> which return | |
27 | a value only; <i>mutations</i> which change the state of the | |
28 | object (and which may or may not return a value); and | |
29 | <i>constructors</i>, which return a new object while not | |
30 | changing the state of the old object (if any.) Constructors | |
31 | which create a new object based on an old object are sometimes | |
32 | called <i>factories</i>. | |
33 | ||
34 | <p>Kinds of attributes include <i>event handlers</i>, which | |
35 | are like methods in that they are executable. Names of | |
36 | event handlers always begin with <tt>on_</tt>, and their data | |
37 | type is always a string (which is usually simply <tt>eval</tt>uated | |
38 | by Perl's built-in mechanism.) | |
39 | ||
40 | <h2>Part I. Utility Classes</h2> | |
41 | ||
42 | <ul> | |
43 | <li><b>Dice</b> - objects which can be rolled to yield a random integer | |
44 | <li><b>Distribution</b> - objects which can be picked to yield a random object | |
45 | <li><b>Fuses</b> - objects which maintain sequences of arbitrary future events | |
46 | </ul> | |
47 | ||
48 | <h3>Dice</h3> | |
49 | ||
50 | <ul> | |
51 | ||
52 | <p><u>Constructors</u><p> | |
53 | ||
54 | <li>Dice->new(<i>$count</i>, <i>$faces</i>, [<i>$bonus</i>]) | |
55 | <br>Creates and returns a new Dice object with the given attributes.<p> | |
56 | ||
57 | <li><i>$dice</i>->improve(<i>+$integer</i>) <b>(??? adjust_plus)</b> | |
58 | <br>Returns a new Dice object with an altered 'plus' bonus modifier. | |
59 | This does not affect the given <i>$dice</i> object.<p> | |
60 | ||
61 | <li><i>$dice</i>->improve_faces(<i>$factor</i>) <b>(??? scale_faces)</b> | |
62 | <br>Returns a new Dice object with its faces altered by a factor. | |
63 | This does not affect the given <i>$dice</i> object.<p> | |
64 | ||
65 | <p><u>Derivations</u><p> | |
66 | ||
67 | <li><i>$dice</i>->roll | |
68 | <br>Returns a random integer, the range and frequency distribution | |
69 | of which is determined by the number of dice, the number of faces | |
70 | on each die, and a 'plus' bonus modifier.<p> | |
71 | ||
72 | <p><u>Attributes</u><p> | |
73 | ||
74 | <li><i>$dice</i>->{count} | |
75 | <br>The number of dice the object represents.<p> | |
76 | <li><i>$dice</i>->{faces} | |
77 | <br>The number of faces represented on each die.<p> | |
78 | <li><i>$dice</i>->{plus} | |
79 | <br>The bonus modifier added to the basic dice roll.<p> | |
80 | </ul> | |
81 | ||
82 | <h3>Distribution</h3> | |
83 | ||
84 | <ul> | |
85 | ||
86 | <p><u>Constructors</u><p> | |
87 | ||
88 | <li>Distribution->new(<i>$probability</i> => <i>$object</i>, ...) | |
89 | <br>Creates and returns a new Distribution object with the given | |
90 | probability-to-object associations.<p> | |
91 | ||
92 | <p><u>Derivations</u><p> | |
93 | ||
94 | <li><i>$distribution</i>->pick | |
95 | <br>Returns a random object, the frequency distribution | |
96 | of which is determined by the Distribution object's probability | |
97 | percentages.<p> | |
98 | ||
99 | <p><u>Mutations</u><p> | |
100 | ||
101 | <li><i>$distribution</i>->scale(<i>$factor</i>) <b>(??? scale_probabilities)</b> | |
102 | <br>Alters all of the Distribution object's probability | |
103 | percentages by <i>$factor</i>, a rational number. | |
104 | </ul> | |
105 | ||
106 | <h3>Fuses</h3> | |
107 | ||
108 | <ul> | |
109 | ||
110 | <p><u>Constructors</u><p> | |
111 | ||
112 | <li>Fuses->new() | |
113 | <br>Creates and returns a new, empty Fuses object. Generally | |
114 | speaking, only one Fuses object is required for the entire engine.<p> | |
115 | ||
116 | <p><u>Derivations</u><p> | |
117 | ||
118 | <li>Fuses->current() | |
119 | <br>Returns a reference to a hashtable which describes the | |
120 | currently expiring fuse; used in scripts set up in fuses to | |
121 | modify the fuse for the next pass.<p> | |
122 | ||
123 | <p><u>Mutations</u><p> | |
124 | ||
125 | <li><i>$fuses</i>->tick | |
126 | <br>Causes all expired fuses to fire, and all non-expired fuses to | |
127 | come one time unit closer to firing.<p> | |
128 | <li><i>$fuses</i>->add(<i>$script</i>, <i>$fuse_duration</i>, <i>\@argument</i>) <b>(??? name)</b> | |
129 | <br>Adds a new fuse to the Fuses object.<p> | |
130 | </ul> | |
131 | ||
132 | <h2>Part II. Multiple Superclasses</h2> | |
133 | ||
134 | <ul> | |
135 | <li><b>Physical</b> - objects with a physical presence | |
136 | <li><b>Cloneable</b> - objects which can be copied and bred | |
137 | <li><b>Saveable</b> - objects which can be loaded and saved | |
138 | </ul> | |
139 | ||
140 | <p><u>Constructors</u><p>These object classes do not have constructors. | |
141 | ||
142 | <h3>Physical</h3> | |
143 | ||
144 | <ul> | |
145 | <p><u>Derivations</u><p> | |
146 | ||
147 | <li><i>$physical</i>->accusative | |
148 | <br>Returns the appropriate accusative pronoun (him, her, it.) | |
149 | Occurances of <tt><him></tt> in format strings is replaced | |
150 | by this.<p> | |
151 | <li><i>$physical</i>->possessive | |
152 | <br>Returns the appropriate possessive pronoun (his, her, its.) | |
153 | Occurances of <tt><his></tt> in format strings is replaced | |
154 | by this.<p> | |
155 | <li><i>$physical</i>->plural <b>(???)</b> | |
156 | <br>Returns the plural form of the name of the Physical object in question.<p> | |
157 | ||
158 | <li><i>$physical</i>->dist(<i>$physical</i>) | |
159 | <br>Returns the distance between the two Physical objects in question.<p> | |
160 | ||
161 | <li><i>$physical</i>->in_bounds([<i>$x</i>, <i>$y</i>]) | |
162 | <br>Returns a boolean value indicating whether this Physical object (or the | |
163 | given (<i>x</i>,<i>y</i>) coordinates, if any,) is within | |
164 | the bounds of it's Region object indicated in {location}.<p> | |
165 | ||
166 | <li><i>$physical</i>->screenx() | ->screeny() | |
167 | <br>Returns the <i>x</i>- (or <i>y</i>-) position on the screen where | |
168 | this Physical object would be displayed.<p> | |
169 | ||
170 | <p><u>Mutations</u><p> | |
171 | ||
172 | <li><i>$physical</i>->display() | |
173 | <br>Redraws the Physical object on the screen | |
174 | if it happens to be in the line of sight of the leader.<p> | |
175 | ||
176 | <li><i>$physical</i>->undisplay() | |
177 | <br>Erases the Physical object from the screen.<p> | |
178 | ||
179 | <li><i>$physical</i>->seen(<i>$physical</i>, "message") | |
180 | <br>Broadcasts an action taken by the Physical object to every | |
181 | receiving Physical object within line of sight and range.<p> | |
182 | ||
183 | <li><i>$physical</i>->hurt(<i>$force</i>, <i>$perpetrator</i>, <i>$body_part</i>) | |
184 | <br>Causes the Physical object to take damage. The amount of damage is | |
185 | indicated by $force, and the Actor which is causing the damage receives | |
186 | experience points, if any, should the Physical object be destroyed.<p> | |
187 | ||
188 | <li><i>$physical</i>->heal(<i>$force</i>, <i>$perpetrator</i>, <i>$body_part</i>) | |
189 | <br>Opposite of hurt. Not really implemented.<p> | |
190 | ||
191 | <p><u>Attributes</u><p> | |
192 | ||
193 | <li><i>$physical</i>->{name} | |
194 | <br>String containing the conversational name of the object.<p> | |
195 | ||
196 | <li><i>$physical</i>->{identity} | |
197 | <br>String containing the secret identity of the object.<p> | |
198 | ||
199 | <li><i>$physical</i>->{sex} | |
200 | <br>String containing the sex of the object; must currently be | |
201 | only one of: 'Male', 'Female', or 'Neuter'.<p> | |
202 | ||
203 | <li><i>$physical</i>->{proper} | |
204 | <br>Boolean indicating whether the object has a proper name.<p> | |
205 | ||
206 | <li><i>$physical</i>->{damage} | |
207 | <br>A Force object which indicates the potential damage caused | |
208 | to an opponent when this Physical object is used as a melee weapon.<p> | |
209 | ||
210 | <li><i>$physical</i>->{projectile} | |
211 | <br>A Force object which indicates the potential damage caused | |
212 | to an opponent when this Physical object is used as a thrown (not launched) weapon. | |
213 | (Launching weapons use a version of this Force modified via $force->{dice}->improve_faces().)<p> | |
214 | ||
215 | <li><i>$item</i>->{hitbonus} <b>(??? accuracy, Dice)</b> | |
216 | <br>An integer which indicates the accuracy bonus gained by this Physical object | |
217 | (be it an Item or an Actor) in combat (be it melee or missile.)<p> | |
218 | ||
219 | <li><i>$physical</i>->{displayed} <b>(??? _displayed)</b> | |
220 | <br>A boolean indicating whether this Physical object is already displayed | |
221 | on the screen, altered by the <tt>display</tt> and <tt>undisplay</tt> methods.<p> | |
222 | ||
223 | <li><i>$physical</i>->{lightsource} <b>(??? light_range, light_duration)</b> | |
224 | <br>A boolean indicating whether this Physical object acts as a source of light.<p> | |
225 | ||
226 | <li><i>$physical</i>->{count} | |
227 | <br>An integer which indicates how many instances of the same Physical object represents. | |
228 | For example, a single Physical object can represent a group of a dozen | |
229 | arrows, as long as the arrows do not differ from each other in any way.<p> | |
230 | ||
231 | <li><i>$physical</i>->{magic} <b>(??? A:is_magical)</b> | |
232 | <br>A boolean which indicates whether this Physical object is magical.<p> | |
233 | ||
234 | <li><i>$physical</i>->{curse} <b>(??? A:is_cursed, on_remove)</b> | |
235 | <br>A boolean which indicates whether this Physical object is cursed.<p> | |
236 | ||
237 | <li><i>$physical</i>->{lore} <b>(???)</b> | |
238 | <br>A string which contains some background information about the Physical object.<p> | |
239 | ||
240 | <li><i>$physical</i>->{weight} | |
241 | <br>An integer which indicates how heavy this Physical object is (assuming {count} | |
242 | is 1; to get the weight of the entire group multiply {count} by {weight}.)<p> | |
243 | ||
244 | <li><i>$physical</i>->{aeroweight} <b>(??? drag_coefficient)</b> | |
245 | <br>An integer which indicates the effective weight of this Physical object | |
246 | when it is thrown (tweaked due to aerodynamics, throwing motion, etc.)<p> | |
247 | ||
248 | <li><i>$physical</i>->{indestructible} <b>(??? on_destroy)</b> | |
249 | <br>A boolean indicating that the Physical object cannot be destroyed, | |
250 | typically found on edge walls in dungeons.<p> | |
251 | ||
252 | <li><i>$physical</i>->{durability} <b>(??? {max}{constitution})</b> | |
253 | <br>A boolean indicating how much damage the Physical object can at most sustain before | |
254 | it is destroyed.<p> | |
255 | ||
256 | <li><i>$physical</i>->{condition} <b>(??? {op}{constitution})</b> | |
257 | <br>A boolean indicating how much damage the Physical object can currently sustain before | |
258 | it is destroyed.<p> | |
259 | ||
260 | <li><i>$physical</i>->{resists} | |
261 | <br>A Resistances object, which describes which forces this Physical object is | |
262 | resistant or subsceptible to.<p> | |
263 | ||
264 | <li><i>$physical</i>->{location} | |
265 | <br>The Region object where this Physical object is located, if 'on the ground' | |
266 | and not being carried by an Actor.<p> | |
267 | ||
268 | <li><i>$physical</i>->{x} | ->{y} | |
269 | <br>The <i>x</i> (or <i>y</i>) coordinate of the Physical object, relative to | |
270 | the map in the object's {location} Region object.<p> | |
271 | ||
272 | <li><i>$physical</i>->{appearance} | |
273 | <br>A string which exists as a key in the global appearance table <tt>%::sc</tt>. | |
274 | Usually a fairly generic name like 'dragon' or 'fruit' will be found here.<p> | |
275 | ||
276 | <li><i>$physical</i>->{color} <b>(??? background, transparent)</b> | |
277 | <br>A string which exists as a key in the global color table.<p> | |
278 | ||
279 | ||
280 | </ul> | |
281 | ||
282 | <h2>Physical Classes</h2> | |
283 | ||
284 | <p>All of these classes are subclasses of Physical (among other things.) | |
285 | As such, they inherit the methods and attributes of Physical objects as | |
286 | described above. | |
287 | ||
288 | <ul> | |
289 | <li><b>Actor</b> - objects with agency | |
290 | <li><b>Item</b> - objects which can be carried | |
291 | <li><b>Terrain</b> - objects which be travelled on/around | |
292 | </ul> | |
293 | ||
294 | <h3>Actor</h3> | |
295 | ||
296 | <ul> | |
297 | ||
298 | <p><u>Constructors</u><p> | |
299 | ||
300 | <li>undocumented | |
301 | ||
302 | <p><u>Derivations</u><p> | |
303 | ||
304 | <li><i>$actor</i>->has(<i>$object</i>) | |
305 | <br>Determines whether the Actor object possesses a certain | |
306 | object (an Item or a Talent.) Returns said object if it is | |
307 | possessed, or <tt>undef</tt> if not. Talents are compared by | |
308 | name. Items are compared by full identity. If the Item argument | |
309 | has a {count}, then the Item in the Actor's inventory must be | |
310 | at least that {count}.<p> | |
311 | ||
312 | <p><u>Attributes</u><p> | |
313 | ||
314 | <li><i>$actor</i>->{hair_type} | ->{eye_type} | ->{skin_type} | |
315 | <br>Strings containing the short descriptions of the physical attributes of this Actor.<p> | |
316 | ||
317 | <li><i>$actor</i>->{hair_color} | ->{eye_color} | ->{skin_color} | |
318 | <br>Strings containing the color descriptions of the physical attributes of this Actor. | |
319 | These can map to screen colors for player characters.<p> | |
320 | ||
321 | <li><i>$actor</i>->{race} | |
322 | <br>String containing the name of the race of beings to which this Actor belongs. | |
323 | Not implemented particularly strongly.<p> | |
324 | ||
325 | <li><i>$actor</i>->{carcass} <b>(??? on_death)</b> | |
326 | <br>Boolean indicating whether this Actor leaves a carcass after it's death.<p> | |
327 | ||
328 | <pre> | |
329 | 'lit' => 0, # value *derived* from holding light source | |
330 | 'incapacitated' => 0, # value *derived* from operating stats | |
331 | </pre> | |
332 | ||
333 | <li><i>$actor</i>->{<i>effect</i>} <b>(???)</b> | |
334 | <br>Integer indicating how many turns of <i>effect</i> are left to apply to this Actor. | |
335 | <i>Effect</i> may be one of: | |
336 | ||
337 | 'blind', | |
338 | 'deaf', | |
339 | 'dumb', | |
340 | 'confused', | |
341 | 'paralyzed', | |
342 | 'placid', and | |
343 | 'blurry'.<p> | |
344 | ||
345 | <li><i>$actor</i>->{<i>bodypart</i>} | |
346 | <br>Item which is currently being wielded on the given body part. | |
347 | <i>Bodypart</i> may be one of: | |
348 | ||
349 | 'head', | |
350 | 'neck', | |
351 | 'shoulders', | |
352 | 'arms', | |
353 | 'rwrist', | |
354 | 'lwrist', | |
355 | 'hands', | |
356 | 'rfinger', | |
357 | 'lfinger', | |
358 | 'rhand', | |
359 | 'lhand', | |
360 | 'torso', | |
361 | 'waist', | |
362 | 'legs', | |
363 | 'rankle', | |
364 | 'lankle', and | |
365 | 'feet'.<p> | |
366 | ||
367 | <li><i>$actor</i>->{totalhits} | |
368 | <br>Integer measurement of the total number of damaging hits this Actor has taken, | |
369 | for statistical purposes.<p> | |
370 | ||
371 | <li><i>$actor</i>->{blockedhits} | |
372 | <br>Integer measurement of the total number of hits this Actor has sucessfully blocked, | |
373 | for statistical purposes.<p> | |
374 | ||
375 | <li><i>$actor</i>->{totalswings} | |
376 | <br>Integer measurement of the total number of attacks (hit or miss) this Actor has made, | |
377 | for statistical purposes.<p> | |
378 | ||
379 | <li><i>$actor</i>->{damagingswings} | |
380 | <br>Integer measurement of the total number of damaging attacks Actor has sucessfully made, | |
381 | for statistical purposes.<p> | |
382 | ||
383 | <li><i>$actor</i>->{party} | |
384 | <br>Party object to which the Actor belongs.<p> | |
385 | ||
386 | <li><i>$actor</i>->{encounter} | |
387 | <br>Encounter object which is started when another Actor interacts with this Actor.<p> | |
388 | ||
389 | <li><i>$actor</i>->{target} | |
390 | <br>Actor object which is this current target of this Actor.<p> | |
391 | ||
392 | <pre> | |
393 | 'combat' => 'Attack', # some creatures will Flee or Bargain instead | |
394 | 'noncombat' => 'Wander', | |
395 | 'body_aim' => 'dumb_biped', | |
396 | 'experience' => 0, | |
397 | 'belongings' => [], | |
398 | 'talents' => [], | |
399 | 'domhand' => 'rhand', | |
400 | 'on_move' => '', | |
401 | </pre> | |
402 | ||
403 | <li><i>$actor</i>->{max}{<i>stat</i>} | |
404 | <br>Integer maximum stat for this Actor. | |
405 | <i>Stat</i> may be one of: | |
406 | 'strength', | |
407 | 'constitution', | |
408 | 'dexterity', | |
409 | 'intelligence', | |
410 | 'spirit', and | |
411 | 'charisma'.<p> | |
412 | ||
413 | <li><i>$actor</i>->{op}{<i>stat</i>} | |
414 | <br>Integer operating (current) stat for this Actor. | |
415 | <i>Stat</i> may be one of: | |
416 | 'strength', | |
417 | 'constitution', | |
418 | 'dexterity', | |
419 | 'intelligence', | |
420 | 'spirit', and | |
421 | 'charisma'.<p> | |
422 | ||
423 | <p><u>Mutations</u><p> | |
424 | ||
425 | <li><i>$actor</i>->heal_all() | |
426 | <br>Sets the operating stats of the Actor to the maximum stats of the Actor.<p> | |
427 | ||
428 | <li><i>$actor</i>->remove_talents() | |
429 | <br>Remove all Talents with a skill level of 0% or less from this Actor.<p> | |
430 | ||
431 | <li><i>$actor</i>->adjust(<i>$stat</i>, <i>$delta</i>) | |
432 | <br>Change an operating stat by a certain amount, | |
433 | possibly killing the Actor in the process.<p> | |
434 | ||
435 | <li>others undocumented | |
436 | ||
437 | ||
438 | <p><u>Attributes</u><p> | |
439 | ||
440 | <li>undocumented | |
441 | ||
442 | </ul> | |
443 | ||
444 | <h3>Item</h3> | |
445 | ||
446 | <ul> | |
447 | ||
448 | <p><u>Constructors</u><p> | |
449 | ||
450 | <li><i>$item</i>->bunch(<i>$integer</i>) | |
451 | <br>Returns a new Item object with its {count} set to a specific | |
452 | integer. This does not affect the given <i>$item</i> object.<p> | |
453 | ||
454 | <p><u>Derivations</u><p> | |
455 | ||
456 | <li><i>$item</i>->combinable(<i>$item</i>) | |
457 | <br>Returns a boolean indicating whether the two Item objects | |
458 | are identical (and can be combined into a single Item by adding | |
459 | their counts together.)<p> | |
460 | ||
461 | <p><u>Mutations</u><p> | |
462 | ||
463 | <li><i>$item</i>->identify | |
464 | <br>Reveals the secret identity of this Item, | |
465 | setting the conversational name of it to the same.<p> | |
466 | ||
467 | <li><i>$item</i>->perceive_value(<i>$item</i>) | |
468 | <br>Causes this Item object to be perceived to be priced | |
469 | by a certain number of other Item objects, by it's owner.<p> | |
470 | ||
471 | <li><i>$item</i>->useup($consumer, [$delta]) <b>(???)</b> | |
472 | <br>Causes a certain number of this Item object to be used up | |
473 | in some way by an Actor object. Dangerously ambiguous, needs | |
474 | clarification.<p> | |
475 | ||
476 | <li><i>$item</i>->usemissile($consumer???) <b>(???)</b> | |
477 | <br>Causes one of this Item object to be used up | |
478 | in a missile-weapons way by an Actor object. Dangerously ambiguous, needs | |
479 | clarification.<p> | |
480 | ||
481 | <li><i>$item</i>->use($actor) | |
482 | <br>Causes this Item object to be used by it's owner. | |
483 | This will activate it's {talent}, or the {on_use} event | |
484 | if the talent is not provided.<p> | |
485 | ||
486 | <p><u>Attributes</u><p> | |
487 | ||
488 | <li><i>$item</i>->{worn_on} | |
489 | <br>A dictionary, mapping the body parts that this Item can be worn on | |
490 | as clothing or armor, to while body parts they cover when worn. | |
491 | Not fully implemented yet.<p> | |
492 | ||
493 | <li><i>$item</i>->{written} <b>(??? A:is_readable)</b> | |
494 | <br>A boolean indicating whether this Item can be read.<p> | |
495 | ||
496 | <li><i>$item</i>->{food} <b>(??? A:is_edible | is_consumable)</b> | |
497 | <br>A boolean indicating whether this Item can be eaten.<p> | |
498 | ||
499 | <li><i>$item</i>->{beverage} <b>(??? A:is_drinkable | is_consumable)</b> | |
500 | <br>A boolean indicating whether this Item can be drunk.<p> | |
501 | ||
502 | <li><i>$item</i>->{body} <b>(??? A:is_bodily)</b> | |
503 | <br>A boolean indicating whether this Item is part of its possessor's body. | |
504 | If this is the case, it will not be dropped after the Actor's death.<p> | |
505 | ||
506 | <li><i>$item</i>->{defense} <b>(??? worn_on -> covers -> composition)</b> | |
507 | <br>An integer which indicates the defense capability of this Item when worn.<p> | |
508 | ||
509 | <li><i>$item</i>->{charges} <b>(??? fuel)</b> | |
510 | <br>An integer which indicates how many charges this Item has left (wands | |
511 | and so forth.)<p> | |
512 | ||
513 | <li><i>$item</i>->{talent} <b>(??? consume_talent, on_use etc)</b> | |
514 | <br>A Talent object which indicates what thing this Item | |
515 | does when used or consumed (in the absence of any on_use or | |
516 | on_consume event).<p> | |
517 | ||
518 | <li><i>$item</i>->{value} <b>(??? _value)</b> | |
519 | <br>An Item object which indicates what the owner of this Item | |
520 | thinks it is worth.<p> | |
521 | ||
522 | <li><i>$item</i>->{soul} | |
523 | <br>An Actor object which represents the essence of a being | |
524 | encapsulated in this Item (figurines, pocket-monster cards, | |
525 | genies in lamps, etc.)<p> | |
526 | ||
527 | <p><u>Event Handlers</u><p> | |
528 | ||
529 | <li><i>$item</i>->{on_wear} | |
530 | <br>This event is triggered when an Actor puts on or takes off this Item.<p> | |
531 | ||
532 | <li><i>$item</i>->{on_consume} | |
533 | <br>This event is triggered when an Actor consumes (eats, drinks, applies) this Item.<p> | |
534 | ||
535 | <li><i>$item</i>->{on_use} | |
536 | <br>This event is triggered when an Actor uses this Item.<p> | |
537 | ||
538 | <li><i>$item</i>->{on_land} | |
539 | <br>This event is triggered after this Item is thrown or fired.<p> | |
540 | ||
541 | <li><i>$item</i>->{on_strike} | |
542 | <br>This event is triggered after this Item strikes someting in melee combat.<p> | |
543 | ||
544 | <li><i>$item</i>->{on_struck} | |
545 | <br>This event is triggered after this Item is struck by something.<p> | |
546 | ||
547 | </ul> | |
548 | ||
549 | <h3>Terrain</h3> | |
550 | ||
551 | <ul> | |
552 | <li>undocumented | |
553 | </ul> | |
554 | ||
555 | <h2>Non-Physical Classes</h2> | |
556 | ||
557 | <ul> | |
558 | <li><b>Talent</b> - skills or magic employed by objects | |
559 | <li><b>Region</b> - objects which maintain maps of objects | |
560 | <li><b>Encounter</b> - objects which describe meetings and surprises | |
561 | </ul> | |
562 | ||
563 | <h3>Talent</h3> | |
564 | ||
565 | <ul> | |
566 | <li><i>$talent</i>->{on_perform} | |
567 | <br>Script which is called when the Talent object is performed.<p> | |
568 | ||
569 | <li>others undocumented | |
570 | ||
571 | </ul> | |
572 | ||
573 | <h3>Region</h3> | |
574 | ||
575 | <ul> | |
576 | ||
577 | <p><u>Attributes</u><p> | |
578 | ||
579 | <li><i>$region</i>->{name} | |
580 | <br>String containing the name of the Region.<p> | |
581 | ||
582 | <li><i>$region</i>->{genpattern} | |
583 | <br>Establishes the logic used to fill out an unfilled Region | |
584 | object with random Terrain objects. Allowable genpatterns are: | |
585 | <ul> | |
586 | <li><tt>random</tt> - noise | |
587 | <li><tt>accretion</tt> - natural terrain | |
588 | <li><tt>recursive</tt> - unnatural terrain | |
589 | <li><tt>canned</tt> - based on provided map | |
590 | <li><tt>dungeon</tt> - room-and-hallway excavation | |
591 | <li><tt>gradient</tt> - gradient between several different distributions | |
592 | </ul> | |
593 | ||
594 | <li><i>$region</i>->{generated} | |
595 | <br>A boolean indicating whether terrain for this Region has been generated yet.<p> | |
596 | ||
597 | <li><i>$region</i>->{sizex} | ->{sizey} | |
598 | <br>Integers indicating how many cells wide/tall this Region is.<p> | |
599 | ||
600 | <li><i>$region</i>->{offsetx} | ->{offsety} | |
601 | <br>Integers indicating the scrolled position of the map of this Region when displayed.<p> | |
602 | ||
603 | <li><i>$region</i>->{worldx} | ->{worldy} | |
604 | <br>Integer coordinates indicating this Region's position in the world map.<p> | |
605 | ||
606 | <pre> | |
607 | 'map' => [], | |
608 | 'lit' => [], | |
609 | 'actors' => [], | |
610 | '_collmap' => [], | |
611 | 'outside' => $::sc{dark}, | |
612 | 'border' => undef, | |
613 | 'ambient' => undef, | |
614 | 'terraind' => undef, | |
615 | 'terrgradn' => undef, | |
616 | 'terrgrads' => undef, | |
617 | 'terrgrade' => undef, | |
618 | 'terrgradw' => undef, | |
619 | 'monsterd' => undef, | |
620 | 'itemd' => undef, | |
621 | 'music' => '', | |
622 | 'msg' => '', | |
623 | 'template' => '', | |
624 | 'legend' => '', | |
625 | </pre> | |
626 | ||
627 | <li>others undocumented | |
628 | </ul> | |
629 | ||
630 | <h3>Encounter</h3> | |
631 | ||
632 | <ul> | |
633 | ||
634 | <p><u>Constructors</u><p> | |
635 | ||
636 | <li>Encounter->new() | |
637 | <br>Basic constructor.<p> | |
638 | ||
639 | <li>Encounter->auto(<i>$actor</i>) | |
640 | <br>Automatic constructor.<p> | |
641 | ||
642 | <p><u>Mutations</u><p> | |
643 | ||
644 | <li><i>$encounter</i>->begin() | |
645 | <br>Causes the Encounter to begin, displaying menus with which the user can interact | |
646 | with the Actor(s).<p> | |
647 | ||
648 | <li><i>$encounter</i>->attack() | |
649 | <br>Called by begin(), causes the Encounter to degrade into attack.<p> | |
650 | ||
651 | <p><u>Attributes</u><p> | |
652 | ||
653 | <li><i>$encounter</i>->{actors} | |
654 | <br>A reference to an array of Actor objects who are hosting this Encounter. | |
655 | When the Encounter is attached to an Actor in the first place, that Actor is | |
656 | automatically injected into this list.<p> | |
657 | ||
658 | <li><i>$encounter</i>->{message} | |
659 | <br>A string displayed upon initiation of the Encounter.<p> | |
660 | ||
661 | <li><i>$encounter</i>->{lore} | |
662 | <br>A string displayed upon friendly communications.<p> | |
663 | ||
664 | <li><i>$encounter</i>->{persistent} | |
665 | <br>A boolean indicating whether the Encounter is persistent. If it is not persistent, | |
666 | it is removed after it is activated.<p> | |
667 | ||
668 | <li><i>$encounter</i>->{friendly} | |
669 | <br>A boolean indicating whether the Encounter is friendly.<p> | |
670 | ||
671 | <li><i>$encounter</i>->{itemseller} <b>(??? on Actor)</b> | |
672 | <br>A boolean indicating whether the host of the Encounter is willing to sell items.<p> | |
673 | ||
674 | <li><i>$encounter</i>->{itembuyer} <b>(??? on Actor)</b> | |
675 | <br>A boolean indicating whether the host of the Encounter is willing to buy items.<p> | |
676 | ||
677 | <li><i>$encounter</i>->{serviceseller} <b>(??? on Actor)</b> | |
678 | <br>A boolean indicating whether the host of the Encounter is willing to sell services (Talent | |
679 | applications).<p> | |
680 | ||
681 | <li><i>$encounter</i>->{servicebuyer} <b>(??? on Actor)</b> | |
682 | <br>A boolean indicating whether the host of the Encounter is willing to buy services.<p> | |
683 | ||
684 | </ul> | |
685 | ||
686 | </body> | |
687 | </html> |
0 | Object Model Reference | |
1 | ====================== | |
2 | ||
3 | ### CARPE DIEM v2000.11.10 | |
4 | ||
5 | * * * * * | |
6 | ||
7 | Introduction | |
8 | ------------ | |
9 | ||
10 | This document aims to be a brief but comprehensive overview and help | |
11 | guide to the object networks used in the [CARPE | |
12 | DIEM](http://www.catseye.mb.ca/games/carpe/) roguelike game engine. | |
13 | ||
14 | It is certainly incomplete and inaccurate in places, but is better than | |
15 | no documentation at all (knock on wood.) All information contained | |
16 | herein is subject to change, in terms of interface, naming, and | |
17 | implementation. Interfaces marked with **(???)** are extremely likely to | |
18 | change. | |
19 | ||
20 | Object Framework | |
21 | ---------------- | |
22 | ||
23 | Members on objects are of two basic types: *methods*, which are Perl | |
24 | functions, and *attributes*, which are mutable data members. | |
25 | ||
26 | Kinds of methods include: *derivations* which return a value only; | |
27 | *mutations* which change the state of the object (and which may or may | |
28 | not return a value); and *constructors*, which return a new object while | |
29 | not changing the state of the old object (if any.) Constructors which | |
30 | create a new object based on an old object are sometimes called | |
31 | *factories*. | |
32 | ||
33 | Kinds of attributes include *event handlers*, which are like methods in | |
34 | that they are executable. Names of event handlers always begin with | |
35 | `on_`, and their data type is always a string (which is usually simply | |
36 | `eval`uated by Perl's built-in mechanism.) | |
37 | ||
38 | Part I. Utility Classes | |
39 | ----------------------- | |
40 | ||
41 | - **Dice** - objects which can be rolled to yield a random integer | |
42 | - **Distribution** - objects which can be picked to yield a random | |
43 | object | |
44 | - **Fuses** - objects which maintain sequences of arbitrary future | |
45 | events | |
46 | ||
47 | ### Dice | |
48 | ||
49 | - Dice-\>new(*\$count*, *\$faces*, [*\$bonus*]) \ | |
50 | Creates and returns a new Dice object with the given attributes. | |
51 | - *\$dice*-\>improve(*+\$integer*) **(??? adjust\_plus)** \ | |
52 | Returns a new Dice object with an altered 'plus' bonus modifier. | |
53 | This does not affect the given *\$dice* object. | |
54 | - *\$dice*-\>improve\_faces(*\$factor*) **(??? scale\_faces)** \ | |
55 | Returns a new Dice object with its faces altered by a factor. This | |
56 | does not affect the given *\$dice* object. | |
57 | ||
58 | Derivations | |
59 | ||
60 | - *\$dice*-\>roll \ | |
61 | Returns a random integer, the range and frequency distribution of | |
62 | which is determined by the number of dice, the number of faces on | |
63 | each die, and a 'plus' bonus modifier. | |
64 | ||
65 | Attributes | |
66 | ||
67 | - *\$dice*-\>{count} \ | |
68 | The number of dice the object represents. | |
69 | - *\$dice*-\>{faces} \ | |
70 | The number of faces represented on each die. | |
71 | - *\$dice*-\>{plus} \ | |
72 | The bonus modifier added to the basic dice roll. | |
73 | ||
74 | ### Distribution | |
75 | ||
76 | - Distribution-\>new(*\$probability* =\> *\$object*, ...) \ | |
77 | Creates and returns a new Distribution object with the given | |
78 | probability-to-object associations. | |
79 | ||
80 | Derivations | |
81 | ||
82 | - *\$distribution*-\>pick \ | |
83 | Returns a random object, the frequency distribution of which is | |
84 | determined by the Distribution object's probability percentages. | |
85 | ||
86 | Mutations | |
87 | ||
88 | - *\$distribution*-\>scale(*\$factor*) **(??? scale\_probabilities)** | |
89 | \ | |
90 | Alters all of the Distribution object's probability percentages by | |
91 | *\$factor*, a rational number. | |
92 | ||
93 | ### Fuses | |
94 | ||
95 | - Fuses-\>new() \ | |
96 | Creates and returns a new, empty Fuses object. Generally speaking, | |
97 | only one Fuses object is required for the entire engine. | |
98 | ||
99 | Derivations | |
100 | ||
101 | - Fuses-\>current() \ | |
102 | Returns a reference to a hashtable which describes the currently | |
103 | expiring fuse; used in scripts set up in fuses to modify the fuse | |
104 | for the next pass. | |
105 | ||
106 | Mutations | |
107 | ||
108 | - *\$fuses*-\>tick \ | |
109 | Causes all expired fuses to fire, and all non-expired fuses to come | |
110 | one time unit closer to firing. | |
111 | - *\$fuses*-\>add(*\$script*, *\$fuse\_duration*, *\\@argument*) | |
112 | **(??? name)** \ | |
113 | Adds a new fuse to the Fuses object. | |
114 | ||
115 | Part II. Multiple Superclasses | |
116 | ------------------------------ | |
117 | ||
118 | - **Physical** - objects with a physical presence | |
119 | - **Cloneable** - objects which can be copied and bred | |
120 | - **Saveable** - objects which can be loaded and saved | |
121 | ||
122 | Constructors | |
123 | ||
124 | These object classes do not have constructors. | |
125 | ||
126 | ### Physical | |
127 | ||
128 | - *\$physical*-\>accusative \ | |
129 | Returns the appropriate accusative pronoun (him, her, it.) | |
130 | Occurances of `<him>` in format strings is replaced by this. | |
131 | - *\$physical*-\>possessive \ | |
132 | Returns the appropriate possessive pronoun (his, her, its.) | |
133 | Occurances of `<his>` in format strings is replaced by this. | |
134 | - *\$physical*-\>plural **(???)** \ | |
135 | Returns the plural form of the name of the Physical object in | |
136 | question. | |
137 | - *\$physical*-\>dist(*\$physical*) \ | |
138 | Returns the distance between the two Physical objects in question. | |
139 | - *\$physical*-\>in\_bounds([*\$x*, *\$y*]) \ | |
140 | Returns a boolean value indicating whether this Physical object (or | |
141 | the given (*x*,*y*) coordinates, if any,) is within the bounds of | |
142 | it's Region object indicated in {location}. | |
143 | - *\$physical*-\>screenx() | -\>screeny() \ | |
144 | Returns the *x*- (or *y*-) position on the screen where this | |
145 | Physical object would be displayed. | |
146 | ||
147 | Mutations | |
148 | ||
149 | - *\$physical*-\>display() \ | |
150 | Redraws the Physical object on the screen if it happens to be in the | |
151 | line of sight of the leader. | |
152 | - *\$physical*-\>undisplay() \ | |
153 | Erases the Physical object from the screen. | |
154 | - *\$physical*-\>seen(*\$physical*, "message") \ | |
155 | Broadcasts an action taken by the Physical object to every receiving | |
156 | Physical object within line of sight and range. | |
157 | - *\$physical*-\>hurt(*\$force*, *\$perpetrator*, *\$body\_part*) \ | |
158 | Causes the Physical object to take damage. The amount of damage is | |
159 | indicated by \$force, and the Actor which is causing the damage | |
160 | receives experience points, if any, should the Physical object be | |
161 | destroyed. | |
162 | - *\$physical*-\>heal(*\$force*, *\$perpetrator*, *\$body\_part*) \ | |
163 | Opposite of hurt. Not really implemented. | |
164 | ||
165 | Attributes | |
166 | ||
167 | - *\$physical*-\>{name} \ | |
168 | String containing the conversational name of the object. | |
169 | - *\$physical*-\>{identity} \ | |
170 | String containing the secret identity of the object. | |
171 | - *\$physical*-\>{sex} \ | |
172 | String containing the sex of the object; must currently be only one | |
173 | of: 'Male', 'Female', or 'Neuter'. | |
174 | - *\$physical*-\>{proper} \ | |
175 | Boolean indicating whether the object has a proper name. | |
176 | - *\$physical*-\>{damage} \ | |
177 | A Force object which indicates the potential damage caused to an | |
178 | opponent when this Physical object is used as a melee weapon. | |
179 | - *\$physical*-\>{projectile} \ | |
180 | A Force object which indicates the potential damage caused to an | |
181 | opponent when this Physical object is used as a thrown (not | |
182 | launched) weapon. (Launching weapons use a version of this Force | |
183 | modified via \$force-\>{dice}-\>improve\_faces().) | |
184 | - *\$item*-\>{hitbonus} **(??? accuracy, Dice)** \ | |
185 | An integer which indicates the accuracy bonus gained by this | |
186 | Physical object (be it an Item or an Actor) in combat (be it melee | |
187 | or missile.) | |
188 | - *\$physical*-\>{displayed} **(??? \_displayed)** \ | |
189 | A boolean indicating whether this Physical object is already | |
190 | displayed on the screen, altered by the `display` and `undisplay` | |
191 | methods. | |
192 | - *\$physical*-\>{lightsource} **(??? light\_range, light\_duration)** | |
193 | \ | |
194 | A boolean indicating whether this Physical object acts as a source | |
195 | of light. | |
196 | - *\$physical*-\>{count} \ | |
197 | An integer which indicates how many instances of the same Physical | |
198 | object represents. For example, a single Physical object can | |
199 | represent a group of a dozen arrows, as long as the arrows do not | |
200 | differ from each other in any way. | |
201 | - *\$physical*-\>{magic} **(??? A:is\_magical)** \ | |
202 | A boolean which indicates whether this Physical object is magical. | |
203 | - *\$physical*-\>{curse} **(??? A:is\_cursed, on\_remove)** \ | |
204 | A boolean which indicates whether this Physical object is cursed. | |
205 | - *\$physical*-\>{lore} **(???)** \ | |
206 | A string which contains some background information about the | |
207 | Physical object. | |
208 | - *\$physical*-\>{weight} \ | |
209 | An integer which indicates how heavy this Physical object is | |
210 | (assuming {count} is 1; to get the weight of the entire group | |
211 | multiply {count} by {weight}.) | |
212 | - *\$physical*-\>{aeroweight} **(??? drag\_coefficient)** \ | |
213 | An integer which indicates the effective weight of this Physical | |
214 | object when it is thrown (tweaked due to aerodynamics, throwing | |
215 | motion, etc.) | |
216 | - *\$physical*-\>{indestructible} **(??? on\_destroy)** \ | |
217 | A boolean indicating that the Physical object cannot be destroyed, | |
218 | typically found on edge walls in dungeons. | |
219 | - *\$physical*-\>{durability} **(??? {max}{constitution})** \ | |
220 | A boolean indicating how much damage the Physical object can at most | |
221 | sustain before it is destroyed. | |
222 | - *\$physical*-\>{condition} **(??? {op}{constitution})** \ | |
223 | A boolean indicating how much damage the Physical object can | |
224 | currently sustain before it is destroyed. | |
225 | - *\$physical*-\>{resists} \ | |
226 | A Resistances object, which describes which forces this Physical | |
227 | object is resistant or subsceptible to. | |
228 | - *\$physical*-\>{location} \ | |
229 | The Region object where this Physical object is located, if 'on the | |
230 | ground' and not being carried by an Actor. | |
231 | - *\$physical*-\>{x} | -\>{y} \ | |
232 | The *x* (or *y*) coordinate of the Physical object, relative to the | |
233 | map in the object's {location} Region object. | |
234 | - *\$physical*-\>{appearance} \ | |
235 | A string which exists as a key in the global appearance table | |
236 | `%::sc`. Usually a fairly generic name like 'dragon' or 'fruit' will | |
237 | be found here. | |
238 | - *\$physical*-\>{color} **(??? background, transparent)** \ | |
239 | A string which exists as a key in the global color table. | |
240 | ||
241 | Physical Classes | |
242 | ---------------- | |
243 | ||
244 | All of these classes are subclasses of Physical (among other things.) As | |
245 | such, they inherit the methods and attributes of Physical objects as | |
246 | described above. | |
247 | ||
248 | - **Actor** - objects with agency | |
249 | - **Item** - objects which can be carried | |
250 | - **Terrain** - objects which be travelled on/around | |
251 | ||
252 | ### Actor | |
253 | ||
254 | - undocumented | |
255 | ||
256 | Derivations | |
257 | ||
258 | - *\$actor*-\>has(*\$object*) \ | |
259 | Determines whether the Actor object possesses a certain object (an | |
260 | Item or a Talent.) Returns said object if it is possessed, or | |
261 | `undef` if not. Talents are compared by name. Items are compared by | |
262 | full identity. If the Item argument has a {count}, then the Item in | |
263 | the Actor's inventory must be at least that {count}. | |
264 | ||
265 | Attributes | |
266 | ||
267 | - *\$actor*-\>{hair\_type} | -\>{eye\_type} | -\>{skin\_type} \ | |
268 | Strings containing the short descriptions of the physical attributes | |
269 | of this Actor. | |
270 | - *\$actor*-\>{hair\_color} | -\>{eye\_color} | -\>{skin\_color} \ | |
271 | Strings containing the color descriptions of the physical attributes | |
272 | of this Actor. These can map to screen colors for player characters. | |
273 | - *\$actor*-\>{race} \ | |
274 | String containing the name of the race of beings to which this Actor | |
275 | belongs. Not implemented particularly strongly. | |
276 | - *\$actor*-\>{carcass} **(??? on\_death)** \ | |
277 | Boolean indicating whether this Actor leaves a carcass after it's | |
278 | death. | |
279 | ||
280 | 'lit' => 0, # value *derived* from holding light source | |
281 | 'incapacitated' => 0, # value *derived* from operating stats | |
282 | ||
283 | - *\$actor*-\>{*effect*} **(???)** \ | |
284 | Integer indicating how many turns of *effect* are left to apply to | |
285 | this Actor. *Effect* may be one of: 'blind', 'deaf', 'dumb', | |
286 | 'confused', 'paralyzed', 'placid', and 'blurry'. | |
287 | - *\$actor*-\>{*bodypart*} \ | |
288 | Item which is currently being wielded on the given body part. | |
289 | *Bodypart* may be one of: 'head', 'neck', 'shoulders', 'arms', | |
290 | 'rwrist', 'lwrist', 'hands', 'rfinger', 'lfinger', 'rhand', 'lhand', | |
291 | 'torso', 'waist', 'legs', 'rankle', 'lankle', and 'feet'. | |
292 | - *\$actor*-\>{totalhits} \ | |
293 | Integer measurement of the total number of damaging hits this Actor | |
294 | has taken, for statistical purposes. | |
295 | - *\$actor*-\>{blockedhits} \ | |
296 | Integer measurement of the total number of hits this Actor has | |
297 | sucessfully blocked, for statistical purposes. | |
298 | - *\$actor*-\>{totalswings} \ | |
299 | Integer measurement of the total number of attacks (hit or miss) | |
300 | this Actor has made, for statistical purposes. | |
301 | - *\$actor*-\>{damagingswings} \ | |
302 | Integer measurement of the total number of damaging attacks Actor | |
303 | has sucessfully made, for statistical purposes. | |
304 | - *\$actor*-\>{party} \ | |
305 | Party object to which the Actor belongs. | |
306 | - *\$actor*-\>{encounter} \ | |
307 | Encounter object which is started when another Actor interacts with | |
308 | this Actor. | |
309 | - *\$actor*-\>{target} \ | |
310 | Actor object which is this current target of this Actor. | |
311 | ||
312 | 'combat' => 'Attack', # some creatures will Flee or Bargain instead | |
313 | 'noncombat' => 'Wander', | |
314 | 'body_aim' => 'dumb_biped', | |
315 | 'experience' => 0, | |
316 | 'belongings' => [], | |
317 | 'talents' => [], | |
318 | 'domhand' => 'rhand', | |
319 | 'on_move' => '', | |
320 | ||
321 | - *\$actor*-\>{max}{*stat*} \ | |
322 | Integer maximum stat for this Actor. *Stat* may be one of: | |
323 | 'strength', 'constitution', 'dexterity', 'intelligence', 'spirit', | |
324 | and 'charisma'. | |
325 | - *\$actor*-\>{op}{*stat*} \ | |
326 | Integer operating (current) stat for this Actor. *Stat* may be one | |
327 | of: 'strength', 'constitution', 'dexterity', 'intelligence', | |
328 | 'spirit', and 'charisma'. | |
329 | ||
330 | Mutations | |
331 | ||
332 | - *\$actor*-\>heal\_all() \ | |
333 | Sets the operating stats of the Actor to the maximum stats of the | |
334 | Actor. | |
335 | - *\$actor*-\>remove\_talents() \ | |
336 | Remove all Talents with a skill level of 0% or less from this Actor. | |
337 | - *\$actor*-\>adjust(*\$stat*, *\$delta*) \ | |
338 | Change an operating stat by a certain amount, possibly killing the | |
339 | Actor in the process. | |
340 | - others undocumented | |
341 | ||
342 | Attributes | |
343 | ||
344 | - undocumented | |
345 | ||
346 | ### Item | |
347 | ||
348 | - *\$item*-\>bunch(*\$integer*) \ | |
349 | Returns a new Item object with its {count} set to a specific | |
350 | integer. This does not affect the given *\$item* object. | |
351 | ||
352 | Derivations | |
353 | ||
354 | - *\$item*-\>combinable(*\$item*) \ | |
355 | Returns a boolean indicating whether the two Item objects are | |
356 | identical (and can be combined into a single Item by adding their | |
357 | counts together.) | |
358 | ||
359 | Mutations | |
360 | ||
361 | - *\$item*-\>identify \ | |
362 | Reveals the secret identity of this Item, setting the conversational | |
363 | name of it to the same. | |
364 | - *\$item*-\>perceive\_value(*\$item*) \ | |
365 | Causes this Item object to be perceived to be priced by a certain | |
366 | number of other Item objects, by it's owner. | |
367 | - *\$item*-\>useup(\$consumer, [\$delta]) **(???)** \ | |
368 | Causes a certain number of this Item object to be used up in some | |
369 | way by an Actor object. Dangerously ambiguous, needs clarification. | |
370 | - *\$item*-\>usemissile(\$consumer???) **(???)** \ | |
371 | Causes one of this Item object to be used up in a missile-weapons | |
372 | way by an Actor object. Dangerously ambiguous, needs clarification. | |
373 | - *\$item*-\>use(\$actor) \ | |
374 | Causes this Item object to be used by it's owner. This will activate | |
375 | it's {talent}, or the {on\_use} event if the talent is not provided. | |
376 | ||
377 | Attributes | |
378 | ||
379 | - *\$item*-\>{worn\_on} \ | |
380 | A dictionary, mapping the body parts that this Item can be worn on | |
381 | as clothing or armor, to while body parts they cover when worn. Not | |
382 | fully implemented yet. | |
383 | - *\$item*-\>{written} **(??? A:is\_readable)** \ | |
384 | A boolean indicating whether this Item can be read. | |
385 | - *\$item*-\>{food} **(??? A:is\_edible | is\_consumable)** \ | |
386 | A boolean indicating whether this Item can be eaten. | |
387 | - *\$item*-\>{beverage} **(??? A:is\_drinkable | is\_consumable)** \ | |
388 | A boolean indicating whether this Item can be drunk. | |
389 | - *\$item*-\>{body} **(??? A:is\_bodily)** \ | |
390 | A boolean indicating whether this Item is part of its possessor's | |
391 | body. If this is the case, it will not be dropped after the Actor's | |
392 | death. | |
393 | - *\$item*-\>{defense} **(??? worn\_on -\> covers -\> composition)** \ | |
394 | An integer which indicates the defense capability of this Item when | |
395 | worn. | |
396 | - *\$item*-\>{charges} **(??? fuel)** \ | |
397 | An integer which indicates how many charges this Item has left | |
398 | (wands and so forth.) | |
399 | - *\$item*-\>{talent} **(??? consume\_talent, on\_use etc)** \ | |
400 | A Talent object which indicates what thing this Item does when used | |
401 | or consumed (in the absence of any on\_use or on\_consume event). | |
402 | - *\$item*-\>{value} **(??? \_value)** \ | |
403 | An Item object which indicates what the owner of this Item thinks it | |
404 | is worth. | |
405 | - *\$item*-\>{soul} \ | |
406 | An Actor object which represents the essence of a being encapsulated | |
407 | in this Item (figurines, pocket-monster cards, genies in lamps, | |
408 | etc.) | |
409 | ||
410 | Event Handlers | |
411 | ||
412 | - *\$item*-\>{on\_wear} \ | |
413 | This event is triggered when an Actor puts on or takes off this | |
414 | Item. | |
415 | - *\$item*-\>{on\_consume} \ | |
416 | This event is triggered when an Actor consumes (eats, drinks, | |
417 | applies) this Item. | |
418 | - *\$item*-\>{on\_use} \ | |
419 | This event is triggered when an Actor uses this Item. | |
420 | - *\$item*-\>{on\_land} \ | |
421 | This event is triggered after this Item is thrown or fired. | |
422 | - *\$item*-\>{on\_strike} \ | |
423 | This event is triggered after this Item strikes someting in melee | |
424 | combat. | |
425 | - *\$item*-\>{on\_struck} \ | |
426 | This event is triggered after this Item is struck by something. | |
427 | ||
428 | ### Terrain | |
429 | ||
430 | - undocumented | |
431 | ||
432 | Non-Physical Classes | |
433 | -------------------- | |
434 | ||
435 | - **Talent** - skills or magic employed by objects | |
436 | - **Region** - objects which maintain maps of objects | |
437 | - **Encounter** - objects which describe meetings and surprises | |
438 | ||
439 | ### Talent | |
440 | ||
441 | - *\$talent*-\>{on\_perform} \ | |
442 | Script which is called when the Talent object is performed. | |
443 | - others undocumented | |
444 | ||
445 | ### Region | |
446 | ||
447 | - *\$region*-\>{name} \ | |
448 | String containing the name of the Region. | |
449 | - *\$region*-\>{genpattern} \ | |
450 | Establishes the logic used to fill out an unfilled Region object | |
451 | with random Terrain objects. Allowable genpatterns are: | |
452 | - `random` - noise | |
453 | - `accretion` - natural terrain | |
454 | - `recursive` - unnatural terrain | |
455 | - `canned` - based on provided map | |
456 | - `dungeon` - room-and-hallway excavation | |
457 | - `gradient` - gradient between several different distributions | |
458 | ||
459 | - *\$region*-\>{generated} \ | |
460 | A boolean indicating whether terrain for this Region has been | |
461 | generated yet. | |
462 | - *\$region*-\>{sizex} | -\>{sizey} \ | |
463 | Integers indicating how many cells wide/tall this Region is. | |
464 | - *\$region*-\>{offsetx} | -\>{offsety} \ | |
465 | Integers indicating the scrolled position of the map of this Region | |
466 | when displayed. | |
467 | - *\$region*-\>{worldx} | -\>{worldy} \ | |
468 | Integer coordinates indicating this Region's position in the world | |
469 | map. | |
470 | ||
471 | 'map' => [], | |
472 | 'lit' => [], | |
473 | 'actors' => [], | |
474 | '_collmap' => [], | |
475 | 'outside' => $::sc{dark}, | |
476 | 'border' => undef, | |
477 | 'ambient' => undef, | |
478 | 'terraind' => undef, | |
479 | 'terrgradn' => undef, | |
480 | 'terrgrads' => undef, | |
481 | 'terrgrade' => undef, | |
482 | 'terrgradw' => undef, | |
483 | 'monsterd' => undef, | |
484 | 'itemd' => undef, | |
485 | 'music' => '', | |
486 | 'msg' => '', | |
487 | 'template' => '', | |
488 | 'legend' => '', | |
489 | ||
490 | - others undocumented | |
491 | ||
492 | ### Encounter | |
493 | ||
494 | - Encounter-\>new() \ | |
495 | Basic constructor. | |
496 | - Encounter-\>auto(*\$actor*) \ | |
497 | Automatic constructor. | |
498 | ||
499 | Mutations | |
500 | ||
501 | - *\$encounter*-\>begin() \ | |
502 | Causes the Encounter to begin, displaying menus with which the user | |
503 | can interact with the Actor(s). | |
504 | - *\$encounter*-\>attack() \ | |
505 | Called by begin(), causes the Encounter to degrade into attack. | |
506 | ||
507 | Attributes | |
508 | ||
509 | - *\$encounter*-\>{actors} \ | |
510 | A reference to an array of Actor objects who are hosting this | |
511 | Encounter. When the Encounter is attached to an Actor in the first | |
512 | place, that Actor is automatically injected into this list. | |
513 | - *\$encounter*-\>{message} \ | |
514 | A string displayed upon initiation of the Encounter. | |
515 | - *\$encounter*-\>{lore} \ | |
516 | A string displayed upon friendly communications. | |
517 | - *\$encounter*-\>{persistent} \ | |
518 | A boolean indicating whether the Encounter is persistent. If it is | |
519 | not persistent, it is removed after it is activated. | |
520 | - *\$encounter*-\>{friendly} \ | |
521 | A boolean indicating whether the Encounter is friendly. | |
522 | - *\$encounter*-\>{itemseller} **(??? on Actor)** \ | |
523 | A boolean indicating whether the host of the Encounter is willing to | |
524 | sell items. | |
525 | - *\$encounter*-\>{itembuyer} **(??? on Actor)** \ | |
526 | A boolean indicating whether the host of the Encounter is willing to | |
527 | buy items. | |
528 | - *\$encounter*-\>{serviceseller} **(??? on Actor)** \ | |
529 | A boolean indicating whether the host of the Encounter is willing to | |
530 | sell services (Talent applications). | |
531 | - *\$encounter*-\>{servicebuyer} **(??? on Actor)** \ | |
532 | A boolean indicating whether the host of the Encounter is willing to | |
533 | buy services. | |
534 |
0 | <html> | |
1 | <head> | |
2 | <title>Corona: Realm of Magic v2000.12.04 Documentation</title> | |
3 | <body bgcolor=#ffe0c0 text-#000000> | |
4 | ||
5 | <h1>Corona</h1> | |
6 | <h3>Realm of Magic</h3> | |
7 | <hr> | |
8 | <br>(c)2000 Cat's Eye Technologies. All rights reserved. | |
9 | <br>This software is OSI Certified Open Source Software. | |
10 | <br>See the file <a href="license.txt">license.txt</a> for license information. | |
11 | <p> | |
12 | ||
13 | <h2>Documentation</h2> | |
14 | ||
15 | <h3>Introduction</h3> | |
16 | ||
17 | <p><b>Corona: Realm of Magic</b> is a rogue-like computer | |
18 | role-playing game. | |
19 | ||
20 | <p>It serves as a platform on which the author can air his | |
21 | opinions about rogue-like games. | |
22 | ||
23 | <p>Many games throughout history have inspired and otherwise | |
24 | fed into <b>Corona</b>: the "old-school" games like Wumpus, | |
25 | Colossal Cave[/Adventure], and Dungeon[/Zork]; the classic | |
26 | roguelikes like Rogue itself, [Net]Hack, Moria[/Angband], as | |
27 | well as more recent roguelikes like AlphaMan, ZZT[/Megazeux] | |
28 | and ADOM; commercial CRPG's have some influence on it as | |
29 | well, from earlier game series like Ultima, Bard's Tale, and | |
30 | Pool of Radiance, to more recent ones like Final Fantasy, | |
31 | Dungeon Master [Amiga], and Diablo. | |
32 | ||
33 | <p>Corona is built on the <a href="../../doc/index.html">CARPE DIEM</a> game engine. | |
34 | (In fact CARPE DIEM evolved out of the original Corona.) | |
35 | ||
36 | <h3>Game Overview</h3> | |
37 | ||
38 | <p>You command a band (or bands) of adventurers who set out to find | |
39 | fame, fortune, riches, experience, and excitement in a relatively | |
40 | open-ended fashion. | |
41 | ||
42 | <h3>The World</h3> | |
43 | ||
44 | <p><b>Corona: Realm of Magoc</b> is set in a large fantasy universe, primarily on a newly- | |
45 | colonized and largely-unexplored continent where magic forces | |
46 | abound and various groups vy for power. | |
47 | ||
48 | <p>Civilization has barely yet gotten a foothold on this world that | |
49 | the explorers call Aelia, the new world, and the residents call | |
50 | Q'lob Stehlm, their ancestral homeland. | |
51 | ||
52 | <p>The larger settlements, like Bakersport and Saiphan, have become | |
53 | walled cities, keeping the noblemen and women safe from the | |
54 | rampaging hordes of grotesques and spririts, but leaving the | |
55 | farmers and peasants in the surrounding countryside without support; | |
56 | only their savvy and pioneer spirit remain to help protect them. | |
57 | ||
58 | <p>Meanwhile the nomadic native creatures are adapting to this | |
59 | intrusion, forming camps and strongholds of their own, as their | |
60 | far-superior knowledge of the countryside allows them to conceal | |
61 | their machinations extremely effectively. | |
62 | ||
63 | <p><hr> | |
64 | ||
65 | <h3>Ability Stats</h3> | |
66 | ||
67 | <p>All creatures, monsters and characters alike, have important | |
68 | attributes which are generated randomly upon their creation. | |
69 | These attributes are called <i>ability stats</i> and are chosen | |
70 | for human beings as the sum of three six-sided dice rolls (rolls | |
71 | for other beings are usually based on this as well, with certain | |
72 | tradeoffs.) | |
73 | ||
74 | <p>Each creature has a maximum value for each stat, as well as | |
75 | an operating value. An operating value lower than a maximum | |
76 | value indicates that the creature has sustained some manner of | |
77 | injury, be it physical, mental, or spiritual. When allowed to | |
78 | rest, operating stats will tend to heal back towards (but not | |
79 | beyond) the maximum stat. Operating stats can also be boosted | |
80 | above the maximum stat temporarily; they will fall back to the | |
81 | maximum stat in time. | |
82 | ||
83 | <p>The stats are: | |
84 | ||
85 | <ul> | |
86 | <p><li>STRENGTH. A measure of the raw muscular strength of the | |
87 | creature. Extreme pain and weakening agents such as poisons | |
88 | subtract from operating strength. An operating strength of | |
89 | zero indicates a creature is too weak to move. A negative | |
90 | operating strength will kill a creature by means of | |
91 | complete muscular atrophy. | |
92 | ||
93 | <p><li>CONSTITUTION. A measure of the physical makeup and | |
94 | endurance of the creature. Physical damage subtracts from | |
95 | operating constitution. An operating constitution of | |
96 | zero indicates a creature is too wounded to move. A negative | |
97 | operating constitution will kill a creature by means of fatal | |
98 | wounding. | |
99 | ||
100 | <p><li>DEXTERITY. A measure of the agility and overall | |
101 | swiftness of the creature. Constriction and cold attacks | |
102 | subtract from operating dexterity. An operating dexterity of | |
103 | zero indicates a creature is too constricted or frozen | |
104 | to move. A negative operating dexterity will kill a | |
105 | creature by means of strangulation or crushing. | |
106 | ||
107 | <p><li>INTELLIGENCE. A measure of the overall reasoning | |
108 | capabilities of the creature. Psychic attacks and critical | |
109 | head hits subtract from operating intelligence. An | |
110 | operating intelligence of zero indicates a creature is too | |
111 | senseless or brain-damaged to move. A negative operating | |
112 | intelligence will kill a creature by means of brain death. | |
113 | ||
114 | <p><li>SPIRIT. A measure of the overall spiritual | |
115 | balance of the creature, also related to the awareness, | |
116 | alacrity, and ego of the creature in general. Casting | |
117 | commonplace magical spells subtract from operating spirit. An | |
118 | operating spirit of zero indicates a creature is too | |
119 | exhausted or depressed to move. A negative operating | |
120 | spirit may subtract from the creature's maximum constitution. | |
121 | ||
122 | <p><li>CHARISMA. A measure of the likeableness and natural | |
123 | ease with the creature interacts with others, also related to | |
124 | the cunning of the creature. Peer/community pressure, disfiguring | |
125 | (acid) attacks, and acquiring unpleasant scents subtract from operating charisma. An | |
126 | operating charisma of zero indicates a creature is too bitter and | |
127 | twisted to do anything except inspire fear and loathing on sight. | |
128 | A negative operating charisma cannot be achieved. | |
129 | ||
130 | </ul> | |
131 | ||
132 | <h3>Combat System</h3> | |
133 | ||
134 | <h4>Melee Weapons</h4> | |
135 | ||
136 | <p>A character may only engage in melee with a weapon in their dominant | |
137 | hand unless they have a talent at two-handed combat. Ambidextrous | |
138 | characters may change what their dominant hand is at any time by | |
139 | switching stance. Without a weapon readied in the dominant hand, a | |
140 | creature will use its body weaponry (which in the case of humanoids | |
141 | consists by default of a single punch.) | |
142 | ||
143 | <p>A weapon has one or more attacks. For each attack several values | |
144 | are associated: the accuracy of the attack (bonus modifier added to | |
145 | the to-hit roll,) the potental damage (as dice with a bonus modifier,) | |
146 | and the makeup of the damaging blow in terms of elements, for | |
147 | determining scaled damage based on resistance. | |
148 | ||
149 | <p>In addition, the item itself is made of up elements. These elements | |
150 | determine (upon object creation) various properties of the weapon | |
151 | itself. These properties include color, density (scale of weight), | |
152 | and hardness (implemented as resistances on the item itself.) | |
153 | ||
154 | <p>A reflexive talent of weapon proficiency may be acquired and improved | |
155 | for each class of weapon (sword, quarterstaff, and so forth.) A | |
156 | successful use of this talent effectively gives the character a second | |
157 | to-hit roll. | |
158 | ||
159 | <h4>Armour</h4> | |
160 | ||
161 | <p>Armour, which includes clothing, are items which can be wielded on | |
162 | places other the hands. | |
163 | ||
164 | <p>Each piece of armour has a coverage value, which is the percent of | |
165 | the region it is worn on that it protects. | |
166 | It also has a condition value which describes how damaged it is. | |
167 | ||
168 | <p>In addition, the item itself is made of up elements. These elements | |
169 | determine (upon object creation) various properties of the armour | |
170 | itself. These properties include color, density (scale of weight), | |
171 | and hardness (implemented as resistances on the item itself.) | |
172 | ||
173 | <p>Initial condition (durability) is derived from weight (base weight | |
174 | times density.) Each strike of weapon on armour damages both the | |
175 | weapon and the armour. Each is subject to resistance from the other | |
176 | based on the elements in play. | |
177 | ||
178 | <p>A reflexive talent of armour use may be acquired and improved. | |
179 | for each class of weapon (sword, quarterstaff, and so forth.) A | |
180 | successful use of this talent effectively lets the roll on | |
181 | coverage to be taken again. | |
182 | ||
183 | <h3>Guilds</h3> | |
184 | ||
185 | <p>The residents of Aelia are no strangers to the idea of the division | |
186 | of labour. Many organizations, both religious and secular in nature, | |
187 | attract many adventurers who rise up their ranks in their pursuit of | |
188 | fame, power, and riches. These guilds provide training and standing | |
189 | for their members, for a fee. | |
190 | ||
191 | <p>Training involves both physical and personal development, as well | |
192 | as acquiring and improving talents. | |
193 | ||
194 | <p>With respect to personal training, each guild is associated with | |
195 | an ability stat called the prime desired stat. Some guilds also | |
196 | have another ability stat called the secondary desired stat. | |
197 | As a character climbs the ranks of a guild, at a rate determined | |
198 | by the guild, they are offered the opportunity to permanently | |
199 | enhance these ability stats. | |
200 | ||
201 | <p>With respect to learning talents, each guild protects a set of | |
202 | skills which it grants to its members as they rise in rank. | |
203 | While the use of these talents is not restricted to guild members, | |
204 | some are protected by the guild, such that the costs or chances of | |
205 | non-members acquiring them are prohibitive. Each talent is only | |
206 | available at a certain guild rank and above. Once acquired, the | |
207 | talent may also be improved in lieu of learning a new talent (if one | |
208 | is available.) | |
209 | ||
210 | <h4>The Basic Six Adventurer Guilds</h4> | |
211 | ||
212 | <ul> | |
213 | <p><li> | |
214 | SOLDIER. Warriors who are used to looking at the world from behind | |
215 | the haft of a drawn blade. It's not a pleasant or easy job but there's | |
216 | rarely a problem finding work. | |
217 | ||
218 | <p>The prime desired stat of the soldier is strength. Soldier talents | |
219 | include combat theory, assorted physical conditioning skills, | |
220 | weapon and armour familiarity, assorted combat manouevers, and some | |
221 | defense and survival techniques. | |
222 | ||
223 | <p><li>RANGER. Patrolmen who are relied upon to scout and explore the | |
224 | wilderness, often on horseback. Esteemed for upholding the "tough | |
225 | cookie" image through thick and thin. | |
226 | ||
227 | <p>The prime desired stat of the ranger is constitution. Ranger talents | |
228 | include wilderness survival, identifying flora and fauna, hunting | |
229 | and fishing, trapping and skinning, as well as archery and horseback | |
230 | riding. | |
231 | ||
232 | <p><li>THIEF. Dodgy, nervous individuals who like to think of themselves | |
233 | as simply pursuing alternative strategies to making a living. | |
234 | ||
235 | <p>The prime desired stat of the thief is dexterity. Thief talents | |
236 | include picking pockets, picking locks, detecting and disarming traps, | |
237 | moving around unseen and unheard, and surprising unwary creatures. | |
238 | ||
239 | <p><li>MAGE. A student and scientist of magic who seeks naught but to | |
240 | unlock the unseen forces of the universe. | |
241 | ||
242 | <p>The prime desired stat of the mage is intelligence. Mage talents | |
243 | include magic theory plus various spells. The mage guild protects | |
244 | a rather broad, general-purpose assortment of spells, rather than | |
245 | any specialization. The spell types include attack spells, defense | |
246 | spells, transmutation spells, and escape spells, with the occasional | |
247 | detection spell and such thrown in for good measure. | |
248 | ||
249 | <p><li>CLERIC. One of those that believe themselves to be the truly devout. | |
250 | Each cleric worships a diety and belongs to a religious establishment | |
251 | of fellow worshippers. | |
252 | ||
253 | <p>The prime desired stat of the cleric is spirit. Cleric talents | |
254 | include various prayers; exactly which ones depends on the diety, | |
255 | but the prayers often deal in protection, divination, and healing, | |
256 | as well as blessing and cursing items, people, and locations, and | |
257 | turning or commanding undead beings. | |
258 | ||
259 | <p><li>BARD. The entertainer who considers themself an artist with a taste | |
260 | for adventure; everyone loves a bard, and bards love to party. | |
261 | ||
262 | <p>The prime desired stat of the bard is charisma. The most notable | |
263 | bard talent is playing a musical instrument, but dancing and acting | |
264 | are also valuable skills, as are more academic studies like music | |
265 | theory. | |
266 | ||
267 | <p>Due to the magical nature of the world, experienced bards can impart | |
268 | spell-like mind-altering effects with their music, such as causing | |
269 | sensations of fellowship, enmity, fear, placidity, and drowsiness - | |
270 | but these enchanted tunes cannot affect those that cannot hear them. | |
271 | ||
272 | </ul> | |
273 | ||
274 | <h3>The Fifteen Extended Guilds</h3> | |
275 | ||
276 | <ul> | |
277 | <p><li>PALADIN. A holy crusader type. | |
278 | ||
279 | <p>The prime desired stat of the paladin is spirit, the secondary | |
280 | desired stat strength. Prerequisites for entrance to a paladin guild | |
281 | are an nth rank attainment as a cleric and an nth rank as a soldier. | |
282 | ||
283 | <p>Paladin talents include all cleric and soldier talents, as well as | |
284 | some powerful spiritual attack and defense forms at higher ranks. | |
285 | Notably they can learn versions of clerical healing prayers with no | |
286 | somatic components ('laying on hands'.) | |
287 | ||
288 | <p><li>DRUID. The holly-harvesting robed lot. | |
289 | ||
290 | <p>The prime desired stat of the druid is spirit, the secondary | |
291 | desired stat constitution. Prerequisites for entrance to a druidic | |
292 | circle are an nth rank attainment as a cleric and an nth rank as a | |
293 | ranger. | |
294 | ||
295 | <p>Druid talents include all cleric and ranger talents, as well as | |
296 | various druidic studies such as herbalism and geomancy. Druidic | |
297 | prayers include communing with plants and animals, and extremely | |
298 | powerful druids can control the weather as an awesome attack magic. | |
299 | ||
300 | <p><li>MONK. Cloistered clerics who devote their lives to upholding their | |
301 | faith and protecting their monestary. | |
302 | ||
303 | <p>The prime desired stat of the monk is spirit, the secondary | |
304 | desired stat dexterity. Prerequisites for entrance to a monk guild | |
305 | are an nth rank attainment as a cleric and an nth rank as a thief. | |
306 | ||
307 | <p>Monk talents include all cleric and thief talents, as well as | |
308 | unarmed combat techniques, identification of flora and fauna, | |
309 | herbalism, and wine-making. | |
310 | ||
311 | <p><li>NECROMANCER. The student of death, both how it can be caused and | |
312 | how it can be exploited by harnessing the darker forces of magic. | |
313 | ||
314 | <p>The prime desired stat of the necromancer is spirit, the secondary | |
315 | desired stat intelligence. Prerequisites for entrance to a necromancer | |
316 | guild are an nth rank attainment as a cleric and an nth rank as a mage. | |
317 | ||
318 | <p>Necromancer talents include all cleric and mage talents, as well as | |
319 | the ability to animate corpses into undead beings such as zombies and | |
320 | skeletons. | |
321 | ||
322 | <p><li>PREACHER. The expert in manufacturing consent. | |
323 | ||
324 | <p>The prime desired stat of the preacher is spirit, the secondary | |
325 | desired stat charisma. Prerequisites for entrance to a preacher | |
326 | guild are an nth rank attainment as a cleric and an nth rank as a | |
327 | bard. | |
328 | ||
329 | <p>Preacher talents include all cleric and bard talents, as well as | |
330 | the ability to attract and keep extremely large numbers of followers, | |
331 | filling them with zealotry such that they will do almost anything | |
332 | the preacher asks. | |
333 | ||
334 | <p><li>ACROBAT. One of few who perfect their agility to the point where they | |
335 | can make breathtaking physical manoeuvers. | |
336 | ||
337 | <p>The prime desired stat of the acrobat is dexterity, the secondary | |
338 | desired stat charisma. Prerequisites for entrance to an acrobat guild | |
339 | are an nth rank attainment as a thief and an nth rank as a bard. | |
340 | ||
341 | <p>Acrobat talents include all thief and bard talents, as well as | |
342 | proficiencies at climbing, jumping, tumbling, and vaulting. | |
343 | ||
344 | <p><li>ASSASSIN. The expert in the ways of causing death, it's that simple. | |
345 | ||
346 | <p>The prime desired stat of the assassin is dexterity, the secondary | |
347 | desired stat strength. Prerequisites for entrance to an assassin guild | |
348 | are an nth rank attainment as a thief and an nth rank as a soldier. | |
349 | ||
350 | <p>Assassin talents include all thief and soldier talents, as well as | |
351 | proficiencies at dispatching creatures quietly when sleeping or | |
352 | unaware, including the identification, use, and eventually concoction | |
353 | of poisons (and their application on weapons.) | |
354 | ||
355 | <p><li>NINJA. Experts in moving about unnoticed and often employed as spies, | |
356 | the ninja use subtle magicks to aid in their stealthy assaults. | |
357 | ||
358 | <p>The prime desired stat of the ninja is dexterity, the secondary | |
359 | desired stat intelligence. Prerequisites for entrance to a ninja guild | |
360 | are an nth rank attainment as a thief and an nth rank as a mage. | |
361 | ||
362 | <p>Ninja talents include all thief and mage talents, as well as a | |
363 | smattering of other talents drawn from several other guilds, with | |
364 | an emphasis on stealth, escape, and diffusing of the situation always. | |
365 | ||
366 | </ul> | |
367 | ||
368 | <h3>Moral Orientations</h3> | |
369 | ||
370 | <ul> | |
371 | <p><li>KIND. Creatures who help other creatures in distress. | |
372 | <p><li>PRAGMATIC. Creatures who do only what needs to be done to survive. | |
373 | <p><li>CRUEL. Creatures who take advantage of other creatures in distress. | |
374 | </ul> | |
375 | ||
376 | <h3>Ethical Orientations</h3> | |
377 | ||
378 | <ul> | |
379 | <p><li>LOYAL. Creatures who obey authority regardless of their own interests. | |
380 | <p><li>DETACHED. Creatures who obey authority when it matches their own interests. | |
381 | <p><li>OPPORTUNISTIC. Creatures who rarely heed the demands of authority. | |
382 | </ul> | |
383 | ||
384 | <h3>Dieties and Karma</h3> | |
385 | ||
386 | <ul> | |
387 | <p><li> Nod-Noll (Kind, Loyal.) | |
388 | <p><li> Gaea (Pragmatic, Loyal.) | |
389 | <p><li> Hosta (Cruel, Loyal.) | |
390 | <p><li> Creses (Kind, Detached.) | |
391 | <p><li> Atom (Pragmatic, Detached.) | |
392 | <p><li> (Cruel, Detached.) | |
393 | <p><li> (Kind, Opportunistic.) | |
394 | <p><li> Horned (Pragmatic, Opportunistic.) | |
395 | <p><li> (Cruel, Opportunistic.) | |
396 | </ul> | |
397 | ||
398 | <p><hr> | |
399 | ||
400 | <h3>To-do List</h3> | |
401 | ||
402 | <ul> | |
403 | <li>Heatherwood Abbey | |
404 | <li>Roads, Rivers | |
405 | <li>Cynhyrdunum: Mill | |
406 | <li>Barren Expanse: Abandoned Mines | |
407 | <li>Bakersport: Stables, Palace, Tavern, Carpenter, Tailor, etc. | |
408 | <li>Badlands | |
409 | <li>Desert | |
410 | <li>Saiphan | |
411 | <li>Pyramids | |
412 | <li>etc... | |
413 | </ul> | |
414 | ||
415 | <h3>History</h3> | |
416 | ||
417 | <p>v2000.10.05 - v2000.10.25 | |
418 | ||
419 | <ul> | |
420 | <li> See history.txt for CARPE DIEM | |
421 | </ul> | |
422 | ||
423 | <p>v2000.10.27 | |
424 | ||
425 | <ul> | |
426 | <li> added Grumchik Strongholds. | |
427 | </ul> | |
428 | ||
429 | <p>v2000.10.30 | |
430 | ||
431 | <ul> | |
432 | <li> added Grumchiks, many object factories/transformers. | |
433 | <li> added 'blur self' talent, 'create' and 'summon' talent factories. | |
434 | <li> any spell on any item (scroll of empathy etc.) | |
435 | <li> armour of statistic plus bonus (gloves of strength +1 etc.) | |
436 | <li> souls on items (card capture, animate corpse, and so forth.) | |
437 | <li> card capture spell. | |
438 | </ul> | |
439 | ||
440 | <p>v2000.11.02 | |
441 | ||
442 | <ul> | |
443 | <li> Items which alter talents when wielded ($item->oftalent.) | |
444 | <li> Items which alter resistances when wielded ($item->oftalent.) | |
445 | <li> gigantic growth spell. | |
446 | <li> resist cold spell (todo: resist x spell constructor) | |
447 | <li> polymorph spell (todo: polymorph into x spell constructor) | |
448 | <li> pull crude clubs & staves from trees, switch on Bakersport gate | |
449 | <li> different kinds of poisons (todo: poisoned item constructor.) | |
450 | </ul> | |
451 | ||
452 | <p>v2000.11.03 | |
453 | ||
454 | <ul> | |
455 | <li> different kinds of diseases | |
456 | </ul> | |
457 | ||
458 | <p>v2000.11.05 | |
459 | ||
460 | <ul> | |
461 | <li> bard spells (songof constructor.) Require instrument. | |
462 | <li> shuffled around and finalized the lowercase keymap. | |
463 | </ul> | |
464 | ||
465 | <p>v2000.11.06 | |
466 | ||
467 | <ul> | |
468 | <li> hot peppers. | |
469 | <li> $item->make($adj) constructor. | |
470 | <li> many new types of clothing/armour. | |
471 | <li> rudimentary openable/closeable doors. | |
472 | <li> polymorph into x and resist x spell constructors. | |
473 | <li> magic circles. | |
474 | <li> creatures camoflaged as innocent-looking items. | |
475 | <li> create clouds of x spell constructor (fog cloud, stinking cloud, etc.) | |
476 | <li> expanded world map. | |
477 | </ul> | |
478 | ||
479 | <p>v2000.11.10 | |
480 | ||
481 | <ul> | |
482 | <li> character backgrounds | |
483 | <li> giant beehives and giant honeybees are somewhat more realistic | |
484 | <li> desert-oriented terrain squares | |
485 | </ul> | |
486 | ||
487 | <p>v2000.11.18 | |
488 | ||
489 | <ul> | |
490 | <li> more terrain, more items in database, not in world yet | |
491 | <li> more spell constructors - touch of x, bolt of x, sphere of x | |
492 | <li> exploding projectile spell, wizard window spell | |
493 | <li> pixie pyrotechnics spell | |
494 | <li> detect x (e.g. magic) (terrain squares/items) spell constructor | |
495 | </ul> | |
496 | ||
497 | <p>v2000.12.04 | |
498 | ||
499 | <ul> | |
500 | <li> poisoned/diseased terrain square constructor | |
501 | </ul> | |
502 | ||
503 | </body> | |
504 | </html> |
0 | Corona | |
1 | ====== | |
2 | ||
3 | ### Realm of Magic | |
4 | ||
5 | * * * * * | |
6 | ||
7 | (c)2000 Cat's Eye Technologies. All rights reserved. | |
8 | This software is OSI Certified Open Source Software. | |
9 | See the file [license.txt](license.txt) for license information. | |
10 | ||
11 | Documentation | |
12 | ------------- | |
13 | ||
14 | ### Introduction | |
15 | ||
16 | **Corona: Realm of Magic** is a rogue-like computer role-playing game. | |
17 | ||
18 | It serves as a platform on which the author can air his opinions about | |
19 | rogue-like games. | |
20 | ||
21 | Many games throughout history have inspired and otherwise fed into | |
22 | **Corona**: the "old-school" games like Wumpus, Colossal | |
23 | Cave[/Adventure], and Dungeon[/Zork]; the classic roguelikes like Rogue | |
24 | itself, [Net]Hack, Moria[/Angband], as well as more recent roguelikes | |
25 | like AlphaMan, ZZT[/Megazeux] and ADOM; commercial CRPG's have some | |
26 | influence on it as well, from earlier game series like Ultima, Bard's | |
27 | Tale, and Pool of Radiance, to more recent ones like Final Fantasy, | |
28 | Dungeon Master [Amiga], and Diablo. | |
29 | ||
30 | Corona is built on the [CARPE DIEM](../../doc/index.html) game engine. | |
31 | (In fact CARPE DIEM evolved out of the original Corona.) | |
32 | ||
33 | ### Game Overview | |
34 | ||
35 | You command a band (or bands) of adventurers who set out to find fame, | |
36 | fortune, riches, experience, and excitement in a relatively open-ended | |
37 | fashion. | |
38 | ||
39 | ### The World | |
40 | ||
41 | **Corona: Realm of Magoc** is set in a large fantasy universe, primarily | |
42 | on a newly- colonized and largely-unexplored continent where magic | |
43 | forces abound and various groups vy for power. | |
44 | ||
45 | Civilization has barely yet gotten a foothold on this world that the | |
46 | explorers call Aelia, the new world, and the residents call Q'lob | |
47 | Stehlm, their ancestral homeland. | |
48 | ||
49 | The larger settlements, like Bakersport and Saiphan, have become walled | |
50 | cities, keeping the noblemen and women safe from the rampaging hordes of | |
51 | grotesques and spririts, but leaving the farmers and peasants in the | |
52 | surrounding countryside without support; only their savvy and pioneer | |
53 | spirit remain to help protect them. | |
54 | ||
55 | Meanwhile the nomadic native creatures are adapting to this intrusion, | |
56 | forming camps and strongholds of their own, as their far-superior | |
57 | knowledge of the countryside allows them to conceal their machinations | |
58 | extremely effectively. | |
59 | ||
60 | * * * * * | |
61 | ||
62 | ### Ability Stats | |
63 | ||
64 | All creatures, monsters and characters alike, have important attributes | |
65 | which are generated randomly upon their creation. These attributes are | |
66 | called *ability stats* and are chosen for human beings as the sum of | |
67 | three six-sided dice rolls (rolls for other beings are usually based on | |
68 | this as well, with certain tradeoffs.) | |
69 | ||
70 | Each creature has a maximum value for each stat, as well as an operating | |
71 | value. An operating value lower than a maximum value indicates that the | |
72 | creature has sustained some manner of injury, be it physical, mental, or | |
73 | spiritual. When allowed to rest, operating stats will tend to heal back | |
74 | towards (but not beyond) the maximum stat. Operating stats can also be | |
75 | boosted above the maximum stat temporarily; they will fall back to the | |
76 | maximum stat in time. | |
77 | ||
78 | The stats are: | |
79 | ||
80 | - STRENGTH. A measure of the raw muscular strength of the creature. | |
81 | Extreme pain and weakening agents such as poisons subtract from | |
82 | operating strength. An operating strength of zero indicates a | |
83 | creature is too weak to move. A negative operating strength will | |
84 | kill a creature by means of complete muscular atrophy. | |
85 | - CONSTITUTION. A measure of the physical makeup and endurance of the | |
86 | creature. Physical damage subtracts from operating constitution. An | |
87 | operating constitution of zero indicates a creature is too wounded | |
88 | to move. A negative operating constitution will kill a creature by | |
89 | means of fatal wounding. | |
90 | - DEXTERITY. A measure of the agility and overall swiftness of the | |
91 | creature. Constriction and cold attacks subtract from operating | |
92 | dexterity. An operating dexterity of zero indicates a creature is | |
93 | too constricted or frozen to move. A negative operating dexterity | |
94 | will kill a creature by means of strangulation or crushing. | |
95 | - INTELLIGENCE. A measure of the overall reasoning capabilities of the | |
96 | creature. Psychic attacks and critical head hits subtract from | |
97 | operating intelligence. An operating intelligence of zero indicates | |
98 | a creature is too senseless or brain-damaged to move. A negative | |
99 | operating intelligence will kill a creature by means of brain death. | |
100 | - SPIRIT. A measure of the overall spiritual balance of the creature, | |
101 | also related to the awareness, alacrity, and ego of the creature in | |
102 | general. Casting commonplace magical spells subtract from operating | |
103 | spirit. An operating spirit of zero indicates a creature is too | |
104 | exhausted or depressed to move. A negative operating spirit may | |
105 | subtract from the creature's maximum constitution. | |
106 | - CHARISMA. A measure of the likeableness and natural ease with the | |
107 | creature interacts with others, also related to the cunning of the | |
108 | creature. Peer/community pressure, disfiguring (acid) attacks, and | |
109 | acquiring unpleasant scents subtract from operating charisma. An | |
110 | operating charisma of zero indicates a creature is too bitter and | |
111 | twisted to do anything except inspire fear and loathing on sight. A | |
112 | negative operating charisma cannot be achieved. | |
113 | ||
114 | ### Combat System | |
115 | ||
116 | #### Melee Weapons | |
117 | ||
118 | A character may only engage in melee with a weapon in their dominant | |
119 | hand unless they have a talent at two-handed combat. Ambidextrous | |
120 | characters may change what their dominant hand is at any time by | |
121 | switching stance. Without a weapon readied in the dominant hand, a | |
122 | creature will use its body weaponry (which in the case of humanoids | |
123 | consists by default of a single punch.) | |
124 | ||
125 | A weapon has one or more attacks. For each attack several values are | |
126 | associated: the accuracy of the attack (bonus modifier added to the | |
127 | to-hit roll,) the potental damage (as dice with a bonus modifier,) and | |
128 | the makeup of the damaging blow in terms of elements, for determining | |
129 | scaled damage based on resistance. | |
130 | ||
131 | In addition, the item itself is made of up elements. These elements | |
132 | determine (upon object creation) various properties of the weapon | |
133 | itself. These properties include color, density (scale of weight), and | |
134 | hardness (implemented as resistances on the item itself.) | |
135 | ||
136 | A reflexive talent of weapon proficiency may be acquired and improved | |
137 | for each class of weapon (sword, quarterstaff, and so forth.) A | |
138 | successful use of this talent effectively gives the character a second | |
139 | to-hit roll. | |
140 | ||
141 | #### Armour | |
142 | ||
143 | Armour, which includes clothing, are items which can be wielded on | |
144 | places other the hands. | |
145 | ||
146 | Each piece of armour has a coverage value, which is the percent of the | |
147 | region it is worn on that it protects. It also has a condition value | |
148 | which describes how damaged it is. | |
149 | ||
150 | In addition, the item itself is made of up elements. These elements | |
151 | determine (upon object creation) various properties of the armour | |
152 | itself. These properties include color, density (scale of weight), and | |
153 | hardness (implemented as resistances on the item itself.) | |
154 | ||
155 | Initial condition (durability) is derived from weight (base weight times | |
156 | density.) Each strike of weapon on armour damages both the weapon and | |
157 | the armour. Each is subject to resistance from the other based on the | |
158 | elements in play. | |
159 | ||
160 | A reflexive talent of armour use may be acquired and improved. for each | |
161 | class of weapon (sword, quarterstaff, and so forth.) A successful use of | |
162 | this talent effectively lets the roll on coverage to be taken again. | |
163 | ||
164 | ### Guilds | |
165 | ||
166 | The residents of Aelia are no strangers to the idea of the division of | |
167 | labour. Many organizations, both religious and secular in nature, | |
168 | attract many adventurers who rise up their ranks in their pursuit of | |
169 | fame, power, and riches. These guilds provide training and standing for | |
170 | their members, for a fee. | |
171 | ||
172 | Training involves both physical and personal development, as well as | |
173 | acquiring and improving talents. | |
174 | ||
175 | With respect to personal training, each guild is associated with an | |
176 | ability stat called the prime desired stat. Some guilds also have | |
177 | another ability stat called the secondary desired stat. As a character | |
178 | climbs the ranks of a guild, at a rate determined by the guild, they are | |
179 | offered the opportunity to permanently enhance these ability stats. | |
180 | ||
181 | With respect to learning talents, each guild protects a set of skills | |
182 | which it grants to its members as they rise in rank. While the use of | |
183 | these talents is not restricted to guild members, some are protected by | |
184 | the guild, such that the costs or chances of non-members acquiring them | |
185 | are prohibitive. Each talent is only available at a certain guild rank | |
186 | and above. Once acquired, the talent may also be improved in lieu of | |
187 | learning a new talent (if one is available.) | |
188 | ||
189 | #### The Basic Six Adventurer Guilds | |
190 | ||
191 | - SOLDIER. Warriors who are used to looking at the world from behind | |
192 | the haft of a drawn blade. It's not a pleasant or easy job but | |
193 | there's rarely a problem finding work. | |
194 | ||
195 | The prime desired stat of the soldier is strength. Soldier talents | |
196 | include combat theory, assorted physical conditioning skills, weapon | |
197 | and armour familiarity, assorted combat manouevers, and some defense | |
198 | and survival techniques. | |
199 | ||
200 | - RANGER. Patrolmen who are relied upon to scout and explore the | |
201 | wilderness, often on horseback. Esteemed for upholding the "tough | |
202 | cookie" image through thick and thin. | |
203 | ||
204 | The prime desired stat of the ranger is constitution. Ranger talents | |
205 | include wilderness survival, identifying flora and fauna, hunting | |
206 | and fishing, trapping and skinning, as well as archery and horseback | |
207 | riding. | |
208 | ||
209 | - THIEF. Dodgy, nervous individuals who like to think of themselves as | |
210 | simply pursuing alternative strategies to making a living. | |
211 | ||
212 | The prime desired stat of the thief is dexterity. Thief talents | |
213 | include picking pockets, picking locks, detecting and disarming | |
214 | traps, moving around unseen and unheard, and surprising unwary | |
215 | creatures. | |
216 | ||
217 | - MAGE. A student and scientist of magic who seeks naught but to | |
218 | unlock the unseen forces of the universe. | |
219 | ||
220 | The prime desired stat of the mage is intelligence. Mage talents | |
221 | include magic theory plus various spells. The mage guild protects a | |
222 | rather broad, general-purpose assortment of spells, rather than any | |
223 | specialization. The spell types include attack spells, defense | |
224 | spells, transmutation spells, and escape spells, with the occasional | |
225 | detection spell and such thrown in for good measure. | |
226 | ||
227 | - CLERIC. One of those that believe themselves to be the truly devout. | |
228 | Each cleric worships a diety and belongs to a religious | |
229 | establishment of fellow worshippers. | |
230 | ||
231 | The prime desired stat of the cleric is spirit. Cleric talents | |
232 | include various prayers; exactly which ones depends on the diety, | |
233 | but the prayers often deal in protection, divination, and healing, | |
234 | as well as blessing and cursing items, people, and locations, and | |
235 | turning or commanding undead beings. | |
236 | ||
237 | - BARD. The entertainer who considers themself an artist with a taste | |
238 | for adventure; everyone loves a bard, and bards love to party. | |
239 | ||
240 | The prime desired stat of the bard is charisma. The most notable | |
241 | bard talent is playing a musical instrument, but dancing and acting | |
242 | are also valuable skills, as are more academic studies like music | |
243 | theory. | |
244 | ||
245 | Due to the magical nature of the world, experienced bards can impart | |
246 | spell-like mind-altering effects with their music, such as causing | |
247 | sensations of fellowship, enmity, fear, placidity, and drowsiness - | |
248 | but these enchanted tunes cannot affect those that cannot hear them. | |
249 | ||
250 | ### The Fifteen Extended Guilds | |
251 | ||
252 | - PALADIN. A holy crusader type. | |
253 | ||
254 | The prime desired stat of the paladin is spirit, the secondary | |
255 | desired stat strength. Prerequisites for entrance to a paladin guild | |
256 | are an nth rank attainment as a cleric and an nth rank as a soldier. | |
257 | ||
258 | Paladin talents include all cleric and soldier talents, as well as | |
259 | some powerful spiritual attack and defense forms at higher ranks. | |
260 | Notably they can learn versions of clerical healing prayers with no | |
261 | somatic components ('laying on hands'.) | |
262 | ||
263 | - DRUID. The holly-harvesting robed lot. | |
264 | ||
265 | The prime desired stat of the druid is spirit, the secondary desired | |
266 | stat constitution. Prerequisites for entrance to a druidic circle | |
267 | are an nth rank attainment as a cleric and an nth rank as a ranger. | |
268 | ||
269 | Druid talents include all cleric and ranger talents, as well as | |
270 | various druidic studies such as herbalism and geomancy. Druidic | |
271 | prayers include communing with plants and animals, and extremely | |
272 | powerful druids can control the weather as an awesome attack magic. | |
273 | ||
274 | - MONK. Cloistered clerics who devote their lives to upholding their | |
275 | faith and protecting their monestary. | |
276 | ||
277 | The prime desired stat of the monk is spirit, the secondary desired | |
278 | stat dexterity. Prerequisites for entrance to a monk guild are an | |
279 | nth rank attainment as a cleric and an nth rank as a thief. | |
280 | ||
281 | Monk talents include all cleric and thief talents, as well as | |
282 | unarmed combat techniques, identification of flora and fauna, | |
283 | herbalism, and wine-making. | |
284 | ||
285 | - NECROMANCER. The student of death, both how it can be caused and how | |
286 | it can be exploited by harnessing the darker forces of magic. | |
287 | ||
288 | The prime desired stat of the necromancer is spirit, the secondary | |
289 | desired stat intelligence. Prerequisites for entrance to a | |
290 | necromancer guild are an nth rank attainment as a cleric and an nth | |
291 | rank as a mage. | |
292 | ||
293 | Necromancer talents include all cleric and mage talents, as well as | |
294 | the ability to animate corpses into undead beings such as zombies | |
295 | and skeletons. | |
296 | ||
297 | - PREACHER. The expert in manufacturing consent. | |
298 | ||
299 | The prime desired stat of the preacher is spirit, the secondary | |
300 | desired stat charisma. Prerequisites for entrance to a preacher | |
301 | guild are an nth rank attainment as a cleric and an nth rank as a | |
302 | bard. | |
303 | ||
304 | Preacher talents include all cleric and bard talents, as well as the | |
305 | ability to attract and keep extremely large numbers of followers, | |
306 | filling them with zealotry such that they will do almost anything | |
307 | the preacher asks. | |
308 | ||
309 | - ACROBAT. One of few who perfect their agility to the point where | |
310 | they can make breathtaking physical manoeuvers. | |
311 | ||
312 | The prime desired stat of the acrobat is dexterity, the secondary | |
313 | desired stat charisma. Prerequisites for entrance to an acrobat | |
314 | guild are an nth rank attainment as a thief and an nth rank as a | |
315 | bard. | |
316 | ||
317 | Acrobat talents include all thief and bard talents, as well as | |
318 | proficiencies at climbing, jumping, tumbling, and vaulting. | |
319 | ||
320 | - ASSASSIN. The expert in the ways of causing death, it's that simple. | |
321 | ||
322 | The prime desired stat of the assassin is dexterity, the secondary | |
323 | desired stat strength. Prerequisites for entrance to an assassin | |
324 | guild are an nth rank attainment as a thief and an nth rank as a | |
325 | soldier. | |
326 | ||
327 | Assassin talents include all thief and soldier talents, as well as | |
328 | proficiencies at dispatching creatures quietly when sleeping or | |
329 | unaware, including the identification, use, and eventually | |
330 | concoction of poisons (and their application on weapons.) | |
331 | ||
332 | - NINJA. Experts in moving about unnoticed and often employed as | |
333 | spies, the ninja use subtle magicks to aid in their stealthy | |
334 | assaults. | |
335 | ||
336 | The prime desired stat of the ninja is dexterity, the secondary | |
337 | desired stat intelligence. Prerequisites for entrance to a ninja | |
338 | guild are an nth rank attainment as a thief and an nth rank as a | |
339 | mage. | |
340 | ||
341 | Ninja talents include all thief and mage talents, as well as a | |
342 | smattering of other talents drawn from several other guilds, with an | |
343 | emphasis on stealth, escape, and diffusing of the situation always. | |
344 | ||
345 | ### Moral Orientations | |
346 | ||
347 | - KIND. Creatures who help other creatures in distress. | |
348 | - PRAGMATIC. Creatures who do only what needs to be done to survive. | |
349 | - CRUEL. Creatures who take advantage of other creatures in distress. | |
350 | ||
351 | ### Ethical Orientations | |
352 | ||
353 | - LOYAL. Creatures who obey authority regardless of their own | |
354 | interests. | |
355 | - DETACHED. Creatures who obey authority when it matches their own | |
356 | interests. | |
357 | - OPPORTUNISTIC. Creatures who rarely heed the demands of authority. | |
358 | ||
359 | ### Dieties and Karma | |
360 | ||
361 | - Nod-Noll (Kind, Loyal.) | |
362 | - Gaea (Pragmatic, Loyal.) | |
363 | - Hosta (Cruel, Loyal.) | |
364 | - Creses (Kind, Detached.) | |
365 | - Atom (Pragmatic, Detached.) | |
366 | - (Cruel, Detached.) | |
367 | - (Kind, Opportunistic.) | |
368 | - Horned (Pragmatic, Opportunistic.) | |
369 | - (Cruel, Opportunistic.) | |
370 | ||
371 | * * * * * | |
372 | ||
373 | ### To-do List | |
374 | ||
375 | - Heatherwood Abbey | |
376 | - Roads, Rivers | |
377 | - Cynhyrdunum: Mill | |
378 | - Barren Expanse: Abandoned Mines | |
379 | - Bakersport: Stables, Palace, Tavern, Carpenter, Tailor, etc. | |
380 | - Badlands | |
381 | - Desert | |
382 | - Saiphan | |
383 | - Pyramids | |
384 | - etc... | |
385 | ||
386 | ### History | |
387 | ||
388 | v2000.10.05 - v2000.10.25 | |
389 | ||
390 | - See history.txt for CARPE DIEM | |
391 | ||
392 | v2000.10.27 | |
393 | ||
394 | - added Grumchik Strongholds. | |
395 | ||
396 | v2000.10.30 | |
397 | ||
398 | - added Grumchiks, many object factories/transformers. | |
399 | - added 'blur self' talent, 'create' and 'summon' talent factories. | |
400 | - any spell on any item (scroll of empathy etc.) | |
401 | - armour of statistic plus bonus (gloves of strength +1 etc.) | |
402 | - souls on items (card capture, animate corpse, and so forth.) | |
403 | - card capture spell. | |
404 | ||
405 | v2000.11.02 | |
406 | ||
407 | - Items which alter talents when wielded (\$item-\>oftalent.) | |
408 | - Items which alter resistances when wielded (\$item-\>oftalent.) | |
409 | - gigantic growth spell. | |
410 | - resist cold spell (todo: resist x spell constructor) | |
411 | - polymorph spell (todo: polymorph into x spell constructor) | |
412 | - pull crude clubs & staves from trees, switch on Bakersport gate | |
413 | - different kinds of poisons (todo: poisoned item constructor.) | |
414 | ||
415 | v2000.11.03 | |
416 | ||
417 | - different kinds of diseases | |
418 | ||
419 | v2000.11.05 | |
420 | ||
421 | - bard spells (songof constructor.) Require instrument. | |
422 | - shuffled around and finalized the lowercase keymap. | |
423 | ||
424 | v2000.11.06 | |
425 | ||
426 | - hot peppers. | |
427 | - \$item-\>make(\$adj) constructor. | |
428 | - many new types of clothing/armour. | |
429 | - rudimentary openable/closeable doors. | |
430 | - polymorph into x and resist x spell constructors. | |
431 | - magic circles. | |
432 | - creatures camoflaged as innocent-looking items. | |
433 | - create clouds of x spell constructor (fog cloud, stinking cloud, | |
434 | etc.) | |
435 | - expanded world map. | |
436 | ||
437 | v2000.11.10 | |
438 | ||
439 | - character backgrounds | |
440 | - giant beehives and giant honeybees are somewhat more realistic | |
441 | - desert-oriented terrain squares | |
442 | ||
443 | v2000.11.18 | |
444 | ||
445 | - more terrain, more items in database, not in world yet | |
446 | - more spell constructors - touch of x, bolt of x, sphere of x | |
447 | - exploding projectile spell, wizard window spell | |
448 | - pixie pyrotechnics spell | |
449 | - detect x (e.g. magic) (terrain squares/items) spell constructor | |
450 | ||
451 | v2000.12.04 | |
452 | ||
453 | - poisoned/diseased terrain square constructor | |
454 |