summaryrefslogtreecommitdiff
path: root/2022-09-24-190300_Nuki1Retrospective.md
blob: 6b9664f4e63c035ff66fc1c9a98dfa727966d3d6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
---
Author: pux
Tags: nuki1 nuki gamedev
Language: english
---

# 2022-09-24-190300_Nuki1Retrospective

## NUKI1 in Retrospective / dev-log

See here [NUKI1 - Nuki and I explore the Galaxy - on baden.dev](https://baden.dev/p/nuki1)

### Quick introduction

```NUKI1``` or ```Nuki and I explore the Galaxy``` is a puzzle-platformer mix, and my first commercially released game.

I tried to create a new unique genre-mix (in the somehow worn out platformer genre) implementing ideas that lingered in my mind for years, a lot of those inspired by some good old DOS games I played.

### Concept

At first I wanted to make a top-down puzzler game, but felt that I needed more "action" and "physics" like advanced and precise platformer movement and artillery-game and rocket movement.

Also, an inventory system with object interaction like in a RPG and puzzles that you need to solve in real life (on paper/via web lookup/etc.) were on my list.

At the end I decided to make the game in 10 unique levels and integrate all of my crazy genre-mix-ideas.

### Implementation

I started the game in Python only using tkinter as a "side-project", when I hit performance problems and coincidentally bought an ODROID GO SUPER device for cheap.

I thought it would be nice to support the ODROID, and from then on I rewrote the game in C++ with ODROID support in mind (wasn't far anyways).

I only wanted to use minimal dependencies, so it was SDL and tinyxml2, the rest of the game I wanted to write completely on my own, since that's where the fun lies! Writing physics/vector/math/... classes and basically the entire engine on my own!

### Programming

#### Not so fun

- Collision detection and handling
    - Wanted to have "pixel-perfect" collisions using AABB (Axis-Aligned Bounding Box) collisions with some second check of "penetration", which meant looking at how deep until the first row has a pixel that overlaps with other entity.
        - Getting this "okay" and also fast enough on the ODROID was quite challenging

- Music: I LOVE music and someday I hope I'll make something, for now I didn't want to use third party music, so...

#### The most fun

- Physics
    - Movement
        - Jump/Double-jump
        - Jetpacking
    - Trajectory (Bow, Projectiles)
        - Recoil gun
    - Spaceship movement

- Implementing the "ProNav" algorithm (see Wikipedia: https://en.wikipedia.org/wiki/Proportional_navigation) for homing missiles, especially after having the math/vector/linear algebra classes done

- Item usage / inventory usage
    - equipping items and have them change stuff in the game world

### Stats

All in all, with rewriting a huge part of the game (while getting better at C++), a lot of pixel painting and planning, I estimate around 1500 - 2500 hrs of work for everything.

A lof of time was lost in the first Py version, me getting better in C++ and rewriting a lot of stuff.

### Download

[https://baden.dev/p/nuki1](https://baden.dev/p/nuki1)
in each repos: see "about"-tab (if existing) for more details / README.
mailto contact at omeckman dot net
all timestamps in UTC (German winter time: UTC+01:00, summer time: UTC+02:00)
dark theme is a modded version of: https://gist.github.com/Yoplitein/f4b671a2ec70c9e743fa