Entry for JS13k 2020 (Death)

Overview

js13k

  • Norman tries to defend himself from the local villagers
  • Make magic feel like magic
    • Glyphs, cooldowns, screenshake
  • Villager just runs at norman
  • Brute walks, takes more hits
  • Archer walks then shoots and repeats
  • Priest buries corpses before norman can resurrect them
  • Healer heals those around them
  • Noble causes those around to speed up
  • Paladin kills skeletons in one hit
  • Green Fire (1 damage to targets)
  • Skullerang (1 damage but boomerangs)
  • Timed bomb
  • Air strike
  • Zap
  • Claws from below
  • Wave
  • Ectocannon (slowing slime)
  • Bloodwell
  • Miasma
  • Homing soulmass
  • Mines
  • Skull bowling
  • Ghosts that go through people
  • Bouncing causes projectiles to do less damage
  • Better to have fewer weapons and more upgrades?
  • Passives
    • At the end of the round, player can choose 1/3 scrolls to read which grant passive benefits during the next level.

Diary

Day 1

Ok. The base idea is very fun. Getting enough game logic in might be a challenge though.

The spells will be what makes this game. Particle effects are going to be a critical part of that.

  • Projectile launch should be based on angle and speed, not a vector.
  • Think about how to make sprites stick to the floor
  • Collisions should be rects/AABBs.
  • Glyphs circling around norman when ready to cast
  • Need to think more about necromancy and less about wizard spells
  • People are too floaty without animations
    • Try sprite bobbing
    • Maybe they should hop instead of continuous moving?
  • People should gradually speed up and increase in frequency

Todo:

  • Render loop with dt
  • Decide on object format
  • Particle system
  • View system from tickles
  • Font rendering

Day 2

Getting towards having a game. Spent a stupid amount of time trying to get collision working correctly because of issues with the coordinate system. There's a rough architecture coming together but not super happy with all of it. Suspect there will be at least one big rewrite during this project.

Missing mechanics:

  • Villagers attacking norman and lose state.
  • Secondary spell for resurrections
  • Skeletons that attack villagers
  • Souls as currency
  • Defined rounds/waves with rewards

Particles are looking good and the hopping style seems to work ok. Behavioural extraction for unit types and spell types is good.

  • Wider range of spell types
  • Primary/secondary spells

Day 3

Nice progress already. Sorted out the internal systems for abilities and got resurrection working. Getting close to having the core loop done.

  • Round ending mechanics
  • Upgrades/mutations
    • Hades model where boons can be applied then the boons themselves levelled up?
  • Consumables
    • Restore health
    • Souls buff

Restart mechanics. "Norman did what any self respecting necromancer would do. He brought himself back..."

Day 4

Only did 40 mins on the game today, busy with work and interviews. Added the priest class with the "healing" behaviour.

Might be more sensible to implement behaviours in terms of "turns" rather than ms cooldown. Then behaviours don't need to know about the object's game speed. Split behaviours out from the GameObject class so that its easy to have actions that are taken every N turns. Not sure that behaviours is the best terminology though.

Turned "march" into a behaviour which feels good. Now skeletons/villagers share the movement logic.

  • Resurrect is way too powerful. Needs to start by only resurrecting the nearest skeleton to you I think. Upgrades would increase that number.
  • Need to fix the bug with jumping bones
  • Later waves should have regular villagers with higher base health
  • Villagers should start to drop stuff already

Day 5

  • Figure out the wave structures
  • Award different soul amounts for different enemies

Day 6

Nothing.

Day 7

Reworking the engine to focus on single spell/ability depth.

  • Need to figure out how to get mouse input relative to the scene.

Day 8

  • Should behaviour be an interface unit.addBehaviour({ onCollision: ... })

Ideas for wave structure

  • Preset pattern
  • Random pattern with preset challenges
  • Budget with weighting

