Giter VIP home page Giter VIP logo

anansi's Introduction


Anansi: Unity Toolkit for Simulation-Driven Visual Novels

Static Badge Static Badge

ko-fi

calypso-screenshot

Anansi is a Unity extension for creating social simulation-driven visual novels. It combines the Ink narrative scripting language, a storylet architecture, and a social simulation that manages non-player character (NPC) schedules, emotions, personality traits, and relationships. Interactions with NPCs affect their feelings toward the player and other NPCs. Additionally, NPCs can reason about their relationship with the player and respond to events that happen to other characters in their social circle. For example, betraying a character will make their friends and family like you less. In short, adding this element of social simulation to visual novels should allow game developers to create dynamic and reactive interactive storytelling experiences more quickly than starting from scratch. Anansi draws most of its inspiration from Persona 5's use of life simulation, time, and character relationships to drive narrative progression.

Anansi is a good solution for people who want to quickly port their Ink games to Unity. Setting up UI and dialogue management can be cumbersome. Anansi provides starting UI prefabs to help with this. Also, since Anansi is built on top of Ink, users can start with a normal Ink story and incrementally add Anansi-specific features into their games. While Anansi can handle almost any Ink story, it really shines with stories that revolve around character relationships and navigation from one location to another.

πŸš€ Features

  • ⏰ DateTime system tracks the current week, day, and time of day (morning, noon, evening, etc.)
  • πŸ“ Story locations update their backgrounds based on the time of day
  • ❀️ Underlying relationships system to drive content selection
  • ✏️ Write story content using Ink
  • πŸ—“οΈ Characters move locations based on daily schedules

πŸ“₯ Installation Instructions

The following are instructions for installing Anansi into your Unity project. This is the recommended installation method because Anansi is not available in the Unity Asset store.

  1. Open your project in Unity
  2. Open the package manager window by selecting Window > Package Manager in the top menu.
  3. Click the + icon in the top left, and select Add package from git URL....
  4. Paste the following URL: https://github.com/ShiJbey/Anansi.git?path=/Packages/com.shijbey.anansi#v0.5.0
  5. This will install version v0.5.0 to your project. If you want a different version change v0.5.0 to any tagged version
  6. Wait, and you should see Anansi appear in the package manager window with a version matching your downloaded version.
  7. Close the package manager window.

Tip

This project uses semantic versioning. So, major version numbers will have breaking changes. Minor version changes will mostly contain new features, but there is always a chance of a breaking change. All pre-release version (sub 1.0) may contain breaking changes between minor version changes. Please check the CHANGELOG to see what changed between releases.

😎 Potential future features

Below are features not currently supported by Anansi but are common in other visual novel tools. I will implement them if there is enough interest and time.

  • Dialogue "auto-play"
  • Dialogue "skip"
  • Dialogue backlog/history
  • Save/load
  • Choice rollback (I don't plan to add this due to social simulation complexity)

If you want to try your hand at contributing new features to Anansi:

  1. Create a new Issue for the feature (if one does not already exist)
  2. Fork the repository
  3. Make your changes
  4. Submit a pull request and describe your changes.

πŸ“š Documentation

You can find the latest documentation for Anansi in the wiki. If something does not make sense, feels broken, or needs improvement, please create a new GitHub Issue.

🀝 Contributing

Contributions, issues, and feature requests are welcome! Please check the Issues page

⭐️ Show your support

Don't forget to star ⭐️ this repo if this project has helped you or you find it interesting.

I release all my tools as free and open source projects. My graduate schooling has been partially funded by federal grants, paid for using tax-dollars from hard-working, everyday people. Thank you to those who make it possible for student like me to do what I do.

πŸ“„ License

This project is MIT licensed.

πŸ‘€ Projects using Anansi

If you built a game using Anansi, we would love to hear about it. Please get in touch with us, and we will add an image and link to your game below. Also, remember to credit Anansi in your projects. More exposure helps the project grow.

  • TBD

❓Frequently Asked Questions

What are storylets?

Storylets are an approach to narrative design where the narrative experience is broken into discrete pieces that are dynamically served to the player based on some preconditions. Emily Short provides a helpful blog going into more depth about Storylets and various potential application areas. Also, Max Kreminski provides an informative survey of the design space of storylets in games.

Why use Ink?

Ink is a great scripting language for creating branching narrative experiences. It's been battle-tested in multiple commercial games. It provides enough end-sure flexibility to allow frameworks like Anansi to leverage it as the content-authoring back-end. If you want to become more familiar with Ink, please check out Inkle Studio's website and their portfolio of narrative games.

Can I use my own UI?

Yes. Anansi is UI-agnostic. The UI prefabs that come with it help you get up and running faster than starting from scratch.

Wasn't this project named Calypso? Why Anansi?

Yes it was. I had named it after Naomie Harris' character Tia Dalma/Calypso in Pirates of the Caribbean. However, the greek mythology around Calypso, as depicted in the Odyssey, is better known and I didn't want the two that directly associated.

Anansi is an Akan storytelling diety, often depicted as a spider. So, the name fits perfectly. Plus Anansi makes for a bangin' logo.

anansi's People

Contributors

shijbey 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

Watchers

 avatar  avatar  avatar  avatar  avatar

anansi's Issues

Core Feature: Locations update background variant based on time of day.

Overview

Locations should update their background variant based on the current time of day. However, this should happen automatically without writers needing to specify the time of day as an additional tag. Also, calls to AdvanceTime() from within Ink scripts should also result in the current background updating itself.

Planned version: 1.0

This feature implies the following:

  • Locations should store the last tags used to set their sprite.
  • We have a way to add tags to the current list of sprite tags without overwriting the list.
  • Subsequent calls to display the same background, without specifying sprite tags, should result in the same sprite being presented.

This feature might benefit from:

  • An optional tag syntax that would allow us to specify the time-of-day as an optional tag that the system will try to satisfy but will fall back to the required tags if none meets all the optional tags

Add external Ink function to advance to next time of day

Overview

Currently, writers can advance to the next time of day. However, they cannot advance time more than once unless they call advance time multiple times between dialogue lines. It would be nice if there were functions for advancing to the next specific time of day or advancing to the entire next day.

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.