Code Monkey home page Code Monkey logo

red-planet-rampage's Introduction

redplanetrampagetitlerender


Red Planet Rampage is a dieselpunk western-themed arena shooter where players face off with wacky modular guns. The game is developed by volunteers at Hackerspace NTNU and is free and open source!

Red Planet Rampage won the "Gamer's Choice" Award at Norwegian Game Awards 2024!


Story

The robots responsible for terraforming Mars have donned cowboy hats and started wreaking havoc with staged shootouts and competitions where they auction off rudimentary weapon parts assembled from scrap. Terraforming Inc. is still investigating the cause of this disturbance, but rumors point to a fateful upload of a western film.

Features

  • Modular weapons with wildly different parts; over 250 different combinations
  • Auctions where players bid on these weapon parts
  • Splitscreen multiplayer
  • Fast-paced movement

The weapon parts add even more to the mix!

  • Reload by playing a rhythm minigame or shaking a soda can
  • Shoot bouncing cowboy hats
  • Mount a frying pan at the end of your gun as a makeshift shield
  • Slay your frenemies in one hit with a rubber barrel that wiggles uncontrollably
  • And many more!

Links

Trailer

Gameplay trailer


Two players shooting at each other with their unique weapons: Gif of 2 players shooting their weapons

The auction for weapon parts: Gif of 2 players bidding on weapon parts

Project details

  • Unity version 2022.2.15f1
  • Unity URP

Conventions

Git

Branch naming: kebab-case. Prefix the branch name with a one-word description of the purpose of the branch, e.g. feature/main-menu or fix/wall-glitch.

Development

The development process is a variant of scrum structured as follows:

  • 2 week long sprints
  • Milestones containing 1 to 2 sprints
  • Short retrospectives at the end of milestones
  • Public issue-, and github-boards
  • All planned tasks are converted github issues and assigned to a team member
  • Public demos after ended milestones, preferably at public events
  • Official releases are made after ended milestones

Assets

Developers should strive to only use self-made assets. This rule is in place to encourage team members to learn all aspects of game development. The second reasoning is to keep the repository as open source as possible.

Troubleshooting

URP on Linux

Add -force-vulkan to command line arguments to avoid glitched scene view due to URP.

Building the game

There is a bug in this Unity version that gives build errors for missing "System.Diagnostics.Tracing". This is resolved by manually downgrading the version in "bcl.exe.config". The dependency should be replaced with the following:

<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />

red-planet-rampage's People

Contributors

toberge avatar fueredoriku avatar thomasjgabrielsen avatar sondrehus avatar karofmah avatar stektpotet avatar chriskrane avatar ddabble avatar crazyb1336 avatar davidspilde avatar dependabot[bot] avatar

Stargazers

 avatar François B. avatar Tobias Fremming avatar  avatar  avatar Buesch avatar  avatar Danil Ryzhan avatar Gaurav Agrawal avatar  avatar Andreas Winther Moen avatar  avatar  avatar  avatar Olav Kihle avatar

Watchers

 avatar  avatar

red-planet-rampage's Issues

Match Controller Component

Match Controller Component

Requirements

  • Keep track of rounds in a match.
    • Every match has multiple rounds
    • The player with 3 rounds won, wins the entire match
    • The round is a free for all
    • Round win condition is last person standing
    • First round is played with basic starting weapon (No bidding)
  • Chips (Currency for bidding)
    • You get 2 chips for winning a round
    • 1 chip as base each round
    • 1 chip for each player you killed during a round
    • Later in development you will get ~4 chips for selling a leg (as an example)
  • Integrate bidding into match system
  • Send players back to menu after match completion

Layered Music System

  • Music that persists between scenes
    • for the menu
  • Layers of synchronized tracks
  • Seamless transition between layers

Implement death

Turn players into ragdolls or something on death, prevent them from having any control over their characters.

Menu UI not interactable after match completion

When returned to the Menu scene, PlayerInputs will be transfered back to the scene, but are unable to interact with the UI despite having their input action remapped back to "Menu".

This seems to be a problem with how the Unity UI natively subscribes to the first (And only the absolute first) newly joined playerInput and nothing else, but I've yet to 100% confirm this.

Create map

Creation of a simple map that players can spawn, run around in, shoot in and hide.

Bidding v1

  • Player "wallet"
  • Items - for now represented as scriptableobjects (simple objects with attributes such as name, description - this is what we extend with UnityEvent/delegates later on)
  • Timer for when a deal closes

Implement gunplay in FPS mode

  • #40
    • Add guns to players
    • Let players shoot guns
  • #41
    • Add hitbox/health controllers to players
    • Make bullets know source player and pass this to victim
  • Separate first-person and scene guns

