1 of 20

CPSC 4160: Milestone 1 Presentation�

Bryce Planchard�CPSC 4160

2 of 20

Game description

Name: No Rest for the Wicked

Genre: Dark fantasy / action platformer

Engine: Custom Pygame framework (modular design)

Overview:

A man returns from death with the help of a mysterious “Matron” to hunt the corrupt noble who kidnapped his family.

Players explore a graveyard, a ruined town, a cathedral, a castle and beyond, fighting grotesque creatures while uncovering a decaying world’s secrets.

Core Gameplay:

Side-scrolling movement with jumping, running, and melee combat

Gift resource that you gain through defeating enemies (WIP)

Smooth acceleration, gravity, and attack animations

Atmospheric effects and haunting sound design

3 of 20

Game information

Target Audience:

Players who enjoy dark, story-driven platformers with challenging combat and atmospheric worlds.

Age Rating:

Teen (13+) — contains mild fantasy violence, dark themes, and gothic imagery.

Skills:

  • Basic hand–eye coordination for platforming and combat
  • Pattern recognition and timing to dodge attacks
  • Moderate puzzle-solving and exploration awareness

4 of 20

Game references

Most inspiration came from these. Limitations in time left me with a linear level space, but I would have loved to unlock areas in a “world” level with the abilities gained.

5 of 20

Over all I wanted Characters (entities) to feel like an old black and white monster movie.

6 of 20

Early levels as well..

7 of 20

AI-assisted Concept Art

In the end, I knew that I needed something easy to replicate and tweak. Before ‘SmackStudio’ I had intended to animate this by hand.

8 of 20

AI-assisted Concept Art

These took DAYS to get right, just for concept art.

9 of 20

Entities – Player character

  1. Hero
    • Dark Color Palette
    • Cutesy Chibi aspects to offset dark story content.
    • Run and jump are base abilities, adding more later.
    • Average medieval-looking downtrodden peasant character.

10 of 20

Entities - Enemies

  1. ‘Zombie’ enemy type
    • Technically an adjusted player sprite.
    • Very minor monster AI; locks onto player within 3 tiles and walks faster.
    • Uses collision to damage the player.
    • Will add an “attack” animation later for point blank timing damage instead.

11 of 20

Game mechanics

  • Platforming: The core gameplay of "No Rest for the Wicked" revolves around platforming, where players control the Hero as they traverse various levels filled with platforms, obstacles, and enemies.

  • Run and Jump: Players can make the Hero run and jump to navigate the game world. Holding ‘shift’ allows for running, while the ‘space’ key is used for jumping, and ‘j’ is currently attack.

  • ‘Gift’ Resource: Not 100% on how to use this yet, but options include:
      • Temporary enhancement (monster form) (tons more work)
      • XP system to enhance player ‘stats’ (more work)
      • Heavy attack resource (less work)
      • Checkpoint fuel, if you die with 0 ‘Gift’, you start the level over (least work)

  • Interactable environment: I want the story to be less about growing a super powerful main character and more about engaging with the story. Event triggers will alter the environment and new mobility would allow you to navigate new changed areas.

12 of 20

Game mechanics

  • Enemies: 1 to 2 types per level, potential to reuse.

  • Bosses: 1 boss per level, timing and mobility based combat.

  • No Death Penalty: No lives, no farming, core gameplay and story progression.

13 of 20

Player’s mechanics

The player’s mechanics involve

  • Running
  • Jumping
  • Attacking
  • Future improvements:
    • Wall kick/slide
    • Gliding
    • Night Vision navigation

14 of 20

Modules

  1. Character Control: Player uses keyboard input (A/D, Shift, Space, J) with acceleration, friction, and gravity for smooth movement.
  2. Movement: vel_x += accel * dir * dt, vel_x -= friction * dt.
  3. Speed Algorithm: Speed capped with vel_x = max(-cap, min(cap, vel_x)).
  4. Collision Detection: Axis-aligned rectangle checks against tilemap solids. future plans to switch to pixel-perfect collision for smoother contact.
  5. Physics: Gravity and jump → vel_y += gravity * dt, vel_y = jump_velocity.

Some Current Modules:

  • player.py → player Class, movement & combat
  • components.py → animation logic
  • fx/slash.py → attack visual effects
  • audio.py → sound handling
  • resources.py → sprite loading
  • settings.py → localized shared constants

15 of 20

Software architecture