Ideas for rituals

  • Splitshot
  • Straight shots
  • Homing shots
  • Powerup on bounce
  • Tough Skeletons
  • Skeleton lord
  • Enemies killed by undead drop 2x souls
  • Chance for skeletons to drop corpses
  • Direct hits stun enemies
  • Explosions stun enemies
  • Glass cannon (1 HP, 2x damage)
  • Critical hit chance
  • Increase max hp
  • Gain souls after completing a wave
  • Alchemist: More potions? More potion slots?
  • Bloodbank: 2x more villagers will spawn
  • Projectiles:
    • Drunkard: Projectiles do 2x damage, but aim is randomised (by a small degree)
    • Bouncing
    • Explosive
    • Split on bounce
    • Split on downwards velocity
    • Piercing
    • Knockback
    • Projectiles have a 10% chance to cause curse X
    • Projectiles have a 5% chance to cause a random curse
  • Environment:
    • Ceiling
  • Casting:
    • Increase casting capacity
    • Increase casting cooldown
    • You fire faster 50% faster, and enemies are 25% faster
    • Fire in bursts of 3 shots, but firing is now automatic
  • Effects:
    • Hex: Health is reduced by 1 each turn, to a minimum of 1
    • Vulnerable: 5x more likely to receive critical damage
    • Slow: Act twice as slowly (or move half as far?)
    • Marked: If killed whilst marked, 100% chance to become a corpse
    • Sleep: Do nothing for 3 turns
  • Resurrections:
    • Gravedigger, waves start with existing corpses
    • Resurrections stun enemies
    • Resurrections heal undead allies
    • Resurrections apply effect to AoE
    • Resurrections can create wardstones instead of skeletons
    • Resurrections do either -2 damage to all villagers, or +1 health
    • Resurrections stop time for 3 seconds
  • Sustain:
    • Respite: Heal 1 after each wave
    • Backstabber (killing skeletons heals you)
    • Pariah: Shield that absorbs impact but takes 10 seconds to return
  • Wardstones:
    • Projectiles sometimes create a wardstone (5%)
    • Wardstones have 50% health but return after 10 seconds
    • Wardstones heal skeletons as they pass
    • Wardstones reflect damage
    • Wardstones explode on destruction
    • Wardstones cause enemies to become stunned
    • Wardstones slowly heal themselves
    • Hitting a wardstone heals it
    • Hitting a wardstone causes an explosion
    • Enemies that touch a wardstone become cursed
    • Start each wave with a wardstone infront of you
    • Look Up: Wardstones periodically drop from above

Wall decorations

  • Torch
  • Prison cell
  • Gravestone
  • Banner

Ideas for challenges:

  • Huge wave of villagers (spread small damage)
  • Trio of archers (neutralise quickly)
  • Monks + champion
  • Something where you can trade some HP for souls
  • Shelled knights
  • Spearmen with erratic patterns
  • Wizard that shoots projectiles at you
  • Static enemies that are "woken up" on damage (spiders?)

"Norman wasn't particularly popular in the town, and that was before he became a necromancer."

Day 9

Some rituals probably need to be mutually exclusive and others need requirements. E.g. split on bounce requires bounce and probably should be exclusive with splitshot. May need tags + ids. Maybe just tags is good enough (e.g. check for BOUNCE tag when generating bounce upgrades).

Wave ideas

  1. 3 waves of villagers, and one wave with a tougher enemy
  2. Each wave of villagers has a tough enemy
  3. 10 villagers and a challenge

Day 10

  • Figure out firing mechanics
    • Casting speed
    • Recharge cooldown
    • Casting capacity
    • Projectile lifetime
  • Figure out level mechanics
  • Stone mechanics
    • How are stones created?
      • Small percentage chance on bounce/kill/resurrect?
      • Throwables?
    • Bloodstones that heal Norman when destroyed?
  • Curses
  • Resurrection mechanics
    • Some skulls should break randomly
    • Chance to drop skulls should be lower
    • Rituals should be able to hook into resurrections

Day 13

  • Casts reload 1/s, rituals can take that down to 3/s

  • Casts are capped at 3, but rituals can take that up to 5

  • Ability recharges at 0.1/s

  • Power shots implemented, but not that fun

  • Player UI

    • Health
    • Casts
    • Ability timer
    • Souls
  • King should spawn guards so that the player has a reservoir of skeletons

    • Maybe king stops when 50% of the way into the room?
    • Maybe the king's healthbar is his progress towards the player?
      • Means the fight always gets toughest towards the end, when guards are spawning directly infront of the player.
  • Rituals that affect every N-th shot.

    • Every 3rd shot is explosive
  • Kapala

  • Tiered rituals

    • Ritual type
    • Ritual level
    • Example
      • Every 3rd cast is piercing
      • Power shots are piercing
      • Every shot is piercing
  • Necronomicon

    • +1 max health
    • +1 health
    • +1 spell capacity
    • 3 rituals

Day 14

  • Spawn structure + shop
  • Soul bonuses
    • Direct hit
    • Long shot
    • Power shot
  • Level definitions
  • Shop / level transitions

