David Cornelson
David Cornelson once tried to build an IF publishing company called Textfyre That endeavor is now closed. Some of the remnants of Textfyre include web-based platform tools for Inform 7 using Glulx-TypeScript, FyreVM-Web, and TypeScript, and ReactJS. As of January 1, 2024 David is now a Board Member of the IFTF and is spending more time on a .NET based IF platform.
Note: David 's nickname is Dave on ifMUD; formerly, it was Jarb.
Author Credits
- The Town Dragon (Oct-1997; Z-code). IF Comp 1997: 24th place.
- Cattus Atrox (Oct-1998; Z-code). IF Comp 1998: 20th place.
- The X Chicken (1998; Z-code). ChickenComp.
- The Devil Made Me Do It (Dec-1998; Z-code). Speed-IF 3.
- Nostradamus's Onion Sandwich (Sep-1999; Z-code). Speed-IF 4.
- The Spy Who Always Wears Gloves Now (Nov-1999; Z-code). Speed-IF 5.
- A Top Hat for Eddie (Nov-1999; Z-code). Speed-IF 6.
- Pantsless in Seattle (Jan-2000; Z-code). Speed-IF 8.
- Fido and The Dead Body (May-2000; Z-code). Speed-IF 11.
- The Last Laugh (2000; Z-code). DragonComp.
- Triple Bear Beer (May-2001; Z-code). Speed-IF Y.
- Falling Angel (Jan-2003; Z-code). Speed-IF 19.
- The President, the Democrat, and Smelly Pete (Apr-2003; Z-code). Speed-IF Jacket.
- Jack Toresal and The Secret Letter (with Michael Gentry, publisher: Textfyre; 26-Jun-2009).
- Hypnotist of Ladies (26-Mar-2012; Z-code 5). Apollo 18+20: The IF Tribute Album.
Tech Credits
- Authored the following Inform 6 library extensions: printslow.zip, and whowhat.h (with Andrew C. Murie).
Review and Article Credits
- David Cornelson: Build A Business For Interactive Fiction - SPAG #38, September 28, 2004.
Organizational Credits
- Organizer of XComp (1999), DragonComp (2000), IFLibrary Comp 2002, IFLibrary Comp 2003, Segment Mini-Comp (2005), McDream Minicomp (2006) and McDream II (2006).
- Creator of Speed-IF, and organizer of many of them: Speed-IF 1, Speed-IF 2, Speed-IF 4, Speed-IF 5, Speed-IF 6, Speed-IF 8, Speed-IF 9, Speed-IF 11, Speed-IF 12, Speed-IF Third Anniversary, Speed-IF 5th Anniversary, and Speed-IF Scenario 1.
- Publisher of The Inform Designer's Manual, The Inform Beginner's Guide, and the IF Promotional CD, August 2004 Edition.
- Helped David Welbourn convert The Inform Designer's Manual from PDF to HTML.
- Original host/maintainer of plover.net and the IF Library. Plover was maintained by Peter Seebach from 2005 to 2007 and in September of 2007, plover.net returned to David's basement. In 2013, Plover was moved to the cloud on linode.com. IFLibrary.com was retired in favor of Baf's Guide.
- Creator of this IFWiki.
- Owner/CEO of Textfyre.
Game Appearances
As an NPC:
- Dragon! (Adam Thornton; 2000; Z-code). DragonComp.
- The Relentless Adventures of Captain Speedo, Episode 112 - Alert on Aleph VI (Gilles Duchesne; 2001; Hugo). Speed-IF Pi-Theta-Aleph-Parallax.
As a cameo appearance:
- Are You A Chef? (Adam Biltcliffe; 2000; Z-code). As Jarb, tragically turned into a sprout.
IF Platform C#/.NET Core
I mostly play with C# and building a parser-based platform on top of .NET Core. I've iterated through the development process using ChatGPT and have the ongoing results in a public GitHub repository (chatgpt-ifplatform).
Some of the things I've set as requirements include:
- In-Memory Graph Data Structure to store and manage the World Model
- Includes Edges and Nodes, both with dynamic properties
Here are working Edge.cs and Node.cs classes:
public class Edge
{
public string StartNodeId { get; private set; }
public string EndNodeId { get; private set; }
public List<GraphProperty> StartProperties { get; set; }
public List<GraphProperty> EndProperties { get; set; }
public Edge(string startNodeId, string endNodeId, GraphProperty startProperty, GraphProperty endProperty)
{
StartNodeId = startNodeId;
EndNodeId = endNodeId;
StartProperties = new List<GraphProperty>();
StartProperties.Add(startProperty);
EndProperties = new List<GraphProperty>();
EndProperties.Add(endProperty);
}
}
public class Node
{
public string Id { get; private set; }
public object Data { get; private set; }
public List<Edge> Edges { get; private set; }
public List<GraphProperty> Properties { get; set; }
public Node(string id, object data, GraphProperty defaultProperty)
{
Id = id;
Data = data;
Edges = new List<Edge>();
Properties = new List<GraphProperty>();
Properties.Add(defaultProperty);
}
public Node(string id, object data, List<GraphProperty> defaultProperties)
{
Id = id;
Data = data;
Edges = new List<Edge>();
Properties = new List<GraphProperty>();
Properties.AddRange(defaultProperties);
}
}
public class GraphProperty
{
public string Key { get; set; }
public object Value { get; set; }
public GraphProperty(string key, object value)
{
Key = key;
Value = value;
}
public static GraphProperty Create(string key, object value)
{
return new GraphProperty(key, value);
}
}
- All text emission is contextual through a service
- This means text is never "printed" but slotted for structured emitting at the end of the turn. This will require language emission rules to allow the author to construct output how they want. We'll create standard patterns, but this will be wide open for customization.
- Save state will be a serialized version of the World Model in-memory graph.
- The player will have a built-in dynamic memory.
- The Grammar definitions will look familiar to anyone familiar with Inform 6 or TADS (see the in-progress StandardLibrary in the codebase).
- I'm starting with a traditional footprint (Locations, Compass Movement), but I plan to spin off a Scene-based platform afterwards where the concepts of locations and movement don't exist.
- I might delve into the idea of a pluggable movement system and not default to compass directions. This is not trivial.
- I plan to implement an event management system where the author can define World Model states as triggers for activities.
- Activities will be similar to Inform 6 daemons, but explicitly rule-based.
- A lot of built-in meta data. Every time a player sees, hears, smells, arrives at, carries, or encounters something, the system will automatically tally statistics. "You've traversed the winding path many times." > HOW MANY TIMES? "Seven."
- Every action and reaction will be stored in a transaction log.
Collaboration
I love monkeying around with IF platform concepts, but it would be nice to have others join in the fun. Feel free to ping me if you want to help out and I'll add you to the repo and I have a Mattermost (Slack twin) server to have discussions. (Plover Mattermost Server) and GitHub.
Links
- Cognitive Ramblings (David Cornelson's blog)
- Interactive Fiction Stories - blog for unused IF story ideas.
- David Cornelson (archived) - at Baf's Guide.
- IFRO listing for David Cornelson.
- Web Interactive Fiction.
Interviews
- GET LAMP: Dave Cornelson. Interview clips of Dave Cornelson for Get Lamp, 2007.
- History of Zork Now Available on Gamasutra: Read Full Interviews Here! - Interviews with Dave Lebling, Marc Blank, Steve Meretzky, Howard Sherman, David Cornelson, and Nick Montfort. Interviewed by Matt Barton, June 2007.
- Q&A: Textfyre's Cornelson On An IF Resurgence - September 17, 2007.
- The SPAG Interview (joint interview with David Cornelson and Michael Gentry - SPAG #50, December 3, 2007.
- David Cornelson: Textfyre - Adventure Classic Gaming, September 15, 2010.