Coder Social home page Coder Social logo

luckyturtledev / mission2teegarden-b Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 80.99 MB

a journey to the unexplored planet Teegarden b

Home Page: https://hci.rwth-aachen.de/m3-mission-to-teegarden-b

License: GNU Affero General Public License v3.0

Rust 100.00%
game m3 pybadge rwth rwth-aachen rwth-aachen-university multimodal-media-madness rwth-i10 rwth-hci

mission2teegarden-b's Introduction

🪐 Mission to Teegarden b

License: AGPL-3.0-or-later v0.1.1 GitHub tag (latest SemVer pre-release) Packaging status Source Code Repository Rust Version: ^1.70

Welcome to a journey to the unexplored planet Teegarden b, to find a new home for humanity. Robots were sent to the planet’s surface for exploration. Program these robots from the safety of your spaceship, by using your pybadge.

What hazards await you on the planet? Face them with up to 4 players. Work together to solve all puzzles and challenges. Will you be able to prepare everything, so humans can arrive on the planet?
Try out Mission to Teegarden b now for free and figure it out.

Installation (Pc):

Mission to Teegarden b is available at the following repositories:

Packaging status

Prebuild binaries can also be downloaded from the GitHub release. On Unix system the binary must may be marked as executable by running chmod u+x mission2teegarden-b afer unpacking the zip archive. On Linux the following dependencies are needed. Regular these are already installed.

Mission to Teegarden b is only tested on Arch Linux and Ubuntu. MacOS and Windows versions complie sucessfull but are untested. Supressing standby on MacOS is temporary disable, see #157.

Building from source:

Alternative you can easily build Mission to Teegarden b by yourself:

  • On Linux, install the following development dependencies. On some distros (like Alpine and Debian), separate development packages exist, regular suffixed with -dev. If this is the case, make sure that you have also installed the *-dev version.

  • Install rust

  • Download and unpack the source code.

  • Run cargo install --path pc --locked inside the unpacked folder, to build and install mission2teegarden-b. See the rust book for more information about cargo install.

  • Make sure that ~/.cargo/bin is listed in the PATH environment variable otherwise, the mission2teegarden-b executable can not be found.

Flash Pybadge:

  • Install an UF2 flasher. I recommend using hf2-cli.
  • Download and unpack Pybadge binary from GitHub release.
  • Press the reset button of the pybdage twice, to enter the bootloader.
  • After this, execute hf2 elf mission2teegarden-b-pybadge.elf (or the corresponding command of your flashing tool) to flash the binary to the pybadge.
  • Press the reset button again.

Building from source:

Alternative you can build m3 by yourself:

  • Install rustup
  • Install hf2-cli flasher.
  • Install the rust thumbv7em-none-eabihf target (the architecture of the pybadge) by executing rustup target install thumbv7em-none-eabihf.
  • Optional: install nightly toolchain for better error messages at the pybadge. rustup toolchain install nightly --target thumbv7em-none-eabihf
  • Download and unpack the source code (if not already done).
  • Press the reset button of the pybadge twice to enter bootloader
  • Compile and flash program by running cargo +nightly run --release -locked inside the downloaded pybadge folder. +nightly is optional and have to be left out if the “install nightly toolchain” step was skip. Please use +nightly for bug reports.
  • Press the reset button again.

Map/Level Editor:

Mission to Teegarden b allow creating custom maps/levels, by using the powerfull Tiled Map editor. See here for more information about creating maps.

mission2teegarden-b's People

Contributors

atlasnr3 avatar ipagaxi avatar luckyturtledev avatar msrd0 avatar

Watchers

 avatar

mission2teegarden-b's Issues

Card: flare gun

Player can a flare gun with a specific color.

Other player can play a card to wait unit they see the flare .

Todo: map v3

  • The tmx map needs an way to define available cards for the current level.
  • We also need an option to define the start rotation of the players cars.
  • Migrate from self-rust-tokenize to serde

Looks like self-rust-tokenize does always try to use Vec. This does not work at no-std context.