Integrate bidding to match

  • Create a "physical" bidding scene
  • Create a new inputMap specifically for bidding scene
  • #44
  • Implement PlayerInventory directly into PlayerManager
  • Integrate biddingRound to MatchManager
    • Round redirects to bidding
    • Bidding redirects to round
  • Implement viewable gunstats for each augment at auction
  • Countdown timer HUD
  • Viewable chip amount (over players heads?)

Player HUD

  • #48
  • Round counter
  • Remaining players counter
    • This should be easy to see from the other players' screens. We could show who killed a player there as well.

Singleton controlflow (script execution order)

Singletons currently in the project are somewhat unsafe, considering they can be disabled. They also don't follow any standard on "when" they're initialised, leading to potentially unpredictable/unwanted behaviour.


Safety:
A singleton script should consider the scenario where either the component itself or the game object it is attached to is disabled.
As the singleton instance can be accessed from anywhere at any time, we should handle the (likely unwanted) scenario where a singleton component is being disabled (either through the game object being disabled or the component itself being explicitly disabled).

  • Solution: do something in OnDisable in any singleton scripts - whether that be a warning log entry or otherwise, do something!

Initialisation:
As a singleton instance-field initialisation relies solely on itself, there is no reason - as I see it - for why any and all singletons should not be initialised in OnEnable, rather than in any of the later component messages. This may aid in reducing future annoyances in script execution order.

  • Solution: move static field initialisation (singleton) to OnEnable

Player Inputs should be mapped to assigned players

To use Player Input Manager's built in split screen functionality, one needs to assign cameras to each playerinput prefab.

My suggested solutions is to update the playerInput prefab to hold some specific values and components (Camera, color tied to player, player ID, etc.), then declare a Set-able refference property to this player input in the matching player prefab.

This way the player prefab can easily access the playerInput and the necessary components it holds, while avoiding the playerInput to be destroyed with the player prefab. (In case the game wants to destroy the player)

File Hierarchy & Naming convention

Our current file hierarchy is bit bad, in my opinion.

  • Unity already has built in quick searches for file types (prefabs, materials, scripts, etc.)
  • Having to navigate between many different folders when working on a single gameobject just because it has different types of components is annoying
  • Naming conventions are harder to follow (and often not even used!)

We should rather sort files by

  • Deciding on and following a good naming convention, to provide ease of access thorugh the asset search bar.
  • Organize folders and package according to features rather than file type.

Movement rubberbanding

Player characters tend to rubber-band after movement controls are released. They snap back to a previous position after a button is released

Flavor text on items

Items should have a field for flavor text and/or description of what they accomplish (e.g. "Stuns on hit").

Basic shooting

Weapon is remembered from the previous bidding round.
Players can shoot and kill each other
Last man standing wins, and we move to the next round

2 new augments of each type

To test out the practical development side of the new augment system, it was decided that someone other than @SondreHus should try to implement some augments. (The game need more augments too, ofc)

  • Augment of each type (Alex)
    • Body augment
    • Barrel augment
    • Extension augment
  • Augment of each type (Thomas)
    • Body augment
    • Barrel augment
    • Extension augment

Options Menu

Options menu accessible from main menu, with the following implementations:

  • Sound control
  • Screen resolution
  • Custom button mapping

Integrate existing bidding logic to the bidding scene

Remodel AuctionDrivers to be per podium in the auction room.

  • Pick an item from a stage
  • ...

Promote manager functionality and data management into a manager class (possibly singleton object?)

  • Who's in the auction still
  • ...

Improve projectile rendering

Two visual effect systems:

  • One for bullet path that controls the trail
  • One for the bullet trails, displaying a limited amount of bullet trails following the bullets

Settle on a theme and artstyle

Decide on the theme and artstyle of the game.

The current theme suggestion(s) are:

  • Robot western (Robot cattlepunk)

The current artstyle suggestion(s) are:

  • "Toony TF2"-like
  • Rusty scrapheap vibes
  • Steampunk-like

Missing some files for gitignore

Operating system related editor preference files are not gitignored, specifically:

  • ProjectSettings/Packages/com.unity.testtools.codecoverage/Settings.json
  • ProjectSettings/ShaderGraphSettings.asset

Might potentially be more, but haven't found others yet.

Menu

Creation of the main menu.
Players join by moving their controller
All players can press buttons (see Smash bros)
Players can move between ui elements

Contains
Start game / Quit Game

Hat Barrel

A barrel that converts bullets to hats that are placed on the heads of your enemies.

  • Model
  • Materials
  • Animation
  • Implementation

Death screen

Death screen that is displayed when a player is dead.
No need to display how many players are left when we're doing splitscreen!

  • Should indicate that the player is dead very clearly
    • Dark background (transparent overlay?)
    • Robot skull?
  • Should show who killed this player

Refactor SetPlayerInput functions' parameter

Every single SetPlayerInput function wishes to do something with the InputManager.

The InputManager script already holds a public refference to the playerInput it's tied to, and should thus itself be argument wich we pass to the various SetPlayerInput functions instead of the PlayerInput component.

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.