aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXander Swan <[hidden email]>2026-01-02 22:16:57 -0500
committerXander Swan <[hidden email]>2026-01-02 22:16:57 -0500
commit7113c3bedbe48341507444bd28f1e832101eb2a0 (patch)
tree0aff76013890708ce28b0784ba4477d468a6d698
parentdb7bdc1a6752a1fccf140a1a86fd3106d7403df5 (diff)
Double jump
-rw-r--r--res/room_begin.tmj18
-rw-r--r--res/world.tiled-session2
-rw-r--r--src/main.odin31
-rw-r--r--src/player.odin23
4 files changed, 58 insertions, 16 deletions
diff --git a/res/room_begin.tmj b/res/room_begin.tmj
index a5e7cf3..e483cc0 100644
--- a/res/room_begin.tmj
+++ b/res/room_begin.tmj
@@ -6,16 +6,16 @@
"data":[40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 31, 19, 19, 28,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 16,
- 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 31, 19, 19, 19, 31, 19, 31, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 40, 21, 19, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 27, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,
- 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 7,
+ 40, 40, 40, 40, 40, 40, 40, 40, 27, 31, 19, 31, 19, 19, 19, 31, 19, 31, 19, 19, 17, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 40, 40, 40, 40, 21, 31, 31, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,
+ 40, 40, 21, 19, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 40, 21, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 27, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41,
32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 32, 0, 0, 0, 0, 0, 0, 5, 9, 20, 9, 20, 20, 20, 18, 20, 20, 18, 18, 9, 18, 9, 18, 6, 0, 0, 0, 0, 0, 33,
+ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,
+ 32, 0, 0, 0, 0, 0, 0, 5, 9, 20, 9, 20, 20, 20, 18, 20, 20, 18, 18, 9, 18, 9, 18, 6, 0, 0, 0, 0, 0, 7,
32, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 8, 0, 0, 0, 0, 0, 7,
11, 0, 0, 0, 0, 0, 0, 7, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 38, 9, 9, 18, 18, 9, 39,
0, 0, 0, 5, 9, 20, 9, 44, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
diff --git a/res/world.tiled-session b/res/world.tiled-session
index e38b017..b5833be 100644
--- a/res/world.tiled-session
+++ b/res/world.tiled-session
@@ -21,7 +21,7 @@
"selectedLayer": 0,
"viewCenter": {
"x": 505,
- "y": 246.5
+ "y": 245.5
}
},
"tileset.tsj": {
diff --git a/src/main.odin b/src/main.odin
index 541046b..508f97c 100644
--- a/src/main.odin
+++ b/src/main.odin
@@ -28,6 +28,33 @@ state: struct {
platform_list: Entity_List(Platform),
}
+logger: log.Logger
+
+// raylib_log :: proc "c" (
+// msg_type: rl.TraceLogLevel,
+// fmt: cstring,
+// args: ^c.va_list,
+// ) {
+// context = runtime.default_context()
+// context.logger = logger
+//
+// fmt_len := libc.vsnprintf(nil, 0, fmt, args)
+//
+// msg_bytes := make([]u8, fmt_len + 1, allocator = context.temp_allocator)
+// log.info(len(msg_bytes), raw_data(msg_bytes))
+// log.info(libc.vsnprintf(raw_data(msg_bytes), len(msg_bytes), fmt, args))
+//
+// msg := string(msg_bytes)
+//
+// #partial switch msg_type {
+// case .DEBUG: log.debug(msg)
+// case .INFO: log.info(msg)
+// case .WARNING: log.warn(msg)
+// case .ERROR: log.error(msg)
+// case .FATAL: log.fatal(msg)
+// }
+// }
+
init :: proc() {
state.camera.zoom = 1
// state.camera.offset = {draw.SCREEN_WIDTH/2, draw.SCREEN_HEIGHT/2}
@@ -109,10 +136,12 @@ main :: proc() {
}
}
- logger := log.create_console_logger()
+ logger = log.create_console_logger()
context.logger = logger
defer log.destroy_console_logger(logger)
+ // rl.SetTraceLogCallback(raylib_log)
+
rl.InitWindow(480 * 2, 360 * 2, "Demonchime")
rl.SetWindowState({.WINDOW_RESIZABLE})
diff --git a/src/player.odin b/src/player.odin
index 5c001da..149e1ce 100644
--- a/src/player.odin
+++ b/src/player.odin
@@ -12,8 +12,9 @@ import "tiled"
PLAYER_SPEED :: 100
PLAYER_ACCEL :: 10
PLAYER_JUMP_FORCE :: 350
+PLAYER_DOUBLE_JUMP_FORCE :: 250
PLAYER_JUMP_BUFFERING :: 0.07
-PLAYER_COYOTE_TIME :: 0.05
+PLAYER_COYOTE_TIME :: 0.06
PLAYER_JUMP_RELEASE_CUT :: -100
PLAYER_DASH_SPEED :: 500
@@ -38,7 +39,10 @@ player: struct {
dash_timer: f32,
state: Player_State,
+
outside_room: bool,
+
+ has_double_jumped: bool,
}
init_player :: proc() {
@@ -109,12 +113,21 @@ default_state :: proc(dt: f32) {
if .DOWN in body.collisions {
player.coyote_time = PLAYER_COYOTE_TIME
+ player.has_double_jumped = false
}
- if player.jump_buffer > 0 && player.coyote_time > 0 {
- player.jump_buffer = 0
- player.coyote_time = 0
- body.vel.y = -PLAYER_JUMP_FORCE
+ if player.jump_buffer > 0 {
+ if player.coyote_time > 0 {
+ body.vel.y = -PLAYER_JUMP_FORCE
+
+ player.jump_buffer = 0
+ player.coyote_time = 0
+ } else if !player.has_double_jumped {
+ body.vel.y = -PLAYER_DOUBLE_JUMP_FORCE
+ player.has_double_jumped = true
+
+ player.jump_buffer = 0
+ }
}
if .DOWN not_in body.collisions \