aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXander Swan <[hidden email]>2026-01-05 21:09:58 -0500
committerXander Swan <[hidden email]>2026-01-05 21:09:58 -0500
commitf7a888849d8ed51bac21e41a9366e8e052aba3e5 (patch)
tree00e04b16c41155b1f7a260e051a472728feb33c1
parent7113c3bedbe48341507444bd28f1e832101eb2a0 (diff)
Improve jump animations hopefully ???
-rw-r--r--player.asebin0 -> 7598 bytes
-rw-r--r--res/ase/player.asebin6696 -> 6589 bytes
-rw-r--r--res/player.json54
-rw-r--r--res/player.qoibin3300 -> 4228 bytes
-rw-r--r--src/draw/sprite.odin6
-rw-r--r--src/player.odin10
6 files changed, 65 insertions, 5 deletions
diff --git a/player.ase b/player.ase
new file mode 100644
index 0000000..316a35e
--- /dev/null
+++ b/player.ase
Binary files differ
diff --git a/res/ase/player.ase b/res/ase/player.ase
index a700885..4f637ae 100644
--- a/res/ase/player.ase
+++ b/res/ase/player.ase
Binary files differ
diff --git a/res/player.json b/res/player.json
index 459f272..4974248 100644
--- a/res/player.json
+++ b/res/player.json
@@ -160,6 +160,51 @@
"spriteSourceSize": { "x": 0, "y": 0, "w": 16, "h": 17 },
"sourceSize": { "w": 16, "h": 17 },
"duration": 100
+ },
+ {
+ "filename": "player 18.ase",
+ "frame": { "x": 288, "y": 0, "w": 16, "h": 17 },
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": { "x": 0, "y": 0, "w": 16, "h": 17 },
+ "sourceSize": { "w": 16, "h": 17 },
+ "duration": 100
+ },
+ {
+ "filename": "player 19.ase",
+ "frame": { "x": 304, "y": 0, "w": 16, "h": 17 },
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": { "x": 0, "y": 0, "w": 16, "h": 17 },
+ "sourceSize": { "w": 16, "h": 17 },
+ "duration": 100
+ },
+ {
+ "filename": "player 20.ase",
+ "frame": { "x": 320, "y": 0, "w": 16, "h": 17 },
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": { "x": 0, "y": 0, "w": 16, "h": 17 },
+ "sourceSize": { "w": 16, "h": 17 },
+ "duration": 100
+ },
+ {
+ "filename": "player 21.ase",
+ "frame": { "x": 336, "y": 0, "w": 16, "h": 17 },
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": { "x": 0, "y": 0, "w": 16, "h": 17 },
+ "sourceSize": { "w": 16, "h": 17 },
+ "duration": 100
+ },
+ {
+ "filename": "player 22.ase",
+ "frame": { "x": 352, "y": 0, "w": 16, "h": 17 },
+ "rotated": false,
+ "trimmed": false,
+ "spriteSourceSize": { "x": 0, "y": 0, "w": 16, "h": 17 },
+ "sourceSize": { "w": 16, "h": 17 },
+ "duration": 100
}
],
"meta": {
@@ -167,14 +212,15 @@
"version": "1.x-dev",
"image": "player.qoi",
"format": "RGBA8888",
- "size": { "w": 288, "h": 17 },
+ "size": { "w": 368, "h": 17 },
"scale": "1",
"frameTags": [
{ "name": "idle", "from": 0, "to": 5, "direction": "forward", "color": "#fe5b59ff" },
{ "name": "run", "from": 6, "to": 13, "direction": "forward", "color": "#f7a547ff" },
- { "name": "sleep", "from": 14, "to": 17, "direction": "forward", "color": "#57b9f2ff" }
- ],
- "slices": [
+ { "name": "jump_up", "from": 14, "to": 15, "direction": "forward", "color": "#6acd5bff" },
+ { "name": "jump_trans", "from": 16, "to": 16, "direction": "forward", "color": "#6acd5bff" },
+ { "name": "jump_down", "from": 17, "to": 18, "direction": "forward", "color": "#6acd5bff" },
+ { "name": "sleep", "from": 19, "to": 22, "direction": "forward", "color": "#57b9f2ff" }
]
}
}
diff --git a/res/player.qoi b/res/player.qoi
index 8878606..6060029 100644
--- a/res/player.qoi
+++ b/res/player.qoi
Binary files differ
diff --git a/src/draw/sprite.odin b/src/draw/sprite.odin
index aec6c61..ebe2e08 100644
--- a/src/draw/sprite.odin
+++ b/src/draw/sprite.odin
@@ -18,6 +18,8 @@ Sprite :: struct {
offset: Vec2,
rotation: f32,
scale: Vec2,
+
+ just_finished_loop: bool,
}
init_sprite :: proc(
@@ -56,6 +58,8 @@ set_sprite_active_tag :: proc(sprite: ^Sprite, tag_name: string) {
}
update_sprite :: proc(sprite: ^Sprite, dt: f32) {
+ sprite.just_finished_loop = false
+
sprite.frame_time += dt
tag := sprite.anim.frame_tags[sprite.active_anim]
@@ -69,9 +73,11 @@ update_sprite :: proc(sprite: ^Sprite, dt: f32) {
if sprite.current_frame < tag.from {
sprite.current_frame = tag.to
+ sprite.just_finished_loop = true
}
if sprite.current_frame > tag.to {
sprite.current_frame = tag.from
+ sprite.just_finished_loop = true
}
}
diff --git a/src/player.odin b/src/player.odin
index 149e1ce..de5a66b 100644
--- a/src/player.odin
+++ b/src/player.odin
@@ -41,7 +41,6 @@ player: struct {
state: Player_State,
outside_room: bool,
-
has_double_jumped: bool,
}
@@ -114,6 +113,15 @@ default_state :: proc(dt: f32) {
if .DOWN in body.collisions {
player.coyote_time = PLAYER_COYOTE_TIME
player.has_double_jumped = false
+ } else {
+ switch body.vel.y {
+ case -math.INF_F32..<-50:
+ draw.set_sprite_active_tag(&player.sprite, "jump_up")
+ case 50..<math.INF_F32:
+ draw.set_sprite_active_tag(&player.sprite, "jump_down")
+ case:
+ draw.set_sprite_active_tag(&player.sprite, "jump_trans")
+ }
}
if player.jump_buffer > 0 {