#Handpainted "DOOM like" shooter

151 messages · Page 1 of 1 (latest)

lost jacinth
#

Hey everyone,
I'd like to use this post to document my progress in learning the Godot engine and hopefully make a small game as a side product.

My idea is to make simple FPS shooter like old DOOM based in 15th century Bohemia.

lost jacinth
#

this is a small visual test of my idea, so far it's all 2D sprites

#

now I've made some more props and tried to populate the scene a bit to soak up more of the atmosphere

amber timber
#

I can already tell this project is gonna be incredible

lost jacinth
#

Thanks!

I'll squeeze in one more quick update with a sketched enemy.

now I'll take some time to paint everything up a bit so I will have something to look at when I'll try to tackle the 2D rig and animation

quick jackal
#

This is so sick! Love the style.

tame lichen
#

I would suggest you to make the game and release it slowly like idk if updating the game is possible but I feel like u will get caught in the trap of completing the game like keep on creating n creating but never releasing or publishing it n eventually giving up so idk 😅 maybe after 1 level or 2 levels are working u can release trailer game something instead of working so hard to create complete game

lost jacinth
#

oooh yeah, that's most likely what's gonna happen no matter what I do 😅 the amount of projects I have like this is embarrassing. Will see how this one will go.

#

Right now I "wasted" some time with learning the Skeleton2D and making a rig for the enemy, because I found out it's not optimal to use it in 3D scenes even tho it will be a 2D enemy.

Now I'll try to paint the enemy texture to a semi-final stage, as I don't have it in me to deal with 3D rig right after the 2D one. So, look forward to some hopefully pretty picture + if you have any tips on doing the 3D rig for 2D char and implementing it in Godot, feel free to share it with me. Thanks!

lost jacinth
#

I've stuck in a bit more into the art side of thing

#

even the character rig was pretty cool, when I finished the textures, but I am still a bit sad that I need to make it all over again in Blender, I'll probably spend more time doing 3D enviro

tame lichen
#

idk much about this character movement even this little movement looks dope to me 😁

chrome flame
#

this project looks incredible. would love to play a hand drawn first person game

#

I suggest you also implement cell shading of actual 3D geometry as well to make actual levels on top of just these hand drawn sprites and textures

#

if you want to make actual levels I think having caves or dungeons would make sense that you traverse to using this overworld

lost jacinth
lost jacinth
#

doing some vistas from painting

#

I also switched up the scenery for some interior, trying out lights and postprocessing.

Does anyone know why the Sprite3D is not reacting to the light? I'll have a look into it later but if some of you were faster and told me why, I won't mind haha

chrome flame
#

looks good

frosty stone
#

Looks awesome, I love the unique art style

lost jacinth
#

stumbled of a Fog and couldn't resist, maybe I've overdone it a little bit but I had my fun.
Also, just more modelling done, I've been working out the pipeline to make the work as smooth as possible.

fleet fog
#

This is so cool!

lost jacinth
#

Thanks!

lost jacinth
#

spending most of my time in Blender modelling details, I did bunch of ledges to hide seams, did a statue, candelabra, corner decorations, I've added back the cabinets and I figured how to set the sprites to be affected with a light + cast shadow.

and I plan to keep modeling!

vague scarab
lost jacinth
hollow sage
#

wooooow keep up the good work!

dark crag
#

This looks incredible!!

lost jacinth
#

I got pretty "cheap" update. I switched the Fog for Volumetric Fog as the Fog works good only on a flat plane and I want to have more verticality.

  • I found out the FPS template has interaction with physics, so I had to make something for it!
small timber
#

Can't wait to see you shooting some priests, hahaha

steel hawk
#

Love it

#

What's the story?

lost jacinth
lost jacinth
# steel hawk What's the story?

Thanks!

And I want to loosely base it on Hussite wars. It was a rebellion against corrupted catholic church resulting in multiple crusades against Bohemia and all of them failed.

There was bunch of interesting events during this time period that I'd like to get the main hero involved in, but I haven't decided on all of them.

steel hawk
#

Neat!

dark crag
sonic iron
#

sick looks, cool idea, hussite wars could be a cool setting (určitě) 😄

lost jacinth
lost jacinth
lost jacinth
#

It's been some time, but here is a new update!

what held me down the most was that I wanted to ditch the downloaded controller for something I constructed using tutorials, so I practice some code + know what's there. So I finally did it!

then it was pretty quick to setup navmesh and start on the basic AI that is just following you for now. I've then decided to reward myself with a temp Run animation + new art for the weapon.

vague scarab
#

This is awesome! Can't wait to see how it progresses!!

strong solstice
#

Looking good

#

what did you use for the GI?

lost jacinth
# strong solstice what did you use for the GI?

Thanks!

And all I am using in terms of "WorldEnvironment" is Background, SSAO and Volumetric Fog

then I just have non shadow casting PointLight here and there, and if I feel fancy, I put a spot light with shadows, that's all.

thorn owl
#

love this art style! keep up the awesome work.

lost jacinth
#

Gameplay is slowly coming together.
I already know I will have to rewrite everything, but I am happy for now.

I am need tips on how to structure the project and not have everything in few scripts. Mainly some behaviour inheriting would be cool, something like:

melee_weapon_master

melee_knife
melee_sword
melee_axe
melee_hammer

astral cave
#

@lost jacinth I find that Godot lends itself to a component-based design. Basically, your weapon could be a container for various components that give it bits of behavior. Like, one component could be a resource that holds the weapon stats, one could control the animations, one spawns a projectile (if it is a projectile weapon), one deals damage (if a melee weapon), etc. Then you could differentiate between a knife and a hammer by giving them different stats and different animations/images, but they may both use the same "damage-on-contact" component, for example. So you have a Weapon node and its behavior is controlled by child nodes and/or resources, which you can swap in and out to change behavior. I also want to say that this artstyle and progress so far looks amazing.

lost jacinth
bleak jetty
#

I love this project and the art style. In my current project, I mixed inheritance and components for the weapons since sometimes you need to propagate changes to all weapons - while you need some functionality specific to a particular one.

  • HealthComp
  • StatsComp
  • WeaponComp
    --- Weapon -> Flamethrower
    --- Weapon -> Gun
    "Weapon Component" handles Weapon switching or picking one up. Also, it distributes Stats to all weapons. "Weapon" Script handles all general weapon functionality like reloading or aiming. And "Flamethrower" Script handles everything that only a Flamethrower does.
thorn owl
#

My approach was a bit of a hybrid with the base weapon manager handling generic raycasting or having an area 3D attached to it for melee weapons. underneath that were five nodes used as placeholders for fixed slots because I didn't feel really like coding it in one when it was as easy solution to instead just use multiple children in this one case.

I have a series of weapon definition files that have things like maximum ammo or ammo per shot or what type of weapon it is or what slot it belongs in, The weapon manager will have an inventory of those that it reads from as your actual inventory and dynamically create the weapon in the slot if it needs to AKA you changed weapons in the slot from the default starting one or something

#

I'd be happy to share more detailed example or other resources that I had on how that gets structured just let me know

lost jacinth
lost jacinth
thorn owl
#

anyway, my own implentation is undergoing huge changes to use proper states. that being said, the loading of stats, view models, raycasting won't need to change much just go elsewhere

#

one sec, gotta get the code

#

okay, so the player just has this "weapon" scene

this is where i could start to handle things better, but in the interest of time, and wanting dedicated 'slots' i hacked it together with helper nodes (avoid this tbh)

in general, when the scene initializes it checks each slot for existing children, if not, it look in the player's inventory or falls back to the default starting weapons list.

when you switch to a slot, it instantiates the defined view model scene in the weapon definition resource

each resource is responsible for the data parts of the weapon. how much ammo it has, what it loosk like and animates with, etc

#

the weapon resource itself looks like this:

class_name WeaponDef extends Resource
@export_group("Function")
@export var weapon_name: String = "WEAPON"

@export var type: Weapon.Type
@export var slot: Weapon.Slot
@export var drops: PackedScene

@export_flags("Uses Ammo", "Has Magazine", "Reloads to Full") var flags: int = 0

## Maximum ammo that can be carried
@export var max_ammo: int

## Currently carried ammo
@export var ammo_pool: int

@export var mag_size: int
@export var mag_pool: int

@export var ammo_per_shot: int = 1
@export var ammo_per_reload: int = 1

@export var projectile: PackedScene

@export var muzzle_offset: Vector3

@export var hurtbox_pos: Vector3
@export var hurtbox_size: Vector3

@export_group("Visuals")
@export var animations: AnimationLibrary
@export var view_model: PackedScene
@export var weapon_pos_offset: Vector3
@export var weapon_rot_offset: Vector3

there's more i cut out in the interest of space, as well as some helper functions like:

func get_muzzle_pos() -> Vector3:
    return muzzle_offset + (weapon_pos_offset * weapon_rot_offset)

so the main weapon code when moving to a new slot (or in the begining, ready called to slot 0/melee) will instantiate the view model, position, and update the master weapon scril variables for the muzzle pos/instantiate the hitbox if necessary, or get a sound to change the audio stream player's stream to

#

i'm currently not using the aim and raycasts anymore but i like them as visual indicators when debugging sometimes

#

again: my system is defeinitely flawed and i'd recommend chaf's template as a better starting point, but in general i hope the idea of separating data from function is somewhat clear

#

in addition, gdquest has a good style guide that shows this that the openrpg adheres to which kinda helps a lot with this idea

depending on your demands, a state machine might be a good controller

surreal cliff
#

wow, cool art

lost jacinth
thorn owl
#

man do i feel that one! i took apart chaf's one piece at a time until resources clicked, then slowly again until state kinda clicked

I'd say in the mean time, i've kinda figured out how to properly do slots without all the extra nodes, just as a parameter in your states or some other option as well, so that extra overhead is realllly not necessary

#

and in the mean time it was like "ok, frustrated, back to Blender"

#

Keep it up :)

neat hedge
lilac goblet
whole egret
#

This look crazy good

#

Reminds me of Forgive me Father

lost jacinth
lost jacinth
lost jacinth
whole egret
#

Yeah it's great, enjoy haha

sonic iron
#

wow the running animation is so good!

lost jacinth
#

@sonic iron thanks! I was also surprised how it end up looking, because the individual frames look pretty rough 😀

lost jacinth
#

not much of an update, but I've painted in the weapons for the enemy. It's just a black shape to see if the movement works before I'll paint it in properly

hollow goblet
#

This whole project looks fantastic!!

bleak jetty
#

Indeed, can't wait to see the next location. ❤️

serene niche
#

So the environment is 3d and the player and NPCs are all 2d?

ripe nebula
#

The project looks excellent.

lost jacinth
lost jacinth
serene niche
#

Thanks, that makes sense. I imagine you just rotate the plane to face the player at all times.

thorn owl
#

there's a billboard flag already, yep!

#

on the topic, how'd you go about animating them? i was doing some sprite experiments earlier and used an animplayer keyed to a sprite3d's frames but it seems excessive

lost jacinth
lost jacinth
thorn owl
#

cool, thanks. also amazing sprite work :0

lost jacinth
#

and I also animated squash and stretch in Godot. If you have a look a the gif I shared, you can see the enemy get squashed a little bit before they hit

neat hedge
#

Although perhaps it looks fine if they just rotate around the vertical axis.

lilac goblet
lost jacinth
neat hedge
#

that's fair

lost jacinth
#

I guess I might do slight rotation in x axis, so they can "lean back" a bit, maybe like 15-20 degrees? I would have to test out the exact number

sonic iron
#

that's incredible

lost jacinth
#

It actually is haha! I wanted something "quick for now" that "I'll make better later", but I am pretty happy with how it turned out, so I don't think I'll change it much

serene niche
#

Any updates on this @lost jacinth ?

lost jacinth
serene niche
#

Ah damn, hope you come back to this, it's looking great

serene niche
#

I'm curious, in your first screenshots (outdoors) the building seems to be somewhat 3d, and not as flat as the enemies etc. Are you doing minor modelling here?

thorn owl
#

it's kinda common in these games to do 'props' with map geometry and texture them, so you get a mix of some 3d assets and sprite props

serene niche
#

Yeah, I guess so. Kinda reminds me a bit of that Crocotile3d app

serene niche
long totem
#

Dang, this looks really cool! Take care @lost jacinth

lost jacinth
lost jacinth
#

woke up from slumber

#

I made myself a little template, that can get hit and break

(pic. 1)
My idea was that I would then just create New Inherited Scenes from it and only change the Mesh and Collision property for the ones I made in 3D software

but I just can't figure out how to change them, or which Node3D allows that

(pic. 2)
I am able to make the Inherited scene from the actual model just fine, but then I would have to add all the components and link them every time, which doesn't feel ideal

does anyone know what would be the best way to solve this?

nimble shore
#

Glad to see you're still working on this!

lost jacinth
#

just started with rewriting everything xd
hopefully it will be a bit smarted than last time

lost jacinth
#
  • early prototype on destructible environment

tho somehow after updating Godot my bullets go through the target 50% of the time

coarse gull
#

how is the environment made, is it a model in blender that you use trimsheets or something on?

#

is it modular pieces that all fit together?

#

does each object have its own unique texture or do you re-use textures for the same stuff?

#

it looks really good

lost jacinth
coarse gull
#

cool

#

thanks for the insight

ripe nebula
lost jacinth
lost jacinth
#

update

I've reworked my NPC and Projectile logic to follow the Composition workflow.

When I was at it, I made an audio component that let's user fill it with sounds by category and then plays them at random to have some variation

now I'll be moving to the Player and updating it too

lost jacinth
#

got to try out making a new weapon with all the reworked workflow and it was pretty fast! (ignore that it still shoots the books)

lost jacinth
#

I made more complex destructible assets

the broken pieces can be picked up and thrown at the enemies

lost jacinth
lost jacinth
lost jacinth
hollow sage
#

You’re better at throwing stuff than shooting that crossbow!

trail rapids
#

this is very very nice!

lost jacinth
#

Thank you!

ripe nebula
#

Your interior geometry is much more detailed than I at first noticed.

lost jacinth
#

Did some scripted doors to separate out the levels + added scripted enemy encounters so they don't run at you the second you start the game but can ambush you

trail rapids
#

Cool. Is there any detection outside of triggers like this one? Like, do you think you need to give enemies proper sight to spot or lose the player?

#

I have a sight-based detection instead with shouted alerts for other nearby enemies, ability to make an enemy stand still and watch a direction, plus ability to lose the player. Feels alright for more "organic" feel, but I think I want to have triggered spawns and detection in some spots anyway. Just wondering if it's the same but the other way around for you.

pastel prairie
#

I just wanted to say I really love the aesthetics. Best of luck with your project! 🔥

lost jacinth
#

I've made myself somethig I call a "Squad Manager" that can force everyone assigned to it to attack + it keeps track of all assigned units and can trigger more stuff when they all die

#

right now it works only with player stepping into a trigger, but I will expand up on it t

lost jacinth
dense canyon
#

Super cute animation, easter eggs like this always make for fun game objects

vale current
#

Your art is incredible! Looking forward to this ❤️

lost jacinth
lost jacinth
nimble shore
#

It's back!