Code Monkey home page Code Monkey logo

project-story's Introduction

Project-Story

A Bukkit plugin for dynamic quests and characters, that are tailored to your world.

Project Story is all about bringing depth and story to your Minecraft world. Interactive NPCs that can recognize different players, automatically-generated quests and events, and even artifacts and loot, all generated on-the-fly, and tailored to the specific player and world.

Features

Auto-Quest

Quests are an important feature of any RPG-style world, but they can be time-consuming to create, and aren’t dynamic in any way, so they can get repetitive for players. But with Project Story, no quest is set in stone.

Quests are generated as needed, by looking for suitable objectives for the player to complete, and assembling them into a unique quest. So, when a player asks an NPC for a quest, they get a brand new quest, made from random objectives that (optionally) meet certain criteria.

You can still create quests manually, and can still include dynamic objectives from Auto-Quest, to create story-driven quests that are fresh and exciting for new and old players.

Interactive NPCs

Citizens NPCs can be tagged in Project Story, to define their behavior towards the player and other NPCs. Define a tag’s behavior once, and apply that tag to any number of NPCs. Easily create a dozen townspeople with similar dialogue and behavior, with just a single tag.

NPCs can have interactive dialogue, using clickable Prompts from Project CoRE. Create a list of dialogue and possible responses that the player can choose. Optionally, hide or show dialogue and responses based on certain criteria.

NPCs can be created automatically with tags. Quickly fill a town with interactive NPCs, by tagging the town’s location, and pre-tagged NPCs will be able to spawn there. Paired with Auto-Quest, these NPCs can give dynamic quests to players, making it easy to fill a town with gameplay.

Tags

Tags are the heart of Project Story. They identify everything in the world, define how they should be treated, and define how they should behave. Any entity (including players and NPCs), as well as locations, objectives, and items, can be tagged.

Imagine you have a nation in your world, called Waramon. A Waramon tag can be applied to all NPCs, locations, activities, and players that are part of the nation. This will cause the NPCs to recognize the players as allies, and they could give quests for objectives within the nation.

A blacksmith NPC may have a second tag, “blacksmith“. Objectives, such as a weapon shop awaiting a delivery, or a mine that requires help, may be also tagged with “blacksmith”. If the player asks the blacksmith NPC for a quest, Auto-Quest would generate quests involving these objectives, because they share the same tags.

Another nation, called Yongaron, may have it’s objects tagged as “Yongaron“. The Yongaron tag could include behavior to treat Waramon as an enemy. Now, Yongaron NPCs will fight against Waramon NPCs and players. Yongaron players may receive quests from their NPCs, to go fight at Waramon locations.

Flexible and powerful, yet simple

Like all of our plugins, Project Story is highly customizable, and all features are optional. Each tag can use as many or as few features as desired.

You can choose to only include NPC dialogue, and ignore all other features. Auto-Quest only creates quests when needed, so it has no impact if you choose not to use it.

Many objects are pre-tagged (players have their realm and title, Warpstones are tagged locations), so you can get started quickly, or define your own tags. Other plugins can supply their own tags and objects, which can be used to extend the capabilities of Project Story.

There is no limit to the number of tags you can use. More tagged objects will increase the possibilities for dynamic content and Auto-Quests.

project-story's People

Contributors

kade-n avatar

Watchers

James Cloos avatar  avatar

project-story's Issues

Contextual interactions when player is on a quest

When a player is on a quest, and they interact with any NPC that may have something to say that's related to the quest, show a "!" over their head, and replace their normal interaction with one that was specified in the quest template.

Allow NPCs to complete objectives

Certain objectives should be completable by NPCs. For example, the "go to location" objective, when given to an NPC, should cause them to walk to the destination.

It's possible that this could be expanded to allow NPCs to do more advanced tasks, such as mining or farming.

Reputation system

  • each realm and NPC has a reputation score with each player

  • realm and NPC scores are summed to produce final effective score

  • reputation determines basic behavior

  • positive reputation means NPC is friendly with player, negative reputation makes the NPC aggressive towards the player

  • reputation is raised automatically by completing quests for NPCs

  • a very high reputation may allow the player to give orders to the NPC or recruit them to their own realm

  • Let's say you attack an NPC

  • Your reputation immediately goes down with that NPC

  • It also goes down in the NPC's realm, but not as much

  • So you might get a -5 penalty in the realm per hit

  • But a -10 with the NPC because they're gonna hold a grudge

  • So the specific NPC would have a -15 with you, while other NPCs in the realm would have a -5 with you

  • If your rep with one of your own NPCs dropped too low, they may leave your realm

NPC Towns, in Story Zones (so players can't break/place blocks), can be swayed to support your realm, either by improving your reputation with them (defending them from attacks, completing quests, bringing materials in, etc.), or by killing the NPCs until they surrender

This allows realms to "claim" these NPC towns, but they cannot place/break blocks in the town

NPCs carrying torches at night

At nightfall, NPCs should stow their offhand item, and take a Torch instead. At sunrise, the torch should be stowed, and the NPC should return to another offhand item (such as a shield).

Party system (multiplayer questing)

Should party creation be automatic (when players are close together), or should it require a command?

When players are in a party, all interactions with NPCs will be shared between both players. Each player will see the exact same text said by the NPC, and either player can choose an answer.

When in a party, all party members can complete each other's quests. All players receive credit for completing quests, even if a player didn't start the quest themselves.

NPCs can join parties. The NPCs will automatically follow players, attack their targets, mine ores, farm, etc...

Books from file (Interfarthing Book Number - IFBN)

Books can be set in a text (YAML) file.

File name is the book's ID. This ID will be visible on the book item in-game. A book ID can have any format, but we'll probably try to standardize this for Akenland (using a system called IFBN). Possible formats are "Farthing letter - number - first three letters of topic", such as "E-001-EQU".

File contains Name, Author, and numbered Sections. Each Section contains any text. Page breaks are handled automatically by the plugin. File can also contain quests to start (when book is opened), or prompt actions to run.

New target selector system?

Okay so we have @ p, @ e, @ r... but what if they were more powerful
So I was thinking, what if these worked for more than just players...
Need to use a warpstone? @ warpstone[r=100] picks out a random warpstone nearby. @ npc[waramon,guard] picks out a random NPC that's a Waramon Guard
@ item[eborin,level=30-40] picks out an Eborin item that's between levels 30-40

These would be used in command blocks, prompts, quests, whatever

The Minecraft target selectors are often changed between Minecraft versions, don't play nicely with plugins, and are overall difficult or impossible to integrate with.

To avoid conflicts, a new format could be something like $character, $warpstone...

This is low priority right now, as I can't think of a use for this, that isn't already covered by the Conditions system.

Allow Journal to hold custom objectives

Players should be able to add custom entries to their Journal.

A custom entry can have "no objective", in which case it will remain in the Journal, until the player chooses to remove it. Alternatively, a custom entry can have an objective, such as "collect 20 wood", in which case the player will be notified when the objective is complete (much like a quest).

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.