Giter Site home page Giter Site logo

gyakoo / spooky Goto Github PK

View Code? Open in Web Editor NEW
5.0 3.0 0.0 41.53 MB

One-month Jam game. C++/UWP/DirectX11. 3D first person shooter. Halloween themed.

C++ 54.04% HLSL 1.77% C# 1.42% Batchfile 0.20% SourcePawn 41.98% PHP 0.13% HTML 0.46%
game 3d render uwp fps old-school

spooky's Introduction

Spooky

Manu Marin
Game from scratch in c++/directx11/uwp for a one-month game jam, halloween themed.

October 31st 2016

GAME

  • First Person Shooter
  • Kill all enemies with treats and candies, room-by-room to open it up
  • When the room opens, you can hear a sound and the doors turns green, you can pass thru.
  • When all rooms are open, a boss will appear (see the dark red room in the minimap) and you'll have to defeat it. It's a bit hard!

Link to a video here (OneDrive): video

INSTALL

  • This Appx bundle is not signed for Store, but for Test/Developer.
  • Right-click on Add-AppDevPackage.ps1 and "Run with Powershell" (Admin mode)
  • Or double-click on .appxbundle if you have certificates installed already

ASSETS

CONTROLS

  • Mouse and Left-Click to look and shoot

  • WASD - For movement

  • F1 - Help screen

  • F5 - Toggle Fullscreen

  • Tab - Toggle Minimap

  • Esc - Exit or Menu

TOOLS

  • Microsoft Visual Studio 2015 Community Edition
  • C++ / DirectX11 / DirectXTK (I started from scratch using the DX Sample)
  • The code does not use any lib or code from any other library
  • GraphicsGale + Paint.net for sprites
  • https://twistedwave.com/online/# for sound editing

POSTMORTEM

Technical:

  • It randomly generates all rooms using BSP trees. Randomly generate room-profiles.
  • Only renders/update the room you are
  • BSP Portals were generated but does not make use of it in runtime.
  • Technically it is 2D (for collision/intersection against level). 3D for shotgun bullets.
  • Spotlight effect achieved tweaking exp fog density depending on where pixel is
  • 3 Pixel Shaders / 2 Vertex Shaders
  • Uses DirectXTK lib for Audio, Input.

What was right:

  • Reducing scope at right time
  • Not overengineering
  • Not making an engine but a game. Forgetting about internal code quality (ugly code). Just one month.
  • Not data driven, all hardcoded. Iteration times were fast enough.

What was wrong:

  • I made everything and spent more time on core than gameplay
  • On-the-fly design changes during development
  • Random level generation. It took too much time specially make all rooms connected.
    • Sometimes there are room clusters disconnected and some teleports are created

ORIGINAL IDEAS

  • Originally it was going to be a light RPG where you fight against bourocracy and other issues as an adult.
  • Due 5-minutes rule, I changed the design
  • The second design was a FPS but more focused on Mental Illness enemies (for awareness). Original ways to kill those ones.
  • Due time-constraint I changed a little de design as I wasn't sure if I was going to achieve a fun experience doing that.

KNOWN ISSUES

  • Some rooms can be generated disconnected. It's a major issue, but happens few times. Restart then.

    • Algorithm to find disconnected clusters has some bug.
  • Bad performance on Fullscreen on huge target sizes (4K)

    • Because the game RenderTarget is created out of actual Target and the Pixel Shader is unoptimized

-Manu [email protected]

spooky's People

Contributors

gyakoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

spooky's Issues

Sounds

  • girl will scream
  • every enemies they shoot
  • explosion on kill
  • heart beat on damage
  • explosion of pumpkins
  • candies falling ground after shoot?
  • room is finished, all clear
  • owl in open rooms

Menu, credits, splash screen, HUD

  • Splash screen with logos and disclaimer. Scarejam, Msft and Gaming Garage logos.
  • Menu. Single animation, spooky Adulthood logo
  • HUD, life, bullets, minimap
  • Help window on menu

[ANXIETY]

  • Parameter to change spotlight radius
  • Sound processing, heart beats and fading others
  • Decal messages
  • Floating messages that disappears when looked at
  • Drugs that changes you. Collision radius. Moving along paths.
  • Things coming to you
  • Kicking
  • The Monster! (A*) must work
  • Hands trying to catch you
  • Test how lighting in rooms might work in PS ?

Optimizations

  • Order sprites 3D by texture (already sort by distance). For this, we need to keep m_spritesToRender[] cached frame-by-frame rather than clearing it.
  • If time, all sprites atlas and the index is to array of rects in the atlas
  • Use BSP properly not linear
  • frustum culling and other visibility tests to render

Light/Darkness environment per-room basis.

When a room is finished, it should be clearer from lighting perspective, so everytime we enter/leave a room we should check if has been visited to make everything clearer.
New rooms are darker.

Receiving damage, die

  • We have to receive damage.
  • Way to express we're dying. Heartbeat. Blinking bar.
  • Life bar

Level generation and entities game logic

  • room-only entities
  • detect when room can be open
  • room profiles
    • cementerio (sin pilares)
    • normal con pilares
    • bosque
    • pila de cuerpos
    • gárgolas
    • manos por doquier
    • mensajes de miedo
    • campo de calabazas

Time-permitting

Ideally if any of following features is going to be implemented, extract a new issue/task or it and remove it from here:

  • black hands enemy path line movement logic
  • traps, spikes, killer bullets
  • key for boss and other doors
  • particles effects
  • treat/candy bombs
  • user can turn off the light (game design impact)

Pause

  • for when player dies
  • for before starts
  • for pause itself

[ART ASSETS]

Things to collide with:

  • Pillars
  • Tables, chairs, beds
  • Spider cobs
  • Billboards:
    • statues
    • hallow pumpkins
    • lamps

Pumpkin enemy logic

Explodes when it's close to you. There's two radius. Outer is to blink in red. Inner is to explore.

[GAME FLOW]

  • Simple state machine
  • Simple menu
  • HUD
    • Minimap
    • Compass
    • Life bar
    • Messages on screen, kida console
  • Progression in the game (levels completed...)
  • Credits

Doors

Add enabled flag to Collision Segments.

Black hands. Add logic

It also throws you a hand when you look at it and you're closer than radius. But this time won't loose any hand.

Minimap sizes and colors

  • Change yellow for green for player
  • Remove portals (green)
  • Size is too small for high resolution, compute as relative to resolution and aspect ratio
  • Boss' room color

[DEPRESSION]

  • Gray/Sepia toning
  • Move/Turn less and less with time
  • Elements that kills you::
    • Cogs, spikes, lots of claws, bottomless pits...
  • Decals (with multitexture?)
  • Happiness drugs, colors interpolation...
  • Spots of help
    • Parents, funny/colorful stuff that moves away and appears/disappears here and there
  • Countdown

Ghost enemy logic

It tries to avoid you. Disappears when you see it, or when you shoot at it.

[SOUNDS]

  • Whispers
    • You are going to die
    • Ey yo!
    • You turn around
    • You won't get any better
    • Give up
  • Environment
    • Walk
    • Heart beat
    • Breath
    • Wooden cracks
    • Whistles
  • Music
    • Disturbing simple piano note

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.