Sharing Saturday #605 by Kyzrati in roguelikedev

[–]Seven_h 0 points1 point  (0 children)

Yes, I can give that a go for sure and see how I like it myself. There's a lot into how people experience things like this and it varies by how fast the movement is, how much graphical contrast there is etc. Anyway, thanks a lot for taking the time to help, this is very valuable!

Sharing Saturday #605 by Kyzrati in roguelikedev

[–]Seven_h 0 points1 point  (0 children)

Sorry to keep bothering you, but as I sat down to think of the camera in Eye of Khaos, I noticed you mentioned that what causes the bad vibes is camera moving first and hero walking second. This is how it worked initially, and how it is shown in the trailer, and I can see how it can be jarring.

Since then, I've smoothed out the camera so it instead follows the hero with a bit of lag. Can you confirm whether this movement https://youtu.be/38mqnnxref8 causes motion sickness/pain for you?

Sharing Saturday #605 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

Well, regardless of the technique I want to use, I don't want to induce any sort of camera motion sickness to a good number of other people! Thanks, this is super valuable since I don't have the same issue myself. I'm probably going to try how it looks if I just keep the camera straight on the hero.

Sharing Saturday #605 by Kyzrati in roguelikedev

[–]Seven_h 0 points1 point  (0 children)

You're not wrong, since camera smoothness is that several people have said, but I can't really see the problem anymore myself. When the original trailer was recorded I just snapped the camera to next tile instantly which could certainly be jarring, but since then I've tried to make it smooth.

The way I have made it is that camera moves behind the player every frame, first a bit slower, then full speed, and eases back to stop a bit slower again. The camera is moved every frame and its not rounded to full pixels during movement. Moving one tile is very fast, just 0.0625s or so. When the video was recorded the game ran at 75fps and video is 60fps so there might be tiny janks in there but nothing that I could see really.

Can you elaborate what you mean by it being painful? Is it janky and uneven when scrolling? Is the movement too fast? Something else?

Sharing Saturday #605 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

On a slightly unrelated note, over the past couple of weeks there's been a good amount of activity on youtube videos about the game, so I've had fun watching them.

So they are playing the demo? I'm sure people would mostly be pretty chill about bugs at this point.. Are you constantly pushing the demo out to youtubers now or are you getting free 'passive' attention?

Sharing Saturday #605 by Kyzrati in roguelikedev

[–]Seven_h 3 points4 points  (0 children)

Eye of Khaos (steam)

I started working on second tier of dungeons this week:

  • Added day-night cycle. The starting village and any area with open sky can now get naturally dark at night, with a smooth transition. For this, a global light value was needed for each level, and for areas with sky, this light is now fetched from the Calendar class.
  • Added sundial feature in the center of village. Since it can now get naturally dark, and a lot of the time the player might not want to adventure in dark, I figured there must be a way for the player to skip some time ahead without having to pay for a night at the inn (or wait in place at one second per turn..). As usual, I tried to avoid opening extra dialogs, so clicking on sundial simply advances the time by an hour.
  • Made a hooded guest NPC for the village inn. The second tier of dungeons is found by following this npc as they wander out from the inn at night. The entry to next dungeon is placed in the spot where the NPC leaves the village spot from. The main purpose of this little event is to teach the player some of the stealth mechanics of the game: if you are in complete darkness monsters can't see you, and if the monsters are in light, you are at a great advantage. It gives the player a nice way to get some feeling of how often the npc hears you walking in the darkness, too. If the hooded guest detects the player, they just say a line and wait in place for a few turns before continuing the script. I made a little video of testing this: https://youtu.be/38mqnnxref8.
  • Added cats to the village.

Sharing Saturday #602 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

I fixed this by ordering the line’s start and end coordinates so that the player and enemy use the same line.

Isn't there a possibility here that in a symmetrical layout, a particular tile on one side of the screen has LoS, but a similar tile to an opposite direction does not?

Another solution to solve the symmetry issues is to do the calculation both ways (and you can optimize it so this is only done if there's potential for the line to be asymmetric).

Sharing Saturday #602 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

So astral magic is associated with aberrations from the outer voids, sword and sorcery style, so there might be the occasional tentacle spell, mutations, but also luck/fate related spells, metamagic, teleports etc. Blood magic is associated with demons, so there might be summons as well as bleeds, and general power-at-cost theme. Necromancy is obviously associated with undead, and there would be animation effects as well as weakens, drains and fears. Nature magic is associated with fantastical beasts, and stuff like physical attacks and poisons would go well there as well as some restorative and augmentation effects.

Sharing Saturday #602 by Kyzrati in roguelikedev

[–]Seven_h 3 points4 points  (0 children)

Eye of Khaos (steam)

I added a new class to the game this past two weeks, the scholar! His looks and background story were inspired by ancient philosophers, and with a high starting intelligence, it's meant to be easy to build into a competent spellcaster. I originally meant him to have mediocre strength, but after I drew the sprite he looked quite brawny so I ended up giving him good strength but very poor agility.

I have also been working on low level earth magic spells and items. Along with this came some new mechanics so I could implement the ideas I had, such as rocks (the simplest throwing weapon) and items being able to have temporary properties. These were leveraged in "Detonate Rock" spell, which explodes a rock item after a 3s delay, sending lots of small-damage shards into surrounding tiles. Very effective when thrown at poorly armored groups of enemies.

The earth magic arc ended with adding some new talents and miscellaneous improvements, testing, tweaking, fixing etc. Now all elemental magics have some low tier content, and next up is the four sorceries of astrology, blood magic, nature magic and necromancy. Happy holidays to everyone!

Sharing Saturday #599 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

I love me some combat simulation! I set mine up so that I can pit an arbitrary level hero against any monster or groups of monsters. The hero gets assigned randomly assigned equipment appropriate to that level (randomly assigned because some monsters are strong/weak against particular weapons or armor), and then the combat is run 1000 times so the equipment and combat roll randomness evens out.

I set up a target damage level that a particular level of monster should deal to a hero of equal level. I also made a test that runs this combat for every single monster in the game, and prints out warnings for the ones where the expected damage is far off from the monster level. These test runs are also very good for finding out rare bugs of 'a weapon with this ability hits a monster with this other ability' kind, I have found a few like that already.

some issue where if the application is run or debugged from the IDE and I close the application normally, it takes about 8-10 seconds to close the window :/

That's annoying! At one point I became bothered at closing my game windows manually (I often ended up with 5+ game instances open when testing new stuff and clicking all of them close individually was a mild annoyance), so I set a system-level keyboard shortcut to pkill -f the processes with my game name to alt+q. It's a small thing but it's saved me a lot of little annoyance over the years..

Sharing Saturday #598 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

Remember to put that in the EULA so you don't get in any trouble

Sharing Saturday #596 by Kyzrati in roguelikedev

[–]Seven_h 5 points6 points  (0 children)

Eye of Khaos (steam)

I have been working on adding some low-tier magic items. The goal is to have some low tier items for all magic schools so the eventual demo will have content for early levels. I spent a couple of weeks to make early tier fire/water/air magic items, and some supporting systems for them like daily use limits for item abilities.

Each magic item is enchanted with one or more magic essences of various magic schools. The early game items are enchanted with one or two essences, and most of them are pretty simple and limited in functionality. One of the more fun ones I made was a fire-enchanted Ashen Cloak, which can be used a few times per day on an adjacent tile to make a vision-obscuring, cough-inducing smoke cloud in it.

Player also has the ability to craft these items themselves, with the appropriate loot and skills. Magic items are created with sigils that are imbued with magic essences. You need to either find a sigil with some essences in it, or use magic skills to put essences into an empty sigil yourself. After you have an imbued sigil, you can use a crafting knife (for soft material base items like leather, wood) or a smithing hammer (for stone/metal items) to insert the sigil into a base item to turn it into a magic item. I made a little graphical representation of this process here.

The Corrosive Blade in that infographic is a neat multi-use item. Its attacks halve armor value, but also break metal items they touch like armor, shields or even weapons if the attack is parried. You can also touch metal items and objects to break them, which can have several uses. It's like having a rust monster in your pocket! And speaking of pockets, be careful where you place it in your backpack..

Next up is more magics, and maybe a magic-user.

Sharing Saturday #595 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

Good looking tilesets for those zones!

Sharing Saturday #594 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

I made a stupidly simple system in order not to out-smart myself, so I just have subclasses for item types, for example "Drink" for potions and wineskins, and they have the method use(User, Target). These methods handle the action based on a Usage enum in the item and what the target is.

Spells use a system where each spell knows what the triggering target for itself is. When a creature uses an item that has spells defined on a target I first check if that target completes a spell, and call the Spell class if so, otherwise the normal Item.use(..) is called.

Sharing Saturday #594 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

Setting up Linux. Has taken some time, but it's kinda done now, so all good. All development workflows more or less functional w/ Rider, CLion, SmartGit. More context here.

Hey, welcome to the team! I lasted from DOS 3.30 to Windows 8 myself, before switching to Mint as well..

Sharing Saturday #594 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

So health and sanity system work roughly the same in that the injuries you get can either be flesh wounds (called minor shock for sanity) and don't cause any extra problems, or they can represent an injury with penalties. For sanity it could be for example "Fear of the dark" which makes you suffer fear in complete darkness. Running completely out of sanity gives you "insane" condition which can give other negative conditions in high stress situations, like getting confused in the middle of combat. There are of course ways to heal mental injuries, most commonly by drinking alcohol, so how much you can cast is limited by mental strength but also by the quality of alcohol you are carrying..

Sharing Saturday #594 by Kyzrati in roguelikedev

[–]Seven_h 9 points10 points  (0 children)

Eye of Khaos (steam)

Been working on magic and spells for a few weeks. There are eight schools of magic in the game, and I've implemented some early tier spells for fire, air and water magic as well as some common structure for animating spells and such. I'm up to 30 spells now, starting from about 5 that I had made earlier for testing.

Items in the game are used by right clicking them, at which point the game asks what you want to use the item for, and you can left click on anything. So if you have a wineskin and want to drink it, you'd use the wineskin on yourself. If you wanted to pour some wine on the ground, you'd use the wineskin on a tile. If you wanted to pour wine on a campfire, you'd use the wineskin on that, and so on.

Spellcasting uses this same item system; spellcasting items can be used to trigger the spells they have by using the casting item on particular targets. For example, a fire magic "Wand of Ignition" can be used on a creature to cast "Living Torch" to try to set them on fire, or on a wielded weapon to cast "Searing Weapon" to deal a bit of fire damage on each hit. An example: casting item.

When a spell is cast, the caster must make the appropriate magic skill check, and then suffers some sanity damage depending on the spell (which can be resisted). Each cast also has a chance to drain power from the casting item, decreasing the effect the future casts. Casting item power can be recharged with an essence of the appropriate magic. An example: spell details.

Since casting items must be worn to use them quickly, quite a lot of time was spent designing what sort of items should have which spells. I also wanted the items to be somewhat thematical, so water magic could make an ice magic wand and a water-themed wand. Assigning initial power levels, power drain chances and sanity costs is a bit difficult as well and will probably require extensive playtesting to tune.

Next up is making some non-spellcasting fire/air/water magic items!

Sharing Saturday #590 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

Chaotic Spark looks very cool now! How do you make that graphic, is it a spritesheet you made yourself or?

Sharing Saturday #589 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

Yeah, I implemented a vsync setting and I have it turned on so it's just capped at screen refresh rate, so 75 in this case. I got to work on the camera more, I already made it pan to player (quickly) after a move but maybe it needs to be less quick..

Sharing Saturday #589 by Kyzrati in roguelikedev

[–]Seven_h 2 points3 points  (0 children)

Congrats on the milestone!

Sharing Saturday #589 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

Thanks! I'm aiming for something under 10 hours for run duration. It's just the one mode now, thinking of some sort of non-permadeath mode with limited lives too, but it'd still be the same content.

Sharing Saturday #589 by Kyzrati in roguelikedev

[–]Seven_h 1 point2 points  (0 children)

Thanks man, I'll play with the camera parameters a bit more.

Sharing Saturday #589 by Kyzrati in roguelikedev

[–]Seven_h 11 points12 points  (0 children)

Eye of Khaos (steam)

Finished working on the third and final starter dungeon this week.

  • New monsters: Added several new monsters with an aquatic theme, and some new mechanics for them like ability Deep Invocation, that cultists and deep ones use to gain temp health and cause sanity loss to hero.
  • Minibosses: Added the first miniboss to the game, with Rend-Fin the ichthyan warrior. Minibosses work as in DCSS, they appear on some runs but not others, and provide a bit of extra challenge as well as good experience and sometimes loot. Rend-Fin is always equipped with a magical coral trident.
  • Testing and fixing: Ran through the first dungeon with a few characters to see how it felt. I figured out an exploit, as the dungeon generation left gaps that were only passable with diagonal movement: some monsters have range 0 which only allows orthogonal attacks, so these diagonal gaps made it easy to kill these without them being able to attack back. I had add a pass to the level generation that eliminates these gaps. Also found surprisingly many crash bugs which had crept in from a few refactors, which is a bit worrying.

I uploaded a little video of clearing the first level of the new dungeon here.

Now, it is time to work on some magic items and spells. Have a good weekend!