Day 16

  • Shop (rough UI)
  • Resurrections timer UI
  • Soul bonuses
  • Ritual rarity
  • End game
  • Revisit rituals
  • Status icons for shelled/enraged
  • Design some better intro waves
  • Show wave progress (people got confused about the end)
  • Behaviour stacking IDs (stacking for anonymous behaviours)
  • Figure out a better API for defining/composing rituals

Day 18

Got the game size back down to 80% of the budget by combining the spritesheet/font and inlining the JS into the index.html.

  • Experiment with rewriting classes as objects + functions
    • Game class can probably all be module level variables
    • Rituals as objects
    • Behaviours as objects
    • GameObject .extend method instead of unit.xyz = foo pattern

Day 20

Should probably deduplicate some of the physics code between particles and game objects.

Played around a little bit with a soul "streak" which adds a multiplier to your earned souls. The initial multiplier was a x1..10 which ended up feeling way too punishing to break a streak. Ended up trying out x1.1..2 instead. Adds some incentive to play carefully and "perfect" the early levels, but also makes the gameplay a little less carefree.

Plans for the weekend.

  • Sort out the level spawns
  • Figure out ritual rarities + pricing
  • Add an endgame screen
  • Make resurrection a viable way to play
  • Make wardstones a legit mechanic
  • Figure out behaviour stacking
  • Experiment with behaviours as simple objects
  • Add keyboard controls

Day 21

After beating the king, use a NG+ cycle which restarts the game at the beginning, but adds some buffs to enemies. It would be nice to change spawn patterns too, but might be annoying to implement.

Day 22

Sound effects:

  • Cast a spell

  • Spell collision

  • Resurrection

  • Explosion

  • King needs to clear behaviours when he enters second form

  • Big Fred is too slow

  • Champ is too tanky/slow

  • Red guys are not fun

  • Some rituals could be bought multiple times

  • Experiment with windows and sky color

  • SFX for menu

  • Ritual hooks for level end/start/shop

  • Bleed is too strong when stacked

What would this game need if I want to publish it tomorrow?

  • End screen

  • Resurrect UI

  • Wizards need to do something

  • Behaviour stacking

  • Ritual which turns corpses into souls at the end of each level

  • Ritual which makes the shop cheaper

  • Knockback shouldn't work on the king

Final Day

  • Make the shell wave less boring
  • Add the wizard to other waves
  • Review ritual names / necronomicon
  • Get game within budget
  • Bug between chilly + unchained
  • King shouldn't be freezable
  • Submit
Comments
  • Weightlessness effects the golden shielded enemies projectiles as well...

    Weightlessness effects the golden shielded enemies projectiles as well...

    Maybe this is intended behaviour, but it was a little surprising and frustrating for me the first time I encountered it.

    Details: I buy the ritual "weightlessness", and keep playing till I encounter the ememies with the golden shields that fire yellow/golden projectiles. Their projectiles will now cross the entire screen, and cause me to lose health.

    I'm not 100% sure, but I have the feeling when this happens, it also causes the bug I mentioned in the licence issue, which is I lose all health, but continue play (seems fair considering the projectiles being fired all the way across the screen, but probably not intended either :P - guess I should issue a seperate bug for that...).

    opened by SeanScherer 10
  • How great an interest in this game?

    How great an interest in this game?

    Hey, this is a question issue. (Posed here, since I have no other way of communicating).

    I'd like to know whether/ how much you ( @danprince ) are interested in still doing with this game. Ie, is your view more along the lines of "This was a one-shot for the Game Jam, nice to fix bugs, but in general this is not something I see myself working on / playing with still" , or more towards "I like this game and reckon it could still go places - even if I might not have that much time to do that myself just now".

    Makes an obvious difference for someone (ie me :P), interested in doing stuff with it, which is why I'm asking :) .

    opened by SeanScherer 4
  • Fixed minor ritual typo

    Fixed minor ritual typo

    Hello, I just completed a playthrough of the game and noticed a minor typo in one of the shop ritual items, thought I'd submit a quick PR to fix it.

    PS: Great job on the game, it's super enjoyable and the code is very readable.

    opened by nick-w-nick 2
  • Licence ? (cool game btw!)

    Licence ? (cool game btw!)

    Hi Danprince,

    I think you have a very cool game here :). (Just got through the second time - first time I won due to a bug, I was killed but continued to play :P).

    Anyway, I wanted to know what licence / if you are offering this under a certain licence? I think this is a game worth keeping around, maybe changing and adding to! (And a licence would be necessary to do that with clear terms).

    Thanks for your time,

    Sean

    P.S. Did you ever happen to play the Stronghold "demo"?

    opened by SeanScherer 2
  • Funny game!

    Funny game!

    Hi,

    I open this issue just to let you know that I think this game is very funny!

    Now I am working but I will spend more time playing in my spare time.

    Thanks for your code!

    opened by Pablohn26 1
