grokmoo / sulis Goto Github PK
View Code? Open in Web Editor NEWTurn based tactical RPG with several campaigns, written in Rust
Home Page: https://www.sulisgame.com
Turn based tactical RPG with several campaigns, written in Rust
Home Page: https://www.sulisgame.com
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.
Implement non combat abilities. Most of these require entirely new systems:
Lock-picking
Conversation / Persuasion
Barter
Craft Armor, Weapons, Potions
Enchantment
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.
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.
(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.
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.
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.
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 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.
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.
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.
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 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.
This should be achievable but requires a bit more thought.
Enable saving while in combat mode.
Save turn manager ordering and combat mode status.
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.
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.
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.
Player actions (such as movement) can cancel pending delayed scripts on npcs. These scripts need to be made more robust.
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
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.
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:
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. ;-)
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.
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.
Complete chapter 1 of the Twin Expanse campaign.
Create a user interface that allows the player to specify their current formation.
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.
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.
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.
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.
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
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.
Create another backend using gfx-rs. This will improve cross platform support, especially on Windows.
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.
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.
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 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 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.
Set up a basic wiki and/or website for the project. Should include some tutorial type information.
Attempting to set parent flags causes a crash, at least in on_damaged hooks. Probably a RefCell double borrow error.
Modules needs to be able to create and override everything currently managed by the ResourceSet - images, fonts, etc.
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.
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!
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.
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, ...).
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.
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. ;-)
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 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?
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.
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.
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.
Game needs a gradual fade to / from black animation that can be used for transitioning to new areas and resting.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.