Connect A Witch!


(temporal cover image)

Introduction

Hey! this post will cover the design process of 'Connect A Witch', a project made for the New Year, New Skills Game jam, I will talk about about what I did every day, my ideas, struggles, etc. This introduction is being written in the first day of the Jam.

Day 1 ~ 01/07/2024

I'm attending the jam as a solo Developer and I plan to do all the code, sprites and sfx's. I just finished a 14 day project, Space Defenders, so I want to push myself with what I've learned from it. Just like in my previous project I plan to work with Python 3.11.5 and the Pygame Library, reusing some utility code that help me render animations, images and dialogue, everything else is going to be made from scratch, I proposed to myself this schedule:

Day 1 - Game Ide and setting the game up

Day 2 - Implementing the game loop, add a title screen and victory screen

Day 3 - Implementing the game loop, add levels or zones

Day 4 - Implementing the game loop, whatever a come up with XDD

Day 5 - Work on Sprites

Day 6 - Work on Sprites

Day 7 - Work on Sprites, sfx

The theme of the jam is Building Connections, I'm a huge Persona fan so I couldn't stop thinking about social interactions, I wanted to make a Game where you somehow helped people and they helped you, just like in modern Persona. Then I though about a game where you are a witch helping a village with troubled villagers, I imagined it as a platformer. Since my previous project wasn't a platformer I couldn't reuse a lot of code, hopefully I made it after watching this amazing introduction to Pygame video made by DaFluffyPotato, so I used some of the code that I made while watching it.

I decided to go with a 480x270 display reescaled to 960/480, I will making the scale and sizes of everything in dummy template using asesprite:


A Problem that I had and the solution

Everything went almost smoothly, some errors setting the in-game loop, but nothing that I couldn't fix in like 5 minutes, my first real problem came when setting the tilemap. Due to performance reasons, DaFluffyPotato proposes a tilemap system that lives in a dictionary, where each key represents a tile location and their values the tile data, like their type, variation and the tile locaiton but as integers. The system to check if an entity should collide with a tile consists in looking at all the neighbor tiles from the character's tile position perspective. I decided to have 48x48 tiles, I'm not so sure if it's too big, or too small I guess i'll see in the coming days. My character is 48x64 so maybe you can see where my problem lied, my character is taller than one tile, and since it evaluated it's position from the upper left corner it checked the collision when the sprite was already inside the tile. I made a dinamic solution where the checker added more tiles to evaluate from depending on the size of the sprite, this works for all sizes.

def tiles_around(self, pos, entity_height):
        tiles = []
        tile_locations = []
        difference = 0
        tile_locations.append((int(pos[0] // self.size), int((pos[1]) // self.size)))
        if entity_height > self.size:
            difference = entity_height - self.size
            tile_locations.append((int(pos[0] // self.size), int((pos[1] + difference) // self.size)))
        for offset in NEIGHBOR_OFFSETS:
            for tile_location in tile_locations:
                check_location = str(tile_location[0] + offset[0]) + ";" + str(tile_location[1] + offset[1])
                if check_location in self.tilemap:
                    tiles.append(self.tilemap[check_location])
        return tiles

The Game Concept

While fixing the problem that I mentioned I thought about how to implement the theme not only in the setting but in the gameplay too. I came up with the idea of chaining a series of attacks  to defeat enemies. Then I decided that the villagers were transformed in ghosts and to save them you would need to match a pattern of magic attacks identified by colors, if you used the wrong color then the pattern would restart, every villager is going to have a random pattern. I want to make that the villagers give you some reward after saving them.

Controls

Move: left and right arrow keys

jump: Space

shoot: F

change magic: D

Enemies

When you get close to an enemy it will start approaching you and when is really close he'll start an attack, I plan to add an animation to signal when he is starting the attack so the player can dodge it, the enemy will slide a little while attacking. The enemy doesn't hurts you unless they're performing their attack.

This was everything that I accomplished today, I hope that I can get lots of work done tomorrow too!

Day 2 ~ 01/08/2024

There wasn't much progress done that day sadly, this is being written in the third day of the jam. I worked on the project in the morning from 9:30 to 12 I think and  added some platforms that appeared and disappeared depending on the magic you had selected.


 I also added a beta title screen and a screen for when you beat the game. That was almost everything that I could achieve that day since I had to go to college and when I got back I had a black out. Later today i'll upload the third day's progress which was more significant in my opinion!


Day 3 ~ 01/09/2024

Today I fixed a bug where you could change your magic type while being inside one of the disappering platforms, this was a problem because if you were falling and needed to land in one of those platforms you could make them appear while the player was inside of them, pushing them up in a very awkward way. I also added hearts, so you know your health and a number indicating how many enemies are left to defeat. 

Some enemies drop rewards now, keys to access new areas or hearts to increment your health!

The first two zones were implemented, being the first a tutorial level.


Day 4 ~ 01/10/2024

Sorry for the delay! I decided to start working on the visuals to have a more finished looking game. While working on the sprites I felt like the canvas for my character was indeed too big, I'll try to work with a smaller size for my next project, I managed to make all sprites for the main character, sdly I only animated two of them, the idle and run ones.


These are my first animations ever! I think they are ok for being the first, I still look forward to keep improving. These are the non-animated sprites.


Day 5 ~ 01/11/2024

Today I started working on the tiles, just like the animations it was very time consuming maybe because it's the first time that I do tiles. These are som of the tiles that I did

Grass:

Stone:


I also made variants for the corners and those in the center, beside from those two I made tiles for the magic platforms and doors.

Day 6 ~ 01/12/2024

Today I worked on the UI, the enemy sprite and the villager sprite, since the final day of the jam is tomorrow I kinda rushed this sprites. The large canvas have been a bit of a problem. I'll try to use a smaller one for my next jam definitely.

    


Day 7 ~ 01/13/2024

Final Day of the jam! Today I reorganized some features in my code, there were a few left off. I also made a quick Background that you got a glimpse of from the last screenshots since I wrote these last entries in the same day.

I added sound effects and that's pretty much it! It was so much fun working on this project and interacting with the community of participants!

Get Connect A Witch!

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.