Compare commits

..

3 commits

5 changed files with 46 additions and 29 deletions

View file

@ -1,11 +1,13 @@
# Marble Machinations Change Log
Game store page: https://crispypin.itch.io/marble-machinations
## [Unreleased]
## [unreleased]
## v0.3.0 - 2025-04-04
### added
- score number: bounding area
- configurable key bindings for many editor actions
- QWERTY+ASDFGH keybindings for the tile tools
- QWERTY+ASDFGH keybindings for the tile tools by default
- OS clipboard copy/paste, with fallback to old behavior when copying
- cut selection
- in-grid text comments (not yet editable in-game)

2
Cargo.lock generated
View file

@ -213,7 +213,7 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "marble-machinations"
version = "0.2.1"
version = "0.3.0"
dependencies = [
"arboard",
"raylib",

View file

@ -1,6 +1,6 @@
[package]
name = "marble-machinations"
version = "0.2.1"
version = "0.3.0"
edition = "2021"
default-run = "marble-machinations"

View file

@ -8,20 +8,26 @@ logic mostly like https://git.crispypin.cc/CrispyPin/marble
### meta
- engine tests
- blag post about marble movement logic
### game
### bugs
- modifier-less bindings trigger when typing in a text box, makes renaming existing blueprints basically impossible
### features
- comments
- editing
- add to all intro levels
- highlight regions with background colours
- UI layout engine
- global scale setting
- highlight regions with background colours
- button + binding to flip selection that is being pasted
- accessibility
- background colour setting
- hotkeys for everything (no mouse needed to play)
- menu navigation (requires UI rework)
- speed up/down
- grid cursor movement and placement
- grid zoom and pan
- more levels
- scroll output bytes
- timestamps in solutions and blueprints
- lock tile types for early levels to make it less overwhelming
- display tool variant more clearly (it's not obvious there are more states)
- better text rendering
- font selection (probably a lot of work)
@ -31,6 +37,7 @@ logic mostly like https://git.crispypin.cc/CrispyPin/marble
- show histograms
- author name in solutions and blueprints
### undecided
- hide some tile tools in early levels to make it less overwhelming
- footprint score (tiles that were non-empty at any point in the run)
- option to use 8-bit marbles?
- blueprint rotation?

View file

@ -1,27 +1,35 @@
use marble_machinations::marble_engine::{grid::Grid, Machine};
fn no_input_test(steps: usize, output: &[u8], grid: &str) {
let mut engine = Machine::new_empty();
engine.set_grid(Grid::from_ascii(grid));
for _ in 0..(steps - 1) {
engine.step();
}
assert_ne!(engine.output(), output, "output arrived early");
engine.step();
assert_eq!(engine.output(), output, "expected output");
}
#[test]
fn creating_marbles_cause_indirect_claim() {
let mut eng = Machine::new_empty();
eng.set_grid(Grid::from_ascii(
"
I
o 2
B- o
B | |-*-|
|-+o | |
*-| |* -B B-
1 3
I I
",
));
for _ in 0..9 {
eng.step();
}
assert_eq!(eng.output(), [1, 2, 3]);
no_input_test(3, &[1], " o \n|-*-|\n| 1 |\n-B B-\n I\n");
}
#[test]
fn bug_overlapping_marble_creation_blocks_tile_forever() {
no_input_test(
7,
&[1, 2, 3],
" I \no 3 o\n2I B+*\n B |1\n |-+\n*-| I\n\nI\n",
);
}
#[test]
fn bug_equal_comparator_order_lock() {
no_input_test(
6,
&[1, 2, 3, 4],
"I \n I\n21\n o\nBB|*-++\n|=+ |=-\n |+ BB\n\n 34\n\n I\n I\n",
);
}