David Cornelson: Difference between revisions

From IFWiki

No edit summary
(added wiki link to IF Library)
 
(21 intermediate revisions by 2 users not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__
[[Image:david_cornelson.png|right|300px|thumb|David Cornelson, 2009. From my office.]]
[[Image:david-cornelson-22.jpg|right|300px|thumb|David Cornelson, 2024]]


'''David A. Cornelson''' once tried to build an IF publishing company called [[Textfyre|Textfyre, Inc.]] That endeavor is now closed, but he continues to build web-based platform tools for Inform 7 using [https://github.com/thiloplanz/glulx-typescript Glulx-TypeScript], [https://github.com/chicagodave/fyrevm-web FyreVM-Web], and Angular 2. You can follow his new [http://plover.net/~dave/blog blog] to learn more.
'''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 [https://github.com/thiloplanz/glulx-typescript Glulx-TypeScript], [[fyrevm-web|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'''.
Note: David 's nickname is '''Dave''' on [[ifMUD]]; formerly, it was '''Jarb'''.
Line 32: Line 32:
* Organizer of [[XComp]] (1999), [[DragonComp]] (2000), [[IFLibrary Comp 2002]], [[IFLibrary Comp 2003]], [[Segment Mini-Comp]] (2005), [[McDream Minicomp]] (2006) and [[McDream II]] (2006).
* 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]].
* 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]].
* 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.
* 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]].
* Original host/maintainer of [[plover.net]] and IFLibrary.com. 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]].
* Creator of this [[IFWiki]].
* Owner/CEO of [[Textfyre]].
* Owner/CEO of [[Textfyre]].
Line 47: Line 45:
As a cameo appearance:
As a cameo appearance:
* ''[[Are You A Chef?]]'' ([[Adam Biltcliffe]]; 2000; Z-code). As Jarb, tragically turned into a sprout.
* ''[[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 ({{link | url=https://github.com/ChicagoDave/chatgpt-ifplatform | archive= | text=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:
<syntaxhighlight lang="csharp">
    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);
        }
    }
</syntaxhighlight>
* 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. ({{link | url=https://collab.plober.net | archive= | text=Plover Mattermost Server }}) and GitHub.


==Links==
==Links==
* [http://chicagodave.wordpress.com/ ''Cognitive Ramblings'' (David Cornelson's blog)]
* [http://chicagodave.wordpress.com/ ''Cognitive Ramblings'' (David Cornelson's blog)]
* [http://ifstory.wordpress.com/ Interactive Fiction Stories] - blog for unused IF story ideas.
* [http://ifstory.wordpress.com/ Interactive Fiction Stories] - blog for unused IF story ideas.
* [http://www.wurb.com/if/person/280 Baf's Guide listing for David Cornelson].
* {{baf person|David Cornelson|280}}.
* [http://www.ifreviews.org/index.php?autor=328 IFRO listing for David Cornelson].
* [http://www.ifreviews.org/index.php?autor=328 IFRO listing for David Cornelson].
* [http://plover.net/~dave/blog/ Web Interactive Fiction].


===Interviews===
===Interviews===

Latest revision as of 02:38, 17 March 2024

David Cornelson, 2024

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

Tech Credits

Review and Article Credits

Organizational Credits

Game Appearances

As an NPC:

As a cameo appearance:

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

Interviews