Giter Club home page Giter Club logo

sulis's People

Contributors

grokmoo avatar hooneun avatar jstephen-pa avatar picobyte avatar shmutalov 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  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  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sulis's Issues

complete rogue ability tree

The rogue class ability tree is not complete. It needs lock picking / traps / mechanics type abilities added. This will require support for locks on props (container and door), and player settable traps - these can probably be done using surfaces.

non combat abilities

Implement non combat abilities. Most of these require entirely new systems:

Lock-picking
Conversation / Persuasion
Barter
Craft Armor, Weapons, Potions
Enchantment

main panel ui state not updating

Sometimes when exiting combat the AP bar does not disappear.
Sometimes when adding XP, the level up button does not show up on the portrait right away.

modding improvements

  • Avoid sequences of anything except simple types (String, bool, number) in all data formats wherever possible. We can't currently override sequences on an item by item basis
  • Ability to remove a specific value from a sequence of simple types. i.e. specify a string that should be removed from a sequence if the string exists.
  • Ability to mark files as "override_only" so that they will never create a new resource, only append. this is needed for mods that work on the resources of multiple campaigns
  • Mod dependencies on a specific campaign or campaigns.
  • Mod dependencies on another mod or mods (submods)
  • Detection of mod conflicts.
  • Auto download and extract a mod to your user dir from a URL.
  • Update theme to use yaml merge code and be moddable

set up CI

Set up continuous integration to produce complete Windows and Linux builds on each commit to master. The builds should be downloadable by end-users and require no special software to run.

AI script hooks and on_damaged callback

(1) The AI script should have the ability to specify callback functions just like an ability script can now. So that the AI can register a function to be called on attack, on defense, etc.

(2) Create an on_damaged callback that calls every time the parent is damaged, should include the attack information like on_defense does now. Should be callable from AI and ability scripts.

Crash when steping on the bridge

Hi Jared!
On current master I have error when stepping on the bridge(first map, game beginning). Sulis will crash. Maybe related to firing script?
Error:

[2018-08-20 18:54:53.673820 +02:00] ERROR [sulis_core/src/util/mod.rs:243] Thread main panic.  Exiting.

It may be problem with my Rust installation I use rustc 1.28.0, but It was working ok few commits ago.

unique entity ID

Entities / Actors need a unique ID that can be referenced by scripts. Some existing script methods should be changed to take advantage of this. The ID must persist on save / load.

quest window defaults to completed quest

If the most recent quest updated was to completion, the quest window will show the details of this quest in the main area while the quest does not show up in the list by default (as it is completed). this is confusing.

robust modding

Robust modding support via an override folder, separate and independent from modules. Mods should be loadable from the in game menu, similar to how Modules are currently selected. Mods should be able to override any individual file or resource within the core & module resources. It would be very nice to be able to override only individual keys within a file.

save and load of persistent stats

Some stats need to be treated specially in load - otherwise they get overwritten in the init() method. This includes entity hit points and entity group uses per encounter.

Crash while fighting ogre

I had a game crash while fighting ogre, right after my mage was killed.

