Comments (4)
Here is the full backtrace
Singularity rustarok_latest.sif:/code> RUST_BACKTRACE=full cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.60s
Running `target/debug/rustarok`
[00:00:04.421] (7fc375044f40) INFO GRF loading: 4421ms
[00:00:04.944] (7fc375044f40) INFO rsw loaded: 123ms
[src/asset/gat.rs:137] non_walkable_cells.iter().filter(|&&it| it).count() = 60788
[src/asset/gat.rs:184] rectangles.len() = 1317
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: Other, message: "Read-only file system" }', src/libcore/result.rs:1084:5
stack backtrace:
0: 0x55e7d2ae990b - backtrace::backtrace::libunwind::trace::h89fcc71e59e3bc5b
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/src/backtrace/libunwind.rs:88
1: 0x55e7d2ae990b - backtrace::backtrace::trace_unsynchronized::h0bad9be1379e729a
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/src/backtrace/mod.rs:66
2: 0x55e7d2ae990b - std::sys_common::backtrace::_print::hd3382a1f33c473da
at src/libstd/sys_common/backtrace.rs:47
3: 0x55e7d2ae990b - std::sys_common::backtrace::print::h0ec6f03cfb8e76a6
at src/libstd/sys_common/backtrace.rs:36
4: 0x55e7d2ae990b - std::panicking::default_hook::{{closure}}::h96cbf7b454e3f557
at src/libstd/panicking.rs:200
5: 0x55e7d2ae95e6 - std::panicking::default_hook::h95a8f00337383d83
at src/libstd/panicking.rs:214
6: 0x55e7d2aea07d - std::panicking::rust_panic_with_hook::h92f98b46e22f14ed
at src/libstd/panicking.rs:477
7: 0x55e7d2ae9c02 - std::panicking::continue_panic_fmt::h25abfbb4e5b7043a
at src/libstd/panicking.rs:384
8: 0x55e7d2ae9ae6 - rust_begin_unwind
at src/libstd/panicking.rs:311
9: 0x55e7d2b06b9d - core::panicking::panic_fmt::h7e9f94035af782b3
at src/libcore/panicking.rs:85
10: 0x55e7d2b06c97 - core::result::unwrap_failed::hf7591c1dd9412006
at src/libcore/result.rs:1084
11: 0x55e7d18dfb80 - core::result::Result<T,E>::unwrap::he99716b5bd479fb8
at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libcore/result.rs:852
12: 0x55e7d1cfd5f2 - rustarok::asset::gat::Gat::load::h5f7cfb0dbf5f6a46
at src/asset/gat.rs:98
13: 0x55e7d1b8d2ad - rustarok::asset::AssetLoader::load_gat::h6df7cf26be4c8b32
at src/asset/mod.rs:225
14: 0x55e7d1a7f08b - rustarok::runtime_assets::map::load_map::{{closure}}::h8167556557d793ca
at src/runtime_assets/map.rs:103
15: 0x55e7d1c2de82 - rustarok::common::measure_time::h4c287301525f77ad
at src/common.rs:7
16: 0x55e7d19eb436 - rustarok::runtime_assets::map::load_map::h65ca5dfd2f8caa64
at src/runtime_assets/map.rs:103
17: 0x55e7d1d3cf95 - rustarok::main::hb7c72c5818772e1c
at src/main.rs:158
18: 0x55e7d1b6eb30 - std::rt::lang_start::{{closure}}::h81a88e942b930602
at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libstd/rt.rs:64
19: 0x55e7d2ae9a83 - std::rt::lang_start_internal::{{closure}}::h4e93c1949c7a1955
at src/libstd/rt.rs:49
20: 0x55e7d2ae9a83 - std::panicking::try::do_call::h9440ccd4dc467eaa
at src/libstd/panicking.rs:296
21: 0x55e7d2aee8da - __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:80
22: 0x55e7d2aea58d - std::panicking::try::hc046e7ee42ee744f
at src/libstd/panicking.rs:275
23: 0x55e7d2aea58d - std::panic::catch_unwind::h27dfc457c200aee0
at src/libstd/panic.rs:394
24: 0x55e7d2aea58d - std::rt::lang_start_internal::hea1b49a567afe309
at src/libstd/rt.rs:48
25: 0x55e7d1b6eb09 - std::rt::lang_start::h3d0a7211be25b391
at /rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libstd/rt.rs:64
26: 0x55e7d1d4314a - main
27: 0x7fc3791bc09b - __libc_start_main
28: 0x55e7d171532a - _start
29: 0x0 - <unknown>
from rustarok.
Hi, nice catch!
TL;DR: Comment out the code in gat.rs from line 98 to 115, or make it optional based on having write rights.
Long story:
The game read map walkability data from the map file, but its resolution is single-cell based. So generating nphysics rectangles for all the cells separately is expensive and the game would be really slow. Therefore, there is an algorithm which merges single cells into the largest possible rectangles, it reduces the number of rectangles the game has to create from ~90k to 100-300 in some maps.
However this merging takes time, so I cached its result and wrote into a file. By commenting out those lines, you skip this caching part and the game will always do the merging process on startup.
from rustarok.
Awesome! Let me give this a try.
from rustarok.
I fixed the issue and tested it with a read-only working directory, it worked.
Thanks for noticing the bug!
from rustarok.
Related Issues (8)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rustarok.