Giter Site home page Giter Site logo

ensemble's People

Contributors

aaronareed avatar bsamuel avatar ensemble-engine avatar meldckn avatar mkremins avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ensemble's Issues

Cleaning up and commenting core code: Validate

This includes removing “comments to ourselves” that we no longer need.
Finish function API (the headers for all of the functions)
Go through all of the lingering TODOs in the code, determine if they are done (remove them) or represent actual lingering tasks (add them as issues)

Cleaning up and commenting core code: Volition

This includes removing “comments to ourselves” that we no longer need.
Finish function API (the headers for all of the functions)
Go through all of the lingering TODOs in the code, determine if they are done (remove them) or represent actual lingering tasks (add them to google doc)

Website

Create a website for Ensemble!

Probably by making a new repo under the ensemble-engine user and hosting via GitHub Pages.

Should serve as a good landing site for non-technical users. Should tell people, in general, about what it does and how it's used.

Think

  • If a journalist landed here, could they write an article about it?
  • If a game dev indie came wanting to use it for a game they're developing, would they know how?
  • If a games or generative narrative academic was trying to understand Ensemble from an AI, architectural, or theoretical point of view, could they easily understand how it works and how it relates to other systems?

Components

  • A super basic landing page with introduction/brief description and signpost links mostly pointing to different GitHub pages
    • What problem your project solves (stuff about not having to design and implement your own simulation engine)
    • Bulleted list of features
    • A small code example of what Ensemble would normally be used for
    • How to start using it
    • How to get support - issues, email
  • Tutorials, Documentation - for now, let's just use the wiki for this?
  • Gallery of projects that use it, example domains, ports
    • Vox Populi: The Ustradian Games (see Playable Experiences at AIIDE 2018)
    • Project Yarn (see Appendix in Aaron Reed's dissertation)
    • Ansemble
    • A section for CiF projects
      • Prom Week
      • CiFRPG
    • Instructions for users to submit new ones
  • Publications
    • Ensemble Engine, FDG 2015
    • Writing Buddy, ICIDS 2016
    • chapters from Aaron Reed's dissertation
    • chapters from Ben Samuel's dissertation
    • Social Simulation for Social Justice, EXAG 2017
    • A section for CiF publications
      • CiF-CK, CIG 2017
      • CiF Skyrim, Autonomous Agents and MultiAgent Systems 2017
      • Natural Language Retellings, PCG 2015
      • Archival Records, FDG 2015
      • Recombinant Dialogue, INT 2014
      • TCAIG 2014
      • FDG 2013
      • AIIDE 2011
      • FDG 2011
      • AIIDE 2010
      • INT 2010
      • ELO 2010
      • Digital Arts and Culture 2009
    • Instructions for users to submit new ones
  • Sharing of microtheory libraries - way down the road
  • Section for Contributors - 'How to contribute' (e.g., jobs that really need doing, how to translate UI text into a different language, build workflows, etc)

See also galaxykate's "Oops, I made an open-source art tool!" zine

Directed/Reciprocal types should be written so that predicate-to-english sounds sensible

As an eventual style guide thing, directed/reciprocal types should always be written such that CharA is CharB reads sensibly. This is usually the case now (i.e. “angry at,” “dating”) but not always, making some predicateToEnglish calls inconsistent. (i.e. “Bob is dating Chuck”, “Bob is friends Chuck”. friends should be called “friends with” for consistency.)

It might be that authoring social schemas requires more tools for specifying how natural language should be realized. i.e. {“hates”, “hates”, “hated”}, {“friends”, “is friends with”, “was friends with”}. Although this is tricky if these need to vary for types within a schema: makes the creation format more complicated.

Verify Rule-Type-Switching Problem isn't a problem

Before Pulling Aaron's recent amazing authoring tool changes, I realized that I had some changes to the authoring tool committed locally that I hadn't pushed to the repo yet. One of them included the following commit message:

"Fixed a bug in the authoring tool that was changing the 'type' of rule files from trigger to volition if the editor switched back and forth in a single editing session."

To ease the merging process, I stashed my changes and simply did a pull. It's possible that in Aaron's refactoring he addressed the issue that I fixed in my local commit. But it should be verified that this is the case. If it isn't, a new issue to fix it should be created.

Should Unspecified Roles in the preconditions of a rule assume 'anyone'?

if a role isn’t specified in the preconditions on a rule have it assume ‘anyone’?

Wait, does it do this already? See Yarn rule ‘kind looking people are more likely to be trusted” -- there is a role only specified in effects and it seems to work. Maybe volitions and actions are different in this way? Should double check.

Er, just double tested with exact same situation above and seems to not work? See two similar rules in testVolitionRules: “"A trusting person is more likely to give trust." did work, but "Someone with a kind face seems trustworthy." did not. The difference between these is one is a ‘condition on initiator->all responders” and the other is a “all initiators->condition on responder. The former worked, the latter didn’t. Maybe this is what is happening here?

Allow social schema categories to be "exclusive" (only one value possible at a time)

Possible extension: Add a new specification field "exclusive" for a social schema category, i.e. for a quality that a character could only ever have one of at a time. Example: current location, character type, etc. When a new value is registered in Ensemble, any old values are unset.

This is more complex for directed categories. I.e. does this field mean character X can only ever have one entry of this type, or only one entry per unique character Y? Similarly for reciprocal: does it mean both characters cannot have another item of this category?

(One could make the case that this kind of behavior ought to be up to authors, and in many cases is unnecessarily limiting. I.e. making "relationship" exclusive assumes no nonmonogamous relationships, making "character class" assumes no multiclassing, etc.)

Ensemble.get functionality to fetch the history of a particular character.

References to cif.get should likely be ensemble.get

New “get” option: get “history” Right now cif.get() returns the ‘current state’ of the sfdb, but there might be times when you are interested in seeing the history of a particular character. It looks like we don’t currently have the means to fetch that? It would be nice if we did!

Rule Editor: Add Reciprocal Button

An "add reciprocal" button for volition effects: if you click for a rule that increases desire to start dating, adds a new rule that decreases desire to stop dating.

Cleaning up and commenting core code: RuleLibrary

This includes removing “comments to ourselves” that we no longer need.
Finish function API (the headers for all of the functions)
Go through all of the lingering TODOs in the code, determine if they are done (remove them) or represent actual lingering tasks (add them to google doc)

Refactor out library dependencies

Refactor out library dependencies, if possible. util.js, jQuery. Possibly underscore? Can duplicate most useful functions within a cifUtils module if needed.

Cleaning up and commenting core code: SFDB

This includes removing “comments to ourselves” that we no longer need.
Finish function API (the headers for all of the functions)
Go through all of the lingering TODOs in the code, determine if they are done (remove them) or represent actual lingering tasks (add them to google doc)

cleaning up and commenting core code: Ensemble

This includes removing “comments to ourselves” that we no longer need.
Finish function API (the headers for all of the functions)
Go through all of the lingering TODOs in the code, determine if they are done (remove them) or represent actual lingering tasks (add them to google doc)

Module Loading Solution

Research: decide whether to stick with Require or switch to some other system for module loading (CommonJS, other alternatives? maybe we don’t even want a module system, just attach everything to a single global variable “ENSEMBLE”?)

Debugging/Tracing Solutions

Debugging/tracing. We have some stuff hacked in for Yarn, but what’s the best long-term solution? That won’t slow down normal execution? (Priority level?)
JS equivalent of “signals”? Much faster than events.

Enforce that all "types" across all "categories" are unique

When loading a schema, should enforce that all “types” across all categories are unique. (I.e., you can’t have a relationship “friends” and a status “friends.”) This assumption makes parsing console commands easier, and is probably a good best practice to avoid potentially confusing problems.

Console: Switching between volition and trigger rule tabs sometimes cause files to be re-written incorrectly.

Console: Display bug (which sometimes yields an actual bug). Set up: A schema that has volition file defined, but no trigger file. Click Rule Viewer tab, make a new volition rule by clicking new volition rule button. this takes you to rule editor tab. Without clicking “update rule” go back to rule viewer tab. Now click on the trigger rule tab, and then click make a new trigger rule button. When the dialog comes up to name the trigger file, click cancel. A rule appears to show up in the trigger list, with the same file name as the volition file (but cannot be clicked on, indicating display bug). HOWEVER sometimes (I cannot reliably recreate this) it does seem to save “over” the file (turning your volition file into a trigger file, and eliminating all rules from it except the rule that was appearing as a display bug).

Add an “isInitiator” field to volition rules

Add an “isInitiator” field to volition rules with three potential values:
“initiatior” means that the rule pertains to a character wanting to engage in an action.
“responder” means that the rule pertains to a character determining if they will accept or reject the action if it is done to them.
“both” means that it affects both the initiator and the responder, as outlined above.

When the effect of a rule involves two roles, but the condition doesn't have two separate roles.

Console: If you are writing an effect that involves two people, but the condition doesn’t have two separate roles specified, the effect that involves multiple people won’t display the second role properly. This is actually probably desirable behavior, but even if you do add the additional role in the conditions, the effects won’t update until you’ve fiddled around with it (e.g., switch the category and back)

"Reverse volitions" don't always work for determining if an action should be accepted

"Reverse volitions" don't always work for determining if something should be accepted.

Here's an example:

Consider volitions between a character who is ‘arrogant’ and a character who is sycophantic. Sycophant has high volition to praise arrogance. Arrogance has low volition to praise sycophant. ---> Does this mean that Arrogant is likely to refuse praise! I think so, but that doesn’t seem right!

This should be addressed somehow.

Console: Too many backup files being generated.

Console: When you make a new file for rules (say, trigger), and then you load to a new schema, and then make another new file for rules (say trigger), and then save, it will save backups of BOTH files: solution -- when you loadSchema/ call init in ruleEditor, clear our the ‘backup’ cache?

Rework predicateToEnglish to use printed character names instead of IDs.

Some difficulties:
predicateToEnglish is in RuleLibrary, which does not have access to CiF.getCharactersWithMetadata (needed to extract printed names from char ids). Would need to either a) register character names with ruleLibrary at the time they are set/updated, or b) add in a way for RuleLibrary to access CiF functions.

Need to make sure this isn’t going to screw up anything that needs to extract the character ID from a “predicateToEnglish” result and use it elsewhere. I don’t think anything requires this right now (and if it does, it should be changed) but should double-check.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.