git @ Cat's Eye Technologies Corona-Realm-of-Magic / rel_0_19_2014_0819
Convert HTML files to Markdown. catseye 8 years ago
8 changed file(s) with 1524 addition(s) and 1747 deletion(s). Raw diff Collapse all Expand all
+0
-143
doc/carpediem.html less more
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>&nbsp;<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
-411
doc/development.html less more
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
-688
doc/object_model.html less more
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>&lt;him&gt;</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>&lt;his&gt;</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
-505
src/corona/doc/corona.html less more
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