Devlog: the chair is here and it's the most fun card in the game so far!
Throne of darkness (Card based RPG) (Demo)
Devlog: The game is in a playable state and I have been making art the last days. I realize now why drawing are inked, it's very difficult to get dark lines because there are no actual lines, just a bunch of carbon particles on paper, and also paper is not flat. well too late now, I will keep it in mind for the next batch of drawings.
1) how do you make art?
2) how did you handle text on items where some part of the string is different colour?
3) subtext is kinda too small and too gray to be aeasily readable imo. need to work on that so that it is really easy at a glance understand what it is
kuligs2
1 - at first I used renders I had as placeholders. the enemies are renders of models I had, put into 2D animations.
Currently I am transitioning into this hand-drawn style for card art and other things.
the process involves: drawing on paper with a B pencil, taking a picture of the drawing, adjusting contrast to make the lines darker, and finally adding color in Krita. for adding color I first paint each color into a different layer, then I use lock alpha
to paint inside the opaque color and add shades.
2 - text is easy, I just used a RichTextLabel
. Part of the text is dynamically generated from the effects, using the %
to replace parts of a string with variables.
for making part of the text a different color I did something like
text = "deal [color=red]s%[/color] damage" % damage
3 - you mean the flavour text? It needs some work yes, the whole card style needs a rework and better backgrounds, it is pending.
I will post the demo either today or tomorrow, I want to add a couple more card pictures in there first.
Jesusemora i had problems with rich text labels, where i wanted custom color, but somehow it worked only with predefined colors like you wrote - red blue etc.. maybe i did something wrong in the past because it was long time ago since i played with rich text label.
thanks for sharing
as promised, here is the first Demo:
It's pretty stable, but do let me know if you find any bugs.
And as always, any feedback is welcomed.
I managed to finish almost all the rogue cards, but I didn't get to color some of the drawings for the barbarian cards (and there's some really cool ones).
I also spent some time doing small tweaks to make the gameplay better, I managed to add a delay to cards being suffled and it's much better now, I also changed the default resolution to 1536x768, which resulted in things getting smaller (I will tweak it later).
And I added more resolutions based on the most common displays from w3c (no 4k though, I forgot).
Again, there's placeholder art everywhere, there is no story yet, just a gameplay loop, your go from start to finish fighting monsters and gaining cards, you can use the Deck button to reserve cards like the chair or healing potions. the combat begins easy and gets increasingly more difficult.
the game ends when you reach "the exit" card.
Rogue got more testing so it's more balanced and has art for almost every card, barbarian on the other hand is still using placeholder art and very broken, you could think of them as easy and normal difficulty.
The export is for windows, if you want one for linux just ask and I will make one.
The icon is likely not changed, so I packed an ico and svg with the exe. I have to look into it since the documentation is not updated for 4.
kuligs2 where i wanted custom color, but somehow it worked only with predefined colors like you wrote - red blue etc.. maybe i did something wrong in the past because it was long time ago since i played with rich text label.
custom colors have to be written in hexadecimal, it starts at 0 but then keeps going until F: 0 1 2 3 4 5 6 7 8 9 a b c d e f.
color selectors usually have a hex tab where you can obtain the hex code.
Jesusemora haven't been here in a while, and what am i greeted with? exclusion of my (clearly superior) operating system. i'm starting riots and burning storefronts because of you.
cool progress though. if you decide to open the gates to us penguins, i'll try to break your game for you.
packrat I made this in ubuntu, it works through wine like most godot games.
But I will try to upload a linux version now, maybe tomorrow.
packrat well you wouldn't believe what happened today , I exported the linux version and my disk crashed, then it would not boot because fsck was damaged. I had to re-download an ubuntu image and flash it and then run fsck from the live usb, it took me all day.
I'm not making this up , clearly superior operating system indeed
anyways here's the linux version:
- Edited
Jesusemora Thanks for the blood sweat and tears you put into a linux version. They're delicious.
About the crash, that sounds miserable. Ubuntu does use the ext4 filesystem, right? In all my years, ext4 has never once failed me. Granted, if we're talking "operating system", mine has been Arch for years and the closest I got to Ubuntu was Lubuntu around 2016. I imagine both have fewer failure points being smaller operating systems.
Edit: I'm updating my system for the first time in months to install the vulkan drivers your game demands. I might be paying back in equal measure soon. Yes, it's taken me this long to finally install vulkan drivers for the first time.
EditEdit: System updated, installed vulkan, switched modules so vulkan actually works, going to the grocery store for a soda and possibly those bunny shaped cheese crackers, then I'll finally get around to that thing i promised.
Note: apparently my system was left on for 5 days straight when i rebooted after the module stuff was done. woops. I remember now i did install vulkan before, and I switched amd modules before and never installed vulkan again for a reason, but i can't remember why. i'm posting, and your game opens, so that can't be it. can't wait to find out later.
- Edited
Bug Report
This is all I found in the time I've got today.
I did not play Rogue much, because I figured a plain character to test the game's core mechanics would be better. I also wanted to throw the chair.
Options Menu:
- SFX slider in fact controls Music volume.
- Music slider controls nothing as far as I could tell.
- All sliders don't seem to scale volume as traditionally expected. The volume increases exponentially as the slider moves to the right instead of linearly.
Enemies:
- Animations don't get interrupted when damaged during the previous animation. In fact they stack. I watched a lizard dude stumble around for about half a minute after the last blow before he finally collapsed. Same thing happened when I ended the turn.
The Map:
- A road will end terminating with a "Road" or "Combat" rather than a "Road's End" card. I'm not sure what else "Road's End" might mean. It could be a bug, or Road's End is a special card that's not implemented yet. A road terminating with "Combat" is understandable.
Barbarian class:
- Rage: The card says it will draw 3 damage cards. It does draw cards that inflict damage, but I also drew cards that don't:
Beaver Blood - heals and generates a card
Healing Potion - heals
Shield - gains block - Indominatable Spirit: Card reads "On discard returns to your hand", however it just gets discarded.
Rogue class:
- Pocket Sand!: "Applies 4 ticks of blinded". I've been unable to figure out what blinded does.
Jesusemora no bindows release? smh..
- Edited
kuligs2 the windows version is the first file, I added it to the first post.
packrat Ubuntu does use the ext4 filesystem, right? In all my years, ext4 has never once failed me.
It could be a lot of things, the cheap ssd, or the blackouts causing sectors that "could be narrower". don't worry about it, this happens every few months, then I fix it and works fine until it suddenly doesn't anymore.
packrat mine has been Arch for years
my condolences
I used to have fedora, but it was very unstable and then ran out of updates without upgrading to a new version, so when I reinstalled the system I moved to ubuntu which has an LTS, it's much more stable.
packrat I'm updating my system for the first time in months to install the vulkan drivers your game demands. I might be paying back in equal measure soon. Yes, it's taken me this long to finally install vulkan drivers for the first time.
odd, I don't think I had to install anything, if I did it was just an apt-get install. but then again I have an up-to-date kernel, which arch infamously doesn't.
I could try to make a compatibility port in future versions, the only thing that could cause problems are a few shaders, but that should work in opengl?
packrat Bug Report
Thanks a lot for this, it's really helpful. I will look into it.
packrat Options Menu:
SFX slider in fact controls Music volume.
Music slider controls nothing as far as I could tell.
All sliders don't seem to scale volume as traditionally expected. The volume increases exponentially as the slider moves to the right instead of linearly.
odd, they appear to be connected correctly. I will test it.
the volume is based on godot's volume db, I need to do some research into this.
packrat Enemies:
Animations don't get interrupted when damaged during the previous animation. In fact they stack. I watched a lizard dude stumble around for about half a minute after the last blow before he finally collapsed. Same thing happened when I ended the turn.
this was caused by a solution to a game breaking bug, I will try to improve it in future versions.
packrat The Map:
A road will end terminating with a "Road" or "Combat" rather than a "Road's End" card. I'm not sure what else "Road's End" might mean. It could be a bug, or Road's End is a special card that's not implemented yet. A road terminating with "Combat" is understandable.
I will make the actual icons for the world cards and replace those. yes, more cards should be added, like a shop or random events, the road's end was a test of the map generation. It could be fixed with a second pass to detect unconnected cards but it wasn't a priority.
packrat Rage: The card says it will draw 3 damage cards. It does draw cards that inflict damage, but I also drew cards that don't:
Beaver Blood - heals and generates a card
Healing Potion - heals
Shield - gains block
this sounds like a bug. the "get card by effect" function finds cards with an effect of type DamageEffect
, I will look into it.
edit: apparently, godot can't return the class type when using typeof(), it returns object. this appears to be a problem with godot for a long time.
I created a new card_effects_manager with a single enum, rage now works as expected.
fixed.
packrat Indominatable Spirit: Card reads "On discard returns to your hand", however it just gets discarded.
this was working, looks like I need to test it again.
edit: I tested it and it's working as intended. when using reckless attack, if indomitable spirit is discarded, it returns to the hand.
maybe it needs better phrasing, or is it a different problem?
packrat Pocket Sand!: "Applies 4 ticks of blinded". I've been unable to figure out what blinded does.
if you mouse over blind
it should popup a tooltip explaining that it reduces enemy damage. I will however look into it.
the tick system is also due for improvements, like adding the ticks to the enemy bar.
edit: mousing over blind does indeed popup a tooltip explaining the effect.
Well, I have a lot of work to do, I will color some more drawings (they are starting to pile up) and adding 3 new rogue cards. And it seems barbarian needs some attention.
but what did you think of the gameplay? is it fun?
- Edited
Jesusemora edit: mousing over blind does indeed popup a tooltip explaining the effect.
you're right. turns out i wasn't patient enough during yesterday's session. woops.
Jesusemora the only thing that could cause problems are a few shaders, but that should work in opengl
i forced it to use opengl3 for giggles to see what happens. the most obvious issue is the map. the cards are blank. the terminal spits out some stuff saying the shader code compilation failed because uniform instances aren't supported in gl_compatability shaders. i forgot instance uniforms were even a thing.
by the way, when shader compilation fails, it spits out the entire .gdshader file contents pointing out the point of failure. i am currently looking at your shader code for, i'm assuming, the map cards. there's two empty lines at the top of the file before shader_type spatial;
is declared, and i'm going to need you to fix that immediately. it's bugging me.
finally, the actual question
Jesusemora but what did you think of the gameplay? is it fun?
the gameplay was alright. it seems to pull a lot from Slay the Spire, but the map is a nice change. i played Slay the Spire religiously back when it was dirt cheap and full of placeholder art, so i have to admit, i'm burnt out on the formula. i got pretty bored pretty quickly playing your demo.
i think if you vary the combat a little further from Slay the Spire, but keep the core gameplay loop intact, it could be a cool spin on That Other Card Roguelite (Slay the Spire).
the vintage fantasy look is nice, and could get a lot cooler if it's fleshed out more. I've heard if you look hard enough, freelance artists can charge fairly cheap, but that's up to you. it would offload a ton of labor, if you consider it labor.
packrat i forced it to use opengl3 for giggles to see what happens.
how do you even do that? from terminal?
packrat the most obvious issue is the map. the cards are blank. the terminal spits out some stuff saying the shader code compilation failed because uniform instances aren't supported in gl_compatability shaders. i forgot instance uniforms were even a thing.
I use uniforms to tint the cards and tell which spaces have been visited. I wonder if there's a way to do fallback like in unity, or if it has to be done from gdscript.
the characters on the other hand use a "conventional" uniform, meaning there's a single material. this has its limits but instance uniforms are not supported for 2D.
packrat when shader compilation fails, it spits out the entire .gdshader file contents pointing out the point of failure
can't tell if this is due to leaving debug options on when exporting (I need to research this too). but it could be normal since the shader is sent to the GPU to be compiled.
packrat there's two empty lines at the top of the file before shader_type spatial; is declared, and i'm going to need you to fix that immediately. it's bugging me.
fixed. but you'll have to wait for the next release.
packrat the gameplay was alright. it seems to pull a lot from Slay the Spire, but the map is a nice change.
thanks I put a lot of work into generating the map.
I have never player slay the spire, I did play two similar games and what stood up was how lame the enemies were, at one point I was fighting a psyduck.
The idea is to make more of a linear RPG, there will be some dialog and you will be joined by companions, who will add their cards to the deck, and when one character dies all their cards are removed from play.
In fact the first version had 4 characters and they had some synergy, but I'm at least a month away from adding them back, as there are not enough cards yet.
packrat i played Slay the Spire religiously back when it was dirt cheap and full of placeholder art, so i have to admit, i'm burnt out on the formula. i got pretty bored pretty quickly playing your demo.
I hope the game gets more fun as I add more cards and mechanics. I just added 3 more cards and finished the art for one.
packrat i think if you vary the combat a little further from Slay the Spire, but keep the core gameplay loop intact, it could be a cool spin on That Other Card Roguelite (Slay the Spire).
I'm planning to.
packrat the vintage fantasy look is nice, and could get a lot cooler if it's fleshed out more.
working on it, as soon as I finish coloring this batch of drawings I will work on the UI and small elements. the cards also need to be bigger now that I changed the resolution, the art starts to glitch at that size.
packrat I've heard if you look hard enough, freelance artists can charge fairly cheap, but that's up to you. it would offload a ton of labor, if you consider it labor.
I feel like I'm learning more by doing it myself. while the first drawings are not great, the next are going to be better, It's just that I hadn't drawn in like 10 years, I was out of practice.
devlog: I added 3 more rogue cards and finished art for one, I will work on the barbarian soon.
the element of surprise: shuffle surprise attack into your deck.
surprise attack: when drawn, deal 4 damage to a random enemy, then return to the deck. this used to also draw a card but this caused infinite recursion, it's due for a buff.
last ditch effort: deal 200 damage, destroy your deck. this has really good synergy with rogue thanks to cards like ace under the sleeve and sneak. it will also synergize with cards that generate cards.
Jesusemora leaving debug options on when exporting
for the record, this is how i was able to force it to use opengl3. it allowed me to launch it with all* the godot options including --rendering-driver opengl3
. try ./path/to/godot/executable/ --help
, there's a lot of useful options i haven't found mentioned in any docs.
* i haven't actually tried all of them
** in fact i haven't tested if for some reason you can launch non-debug exports with terminal options
- Edited
packrat that's good to know, I will do some testing later.
devlog: worked on painting the second wind art, but I'm not convinced.
Then tried making the game more fun: throw rock and throw axe are no longer deal damage to an enemy, now they deal damage to a random enemy, and with this I added the ability to create particle effects from the damage_enemies method, which means particle effects on non-target cards like sneak attack.
This makes throw rock and throw axe different from sword attack. next I'm thinking of adding multi-attack cards like a cleave, as well as a shield attack that deals damage while adding shields.
update: I made the cards bigger, which involved a lot of math in order to maintain the same aspect ratio, and then manually editing each card scene (part of this problem will go away when I implement proper burn animations), now the text has more horizontal space and the art occupies a perfect square. I might tweak it some more.
I also fixed a bug related to the tooltip being bugged, and as a result cards that deal with other cards now pull the description directly from them, including rich text. the tooltip is also richtext now instead of just a label.
- Edited
Devlog: still working on art, but made a pause to deal with card text.
I looked up localization and then started working on porting the hard-coded text to tr
s, using gettext allows me to replace the hardcoded is_plural
methods with godot's built in tr_n
.
in the process I did some cleanup, but more is needed.
since I know both spanish and english, I'm using tags and moving the card names and descriptions and translating them at the same time, which has been a bit of a tedious process, but going pretty fast:
I've also been thinking of ways to make the game more fun:
I will give each card different types of damage, for example, sword attack could deal slashing damage, while rock throw would deal bludgeoning damage, skeletons would be resistant to slashing but weak to bludgeoning.
damage types are already implemented for the bleed effect, so it will be just a couple changes to the code.
another idea is to add tags to the cards, there would be weapon
cards like sword attack and disarmed
cards like THESE HANDS, then I would implement cards that interact with these. An idea is a card that discards all weapons and replaces them with unarmed attack cards.
I also noticed that the text is too small, so some changes will be made to the cards when I add tags.
The number on the corner will also be replaced with a symbol telling whether the card has a reshuffle effect or not.
update: process for making translations could be more streamlined, every time I make a change I have to override the pot file, then merge the changes to the en and es files, then open each individually and fight the poedit interface. but maybe this is just not the workflow it was designed to work with.
I added tags, more testing is requires to see if I missed something.
I made some more changes to the card, it's ugly but the text is more readable and still fits, changing the description and title boxes is going to take some extra coding but it's feasible.
before continuing I should work on some particle effects like slashes and of course a better card burning effect, which will lead to refactoring the spagetti code of the discard mechanic. the good: a single card burned scene and rounded edges. the bad: having to animate fire and then cleaning up the code.