diff options
author | Bardur Arantsson <bardur@scientician.net> | 2018-03-25 20:07:30 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2018-03-25 20:07:30 +0200 |
commit | 3a34d1b2a24c055d42f27b7844c4d20ec8c20af7 (patch) | |
tree | 21bf15d76a97b14c594c579db20dde4376b7769b /src/game.cc | |
parent | 305927503332cc1ea4bcb838f53e1401499a4ee2 (diff) |
Refactor powers to an associative container
This affords more flexibility when adding/removing powers.
Diffstat (limited to 'src/game.cc')
-rw-r--r-- | src/game.cc | 768 |
1 files changed, 768 insertions, 0 deletions
diff --git a/src/game.cc b/src/game.cc index 284c9ccc..d0962015 100644 --- a/src/game.cc +++ b/src/game.cc @@ -1,3 +1,771 @@ #include "game.hpp" +#include <stats.hpp> + Game *game; + +/** + * Default constructor + */ +Game::Game() +{ + // Initialize the available player powers + powers = std::unordered_map<int, std::shared_ptr<power_type>> { + { + PWR_SPIT_ACID, + std::make_shared<power_type>( + "spit acid", + "You can spit acid.", + "You gain the ability to spit acid.", + "You lose the ability to spit acid.", + power_activation { + 9, 9, A_DEX, 15 + } + ), + }, + { + PWR_BR_FIRE, + std::make_shared<power_type>( + "fire breath", + "You can breath fire.", + "You gain the ability to breathe fire.", + "You lose the ability to breathe fire.", + power_activation { + 20, 10, A_CON, 18 + } + ), + }, + { + PWR_HYPN_GAZE, + std::make_shared<power_type>( + "hypnotic gaze", + "Your gaze is hypnotic.", + "Your eyes look mesmerising...", + "Your eyes look uninteresting.", + power_activation { + 12, 12, A_CHR, 18 + } + ), + }, + { + PWR_TELEKINES, + std::make_shared<power_type>( + "telekinesis", + "You are telekinetic.", + "You gain the ability to move objects telekinetically.", + "You lose the ability to move objects telekinetically.", + power_activation { + 9, 9, A_WIS, 14 + } + ), + }, + { + PWR_VTELEPORT, + std::make_shared<power_type>( + "teleport", + "You can teleport at will.", + "You gain the power of teleportation at will.", + "You lose the power of teleportation at will.", + power_activation { + 7, 7, A_WIS, 15 + } + ), + }, + { + PWR_MIND_BLST, + std::make_shared<power_type>( + "mind blast", + "You can mind blast your enemies.", + "You gain the power of Mind Blast.", + "You lose the power of Mind Blast.", + power_activation { + 5, 3, A_WIS, 15 + } + ), + }, + { + PWR_RADIATION, + std::make_shared<power_type>( + "emit radiation", + "You can emit hard radiation at will.", + "You start emitting hard radiation.", + "You stop emitting hard radiation.", + power_activation { + 15, 15, A_CON, 14 + } + ), + }, + { + PWR_VAMPIRISM, + std::make_shared<power_type>( + "vampiric drain", + "You can drain life from a foe.", + "You become vampiric.", + "You are no longer vampiric.", + power_activation { + 4, 5, A_CON, 9 + } + ), + }, + { + PWR_SMELL_MET, + std::make_shared<power_type>( + "smell metal", + "You can smell nearby precious metal.", + "You smell a metallic odour.", + "You no longer smell a metallic odour.", + power_activation { + 3, 2, A_INT, 12 + } + ), + }, + { + PWR_SMELL_MON, + std::make_shared<power_type>( + "smell monsters", + "You can smell nearby monsters.", + "You smell filthy monsters.", + "You no longer smell filthy monsters.", + power_activation { + 5, 4, A_INT, 15 + } + ), + }, + { + PWR_BLINK, + std::make_shared<power_type>( + "blink", + "You can teleport yourself short distances.", + "You gain the power of minor teleportation.", + "You lose the power of minor teleportation.", + power_activation { + 3, 3, A_WIS, 12 + } + ), + }, + { + PWR_EAT_ROCK, + std::make_shared<power_type>( + "eat rock", + "You can consume solid rock.", + "The walls look delicious.", + "The walls look unappetising.", + power_activation { + 8, 12, A_CON, 18 + } + ), + }, + { + PWR_SWAP_POS, + std::make_shared<power_type>( + "swap position", + "You can switch locations with another being.", + "You feel like walking a mile in someone else's shoes.", + "You feel like staying in your own shoes.", + power_activation { + 15, 12, A_DEX, 16 + } + ), + }, + { + PWR_SHRIEK, + std::make_shared<power_type>( + "shriek", + "You can emit a horrible shriek.", + "Your vocal cords get much tougher.", + "Your vocal cords get much weaker.", + power_activation { + 4, 4, A_CON, 6 + } + ), + }, + { + PWR_ILLUMINE, + std::make_shared<power_type>( + "illuminate", + "You can emit bright light.", + "You can light up rooms with your presence.", + "You can no longer light up rooms with your presence.", + power_activation { + 3, 2, A_INT, 10 + } + ), + }, + { + PWR_DET_CURSE, + std::make_shared<power_type>( + "detect curses", + "You can feel the danger of evil magic.", + "You can feel evil magic.", + "You can no longer feel evil magic.", + power_activation { + 7, 14, A_WIS, 14 + } + ), + }, + { + PWR_BERSERK, + std::make_shared<power_type>( + "berserk", + "You can drive yourself into a berserk frenzy.", + "You feel a controlled rage.", + "You no longer feel a controlled rage.", + power_activation { + 8, 8, A_STR, 14 + } + ), + }, + { + PWR_POLYMORPH, + std::make_shared<power_type>( + "polymorph", + "You can polymorph yourself at will.", + "Your body seems mutable.", + "Your body seems stable.", + power_activation { + 18, 20, A_CON, 18 + } + ), + }, + { + PWR_MIDAS_TCH, + std::make_shared<power_type>( + "Midas touch", + "You can turn ordinary items to gold.", + "You gain the Midas touch.", + "You lose the Midas touch.", + power_activation { + 10, 5, A_INT, 12 + } + ), + }, + { + PWR_GROW_MOLD, + std::make_shared<power_type>( + "grow mold", + "You can cause mold to grow near you.", + "You feel a sudden affinity for mold.", + "You feel a sudden dislike for mold.", + power_activation { + 1, 6, A_CON, 14 + } + ), + }, + { + PWR_RESIST, + std::make_shared<power_type>( + "resist elements", + "You can harden yourself to the ravages of the elements.", + "You feel like you can protect yourself.", + "You feel like you might be vulnerable.", + power_activation { + 10, 12, A_CON, 12 + } + ), + }, + { + PWR_EARTHQUAKE, + std::make_shared<power_type>( + "earthquake", + "You can bring down the dungeon around your ears.", + "You gain the ability to wreck the dungeon.", + "You lose the ability to wreck the dungeon.", + power_activation { + 12, 12, A_STR, 16 + } + ), + }, + { + PWR_EAT_MAGIC, + std::make_shared<power_type>( + "eat magic", + "You can consume magic energy for your own use.", + "Your magic items look delicious.", + "Your magic items no longer look delicious.", + power_activation { + 17, 1, A_WIS, 15 + } + ), + }, + { + PWR_WEIGH_MAG, + std::make_shared<power_type>( + "weigh magic", + "You can feel the strength of the magics affecting you.", + "You feel you can better understand the magic around you.", + "You no longer sense magic.", + power_activation { + 6, 6, A_INT, 10 + } + ), + }, + { + PWR_STERILITY, + std::make_shared<power_type>( + "sterilise", + "You can cause mass impotence.", + "You can give everything around you a headache.", + "You hear a massed sigh of relief.", + power_activation { + 20, 40, A_CHR, 18 + } + ), + }, + { + PWR_PANIC_HIT, + std::make_shared<power_type>( + "panic hit", + "You can run for your life after hitting something.", + "You suddenly understand how thieves feel.", + "You no longer feel jumpy.", + power_activation { + 10, 12, A_DEX, 14 + } + ), + }, + { + PWR_DAZZLE, + std::make_shared<power_type>( + "dazzle", + "You can emit confusing, blinding radiation.", + "You gain the ability to emit dazzling lights.", + "You lose the ability to emit dazzling lights.", + power_activation { + 7, 15, A_CHR, 8 + } + ), + }, + { + PWR_DARKRAY, + std::make_shared<power_type>( + "spear of darkness", + "You can create a spear of darkness.", + "An illusory spear of darkness appears in your hand.", + "The spear of darkness disappear.", + power_activation { + 7, 10, A_WIS, 9 + } + ), + }, + { + PWR_RECALL, + std::make_shared<power_type>( + "recall", + "You can travel between towns and the depths.", + "You feel briefly homesick, but it passes.", + "You feel briefly homesick.", + power_activation { + 17, 50, A_INT, 16 + } + ), + }, + { + PWR_BANISH, + std::make_shared<power_type>( + "banish evil", + "You can send evil creatures directly to the Nether Realm.", + "You feel a holy wrath fill you.", + "You no longer feel a holy wrath.", + power_activation { + 25, 25, A_WIS, 18 + } + ), + }, + { + PWR_COLD_TOUCH, + std::make_shared<power_type>( + "cold touch", + "You can freeze things with a touch.", + "Your hands get very cold.", + "Your hands warm up.", + power_activation { + 2, 2, A_CON, 11 + } + ), + }, + { + PWR_LAUNCHER, + std::make_shared<power_type>( + "throw object", + "You can hurl objects with great force.", + "Your throwing arm feels much stronger.", + "Your throwing arm feels much weaker.", + power_activation { + 1, 10, A_STR, 6 + } + ), + }, + { + PWR_PASSWALL, + std::make_shared<power_type>( + "find secret passages", + "You can use secret passages.", + "You suddenly notice lots of hidden ways.", + "You no longer can use hidden ways.", + power_activation { + 15, 15, A_DEX, 12 + } + ), + }, + { + PWR_DETECT_TD, + std::make_shared<power_type>( + "detect doors and traps", + "You can detect hidden doors and traps.", + "You develop an affinity for traps.", + "You no longer can detect hidden doors and traps.", + power_activation { + 5, 3, A_WIS, 10 + } + ), + }, + { + PWR_COOK_FOOD, + std::make_shared<power_type>( + "create food", + "You can create food.", + "Your cooking skills greatly improve.", + "Your cooking skills return to a normal level.", + power_activation { + 15, 10, A_INT, 10 + } + ), + }, + { + PWR_UNFEAR, + std::make_shared<power_type>( + "remove fear", + "You can embolden yourself.", + "You feel your fears lessening.", + "You feel your fears growing again.", + power_activation { + 3, 5, A_WIS, 8 + } + ), + }, + { + PWR_EXPL_RUNE, + std::make_shared<power_type>( + "set explosive rune", + "You can set explosive runes.", + "You suddenly understand how explosive runes work.", + "You suddenly forget how explosive runes work.", + power_activation { + 25, 35, A_INT, 15 + } + ), + }, + { + PWR_STM, + std::make_shared<power_type>( + "stone to mud", + "You can destroy walls.", + "You can destroy walls.", + "You cannot destroy walls anymore.", + power_activation { + 20, 10, A_STR, 12 + } + ), + }, + { + PWR_POIS_DART, + std::make_shared<power_type>( + "poison dart", + "You can throw poisoned darts.", + "You get an infinite supply of poisoned darts.", + "You lose your infinite supply of poisoned darts.", + power_activation { + 12, 8, A_DEX, 14 + } + ), + }, + { + PWR_MAGIC_MISSILE, + std::make_shared<power_type>( + "magic missile", + "You can cast magic missiles.", + "You suddenly understand the basics of magic.", + "You forget the basics of magic.", + power_activation { + 2, 2, A_INT, 9 + } + ), + }, + { + PWR_GROW_TREE, + std::make_shared<power_type>( + "grow trees", + "You can grow trees.", + "You feel an affinity for trees.", + "You no longer feel an affinity for trees.", + power_activation { + 2, 6, A_CHR, 3 + } + ), + }, + { + PWR_BR_COLD, + std::make_shared<power_type>( + "cold breath", + "You can breath cold.", + "You gain the ability to breathe cold.", + "You lose the ability to breathe cold.", + power_activation { + 20, 10, A_CON, 18 + } + ), + }, + { + PWR_BR_CHAOS, + std::make_shared<power_type>( + "chaos breath", + "You can breath chaos.", + "You gain the ability to breathe chaos.", + "You lose the ability to breathe chaos.", + power_activation { + 20, 10, A_CON, 18 + } + ), + }, + { + PWR_BR_ELEM, + std::make_shared<power_type>( + "elemental breath", + "You can breath the elements.", + "You gain the ability to breathe the elements.", + "You lose the ability to breathe the elements.", + power_activation { + 20, 10, A_CON, 18 + } + ), + }, + { + PWR_WRECK_WORLD, + std::make_shared<power_type>( + "change the world", + "You can wreck the world around you.", + "You gain the ability to wreck the world.", + "You lose the ability to wreck the world.", + power_activation { + 1, 30, A_CHR, 6 + } + ), + }, + { + PWR_SCARE, + std::make_shared<power_type>( + "scare monster", + "You can scare monsters.", + "You gain the ability to scare monsters.", + "You lose the ability to scare monsters.", + power_activation { + 4, 3, A_INT, 3 + } + ), + }, + { + PWR_REST_LIFE, + std::make_shared<power_type>( + "restore life", + "You can restore lost life forces.", + "You gain the ability to restore your life force.", + "You lose the ability to restore your life force.", + power_activation { + 30, 30, A_WIS, 18 + } + ), + }, + { + PWR_SUMMON_MONSTER, + std::make_shared<power_type>( + "summon monsters", + "You can call upon monsters.", + "You gain the ability to call upon monsters.", + "You lose the ability to call upon monsters.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_NECRO, + std::make_shared<power_type>( + "necromantic powers", + "You can use the foul necromantic magic.", + "You gain the ability to use the foul necromantic magic.", + "You lose the ability to use the foul necromantic magic.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_ROHAN, + std::make_shared<power_type>( + "Rohan Knight's Powers", + "You can use rohir powers.", + "You gain the ability to use rohir powers.", + "You lose the ability to use rohir powers.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_THUNDER, + std::make_shared<power_type>( + "Thunderlord's Powers", + "You can use thunderlords powers.", + "You gain the ability to use thunderlords powers.", + "You lose the ability to use thunderlords powers.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_DEATHMOLD, + std::make_shared<power_type>( + "Death Mold's Powers", + "You can use the foul deathmold magic.", + "You gain the ability to use the foul deathmold magic.", + "You lose the ability to use the foul deathmold magic.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_HYPNO, + std::make_shared<power_type>( + "Hypnotise Pet", + "You can mystify pets.", + "You gain the ability to mystify pets.", + "You lose the ability to mystify pets.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_UNHYPNO, + std::make_shared<power_type>( + "Awaken Hypnotised Pet", + "You can wake up a pet.", + "You gain the ability to wake up a pet.", + "You lose the ability to wake up a pet.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_INCARNATE, + std::make_shared<power_type>( + "Incarnate", + "You can incarnate into a body.", + "You feel the need to get a body.", + "You no longer feel the need for a new body.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_MAGIC_MAP, + std::make_shared<power_type>( + "magic map", + "You can sense what is beyond walls.", + "You feel you can sense what is beyond walls.", + "You no longer can sense what is beyond walls.", + power_activation { + 7, 10, A_WIS, 15 + } + ), + }, + { + PWR_COMPANION, + std::make_shared<power_type>( + "turn pet into companion", + "You can turn a pet into a companion.", + "You suddenly gain authority over your pets.", + "You can no longer convert pets into companions.", + power_activation { + 2, 10, A_CHR, 10 + } + ), + }, + { + PWR_BEAR, + std::make_shared<power_type>( + "turn into a bear", + "You can turn into a bear.", + "You suddenly gain beorning powers.", + "You can no longer shapeshift into a bear.", + power_activation { + 2, 5, A_CON, 5 + } + ), + }, + { + PWR_DODGE, + std::make_shared<power_type>( + "sense dodge success", + "You can sense your dodging success chance.", + "You suddenly can sense your dodging success chance.", + "You can no longer sense your dodging success chance.", + power_activation { + 0, 0, 0, 0 + } + ), + }, + { + PWR_BALROG, + std::make_shared<power_type>( + "turn into a Balrog", + "You can turn into a Balrog at will.", + "You feel the fire of Udun burning in you.", + "You no longer feel the fire of Udun in you.", + power_activation { + 35, 80, A_WIS, 25 + } + ), + }, + { + POWER_INVISIBILITY, + std::make_shared<power_type>( + "invisibility", + "You are able melt into the shadows to become invisible.", + "You suddenly become able to melt into the shadows.", + "You lose your shadow-melting ability.", + power_activation { + 30, 10, A_DEX, 20 + } + ), + }, + { + POWER_WEB, + std::make_shared<power_type>( + "web", + "You are able throw a thick and very resistant spider web.", + "You suddenly become able to weave webs.", + "You lose your web-weaving capability.", + power_activation { + 25, 30, A_DEX, 20 + } + ), + }, + { + POWER_COR_SPACE_TIME, + std::make_shared<power_type>( + "control space/time continuum", + "You are able to control the space/time continuum.", + "You become able to control the space/time continuum.", + "You are no more able to control the space/time continuum.", + power_activation { + 1, 10, A_WIS, 10 + } + ), + }, + }; +} |