diff options
author | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-03-25 13:23:23 +0000 |
---|---|---|
committer | dshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573> | 2007-03-25 13:23:23 +0000 |
commit | bdb45bf27b86ff63c5afdff311b4065c83faf37d (patch) | |
tree | cf3a914532ecc372932b8d897e8c9abf57fbe2a4 /crawl-ref/source/notes.cc | |
parent | c500c6b3582877a10bd362722bde81eb9b94b917 (diff) | |
download | crawl-ref-bdb45bf27b86ff63c5afdff311b4065c83faf37d.tar.gz crawl-ref-bdb45bf27b86ff63c5afdff311b4065c83faf37d.zip |
Merged in crawl.akrasiac.org patches (simple messaging, milestones). These take
effect only if compiled with -DDGAMELAUNCH.
Simple messaging: interacts with dgamelaunch's messaging facility allowing
viewers to send messages to the player.
Milestones: Writes a milestones.txt file (in xlogfile format) for things like
the player killing uniques, reaching the end of a dungeon branch, etc. (similar
to notes). milestones.txt is used for game announcements by an IRC bot.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1095 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/notes.cc')
-rw-r--r-- | crawl-ref/source/notes.cc | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/crawl-ref/source/notes.cc b/crawl-ref/source/notes.cc index 286bdab320..3bde493572 100644 --- a/crawl-ref/source/notes.cc +++ b/crawl-ref/source/notes.cc @@ -10,6 +10,7 @@ #include "branch.h" #include "files.h" #include "Kills.h" +#include "hiscores.h" #include "message.h" #include "misc.h" #include "mon-pick.h" @@ -339,8 +340,37 @@ Note::Note( NOTE_TYPES t, int f, int s, const char* n, const char* d ) : packed_place = get_packed_place(); } -void Note::save( FILE* fp ) const -{ +void Note::check_milestone() const { +#ifdef MILESTONES + if (type == NOTE_DUNGEON_LEVEL_CHANGE) { + const int br = place_branch(packed_place), + dep = place_depth(packed_place); + + if (br != -1) + { + std::string branch = place_name(packed_place, true, false).c_str(); + if (branch.find("The ") == 0) + branch[0] = tolower(branch[0]); + + if (dep == 1) + mark_milestone("enter", "entered " + branch + "."); + else if (dep == dungeon_branch_depth(br)) + { + char branch_finale[500]; + std::string level = place_name(packed_place, true, true); + if (level.find("Level ") == 0) + level[0] = tolower(level[0]); + + snprintf(branch_finale, sizeof branch_finale, + "reached %s.", level.c_str()); + mark_milestone("branch-finale", branch_finale); + } + } + } +#endif +} + +void Note::save( FILE* fp ) const { writeLong( fp, type ); writeLong( fp, turn ); writeShort( fp, packed_place ); @@ -371,7 +401,10 @@ bool notes_are_active() void take_note( const Note& note, bool force ) { if ( notes_active && (force || is_noteworthy(note)) ) + { note_list.push_back( note ); + note.check_milestone(); + } } void activate_notes( bool active ) |