implementation suggestions:

  • use tmx map properties

cars, tanks or robots

We should decide what we want to use as vehicle.
We need something that can rotate on position, to make movement easier for the player.

[BUG] car drive outside after crash.

If two cars crash at the edge of the map and one of them plans to drive outside the map at the next move, it does still drive outside after the crash.

Fix car movements bugs

  • Cars rotate sometimes after Game Over
  • Cars should disappear only when the move visually out of map

fix `file` commandline argument

The file commandline argument in mission2teegarden-b play [FILE] does currently do nothing. This should be fix or removed until release.

[BUG] detect crash false positiv

The following solutions has create an false positive crash on level 003 (e32d3d9).
However I can not produce this current anymore.

 ⚙️ DEBUG m3_pc::usb > recieve message form "/dev/ttyACM0" GameEvent(Solution([Some(Wait(2)), Some(Right), Some(Wait(2)), Some(Left), Some(Wait(2)), Some(Left), None, None, None, None, None, None]))
 ⚙️ DEBUG m3_pc::usb > recieve message form "/dev/ttyACM1" GameEvent(KeyPressed(Start))
 ⚙️ DEBUG m3_pc::usb > recieve message form "/dev/ttyACM1" GameEvent(Solution([Some(Left), Some(Left), Some(Left), None, None, None, None, None, None, None, None, None]))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(Driving)
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(Driving)
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(CurrentCardIndex(Some(0)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(Some(0)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(Some(1)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(CurrentCardIndex(Some(1)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(CurrentCardIndex(Some(2)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(Some(2)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(CurrentCardIndex(Some(2)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(CurrentCardIndex(Some(2)))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM0" GameEvent(GameOver(Crash))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(CurrentCardIndex(None))
 ⚙️ DEBUG m3_pc::usb > send message to "/dev/ttyACM1" GameEvent(GameOver(DriveAway))

Story telling

Why should the player play this game?

We need some motivation for the player.

Validate tileset at map

When loading the map from tmx/tilde it should be ensure that tiles is from correct tileset. Currently we simple create a wrong tile, as long the tile id is valid.

Todo: calculate next car position

#10 does evaluate, the moments witch the car would like to do. But we need also check if they are possible and handle the absolute car position + rotation.

Todo: car movement

depend on #12

implementation suggestions:

  • store last full field position and rotation for each car
  • store next full goal/action and rotation for each car
  • store delta time since reaching last full field position

panics after level start

Game does panic if it does start from a different file working directory as workspace.

 ℹ INFO  mission2teegarden_b::usb      > player join from port /dev/ttyACM0
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: FileError { kind: IOError(Os { code: 2, kind: NotFound, message: "No such file or directory" }), path: "assets/img/Animations/crash_fire_2.png" }', pc/src/animations.rs:9:14

similar to #134

panics after start

Game does panic if it does start from a different file working directory as workspace.

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: FileError { kind: IOError(Os { code: 2, kind: NotFound, message: "No such file or directory" }), path: "assets/img/Menu/menu_background.png" }', pc/src/menu.rs:93:14
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Probably solution:
Graphic should not be loaded from file, instead it should be part of the Textures struct.

last polishments

  • do not crash with not existing cars
  • pybadge should show which player it does control
  • allow retrys
  • check if car reach goal and remove it
  • crash with stones

Add some levels

We need some levels for the presentation.
Should be to temporary fine to hardcore the active level and to switch it live.

Todo: pybadge gui

simple gui to select cards

  • select cards
  • line break cards
  • send cards to pc
  • remove cards
  • count of wait card
  • game over screen
  • load level (currently hardcoded)
  • retrys (keep previous solution, but allow editing)

Check Player at map

Since the pc crate claims that player n-1 exist if player n exist (n>1). We should validate this at map creation.

combine every think

We need to glue everything together.
This includes:

  • sending level to players, if they join
  • timeout for creating solution
  • timeout for driving
  • retry if player has failed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.