diff options
| author | Xander Swan <[hidden email]> | 2026-01-02 22:16:57 -0500 |
|---|---|---|
| committer | Xander Swan <[hidden email]> | 2026-01-02 22:16:57 -0500 |
| commit | 7113c3bedbe48341507444bd28f1e832101eb2a0 (patch) | |
| tree | 0aff76013890708ce28b0784ba4477d468a6d698 | |
| parent | db7bdc1a6752a1fccf140a1a86fd3106d7403df5 (diff) | |
Double jump
| -rw-r--r-- | res/room_begin.tmj | 18 | ||||
| -rw-r--r-- | res/world.tiled-session | 2 | ||||
| -rw-r--r-- | src/main.odin | 31 | ||||
| -rw-r--r-- | src/player.odin | 23 |
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 \ |