[2018-08-30 09:50:15.728732 +02:00] ERROR [sulis_core/src/util/mod.rs:245] Thread main panic.  Exiting.
[2018-08-30 09:50:15.728765 +02:00] WARN [sulis_core/src/util/mod.rs:246] with payload: Any
[2018-08-30 09:50:15.728783 +02:00] WARN [sulis_core/src/util/mod.rs:248] at Location { file: "libcore/option.rs", line: 345, col: 21 }
[2018-08-30 09:50:16.244770 +02:00] WARN [sulis_core/src/util/mod.rs:252] stack backtrace:
   0:     0x55a42fe9942c - backtrace::backtrace::trace::h6093d9f72c6e7668
   1:     0x55a42fe97942 - backtrace::capture::Backtrace::new::hed6befe6ccd8ed88
   2:     0x55a42fb234d8 - sulis_core::util::setup_logger::{{closure}}::he21f32ce1c98078f
   3:     0x55a42feaffe3 - std::panicking::rust_panic_with_hook::h1eb2324462e1f4f0
   4:     0x55a42feafd39 - std::panicking::continue_panic_fmt::h38c486439ca3497b
   5:     0x55a42feafa55 - rust_begin_unwind
   6:     0x55a42ff1c98b - core::panicking::panic_fmt::hcca0a568d37c43e5
   7:     0x55a42ff1c8ba - core::panicking::panic::h94eac5368db93c07
   8:     0x55a42f5d2a2e - sulis_state::script::script_callback::CallbackData::exec_standard_script::h786ac77a1a52ae1c
   9:     0x55a42f5d3873 - <sulis_state::script::script_callback::CallbackData as sulis_state::script::script_callback::ScriptCallback>::on_round_elapsed::ha8ae8f985ad184b4
  10:     0x55a42f5d1d26 - sulis_state::script::script_callback::fire_round_elapsed::ha2dbcc7af1e13762
  11:     0x55a42f5833c2 - sulis_state::ai::AI::update::hfab7b8df0ac3082c
  12:     0x55a42f6f9c65 - <std::thread::local::LocalKey<T>>::with::h197416ea9d2dc0c4
  13:     0x55a42f68c996 - sulis_state::game_state::GameState::update::h4f35ee816f242e76
  14:     0x55a42fb2298f - sulis_core::util::main_loop::h7998159fc1fcbdcd
  15:     0x55a42f4bc0e0 - main::run_campaign::h820d77f732226df9
  16:     0x55a42f4bc997 - main::main::h2ded96657c3f8601
  17:     0x55a42f4b8f12 - std::rt::lang_start::{{closure}}::h481580fe0eab4766
  18:     0x55a42feaf9f2 - std::panicking::try::do_call::hdb335ca63b8cb090
  19:     0x55a42fecfc99 - __rust_maybe_catch_panic
  20:     0x55a42feaa125 - std::rt::lang_start_internal::hc2437895cd2a79ee
  21:     0x55a42f4bccf3 - main
  22:     0x7f553f39d020 - __libc_start_main
                        at ../csu/libc-start.c:308
  23:     0x55a42f4b7689 - _start
  24:                0x0 - <unknown>

It may be related to my AI scripts. I will try to reproduce. And if I success I will try to hunt it down. So wait for more info if it is not obvious from stack trace.

resting and per day abilities

Building off of #42, the game needs better support for resting, including UI support. (Resting is accomplished with game:init_party_day().

Some abilities should be shifted to be per day rather than per encounter. this gives the party a reason to rest and a reason to conserve resources within fights.

complete prologue campaign

Complete the prologue campaign for a target of 2 to 3 hours play time.
It should include more hand crafted encounters using triggers and custom spawning.
The plot of escaping from the goblin ambush should be resolved.
Party size should go up to 3 or 4 characters.
Party banter should be enhanced.

Save while in combat

This should be achievable but requires a bit more thought.

Enable saving while in combat mode.
Save turn manager ordering and combat mode status.

item variants and random loot

Implement item variants using the item adjective system. These are modifiers that increase or decrease stats of various items. Needs to be taken into account when stacking in inventory.

Loot lists should be able to able different adjectives to different types of items with a certain percentage chance.

world map

Add a world map system. when entering certain transitions, the player is shown the world map which allows them to pick from a list of explored locations. Available locations are added via script.

saving and loading of effects

Effects such as mode and status effects should be saveable. At least some surfaces probably need to be saveable. However, not everything needs to be saved - probably should disable saving in combat mode, at least initially.

this will need a mechanism to restart particle effects of already active effects on load. This will probably require restructuring ability scripts.

transfer player flags when loading a new module

When loading a new module via script, transfer a player's flags to the new module. This will enable scripts to have some continuity between modules.

Update the doc for load_module in script/mod.rs

stealth - directional awareness

Characters should have a particular facing which needs to be indicated via the UI in some fashion, since we don't have directional sprites. This facing plays into the chance to spot hidden opponents, flanking, and backstab.

Scripting question

Hi!
I am experimenting with AI. I have made some fun variations (attacking char with lowest HP, trying to kill everyone, who has less then 1/3 HP, random target), nothing special. But I was wandering, do you have recommendation how to implement mechanics, where strong hit would bring attention to striking character. This would be advantage and disadvantage to the player at the same time. You can use it to bring attention to your tank or endanger your mage by using very powerful spell.

