roguelike-tutorial
roguelike-tutorial copied to clipboard
tcod version 5 is broken
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.
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.