------------------------------------------------------------------------ r98 | Zach | 2011-02-05 21:42:10 -1000 (Sat, 05 Feb 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 011: Eval version - Tutorial ON, Reinc OFF. (fixed AGAIN--this shouldn't be this hard). ------------------------------------------------------------------------ r97 | Zach | 2011-02-05 21:25:53 -1000 (Sat, 05 Feb 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 013: Eval version - Tutorial OFF, Reinc OFF. ------------------------------------------------------------------------ r96 | Zach | 2011-02-05 21:23:27 -1000 (Sat, 05 Feb 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 012: Eval version - Tutorial OFF, Reinc OFF. ------------------------------------------------------------------------ r95 | Zach | 2011-02-05 21:21:17 -1000 (Sat, 05 Feb 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 011: Eval version - Tutorial ON, Reinc OFF (fixed: last time, forget to set Release). ------------------------------------------------------------------------ r94 | Zach | 2011-02-05 21:18:47 -1000 (Sat, 05 Feb 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 011: Eval version - Tutorial ON, Reinc OFF. ------------------------------------------------------------------------ r93 | Zach | 2011-02-05 21:16:58 -1000 (Sat, 05 Feb 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 010: Eval version - Tutorial ON, Reinc ON. ------------------------------------------------------------------------ r92 | Zach | 2011-02-05 21:02:46 -1000 (Sat, 05 Feb 2011) | 54 lines Changed paths: M /delivery/AppletMain.java M /delivery/delivery.txt M /delivery/demeter.py M /demeter/DGrammar.h M /demeter/Demeter.inf M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/knownissues.txt M /demeter/world/locations.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h M /schedule.txt Release 008: First Official Release Whew, it's been a while! I've been beta testing, so, while busy, not much implementing happened during that time. 24 Jan: (0:05 impl / 18:05 total) 31 Jan: (0:00 impl / 13:15 total) 05 Feb: (5:30 impl / 14:45 so far) (early/Sat. commit) Here's what I've been doing: [up to 24 Jan] # Writing up notes for Trenches chapter of dissertation # Compiling verb, action, and scene lists, as well as reinc on/off differences # Reminding beta testers to play and fielding some responses/problems # Debugging Zag problems on Macs # Analyzing beta survey data # (Got the game setting backwards! Doh.) # Wroting up some slides for committee meeting. # Revising schedule: Moved defense from 11 March to 18 April. @ Held committee meeting to discuss feedback on surveys, initial data, etc. # Related paperwork and signatures # Looking over dissertation style requirements # Finding a good book on statistics (Statistics in Plain English) [up to 31 Jan] # Reading statistics book; talked to Scott about a few issues # Wrote a quick little ugly.py script to massage EVENTS.TXT dump file output # Replayed beta games: a few minor bugs and a couple major ones. # Collected all game metrics data into beta data spreadsheet [up to 5 Feb] # Statistics reading # Updating surveys from beta to final version # Making changes to demeter.py to differentiate the two game session pages # Debugging Mac issue over a few trips to the computer lab # Turns out I needed to compile for Java 1.4. I also changed the delivery method to use rather than the deploy.js script approach given by Java Tutorials. # Fixing bugs discovered during beta: * Explained in "look at revenant" why it's called a revenant * Sturdy chairs needed "sturdy" added as a term * Fixed dmdump to include spliced thread count * stab verb now works on inanimate objects like gas bags * Fixed weapon selection queries to stop after choosing a weapon * When reinc is OFF, GoParty_Departs rarely plays. This was messing up both GoParty_Offscreen (since a returning GoParty would immediately depart again, since it had never done so before) and GoParty_Return/Reports. Fixed both of these to work with a GoParty_Moves_Along from Entryway to Ladderway in the absence of a GoParty_Departs. * Landfall was including some hooks in narration when reinc was OFF due to negative tests: Revenant looked to be alive because revKilledBy wasn't set. Now fixed. * Finally fixed that Marlinspike threading issue that causes a stack overflow on long threads! Wasn't so hard. I tracked it down to MEvent.getAllReincorporates(), and so rewrote it to be iterative rather than recursive. Seems faster now too. Re-ran the problem beta transcripts and got identical performance (except events are listed in slightly different order in thread lists). Yay! # No major known bugs outstanding at this time! # Started composing a good come-on email to recruit participants. @ Implementation is done! @ Beta is done! # Evaluation is about to start. ------------------------------------------------------------------------ r91 | Zach | 2011-01-17 22:19:10 -1000 (Mon, 17 Jan 2011) | 37 lines Changed paths: A /delivery/TextGridWindow.java M /delivery/delivery.txt M /delivery/demeter.py M /demeter/Demeter.inf M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/components.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/waiting.h M /demeter/tutorial/tutorial.h M /demeter/unimplemented.txt M /graphviz.bat M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MThread.h M /marlinspike/dm/eventprocessing.flo M /schedule.txt Been a bit lax with commits since implementation is basically done. Here are the past 3 weeks: 03 Jan: (6:00 impl / 15:05 total) (including earlier 01 Jan mid-week commit) 10 Jan: (2:25 impl / 12:20 total) (still hoping to make this 2:40 up) 17 Jan: (3:40 impl / 15:05 total) (this week) Also, since Christmas break and the gradual end of implementing, I am no longer running the token game with Scott. I am still expecting 15hrs a week, only I'm trying to play the token game with myself now. Here's what's been happening: * Cleaned up GoParty_Reentry * Fixed Revenant_Acts behavior bug after scene plays as a component # Checked on final alpha transcripts. @ Alpha DONE. # Went to sign up for SurveyMonkey and found that, with their new pricing structure, I would have to pay $300 for a year in order to get the survey functionality I wanted! # Talked to customer support and looked for alternatives, settling on SurveyGizmo. A bit more technical, but actually more powerful than SurveyMonkey, and all free for what I wanted to do. # Reauthored survey in SurveyGizmo. # Last comb through bugs, including the major flags from alphas: * Telling an individual something during a Discussion is recast as a Tell all. * Added a NPC comment to Landfall regarding/reincing any still-living Revenant * Fixed a misspelling in tutorial and a needed "the" in hatch names * GoParty_Reentry now threads a bit better * Increased the max possible threads. # Overhauled/extended demeter.py yet again to fit into survey pipeline. # Ironed bugs out of surveys. @ Launched beta/pilot [See earlier commits for the 4 beta game versions.] # Fielded a few beta response emails * Tracked down the TalkMenu's intermittent lockup of Zag! Was due to a thread deadlock. I believe that moving one line around in TextGridWindow.java has now fixed this problem. # Proofed documentation a bit, recreating missing images from .dot files and bringing .flo files up to date. # Started writing: Lessons learned from implementation, etc. ------------------------------------------------------------------------ r90 | Zach | 2011-01-10 18:35:09 -1000 (Mon, 10 Jan 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 007: No tutorial, dmimperative off, doreinc off ------------------------------------------------------------------------ r89 | Zach | 2011-01-10 18:33:44 -1000 (Mon, 10 Jan 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 006: No tutorial, dmimperative off, doreinc on ------------------------------------------------------------------------ r88 | Zach | 2011-01-10 18:31:46 -1000 (Mon, 10 Jan 2011) | 2 lines Changed paths: M /demeter/Demeter.inf Release 005: Starts with tutorial, dmimperative off, doreinc off ------------------------------------------------------------------------ r87 | Zach | 2011-01-10 18:29:32 -1000 (Mon, 10 Jan 2011) | 2 lines Changed paths: M /delivery/demeter.py M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/knownissues.txt M /demeter/world/DHatch.h M /demeter/world/DRoomDoor.h M /demeter/world/locations.h M /marlinspike/dm/MDramaManager.h M /schedule.txt Release 004: Starts with tutorial, dmimperative off, doreinc on. ------------------------------------------------------------------------ r86 | Zach | 2011-01-01 04:24:33 -1000 (Sat, 01 Jan 2011) | 19 lines Changed paths: M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/world/locations.h A mid-week commit as I switch my time tracker over on 01 Jan... (4:00 impl / 8:00 total so far). # Rough draft of evaluation survey is done in SurveyMonkey (need to subscribe to go further) # Checked on a couple more alpha test transcripts coming in. # So far, response rate is medium to poor: 4, 2, 2, 0, 0 plays from the 5 testers. # Pilot and defense dates are scheduled with committee. # Bug hunting: * Getting chair leg reincs breaking the chair. * Attacking reincs acquiring the weapon (fixed). * Occasional double defense reaction from NPCs fixed (seemed to be related to not reliably checking if acting NPCs were incapacitated/active or not). * Logic operator precedence bug in GoParty_Departs giving a "programming error". * Discussion_Offscreen now resumes an interrupted discussion (which fixes a number of problems) * Metrics dump from last time actually finished... # But need to clean up threading. Ideally, the well-travelled story paths should produce a single story thread, and that's not currently happening. * Worked on reincorporations in Discussion and GoParty stages. ------------------------------------------------------------------------ r85 | Zach | 2010-12-27 14:44:31 -1000 (Mon, 27 Dec 2010) | 25 lines Changed paths: M /delivery/demeter.py M /demeter/Demeter.inf M /demeter/events/scenes/endings.h M /demeter/events/scenes/goparty-return.h M /demeter/knownissues.txt M /demeter/unimplemented.txt M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MThreadManager.h M /marlinspike/util/MList.h M /marlinspike/util/MListType.h M /schedule.txt It's been 3 weeks since last commit. Term-end grading, a trip to the ER, and Christmas have dragged me down: (5:00 impl / 11:00 total) (0:00 impl / 8:30 total) (4:30 impl / 6:45 total) # Alpha testing: call to testers, collecting transcripts, etc # Looking over consent and survey forms from proposal # Reviewing a couple statistics articles # Notes on "lessons from the trenches" # Consolidating notes # Met with Kim: discussed alpha and scheduling # Helping John Zuern with Mac/Zag problems # Scheduling sessions with committee # Reviewing alpha transcripts * Alpha bug fixes: * NPCs now drop held items on unconsciousness * GoParty reports stripped down to one sentence or so when doReinc is off * Other minor alpha bugs * Story metrics dump with the dmstory verb (still need thread details) # Started composing beta test survey on SurveyMonkey ------------------------------------------------------------------------ r84 | Zach | 2010-12-07 14:41:00 -1000 (Tue, 07 Dec 2010) | 22 lines Changed paths: M /.NaturalDocs/Menu.txt M /delivery/AppletMain.java M /delivery/delivery.txt M /delivery/demeter.jnlp M /delivery/demeter.py D /delivery/saveToFile.py M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/waiting.h A /demeter/knownissues.txt M /demeter/unimplemented.txt M /demeter/world/npc/DCharacter.h M /linecount.bat Alpha testing begins with Release 003 (12:45 impl / 15:05 total; no token) # Started with bug hunting: * GoParty_Departs offscreen was taking PC along with it sometimes * Offscreen_Discussion was running after the first GoParty * Massaged Revenant and GoParty interactions * GoParty state now ends even if PC refuses to follow into Gondola; and we get a Report * GoParty state ends when lone PC is betrayed/locked out # GoParty motion still slightly buggy in two rooms... * Started knownissues.txt to track some of these that aren't worth hunting down * GoParty_Reports cleaned up and now reports revenant attacks. * Spellchecked all the scene files. * Then revised delivery system to log timestamps at each stage. * Compiled demeter.py and saveToFile.py into one monolith. * Installed new delivery mechanism and ironed out the bugs there (like making sure duplicate files are saved separately, etc; and intially woudn't phone home correctly). # Opened alpha testing with 5 testers, which will run from now until Christmas. # This commit is Release 003 (though in "replay" mode, since I just forgot to comment out those two lines in Demeter.inf) ------------------------------------------------------------------------ r83 | Zach | 2010-11-29 16:08:22 -1000 (Mon, 29 Nov 2010) | 35 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /lessons.txt Bug hunting dragging me down this week... (10:50 impl / 11:15 total; negative token) * Offsceen_Discussion scene completed and set to start on an offscreen PC DELAY. Plays nicely. * Every 4th (I think) PC action with no scene counts as a DELAY to prompt some other potential scenes. # Bug hunting... * Hear offscreen from correct direction now, even when locked out on Obsv_Deck. (And can't teleport past locked doors either.) * Managing GoParty when some/last NPC is unconscious. * GoParty movement/departure checking. * No more auto GoParties once rev is dead. * NPC_Observes_Destruction's canPlay had stopped working/matching * Landfall hooking of destruction. * Landfall testing... done (well, done enough anyways). * PC_Dies includes hooks of GoParty betrayal now * Deduped attackers of PC for Ending_Hooks content * Stalled on another silent/locking infinite loop! Appeared to be in Revenant_Acts, but actually finally tracked it down to Ending_Hooks.getHooks(), in a loop that contained: found = MEventHistory.find(start, .... if (found && found.???) { ... start = //found's root's index in history } Thus, if found, but didn't match second part of test, the start wasn't getting updated, and so it kept repeating the same search over and over again. This took me 3 hours to find (including 2 this week, and 1 next). # (This would never happen in MS2.0, btw) @In other news: * Delivery system revisited in preparation for a pipeline of different games/pages, recording a timestamp at each point (2 hrs) # Random seeding discovered to work a little oddly in some Inform terps # Also took a break for Thanksgiving day and didn't really make it up over the weekend. ------------------------------------------------------------------------ r82 | Zach | 2010-11-23 21:29:18 -1000 (Tue, 23 Nov 2010) | 18 lines Changed paths: M /demeter/Demeter.inf M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/waiting.h M /demeter/tutorial/tutorial.h M /demeter/world/npc/DNPC.h Cleaning up and tracking down known bugs... (13:20 impl / 15:05 total; no token) * Landfall testing (with a couple infinite loops again; damn I hate those!)... 3 hrs, but not complete yet. * Threading Ending_Hooks events into Landfall narration. # A little coarse/brief in places, but they're in there now * More bug hunting... * GoParty_Departs now has any NPC departer ask a fellow-GoParty PC to follow along at that time (which helps avoid the trickier problem of dealing with door-locking while the GoParty is spread across 2 locations). * PC will open doors when following a Requests_Follow * Finally made the few tweaks suggested by tutoral alpha tests. * Started Offscreen_Discussion... while lead to revising GoParty_Offscreen's pcHearsOffscreen. @In other news: # Organized lists of known bugs (and found that some have already been squashed). ------------------------------------------------------------------------ r81 | Zach | 2010-11-15 19:48:25 -1000 (Mon, 15 Nov 2010) | 22 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/world/DProp.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/plans.h M /schedule.txt All scenes are now in place! It's downhill from here... (14:25 impl / 15:40 total) * GoParty_Reports with PC as reporter * GoParty_Reentry: clarifying whether there was a betrayal, and then saving list of betrayed in event if there was. * NPC_Observes_Destruction, with related affinity change details and recasts. * Added a couple more output options for NPC_Annoyed too. * Evidence_Revealed now covers evidence 5: Revenant slain (rather than using a separate scene). * Fleshed out Ending_Hooks, including grabbing betrayal and PC_Unconscious details. * Landfall started and authored: the final scene. (~9.5 hrs to author) @In other news: # About an hour of sketching/pre-planning for Landfall scene. # So, at this point, all scenes and reactions are basically in place, though there is still much testing to do. # For one thing, I haven't even tried to play Landfall yet. Also, it needs Ending_Hooks woven into it. # And there are other scene tweaks, like an Offscreen_Discussion, which might technically become its own scene, but will only take a few lines to play offscreen what I already have. # And then I have my 4 pages of known bugs and issues to work through... # But, still, this is an important milestone! :) ------------------------------------------------------------------------ r80 | Zach | 2010-11-09 11:46:40 -1000 (Tue, 09 Nov 2010) | 22 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/waiting.h M /demeter/world/DLargePassengerRoom.h M /demeter/world/locations.h So begins November... and ends The Long Night (14:25 impl / 15:05 total; no token) * Added lover to A_Long_Night # Nice unexpected behavior: Can seduce a married man who will rebuff all advances but still come visit at night. * Over 7 hours of testing all the various Long_Night branches (a couple of the very minor ones I only eyeballed). # Test plan == Good! # Bug-hunting: * No more Discussion_Starts after Revenant is dead. * ObsDeck NPCs moved back to their rooms when PC_Unconscious * DST_GoParty was not expiring when last/only GoParty NPC was dropped (with no PC). GoParty also needed to expire when NPC fell only unconscious. * DST_GoParty was still set to expire the second time it started, so it would expire on the first cast it made. * FFing GoParty_Offscreen through all permuations is too hard when PC is unconscious and possibly in the path of GoParty movement. So it just does the first Offscreen step, so PC will probably wake in time for Returns, etc. Which should play okay. (Really need reliable "offscreen NPC deeds".) # Previous PC_Unconscious interrupting cast fix does not work when PC unconscious from a scene. Damn. * Engine rooms doors are open/closed in description now (like all other doors). * Started Landfall, the last major scene: docs and canPlay. * Returned to the languishing, buggy GoParty_Reports. * Added support for PC as reporter, which requires Evidence_Revealed casting for all lone-PC GoParty wanderings. # Still buggy at the time of this commit though.... ------------------------------------------------------------------------ r79 | Zach | 2010-11-01 20:48:42 -1000 (Mon, 01 Nov 2010) | 10 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/scenes/exploration.h M /demeter/events/scenes/waiting.h M /demeter/world/DDoor.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h And so ends October... (14:05 impl / 15:05 total; no token) # So this is the month I finish my implementation! * Worked on A_Long_Night all week, which is probably the most tangled scene so far. * Near the end of the week, I had to go back and refactor everything into more methods (5 total). # I also sketched out a test plan for all the possible branches for each method. So it's (relatively) manageable in my head now. * Started testing... # Still need to write lover's visit, though. ------------------------------------------------------------------------ r78 | Zach | 2010-10-26 11:00:57 -1000 (Tue, 26 Oct 2010) | 11 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DVerbHooks.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/waiting.h M /demeter/world/items.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /marlinspike/world/MWObject.h M /schedule.txt Slogging on, ever closer to the end... [14:05 impl / 15:05 total; no token] * Waiting_though_the_Day: through design, canPlay, play, and testing. (~6+ hrs) * DNPC.isHolding * Fixed some food eating and acquisition bugs, as well as giving recasts. * Tweaked Discussion preconds so as not to completely dominate when imperative is off. * Started A_Long_Night: through design, canPlay, and started play (~5+ hrs so far) * Compiles, but not at all tested yet! ------------------------------------------------------------------------ r77 | Zach | 2010-10-18 13:00:08 -1000 (Mon, 18 Oct 2010) | 26 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf D /demeter/Ghost.inf D /demeter/events/DT_AutoThreads.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/events.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/tutorial/tutorial.h A /demeter/unimplemented.txt M /demeter/world/DFurniture.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /lessons.txt M /marlinspike/dm/MThread.h M /marlinspike/dm/MThreadManager.h Did better during the week this time. (11:30 impl / 15:10 total; no token). # Tested playing with the new imperative setting OFF. Slightly poorer performance, but tolerable. (Which, I suppose, is exactly as it should be.) # Clarified tutorial docs (~36 different logical possiblities for Miriam_Acts). # Bug hunting: * Quiting game on death as a kludgy fix to "just hitting enter" != a turn (so dead player was getting another turn). * Seeding random gen in glulx * Double-checked actions on unconscious NPCs, including tweaking talk menu to alert reader that they are * Can't start Discussion with only unconscious NPCs around * Was choosing door over an NPC in the hallway as the recipient of talk (actually a grammar thing involving 'to') * Can now drag funiture (including corpses) down the stairs * dmtheads now prints unique weight as well as total weight for each thread * PC_Unconscious (9.5 hours!) * A couple infinite loops in there, which are the worst in Inform! * PC_Unconscious done and plays great. # GoParty_Reports still hanging over my head, though. @ In other news: # Consolidating sketches, design notes, bug reports, etc: cleared out 6 pages. # Scene planning for last three major scenes: Awaiting_Nightfall, A_Long_Night, and Landfall. # Met with Kim: Include a few low-import, non-reincing "noise"/"background" scenes to help amplify the reinc effect? # Cleaned up unused files, removing Ghost.inf (out-dated intro example; Tutorial.h is better) and AutoThreads.h (wasn't doing anything) ------------------------------------------------------------------------ r76 | Zach | 2010-10-13 12:35:04 -1000 (Wed, 13 Oct 2010) | 18 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/reactions.h M /demeter/world/locations.h M /demeter/world/npc/plans.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MTriggerManager.h Managed to get to the beach on Sunday morning this weekend... and still make the quota (12:30 impl / 15:00 total; no token) # After talking to Kim... * Implemented DM.doImperative, which allows me to turn off each scene's imperative value during scene weighting, as well as shuffle those scenes that can play before selecting. # So now the authorial influence and the reincorporation can be turned on and off separately. # Initial 15 minutes of testing didn't show very much difference... * Still chugging away on GoParty_Reports... these "story comprehension" scenes, which recount past events, are so tedious! First the comprehensive searching, and then narrating coherently regardless of what what found, all without any after-the-fact string manipulations. * Ending_Hooks, which finds all the things we should report on/tie in an ending scene. * PC_Dies: Zeppelin sinks, or injuries, or suicide. * Tweaking. * An odd sort of InterrutingCastTrigger to detect when PC falls inactive. Doesn't change the casting, but does interrupt with either PC_Unconscious or PC_Dies. This way, at least the PC can't do anything after the current action finishes resolving, which will be handy for when imperative is off. (Alternative was to make PC.isActive() a pre-req for all other scenes.) @ In other news: # Read an article on DM evalution in IF # Met with Kim: Imperativeness is going to mess up evaluation of reinc effects; can you just turn it off for eval? ------------------------------------------------------------------------ r75 | Zach | 2010-10-03 21:56:02 -1000 (Sun, 03 Oct 2010) | 25 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h A /demeter/events/scenes/goparty-return.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/scenes.h M /demeter/tutorial/DTutorialTalkMenu.h M /demeter/tutorial/tutorial.h M /demeter/world/DCorpse.h M /demeter/world/DLocation.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MDramaManager.h M /marlinspike/util/MList.h Release 002, and alpha testing started. (12:10 impl / 15:10 total; no token) # Started with some bug hunting: * Reactions now play properly before GoParty_Offscreen and Moves_Along * GoParty motion fixed when PC in Zeppelin but not in party * Needed to hear Reentry's hatch opening from Zeppelin * GoParty_Returns probably done: not much else to report beyond injury status of the returning heroes. * GoParty_Moves_Along handles doors properly when PC is present on either side. (This fix was a bit a false start, but I think I've got things ironed out now.) * DNPC__MoveTo now won't move inactive NPCs * Minor tweaks on GoParty motion and revenant evidence. * GoParty_Eviction, including a warning before eviction for minor offenses. # Triggers and interdiction management is a pain! * GoParty_Reports: Mostly trying to consolidate PC violence history and report it properly. @ In other news: # Updated committee on progress after 6 months. # Opened up alpha testing of tutorial (16 Sept's Release 001) to 5 testers. # Tried replaying Kim's alpha and learned that the talk menu input isn't in the save transcript! (Probably because it's just arrow keys in a separate glx window). * Overhauled both tutorial and regular talk menus to add comments to transcript file when in DONLINE_EVAL mode so that the same results can be generated with only about 30 seconds of live human interaction. # Posted Release 002 before any alpha testers actually tried it. # I'm growing increasingly concerned about the probably weak effect of my independent variable: reincrporation on/off. ------------------------------------------------------------------------ r74 | Zach | 2010-09-27 15:30:06 -1000 (Mon, 27 Sep 2010) | 15 lines Changed paths: M /.NaturalDocs/Menu.txt M /delivery/delivery.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DVerbHooks.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/waiting.h M /demeter/tutorial/DTutorialTalkMenu.h M /demeter/world/locations.h M /demeter/world/npc/DNPC.h M /schedule.txt These catch-up weekends are killing me. (13:05 impl / 15:05 total; no token) @ Met with Kim and ran a proper alpha test of tutorial. Stood up quite well. In response: * Added an Excrete verb with various synyonyms, and sitting on the toilet now means use the toilet (since normal handling of "entering" supporter containers was rather problematic). * GoParty_Reentry all week! # This is both how to get back in if the hatch is locked, but also potentially a betrayal of the GoParty, which is a scene I've envisioned in this story from the beginning. * Involves moving NPCs around, determining their stance on things, playing out an argument (either onscreen and off), motivating and narrating reasons, and establishing consensus. Then might need a PC tie breaker. # As an example of hook tedium, there are 108 lines of code that will run ONLY if PC is in gondola and onscreen (or drawn in) at the time of the hatch argument and the NPC conclusion is tied. In this case, when an NPC asks for the PC's opinion, if DM.doReinc is on, then up to 2 extra sentences get printed as a question preface recapping the PC's previous stance on: revenant, leaveGondola, and any assault of an away party PC. (The code length is due to first searching for those events, and then producing the text output when there are 2^3=8 different state combinations.) For the effort it took, this is hardly worth it. But, since preconditions now play such a minor role in weighting the next scene, it's primarily hooks that will get turned on or off in evaluation. So I need them wherever possible. * GoParty_Reentry when ends with opening the hatch or not (again, onscreen or off). # GoParty_Reentry is done, but could maybe use some more hooks for when PC is in GoParty outside. * Did some bug hunting. # Also considered issues of science vs engineering vs art (as fitting for Expressive AI), and what I'm (not) going to learn if the effects of my independent variable are just too weak for users to detect. ------------------------------------------------------------------------ r73 | Zach | 2010-09-20 15:05:40 -1000 (Mon, 20 Sep 2010) | 23 lines Changed paths: M /.NaturalDocs/Menu.txt M /delivery/AppletMain.java A /delivery/demeter.py M /delivery/saveToFile.py M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/actions.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/waiting.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MDramaManager.h M /workingnotes.txt Another big weekend push to keep meeting summer quota. (13:35 impl / 15:05 total; no token) # Started with delivery method: * Second applet delivery technique worked on Scott's Mac, so all good to go there. * Updated saveToFile.py to store in userID directory, but then realized it was unnecessary. * Created demeter.py to serve up applet and establish userIDs. * A bit of fiddling with the various permissions to get it all up and running, but... # Release 001 on 16 Sept 2010 (my birthday)! Just the tutorial at this point, though. # Now to get the rest of the game done... # Took a while to sit down and get over the hump... but finally faced it. Back to testing and debugging: * Obvious GoParty_Returns/Reports bugs (infinite node-burning loops and such) squashed. * GoParty_Departs now locks up properly behind the go party. * GoParty_Departs offscreen now, thus maintaining state properly. * GoParty_Offscreen, tweaking Revenant behavior. * GoParty_Moves_Along stops at locked doors * Can drag NPCs (conscious or not) back down the ladder * Tested GoParty movement and scene selection. Not too bad now. Even managed to slay revenant! @ In other news: # Double-checked that I'll be able to pass userID to survey monkey, and that it can then pass it back to me. All good there, according to FAQs. # A bit more pondering in workingnotes.txt on how to handle the reincorporation algorithm troubles. Looks like the final answer is a combo of an imperative rating and careful/stacked authoring. ------------------------------------------------------------------------ r72 | Zach | 2010-09-13 14:14:24 -1000 (Mon, 13 Sep 2010) | 22 lines Changed paths: A /delivery A /delivery/AppletMain.java A /delivery/Stream.java A /delivery/delivery.txt A /delivery/demeter.jnlp A /delivery/saveToFile.py M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/waiting.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MSceneManager.h M /marlinspike/events/MScene.h M /workingnotes.txt By Herculean effort starting on Thursday, still managed to make my summer-level quota. (13:15 impl / 15:05 total) # Started by brushing off Demeter... * Discussion_Starts now hooks previous Discussion_Interrupted * Added confirmation/agreement from a discussion-formed GoParty member # Generally recording/reviewing what effects DM.doReinc has # Discussion stage deemed good enough at this point. # Overall, this system is so brittle and tedious! I can imagine so much more... # Sketched a little in workingnotes.txt about how to change the scene selection algorithm, because reincorporation alone is not enough. Talked to Scott about it a bit, and decided to go ahead with an author-assigned imperative measure. * Implemented that, assigning an imperative value to all 21 scenes. # Further testing will have to show if this really solves the problem... * Started testing GoParty movement * Disabled save/restore in evaluation version of Demeter # Turned attention back to delivery mechanism... * Tweaked Zag's Stream.java to record everything in memory for certain kinds of file output, instead of writing to a local file. * Then, on closing that file (or on quit), Zag now sends that content back to the server. * Wrote saveToFile.py to run on the server and store the sent details. # So all that works, and is now saved in /delivery. Just need to have a script to serve up the initial applet page so that it can embed a unique ID for each player. ------------------------------------------------------------------------ r71 | Zach | 2010-09-07 14:08:40 -1000 (Tue, 07 Sep 2010) | 7 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/scenes/reactions.h Whoa, very bad week! (1:20 impl / 1:55 total; negative token) # Actually, it was a really fun week going to my best friend's wedding, leaving on Wednesday. However, with the TAing prep required beforehand and then the hectic schedule there, not much MS done. * Played around with alternate delivery methods for the Zag applet. (Yet to get them tested...) * Some Discussion bug hunting. ------------------------------------------------------------------------ r70 | Zach | 2010-08-30 13:12:41 -1000 (Mon, 30 Aug 2010) | 15 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/beginnings.h M /demeter/events/scenes/reactions.h M /demeter/tutorial/DTutorialTalkMenu.h M /demeter/tutorial/tutorial.h M /demeter/world/locations.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h Finished the tutorial this week and got Zag running as an applet. (11:15 impl / 15:05 total; no token). * Finished Miriam_Acts, which took about 5.5 hours to compose and test properly. # Could still be a bit better, but good enough for a tutorial scene. # The tutorial has also shown me that the system itself doesn't really do much IN unless the author writes to it do so... which is very hard. So the MS1.0 story construction process is still very much brute-force and in the hands the author. I have MS2.0 ideas to ameliorate this a bit... mainly by building scenes at runtime from NPC-preferred reations and author story goals. * Finished tutorial. * Wrote DM.reset(), which had to be able to recursively destory MEvents. # Cleanup is pretty good on reset(), though there are a couple events and lists left over. Probably these are just trigger state, etc... * Tutorial ends and passes control nicely to full game. # Did some exploring on applets, JNLP, java's keytool, jarsigner, etc. * Tweaked Zag to start up as a JNLP applet, signed by me (though without a signing authority certificate). Also can't load a different game in Zag, but can still tweak preferences. # Should be downhill from there to produce the delivery system... Just need the applet to POST the transcript to the sever and then redirect the webpage to the next evaluation step. ------------------------------------------------------------------------ r69 | Zach | 2010-08-23 22:51:58 -1000 (Mon, 23 Aug 2010) | 30 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h A /demeter/tutorial (from /tutorial:68) A /demeter/tutorial/DTutorialTalkMenu.h M /demeter/tutorial/tutorial.h M /demeter/world/DFurniture.h M /demeter/world/DRoomDoor.h M /demeter/world/DSmallPassengerRoom.h M /demeter/world/locations.h M /demeter/world/npc/DNPC.h M /marlinspike/triggers/MInterruptingCastTrigger.h M /overview.txt M /schedule.txt D /tutorial This week mostly involved the tutorial and examining my delivery options while being thwarted at every other turn. (11:25 impl / 20:55 total; positive token). * Moved tutorial to its own directory and added the DTutorialTalkMenu. * Hit a memory boundary: one of the memory chunks exceeded 640k when adding one more class. # Searching suggested this could be fixed by recompiling the Inform compiler after applying a patch. However, eventually discovered this patch was already applied to Inform 7's behind-the-scenes version 6 compiler. So installed Inform 7 and borrowed its compiler to solve the problem. (A little over 2 hours lost to this search.) * Continued implementing the tutorial, which is nearly done. (Probably 2 more scenes.) # Very different working on this. The tutorial is probably going to have almost as many scenes as the main story, but vastly simpler! Rather than taking a week to write each one, it takes about 15 minutes each! (And then another 15 or so on average to test.) * Added the Give verb, which is cast to ASSIST. * Tutorial also unearthed a few minor bugs and "ugly bits", now fixed. @ In other news: # Looked into delivery options. # Looks like I'll be able to package the game within the .jar with Zag. But still need to determine how to send data back... # Spent 3 hours searching for other options. Found a number of new interpreters (FyreVM, SliverGlulx, Git, Filfre), but ZMPP and iffy looked most fruitful for my purposes of delivering a Glulx game on the web and returning some data to the server from it. # Had to install and config Apache 2.2 to try iffy. # Iffy has a C back-end on the server and a light JavaScript front-end in the browser. This seemed quite promising, since the game data is already on the server! However... # The rendered type is a bit of a mess (not CSS controlled, but still fairly fixable in .js code); scrolling is not keyboard-based like other interpreters, and produces too many blank lines at times; window support not complete (missing Glx function 2c/glk_window_get_stream, so can't write to the window); reading from files sketchy and no write support at all. # Thus, though I could fix/live with the cosmetics, it's too much work to implement the file saving C code (since even the necessary Glx functions don't exist yet). And the talk menu wouldn't work either. So much for iffy. # ZMPP uses the JVM, but is actually written in Scala. I gave it about 20 minutes. It runs as an applet, but still requires a digital certificate approval to run (like Zag). Code is confusing in a bunch of different branches. Overall, if I'm going to mess with this, I'd rather do the same to the simpler/more robust Zag. # Considered converting Zag to run as a normal applet. However, it uses system Properties extensively throughout its various libraries/components; reading those require being outside the sandbox. So that's not an easy fix. # Conclusion: After ruling out Quixe last week for being too slow, I'm going to have to go with Zag as my delivery system. I'm going to have to deal with the digital certificate issue, either signing it myself or asking users to ignore the security warning. I may be able to run it as an applet cosmetically. I've looked at the details of how to send the data back, but haven't started to deal with the implementing of it yet. # Replied to a query from Sam Joseph about NLP and Inform interpreters. ------------------------------------------------------------------------ r68 | Zach | 2010-08-16 12:49:55 -1000 (Mon, 16 Aug 2010) | 39 lines Changed paths: M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DRecastTrigger.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DVerbHooks.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/beginnings.h M /demeter/events/scenes/endings.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h A /demeter/eventtree.bat M /demeter/world/DSmallPassengerRoom.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /schedule.txt A /tutorial A /tutorial/tutorial.h M /workingnotes.txt Start of a bigger push after revising my schedule. (17:15 impl / 20:35; positive token) # Primarily testing and shaking the bugs out of the reaction subsystem: * Fixed dmnpcs output error due to the Revenant not having a plan (or affinity for itself). * Bug in NPC_Defends_Other meant affront was treated as 0 when running under NPCs_React, thus giving rather milk-toast behavior. * NPC_Defied will play Outraged if defying event's parent was outraging (again, giving a little more anger/verve to NPCs). * DRecastTrigger will set the recast event's location if the recast rules don't. * Multiple romances of an NPC forms a single thread (bad form, though: only on backend, not in narration). * Defy was conflicting with Defends_Other, so... * Changed NPCs_React to look through NPCs and then reactions (rather than reactions and then NPCs). * Tweaked Outraged narration to have a broader range of narration for NPC anger, attacks, etc. * Did some spellchecking and punctuation "uniformication" of game content. # Overall, reactions play better now: just about satisfactory. # After sufficient provocation, managed to get myself beaten to death by 3 NPCs. :) # Still, have plans to end up restrained on the Observation Deck in those situations. To that end: * Cannot be beaten to death by an NPC Attack (though can be with a weapon or by a Kill attempt). * Throwing and pushing over the railing of the Observation Deck in place, with proper murder recasts. * PC_Dies ending scene in place, but needs to wait for the rest of the story before I can author the full concluding hooks/story summary. * Same for Revenant_Slain and PC_Unconscious (which needs to advance the story offscreen a ways). * Resumed GoParty_Reports, but that's hard stuff when I start it at the end of the day... * So worked on the tutorial, which went quite smoothly! # Started with a world-based tutorial plan, where the tutorial would be a separate game. But it turned out that too much duplication/copying/tweaking would be required, since the Demeter world classes are all tangled up with the Marlinspike classes. * So going ahead with a scene-based, DM driven tutorial that can be turned on/off from the main (non-evaluative) game. It's going well. @ In other news: # Some emails with Kim and a meeting with Scott # Compiling bug lists in preparation for full testing # Sketching out PC_Unconscious scene # Fixed ORLibrary's ORMiniMenu so it no longer crashes under Quixe. w00t! # So now Quixe looks to be a viable option... Need to test it with some different systems before deciding for sure. # "recording" verb saves all input verbatim, so I should be able to use this as the sole data necessary to send to the server for purposes of evaluation. # Sending data back to a server will probably be equally tricky under either Quixe or Zag, since my current plan involves hacking a Glulxe function to do it. # Rather all over the place this week, touching everything. But it all moved forward... ------------------------------------------------------------------------ r67 | Zach | 2010-08-08 23:53:24 -1000 (Sun, 08 Aug 2010) | 26 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/world/DCorpse.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /marlinspike/util/MList.h M /schedule.txt Slogging through the tricky stuff. (11:35 impl / 15:10 total hrs; no token). * Finally broke down and wrote MList.shuffle(), which is handy for randomizing the order of reactions and such. * GoParty_Reports and Evidence_Revealed, fixing some line-break issues resulting from buggy playing of speakers (sometimes counting speakers as spoken when they actually didn't). * Turned to filling in Revenant_Acts, as a break from GoParty_Reports for a while. # Turned into the whole week though, so perhaps not so much of a break after all! * Planned Revenant_Acts. Then wrote canPlay(). * Revenant is no longer incapacitated like an NPC at NEAR_DEATH. # I uncovered a problematic bug: the 19th event added to a thread causes a stack overflow. Will have to decide how to handle that later. (Increase stack and cross my fingers, or re-write thread scoring to be iterative?) * Revenant_Acts.play, with its various variations and random alternate narration versions for each: Foreshadowed, Watching, Arriving, Attacking, Fleeing. * A fair amount of testing, though state is pretty tangled and detailed. Tweaked Revenant's "inclination formula" a bit. * Fixed a few bugs, such as how to handle Evidence_Revealed recast of Revenant's appearance. (Some funny stuff going on there: Revenant was aghast at the bodies on the floor, twice, due to old state saved in that scene.) * Added a hook too: Revenant is vengeful on the his last attacker. @ In other news: # Kim's back, and we had our first meeting in months. She focused on my schedule (with good reason), which was pretty out-of-date as I've been just slogging along. # "Revised my revising schedule" again. Overwhelming, since I don't know how long so many things are going to take. Decided to work backwards from due dates. Like rolling up a toothpaste tube from the bottom, this went smoothly until about 2 months or so of "toothpaste" spilled out the top. # So, I guess it's time to shoot for two tokens over the next two weeks! Not sure what else to do. # With that in mind, started thinking about things that need work beyond just the implementation. (That's been my focus for the past months, but it is hard to stick to for more than an hour or two at a stretch.) # Planned some testing approaches for the various story stages... # Glanced over the old proposal pages. Need to dust those off... # Quixe or Zag? That significant question remains... ------------------------------------------------------------------------ r66 | Zach | 2010-08-02 14:22:31 -1000 (Mon, 02 Aug 2010) | 36 lines Changed paths: M /demeter/Demeter.inf M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/waiting.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MEventHistory.h M /workingnotes.txt Back go the grind. (10:45 impl / 15:05 total; no token) * Some GoParty_Offscreen testing. For example: what if PC is in the Ladderway? Does the knock to get back in work? Etc. # Called it: tested enough for now. # The potential story states have recently exceeded my mental capacity to visualize and maintain. While theoretically the scene preconditions are supposed to ensure any necessary state obtains before the scene plays, in practice there are number of implicit assumptions in play. For example: if the player or GoParty is in a Zeppelin location, they must have arrived there at some point in the story, and so that even should be in the event history. During testing, when working with story fragments, these implicit assumptions are sometimes invalidated, which prompts some debugging only to find that it shouldn't (fingers crossed!) be a problem in the actual game. # Coming off of last week's GoParty_Offscreen, I have now been working on the equally hard GoParty_Reports. This requires a lot of event history processing to see what has occurred previously, and then some extremely primitive/brute-force "natural language processing" to try to narrate it all coherently. * GoParty_Reports.getCauses() * GoParty_Reports.play() # Various debugging, testing and tweaks: * Bug in GoParty_Departs: was grabbing the PC as if an NPC. * Moves the GoParty_Offscreen query of "You hear voices. Investigate?" into a playerHearsOffscreen method to be reused elsewhere, like from GoParty_Returns. * Awaiting_GoParty will only play once per GoParty now. * The dmnpcs debug verb now gives character locations in the world * Tweaks to MEventHistory.find so that size() as an index == the current event. Also speeded execution by cutting some size() method calls. * Ran into a few bugs--all rather stupid. A couple infinite loops (my bad--but so hard to debug in Inform since there is no output for the entire turn!). Then realized that when GP_Reports is the ending part of GP_Offscreen, nothing the GoParty did is in the event history to be found yet! * So overhauled to make GoParty_Returns be a separate event, and any preceding event (such as GoParty_Offscreen) will need to get the DM to respondAgain. * More tweaking, this time of Evidence_Revealed and DNPC.increaseEvidence, to run fully or partly silent. * Tweaked the output formatting of GoParty_Reports. I was having some trouble with too many/few blank lines and/or spaces depending on what got reported and what didn't. Now have NPC reactions mingled in with the report, which is pretty nice. # GoParty_Reports still not done... though nearly. I also want to report any PC violence, so need to work that in too. @ In other news: # Took another look at Quixe, which is supposedly release-ready now. Still crashing due to the talk menu. So I poured over the ORLibrary code and managed to tweak the cursor location so that it no longer crashes. Yay! # However, I still get another crash on exit from the talk menu having to do with a wrong window reference. Not as sure I'll be able to work around that one... # Still torn between going with Quixe or Zag for final evaluation delivery. I think both will require some hacking to get them to save data automatically and send it to a server without any user input. I think Quixe would be more convenient, but it's also slower (and, currently, bug-prone). Guess I'll have to keep investigating each before deciding. # Also need to decide exactly what data I want sent. # Also went through my sketch notes removing finished pages, mostly adding to Working Notes in the documentation. # Once all my sketch notes are digitized, I'll be done! Still have about 25 pages though... # Motivation continues to be a problem. It's hard to sit down and tackle such a tangled mess when the task is so hard, progress is so slow, and the final output is so disappointing. ------------------------------------------------------------------------ r65 | Zach | 2010-07-26 15:13:05 -1000 (Mon, 26 Jul 2010) | 8 lines Changed paths: M /demeter/Demeter.inf M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /workingnotes.txt Rest of week from the last commit. (10:10 impl / 12:30 total). * Testing and debugging of GoParty_Offscreen. Includes things like trying a larger GoParty, correcting various event history details, ensuring the party returns to the gondola correctly, and fixing silent evidence increases. # Works okay, though still need to decide on how to best select from multiple canPlay scenes, as discussed at last commit. Right now, GoParty acts poorly because it assumes certain things are going to happen while in the presence of the PC, and they currently aren't because the GoParty just leaves instead. # This was the last week on reduced summer hours. Now back to the normal routine: 15hrs min to avoid a negative token. Guess I'll leave the new 10 hr min for implementing in place though. ------------------------------------------------------------------------ r64 | Zach | 2010-07-24 12:10:54 -1000 (Sat, 24 Jul 2010) | 16 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/waiting.h M /linecount.bat M /marlinspike/dm/MThreadManager.h A /notes A /notes/Evidence_Revealed.gif A /notes/GoParty_Moves_Along.gif A /notes/Pursues_Plan.gif M /workingnotes.txt Not quite to the end of the week yet, but will be flying tomorrow, so backing up now. * Worked on GoParty_Results a bit. # Sketched a bit and decided to break things down a bit better, into GoParty_Offscreen, GoParty_Returns, GoParty_Reports, and Awaiting_GoParty (which is already mostly done). * GoParty_Offscreen nearly all week. Involves moving GoParty around unseen, and filling in events that happen. # GoParty maintenance and generally managing the world state (such as not teleporting passed locked doors, open and closing them properly, not teleporting unseen past the PC, etc) is a bit of a headache. * Also involved making some existing scenes (such as Evidence_Revealed) run silently when necessary. * Some testing of what I have so far. * Stalled by an infinite loop (my own stupid fault), but hard to track down since Inform won't print anything from the start of the turn until the loop, so it's hard to tell when/where the loop starts. @In other news: # Also did some sketching (in workingnotes.txt) about the weighting algorithm. In short, currently not picking the best scene to play, story-wise. Wanted to get some thoughts down on that to stew on over the weekend before making such a big design tweak (if any). # In looking closer, I also found a year-old bug (forgot to e-- when removing an event from a list) in weighing the unique events of a thread. So tracked that down and fixed it. ------------------------------------------------------------------------ r63 | Zach | 2010-07-19 11:29:33 -1000 (Mon, 19 Jul 2010) | 16 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/components.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/waiting.h M /demeter/eventtree.py M /demeter/world/DSmallPassengerRoom.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MSceneManager.h Not as good a week as I had hoped for. Only the bare minimum, in fact. :( (10:30 impl / 12:10 total). * Fixed recast on plan support * Awaiting_GoParty: what the stay party does in the mean time. # Various tedium here. For example, one NPC plan to follow here is to look for a weapon. To do this right requires first looking for a chair leg anywhere in the gondola. If there are none, then need to find a small chair and smash it. And if there are no small chairs left, then to have a default "looking without success". So this is a couple loops and conditionals forming half a page of code for only 1 of 9 plans in order to make sure story adheres to the world state. # There has to be a smoother/better way to do all this logic/checking for MS2.0! * Hunted down a couple list leaks. * Overhauled DNPC.do to run silently for offscreen actions. * GoParty_Results: how the GoParty returns when the PC didn't go. * Revenant_Acts: the logic of how the Revenant decides what to do for parties of different sizes. # Spent some time puzzling over what should go where between Revenant_Attacks (renamed form Revenant_Reacts), Revenant_Acts, and GoParty_Results. As the names now demonstrate, I think I've this sorted out a little better. But took some tweaking to get these different scenes to handle both on- and off-screen play, etc. # The way looks clear on this now... ------------------------------------------------------------------------ r62 | Zach | 2010-07-12 09:31:18 -1000 (Mon, 12 Jul 2010) | 16 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/scenes/components.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/goparty.h M /demeter/world/DLocation.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/triggers/MStateTrigger.h M /marlinspike/util/MList.h Not a bad week, considering it was only 1/2 a week on summer hours: (12:00 impl / 13:05 total hrs; no token). * Tweaked GoParty management, so that members are dropped and ends when the GoParty is empty. * GoParty_Returns.canPlay * GoParty_Departs.canPlay * MStateTrigger.init() (and associated MTriggerManager tweaks) * DT_PC_Leads_GoParty_Departure * GoParty_Departs.play * A couple more helper DNPC routines * MList.prettyPrint to print a comma-separated list * Impromptu_GoParty (written in only 2 hrs; it can be done!) * GoParty_Departs finally complete: a couple different ways to depart, but always interrupted by this long enough for everyone to come in and give comments. Can also change the composition of the GoParty. @ In other news: # Mostly just sketching/planning goparty management. ------------------------------------------------------------------------ r61 | Zach | 2010-07-07 07:17:23 -1000 (Wed, 07 Jul 2010) | 11 lines Changed paths: M /demeter/Demeter.inf M /demeter/events/scenes/components.h M /demeter/events/scenes/goparty.h M /demeter/events/scenes/scenes.h A /demeter/events/scenes/waiting.h M /demeter/world/locations.h With travel to Michigan, my best friend's bachelor party weekend, and then the long drive to NY, didn't make the quota. (3:00 impl / 5:30 total hrs; negative token). Will need to make this up next week (since I'm also getting a late start this week!). * GoParty.isOffscreen * GoParty_Returns, GoParty_Departs, and Awaiting_GoParty scenes started. @ In other news: # Some scene planning/sketching # Got a CRN from Kim for next term. ------------------------------------------------------------------------ r60 | Zach | 2010-06-28 14:54:00 -1000 (Mon, 28 Jun 2010) | 28 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/scenes/discussion.h Oops: previous commit notes didn't go through (some problem with using TextPad). So took the opportunity to also make a demo version of Demeter with all the current scenes available for play. Still a bit buggy, I think... especially with how much everyone wants to start a discussion. And no Revenant is available in the world in this version. [Considering the time and effort that went into it, this game sucks.] ---- Managed to come through with a good 3 day push at the end of the week: 11:25 impl/15:05 total hrs; no token. * Massaged Revenant attack reactions * Tested and hunted bugs in the completed Pursues_Plan. * Split exploration.h, creating goparty.h with only GoParty-specific scenes. * Added intercom to dining room. (Using it == EXPLORE_INFO). * Considered a GreenRoom object for off-screen NPCs, but decided on DNPC__GetOffscreen instead. * GoParty_Requests_Follow * Tweaked DNPC.speakTo to included manner of speaking. * DLocation__IsPath, which will let me move NPCs around behind the scenes while still avoiding the PC. * Fixed GoParty_Moves_Along (wasn't counting any move-along in the current event). * NPC_Replies_To_Plan_Action (which required DNPC.opposesPlan). # Works, though can be a bit disjointed at times. # Looking over this, it doesn't seem like very much. I really need to move forward on primary scenes! If I can finish up by the end of July, I should be okay... # That said, I will going to MI/NY for the next 4 weeks. Without the weekends to work, I'd like to change my quota from 15 to 12 hrs total min, though increase my impl min from 8hrs to 10hrs. @ In other news: # Discovered and checked out Quixe: a JavaScript implementation of Glulx, by Glulx's author, Zarf. This would be perfect for my web-delivery--better than the current Java Web Start approach I have planned. However, Quixe is still pre-release right now, and my talk menu's make it crash. Still, it looks like Zarf is working on it almost daily, so it might still be ready when I am... We'll see. # Consolidated some notes and did some scene planning. I need to finish constructing the final list of scenes (hopefully this coming week) so that I know exactly what needs to be finished up to complete the implementation. # (This story has changed a lot since my initial conception. Sadly, much more simplistic with less social manipulation than I'd hoped...) # Also probably need to revise my evaluation's focus on MS's reincorporation technique. The selection process isn't going to make much difference after all because I just don't have that many scenes (and many multiple scenes have been consolidated to larger, heavily-templated scenes). But I can still increase the degree of "hooking in" that happens, and turn that on and off. So, in that case, I think I'll be testing more the *degree* of reincorporation, rather than just whether an event is reincorporated or not. Will have to give this more thought, especially when it comes to measurement metrics of this... ------------------------------------------------------------------------ r59 | Zach | 2010-06-28 14:37:51 -1000 (Mon, 28 Jun 2010) | 1 line Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/exploration.h A /demeter/events/scenes/goparty.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/scenes.h M /demeter/world/DLocation.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /gendocs.bat M /overview.txt ------------------------------------------------------------------------ r58 | Zach | 2010-06-23 13:14:39 -1000 (Wed, 23 Jun 2010) | 14 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/reactions.h M /demeter/eventtree.py M /demeter/world/DSmallPassengerRoom.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MSceneManager.h A rough week but still made the quota: 14:25 impl/15:35 total; no token. @ My laptop (Ambrosius) was hit by malware through a Java security hole on Thursday. Luckily, my new laptop (Peace) arrived later that day. However, since Ambrosius can no longer safely go online, I've been split between two machines since then while configuring Peace. Still, I kept implementing a priority, and so this is the final commit from Ambrosius before switching over the SVN. * Pursues_Plan, which took a long time to get the 9 or so plans all implemented. * DNPC.do() revisited and greatly expanded so that NPCs can easily perform certain deeds. # (In MS2.0, verbs/deeds should no longer be PC-centric.) * The week ended with some retesting of Purses_Plan now that it's done. # I'm still trying to get it to play nicely with NPCs_React and other scenes. # In other news: @ eventtree.py output now includes the highest import of each event tree, and also color codes events accordingly. ------------------------------------------------------------------------ r57 | Zach | 2010-06-14 14:14:58 -1000 (Mon, 14 Jun 2010) | 27 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DReaction.h M /demeter/events/DT_DefaultCasts.h M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/beginnings.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/reactions.h M /demeter/world/DLocation.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /marlinspike/dm/MDramaManager.h The summer slog continues... (14:05 impl / 15:05 total; no token.) # A few tweaks: * DReaction.contraint to prevent certain reactions from repeating in the same turn. * Tweaked grammar for Use verb; modified storage crates and fixed healing from using sinks. @ Scott's second alpha test for me. # Led to a few more tweaks. The most notable included: * Reworked Help message * Dropped proposition requirements for Look, Talk, etc. * Fixed Stairwell room (didn't list W exit) # Definitely need a tutorial, though I think it will help a lot. * Discussion_Curtailed completed. * Started NPC_Sees_Evidence, which eventually became the scene Evidence_Revealed. * Also changed GoParty_Moves_Along to be a scene. * Moved Revenant.evidence to DCharacter.evidence (so it's a personal rather than a global thing, which makes much more sense). * DNPC.increaseEvidence method. * Revenant_Reacts filled in. * A long weekend push finished up Evidence_Revealed. # May need to be moved around a bit later, as it is currently acting as a GoParty scene, but some of these things could happen in the StayParty. * Plays pretty nicely, tho--actually have a sense of moving around with live characters. # Started Pursues_Plan (which would sound better with NPC_ before it, but then it'd look like a reaction). ------------------------------------------------------------------------ r56 | Zach | 2010-06-07 12:54:19 -1000 (Mon, 07 Jun 2010) | 26 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/discussion.h M /demeter/events/scenes/exploration.h M /demeter/events/scenes/reactions.h M /demeter/eventtree.py M /demeter/world/DLocation.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h M /marlinspike/triggers/MStateTrigger.h Worked on GoParty management all week. (14:15hrs impl/15:25hrs total) * Toyed with an Inform daemon to move GoParty around, but this could lead to various problems (such as moving the party when reactions should take priority, and still trying to move everyone on Wait, considering last week's Wait hack). # So ended up ripping the daemon approach back out. * GoParty_Moves_Along, which is both a reaction and an action (to recast PC's movement). * Had to deal with path determination, translating directions to destinations, physically moving everyone, and managing doors (including unlocking and opening when NPCs lead the way). * Spent an hour on a bug that was changing the locations of previous events in the EventHistory. Tracked down a = that should have been a == in MEvent.equals. * NPCs also follow PC. * Managing who is still in the GoParty due to death, etc. * New CHANGE_STATE action. * Added DNPC_GetActive(fromList) and DNPC_SelectActive routines. * Now prints a HELP recommendation on bad verb input. * You get two free LOOK or EXAMINEs a turn. (Hopefully this doesn't make the GoParty feel too laggy, though.) # This commit is a bit buggy yet: # Currently merging Discussion and GoParty work together. * Dicussion_Curtailed in progress. # Trying to keep people from moving during discussions # Also a known bug with reactions: can get two GoParty_Moves_Along in one turn. # May be related to getting two of the same reactions for the same NPC with small groups. # In other news: @ Just some scene planning/sketching. ------------------------------------------------------------------------ r55 | Zach | 2010-05-31 00:17:34 -1000 (Mon, 31 May 2010) | 18 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/actions.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/reactions.h A /demeter/eventtree.py M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /demeter/world/npc/plans.h M /marlinspike/dm/MDramaManager.h M /workingnotes.txt Another week: (8:10hr impl/15:10hs; no token) #Rule change: I still need a minimum of 8hrs implementing && 15hrs total to avoid a negative token. However, to get a positive token, I need 15hrs (not 12) implementing or 20hrs total. * Looked over SUPPORT.do() and how it provides ENDEAR/AFFRONT recast and whether to switch this to a proper recast mechanism. The current approach is ugly and uses 2x as many event objects as necessary. However, I decided to leave it considering the potential ripple effect at this point. * Decided to go ahead with the "hit enter to wait" hack. Only drawback is that the world and Inform does not repond to this Wait (but story-level/DM responds correctly). So Inform's Moves count does not go up and will probably cause problems with any world daemons. We'll see... * DT_PlanSupport: casting various actions in terms of which plans they support. This was the main thrust of this week. * Made the Revenant an NPC so you can perform actions on him. (This reverses revision 36.) * Revenant_React: Revenant gets mad at whatever you do to it, but actually attacking it makes it really mad. * A couple easy actions added: HINDER and ASSIST * Debugging of DT_PlanSupport took a while. #Other news: @ About 6 hours on eventtree.py. Generates a .DOT file and thus a story map .GIF. Works well enough, those the reinc lines are very squiggly and map is hard to read. No sure how useful it is now that I see it... though it does give a nice demo of all the things the system is doing behind the scenes. # As I was telling S: Authoring Demeter is like God crafting the digestive system. Yes, there is an incredibly detailed and elaborate network of components and organ sub-system that must all be work together precisely. But, in the end, it's only the final product that everyone actually sees... ------------------------------------------------------------------------ r54 | Zach | 2010-05-24 12:56:28 -1000 (Mon, 24 May 2010) | 31 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/scenes/NPCs_React.h M /demeter/events/scenes/components.h M /demeter/events/scenes/discussion.h A /demeter/events/scenes/exploration.h M /demeter/events/scenes/reactions.h M /demeter/events/scenes/scenes.h M /demeter/events/triggers.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /schedule.txt A grueling week as Ambrosius (my laptop) started flaking out and I spent a lot of time dealing with that. But, thanks to a long Sunday, the first week of the summer is a success: (13:05hrs impl/15:20hrs total; positive token!) # I'm thinking about changing the rules for next week though, to 15hrs implementing (up from 12hrs) for a positive token. * Dug around in Inform guts to see if I could treat no input as a Wait command. # I could probably fake it, but it wouldn't be pretty... # Still, after another week of playing the game, this may be worth looking into again... * GoParty.selectGoParty * Discussion_Concludes (many hours, but finally done) * A few new helper DNPC routines: DNPC__GetPlan and DNPC__GetVibe (plan axis preference for a group). * Overhauled TalkMenu so you can't insult or praise people to the group: to everyone, you can only state opinion on issues. # In retrospect, maybe this was a bad idea? May want to revisit this later. * Touched all main scenes in order to call reactions first. I think this runs better (less desire to light the match and burn it all down...) * Also tweaked NPCs_React so it won't call for the next scene if some serious (import >= 4) reactions just played. * Discussion_Interrupted * DNPC.speakTo added so now NPCs label who they are talking too. Makes output slightly busier, but I think it helps clarify overall. # Discussion stage is finally done! # A couple tweaks yet pending perhaps. Most notably, may want to support a Discussion PAUSE and RESUME state, so we don't start over at the beginning after each interrupt. # Started on DT_PlanSupport # Need to sit down and do some sketching (especially since that now counts towards total time) #In other news: @ Sketched: which actions support which plans @ Massaging schedule (Grad division approved my extension till Spring 2011, though I'm now on academic probation) @ Hand-writing a sample DOT event map as precursor to generating them from the events.txt file dumped by Demeter. Have layout controlled pretty decently so far, and a labelling convention to control arrow placement. ------------------------------------------------------------------------ r53 | Zach | 2010-05-17 15:11:03 -1000 (Mon, 17 May 2010) | 27 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h M /demeter/events/DT_DefaultRecasts.h D /demeter/events/NPCs_React.h D /demeter/events/beginnings.h D /demeter/events/components.h D /demeter/events/endings.h M /demeter/events/events.h D /demeter/events/middles.h D /demeter/events/reactions.h A /demeter/events/scenes A /demeter/events/scenes/NPCs_React.h (from /demeter/events/NPCs_React.h:49) A /demeter/events/scenes/beginnings.h (from /demeter/events/beginnings.h:48) A /demeter/events/scenes/components.h (from /demeter/events/components.h:52) A /demeter/events/scenes/discussion.h (from /demeter/events/middles.h:52) A /demeter/events/scenes/endings.h (from /demeter/events/endings.h:48) A /demeter/events/scenes/reactions.h (from /demeter/events/reactions.h:52) A /demeter/events/scenes/scenes.h M /demeter/events/triggers.h M /demeter/world/DHammock.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MSceneManager.h Final week of the semester, with a grueling Sunday after all the grading was done. (8:15hrs; no token) * DST_Discussion: cleaned up docs a bit, and now it casts Discussion_Concludes to end the discussion state. * Discussion_Query: asks the PC for their opinion if haven't spoken by the time everyone else has. * DNPC.getPlanAxis() * Too much code, so I reorganized files: moved all scene-related componenets into events/scenes and broke up middles.h into the different "story stage" groups. * Scenes are now loaded manually in DInitialise() to control order so selection ties are broken predictably. # Based on how Discussion_Query rather sucked, and in general how the discussion doesn't flow but instead stops too frequently... * Implemented DM.respondAgain. This allows a scene to tell the DM to select and play another scene again immediately, rather than giving control back to the player. * Took a couple tries to get DM.respondAgain working correctly: had to move its effect from DM.respond() to DM.playNextScene(). * NPCs_React will now prompt DM.respondAgain, so if there are only reactions to play, the DM then gets a chance to select the next scene. # The companion change to this should probably be that NPCs_React become the highest (rather than lowest) priority scene. Thus, NPCs would always react, and then let the DM do whatever it wants to do to further the action. I'm still not sure about this yet, though... Current approach is to let each scene decide if it wants to start with reactions. * NPCs_React.reactToCurrent now simplifies the process of a scene playing reactions internally. * Discussion_Concludes.play... tricky to summarize a dicussion and move the action along, but nearly done. # This commit is actually 1:30hrs into the following week. Discussion is almost done... though still needs to be massaged a bit. # As Marlinspike/Demeter grows it becomes more and more obvious that this is a painful, brute-force approach to the IN problem! # Next week begins summer vacation. I will be upping my time requirements as follows: # Min. level: 8hr of implementation && 15hr total work (or negative token). # Reward level: 12hrs of implementation || 20hrs total work (for positive token). # Other acceptable work (@) besides implementing includes: writing/revising proposal into dissertation, preparing web delivery of Demeter for evaluation; producing visual story graphs; Demeter scene sketching/planning (but not MS2.0 sketching); etc. ------------------------------------------------------------------------ r52 | Zach | 2010-05-10 13:06:01 -1000 (Mon, 10 May 2010) | 20 lines Changed paths: M /demeter/events/actions.h M /demeter/events/components.h M /demeter/events/middles.h M /demeter/events/reactions.h M /demeter/events/triggers.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /marlinspike/triggers/MStateTrigger.h M /workingnotes.txt Shooting to finish this eternal, treacly Discussion stage... but not quite. (8:10hrs; no token) * Recorded Action notes into docs, including a couple Actions I may still want to implement (OFFEND, COMPLEMENT, etc.) and those that won't make it to this game. * Added non-verbal NPC reactions to opinion # Still really hard to see resulting affinity changes. (From time log: "Sometimes I just want to burn this thing to the ground!") * Seemed to have a bug in MEvent.equals... but further hunting revealed that, no, it's just another flaw in the event processing sequence: when determining reactions as sub-parts of the current scene, nothing that happened earlier in the scene has been DOne yet, and so has not yet affected the world state or (due to earlier hack) had the SUPPORT/OPPOSEs recast to AFFRONT/ENDEARs yet. Added the details of this "problem" to workingnotes.txt. * Discussion_Starts determines the topic/plan axis for the ensuing discussion. * NPC_Proposes_Plan adheres to the discussion topic (or not, as appropriate) * Fixed bug in Discussion_Continues segway text (was based on the wrong affinity) * Sketched/started DST_GoParty * Discussion_Interrupted.canPlay * Discussion_Concludes.canPlay * Discussion_Continues can build on PC statements # Working when too tired: A scene really shouldn't only play reactions (which is already NPCs_React's job), since scenes play after the current action has been shifted into the EventHistory proper. And, since the PC talking already effectively == a Discussion_Continues, Discussion_Continues really shouldn't play right after a PC spoke. So had to rip some of this back out again to make it right again. # On Discussion, still need to finish: _Concludes, _Interrupted, and _Query. # Then need to get moving on GoParty phase... ------------------------------------------------------------------------ r51 | Zach | 2010-05-03 10:46:37 -1000 (Mon, 03 May 2010) | 27 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DReaction.h M /demeter/events/actions.h M /demeter/events/components.h M /demeter/events/middles.h M /demeter/events/reactions.h M /demeter/events/triggers.h M /demeter/world/DCorpse.h M /demeter/world/DHatch.h M /demeter/world/DLocation.h M /demeter/world/items.h M /demeter/world/locations.h M /marlinspike/dm/MSceneManager.h M /marlinspike/events/MEvent.h It's getting hard now... (8:10hrs; no token; 1:30 hrs sketching) * Zeppelin hatch is muffled/heavy until the dead body rolls off of it * Last 2 corpses in place. * Hammer and crates. * Put in girders * Climbing and jumping refusals in a couple spots (girders and railing) * Railing suicide option # Generally proofing the world--seems to all be working. # Done with the world! (Well, at least until alpha/beta tests show what I missed...) # Now there's nothing left to do but scenes, which means I can't ignore the hard stuff anymore... # Spent a while consolidating my notes to see what I'm trying to do here. # Back into the Discussion trenches: * Discussion state's getSpoken() and getSpeakers() * Added a warning from MSceneManager when a canPlay() fails to return a MList. * Fixed MEvent.equals() to handle skipped matches properly (required a global variable manipulated during recursion--not so fun.) * Discussion_Continues now refers back with agreement/disagreement to the previous speaker, giving a bit more of a "discussion" feel. # Still want to focus Dicussion on one plan axis at a time, though. # And the peanut gallery annoys me: need some nonverbal shrugs, nods, and shakes of the head in there instead. # For all the effort, some days it feels like this whole thing just sucks. * Started Discussion_Concludes and Dicussion_Interrupted. # I'm becoming more certain that some sort of centralized, declarative statements of world/story rules is the way to go in MS2.0. ------------------------------------------------------------------------ r50 | Zach | 2010-04-26 00:28:45 -1000 (Mon, 26 Apr 2010) | 7 lines Changed paths: M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DVerbHooks.h M /demeter/world/DCorpse.h M /demeter/world/DProp.h M /demeter/world/items.h M /demeter/world/locations.h Good time-management for the first half of the week, but nothing to show for it (8:05 hrs; no token) # Time goes by suprisingly fast while working on the world. * Galley and cupboards * Nearly 6 hours (!?) on getting the shelves_of_food, sacks, and food to play nicely together. Works well enough now, though still need to handle giving food to another character. * First 3 of 5 corpses in place. ------------------------------------------------------------------------ r49 | Zach | 2010-04-18 22:18:01 -1000 (Sun, 18 Apr 2010) | 21 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h A /demeter/events/NPCs_React.h M /demeter/events/events.h M /demeter/events/middles.h M /demeter/events/reactions.h M /demeter/world/DCorpse.h A /demeter/world/DHammock.h M /demeter/world/locations.h M /demeter/world/npc/DAffinity.h M /demeter/world/world.h A busy week with other things (8:40 hrs; no token) # Other things included covering Scott's 111 lecture (7 hrs with prep), taxes (4 hrs), and 7:45hrs of sketching notes, which included both MS2.0 design and consolidating my scattered MS1.0 notes, etc. * DAffinty now privately exceeds 100/-100 limits so that the value returned by modify can be 100% of what it "should" be (rather than limited due to affinity range limits) and yet still be undo-able. Publicly, limits are still enforced. * Moved NPCs_React to its own file * Tweaked affront degree of violent assaults. # Everything feels so... opaque lately. It's cluttered and tangled and frustrating, especially as I've started working out how a lot of these things could be handled much more elegantly in MS2.0. Still, gotta keep plugging away... Remember, "it's just a prototype". # Mostly worked on the world, which is essentially all sketched-out now. (I still need to go through and drop some corpses and splatter the walls with blood, though!) * Mess Hall area, with folding table, outer shell, lights, etc. * Storage Walkway (which I then moved to the bow), with almost-unopenable wooden crates * Hammock Walkway, with hammocks * Reorganized locations.h (It's so long, I should really break it up, but nearly done now...) * Crew WC. (Made the toilets work: you can flush things now. :)) * Galley (not done yet--need the cabinets working) * Engine rooms. Can disable the two engines, and you can then see the effect in the room and engine description, as well as in the prop out the window. # End of semester is coming up fast... I want to earn at least one token by then! ------------------------------------------------------------------------ r48 | Zach | 2010-04-12 22:28:44 -1000 (Mon, 12 Apr 2010) | 17 lines Changed paths: M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h A /demeter/events/beginnings.h M /demeter/events/components.h A /demeter/events/endings.h M /demeter/events/events.h A /demeter/events/middles.h (from /demeter/events/scenes.h:47) D /demeter/events/scenes.h M /demeter/world/locations.h M /demeter/world/npc/DCharacter.h Ugh... (8:05 hrs; no token)(+1 hour scene sketching) # Lots of tired late nights this week, so focused on locations (which are tedious, but generally easier than scenes) * Engine rooms * Gas bags * DemeterTime added (day, night, dawn, or dusk) and elevation (determined by the number of gas bags remaining). These affect the sky/ocean description. * Crew mess hall # Did do some scene work too though: * PC can start a Discussion state now * Reactresses are now shuffled if there was no affinity change so that, on simple reactions, it's not always the same NPC that reacts each time. * Split scenes.h into beginnings.h, middles.h, and endings.h * Started on character death endings * Hit another dangling/non-duped list getting incorrectly destroyed and reused (state in NPCs_React). Took a while to track down (though nothing like last time). # Overall, I'm getting quite frustrated with the slow progress: it feels like I've just been spinning my wheels for the past 3 commits. Also, I'm still not happy with how the conversations and certain reactions are playing. Hopefully I can fix those and get moving forward again this week! ------------------------------------------------------------------------ r47 | Zach | 2010-04-04 23:21:48 -1000 (Sun, 04 Apr 2010) | 21 lines Changed paths: M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/actions.h M /demeter/events/components.h M /demeter/events/reactions.h M /demeter/events/scenes.h M /demeter/world/DHatch.h M /demeter/world/DLargePassengerRoom.h M /demeter/world/DSmallPassengerRoom.h M /demeter/world/locations.h M /linecount.bat M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h A very short week (8:05hrs; no token) # However, spent 11hrs on writing, delivering, reviewing, and answering online questions regarding my 720 presentation this week. * Renamed NPC_Starts_Discussion to simply Discussion_Starts (so the name looks like a scene rather than a reaction). * Discussion_Continues.canPlay() * MEventHistory.find now takes a stopAt parameter * NPC_Proposes_Plan recast to SUP/OPP * NPC_Replies split into NPC_Replies and NPC_Replies_To_Opinion * NPC_Replies tested. # NPCs now reply to each other when one proposes a plan. # Discussion ongoing (though doesn't stop yet). * Tell verb adjusted slightly. * World room class hierarch fixed slightly. * Can look out the porthole now # Checked over existing world a bit a fixed a few oddities * Sketched out Zeppelin rooms * Wrote Gas_Bags (which are found in every Zeppelin room). # Updated linecount.bat: Have ~9500 lines of code and ~6000 lines of documentation at this point. ------------------------------------------------------------------------ r46 | Zach | 2010-03-29 10:50:17 -1000 (Mon, 29 Mar 2010) | 16 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/components.h M /demeter/events/reactions.h M /demeter/events/scenes.h M /demeter/events/triggers.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MEvent.h M /marlinspike/util/MList.h Sping break proved less productive than I'd hoped (8:30hrs; no token). # Contined with the big bug hunt of the last commit. * Added debug compile options for MEvent and MList to list each create/destroy and each add/remove. # 2 hours later: found it! I was returning a list rather than a copy/clone of a list from NPCs_React.canPlay(). While this is normal for most canPlays(), NPCs_React needs to keep its own copy of the list so it can short-circuit. On the next turn, when it would delete its own copy, it was actually destroying an already-destroyed list. Since list objects are reused, this already-destroyed list was actually in use again, serving as a new but completely unrelated list. In the test case, it was now an MEvent's reincs list. When this second, now-destroyed, unrelated list was then also reused, its new contents were still being referred to by the MEvent. Thus: the MEvent was suddenly getting a strange reincs list during the execution of completely unrelated code. Ah, pointers. * Massaged action and reaction imports so NPCs_React plays an appropriate number of reactions. * NPC_Starts_Discussion finished and tested. * DST_Discussion story state trigger works (though needs to stop restarting the discussion at every opportunity!) # Looked through for list leaks: none if just looking/waiting. # Later found one just reading code in TriggerManager: forgot to delete a trigger-returned MList of recasts. * Reactions now play as part of NPC_Starts_Discussion * Overhauled Talk to not use so many events when talking to all (just one Tell event). Required a bit more other tweaking than expected, but it's done now. # Overall, it feels like the reactions and general state managing stuff has all been cleaned up and is working nicely. Time (finally/again?) to move into the real scenes! And quickly... ------------------------------------------------------------------------ r45 | Zach | 2010-03-22 21:18:22 -1000 (Mon, 22 Mar 2010) | 18 lines Changed paths: M /demeter/DRoutines.h M /demeter/events/DReaction.h M /demeter/events/DRecastTrigger.h M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/actions.h M /demeter/events/components.h M /demeter/events/reactions.h M /demeter/events/scenes.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h Another barely week (8:15hr; no token). # After some blank staring (aka, planning) for a bit at the task ahead, started the overhaul of existing reactions in accordance with my last commit's plan: to save the state of each reaction after its canPlay and then reinstate it before playing it. Therefore: * Each reaction is now limited to using only 3 instance variables: cause, repeat, and state (though state can be a MList). Also, each canPlay can be specified to use only a certain NPC. Overhauled all reactions to work this way, which took about 2.5 hrs. * Wrote NPCs_React to save and restore this state properly for each reaction. * Went through and tested that each reaction still plays correctly under the new system. # If I run a lot of scenes, the time lag between entering a command and the resulting output gets pretty significant. Some serious processing going on! This is worrisome... but I'll worry about it later. # In the spirit of efficiency, however, I decided I'd better keep NPCs_React from repeating its intensive polling of each reaction (along with all their polling). * NPCs_React now "short-circuits": if was already polled for the current event, it just returns the same thing if polled again during the same turn. This means any scene that wants to include reactions (which should be most of them) can call it with reckless abandon. # Interstingly, I'm slowly coming around to an earlier sketch-design I dropped: reactions vs scenes, where reactions play each turn and then only 1 scene. # Ran into difficulties with presence with reactions that follow TRAVEL: the NPC was present at the start of the event but is not around after the end, and so shouldn't react. But canPlays were using the story-level/start location, so non-present NPCs were reacting. * Tweaked MDramaManager.getPresent so that one can specify the particular location, allowing for each checking of the source location or the current real-world location (by default). # Reactions now work correctly with motion. # Then hit a crash bug: if I push the Count E and then push him W, the second push seems to be reincorporating itself (and also the Count's TRAVEL recast, but not the PC's TRAVEL recast). This leads to an infinite recursion when determining the reincorporation tree. I've spent over 1.5 hours on this (and now provide some nice debugging output to clearly flag such a bug in the future), but still have not figured out where/why the scene is having its reincs set... I know it has to do with NPCs_React playing or not, so I guess it's now just a matter of more hunting time... ------------------------------------------------------------------------ r44 | Zach | 2010-03-14 23:45:30 -1000 (Sun, 14 Mar 2010) | 16 lines Changed paths: M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DReaction.h A /demeter/events/DSceneComponent.h M /demeter/events/actions.h A /demeter/events/components.h M /demeter/events/events.h M /demeter/events/reactions.h M /demeter/events/scenes.h A /demeter/events/triggers.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/plans.h M /future.txt Another week (8:10hrs; no token, barely): * DSceneComponent, which is for reusable parts of scenes that are not themselves scenes * components.h, which is currently only NPC_Proposes_Plan * NPC_Starts_Discussion # NPCs now start their opinion on a specific plan and then add a decent summary on whether to go/stay from the gondola or whether they feel bold action/futility is the theme of the day. * triggers.h # DST_Discussion story state works * NPCs_React. * Tweaked DReaction definition so that all have a .npc and .cause # Four hours on NPCs_React and it seems about ready to work, except for a bug. Scenes are reset with each call to canPlay. That is, if one NPC_Annoyed canPlay(), and then I call canPlay() again, the wrong NPC_Annoyed will play later. I foresaw this and my fix was just to repeat the exact same sequence/context when playing them. That is, go through once to see which reactions canPlay(), then come through and do the same thing again and actually play them the second time. (See the current findReactions method.) However, the current bug is: when playing NPC_Reacts, it is now the current event and so all the canPlay tests fail the second time through! (Damn.) # Though tired now, my current plan is that I could spossibly save the cause of each scene that canPlay, so, at play time, I can recreate its canPlay state. This would work for most reactions, but some have more complicated state than just a cause. Need to look into this... # Other current alternative is to lose about 5 hours and just do reactions as I was doing them before... ------------------------------------------------------------------------ r43 | Zach | 2010-03-07 23:22:54 -1000 (Sun, 07 Mar 2010) | 20 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/actions.h M /demeter/events/reactions.h M /demeter/events/scenes.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /demeter/world/npc/plans.h M /future.txt M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MEvent.h A /marlinspike/triggers/MStateTrigger.h M /marlinspike/triggers/triggers.h M /workingnotes.txt Another poor week with a big weekend push to avoid token loss (8:20hrs): # Need to do better on Mondays to start the week off right. # Also, 2 hrs of sketching not included in above time. (I decided Sketching counts towards my daily "little bit", but not towards the weekly Implementation time total). * NPC_Wooed finished (including an NPC_Rebuffs cast when NPC is not willing due to external factors, such as existing relationship or bystanders) * Broke up ASSAULT into HARASS, ASSAULT, and BATTERY so that import could better correspond with affinity change * MStateTrigger, in preparation for a Discussion story state needed in early scenes * MTriggerManager.hasState(state) * Ironed things out due a bit due to above ASSAULT changes * Plan constants defined (though still not really sure how much these will get used yet) # Reviewed TalkMenu mechanic (seems okay) # A few future notes (surely there's a cleaner way to handle NPCs in future!) * MEvent.equals(-recurse) option * NPC_Replies (which took about 3:30 hrs) # NPC_Replies not fully tested yet. Well, the basic agree/disagree has been tested and works. But then added indications of affinity change for speaker or topic, which is a bit sketchier, and not every possible case is covered. But that's fine, I think--makes narration a little less formulaic. We'll see if I need more random options for some of the cases. # Scenes are taking too long! Basically only one this week... though on paper this also included NPC_Agrees and NPC_Disagrees, which were rolled into NPC_Replies in the implementation. ------------------------------------------------------------------------ r42 | Zach | 2010-02-28 23:01:27 -1000 (Sun, 28 Feb 2010) | 16 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DRoutines.h A /demeter/events/DT_DefaultInterruptingCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/actions.h M /demeter/events/events.h M /demeter/events/reactions.h M /demeter/world/npc/DNPC.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MScene.h A poor week, though at least managed to avoid a negative token (8:25hrs; no token). [In other news, TAing topped 20hrs this week.] * DMdebug level can now be set with a number argument (though apparently 0 isn't parsed like other numbers, so that doesn't work). * NPC_Defends_Other (with testing and debugging, as always) * Reworked DV_Rape narration to "fail" if victim is stronger. * Tried an interrupting cast to have a bystander (usually) stop a sexual assault in progress with NPC_Defends_Other (since this in the only assault that would take more than a couple seconds to perform). # Works, but heavy-handed. Interrupts continue to be a thorn in my side. * Clarified some reaction docs # NPC_Defied is often eclipsed by other reactions, when a single sentence would reveal that it is happening. But it would be a tangled mess to get that to play nicely with dominant reactions--would need to be called from each other reaction, I think. * NPC_Wooed (almost done) * DM.isPresent(char) # Hit a known bug that now needs to be dealt with: any action involving a Go means the world state doesn't match the currently location, which makes it hard to determine who is really present and/or active. The old MEvent.present would have made this easy, but now I'll have to fix it by checking the current event tree to see if there are any Go verbs. # Need to leave reactions for a while and get some real scenes (or at least some plan-related reactions)! ------------------------------------------------------------------------ r41 | Zach | 2010-02-22 00:13:14 -1000 (Mon, 22 Feb 2010) | 28 lines Changed paths: M /demeter/DGrammar.h M /demeter/DRoutines.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/reactions.h M /demeter/world/items.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /future.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MEvent.h M /marlinspike/triggers/MRecastTrigger.h M /schedule.txt End of another week (11:30; almost a token, but not quite): #Reminder: < 8 hours means a token from me to Scott; 8 to 12 hours means no token changes hands; > 12 hours means Scott gives me a token. Tokens translate to beer somehow at the end of the semester. * NPC_Interdicts (a pseudo-reaction) * Cleaned up NPC_Annoyed and NPC_Defied to use NPC_Interdicts. * Tweaked DM to only set the source of a trigger if it's not already set * NPC_Defends * DM.getPresent(). Ripped out MEvent.present list, which will save resources overall, though means we won't always know who was present for an event after the fact. * Started loading reactions in order in DRoutine's DInitialise() # Reviewed NPC_Outraged. * MEvent.equals modified so depth can be specified--skip over this many matches and then start looking. Now reactions can search through all possible matching subevents, or find one affecting an active NPC. * Recast triggers can now return an MList, rather than just a single recast * Recast any ASSAULT to an [attacker:OPPOSE(witness, victim)] for all bystanders. * Made a few tweaks based on Scott's "alpha" test a week or so ago: added short instructions to the TalkMenu, which also fixes the jump bug in Zag. Also redirected the "say" verb to use the talk menu. * Fixed a recast bug: location was not always available as MEventHistory.current.loc at recasting time (and so now it is). # ASSAULT->OPPOSE recast rather event-intensive and not quite what I wanted. Interesting though: beating up on someone a witness likes less than they like you means the witness will like the victim less. * NPC_Rebuffs tweaked to use NPC_Interdicts * Ripped out ASSAULT->OPPOSE recast. Instead, wrote a default recast to recast any ASSAULT directly to an AFFRONT or ENDEAR for each bystander. Many variables involved, but good results. * Added NPC.relationship (for some NPCs) and tweaked DAffinity.modify to allow for higher affinity changes. * Cleaned up how an DSocialize.detail is set: now happens all in one place in DT_DefaultRecast. * Also clarified the different affinityMod levels for different kinds of ASSAULT (and clarified the docs on kill_attempt item) * Started NPC_Defends_Other # Looking back over the week, this a good example of how things tend to go: I'm trying to get though the scenes, but each one requires either tweaks or additions to the core system to handle what I want to do. I keep expecting that to level-off or even stop, so I can just start churning out the scenes. Hopefully soon... # In other news, I failed to meet my promise to have 20 scenes by the beginning of this week. Very disappointing. # On the bright side, it has been 1 whole month of "a little bit every day" (meaning generally at least 1 hour). Also, I'm beginning to suspect I don't need 60 scenes, but maybe only 40 to 50. We'll see, I guess. # Also pondered some notes on MS2.0 this week. ------------------------------------------------------------------------ r40 | Zach | 2010-02-15 01:09:44 -1000 (Mon, 15 Feb 2010) | 6 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/events/actions.h M /future.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MScene.h M /marlinspike/triggers/MCastTrigger.h A /marlinspike/triggers/MInterruptingCastTrigger.h M /marlinspike/triggers/triggers.h M /workingnotes.txt Fixed DM verb denial by implementing the changes promised in the comments of the previous submit. # That seems to have worked (and didn't take too long: 1:30hrs, to be included in next commit's time). # There are no more interrupting scenes! Instead, interrupting cast triggers (which provide the next scene). # DM.respond() feels much clearer now. * Also tweaked debug output on affinity change when doing social actions. ------------------------------------------------------------------------ r39 | Zach | 2010-02-14 23:39:24 -1000 (Sun, 14 Feb 2010) | 16 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/events/actions.h M /demeter/events/reactions.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /future.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h M /marlinspike/events/MScene.h A /workingnotes.txt This is basically a backup commit before a big overhaul. It's about 20 minutes before the end of the week, though, so: (9:30hrs; no token) What's happened recently (in regular news): * DNPC.do method. This allows for various "psuedo-reactions", which are something like reactions scenes (with no pre-reqs) that can be used in the context of other reactions and scenes. Right now, includes an NPC attacking or pushing someone. * NPC_Outraged * MEvent__new to ease construction. * DCharacter.damage narration tweaked to work for PC as well as NPC * PC.damage to describe the PC taking damage. * NPC.isActive to help reactions determine if an NPC can even perform a reaction right now. * NPC_Assaulted About this point, I started realizing the scene selection process is mangled. It got this way to handle interrupting scenes (of which there are none yet), but the flaws are making it hard to author regular scenes accurately. Since the problem was not exactly clear even in my own head, I spent about 3.5 hours charting exactly what the process is now and what exactly is wrong with it, and then how to fix it. * This is all documented in workingnotes.txt I'm now about to implement the changes outlined there. It shouldn't take too long--just change the order of a few method calls. (Famous last words, of course...) ------------------------------------------------------------------------ r38 | Zach | 2010-02-08 14:36:12 -1000 (Mon, 08 Feb 2010) | 18 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h D /demeter/DInitialise.h A /demeter/DRoutines.h (from /demeter/DInitialise.h:36) M /demeter/Demeter.inf M /demeter/demeter.h A /demeter/events/DRecastTrigger.h M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/events.h M /demeter/events/reactions.h M /demeter/events/scenes.h M /demeter/world/DFurniture.h M /demeter/world/npc/DNPC.h A /linecount.bat M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MEvent.h M /marlinspike/triggers/MRecastTrigger.h M /marlinspike/triggers/MTrigger.h M /marlinspike/util/MList.h M /overview.txt M /schedule.txt Starting production on scenes... (9:45hrs; no token) * Clarifying some pushing/dragging verb grammars. (Can drag NPCs with you now; in prep for throwing them over the railing) # Verb testing takes a long time. * NPC_Rebuffs... started. # Realized I needed a simpler recast trigger production method than defining them all statically. * Created DRecastTrigger. * Clarified some MS documentation and updated MTriggerManager to finalize expiring triggers (if necessary). * Came up with a little linecount script (currently about 12,000 lines including documentation, .txt files, .dot files, etc.) [not counted in time above] # Checked on resource usage. After a couple events, it seems I have an extra list with one node in it somewhere? Should probably write a full list display function to see what's in all the current lists. (But no major leaks, so worry about that later...) # The MEvent.present list is burning through nodes. I should rip this back out again if it turns out I don't need it after all. * NPC_Rebuffs done. * NPC_Defied. * Lowercasing a String -> ChangeCase routine. (Needed a home, so created DRoutines.h and moved DInitialise() there.) # The simple things take forever: two hours and infglk.h functions to the rescue again just to lowercase a name! Had a write to a buffer in memory in order to uncompress the Huffman-encoded Glulx string, and then printed it from there. This was also necessary in order to access the (name) of an object, since that's not stored in any variable. * Tweaked DNPC.printAddressFor to handle "me" or "I" # A bit of planning/sketching and Demeter documentation proofing. # Also, about 4 hours of emails/meetings/schedule-hacking. Time to determine what my extension status will be. I promised Kim (and myself) 20 scenes by next week. 3 down, 17 to go. Each one goes faster... but fast enough? ------------------------------------------------------------------------ r37 | Zach | 2010-02-01 14:49:38 -1000 (Mon, 01 Feb 2010) | 14 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/events/DT_AutoThreads.h M /demeter/events/actions.h M /demeter/events/reactions.h M /demeter/world/npc/DAffinity.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MThreadManager.h M /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h M /marlinspike/marlinspike.h M /marlinspike/tests/events/TestMEvent.inf M /overview.txt The first week of "little bit every day" (Total: 9hrs; no token) * Overhauled SUPPORT/OPPOSE.do() to use the difference between absolute affinity values (instead of simply the difference) in determining the degree of resulting affinity change. * Worked on NPC_Annoyed (the first reaction/scene) * Wrote a more general .find(...) method for MEventHistory. * Overhauled MEvent and MEventHistory to use only the new .equals and .find methods, respectively. Thus dropped .equals (old), .contains, .matches, .containsMatch; findEqual, and .findMatch methods. # (The net loss of 3 properties should reduce the size of MEvents, though haven't bothered to actually check that.) * Tested the overhaul/new .equals and .find methods. * Found and fixed a small bug in the threading behavior of MThreadManager (was skipping some threads when deciding what to splice due to to a missing i--) * NPC_Annoyed finally done and threading! (Hooray.) # Surely not all the scenes will take this long...! * Added "dmdump" verb to dump the event history and thread map to a text file named EVENTS.TXT. (Went pretty smooth thanks to the 2 hours work on file I/O done a couple months ago!) # Started working on a python script to handle EVENTS.TXT files, both to determine metrics of story structure and to output a graphviz .dot file. # As always, this project goes like wading through treacle... ------------------------------------------------------------------------ r36 | Zach | 2010-01-25 17:11:21 -1000 (Mon, 25 Jan 2010) | 17 lines Changed paths: M /demeter/DInitialise.h M /demeter/Demeter.inf A /demeter/events/DReaction.h M /demeter/events/actions.h M /demeter/events/events.h M /demeter/events/reactions.h M /demeter/events/scenes.h M /demeter/world/npc/DAffinitiedObject.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npc.h M /demeter/world/npc/npcs.h A /demeter/world/npc/plans.h M /future.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MThreadManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MScene.h M /marlinspike/tests/util/TestMList.inf M /marlinspike/util/MList.h M /schedule.txt Been a long Christmas break: # December may have included some changes not documented here. * Made Revenant just a DCharacter/plan rather than an DNPC. * Pulled the two "plan" objects into their own file. * Started reactions (DReaction). # Some potential trouble determining selection order of reactions. Could sort by import, but that just delays the problem (two potential reactions could still have the same import). Currently hoping reactions will just be mutually exclusive, but, as their number builds, may resort to loading scenes into the ScMgr in selection order. * Started NPC_Annoyed, the first real reaction. * Add MList__new routine (and tested it) to speed list creation. * A debugging session: runtime problems from earlier Revenant changes. * Then a runtime error from a missing comma! (Why was this not compile time!?) # Decided I need better debug statements all around in order to track what's going on in general and to track down these frequent Inform runtime bugs. * Cleaned up DM's debug output, which involved also touching most of its component classes. * Broke the affinity change from SUPPORT/OPPOSE into a recast AFFRONT/ENDEAR. This recast is done in do() though, rather than through a recast trigger. (See documentation and future.txt for more on why.) * Added debug output for SUPPORT/OPPOSE and all potentially affinity-changing DSocialize actions. # This is the third (and hopefully final) overhaul of SUPPORT/OPPOSE. Need a final tweak of the forumla though: I want degree of change to be based on difference of *absolute* values of the two issues in question. # In other news: starting a new semester, and a new week of "a little bit every day", and had a first weekly meeting with Scott. Hopefully it'll all come together thick and fast now... ------------------------------------------------------------------------ r35 | Zach | 2009-12-19 11:29:04 -1000 (Sat, 19 Dec 2009) | 5 lines Changed paths: M /demeter/DGrammar.h M /demeter/Demeter.inf M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h A /demeter/events/reactions.h M /schedule.txt Preparing for a Christmas break of travel and implementation: * Verb synonyms recorded in docs * Actually added reactions.h this time * Been working on group talk menu ------------------------------------------------------------------------ r34 | Zach | 2009-12-01 01:18:03 -1000 (Tue, 01 Dec 2009) | 6 lines Changed paths: M /.NaturalDocs/Menu.txt M /coding_standards.txt M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/world/npc/npcs.h M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MThread.h M /marlinspike/dm/MThreadManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/dm/dm.dot M /marlinspike/events/MAction.h M /marlinspike/events/MBeginningScene.h M /marlinspike/events/MEvent.h M /marlinspike/events/MMiddleScene.h M /marlinspike/events/MScene.h M /marlinspike/triggers/MCastTrigger.h M /marlinspike/triggers/MTrigger.h M /marlinspike/triggers/triggers.h M /marlinspike/world/MLocation.h M /overview.txt * Proofed/corrected all Marlinspike docs. In other news: # Proved that Zag (a Java-based Glulx terp) will work (or rather, currently works) to run my evaluation in. Still pending: how to get the data back to me afterwards? Current thought is to write a separate Java Web Launch app front-end; this would also be consistent with licensing requirements and not require me to rip open the Zag jar. # Figured out how to write to an arbitrary file using Glk/Glulx. (Only took about 3 hours and an extra library...) # Have been planning NPC reactions (file added here) ------------------------------------------------------------------------ r33 | Zach | 2009-11-18 14:23:19 -1000 (Wed, 18 Nov 2009) | 10 lines Changed paths: M /coding_standards.txt M /demeter/events/DT_DefaultRecasts.h M /demeter/events/DTalkMenu.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npcs.h M /marlinspike/MObject.h M /marlinspike/util/MList.h M /marlinspike/util/MListType.h After nearly three weeks of inactivity, I'm back on the wagon. Over that period: * SUPPORT.do() and OPPOSE.do() redone to be simpler and to be dependent on the topic the listener feels more strongly about (rather than the one she likes more). * Can express an opinion on the Revenant * NPC response to "What should we do?" (reporting a plan) finally done. (And what a long tangled web of variables it is.) # This is where some future research should go: efficiently managing NPC responses when 3 to 5 variable are involved, and then constructing appropriate text/animation to portray that. I suppose I should have mapped the responses to a set particular actions or something... * Started going through and proofing past docs (during otherwise brain-dead moments). Through Marlinspike core and util/ so far. * Just swapped out ORMiniMenu for ORMenu in the TalkMenu. This means no status/title bar during menu and the user has to reinvoke the menu for each thing to say. :( However, it also means both the menu and the turn ends after selecting a topic, which means that responses will occur properly. (I was otherwise rather in a quandry on how to exit the menu for responses or else deal with responses--which may be non-verbal and quite state-disturbing--within the context of the menu itself.) # Still, I wouldn't mind running a demo with each menu style with a couple users to get their opinion. ------------------------------------------------------------------------ r32 | Zach | 2009-10-24 14:09:38 -1000 (Sat, 24 Oct 2009) | 13 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DInitialise.h M /demeter/Demeter.inf M /demeter/events/DT_AutoThreads.h M /demeter/events/DT_DefaultCasts.h A /demeter/events/DT_DefaultRecasts.h A /demeter/events/DTalkMenu.h (from /demeter/world/npc/DTalkMenu.h:31) M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/events.h M /demeter/world/locations.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DNPC.h D /demeter/world/npc/DTalkMenu.h M /demeter/world/npc/npc.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/eventprocessing.flo M /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h M /marlinspike/events/MMiddleScene.h A /schedule.txt A commit before changing SUPPORT.do(): * The DVHooks_Quality global added to track telling good vs bad things. This was simpler than messing with Inform's Consult rules. It means things will work fine through the Talk menu, but certain things can't be told properly with only the Tell verb. * TalkMenu expanded to include general Tell topics. Moved TalkMenu to a more logical location (treating now as related to Verbs, rather than NPC behavior). * Event.clone() tweaked to handle present property added earlier. * Started DT_DefaultRecasts * Tweaked Action lists some more (Dropped OFFEND, expanded the range of ASSAULT) * Tweaked some docs. * Started SUPPORT action and its do() method. * Bug (fixed): 2 hours on crash after exiting talk menu after expressing SUPPORT twice. Proved to be that I was passing nothing to the superclass version of do(). (Oh, how I miss Java compile-time checks and runtime crash stack print outs!) # Bug(?): Turned off autothreading of TRAVEL actions because that was causing an explicit stack overflow. May have been related to previous bug; haven't turned it back on yet... * SUPPORT finally working, but based on LIKE rules: whatever character likes more determes direction of affinity change. Decided it makes more sense (and is simpler) to have affinity change direction determined by the thing the character feels more strongly about. So about to tear it out... # OPPOSE code is in a weird state right now (about to be torn out too). ------------------------------------------------------------------------ r31 | Zach | 2009-10-13 02:25:34 -1000 (Tue, 13 Oct 2009) | 11 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/events/DT_DefaultCasts.h M /demeter/events/actions.h M /demeter/events/scenes.h M /demeter/world/DLocation.h M /demeter/world/locations.h M /demeter/world/npc/DAffinitiedObject.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/DTalkMenu.h M /demeter/world/npc/npcs.h M /future.txt M /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h More hacking on NPCs and actions: * All NPCs descriptions done (including John and Irene Winters and Revenant) * LeaveGondola and Revenant defined (including Revenant.evidence) * NPC affinities all filled in for each other and for plans. * Responses to About others include relationship details. * Divided DLocations into two subclasses: Gondola and Zeppelin. * TalkMenu tweaked * Event.detail added, used for modifiable affinityMods for Actions * Pared down Actions (eliminating Outrage -> Offend, and Harm -> Assault) ------------------------------------------------------------------------ r30 | Zach | 2009-09-26 23:41:07 -1000 (Sat, 26 Sep 2009) | 16 lines Changed paths: M /demeter/DGrammar.h M /demeter/Demeter.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/scenes.h M /demeter/world/DCorpse.h M /demeter/world/DDoor.h A /demeter/world/DLargePassengerRoom.h M /demeter/world/DProp.h M /demeter/world/DSmallPassengerRoom.h M /demeter/world/locations.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/DTalkMenu.h M /demeter/world/npc/npcs.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h M /marlinspike/marlinspike.h Whew, been too long since a commit (lost first 3 weeks of Sept): * LargePassengerRooms are done. * Filled the WC with fixtures that work (with the USE verb); that was fun. * Gondola is done (I think) * NPCs all constructed (though some still need to be described properly) * First scene written: Captains_Message * Ran first alpha test: I'm worried there's going to be problems with the textual input (which, ironically, is the reason I picked Inform in the first place). This also led to a couple verb tweaks (such as making 'stab' map to Kill rather than Attack). * NPCs report their affinities for each other and PC when asked. This is finished: responses determined by affinity and propriety, with usually 3 random possible answers in each case. * The Revenant exists! This is the first step for the 3 beliefs/opinions all NPCs will hold: dangerousness of revenant, leaving the gondola, and belief in the supernatural. # Still need to allow PC to express opinions in return * Can do nice things to NPCs now (Kiss and Touch) as well as a few more not so nice things (Push and Knock on) * More actions defined: INTERACT, ROMANCE, OFFEND, OUTRAGE, etc. * Wrote Action.do() finally. Actions now affect affinities! Hooray. EventHistory fires all action.do()s at the end of the turn. * Root events now track which NPCs were present for that turn's actions. A bit hacky, but will let me figure who was around when for later scenes. # About to start default recasts and reactions. Potential trickiness here though between where to put what between verb, action/react, and narrated reaction... ------------------------------------------------------------------------ r29 | Zach | 2009-08-07 15:45:15 -1000 (Fri, 07 Aug 2009) | 12 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/Demeter.inf M /demeter/demeter.h M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h A /demeter/world/DCorpse.h M /demeter/world/DFixture.h A /demeter/world/DFurniture.h M /demeter/world/DItem.h M /demeter/world/DSmallPassengerRoom.h M /demeter/world/items.h M /demeter/world/locations.h M /demeter/world/npc/DAffinity.h M /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/DTalkMenu.h M /demeter/world/npc/npcs.h M /demeter/world/world.h M /lessons.txt M /marlinspike/events/MEvent.h Like wading through so much treacle... * Cleaned up docs a little bit here and there * Mostly spent time pushing DFurniture and dragging DCorpses around. Chairs finally go through doors (without having to type out whole direction word), but couches don't. Can get up on furniture and put other things on them. Chairs can be smashed for weapons. # This furniture stuff took way longer than it should have. It should take 10 minutes (not 2 hours!) to say I don't want a couch pushed through a doorway, but this would require knowing how to convert a CompassDirection object to the door it corresponds too. (I think I got tricked by the debug printing, actually, as it would crash half the time if the destination was a location and half the time if it was a door.) Finally got that, but going the other way proved too much effort, so a bit of a hack on PushDir through a door failing to turn into Go dir_obj, but instead complaining about the door's opened state. * Corpses behave and parse properly. They can't be picked up (too heavy); though, if you're tricky and know about "transfer", you can still get them up on the furniture, which is kind of fun. * The Dining_Room is now done. Can look out the window and generally muck around in there. * A little more work killing and violating people. Switched over to use ORLibrary's ORPronoun for certain printing work. * Can talk properly to NPCs now using ASK and TELL. (Tackled the whole "translation from dict word to object" thing. DM prints out properly, even if given a weird dict word.) * Consolidated NPC responses intelligently (I hope!) into a single method. Still working on that, but should be override-able for specific NPCs and still let the main class handle most cases by default. * Talk menu looks to work: you can only talk to Elijah about himself and you at the moment, but the basics are there. # Any day now, it's going to get easy... ------------------------------------------------------------------------ r28 | Zach | 2009-08-01 01:43:07 -1000 (Sat, 01 Aug 2009) | 11 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/DInitialise.h M /demeter/Demeter.inf M /demeter/Ghost.inf M /demeter/events/DT_AutoThreads.h M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/events.h A /demeter/events/scenes.h M /demeter/world/DSmallPassengerRoom.h A /demeter/world/DWeapon.h A /demeter/world/items.h M /demeter/world/locations.h M /demeter/world/npc/DAffinitiedObject.h M /demeter/world/npc/DAffinity.h A /demeter/world/npc/DCharacter.h M /demeter/world/npc/DNPC.h M /demeter/world/npc/npc.h A /demeter/world/npc/npcs.h M /demeter/world/world.h M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h Big push on Demeter for an 01 Aug deadline... * Initial setting text (from Initialise) * First scene hooked in (from BannerText) (though scene itself not yet written) * Working on NPCs. Split most behavior out into DCharacter. * Affinities working and correctly calculated on initialization. * Exceeded Z-Machine working memory. Could streamline some classes/properties, but will probably just run into the limit again. Switched over to Glulxe. (Found that Gargoyle looks pretty nice.) * Got the violence working: Attack, Kill, and Rape verbs leading to HARM and ASSAULT actions. A little tricky to decide what to make world-level vs. story-level for NPCs. Also a little weird deciding what input you're going to bother writing a response for. * Nice modelling for NPCs, with a (limited) number of attributes controlling abilities and behaviors. Even has a bit of a combat system. :) # Need to go through and clean up docs. Seems I can never quite get into the content-generating phase. Each attempt just unearths more system that needs to be implemented first... ------------------------------------------------------------------------ r27 | Zach | 2009-07-31 00:26:59 -1000 (Fri, 31 Jul 2009) | 7 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/Demeter.inf M /demeter/Ghost.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/world/DDoor.h M /demeter/world/npc/DNPC.h A /future.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MThreadManager.h M /marlinspike/events/MBeginningScene.h M /marlinspike/events/MScene.h * Knock hooked in * Ask and Tell hooked in... but problem with second obj here (it's a dictionary word, not an object, so needs to be converted somehow. Use ORLibrary's ORKnowledgeTopic?) * Future.txt added (to keep track of bells & whistles and other features that would be nice someday) * Dealt with issue where scenes are selected while the current event has not yet been threaded. Basically, left it as is: too much trouble to thread as each verb comes in during a single turn, but next scene still needs to be selected after each verb in case the next scene wants to interrupt. So we'll just repeat the scene selection process after threading the whole current action (if the DM is not locked by an interrupting scene already selected). Net effect is that interruptings scenes may win out unnaturally when it makes a difference whether the current event is part of a thread (rather than when viewed simply as its own thread of one event). * Wrote DM.start() to handle playing the first BeginningScene. # Now back to Demeter content... ------------------------------------------------------------------------ r26 | Zach | 2009-07-16 10:15:32 -1000 (Thu, 16 Jul 2009) | 11 lines Changed paths: M /demeter/DGrammar.h A /demeter/Demeter.inf (from /demeter/Main.inf:25) M /demeter/Ghost.inf D /demeter/Main.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/world/DDoor.h M /demeter/world/DLocation.h M /demeter/world/DRoomDoor.h A /demeter/world/DSmallPassengerRoom.h M /demeter/world/locations.h A /demeter/world/npc A /demeter/world/npc/DAffinitiedObject.h A /demeter/world/npc/DAffinity.h A /demeter/world/npc/DNPC.h A /demeter/world/npc/DTalkMenu.h A /demeter/world/npc/npc.h M /demeter/world/world.h M /lessons.txt M /overview.txt * Created Affinity and AffinitedObject for NPCs to use * Added more to the world (frickin' containers, but finally got Sky to work decently while being in a window). Also have multiple copies of tables, bunks, etc. so that objects can be placed on them in different rooms, etc. * Got rough draft of Talk menu up. This relies on the third-party ORLibrary, which has a number of other cool features I had a look through (but, for now, am mostly not using). * Added Ask and Tell verbs (but haven't hooked them in yet). * Added ICL commands to headers of Main.inf and Ghost.inf so compiling can be controlled there (rather than through TextPad settings). * Added Help, Wait, and Knock verbs. Hooked those in. (Did some revision/reconsidering before settling on current setup: decided to make Help a Group 1/meta verb, so it won't show up in event history, but I can still track it with a transcript). * Added more actions (DELAY, mainly; dropped SYSTEM before committing it) * Started filling in global NPC details/behavior. * Renamed Main.inf to Demeter.inf # Still need to finish Gondola environment, and get some talking NPCs in place. ------------------------------------------------------------------------ r25 | Zach | 2009-06-23 03:47:23 -1000 (Tue, 23 Jun 2009) | 5 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DGrammar.h M /demeter/Ghost.inf M /demeter/Main.inf M /demeter/events/DVerbHooks.h M /demeter/world/DDoor.h A /demeter/world/DHatch.h M /demeter/world/DRoomDoor.h M /demeter/world/locations.h M /lessons.txt M /marlinspike/dm/MSceneManager.h * Fixed a threading bug due to over-cleanup: accidently destroyed the DM.nextSceneReincs list * Worked on Doors and their relation to DVerbHooks * Finally got Go to work correctly (and yet not alert the DM if the travel is going to fail) * Fleshed out passenger gondola: all rooms now in place, though most are still empty. ------------------------------------------------------------------------ r24 | Zach | 2009-06-19 01:59:39 -1000 (Fri, 19 Jun 2009) | 10 lines Changed paths: M /.NaturalDocs/Menu.txt A /demeter/Ghost.inf M /demeter/Main.inf M /demeter/world/locations.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MThread.h M /marlinspike/dm/MThreadManager.h M /marlinspike/events/MEvent.h M /marlinspike/events/MScene.h M /marlinspike/util/MList.h Marlinspike nearly done (95%?)... * Interrupting scenes tested and working. * Moved the "Little Ghost" scenario into Ghost.inf * Hit another MList bug: remove wasn't updating the previous pointer of the node after the one shifted from the end of the node store. * MThreadManager.getUniqueEvents * Worked on selectNextScene (done, but needs to be tested a bit more) # Some temp debug printing still in place in selectNextScene # Looks like I might have a list leak of 1 per turn; need to look into that. (Managed to fix a few other such leaks.) # Woefully behind schedule regarding Demeter content. ------------------------------------------------------------------------ r23 | Zach | 2009-06-16 12:32:27 -1000 (Tue, 16 Jun 2009) | 2 lines Changed paths: M /demeter/Main.inf M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MSceneManager.h M /marlinspike/events/MScene.h * Scenes now reincorporate their preconds/hooks. ------------------------------------------------------------------------ r22 | Zach | 2009-06-11 01:47:27 -1000 (Thu, 11 Jun 2009) | 5 lines Changed paths: A /demeter/DGrammar.h (from /demeter/DGrammer.h:13) D /demeter/DGrammer.h M /demeter/Main.inf M /marlinspike/MObject.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MThread.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MEventPredicate.h M /marlinspike/events/MScene.h M /marlinspike/marlinspike.h M /marlinspike/triggers/MRecastTrigger.h M /marlinspike/triggers/MTrigger.h Casting and recasting now reincorporates the source scene(s). Also: * Fixed spelling of DGrammer.h * Improved some debug formatting of triggers. * Clarified how a trigger's source works: it's now set by the DM so authors don't have to deal with it. ------------------------------------------------------------------------ r21 | Zach | 2009-06-10 22:58:51 -1000 (Wed, 10 Jun 2009) | 5 lines Changed paths: M /demeter/events/DT_DefaultCasts.h M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MThreadManager.h M /marlinspike/events/MEvent.h M /marlinspike/tests/util/TestMList.inf M /marlinspike/util/MList.h MList bug vanquished! * Turned out to be a subtle problem with remove: when shifting a head node in the node store, the owning list's head pointer was not updated. Required an (elegant? slick, at least) hack of storing a negative pointer to the list object as the "null" reference in the first node's previous reference. * Fixing then produced a second bug having to deal with how variables must be declared in order (but this is not caught at compile-time! Instead, the variable was quietly treated as 0 at runtime) All told, this single bug took 6 hours to fix. ------------------------------------------------------------------------ r20 | Zach | 2009-06-02 20:01:53 -1000 (Tue, 02 Jun 2009) | 5 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/Main.inf M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MThread.h A /marlinspike/dm/MThreadManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/dm/dm.h M /marlinspike/events/MEventPredicate.h M /marlinspike/tests/util/TestMList.inf M /marlinspike/util/MList.h Thread tracking now works (still need recasting to reincorporate tho) * Wrote MThreadManager * Added indexOf and contains method to MList * Tweaked debugging output ------------------------------------------------------------------------ r19 | Zach | 2009-05-29 01:12:38 -1000 (Fri, 29 May 2009) | 6 lines Changed paths: M /marlinspike/MObject.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MThread.h M /marlinspike/dm/dm.h M /marlinspike/events/MEvent.h M /marlinspike/tests/events/TestMEvent.inf M /marlinspike/tests/util/TestMList.inf M /marlinspike/util/MList.h M /marlinspike/util/MListType.h * Worked on Thread.h * Wrote MEvent's getReincorporates methods to handle required Thread construction work * This all required a MList.set() method and some testing * Added DMresources verb (adding # of Threads used to output) * Cleaned up some docs in a couple places. ------------------------------------------------------------------------ r18 | Zach | 2009-05-27 23:55:22 -1000 (Wed, 27 May 2009) | 3 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/Main.inf M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MSceneManager.h A /marlinspike/dm/MThread.h M /marlinspike/dm/MTriggerManager.h A /marlinspike/dm/thread.flo M /marlinspike/events/MScene.h M /marlinspike/util/MListType.h * Scenes now processed and added to event history * Starting the Thread class (mostly with diagram and docs) ------------------------------------------------------------------------ r17 | Zach | 2009-05-05 21:07:18 -1000 (Tue, 05 May 2009) | 8 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/Main.inf M /demeter/events/DT_AutoThreads.h M /demeter/events/actions.h M /demeter/world/locations.h A /graphviz.bat M /marlinspike/MObject.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h A /marlinspike/dm/MSceneManager.h M /marlinspike/dm/MTriggerManager.h A /marlinspike/dm/dm.dot M /marlinspike/dm/dm.h A /marlinspike/events/MBeginningScene.h A /marlinspike/events/MEndingScene.h A /marlinspike/events/MMiddleScene.h M /marlinspike/events/MScene.h M /marlinspike/events/events.dot M /marlinspike/events/events.h M /marlinspike/tests/util/TestMList.inf M /marlinspike/triggers/MTrigger.h A /marlinspike/triggers/triggers.dot M /marlinspike/triggers/triggers.h M /marlinspike/util/MList.h M /marlinspike/util/MListType.h A /marlinspike/util/util.dot M /marlinspike/util/util.h M /overview.txt First demo to Kim: * Added MScene (and subtypes) * Added an actor (actress) to all Events * Added/tweaked a couple MList methods * Tweaked some docs, including adding .dot files for a number of packages * Added some more actions. * Whipped up a "Little Ghost" scenario to show off scene processing. ------------------------------------------------------------------------ r16 | Zach | 2009-04-30 00:37:12 -1000 (Thu, 30 Apr 2009) | 4 lines Changed paths: M /.NaturalDocs/Menu.txt M /.NaturalDocs/docs.css M /coding_standards.txt M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h A /marlinspike/events/MScene.h M /marlinspike/events/events.h M /marlinspike/tests/events/TestMEvent.inf M /marlinspike/util/MList.h * Wrote MScene * Added an actress (actor) to MEvent, as well as some doc cleanup. * Expanded dmdebug verb and created levels of debug output from DramaManager. ------------------------------------------------------------------------ r15 | Zach | 2009-04-08 21:34:45 -1000 (Wed, 08 Apr 2009) | 7 lines Changed paths: M /.NaturalDocs/Menu.txt M /demeter/DInitialise.h M /demeter/Main.inf A /demeter/events/DT_AutoThreads.h M /demeter/events/actions.h M /demeter/events/events.h M /marlinspike/MObject.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/MTriggerManager.h A /marlinspike/dm/eventprocessing.flo M /marlinspike/events/MEvent.h M /marlinspike/tests/events/TestMEvent.inf M /marlinspike/tests/util/TestMListType.inf M /marlinspike/triggers/MRecastTrigger.h M /marlinspike/util/MList.h M /marlinspike/util/MListType.h * Working on event processing (starting with a RFFlow diagram) * Recasting done. * Auto-threading works. * Event printing, with EvtHist indexing, done. * Added the dmevents verb (so can print EventHistory at runtime). # Threading and Scenes yet to go... ------------------------------------------------------------------------ r14 | Zach | 2009-03-20 03:26:14 -1000 (Fri, 20 Mar 2009) | 3 lines Changed paths: M /demeter/events/DVerbHooks.h M /demeter/world/DRoomDoor.h M /demeter/world/locations.h AAAI demo snapshot! * All 5 passanger rooms are hooked in now, and there's an abstract prop to play with. ------------------------------------------------------------------------ r13 | Zach | 2009-03-18 20:15:19 -1000 (Wed, 18 Mar 2009) | 4 lines Changed paths: M /.NaturalDocs/Menu.txt A /demeter/DGrammer.h M /demeter/DInitialise.h M /demeter/Main.inf M /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h M /demeter/events/actions.h M /demeter/events/events.h A /demeter/world/DDoor.h M /demeter/world/DFixture.h A /demeter/world/DItem.h M /demeter/world/DLocation.h A /demeter/world/DProp.h A /demeter/world/DRoomDoor.h M /demeter/world/locations.h M /demeter/world/world.h M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MEvent.h M /marlinspike/tests/events/TestMEvent.inf M /marlinspike/triggers/MCastTrigger.h M /overview.txt * Continued on getting DDoors to work correctly. This involved adding some verbs and actions. * Overhauled MEvent so that properties are no longer encapsulated (though it can be used that way through methods if you want events to be immutable). * Started adding new verbs and tweaking the standard grammer. ------------------------------------------------------------------------ r12 | Zach | 2009-03-08 00:16:20 -1000 (Sun, 08 Mar 2009) | 5 lines Changed paths: M /.NaturalDocs/Menu.txt M /coding_standards.txt A /demeter/DInitialise.h M /demeter/Main.inf M /demeter/demeter.h A /demeter/events/DT_DefaultCasts.h M /demeter/events/DVerbHooks.h A /demeter/events/actions.h M /demeter/events/events.h M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MTriggerManager.h M /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h M /marlinspike/events/MEventPredicate.h M /marlinspike/events/events.h * Started D's default casting trigger. * Realized I can't use raw strings for verbs, but will have to define Constants for them. Added those to DVerbHooks.h and tweaked various docs about it a bit. * M casting process now working! (Recasting in place, but haven't seen it actually happen yet...) * Tweaked Event printing to reduce noise of all the "nothing"s. ------------------------------------------------------------------------ r11 | Zach | 2009-03-07 03:07:42 -1000 (Sat, 07 Mar 2009) | 3 lines Changed paths: M /.NaturalDocs/Menu.txt M /coding_standards.txt A /marlinspike/dm/MTriggerManager.h M /marlinspike/dm/dm.h A /marlinspike/events/MAction.h M /marlinspike/events/MEvent.h M /marlinspike/events/MEventPredicate.h M /marlinspike/marlinspike.h D /marlinspike/tests/TestMObject.h A /marlinspike/tests/TestMObject.inf (from /marlinspike/tests/TestMObject.h:8) A /marlinspike/tests/dm A /marlinspike/tests/dm/TestMTriggerManager.inf M /marlinspike/triggers/MTrigger.h M /marlinspike/triggers/triggers.h M /marlinspike/util/MListType.h * Added TriggerManager, including test code. * Tweaked some printing and type-checking code elsewhere. ------------------------------------------------------------------------ r10 | Zach | 2009-03-05 02:17:46 -1000 (Thu, 05 Mar 2009) | 3 lines Changed paths: M /.NaturalDocs/Menu.txt M /lessons.txt M /marlinspike/dm/MDramaManager.h M /marlinspike/events/MEvent.h A /marlinspike/triggers/MCastTrigger.h A /marlinspike/triggers/MRecastTrigger.h A /marlinspike/triggers/MTrigger.h A /marlinspike/triggers/triggers.h * Wrote the Trigger classes. * Fixed Events so we can create deeds (no predicate on construction). ------------------------------------------------------------------------ r9 | Zach | 2009-03-05 01:08:04 -1000 (Thu, 05 Mar 2009) | 6 lines Changed paths: M /.NaturalDocs/Menu.txt M /.NaturalDocs/Topics.txt M /coding_standards.txt A /demeter/Main.inf (from /marlinspike/Main.inf:8) A /demeter/demeter.h A /demeter/events A /demeter/events/DVerbHooks.h A /demeter/events/events.h A /demeter/world A /demeter/world/DFixture.h A /demeter/world/DLocation.h A /demeter/world/locations.h A /demeter/world/world.h M /gendocs.bat M /lessons.txt A /license.txt M /marlinspike/MObject.h D /marlinspike/Main.inf A /marlinspike/dm/MDramaManager.h M /marlinspike/dm/MEventHistory.h M /marlinspike/dm/dm.h M /marlinspike/events/MEvent.h M /marlinspike/marlinspike.h D /marlinspike/tests/events/TestEvent.inf A /marlinspike/tests/events/TestMEvent.inf (from /marlinspike/tests/events/TestEvent.inf:8) M /marlinspike/tests/util/TestMList.inf M /marlinspike/tests/util/TestMListType.inf M /marlinspike/util/MList.h M /marlinspike/util/MListType.h M /marlinspike/world/MLocation.h Wow, it's been too long. * Added Demeter classes, including the world model and the basics of hooking in verbs. * Started the MDramaManager and verb processing. * This led to some fixes needed in the List and ListType code. Basically, I've touched everything lately... ------------------------------------------------------------------------ r8 | Zach | 2009-02-18 15:56:35 -1000 (Wed, 18 Feb 2009) | 7 lines Changed paths: M /.NaturalDocs/Menu.txt M /.NaturalDocs/docs.css M /coding_standards.txt M /lessons.txt A /marlinspike/MObject.h M /marlinspike/Main.inf D /marlinspike/dm/EventHistory.h A /marlinspike/dm/MEventHistory.h (from /marlinspike/dm/EventHistory.h:7) M /marlinspike/dm/dm.h D /marlinspike/events/Event.h D /marlinspike/events/EventPredicate.h A /marlinspike/events/MEvent.h (from /marlinspike/events/Event.h:7) A /marlinspike/events/MEventPredicate.h (from /marlinspike/events/EventPredicate.h:6) A /marlinspike/events/events.dot M /marlinspike/events/events.h M /marlinspike/marlinspike.h A /marlinspike/tests/TestMObject.h M /marlinspike/tests/events/TestEvent.inf D /marlinspike/tests/util/TestList.inf D /marlinspike/tests/util/TestListType.inf A /marlinspike/tests/util/TestMList.inf (from /marlinspike/tests/util/TestList.inf:2) A /marlinspike/tests/util/TestMListType.inf (from /marlinspike/tests/util/TestListType.inf:3) D /marlinspike/util/List.h D /marlinspike/util/ListType.h A /marlinspike/util/MList.h (from /marlinspike/util/List.h:7) A /marlinspike/util/MListType.h (from /marlinspike/util/ListType.h:7) M /marlinspike/util/util.h A /marlinspike/world/MCharacter.h A /marlinspike/world/MLocation.h A /marlinspike/world/MNPC.h A /marlinspike/world/MProp.h A /marlinspike/world/MWObject.h A /marlinspike/world/world.dot A /marlinspike/world/world.h Big overhaul here: * Added MObject at the root of the class hierarchy * Prepended an M to all classname to avoid name conflicts * Overhauled display() and print() in MList and MListType * Added all the world classes * Produced some class hierarchy overviews using Graphviz (.dot files) ------------------------------------------------------------------------ r7 | Zach | 2009-02-07 01:30:13 -1000 (Sat, 07 Feb 2009) | 3 lines Changed paths: A /.NaturalDocs A /.NaturalDocs/Languages.txt A /.NaturalDocs/Menu.txt A /.NaturalDocs/Topics.txt A /.NaturalDocs/docs.css M /coding_standards.txt M /gendocs.bat M /lessons.txt A /marlinspike/dm/EventHistory.h A /marlinspike/dm/dm.h M /marlinspike/events/Event.h M /marlinspike/tests/events/TestEvent.inf M /marlinspike/util/List.h M /marlinspike/util/ListType.h A /overview.txt * Beautified docs, tweaking topic definitions and adding an overview.txt page. Figured I'd better save all those project-specific settings. * Created EventHistory.h (though haven't made it very far on it yet). ------------------------------------------------------------------------ r6 | Zach | 2009-02-05 02:08:16 -1000 (Thu, 05 Feb 2009) | 5 lines Changed paths: M /lessons.txt M /marlinspike/Main.inf A /marlinspike/events/Event.h A /marlinspike/events/EventPredicate.h A /marlinspike/events/events.h M /marlinspike/marlinspike.h A /marlinspike/tests/events A /marlinspike/tests/events/TestEvent.inf M /marlinspike/util/List.h M /marlinspike/util/ListType.h M /marlinspike/util/util.h * Added Event and EventPredicate, including an Event test file. * Added some import/include guards on all class files * Changed the include path to include the initial marlinspike directory name. This was done to prevent name conflicts with the implementing game's files/dirs, but it really only offers limited help since each class name still needs to be unique. At least it'll help with the lowercase.h include files... * As always, a few doc tweaks. ------------------------------------------------------------------------ r5 | Zach | 2009-01-29 11:15:20 -1000 (Thu, 29 Jan 2009) | 3 lines Changed paths: D /gotchas.txt A /lessons.txt (from /gotchas.txt:2) * Added some docs (broadening gotchas.txt to lessons.txt) * Some oddities in NaturalDocs: it won't print the first sentence after a heading if the heading ends in _code_ ------------------------------------------------------------------------ r4 | Zach | 2009-01-29 03:13:43 -1000 (Thu, 29 Jan 2009) | 2 lines Changed paths: M /coding_standards.txt M /gendocs.bat * Oops, forgot to commit from root: missed these on last commit. ------------------------------------------------------------------------ r3 | Zach | 2009-01-29 03:12:48 -1000 (Thu, 29 Jan 2009) | 4 lines Changed paths: M /marlinspike/Main.inf A /marlinspike/marlinspike.gif M /marlinspike/marlinspike.h A /marlinspike/tests/util/TestListType.inf M /marlinspike/util/List.h A /marlinspike/util/ListType.h M /marlinspike/util/util.h * Added util/ListType (and test suite) * A nice overview (including diagram gif) to marlinspike.h * Some other documentation tweaks ------------------------------------------------------------------------ r2 | Zach | 2008-12-12 02:20:35 -1000 (Fri, 12 Dec 2008) | 6 lines Changed paths: A /coding_standards.txt A /demeter A /gendocs.bat A /gotchas.txt A /makeclean.bat M /marlinspike/Main.inf A /marlinspike/dm A /marlinspike/events A /marlinspike/marlinspike.h A /marlinspike/tests A /marlinspike/tests/overview.txt A /marlinspike/tests/util A /marlinspike/tests/util/TestList.inf A /marlinspike/triggers A /marlinspike/util A /marlinspike/util/List.h A /marlinspike/util/util.h A /marlinspike/world Breaking Ground!: * Directory structure in place * m/util/List.h (done enough to be used; and what's done works) * m/util/tests/TestList.inf (to prove List.h works) * Include files sort of work... need to be included from project root ------------------------------------------------------------------------ r1 | Zach | 2008-12-12 01:48:37 -1000 (Fri, 12 Dec 2008) | 2 lines Changed paths: A /marlinspike A /marlinspike/Main.inf Initial commit: a "Hello, World" file of sorts. ------------------------------------------------------------------------