Awesome
What is this?
Single player 3d shooter written in Rust and based on fyrox engine
How to build
Cargo.toml contains hardcoded relative path to engine fyrox = { path = "../Fyrox" }
, so you have to change this or put engine folder near the game folder to get game compile, because it always uses latest fyrox which could be not published on crates.io.
In other words you can do something like this:
git clone https://github.com/FyroxEngine/Fyrox
git clone https://github.com/mrDIMAS/rusty-shooter
cd rusty-shooter
cargo run --release
Or if you're updating to the latest version, do this:
cd fyrox
git pull
cd ../rusty-shooter
git pull
cargo run --release
Gameplay video
Keep in mind that it can be different from latest version!
Screenshots
Plan
- Player movement
- Walk
- Jump
- Crouch - it does not check if you have enough space to stand up and may push you off level. Also when standing up character jumps.
- Run
- Weapons
- AK47
- M4
- Plasma
- Grenade launcher.
- Rocket launcher.
- Lightning gun.
- Machine gun.
- Projectiles. More should be added.
- Bullet
- Plasma ball
- Rocket
- Grenade
- Nail
- Level - shitty version of legendary q3dm6 level is implemented. Good enough for tests, bad gameplay wise.
- Jump pads - works similar as in Quake 3: actor touches jump pad, it shoots you in specified position.
- Items. List should be extended when new weapons or items are added.
- Health pack
- AK47 ammo
- Plasma ammo
- M4 ammo
- Respawn - player and bots will respawn after death. Still need to think a way of how this will work with game modes.
- Spawn points - done, actors will respawn on points with least amount of enemies nearby.
- Stupid bots - dumb bots that follows you in a straight line are done. Next iteration needed.
- Main menu
- New game
- Save game
- Load game
- Options
- Quit
- Options
- Controls
- Common key bindings
- Mouse sensitivity
- Mouse inversion
- Reset to defaults
- Mouse smoothing
- Camera shaking
- Unique key binding
- Graphics
- Resolution
- Fullscreen - checkbox is not doing anything
- Spot shadows
- Soft spot shadows
- Spot shadows distance
- Point shadows
- Soft point shadows
- Point shadows distance
- Sound
- Sound volume
- Music volume
- HRTF
- Controls
- Save/load - game state can be saved/loaded at any time.
- HUD
- Ammo
- Health
- Armor
- Game mode specific score
- Death match
- Team death match
- Capture the flag
- Bot whip attack - bots can punch you in the face you stand too close to them.
- Damage
- Bots animations - more or less done, bots are fully animated and has configured animation machines. This can change if there will be a need for more animations.
- Sparks when projectile hit surface.
- Ability to pickup dropped weapons.
- Drop weapons when actor die.
- Give player some weapon on respawn.
- Events log - simple text-based event log - it shows all significant events - death of an actor, damage, etc.
- Pathfinding - based on navmesh.
- Death zones - places where actor dies immediately (space, death fog, squashed, telefragged, etc) is added
- Level editor - some simple level editor would be nice, for now I'll continue use ancient 3ds max 2012. Game items are placed on level using dummies which then are substituded with real items, this works but very uncomfortable because it is not WYSIWYG editor.
- Restyle UI. Main menu also should have some sort of background, not just black void.
- Loading screen - level loads asynchronously now.
- Environment interaction - its implemented partially - any actor can use jump pads, pick up items.
- More bots - there are only three bot kind available, there are a lot of free models on mixamo.com which can be used to add more bots.
- More levels - currently there is only one level which is boring as fuck.
- Add small interval between bots/player respawn
- Add something like "You died" text on HUD when player dies.
- Bots AI
- Vertical aiming
- Bots walking from item to item and shooting nearby targets
- Vision frustum for bots - bots can "see" only in front of them.
- Automatic weapon selection
- Remove "wall hack" from bots - currently bots can see thru walls and will try to shoot there.
- Make behaviour more natural
- Win/loss mechanics
- Bots hit reaction - partially done, bots have hit reaction animation but there is still no visual "proof" that is was hit. Some sort of blood splashes should be added as well as hit sound.
- Improve sound - many events in game still does not have sound. There are plenty of free sources with sounds, this should be used.
- Step sounds
- Shot sounds
- Music
- Item pickup
- Damage sound
- Jump sound
- Ambient sound
- Leader board - game mode specific leader board should be added.
- Bind to specific key
- Time limit
- Deathmatch
- Table of Name, Kills, Deaths, K/D Ratio
- Team death match
- Header with team score: Red Team Frags - Blue Team Frags
- Table of Name, Kills, Deaths, K/D Ratio
- Capture the flag
- Header with team score: Red Team Flags - Blue Team Flags
- Table of Name, Kills, Deaths, K/D Ratio
- Match options
- Time limit
- Match type
- Map
- Deathmatch
- Frag limit
- Team deathmatch
- Frag limit
- Capture the flag
- Flag limit
- Hit marks on surfaces - there is no "visual proof" that projectile has hit surface
-
Deathmatch
game mode - easiest game mode to implement.- Count kills per actor
- Game ends when an actor hits frag or time limit
- If timelimit hit, but there are more than one actor with same score - game continues.
-
Capture the flag
game mode - similar to Q3 game mode is nice to have.- Count flags per team
- Game ends when team hits flag limit or time limit
- If timelimit hit, but flag score is even - game continues.
-
Team deathmatch
game mode - again similar to Q3.- Count frags per team
- Game ends when team hits frag limit or time limit
- If timelimit hit, but frag score is even - game continues.
- Explosive decorations, this will diverse gameplay a bit.
- Barrels
- Mine
- Player's ability to punch enemies in face by weapon.