Difference between revisions of "UC MUD Code Planning"
From UtterChaos
(→Dimension tables) |
(→Fact tables) |
||
Line 28: | Line 28: | ||
===Fact tables=== | ===Fact tables=== | ||
Every fact table has a non-null primary key (not listed b/c I don't want to have to type "PK" over and over). If a column is a FK link to another table, it will be noted. | Every fact table has a non-null primary key (not listed b/c I don't want to have to type "PK" over and over). If a column is a FK link to another table, it will be noted. | ||
+ | |||
+ | ====Object tables==== | ||
+ | Objects and derivative tables | ||
{| border=1 | {| border=1 | ||
− | ! Table !! Columns !! Notes | + | ! Table !! Description !! Columns !! Notes |
|- | |- | ||
− | | Objects || | + | | Objects || All items start as objects. Objects can use actions. Objects have a capacity that defaults to 0 if unset || creator_id (FK to creators), creation date, mass/weight, capacity || |
|- | |- | ||
− | | | + | | Rooms || Rooms are objects that can contain creatures. Rooms should have an exit as an action. || max_size_id |
|- | |- | ||
− | | | + | | Creatures || Creatures are objects that can have stats || size_id, race_id (FK to races), name (can be blank) |
|- | |- | ||
− | | | + | | Characters || Characters are creatures controlled by a player || creature_id, name (unique), player_id, level, player_text || name should be equal to creature.name for creature.creature_id = character.creature_id |
|- | |- | ||
− | | | + | | Creators || Creators are characters that code the MUD || character_id (FK to characters), creator_class_id (FK to Creator Class), creator_start_date |
|- | |- | ||
− | | | + | | Players || Players are the link between characters by the same person. The player is probably not a creature || user_id, password (encrypted?), character_sort_order_id |
|- | |- | ||
− | | Items || | + | | Items || Items are non-creature objects, non-room objects || item_class, description |
|- | |- | ||
− | | | + | | Weapons || Weapons are items that have item_class "wieldable" |
|- | |- | ||
− | | | + | | Armor || |
|- | |- | ||
− | | | + | | |
+ | |} | ||
+ | |||
+ | ====Action tables==== | ||
+ | Actions and derivative tables | ||
+ | {| border=1 | ||
+ | ! Table !! Description !! Columns !! Notes | ||
|- | |- | ||
− | | | + | | Actions || |
|- | |- | ||
− | | | + | | Exits || |
|- | |- | ||
− | | | + | | Spells || |
|- | |- | ||
− | | | + | |} |
+ | ====Metadata tables==== | ||
+ | Tables of table information | ||
+ | {| border=1 | ||
+ | ! Table !! Description !! Columns !! Notes | ||
|- | |- | ||
− | | | + | | General Rooms || Single source of room description || description columns |
|- | |- | ||
− | | | + | | Metadata || Table information || table name, column name, PK_flag, FK_flag, FK_link (FK to metadata_id, self-referential) || Can we have this auto-generate? Based on system tables? |
|- | |- | ||
− | | | + | | Status adjustments || Temporary creature adjustments |
|- | |- | ||
− | | | + | | Racial adjustments || Permanent creature adjustments, (including stat adjustments?) || stat, stat_bonus, skill, skill_bonus |
|- | |- | ||
− | | | + | | Item personalization || Items that are different from standard according to the player || item_id (FK to items), character_id (FK to characters), new field name, description |
|- | |- | ||
− | | | + | | Item class || Different kinds of items || item_class_name, item_class_description || see [[UC_MUD_World_Planning#Items|Items]] for list |
|- | |- | ||
− | | | + | | Guilds || In-game guild list || guild_name, guild_chat_id |
|- | |- | ||
− | | | + | | Guild Membership Requirements || skill levels required for creature membership in a guild || guild_id , skill_id, minimum_skill_level |
|- | |- | ||
− | | | + | | Skills || In-game skill list || skill_name, guild_requirement (null = no guild membership required to learn skill) |
|- | |- | ||
− | | | + | | Wizard Class || class_name, permissions |
|- | |- | ||
− | | | + | | Player Races || || race_id (FK to races), player race boolean, elite player race boolean |
|- | |- | ||
− | | | + | | Races || creature groups || size limitations, racial_group_id (FK to racial groups) || stat adjustments covered by racial adjustment table? |
|- | |- | ||
− | | | + | | Racial group || superclass of races || description, size limitations |
+ | |- | ||
+ | | Sizes || different sizes of creatures || size_name, size_order || 1=tiny (bug), 2=small (halfling), 3=medium (elf), 4=large (ogre), 5=huge (dragon) | ||
+ | |- | ||
+ | | Random monster generation parameters || necessary information for generating random monsters || area_id, | ||
+ | |- | ||
+ | | Areas || areas are groups of rooms used for wandering monster limitations. areas can overlap || area_name, description || | ||
+ | |- | ||
+ | | Character sort orders || Options for players to sort list of characters || sort column, asc/desc | ||
+ | |- | ||
+ | | | ||
|} | |} | ||
Revision as of 16:45, 25 October 2011
Contents
Interface and code
- Web based?
- AJAX?
- Rails?
- Ruby?
Brainstorming
- Have defined sections of the page for basic ways to interact with game
- Room/environment view box
- Inventory
- Item view
- Other characters/NPCs
- separate from room? or basically like the room is a container and a subwindow that shows what's in the room--items, players, npcs. Things #an go in and out without changing the view of the environment.
- Combat
- Conversations
- Include emotes here? basically, an action window?
- Split between chat lines/tells/room actions? If we have chat lines/tells
- Obvious and non-obvious methods of interaction
- Obvious methods (go north, wield sword, don armor, press button) as clickable links
- Non-obvious methods not displayed, but given an empty text box to input commands
- Way to script things?
- Mobile site?
- Telnet option
- Web interface a wrapper around all information given, but with traditional telnet interface of many lines coming at you?
- Or telnet interface with a text-based browser style? Keep the different windows?
Database
Fact tables
Every fact table has a non-null primary key (not listed b/c I don't want to have to type "PK" over and over). If a column is a FK link to another table, it will be noted.
Object tables
Objects and derivative tables
Table | Description | Columns | Notes |
---|---|---|---|
Objects | All items start as objects. Objects can use actions. Objects have a capacity that defaults to 0 if unset | creator_id (FK to creators), creation date, mass/weight, capacity | |
Rooms | Rooms are objects that can contain creatures. Rooms should have an exit as an action. | max_size_id | |
Creatures | Creatures are objects that can have stats | size_id, race_id (FK to races), name (can be blank) | |
Characters | Characters are creatures controlled by a player | creature_id, name (unique), player_id, level, player_text | name should be equal to creature.name for creature.creature_id = character.creature_id |
Creators | Creators are characters that code the MUD | character_id (FK to characters), creator_class_id (FK to Creator Class), creator_start_date | |
Players | Players are the link between characters by the same person. The player is probably not a creature | user_id, password (encrypted?), character_sort_order_id | |
Items | Items are non-creature objects, non-room objects | item_class, description | |
Weapons | Weapons are items that have item_class "wieldable" | ||
Armor | |||
Action tables
Actions and derivative tables
Table | Description | Columns | Notes |
---|---|---|---|
Actions | |||
Exits | |||
Spells |
Metadata tables
Tables of table information
Table | Description | Columns | Notes |
---|---|---|---|
General Rooms | Single source of room description | description columns | |
Metadata | Table information | table name, column name, PK_flag, FK_flag, FK_link (FK to metadata_id, self-referential) | Can we have this auto-generate? Based on system tables? |
Status adjustments | Temporary creature adjustments | ||
Racial adjustments | Permanent creature adjustments, (including stat adjustments?) | stat, stat_bonus, skill, skill_bonus | |
Item personalization | Items that are different from standard according to the player | item_id (FK to items), character_id (FK to characters), new field name, description | |
Item class | Different kinds of items | item_class_name, item_class_description | see Items for list |
Guilds | In-game guild list | guild_name, guild_chat_id | |
Guild Membership Requirements | skill levels required for creature membership in a guild | guild_id , skill_id, minimum_skill_level | |
Skills | In-game skill list | skill_name, guild_requirement (null = no guild membership required to learn skill) | |
Wizard Class | class_name, permissions | ||
Player Races | race_id (FK to races), player race boolean, elite player race boolean | ||
Races | creature groups | size limitations, racial_group_id (FK to racial groups) | stat adjustments covered by racial adjustment table? |
Racial group | superclass of races | description, size limitations | |
Sizes | different sizes of creatures | size_name, size_order | 1=tiny (bug), 2=small (halfling), 3=medium (elf), 4=large (ogre), 5=huge (dragon) |
Random monster generation parameters | necessary information for generating random monsters | area_id, | |
Areas | areas are groups of rooms used for wandering monster limitations. areas can overlap | area_name, description | |
Character sort orders | Options for players to sort list of characters | sort column, asc/desc | |
Dimension tables
Where X and Y are items in different fact tables.
- If X will have at most one of Y, then X should have a foreign key to Y's primary key (noted above)
- If X will always have one Y, then that foreign key should be constrained to not null
- If X can have many Y, and Y can have many X, then X and Y need a dimension table. Said table should consist of only two items: the primary keys of X and Y
X | Y | This represents ... |
---|---|---|
Characters | Skills | |
Characters | Guilds | |
Characters | Status adjustments | |
Characters | Racial adjustments | |
Actions | Meta-table item | |
Area | Room instance | |
Items | Item class | |
General room | Room | |
Characters | Spells | |
Items | Spells | |
Character sort order | Player |
Working tables
Temp tables to be used while player is logged in, dropped after/at reboot
- Inventory? How to persist, write to more permanent table?
- Status that wears off
Table brainstorming
- Everything as an object
- Rooms are containers
- Characters and Monsters/NPCs modeled the same, also containers
- Object table includes very basic information common to all objects. PK/FK link to other tables
- All actions have common ties
- Actions include spells and attacks, but also skills, emotes, buying, etc.
- Any interaction with an object, including yourself. Leveling up is an action.
- Not all actions can be called directly. Some can only be called by computer/other action. This flag can be one of the common ties
- Actions PK/FK link to other tables to further define them
- Are actions also items? Or can items have actions? Or can items have access to a class of actions?
- Classes of items/actions
- Clearly defined definitions of items and actions. Adding a new item/action must go into one of these groups. Adding a new class rearranges the DB a bit.
- Subclasses/Superclasses can be defined to combine/narrow things down. Probably superclasses are more likely, to make things have only one class?
Interaction
- Modeling NPCs as computer-controlled PCs
- Objects with built in calls for actions?
- Characters as special kinds of items?
- Rooms as special kinds of items?