Thursday, 24 October 2019

PS1 Horror Game Jam weeks 1-2



Disclaimer: The pictures are works in progress. I will make proper models and textures when the functionality is done. Probably in the final week. 


There is a Discord community dedicated to development of PS1 style horror titles, which is super niche but also sounds like a lot of fun. Every now and then this community does game jams, I have joined in this time. For those interested, here is the link to the jam page:
https://itch.io/jam/haunted-ps1s-horrifying-halloween

The optional jam theme is 1 room. I had initially intended to follow this theme, and had envisioned a game where the player is trapped aboard a station and must escape by controlling the various systems of the station via terminals in the control room. However, Alien Isolation is very good, so ultimately I chose to rip that off instead...

WIP control room level

The premise of a space station remains, some event has rendered the place uninhabitable. The player awakens locked in a room, the objective is to leave the station alive. To achieve this they must find their way out whilst avoiding the monster that prowls around. Consoles placed around the station allow the player to control the various systems present, such as doors, power etc...

The station is full of hazards and obstructions. Items can be obtained to overcome these obstacles or warn the player of the existence of Hazards, as well as the means to traverse them.


Below is an account of the first couple of weeks of development:


Devlog Weeks 1-2


UE4 is the engine of choice for this project. I've used it for many years and it does it's job very well. I opted for blueprints for the game logic. Whilst C++ is normally my tool of choice, BPs have such fast development and iteration times that they're perfect for Jams.
Getting UE4 to look like a PS1 titles may take some work, but should be doable.


Controls

Somewhat standard, currently players can crouch, but not sprint. I'll likely add a sprint option, it would make a lot of noise to move using this. Currently movement is slow, by design.  

Looking around is controlled via the arrow keys rather than the mouse. This is very clunky, which is the point. This will likely be kept as the default behaviour, but I envision complaints about this so players will have the option of enabling mouse control via the menu. 


Interactable actors

The bulk of mechanics that were implemented over the past couple of weeks are based on interact-able actors. These are objects that implement 3 methods.


The player can interact with items such as this by looking at them and then pressing the interact button (OnInteract), or holding the interact button (OnHeldInteract). OnParameteredInteract is a little more interesting. A string parameter can be sent to and returned from the function call. This allows for more complex interactions.

A prompt popup for interactable actors, in this case a screen.


Interactable actors can call the interaction functions of other interactable actors. This allows for complex systems to be set up between objects in the level.


Doors

They open, they close, sometimes they're even a jar. Doors can sometimes be opened manually but are also able to be controlled remotely. They can jam, which will require the player to look for alternate routes, or find a way to open them.   


Breakers 

Breakers connect to other interactable actors. They can be used to activate and deactivate those actors. 
Notably, they can connect to other breakers, and are operable remotely. This allows for an approximate power system to be implemented with different breakers controlling each area/room. 


Vents

Vents block the way past, unless they are first cut open. To do this the player will need to have found an oxyacetylene torch. The purpose of vents is to gate the areas players can access early on. Also crawling through ducts is quintessential sci-fi horror, so it must be done.

 

Viewable actors 

Viewable actors inherit from interactable actors, however when interacted with they take the focus from the player. Each viewable actor has a camera, when the actor is focused this camera is used in place of the players. This allows for the player to interact with the scene in more interesting ways. 


Lockers

Lockers provide a perfect hiding place for the player. When inside the monster can't see them. currently hiding inside always takes a second or so. However a system where players can choose to hide quietly but slowly or quickly but loudly could be interesting. 

As in Alien Isolation, the monster will potentially inspect lockers it is suspicious of. In this case the player will be able to hold their breath and hope it doesn't notice them.

Needs texturing, but PS1 style does make the modelling simple. 


Screens

Screens allow the player to interact with the various "systems" that exist around the station. This basically amounts to calling the OnParameteredInteract functions of other interactable actors. Each actor has a number of commands it can respond to, for example a door can be opened or closed. This can be done via text commands entered into the screen.

An example of interaction with a screen


Each of the screens in the station have a help menu available. This allows the player to see what systems the screen is connected to, as well as which commands are available from those screens.  


Ladders

Allow for vertical movement round the level. Once activated the players movement is constrained to the ladder until they reach to top or bottom.  


Save/Load Stations

Like in Alien isolation, saving can only be done from specific save stations around the map. These are not guaranteed to be in safe spaces, so care should be taken when saving.
I will likely need to add a rollback function, to go back to previous versions of saves, otherwise players may end up in situations they can't escape from. The alternative is not saving the location of the monster, so you can't be instantly killed on a bad save... 

An example of a save screen, instructions on how to use in the top right. 


Hazards

There are various hazards littered through the map that the player will need to be careful to avoid. Prolonged exposure to these will result in death. 

Radiation

Some areas of the station have been exposed to radioactive elements, entering these areas without a hazmat suit will result in radiation poisoning.
The player can acquire a Geiger counter to be warned when they are entering dangerous areas.

Vacuum

Areas where the hull has been breached are infrequent but extremely dangerous. Exposure to the vacuum of space will very quickly result in death. 
The player can obtain a spacesuit to traverse these areas safely.  


Misc

The player can hold Tab at any point to get an overview of their objective as well as any items or suits they may have acquired. 


I still need to tweak the brightness of this menu... it's a little dark.




Plan for Week 3


The monster so far, oh the horror.
The plan for the next week is to build the monster AI, I have used UE4s behaviour trees & environment query system before so have a good basis to work from here. The AI perception system is not something I've toyed with yet, so I am planning to use this as an opportunity to learn it. 
The next post will probably include a breakdown of how the AI is functioning. 

I've yet to decide if I am going to go with a mutated monster of some kind, perhaps that gives off slight radiation so the Geiger counter can detect it. Or, I also like that idea of a haunted space station, complete with creepy Victorian era ghost. Perhaps with an EMF detector for knowing when the ghost is close. 

Also on the task list is getting sound done for the major mechanics as well as ambient noise. Sound is so important and too often I overlook it until the end. 





No comments:

Post a Comment