16 of 20

Software architecture

  • Level takes in multiple sources
    • level_text reads in ASCII to ‘build’ the platforms, enemies, spawn points, and checkpoints. Simplifies level testing.
    • Parallax helper.
    • Player Class.
    • The Factory system, uses dicts to ‘build’ enemies.
    • Then making new enemies is just a matter of making a new Classes with stats, sprite sheets, and details.

17 of 20

Software architecture

  • Level Cont.
    • HUD and Slash (FX) also come in.
  • Level builds Scene
  • Scene is managed by Game
    • Game gets Settings, Resources, and Audio to manage the scene.

18 of 20

Timeline

Modules Completed / Functional

  • (100%) Player: movement, jumping, attacks, hurt/death logic, animations
  • (99%) Input: keyboard mapping for movement, jump, attack, run
  • (90%) Physics: acceleration, gravity, friction, air control, jump velocity
  • (50%) Collision: working per-axis rectangular (AABB) collision vs. tiles Stuck with rectangles, Pixel-Perfect set me back too far.
  • (100%) Animation: grid-sheet animation system (Animation class)
  • (100%) FX: slash effects (SlashFX) trigger on attacks
  • (110%) Audio: swing and hit sound effects via SFX

Added more SFX and custom music

  • (100%) Settings / Resources: centralized constants and sprite loading
  • (100%) Level: loads map and manages solids/fx groups (Finished Level 1 and 1st Boss Level)

Modules/Ideas to Prioritized

  • Ghoul Class, 1st boss, 100%.
  • Wall-kick addition to player class 0%
  • Pixel-Perfect Collision – replace or layer on top of current rect collisions for smoother edge contact.
  • Camera System – refine camera to follow player vertically.
  • Enemy AI – expand beyond simple collisions to include attacks. (only succeeded on boss, zombies still do collision damage)
  • Lowest Priority (Polish Phase)
    • Menus / Pause System (expand)
    • Soundtrack & Volume Controls (more music, vol hardcoded)
    • Particle FX / Environmental Effects (can reuse ‘Slash’ a lot)
    • UI / HUD Module – display HP & gift meter in final form (artistic)
    • Gamepad integration
  • Lowest Expectation: 1 full level, game mechanics, level and boss fight fleshed out, HUD final, Combat finished.
  • Highest Expectation: 2 full levels, game mechanics, level and boss fights fleshed out, HUD minimal, Combat incomplete.

Bottom line: 1 level could potentially be fully done by Oct. 31.

19 of 20

Actual Result

The artistic final form of the UI, tutorial, and scene sprites took more time than expected. Had a long debug marathon using the “vial” resource bars, as it took me several hours to realize that the resource math was trying to use the entire height of the image to determine bar draw %.��Added Graveyard Fence portions to make the scene look less bland. Plans to use different tile sets were postponed indefinitely after setbacks with sprites.

Added and intro portion and voiceovers that was an unexpected bonus, wrote a poem, used a free AI TTS, plopped them on the images I made to comic frame the intro story.

First level and first boss level fleshed out. Did not get to implement movement abilities, prototyping the “Wall Kick” revealed multiple bugs and never fully worked, others would have been a nightmare. Did implement the Heavy Attack to use Gift resource, and I would have expanded on the idea given more time (leveling or skill tree).��Did not get to implement more thoughtful enemy AI or attack animations. With time running out and other obligations it was difficult enough to get the boss to have an attack. ��Original plan was to have the Ghoul lunge and leap from wall to wall, and across the screen, requiring quick movements on the player’s part. Resorted to a makeshift intermission phase where he leaps to the wall nearly out of reach and zombies spawn around the player.

20 of 20

Tools and Resources

Tips and Tricks to Concept art with AI:

  • Don’t get discouraged, it's like talking to Mr. Bean, it's going to piss you off.
  • This could take hours.
  • No, really….
  • Be VERY SPECIFIC.
  • Not just in what you want, but �HOW you want it. Color palettes, ‘feel’, if you want to make it look like something, say so.
  • Make sure it knows everything you want is “Artistic”. You will still have conflicts about anything implying violence, nudity, copyright, etc.
  • When you have it the way you want it, tell it to “SCALE” or “CONVERT” the image to “128x128px Pixel Art on alpha channel”.
  • DO NOT ATTEMPT TO SPRITE SHEET VIA AI. THEY HAVE THE BIG DUMB.