[DEVLOG] My Zeldalike

Zelda-Esque Devlog

For some reason, I had the encouragement to make a game based on the Zelda franchise. I believe I took inspiration from Deltarune’s Chapter 3 Zelda segment. Just watching the simpler interpretation of the game actually gave me the courage to try making my own
I intend for this to be closer to a “Bullet Hell” type of game, since I’m not terribly sure on puzzle dev, unless its “You get one thing to get another thing that allows you to reach the next thing…” type of puzzlemaking (which I mainly found on Mario Maker puzzle levels)

Since I started working on it, I’ve made a lot of progress


I took a lot of the sprites/tiles from the official sprite/tileset rips found by MisterMike. I’m still gonna try and update them, but just know they’re gonna look like the NES version of zelda for quite a while.
The enemies (My game calls them Familirocks, they’re Octorocks) are programmed to move around the current scene with a change of changing their axis of movement, switching from horizontal and vertical.
2026-08-1613-57-40-ezgif.com-video-to-gif-converter
For now, though, I’m gonna take small breaks from time to time since I’ll be in classes for most of the year (college is fun btw). I’ll catch you all up later!

11 Likes

Nice!

Mannn!!! I love Zelda so… I would love to help and if you need more help the join studio of sword Studio of Sword - #214 by Unicornalena

noice! that’s cool

UPDATE: The Importance of Classes in Object Oriented Programming

One issue I had when coding my various enemies was the MESS that sprite data made. At first, it wasn’t so bad, but as stuff compounded, it got harder and harder to read. Lines got soooo long, and most of the time stuff got cluttered.
Making classes really optimized my workflow! As an example, lets walk through some stuff I made
First, I realized the Enemy AND Player both used hitboxes and costumes. Therefore, I could conjoin them into one class that would have all essential variables and functions that I could pull from

class Creature {
    costume : Sprite;
    hitbox : Sprite;
    anim_count: number = 0;


    constructor (hitbox: Image, costume: Image, kind: number){
        this.costume = sprites.create(costume, kind)
        this.costume.setFlag(SpriteFlag.GhostThroughWalls, true)
        this.hitbox = sprites.create(hitbox, SpriteKind.Hitbox)
        this.hitbox.setFlag(SpriteFlag.Invisible, true)

    }

    add_animation(anim_arr: Array<Image>) {
        adv_anim.attachAnim(this.costume, anim_arr, WALK_ANIM_TIME, this.anim_count)
        this.anim_count += 1
    }
}

It then makes making new classes easier! Sometimes, the player and enemy will have class specific variables that influence how it works, like an array that would display the enemies present in the program
Heres the enemy class, as an example

class Enemy extends Creature
{
    static enemies : Enemy[] = [];
    attacking : boolean =  false;
    direction : number = 0;
    creature : number;
    exhaustion : number = 0;
    used_ability : number;
    ability_cooldown : number = 200;
    
    constructor(hitbox_img: Image, costume_img: Image, creature: Enemy.EnemyType)
    {
        super(hitbox_img, costume_img, SpriteKind.Enemy)
        // Sets the appropriate AI
        this.creature = creature
        // 
        this.used_ability = this.ability_cooldown + game.runtime()
        // Adds the new enemy to the enemies array
        Enemy.enemies.push(this)
    }

    destroy()
    {
        for (let i = Enemy.enemies.length - 1; i >=0; i--)
        {
            if (Enemy.enemies[i] == this) Enemy.enemies.splice(i, i)
            break;
        }
        sprites.destroy(this.costume)
        sprites.destroy(this.hitbox)
    }

    /**
     * TODO: Increases the Enemy
     */
    increaseExhaustion(amt: number, double: boolean)
    {
        this.exhaustion += amt * (1 + Math.BoolToInt(double))
        if (this.exhaustion > 100) this.exhaustion = 100
    }

    placeOnTile(loc: tiles.Location)
    {
        tiles.placeOnTile(this.hitbox, loc)
        this.costume.setPosition(this.hitbox.x, this.hitbox.y)
    }
}

Not only do classes help with programming, it also helps with readability! I’ll provide even more updates at some point :3