Not sure how to do it right, but my plan is:

  • if damage is above some value (or maybe ability is used) write flag containing attacker id to the parent (enemy),
  • always check for that flag and if exists and attacker is still valid, go and attack him.

Questions:
Is it possible to "catch" damage value somehow? Or ability usage? In both cases in ai script it means target (player) dealing damage to parent (enemy).
Do you have some smart way to calculate hit which makes damage bigger then average?

Btw: If You are curious (only changed part):
https://gist.github.com/ernierasta/bbc99abc8718c15bc835d50e634cb756

But You would write that in 5 minutes and probably better. ;-)

real time stealth

Allow the player and party members to stay in real time mode when spotting an enemy but remaining hidden. Combat should not initiate until the player or a friendly is spotted.

quests and journal

Add a journal system with associated quests. Each quest can have several entries and can be marked closed when complete. This is all done through scripts.

Scripting API docs

For starters, all methods in the scripts API should have rustdocs which are automatically generated and made available online in some fashion.

In the future, docs will need to be expanded to include many other places. Commenting engine internals is low priority at this point as its just me working on that part of the code.

recover from bad display settings

If the user applies certain display settings in the options menu, it is possible that they get the game in a state where they will need to force close or kill it. This state can also persist since the config.yml has already been written, requiring the user to manually fix or delete that file in order to play the game.

Resolve this situation - user must confirm display mode choices within a certain time or settings revert to previous or defaults.

icons for item adjectives

One easy way to convey the item adjective is a small icon for each adjective appearing in the corner of the item button. Each adjective should define its own icon. This is a lot less work than creating separate full icons for each adjective / item combination.

NPC routes

NPCs should move about independent of the player. This can be patrol routes, random movements of enemy groups, or friendly characters going to / from some predefined locations.

additional base classes

Add additional base classes.

Monk - unarmed combat specialist
Druid - nature themed magic, summoning and polymorph
Warlock / Sorcerer - less structured system of magic, maybe more like psionics
Hybrid caster / fighter type - maybe not needed if we do multiclassing

area tiles appear darkened after character creation

Have only seen this happen on Nvidia cards. If you start the game directly after character creation, the area will appear noticeably darker than normal. Loading a game or restarting clears this and the problem will not recur except with a restart of the entire app.

gfx-rs backend

Create another backend using gfx-rs. This will improve cross platform support, especially on Windows.

better party movement

Party members should make a better attempt to find a suitable move location. Current idea is to first check for an exact match, and if that fails widen the search radius progressively until a valid location is found or giving up.

A basic formation system is needed, allowing the user to specify where each party member goes in formation.

May also need a way to set the formation facing when moving, such as the drag click used in the Infinity Engine.

story creators wiki

Create a wiki outlining some basic world lore, maps, timelines, races, countries, etc. This will allow content creators to create quest lines and modules that feed into the overarching world.

Question about current status

Hi Jared!
I would like to try how the game looks. Is it already good moment to do so? In which phase of development you are now?

Thanx!

test on as much hardware as possible

Test out the game builds (once CI is set up, see #25) on as much hardware as possible.

SSDs vs HDDs.
different monitor configurations
different linux distributions
different windows versions
Nvidia vs Intel vs AMD gfx

I unfortunately do not have any Macs to test on. Perhaps there is someone who can help with that.

build a basic AI

Build out a basic AI that is capable of making use of weapon sets, usable items, and at least most abilities.
The AI should be written as Lua scripts.
Each actor should have its own custom AI specifiable.

basic wiki / website

Set up a basic wiki and/or website for the project. Should include some tutorial type information.

threatened status and using ranged in melee advantages

Created "Threatened" Contingent Bonus type. These bonuses are applied when one or more hostiles can reach the parent with melee weapons. Ranged weapons should apply penalties to accuracy and defense when threatened. We can add a general ability to mitigate this.

Store user game data in .config or .local directory on Linux

Hi,
would you consider to store user data(configuration and saves) in XDG compliant directories on Linux? Almost every app do this nowadays. In practice I would use $XDG_CONFIG_HOME/sulis to store setting and saves.
So not $HOME/.sulis but $HOME/.config/sulis.

As said in https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html check environment variable and if empty just use $HOME/.config/sulis.

It will be easy change now, but harder later, when there will be actual players already.

Btw: checking your progress very often - wow, you are going fast!

Features and story

Hi Jared!

First: I hope I am not too intrusive. I do not want to disturb development in any way, so feel free to turn me down - I will completely understand that.

I have few ideas, which I want to discuss.

  1. Stealth. I love thieves in rpg-s. I have few ideas related to stealth:
    a) Real time stealth. In Hale and current version of Sulis if thief is hidden and find enemy, game will automatically switch to combat mode. I think it would be much more convenient if it will happen only when thief is spotted.
    b) Direction awareness. This one may hard to implement? Make NPC's much more perceptional in direction they are facing(maybe somehow make it obvious, which direction it is?). This would enable us to have scenes, where thief have to carefully plan a way to f.e. chest guarded by some NPC's. It would also enable possibility to make backstabbing more exciting (something like in Dragon Age Origins, when you have to position thief behind the enemy) Especially interesting when combined with following feature.
    c) NPC routes. Ability to make scheduled routes. Maybe it is already possible with lua scripts? This would allow guards to move (or only turn right/left), but also make world more alive (wolves running in woods, people going to shop, ...).

  2. Ability to start as nobody, with no skills. I personally find it very rewarding when game gives me opportunity to start as flimsy stupid character and allows me to find teachers and quests, that let me learn. In that scenario even having first ability is very exciting. But it just my opinion.

  3. Story. You said (sourceforge), you want good story and believable world. As we all know - it is really hard to achieve. To craft this, a lot of time and attention to detail is needed. I personally think, that good stories are not told by intro's and 'cutscenes', but by NPC's them self. They IMHO should gradually introduce world to player giving him quests, somehow related to the "main" story or game world generally.
    I do not know, how You see it, but maybe it is worth to consider more people involved in creating content. I know, that making own campaigns and mods would be quite easy in Sulis, but maybe it would be better to join forces and create one campaign, which would be awesome, with interesting story and quite deep lore? And maybe making this campain "never ending story" by always adding new content to it?
    If you think that is good idea, it will require you to write down general story, so we can relate to it and create quests which will be unique to Sulis. I think that this story can be quite short, just tell us history of some part of your world, which races are there, who rules where, and what is current situation.
    I am not sure if this should be publicly available though. While necessary for creators, can spoil game for players. Maybe placing this document in doc directory and placing warning on top would be enough?
    If you think this is good idea, I have an idea to create a village, just bunch of buildings and people, but with hopefully interesting stories to tell and quests to solve. And by create I mean to create a script and then write down conversations. I can try to find tiles for it, but I am sure you have plans and vision how villages/towns should look in Your game, so I wont to interfere.

Sorry for so lengthy post. ;-)

Balance abilities, races, classes, and attributes

Make a pass through all abilities, races, classes, and attributes.

All attributes should provide meaningful bonuses to all characters (right now Int and Wis do very little).
Each player race should have a unique flavor, but still be reasonably suited to all classes. Perhaps races should get their own unique abilities.
Class ability trees should make sense and provide a logical progression. Class stat increases should be balanced.
Abilities should feel more unique and useful - just doing a different damage type is not enough. Abilities should probably scale with level to some extent.
Balance experience progression in the prologue campaign.

party inventory /stash

Party members should share the same inventory. This obviously excludes equipped items. Fairly straightforward to implement but some open questions:

How to handle quickbar items. These items should probably not be removed from the overall stash. If there is a stack of several, it makes sense for two party members to share. But what if there is only one? What about secondary weapon sets?

combat end improvements

When combat ends, we currently automatically restore all hit points and per encounter abilities.

Possibly create a rest system to recover hit points and per-rest abilities.

campaign ordering in main menu

It should be possible to specify an order for the campaigns on the main menu, or possibly campaign groups. Right now, Act 1 lists before Prologue.

use fnv hasher instead of default

The default hasher trades cryptographic security for speed. An fnv hash is available that is faster on small inputs. This should most likely replace the default hasher pretty much everywhere in the program, especially any performance critical code.

https://crates.io/crates/fnv

fade to / from black

Game needs a gradual fade to / from black animation that can be used for transitioning to new areas and resting.

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.