-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"The Swallows of Summer" by Cat's Eye Technologies #39
Comments
Well, the important thing is to get something out, right? So here is the first chapter of my first novel meta-written for NaNoGenMo, The Swallows: https://gist.github.com/catseye/7289762 As I feared, the plot does begin to suffer partway through (like, partway through = in the second paragraph.) I feel the characters are somewhat underdeveloped, as well. Perhaps I'll write a sequel where they talk to each other. |
I mean it's not the worst story I've read. |
Maybe add a little bit of not-very-smart logic for substituting "he" and "she" for names, most of the time? (Ensuring the explicit names appear first, and not-too-widely spaced thereafter.) (Hope such suggestions are okay.) |
@dariusk Thank you for saying so. I am myself simply pleased that the word "story" can be applied, however loosely, to refer to the output of this program. I know I have a sequel in me! It's three years later, and Alice and Bob now live in a much bigger house, and... well, I'll post a chapter shortly, maybe even the code if I clean it up a bit. Since other NaNoGenMo participants have talked about their methods and in case it's not obvious: it's a text adventure game, without a player, but with two NPC's. They occasionally have very short-term goals -- such as picking up treasure when they see it -- but they're mostly driven by Brownian motion. @erkyrath Sure, that's a good suggestion. But the whole "narrator talks like some kind of robot barbarian while the main characters sure do seem to have short memories" feel this has, it's kind of charming, you know? But yes, I should probably try to improve on the diction in one of the sequels. |
Alright, the first four chapters of the sequel, The Swallows of Summer, are here: https://gist.github.com/catseye/7293648 To convince yourself that the plot does indeed develop (after a fashion) over the course of the story, it may be easier if you search the page for the word "shoot" instead of trying to actually read through it. btw @dariusk Thank you for both having this NaNoGenMo idea and actually doing it. I find this very entertaining. |
My entire M.O. is: get a silly idea and then follow through with it. Glad you're enjoying it. |
Also, I'm dying with laughter here, what a great set of chapters |
Oh, so I'm not the only one for whom this is really quite entertaining? That's very reassuring. Unfortunately most of my visions for a further sequel (working title: Swallows and Sorrows) are perhaps a bit too grand to get to soon. I feel very strongly that the police ought to be involved in this story at some point. Or at least, they should do something about the dead body in the bathroom. But November's still young, right? As my "official" submission so far, here are all 15 chapters of The Swallows of Summer, and the code: |
My favorite passage:
|
Hmm, yes, yes. I do suppose the first step in doing something about a dead body in your bathroom is remembering that you saw it. A sound observation! |
I see that a number of people have reacted positively to the The Swallows of Summer. I don't know what to say. I'm pleasantly surprised. I should re-state, I don't really have any idea what I'm doing -- the most important thing about NaNo*Mo is just to get something out, right? Also, they say, if you want to start writing, you should write what you know. And what I know is: text adventure games and programming language implementation techniques. More to the point, I barely know anything about literature. (I'm going to have to go look up who Beckett is now.) And I don't think I could write a story, myself, to save my life. I do find the whole concept of "writing" to be fascinating, though. (btw, I'm intentionally using the phrase "text adventure games" because I do think there is a relevant distinction between those, and works of "interactive fiction". IF has plots and characters, while text adventures have, uh, treasures and puzzles...) I do like the idea that the plot should be emergent from the elements in the world, somehow. Then again, it doesn't have to have "a plot" per se, does it. Perhaps the particular combination of randomness and monotony in Alice and Bob's world turns out to be an excellent metaphor for contemporary (or dare I say post-contemporary) life, and that's why it resonates with some people? Who knows. If there is a sequel, it will likely be a bit of a departure, in any case. At least in terms of narration style. For one thing, I took @erkyrath's suggestion and the script now knows how to use pronouns; also, each paragraph is written from the point of view of one of the characters. (Well, OK, maybe not "point of view" so much as "field of vision".) One interesting result of this is that plot developments can take place that are never described directly:
As you can imagine though, this can sometimes get somewhat confusing. Especially when, say, the sentence "He pointed the revolver at Alice" is the first occurrence of the word "revolver" in the story. |
Second person would be a trip for this kind of story (and in line with text You were in your bedroom. You saw Alice walk into the room. 'Hello, You,' On Tue, Nov 5, 2013 at 8:30 AM, catseye notifications@github.com wrote:
|
I might kick it into present tense for 2nd person. On Tue, Nov 5, 2013 at 9:30 AM, John Ohno notifications@github.com wrote:
|
I remember reading a short story once (I think it was by Stephen King) where the hobby of one of the characters was writing short stories in second-person, future tense. I believe it was to establish that character's personality as kind of creepy.
But I'm intentionally avoiding anything too "artsy". I have my sights set on, well, just a dime-store paperback, really, and anything more ambitious would probably be too distracting to me. But there are a whole lot of possibilities. Maybe one of the middle chapters could be told from the point of view of the revolver... |
Fantastic! |
wow, I am cracking up here. I feel like the rooms could have more extensive descriptions, perhaps just filling them with red herring objects to add to the suspense. |
I would like to see it more modularized, so that more characters (Actors) could be introduced, or removed (say, 1 or 100 wandering about). grouping/avoidance behavior would be interesting - desires to be with other people (in general) or avoid them. then, you could have a character that wants to be outside, but avoids sunlight. game mechanics would have them go to interior rooms, basements, etc. but when night falls, go outside. If desire was extended to object, characters would want some things, or not want somethings. Simple trading mechanics could lead to complex interactions. A character who places great desire on a ring would try to get it back, following a person who picks it up, pester them, over-ride other avoidance behaviors they have.... |
It was fairly simple to add a third character, "Fred", to the mix. I don't speak python (I installed it just to run your apps), so how to abstract them is a bit beyond me at the moment... I played with adding a room and some items, and it all worked well. diff of changes: MichaelPaulukonis/NaNoGenMo.yawp@7bf252a |
It should be fairly modular at this point, in the sense that not too much of the code is hardwired to dead bodies and revolvers. Plurals can be be done with the I haven't tried it yet, but I think the main thing that won't work well when adding new characters is the narrative engine, i.e. switching to telling the story from Fred's point of view. I've been slowing trying to rewrite the event collector/Editor (when I haven't been distracted by palindromes) so that that's not as much of problem, but that still has a ways to go (I'd like the Editor to be able to notice significant actions that characters took when they weren't in the spotlight, and start the next paragraph where they are featured with, like, "Alice was in the kitchen. She had just found a revolver in Bob's bed.") Of course, if the story is never told from the new character's pov, there's no problem there. Shouldn't matter if items/treasure are initially placed in locations/containers/peoples' inventories -- should all be pretty much the same. I would've thought. But then, the script did kind of grow organically. btw, if you fork it, note that I might still make sweeping changes to it (in the name of Art, of course...) ... maybe I'll split it up, and apply, y'know, actual software engineering to it, so that the world and the engines are actually in, like, different files. |
I didn't note POV problems with Fred, but I'll look more closely. I'm going on at length about this, because it has me excited [not obvious, right? 'cause I'm playing it cool*]. I know there has been a lot of work on Interactive Fiction as narrative, but I haven't seen anything where the "Interactive" part has been removed. If you know of any prior work in this area, I'd be interested in seeing it. What I like about this approach is that it parallels what I've heard of the writing process from some authors -- that the plot doesn't spring full-grown from their foreheads. Rather, characters (and/or a situation) come first, and the story comes from following the characters, and "seeing" what they do. The "simplistic" output generated so far has great qualities, and further work might obscure it. That's not my intention. But I am curious about how changing elements could change how a narrative develops: hundred of Items, hundreds of Actors, Actors that want to be alone, hundreds of Locations with only a few Actors that want to cluster together, but can't find one another, all according to game mechanics. Simple rules, complex emergent behavior. I'm also fascinated for another reason - way back in the antediluvian period (the mid-1980s) I wanted to write text-adventure parsers. But never got very far. Writing these games/stories with other engines never appealed to me, and I never played with that area again. Your approach has no parser, since there's no input. What is the background on the coding-concepts for building the world and dealing with the Actors and objects? And, hopefully, interesting texts. * OMG OMG OMG THIS IS SO COOL! |
I figured you must've liked it a fair bit if you were motivated to hack around with it even though you don't know Python yet :) I'm glad you like it! I'll clean it up a bit soon, I promise. I... am certain there must be prior work in this area, but I am not familiar with any of it. No, wait, that's not quite true: In the antediluvian period which you mention, as games went, I mostly wrote text adventures, because Commodore 64 BASIC was too damn slow for video games, and everybody told me machine language was very difficult. I also had a book called "1001 Things To Do With Your {insert model of home computer here}". It was mostly ideas, occasionally with BASIC code. It described a story-telling system, probably done at MIT in the 60's or 70's, and probably with an exciting name like STORY or STORYTELLER (I don't recall exactly), which could produce simple Westerns. The way they described it, it was obvious that it was something like a text adventure or "blocks world"; the gunslinger couldn't shoot his gun if there were no bullets in it, or if it was still in his holster, and "knew" the actions to take (draw gun, load it) to meet the goal. The coding concepts come mainly from text adventure games/IF and/or MUDs/MUSEs which themselves come largely from blocks worlds. Removing the parser doesn't change much, internally. Consider that in, say, Inform, the player's command is parsed into an action, and it is the action that is executed. If you just start with actions, you don't need a parser at all. In fact, this all might be much simpler if I just did it in Inform (surgically removing the parser) because all the plurals and whatever are already taken care of. But on the other hand, there is that "producing a continuous narrative" thing that Inform isn't really built for (or wasn't, last I used it,) which in my approach I found to be remarkably similar to a peephole optimizer from compiler construction. Instead of replacing sequences of instructions with more efficient sequences of instruction, the "Editor" in the_swallows replaces sequences of events (sentences) with more readable events. It kind of makes sense, when you think about it; most real published novels were written by a writer, and then gone over and altered by an editor... |
I share the feeling that there's prior work in removing the "interactive" from interactive (or "ergodic") narratives. I know I've toyed with mapping out IF games by having a bot check out all the possibilities. That's the sort of mental area I try to run around in, though. I'll let you know if I come across anything. |
First things first, I've decided to "publish" Swallows and Sorrows, despite everything (including continuity bugs and verbatim repeated sentences) because the script is clearly at some kind of plateau. Further progress can only be made by first refactoring it with a large blunt instrument. Of course, some critics will say Swallows and Sorrows lacks the innocence of The Swallows and the charming directionlessness of The Swallows of Summer; I won't blame them; but, y'know... artistic vision. Sometimes you have to follow where it goes, even if the result is not as spectacular as you hoped. Although, y'know, I still think it's pretty amusing. Also I have no idea what this means w.r.t. the "completed" tag; I really don't want to open a new issue for each novel I produce from the evolving script... I guess whichever one garners the most critical acclaim is "the" novel, and the rest are... special bonus materials, kinda? |
The tag just means "look here for some version of a finished novel" |
@dariusk Cool. btw, I found out who Beckett is, if it's Samuel Beckett. I haven't seen Waiting for Godot, although I did have an opportunity to, a month or two ago, but missed it. I have seen some Stoppard plays, though, and I get the impression they're sort of in the same ballpark (or maybe neighbouring ballparks?) One thing I've learned during NaNoGenMo so far is: computers are very good at expressing certain kinds of futility. (Why? Why, why... why?) @MichaelPaulukonis (and anyone else who's thinking of hacking on this), I've split up the source into a few different modules and put them into a Python package called I don't know how much that actually helps, given that the interfaces for the modules are likely to keep changing (per my whim!) but maybe it's a step towards reusability. I'll keep trying to take some of the Swallows-specific stuff out of the general engine. |
this is cool and I also enjoyed reading all the above comments. I don't understand how Beckett just happened to be there in the conversation at some point but the way you said "I'm going to have to go look up who Beckett is now." right out of the blue is so Beckettian it's the funnier thing i've seen today. also the story of Alice and Bob is Beckettian everything is pretty much Beckettian around here and if I understand well it's not even on purpose haha unpurposeful Beckettian prose that's so Beckettian. |
@lilinx Oh no! I referred to an object that hadn't been introduced yet in this thread! I'm starting to write in the style of my own novel-generator! Oh gosh, forget the fourth wall; we're going to find the fifth and sixth walls and knock them down, too... The boring explanation is this: dariusk called the story Beckettian (or something like that) in a different issue. I decided to reply here, since it's about this story, and since I know he's watching this issue. As for Alice and Bob, if you're saying that this program has somehow managed to produce a story that sucks you in despite being almost unreadable, well, I consider that a big compliment. Thank you. Another scary thought that occurred to me: for this sort of thing, bugs in the code can actually be desirable, if they make the novel more interesting. |
So I've been playing with your idea. I wrote my own code from scratch, and then added a bunch of templated language, plus my twitter-source conversation engine. Here's the latest result (just a sample, not a full novel): |
I was going to say something about that amazing text, but will not, out of some primal respect for its otherness. |
@dariusk I don't know what to say. I just hope my diaphragm doesn't decide to shut down in an act of self-preservation. One image that always stuck with me from Orwell's 1984 is that Minitrue uses machines to produce pulp fiction for the proles -- machines with moving parts that are big enough to injure one of the main characters. I guess, these days, you could almost describe that as steampunk? That image has occurred to me a couple of times in the past week, but I guess your latest sample made it just a little bit more vivid. Unfortunately a single month's probably not enough time to construct a mechanical version of any of these generators, despite how fascinating such a machine might be to watch... |
@catseye when November is over, you might have some time to look at Monfort's Thesis Generating Narrative Variation in Interactive Fiction, available in PDF form from http://www.nickm.com/cis/ |
@MichaelPaulukonis Thanks. I've squirreled it away. Thanks also for unearthing the Eureka machine -- it was this thread where I mentioned physical machines -- now I'm wondering if Orwell knew about it, and if anyone was ever injured using it (it looks fairly well self-contained, so probably not.) Oh, and it would be fascinating to know what it sounds like when it's running, of course. Anyway. I'm kind of burned out on The Swallows at the moment, and I don't know what the rest of the month has in store for me. There might be one more sequel, which would be mostly the same story though, just with better editing. But unlikely to be any more after that. Fact is, the cross-pollination in NaNoGenMo has given me lots of ideas -- probably too many ideas. I don't really plan to take up novel-generation outside of the month of November, so, they'll probably wait until next year. |
Reasons I kind of burned out on The Swallows:
That said,
|
I understand the bit about testing. One of the things that this month has given me is a new respect for unit-tests. It might seem ridiculous, but has a great payoff. Particularly building tests prior to coding -- running the tests lets me know that a) nothing I previously built has broken and b) whether or not the new code works the way I expect. Without having to type run and parse the output manually. Testing output with a random generator can be awful. Which led me to find libraries that allowed random-seeding! I think this text generator is a great idea -- I can't find anything else out there like it. However, I don't think it's suited to a 50K-word novel. It needs an endgame -- a goal. If this were a "real" interactive fiction, there would be some sort of goal or puzzle to complete -- and then things would be complete. But that's lacking, here. If we instead think of the "open world" concept -- the world just isn't big enough for two autonomous characters to explore at length. Having 1) more characters 2) larger world [places/things/dialog] 3) end-condition would remove some of the monotony. That being said, those three things remove some of the fascination of this engine's current output (which I've said before). That doesn't mean it shouldn't be done -- but it would be nice to be able to extend the engine in such a way that the current output could come from a valid configuration. |
Something that I've been working on, in other contexts, is the idea that some systems can have natural story arcs: Chess has an opening, a mid-game, and an endgame, for example. It has little to do with traditional narrative techniques, but it does give a sense of progression and closure to the thing. Catharsis by non-narrative or semi-narrative means. Swallows, like some of the other generators from this month, is really good at doing fairly interesting chapter-length content, but gets monotonous over book-length without a book-length conceit. One way to address that is to have multiple generators or otherwise have a progression of situation over the length of the book. A meta-generator to tweak the settings per-chapter, maybe. |
large-scale framing devices. that's my problem, as well. I like markov semi-gibberish to a fault (it's the frisson between meaning and nonsense, the desire to ascribe meaning to the nonsense, the doubt as to what portions have meaning and what do not), but it doesn't scale. That's why I eventually went with a small (noun replacement) of a pre-written novel -- the narrative-arc was pre-written. Is that cheating? Or is that using some other sort of framing device? |
This idea of using game theory to generate plot and story arcs is a really, One could imagine finding a "just-right" game (maybe something akin to I can totally see generating something Hamlet-like from a system like this. Steve On Mon, Dec 2, 2013 at 6:35 AM, ikarth notifications@github.com wrote:
|
Probably something more simple can be used as an indicator for story arc On Mon, Dec 2, 2013 at 1:21 PM, Steve Lacy notifications@github.com wrote:
|
I'll try to respond more comprehensively soon, but in response to @MichaelPaulukonis's comment
...I totally agree, I just wanted to say that one of the things that attracted me to NaNoGenMo in the first place was the 50K word goal. IMHO it's positively quixotic to ask a computer to generate anything of that length that would actually be, like, readable in the conventional sense. Which is why I made the little joke at the beginning about the plot suffering partway through. And it's also why it was such great fun -- honestly, if the goal had been more realistic, like to produce a 10K word novella, I might have convinced myself I had better things to do, and missed out... There's also the somewhat interesting disconnect in time estimation. For NaNoWriMo, you can kind-of-sort-of estimate how long it will take you to develop and write a novel, yourself, especially if you already have some ideas. But if you've ever been involved in any kind of "agile planning" you know it's a lot harder to estimate how long it will take you to write code to do something. (Granted, it's a bit easier when it's just you instead of a team where you can get blocked on other teams, but it's still more difficult -- more non-linear. So I wasn't entirely joking when I said that it's important to just get something out...) |
So @chrisamaphone and I have created an extended fan fiction of The Swallows of Summer as one of our storyworlds for Procjam 2014: http://play.typesafety.net The Swallows of Summer was a good initial target, and I think we captured it pretty well. Goals and memory as applied in Dial S for Swallows wouldn't be too difficult to capture with the generation framework we're using. We'll probably create a NaNoGenMo 2014 entry as well - the longest twee output "script" that's been produced so far is upwards of 40 thousand words, so it's entirely possible we'll generate a novel before the month is out. |
well i think i have missed a whole lot of fascinating nanogenmoing here. i'm going to have to dive into nanogenmo2014 whenever i have time |
Fifty thousand words, huh? I do fear that the plot will begin to suffer partway through no matter how cleverly I code, but I'll give it a whirl.
The text was updated successfully, but these errors were encountered: