Pixel Art Witchcrafter: Empire Legends


Hello again :wink:

Intentionally posting new spooky and gloomy cemeteries images to refer to Halloween! :wink: So now, the attack and the magic spells are working fine :wink: I’m trying to make it as fluent as possible, but synchronizing animation seems to be the hardest part. For now, the animation handling is a completely separated module which communicates with main hero script. Same goes for camera direction. My idea is to create an input lock, when an attack sequence is performed and at the end unlock input, but now it feels that the input is suspended a bit more than it should be. Do you have any better idea on how the fluent combat could be designed?

The story evolves in parallel. Estel will encounter deadly ghouls and undead warriors resurgent by a mighty necromancer that rules in Southern Empire - Navia. The necromancer will try to conquer northern places, where many of Estel’s friends live. Of course, he also desires the Philosopher’s Stone and thus, he has kidnapped Estel’s patron, who probably knows how to decrypt the Emerald Tablet. So Estel will reach many different places throughout his journey to find him.

A lot of work is also with images and decorations. The protagonist now have a red cape instead of brown hair :smiley: I am planning to extend his legs and even to create an animated grass and leaves to increase immersion. I would like to thank at first Luiz Zuno (@ansimuz ) and rvros, whose art is an inspiration for this game, but there are also a lot of others I will put in credits, especially helpers from the forum :wink:



Amazing looking graphics! Looking forward to playing this!

1 Like


(not my fault, this is the maximum mouth"s radius this smiley can open)
I like the story especially, finely knit, and with a bit of wordplay, this can be kinda lord of the rings type fantasy.

Gimme a bit of idea on what type of combat you want, and probably I can help you as I have some exp in this case
BTW more characters and assets for you Here and here
Daluck be with your game.

1 Like


For now the combat scheme looks like this: input triggers function in main hero script to set the lock flag and send message to animation script to play sequence. After a specific time the collision object is created in front of the hero that triggers a monster in a range to take damage. Then, the monster sends a message to main hero script and “ask for” a damage. Damage is calculated and sent to the sender - damaged monster. When the animation sequence is done (unfortunately I have to set a proper timer for that in animation script instead of having some callback when the finishing frame is displayed) the lock flag is reset to false, so the input is again registered. Because of that I can feel a small delay between attack sequences. I want to create a system when a player is tapping attack button and the hero animates a sequence instead of starting the same animation every time the user clicks or having those delays between. What could be useful I think is the information what frame of animation is displayed currently.

1 Like


It’s in our backlog to expose an animation cursor for flipbook animations. With the cursor exposed it will be possible to start an animation from any frame, read the current frame, animate the cursor using go.animate() and so on. It’s not going to get implemented soon though. Most likely end of Q1 if I’m allowed to guess.


How to change FPS of an animation, in runtime? (DEF-2249) (SOLVED)
Choose first frame of play_animation?

Here’s the surprise for you - A fluent,efficient system to manage combats constantly, and without dealing with input lock and things. A bit wacky still, as I didn’t have much time today, but would give you an idea of how combat can be done. Moreover, I will develop on it and take the concept further after some days, but this should be ok till then.
AttackMelee.zip (58.1 KB)


Animation - Mashing attack button (SOLVED)

Wow! It’s great! :smiley: Thank you very much :wink: This is nicely done and animations aren’t interrupted, I will add idle animation at the end and it will be awesome!

1 Like


Hi :wink:

Regarding attack, it is completely redesigned, thanks to @TheKing009 ideas, still uses lock, but in a smarter way and animations looks smooth as a shoe shine. And I also care about the sword position - if it was sheathed or handled before next animation is played. At first I was using many scripts for functions like animation or movement under go representing the hero, but for now the more convenient and clearer way is to buck functions into lua modules and use one script for the hero. Monsters gets damage and a label above is updated,

There will be implemented day/night cycle. And it won’t be only about lighting. It is a very useful mechanism that allows for a deeper immersion and engage players to care about the protagonist at night, especially because there will be more dangerous monsters, ghosts and phantoms. And Estel will need to sleep. Imagine a situation when the tired hero stucks in the dark wood and he uses the magic to create a barrier out of stones and mud to protect him against beasts while he could sleep a bit. Now the lighting cycle is handled by a render script that utilizes lighting render target by setting BUFFER_COLOR_BIT, and again, many thanks inter alia to @Pkeod shaders and @ross.grams render scripts! :wink: What I’m dreaming about is to add normal maps to sprites, but now it’s out of my range. Anyway, it’s a great effect to see light at a dark night :wink:

Interesting was the process to adjust color of the ambient light. I experimented with some vectors at a specified time like morning, afternoon and evening, but to create a smooth transitions I fitted polynomial function of each RGBA value :smile:




Amazing work! Love the visuals :slight_smile:




I was working on dialogs and meanwhile, I released Defork :smiley: So hope, it will help you too! :wink: I added FSM to handle dialogs input using dynamic gui table with different amount of options to choose. I also decided to use short option text, that is extended when Estel is saying it actually - I hope it is more natural and easy to control conversation without reading a vast amount of text only to choose the best hero’s answer.

Many choices will be relevant and I’m working on a system to manage and save decisions data, that will store relation between each NPC and Estel, NPC’s dialog nodes and decisions. Creating such nonlinear story is very time and brain consuming :face_with_head_bandage: If you have some suggestions or advices, feel free to share! :blush: My brother is helping me with a scenario and he has a lot of ideas, as he’s a writer :face_with_monocle: We are collaborating on writing missions and I’m taking care about logic connections too.

Don’t know how the project will be updated in the nearest future, because next week I will become… a proud dad - of two sons! :smiley: At once :smile: I think this new role will consume a vast amount of time :smiley:

BR, Paweł



Hello and Happy New Year! :partying_face:

It was an exciting year behind us, I’ve learnt a lot about the engine and game dev, a lot of things happened in my life :smiley: It is also very exciting to write a first post in 2019 about my project :star_struck: (of course I’ve prepared it earlier :stuck_out_tongue: )
In December I’ve completely refactored the code, tidied up everything, made it more readable, tried a lot of things and still trying to optimize and polish my gem. Mobs are very generic now, so I can easily create diverse instances. Hits are based on collision triggers. The biggest change was to replace all the movement and collisions system with @britzl’s Platypus. I suggested inclined slopes that are working great now, so thanks again :smiley: Take a look at a little demo:

Estel can now jump, bounce from walls, walk on diverse grounds and even attack in the air! :smiley: Attacks are scheduled and player can perform a combo easily, but still the clicking rage is tamed. I think, combat is much more dynamic now, so I’m trying to redesign my first thoughts about Focus board for spell casting. Turn-based combat is very popular and comfortable on mobiles, thus I do want to implement puzzle mechanism to perform fight, though it would be optional. Normally, the combat will be real time, but when Estel enters a strange dimension or a singular state of his mind the time drastically slows down and stops, so he can literally Focus on performing a breathtaking attack! :smiley: It will be up to the players which way is better or more suitable for a situation - I wish to make this game convenient to play vertically, with one hand even :wink:

I am glad about the progress and this dev diary and forum helps me with a motivation a lot :smiley: I hope this year would bring us all great ideas, implemented in Defold and shown to the world! :wink:

Happy Defolding in New Year!




So, in the last month I completely refactored the Focus board - a linker type board to collect elements used to craft magic spells. I spent a lot of time on new scripts and graphics and I hope the effect is visible at the glimpse - what do you think? :wink:

Old vs new:

The fascinating thing about the Focus board is its complete encapsulation in GUI! Every block is a cloned GUI node and everything is in GUI, so it is not influenced by user’s screen, hero’s position, camera, etc. And I can display the board in game, while the background is the level collection. It is even properly displayed on an Android smartwatch :smiley: Take a look:

So, when you will ask on what other device can Defold game be launched - here is the answer! :smiley: It is even possible to play the game, of course it’s difficult though :smiley:

Next big thing, I’m working on is magic. Yeah, I’m preparing a cool witchcrafting system where elements can be conjured using different carriers and with different modifications. Everything to engage in the process of creating a spell. Defold particle fxs are used here and effects are exciting for me, though it is an initial version only - what is your impression? :wink:

So, a gameplay is now like this: hero enters Focus mode which pauses the game and the Focus board appears. You can take your time to accumulate as much energy as it is possible on a linker board in limited turns, taking into consideration conditions like weather, environment and mob’s weaknesses. Then you can select one or two basic elements that will fuse into another element. Then you are able to cast a specified element’s spells by pushing it forward (like flamethrower for example), swirling it in a powerful tornado/flamenado/waternado and so on or many other.
If I could ask for a help from our small but engaged community - what do you think of those game design ideas I’m trying to consider regarding casting spells:

  • Turn based - select a card and then play it automatically on a closest mob immediately after a Focus mode (pause mode)
  • Gesture based - have your element energy cumulated and use it later at will while casting spells with gestures (e.g. swipe right/left to throw a fireball, hold a mob to set it on fire and so on)
  • Button based - have your element energy accumulated and use it later at will by clicking/taping on the spell’s button (few for each element would be available at once, probably choosen in Focus mode)

0 voters

And I’m getting back to creating those powerful effects :wink: May Deforce be with you!


GUI :heart:

Ugh it looks so juicy, give us the demo already :smiley:



Super cool!

Perhaps it’s possible to detect “watch mode”, and display a 4x4 board instead?
Will probably be trickier to balance the game perhaps, but still :slight_smile:



Love the fire effect!



I will surely die if I wait for this any longer. Give us something to play, play and play. :wink:
Great to see the development, just waiting for the first release.
May the Deforce be with you too.



Thank you all for your feedback! And please vote if you didn’t :smiley: @Mathias_Westerdahl, I’ll put a smartwatch version in the corner of hope of the backlog :smiley: I want to play it too, though it is not so simple, but I’ll do my best to prepare a demo, so maybe I’ll gather even more feedback from you :wink: This is a great motivation! You’re awesome! :smiley:



thank you so much! :grinning: :+1:

1 Like


Hi! :smiley:
I know some of you would kill me or themselves, when I will announce I still can’t drop any demo :smiley: But I have to admit it :confused:
tl;dr: I had many troubles with creating a correct mob’s AI, but hey, there is a juicy battle right around the corner’. :wink:

I tried many times and there where many iterations and refactors. What I would like to share with you is to remember about the scope of variables! Imagine that I wasted an enormous amount of time on finding out what’s wrong, while I was overwriting the id I made local in the script of one GO and I had multiple instances of this GO in the level. Why? I didn’t realise that, when I write

local id = nil
function init(self)
   id = go.get_id()

I actually overwrite the id that is local for all instances of this script in any new instance’s init! I know it looks stupid now and I should use self.id, but just for my convenience I used id because it was way easier to just use it in any function of the script not caring about passing self.id anywhere. Debugging it took a lot of time and I couldn’t find the cause of my problems because I was suspecting anything, but not this. I just, I had to complain. It might be useful information for someone someday :wink:

So, forgive me once again, guys :worried: Raising newborn twins, working full time in ICT, dog walking and caring about a new home with my wife is so time and brain consuming, that I’m only able to code in very short periods, often during communication :sweat_smile: That’s why I make small iterations and trying to keep code as clear as possible, while actually still learning Lua and Defold :smiley:

But to sweeten the expectancy I must share this new AI behavior with you :relaxed: Let’s checkout how a basic paw-armed mob tries to kill our protagonist! :scream:

Notice the new GUI, there is a health bar (red), xp bar (yellow) and inside the orb there is a choosen element - the size of the particle fx and icon depends on amount of Elemental Energy. There are control buttons also and the button below a fireball stands also for the Focus board, when the EE is 0. When you’ll charge it again with some element it changes for a proper spell - like fireball here. I hope you’d like it and I’m hoping for feedbacks :wink:

So another useful informations for Defold users would be to describe FSM I used to control mob and collision objects of mob used to detect, if hero enters mob’s FOV or range of attack. I used self.state and self.new_state to change only the second variable and check for an inequality between them in update function, so for every state change I can perform different tasks only at the moment of change, because I save new_state to the state there immediately.
In every state I enable or disable proper collision objects and listen to Trigger messages that are sent on collision with hero once, either at enter or exit. Or to Animation Done messages for example. Again, I perform there different tasks and state changes, so still everything is pure and readable. It is very crucial in that kind of huge project I’m working on alone, so I give special attention to refactoring and design rules.

The damage is sent to each other at the end of animation, but it will be changed when there will be animation cursor exposed, because it will, as @britzl said:

so I’m keeping your word :smile: Then I can check for a proper moment of animation to trigger attack collision :wink:

I don’t want to show anything that could discourage you and you won’t give it another chance, as we all know that the first impression is crucial :wink: As soon as I will complete at least this basic battle behavior with interactive mobs including using some magic and (most voted) buttons for spells aaand it will be tested and playable, I will post a demo :smiley: As polish studios usually says, it will be released, when it’s done :sunglasses:




your game looks so good! No pressure, but the UDGJ jam is a good opportunity to ship a first demo :stuck_out_tongue: