• Projects
  • Archdroid - exploration based FPS

Archdroid is an exploration based FPS with some horror elements set in an abandoned magick research facility. You play a security droid with limited functionality and mobility, and no real purpose. As you venture deeper into the facility you will unlock it's secrets and the powerful magicks that lead to its ruin.

Currently I'm building out the cafeteria area and have made a selection of grimy dishes and furniture for the player to knock around. I am jumping between hand-painting textures, making foley and soundscapes, and scripting so it's a bit too chaotic to show gameplay, but it's getting there...

I am still early in production but the story, characters, and questlines are finished on paper and I am making my way through it, modelling and scripting room by room. The entire facility is blocked out in engine, with two entire floors to explore. I've been working on this for a year now, but in the last few months have been able to make considerable progress and feel a lot better about sharing it!

If you want to see how the saucisse is packed please follow me on Twitter or Youtube, otherwise I will post any major updates here.

4 months later

I posted an update showing off a side area and overall progress.

It's not the usual production level - mostly just hanging out and chatting about different mechanics, but I haven't had the motivation to finish my scripted videos for months now. :anguished:

I'm not using MultiMeshes so it's not surprising that I'm having performance issues, but this is the first time I've gotten one of my 3D projects to run smoothly! If this kind of culling is useful to anyone here's how I did it:

The visionCone node is shaped to fill the camera's visual area and there is a second collision shape that gives a large area around the player so objects directly behind them don't pop in and out. I update the position of the cone on _update_vis() but you can just make it a child of your camera.

(Warning, my background is art, this is not actual occlusion culling but it helped me and my potentially poorly optimized effects)

! extends Area ! ! onready var ticker = $ticker # Timer Node ! export var tickrate = .012 # set this to the desired framerate for updates, .012=83fps, .016=60fps etc. ! export var MAX_UPDATE = 16 # update batch size ! ! var vis_queue :Array ! ! func ready(): ! self.connect("body_entered", self, "show_object") ! self.connect("body_exited", self, "hide_object") ! ticker.connect("timeout", self, "update_vis") ! ticker.start(tickrate) ! ! func show_object(body): ! if !vis_queue.has(body): vis_queue.append(body) ! ! func hide_object(body): ! if vis_queue.has(body): vis_queue.erase(body) ! if body.is_in_group("perishable"): body.queue_free() ! else: body.visible = false ! ! func _update_vis(): ! if vis_queue.size(): ! for i in MAX_UPDATE: ! var body = vis_queue.pop_front() ! if body: body.visible = true

In _update_vis() you can put whatever you want. I'm going to divide the vision cone up into sections eventually to use it for a LOD system, and to turn AI on and off.

Hope this helps or is interesting. I don't know if Godot renders off-screen items but this at least gives a chance for the renderer to catch up when drawing many different objects at once.

@Riordan: Thanks for the kind words and pointing this out!

I could have sworn I read that there was no frustum culling but I'm clearly wrong! I think the reason I'm seeing a performance boost is that the vision cone is shorter than the camera's view area. Thankfully this is still useful for other things.

@coding_culture: Thanks, and me neither. Maybe "dread" is a better word? The kind of feeling you get while exploring in Dark Souls or Prey, not knowing what to expect, but getting enough of a heads up so you can avoid situations you aren't ready to or don't want to handle.

I always wanted to make a horror game, but I would probably scare myself too much developing it.

5 months later

Hi yall, it's been a bit and there's a lot new in Archdroid!

I wanted to share the design of the recharge stations in the game. My inspiration for their blocky look is based around 70s industrial computing, where the exterior casing almost seems like an afterthought.

Humans would not be interacting with these stations except for maintenance so I added some decals warning against radiation and electric hazards. It was supposed to evoke a big chunky one-eyed monster, originally having white "teeth" along the top of the red hazard strip but I thought it was a bit too on the nose...

Here it is in-game:

Once it's been "activated":

I plan on going back over the texture and adding some more details to give it a bit more of a bent sheet-metal feel as I think the illusion gets lost a bit from certain angles.

Let me know what you think of the look. I know making things intentionally "ugly" is a fine line but I think it does a good job in helping the recharge stations stand out in the dark!

If you want to see the stations in action I also released another devlog, this time going over 10 Godot projects I worked on in the past year, including Archdroid. Please give it a look, it was a lot of work and I'm really happy with how it turned out!

CW: partial nudity in the first 3 segments so skip to after 3min if needed.