summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
authordolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-26 01:14:00 +0000
committerdolorous <dolorous@c06c8d41-db1a-0410-9941-cceddc491573>2009-03-26 01:14:00 +0000
commitbdb33fda79c45d3eb10d552b10d0e7b09c134771 (patch)
treee7200c18982ccfdc1a5b1f7c86ce9b30846fb13a /crawl-ref/source
parent2a7a9ce4b22a8a0003b0cc422eee5f6dd44310ca (diff)
downloadcrawl-ref-bdb33fda79c45d3eb10d552b10d0e7b09c134771.tar.gz
crawl-ref-bdb33fda79c45d3eb10d552b10d0e7b09c134771.zip
Make player ghosts keep the gods they worshipped in life, if any (except
if they worshipped good gods, since player ghosts are undead and, hence, evil by good gods' reckoning). This gives them the proper title if Invocations was their highest skill in life. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9550 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/describe.cc2
-rw-r--r--crawl-ref/source/ghost.cc6
-rw-r--r--crawl-ref/source/ghost.h1
-rw-r--r--crawl-ref/source/mon-util.cc1
-rw-r--r--crawl-ref/source/tags.cc2
5 files changed, 11 insertions, 1 deletions
diff --git a/crawl-ref/source/describe.cc b/crawl-ref/source/describe.cc
index 2150e15e31..dfb4517cf3 100644
--- a/crawl-ref/source/describe.cc
+++ b/crawl-ref/source/describe.cc
@@ -2997,7 +2997,7 @@ std::string get_ghost_description(const monsters &mons, bool concise)
<< skill_title( ghost.best_skill,
(unsigned char)ghost.best_skill_level,
gspecies,
- str, dex, GOD_NO_GOD )
+ str, dex, ghost.religion )
<< ", a"
<< ((ghost.xl < 4) ? " weakling" :
(ghost.xl < 7) ? "n average" :
diff --git a/crawl-ref/source/ghost.cc b/crawl-ref/source/ghost.cc
index 2b8048a426..5322114bc9 100644
--- a/crawl-ref/source/ghost.cc
+++ b/crawl-ref/source/ghost.cc
@@ -22,6 +22,7 @@ REVISION("$Rev$");
#include "mtransit.h"
#include "place.h"
#include "player.h"
+#include "religion.h"
#include <vector>
std::vector<ghost_demon> ghosts;
@@ -118,6 +119,7 @@ void ghost_demon::reset()
name.clear();
species = SP_UNKNOWN;
job = JOB_UNKNOWN;
+ religion = GOD_NO_GOD;
best_skill = SK_FIGHTING;
best_skill_level = 0;
xl = 0;
@@ -346,6 +348,10 @@ void ghost_demon::init_player_ghost()
species = you.species;
job = you.char_class;
+
+ // Ghosts can't worship good gods.
+ religion = is_good_god(you.religion) ? GOD_NO_GOD : you.religion;
+
best_skill = ::best_skill(SK_FIGHTING, (NUM_SKILLS - 1), 99);
best_skill_level = you.skills[best_skill];
xl = you.experience_level;
diff --git a/crawl-ref/source/ghost.h b/crawl-ref/source/ghost.h
index 91206885a5..8cb574dd4b 100644
--- a/crawl-ref/source/ghost.h
+++ b/crawl-ref/source/ghost.h
@@ -23,6 +23,7 @@ public:
species_type species;
job_type job;
+ god_type religion;
skill_type best_skill;
short best_skill_level;
short xl;
diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc
index ac0a59680e..08dc4be5fa 100644
--- a/crawl-ref/source/mon-util.cc
+++ b/crawl-ref/source/mon-util.cc
@@ -6159,6 +6159,7 @@ void monsters::pandemon_init()
void monsters::ghost_init()
{
type = MONS_PLAYER_GHOST;
+ god = ghost->religion;
hit_dice = ghost->xl;
hit_points = ghost->max_hp;
max_hit_points = ghost->max_hp;
diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc
index f3388f935f..72bbfb85f2 100644
--- a/crawl-ref/source/tags.cc
+++ b/crawl-ref/source/tags.cc
@@ -2425,6 +2425,7 @@ static void marshallGhost(writer &th, const ghost_demon &ghost)
marshallShort(th, ghost.species);
marshallShort(th, ghost.job);
+ marshallByte(th, ghost.religion);
marshallShort(th, ghost.best_skill);
marshallShort(th, ghost.best_skill_level);
marshallShort(th, ghost.xl);
@@ -2453,6 +2454,7 @@ static ghost_demon unmarshallGhost(reader &th)
ghost.species = static_cast<species_type>( unmarshallShort(th) );
ghost.job = static_cast<job_type>( unmarshallShort(th) );
+ ghost.religion = static_cast<god_type>( unmarshallByte(th) );
ghost.best_skill = static_cast<skill_type>( unmarshallShort(th) );
ghost.best_skill_level = unmarshallShort(th);
ghost.xl = unmarshallShort(th);