roguelike-tutorial icon indicating copy to clipboard operation
roguelike-tutorial copied to clipboard

tcod version 5 is broken

Open HarrisonHemstreet opened this issue 4 years ago • 2 comments

HarrisonHemstreet avatar Mar 13 '21 23:03 HarrisonHemstreet

Greetings @HarrisonHemstreet. Thanks for the bug report, but that's little to go on. It would be helpful to know what/how exactly is broken. At the minimum describe what you're doing (what commands you run etc.) and paste the error messages you see here.

I found this project and tried to run it locally: https://github.com/HarrisonHemstreet/RougueLike-Rust

And while it built correctly, when I pressed a key, it panicked with:

thread 'main' panicked at 'attempted to leave type `bindings::ffi::TCOD_key_t` uninitialized, which is invalid', /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/mem/mod.rs:659:9
stack backtrace:
   0: rust_begin_unwind
             at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/std/src/panicking.rs:493:5
   1: core::panicking::panic_fmt
             at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/panicking.rs:92:14
   2: core::panicking::panic
             at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/panicking.rs:50:5
   3: core::mem::uninitialized
             at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/mem/mod.rs:659:9
   4: tcod::input::check_for_event
             at /home/shadower/.cargo/registry/src/github.com-1ecc6299db9ec823/tcod-0.15.0/src/input.rs:193:53
   5: rouguelike_rust::play_game
             at ./src/main.rs:1835:15
   6: rouguelike_rust::main_menu
             at ./src/main.rs:1917:17
   7: rouguelike_rust::main
             at ./src/main.rs:1960:5
   8: core::ops::function::FnOnce::call_once
             at /rustc/cb75ad5db02783e8b0222fee363c5f63f7e2cf5b/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

This has been fixed in the master branch of tcod-rs, so updating your Cargo.toml to this should fix it:

[package]
name = "rouguelike-rust"
version = "0.1.0"
authors = ["Harrison <[email protected]>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
tcod = { git = "https://github.com/tomassedovic/tcod-rs.git", features = ["serialization"] }
rand = "0.3"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

[dependencies.tcod-sys]
git = "https://github.com/tomassedovic/tcod-rs.git"
features = ["dynlib"]

(it changes the version field for both tcod and tcod-sys with a link to the git repo)

But both tcod (the Rust bindings, not the original libtcod C/C++ library) and this tutorial are no longer maintained. I recommend you check out this tutorial instead: http://bfnightly.bracketproductions.com/rustbook/

It is maintained and uses the bracket-lib crate which is written in pure Rust and again, is maintained.

tomassedovic avatar Mar 14 '21 08:03 tomassedovic

I am not sure if this is related or not, but I made it to the end of part 7 before I experienced an issue.

In part 7, when we get to the part where we have to change the way we check for input to this:

// Check for Input.
match input::check_for_event(input::MOUSE | input::KEY_PRESS) {
    Some((_, Event::Mouse(m))) => tcod.mouse = m,
    Some((_, Event::Key(k))) => tcod.key = k,
    _ => tcod.key = Default::default(),
}

Then Default::default() would throw a run time error (panic) for me.

I could not find any problems or differences between my code against the code on github.

Sorry, I don't have the error handy to copy and paste, I changed my .toml file to the code posted above, and it appears to have fixed the problem.

frederickjjoubert avatar Jul 21 '22 22:07 frederickjjoubert