This Dokuwiki plugin facilitates the creation of web sites for role-playing games.
Every feature uses this syntax:
<roleplay mode="xxxxxx"> data here </roleplay>
<roleplay mode="dice_roller"/>
Configuration is done through a wiki page called roleplay_config, which is in the same namespace as the game turns.
<roleplay mode="config_turns"> game_name: My Amazing Game turn_idx: index turn_list: [001-010], name=Turn *num* turn_list: chapter[1-6], name=Chapter *num* turn_list: [011-?], name=Turn *num* book_start: chapter1,011,038,087,101,128,133,154 show_future_events:30 xp_chart:default:1000,3000,6000,10000,15000,21000 xp_chart:scooby:1250,2600 </roleplay> <roleplay mode="config_events"> type: _none,#FFFFFF type: _default,#FFFFFF type: _current_date,#DDFFDD type: season,#FFFFDD type: secular,#FFDDFF type: religious,#FFDDDD type: lunar,#DDDDFF </roleplay> <roleplay mode="config_calendar"> name: Sun year_len: 364 type: solar month_len: 36 year_len: 1944 week_len: 9 month: Onemonth, length=100 month: Twomonth, length=100 month: Threemonth, length=100 month: Fourmonth, length=100 </roleplay> <roleplay mode="config_calendar"> name: Special Moon month_len: 100 year_len: 400 month: Onemonth, length=100 month: Twomonth, length=100 month: Threemonth, length=100 month: Fourmonth, length=100 new_reference_date: 0-1-1 event: 1/1, Some holiday event: 2/1, Some other holiday event: 3/10, An important thing of some kind event_global: Mondays and Wednesdays are amazing! phase: full,ns1:ns2:full.png phase: new,ns1:ns2:1q.png phase: 1q,ns1:ns2:new.png phase: 3q,ns1:ns2:3q.png </roleplay> <roleplay mode="config_text"> turn_name_default: Chapter *num* end_note: It is [a *weather* *time*|*weather*|*time*][ on this *day_ord* day of *month*| in the month of *month*][, *year*][, *location*]. </roleplay>
game_name: The name of the game. This will appear at the top of every game turn.
turn_idx: The page containing a list of game turns.
turn_list: A list of page names containing turns. This field can contain numeric ranges. The name is what the turn is called in the header, and in wiki links. These pages are sequenced with “next” and “previous” links.
book_start: Use this to divide your game turns into books. In a turn list, turns will be listed in sections.
show_future_events: A number of upcoming in-game events to display at the bottom of the turn.
xp_chart: The number of experience points required to go up in level. The “default” entry applies to all characters. It may be set to “d20” to use the d20 system. Other entries apply to specific characters. This is useful for systems like AD&D, where each character class goes up in level at a different rate.
This is the definition of the solar year.
year_len: The number of days in a year. Leap years are not supported.
This defines a lunar calendar. There may be multiple moons, each with its own calendar. A summary of the lunar calendars appears at the bottom of each turn.
This feature may be used for turns, chapters or character journals. It produces a common layout, and a variety of useful footers.
<roleplay mode="turn_data"> turn: 15 title: Stuff Happens start: 1001/10/18 12:00 end: 1001/10/19 10:30 played_date: 09/22/2012 posted_date: 10/07/2012 weather: cold location: New York author: fred xp_fred: 1500 xp_velma: 1600:Nice job! xp_scooby: 1450 </roleplay> <roleplay mode="turn_start"/> Content goes here. <roleplay mode="turn_notes"/> Footnotes here. <roleplay mode="turn_end"/>
turn: Required. The number of the turn. This references the current page, which, in the above example, should have a name like “015.” To use a non-numeric page name, you can call the turn something like, “chapter2.”
title: Required. The title of the page. This will appear at the top of the page, and will be the page's “abstract” for the purpose of plug-ins and search results.
start: The start date and time of this story fragment, in game time.
end: The end date and time of this story fragment, in game time.
posted_date: The date this page was created, in real time. This date will show up at the top of the page.
played_date: The last date this game fragment was played, in real time. If this is included, the top of the page will show “Played” and “Posted” dates.
weather: The current weather during this game fragment.
location: The location where this game fragment takes place.
author: The person who wrote the turn.
xp_???: Experience points and optional notes for each player character.
<roleplay mode="turn_list"> base: zioth:turn list: chapter[1-6],[011-?] book_start: chapter1,011,038,087,101,128,133,154,169,187 short: false </roleplay> <roleplay mode="turn_list"> base: zioth:turn list: g[01-?] short: false </roleplay>
<roleplay mode="stats"> base: zioth:turn list: chapter[1-6],[011-?],g[01-?] summary: wordcount </roleplay> <roleplay mode="stats"> base: zioth:turn list: chapter[1-6],[011-?],g[01-?] chart: xp,wordcount,date,start,end,weather </roleplay>
3rd edition D&D classes or prestige classes.
<roleplay mode="class"> system:D&D3.5 bab:low fortitude:low reflex:low will:high levels:20 1:Bonus Feat, Learned, Diversification 4:Bonus Feat 8:Bonus Feat 12:Bonus Feat 16:Bonus Feat 20:Bonus Feat </roleplay>
Calendar based on configuration. If the config isn't in the current path, use the “config” parameter.
<roleplay mode="calendar"> config: roleplay:campaign:magewood:recaps:roleplay_config current: 2575-45-06 type:solar,sun </roleplay>
Requires the data plugin. Spells are added to the database, which can be searched using the data plugin.
Spells are laid out in a readable format on the page. Field names are arbitrary.
<roleplay mode="spell"> System: AD&D2 Name: Animal Spirit Focus School: Necromancy Level: Wizard 1 Range: Touch Components: V,S,M. Duration: 1 year Casting Time: 1d6 turns Area of Effect: 1 animal skull Saving Throw: Negates Author: Icewalker </roleplay>
Multiple character sheets:
<roleplay mode="charsheet"> no_default: true data Ardith: zioth:private:ardith:character_sheet data Arnell: zioth:private:arnell:character_sheet </roleplay>
Define one character sheet:
<roleplay mode="charsheet_inline"> function CPlayer() { this.attributes = { STR:9, DEX:15, CON:14, INT:18, WIS:7, CHA:10 }; this.classSkills = new Set( "appraise", "balance", "bluff", "concentration", "climb", "diplomacy", "disable device", "escape artist", "gather information", "hide", "jump", "move silently", "open lock", "ride", "search", "sleight of hand", "spellcraft", "swim", "tumble", "use magic device", "knowledge (arcana)", "knowledge (architecture and engineering)", "knowledge (dungeoneering)", "knowledge (geography)", "knowledge (history)", "knowledge (local)", "knowledge (nature)", "knowledge (nobility)", "knowledge (religion)", "knowledge (planes)", "knowledge (psionics)" ); this.skillRanks = { "appraise": 1, "balance": 1, "bluff": 1, "concentration": 5, "climb": 1, "diplomacy": 6, "disable device": 10, "escape artist": 1, "gather information": 1, "hide": 11, "jump": 1, "move silently": 11, "open lock": 11, "ride": 1, "search": 11, "sleight of hand": 1, "spellcraft": 6, "speak language": 1, "swim": 1, "tumble": 1, "use magic device": 12, "knowledge (arcana)": 9, "knowledge (local)": 5, "knowledge (natural philosophy)": 6, "knowledge (religion)": 8 }; this.feats = new Set( /*1*/ "exotic weapon proficiency (whip)", "weapon finesse", /*3*/ "combat expertise", /*6*/ "improved trip", /*9*/ "improved disarm" ); this.abilities = [ "Inspiration Points: 5", "Trapfinding", "Cunning Insight - competence bonus equal to int bonus to attack, damage or save (cost 1 inspiration).", "Cunning Knowledge - Add factotum level to a skill with at least one rank 1/day per skill (cost 1 inspiration).", "Brains over Brawn - Int modifier to dexterity and strength checks, including initiative (not incorporated into sheet yet).", "Cunning Defense - Int bonus to AC vs. one enemy for for 1 round (cost 1 inspiration).", "<del>Arcane Dilettante – 4 spells, 3rd level spell maximum. Caster Level 9.</del>", "<del>Opportunistic Piety - Heal (Level x 2 + Int. bonus) or turn undead (1 inspiration point), 3/day</del>", "Cunning Surge - Extra standard action for 3 inspiration points" ]; this.strings = { name: "Corbyn Wren", player: "Brendan Bridgeland", race: "Human", level: 9, "class": 'Factotum 9', hp: 38, bab: 6, experience: 0, save_will: 3, save_fortitude:3, save_reflex: 6, alignment: "CG", languages: "Rouch, Sarnam, Terradian, Elvan", skill_points: "122", age: "19", birthday: "", gender: "Male", size: "M", speed: 30, weight: "130lb", height: "5'7", skin: "white", hair: "straw colored", eyes: "hazel", religion: "Andrithan", hp_record: "8,1,2,6,8,7,3,1,2", attr_record: "STR,INT", description: "Corbyn is a 19 year old man with straw colored hair (indeed his thick locks greatly resemble a thatched roof upon his brow). He is quite thin and has rather spindly limbs that are nevertheless quite agile. Despite his youth, he wears the short robes of a scholar over his breeches and introduces himself as a tutor for hire. He prefers scarlet cloth for his robes and more pedestrian materials for his trousers. His eyes are hazel and his features unremarkable, giving him a face that is rather forgettable (but fortunately not unpleasant). He stands about 5'7 but often seems shorter than he is, due to a tendency to slouch when sitting. His limbs are quite long and his torso is considerably shorter than average. His boots are of dark leather and generally of quality make. He wears hardened leather armor under his cloak and robes, a habit he says he developed when he had to ride out to various houses each day to offer lessons in several locations. He carries a knife on his belt and a coiled whip on his left hip - to correct impolite serfs and poor students he offers with a wink. Following the rather dramatic events in the barony of late, he has also taken to carrying a crossbow and small elm buckler when he leaves his rooms for an extended period - in case the a riot should break or an army invade. His skin is fair, and his hands lack the calloused nature of a working man. He speaks Rouche without a trace of accent and appears to hale from Rang. The handle of his whip is emblazoned with the symbol of a raven with one bright blue feather. While affable enough, he seems inattentive and easily distracted.", errors: "" }; this.equipment = new CContainer("hide", true, new CWeapon( "equipped", true, "name", "light crossbow", "attribute", "DEX", "damage", "1d8", "range", 80, "weight", 4+1, "dmg_type", "P", "size", "M", "crit", "19x2", "desc", "10 bolts" ), new CWeapon( "equipped", true, "name", "whip", "attribute", "DEX", "damage", "1d3-1", "range", 0, "weight", 2, "dmg_type", "S", "size", "M", "crit", "20x2", "desc", "Nonlethal. 15ft reach." ), new CArmor( "equipped", true, "name", "leather", "ac_bonus", 2, "max_dex", 22, "penalty", 0, "spell_failure", "10%", "speed_penalty", 0, "weight", 15 ), new CArmor( "equipped", true, "name", "masterwork buckler", "ac_bonus", 1, "max_dex", 100, "penalty", 0, "spell_failure", "5%", "speed_penalty", 0, "weight", 5 ), new CContainer("type", "standard", "name", "Backpack", "weight", 2, new CItem("type", "standard", "name", "Rations", "weight", 5), new CItem("type", "standard", "name", "Three scholastic books", "weight", 9), new CItem("type", "standard", "name", "Knife", "weight", 1), new CItem("type", "clothing", "name", "Scholar's robes", "weight", 4), new CItem("type", "special", "name", "Lockpicks", "weight", 1) ), new CContainer("type", "standard", "name", "Small belt pouch", "weight", 1/2, // Treasure new CItem("type", "treasure", "name", "attles", "number", 20, "weight", 1/150), new CItem("type", "treasure", "name", "aglars", "number", 0, "weight", 1/72), new CItem("type", "treasure", "name", "diyars", "number", 0, "weight", 1/20) ), new CContainer("name", "stable cache", "ignore_weight", true, "hide", true, new CItem("type", "clothing", "name", "Large guard uniform", "number", 1, "weight", 5), new CItem("type", "clothing", "name", "Small guard uniform (torn in half)", "number", 1, "weight", 4), new CItem("type", "clothing", "name", "Plague Mask (crushed)", "number", 1, "weight", 1) ), new CContainer("name", "body", "ignore_weight", true, "hide", true, new CItem("type", "clothing", "name", "Traveler's outfit", "equipped", true, "weight", 4) ) ); } </roleplay>
TODO: Base off of new charsheet.
<roleplay mode="charsheet_data"> name: Some Guy rules: d&d3.5 attributes: STR:9,DEX:15,CON:14,INT:18,WIS:7,CHA:10 class_skills: appraise, balance, bluff, knowledge (arcana) skill_ranks: appraise: 1 skill_ranks: balance: 5 skill_ranks: bluff: 3 feat: exotic weapon proficiency (whip) feat: weapon finesse: Use dex instead of str for attacks ability: Trapfinding ability: Rage, 3/day: Go into a fit of rage player: Real Name race: Elf level: 3 class: Rogue 2, Fighter 1 base_hp: 9 bab: 2 experience: 0 save_will: 1 save_fortitude:1 save_reflex: 3 alignment: CG languages: Common, Elvan skill_points: 122 age: 19 birthday: 1/1/1950 gender: Male size: M speed: 30 weight: 130lb height: 5'7" skin: white hair: brown eyes: hazel religion: Follower of the Googly Eyed Monster hp_record: 6,1,2 attr_record: STR description: Some Guy has three arms and a nostril. errors: It's time to go up to level 4. ; Can define with name=value pairs, or use * to reference an item created out of this block. equipment: worn: *Light Crossbow equipment: worn: *Leather Armor equipment: worn: Robes, weight=4 equipment: worn: backpack, weight=2 equipment: backpack: Rations, number=5, weight=1 equipment: backpack: Three books, weight=9 equipment: backpack: Knife, weight=1 equipment: worn: belt pouch, weight=0.5 equipment: belt pouch: gp, number=50, weight=0.02 </roleplay> <roleplay mode="charsheet_equipment"> type: weapon,ranged equipped: true name: light crossbow damage: 1d8 range: 80 weight: 5 damage_type: P size: M critical: 19x2 description: Crossbow with 10 bolts </roleplay> <roleplay mode="charsheet_equipment"> type: armor equipped: true name: Leather Armor ac_bonus: 2 max_dex: 22 penalty: 0 spell_failure: 10% speed_penalty: 0 weight: 15 </roleplay>