Owner
Dan Prince
Making things, breaking things, and trying to fix the things I've broken before someone finds out.
Dan Prince
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
A puzzle game for js13k 2022.

Dying Dreams ...is a puzzle game made for js13k competition (2022). Compiling Tools you need: TypeScript (mandatory) Closure compiler (optional) advzi

Jani Nykänen 77 Dec 8, 2022
My solutions for CS61A Fall 2020.

CS61A-Fall-2020 My solutions and experience for CS61A Fall 2020. 一、课程介绍 这门课作为Berkeley大一新生的第一门计算机课程,是一门计算机导论的课程,主要的编程语言是python,此外还介绍了LISP的方言Scheme语法和SQ

null 46 Dec 23, 2022
Litebug is a rapid data entry interface for Firefly iii

Litebug is a rapid data entry interface for Firefly iii.

Amjad Mohamed 2 Nov 7, 2022
True P2P concept for your p2p powered website/app/client. MSC/MEP (Multiple Strategy Concept/Multiple Entry Points)

TRUE P2P CONCEPT - Lets redecentralize the web This repo is just conceptual. Active development of the endproduct (TRUE P2P) happens here https://gith

Bo 6 Mar 29, 2022
js13kgames 2022 game jam entry.

DEATH RIDER DEATH rides out to collect souls in the cemetery. BEWARE!!! Crosses crosses your way and bats try to bat you! Collect as many juicy souls

Csaba Csecskedi 5 Nov 4, 2022
Ekşi Sözlük için Entry No girerek Entry'i resimli hale getirip paylaşmanız için geliştirilmiş bir araç. [unofficial]

eksiprettier Ekşi Sözlük için Entry No girerek Entry'i resimli hale getirip paylaşmanız için geliştirilmiş bir araç. [unofficial] Nasıl Kullanılır? Ön

Y. Emre BAKKAL 6 Oct 12, 2022
Form next js 2022 - project for death valley.

Welcome to Death Valley 2022 base url https://form-next-js-2022-3snm4xixy-sungpah.vercel.app/ Download this repo git clone https://github.com/SUNGPA

SUNGPAH 2 Jul 1, 2022
A tiny FPS for js13k

A tiny FPS for js13k

Dominic Szablewski 1.4k Dec 26, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
A puzzle game for js13k 2022.

Dying Dreams ...is a puzzle game made for js13k competition (2022). Compiling Tools you need: TypeScript (mandatory) Closure compiler (optional) advzi

Jani Nykänen 77 Dec 8, 2022
The fastest JSON schema Validator. Supports JSON Schema draft-04/06/07/2019-09/2020-12 and JSON Type Definition (RFC8927)

Ajv JSON schema validator The fastest JSON validator for Node.js and browser. Supports JSON Schema draft-06/07/2019-09/2020-12 (draft-04 is supported

Ajv JSON schema validator 12k Jan 4, 2023
2020 ağustostan kalma guardlarım

2020 Ağustos ayından kalma guardlarım 2020 Yılının Ağustos ayında @Thans-Official aşkm ile yaptığımız guardlar ek olarak sadece multi token yaptım baş

Richârd半神 8 May 27, 2022
My solutions for CS61A Fall 2020.

CS61A-Fall-2020 My solutions and experience for CS61A Fall 2020. 一、课程介绍 这门课作为Berkeley大一新生的第一门计算机课程,是一门计算机导论的课程,主要的编程语言是python,此外还介绍了LISP的方言Scheme语法和SQ

null 46 Dec 23, 2022
The Aurelia 1 framework entry point, bringing together all the required sub-modules of Aurelia.

aurelia-framework Aurelia is a modern, front-end JavaScript framework for building browser, mobile, and desktop applications. It focuses on aligning c

aurelia 11.7k Jan 7, 2023
Litebug is a rapid data entry interface for Firefly iii

Litebug is a rapid data entry interface for Firefly iii.

Amjad Mohamed 2 Nov 7, 2022
True P2P concept for your p2p powered website/app/client. MSC/MEP (Multiple Strategy Concept/Multiple Entry Points)

TRUE P2P CONCEPT - Lets redecentralize the web This repo is just conceptual. Active development of the endproduct (TRUE P2P) happens here https://gith

Bo 6 Mar 29, 2022