#Saurian Sorcery

1 messages ยท Page 3 of 1

main cosmos
#

there's this game called Tunic that has relatable characters in it

obsidian wolf
#

ooooo ty

#

i really should consider (past or present) trying to simplify my models a bit more

#

it's easier to make the rest of everything when matching the fidelity that way

#

though my first thought is that game relies a lot more on lighting than i wish to

obsidian wolf
severe spruce
#

cool stuff!

#

is your pipeline forward? have you considered just throwing msaa on it?

obsidian wolf
#

its deferred

severe spruce
#

daww

obsidian wolf
#

i should try to implement fsr2 at some point, yeah?

obsidian wolf
#

and the idea of it actually fit generally really well

#

so i downloaded it and tried to clean it up

#

actually turned out pretty well

obsidian wolf
#

part of it is causing me to look back at some of those tweets

#

as i understand, mr. stalberg has some method of determining outline sensitivity

#

so for his grass texture, it outputs a low sensitivity, and the rock outputs a high sensitivity

#

grass on grass = few outlines, on rock = more outlines

#

i have this issue here where it's missing some outlines that i'd want, like on the back sides of this band

#

but if i set the depth outline to anything that'd actually show those, it'd be way too sensitive, so i almost want to force outlines sometimes

#

doing outlines on material borders could help here, but i think i'd need to verify that it wouldn't fuck me over in other places

obsidian wolf
main cosmos
#

tails

obsidian wolf
#

o_o

#

are u pointing out the sonic similarities

#

that's the first thing my friend said too if so ๐Ÿ˜ญ

main cosmos
#

lmao

#

I am indeed

obsidian wolf
#

i got sent this

#

whatever bro if somehow this does actually end up being a game

#

i can grift to the sonic furry crowd

main cosmos
#

Huge market potential tho

obsidian wolf
#

i really need to figure out how to do animation like this with my system, to make it more jolty

#

much more lizardlike than the two pose smoothstep interpolation that i'm doing, but idk how practical it is

main cosmos
#

couldn't they just be using a very small time delta between the two poses

#

hmm actually idk, I think you're right

obsidian wolf
#

no the way that you can tell is because the tail isn't bound by it

#

that, my system cannot do

#

if i wanted to support it, i'd have to support keyframes. supporting keyframes is very hard from an editor standpoint

#

if i had it, i could just set the two for the animation cycle for the tail, then like 4-5 for the head like this is probably using

main cosmos
#

per-joint keyframes?

obsidian wolf
#

yeah

#

it wouldn't be the hardest thing ever, like i can imagine most of it which is a good sign, but still a minefield of timesinks

main cosmos
#

just try it, what's the worst that can happen? ||heee||

obsidian wolf
#

the reason why i'm set for now on not is because i really want to actually make some amount of content, and this isn't stopping me from doing

#

i've always sucked dick at making content

#

i always make shit that gets me to the point of making content

#

and i make a single thing with it, and i'm like yes, okay this works, and then usually i move on

main cosmos
#

ye

obsidian wolf
#

it's not intentional though and i'm trying not to do that anymore

main cosmos
#

you could make the whole game without animations frfr

#

though it adds to the feel and theme (like audio), so it has some importance

obsidian wolf
#

i will say that idle poses add a fuckin lot

#

the croc still doesn't have idles

main cosmos
#

hehe wdym completely stiff statues feel fake

obsidian wolf
#

and i just stopped placing him essentially because of that

#

i have the intent to modify him a bit, or at the least give him gear though

dry monolith
obsidian wolf
#

but poses set every single bone indiscriminately

dry monolith
#

so you have a keyframe system, but one keyframe has to contain all transforms for whole skeleton?

obsidian wolf
#

yes

#

it's not harder from a renderer side, but the UX side is a lot harder

dry monolith
#

it's suboptimal data-wise I'd say

#

storage-wise

obsidian wolf
#

for sure

dry monolith
#

otherwise I don't see a problem

#

you are probably missing one most useful thing in animation workflow

#

it's the inverse kinematics

obsidian wolf
#

i don't think so, but i've only speculated about how IK works

dry monolith
#

make an IK rig and animating becomes easier mutiple times over

obsidian wolf
#

oh

#

in that sense yes

#

i was gonna do IK at some point, but i was expecting it to work by applying some transformation after posing

#

so set pose, then apply IK and ideally IK applies minimal enough change to keep the pose in tact

#

but from that sense, i should probably try to do it soon

#

so i don't waste time doing all of this by hand

dry monolith
#

IK applies maximal change within constraints

#

the goal is to reach some point in space and you have to solve a chain of parented transforms with joint constraints and IK solves this problem

obsidian wolf
#

isn't it minimal change? i'm not sure i understand otherwise

#

minimal change to reach the point in space

dry monolith
#

I actually don't understand what you mean by minimal change so I probably misunderstood you

obsidian wolf
#

yeah i'm using it in not a math sense, i just mean that it won't completely destroy the pose

#

like if a pose is set, then a reasonable IK is set (like setting foot position), it'll still keep the leg pose

dry monolith
#

there's no guarantee the change will be minimal, it's just that there are multiple solutions and IK solvers are sensitive to initial state

#

so solution ends up resembling initial state

obsidian wolf
#

one thing i'm curious on, that you might know, is it usually required to make joints and joint constraints to get decent IK?

#

yeah that sounds right

dry monolith
#

well those constraints describe the system so I guess if you don't want solver to simply stretch the arm to reach the point you need to constrain it

#

I can easily see FABRIK doing this without any constraints

obsidian wolf
#

i'm looking for ease of use at the cost of quality, sounds like FABRIK is what i want from looking at it

dry monolith
#

ye fabrik is easy, transform forward, constrain, transform backward, constrain

#

do N iterations until it looks good

#

simple variant for length constraint

obsidian wolf
#

neat, this is super useful

#

hopefully i can do this next weekend

obsidian wolf
severe spruce
#

TROGDOOOOOR

#

amazin

main cosmos
obsidian wolf
#

i will read this tmrw

#

ty

obsidian wolf
#

spoiler: im not doing IK

#

(yet)

obsidian wolf
#

was hoping i could get this working before the weekend was over, but only a resemblance

#

weekend was taken by touching grass ๐Ÿ˜ฉ

main cosmos
#

what's this

#

tile generation?

#

idk the term, but I think I can see what it is

obsidian wolf
#

tilesets

#

this is the input, can add models and select which corners are inside, which corners are outside

#

basically i dont want to model levels, so i can either make them procedurally or just very quickly in-editor

#

this is why i wanted to do it

main cosmos
#

ah I 'member

obsidian wolf
#

fixed it during my lunch break, the missing sections are just because i didn't add something that can fill that space yet

severe spruce
#

did the fix fit in your lunch break or did your lunch break expand until the fix was found

obsidian wolf
#

uhhh i don't want to do anything until this PR gets looked at lmao

#

so i found something to do dogekek

obsidian wolf
#

not a big fan of this tileset but

#

lotta functionality at least

#

i wanna add tiles that span multiple squares

#

fun fact, this codebase is at just under 18k lines currently

obsidian wolf
#

๐Ÿฅด

obsidian wolf
#

i think i want to grid-ify the enemy movement a bit more but im not sure how

#

:^)

obsidian wolf
#

i sorta want to do a frog with a big sledgehammer

#

that very obviously stretches his limbs

#

like he basically just throws it with elastic arms

main cosmos
#

dat frog looks like a turtois

obsidian wolf
#

yeah he found a tortoise's shell and made it his new home

dry monolith
#

battle shovel

obsidian wolf
#

mannnnn

#

i should really download like unreal or godot or something and play around with animation players

#

see what the graphs do and what functionality is needed from them and for them

#

but god does that sound boring

dry monolith
#

what graphs?

obsidian wolf
#

state graphs

dry monolith
#

you usually have a timeline with keyframes that's about it

obsidian wolf
#

that's just for single animations

dry monolith
#

what's multiple animations?

obsidian wolf
#

but for example if i want to add an attack sequence

dry monolith
#

an animation is an interval on global timeline

obsidian wolf
#

i don't want to define that in code

dry monolith
#

or you can think of it as individual timelines, it's equivalent

obsidian wolf
#

animation assets aren't the problem, choosing which animations to use is the problem

dry monolith
#

but that is gameplay programming

obsidian wolf
#

i am doing gameplay programming

dry monolith
#

in unreal you have blueprints

#

and state machines and shit

#

behaviour trees

obsidian wolf
#

yuuppp i gotta figure out what functionality i need to replace that

dry monolith
#

I am personally unfamiliar but know of those from random youtube videos

obsidian wolf
#

same, i always avoided 3d when i used the game engines

dry monolith
#

well those are just programming patterns made into GUI

#

so that an artist may fiddle with them using buttons and knobs instead of typing text

#

there are at least two animation related features that are somewhat essential - IK and animation blending

#

animation blending is basically bone influence weight mask and weighted average between TRS with it

#

what IK is you already know

#

it's usually stabilizing refinement step after blending

#

but is also useful in animating by hand

obsidian wolf
severe spruce
#

really nice!

obsidian wolf
#

much more happy with the appearance of this tielset ๐Ÿ˜„

#

the blender file for this btw

main cosmos
obsidian wolf
#

holy fk its the hotdog tileset

main cosmos
#

frfr

obsidian wolf
#

the way this works is that there are 8 corners, and each corner has a value (here, the red stone is 1, and the sandy value is 2), then when it's time to build the code just iterates through and rotates around to check for viable candidates and selects one at random
i'm reworking this slightly, there's sometimes cases where tiles can represent multiple corner values, for example in this case

#

four of the corners are clearly representing sand, and the corners closest to the camera are clearly open air, but the back two corners could represent anything solid

#

so i'm changing the corners from being values to being bitmasks, (then checking that two are equal is just corner_bits & other.corner_bits != 0 for each corner) but there's an interesting side effect of this where the "empty" value has to become a bit as well

#

that took me a minute to come to ๐Ÿ™‚

#

also, if i do this in the future, i should really find some sort of way to automate generating all of the relevant cases, there are a lot

#

like at least 100

obsidian wolf
#

this is finally enough coverage to make the maps i drew out over christmas break

#

๐Ÿฅด

obsidian wolf
#

missing 1

main cosmos
#

thing, I don't know why

obsidian wolf
#

huh?

main cosmos
#

(I have a brainworm)

obsidian wolf
#

i hate thes eshadows

#

i think i've never seen shadows look this bad because i usually blur them

#

and slight shadow acne doesnt look bad if it's blurred, just looks like overattenuated light from the angle

#

the bottom part is it escaping the frustrum i believe, so ignore that part

obsidian wolf
#

god this looks so much better with a background

obsidian wolf
#

made the FPS local so my PC no longer gets tanked when i draw a block, also allowed vertical flip to cover more cases (though my tileset isnt' designed with that in mind)

severe spruce
#

thats p cool looking

obsidian wolf
#

added 3d pathfinding

dry monolith
#

a star?

obsidian wolf
#

yeah

dry monolith
#

a star that's using a star?

obsidian wolf
#

can't tell if punning with the target or actually asking a question LMAO

dry monolith
#

punning

main cosmos
#

Make a star and do a star on it

dry monolith
#

first one was legit question

obsidian wolf
#

yeah its just astar with some funky stuff for ramps adding vertical neighbors

main cosmos
#

bugles ๐Ÿ“ฏ

obsidian wolf
#

trumpet

main cosmos
#

sorry I could only find the curved trumpet emoji

obsidian wolf
#

foiled once again by not using enum class

#

curses

#

also foiled by not fuckin making this constructor explicit, dont know how this escaped for this long

#

i wish constructors were explicit by default >w<

#

oh wtf it was literally only my 3d vector class that didn't have explicit for that

obsidian wolf
#

well, s'all fixed, outside of the asymmetrical ramp usage which i don't really care about atm

obsidian wolf
#

i sorta wanna do funky stuff like this for foliage

#

not entirely, but at least some alien elements

main cosmos
#

Looks like a thingy

obsidian wolf
#

actually crazy that you can pick up on the resemblence

#

that's literally exactly what i was making

main cosmos
#

it reminded me of this thingy I made in blender

obsidian wolf
#

how'd you make that thingy?

#

i made my thingy with the skin modifier, tried deleting edges with geometry nodes at first but it had bad results so i just did it by hand

main cosmos
#

uh I think I used a wireframe modifier, then applied some other modifiers

#

the wireframe made it look like the red one in the center

#

I'm a big blender noob so I can't fully recall what I did besides mess around until I saw something interesting

obsidian wolf
#

issa thingy

main cosmos
#

you figured out my blender secrets

obsidian wolf
#

with these two simple tricks

dry monolith
#

there's also some disabled by default addon that I can't remember the name of which allows you to replace each polygon with a mesh

#

so you can easily model fences and stuff

obsidian wolf
#

geometry nodes exists now which you can use

dry monolith
#

I guess so

obsidian wolf
#

i still think they're incomplete but they feel pretty useful now

obsidian wolf
#

also there are more fun things to do with it

obsidian wolf
#

cleaned up version of a 3d model i found

obsidian wolf
#

in game

#

i need a tree

obsidian wolf
#

now that i fixed the shadow acne, the pixel flickering, a lot of the shadow issues, and added a non-black background, things are so much nicer to look at

#

who would've guessed

cedar rune
#

I quite like the art style :)

obsidian wolf
#

ty froge is coming together a little bit

#

when i have some time im hoping to get characters moving around again, which will be neat because this is the first time the environment feels real

obsidian wolf
main cosmos
#

gameplay ๐Ÿ‘

obsidian wolf
#

still a ways to go until i have a testable level (i want to add some sort of attack to the fruits, hence the lizard health bar), but for sure ๐Ÿ˜„

cedar rune
#

What is this, someone making a usable product instead of unfinished engine after engine

#

Heresy

obsidian wolf
#

WIP guy

#

he will have a bow

#

but until then he will just look like the PepeHands emote

severe spruce
main cosmos
obsidian wolf
#

๐Ÿน

main cosmos
#

a bowtie would look cool too

obsidian wolf
main cosmos
#

what is Guy's last name going to be

obsidian wolf
#

he doesn't even have a first name yet lmao

#

mr. hanther

#

running dnd campaigns has given me the cursed ability to pull absolutely random names out of a hat

main cosmos
#

lol do your players like to ask random NPCs for their name

obsidian wolf
#

i think it happens almost every time

main cosmos
#

my brother is running a campaign right now and he called two goblins we encountered Boblin and Noblin

#

those were prepared names

obsidian wolf
#

i liked my series of goblin names that used no vowels

#

my particular favorite was "n'd" because my players thought i choked when i said his name the first time

obsidian wolf
# severe spruce

also i had pattern recognition going in my brain for the hands but could not remember what the image was

#

this was it lmao

severe spruce
#

glad that i was not the only one seeing it KEKW

main cosmos
#

us players did CBT to some poor ogres in our last session nervous

#

it was pretty epic when I rolled a crit though

obsidian wolf
#

does this mean he fucking dies or does it mean he turns into a ogre with degenerate pleasures

main cosmos
#

it meant I got an epic finisher animation on an ogre

#

(double meaning not intended KEKW)

dry monolith
#

low poly + subdivide?

obsidian wolf
#

yeah

dry monolith
#

can you unwrap a mesh without having to apply the subdivision modifier?

#

in blender

#

I don't know never tried

obsidian wolf
#

yeah subdivision doesnt really hurt uvs

dry monolith
#

btw sucks that blender has no material painting

#

so you have to paint one pbr texture at a time

obsidian wolf
#

but i applied in this case regardless to fix up some verts, do the armor, and do mats

#

im not familiar

dry monolith
#

they really should upgrade texture painting

#

if they implement material painting then substance painter may lose a big chunk of people

obsidian wolf
#

i never used painter :(

#

but i think i know what you mean then

dry monolith
#

what I mean is basically configure a brush that paints to multiple textures simultaneously

#

so you can paint whole materials

obsidian wolf
#

im one of the few people on earth thats used substance designer for over 100 hours but never opened painter

#

and yeah gotcha

#

i also wish you could bake textures as part of the export process without doing anything custom

#

that way procedural texturing in general worked better

obsidian wolf
#

with or without? ๐Ÿ™‚

main cosmos
#

save the horns for the upgraded version

obsidian wolf
#

lmao it would work well for that

#

dont think i'm doing unit upgrades though

main cosmos
#

then decide whether to give it horns based on how badass you want it to be

obsidian wolf
#

it's interesting how neutral it seems to be

#

i asked 2 other people and neither of them decided either

severe spruce
#

they aren't very prominent

main cosmos
#

they both look good so ultimately it's up to wherever fits the game imo

main cosmos
severe spruce
#

if they would be more central to the design, then maybe they would be more impactful

#

but i like it without

obsidian wolf
severe spruce
#

maybe a ram character with horns?

obsidian wolf
#

yeah i think im going without, other designs can get horns and this boy is kinda slick

obsidian wolf
#

gonna see if i can export poses from blender directly

obsidian wolf
#

btw i like the name saurian sorcery ๐Ÿ™‚ though idk how many people know what saurian means

#

someone give a take on it

obsidian wolf
#

Saurian Sorcery (Tower Defense Game)

obsidian wolf
#

been updating my skinning system a bit

#

i only supported basically 1 instance of skinned models, so if i wanted to have more than one of a type of lizard it wasn't possible

#

went from having a SkeletonCPU struct and a SkeletonGPUstruct, which is how most of my objects work that have some interface to the renderer

#

to now a SkeletonPrefab in addition to those two, which is what i usually have for gameplay side objects, which contain information for building entities

#

which kind of breaks the pattern and incentivizes me updating some other asset structs around it, but the reaosning is that i only keep one SkeletonPrefab around, which holds the poses

#

so TypePrefab structs are generally immutable, serializable asset data, TypeCPU structs are instances of Prefabs which runtime (update functions) needs, and TypeGPU structs hold handles to the GPU data

#

i think this makes sense?

#

also in some cases, TypeGPU represents data which is trivially uploadable to the GPU, but it works for me because in this case, binding handles is similar enough to uploading trivial data

#

once i finish cleaning this up, i'm going to import poses from blender/gltf

#

main reasoning is so that i don't lose data in the future, but also so i can take advantage of blender features, like not needing to implement fully featured IK with constaints and everything, being able to pose before i go through the export process, etc.

#

oh also lastly, i'm being explicit with my animations, constructing a list of states and i'm going to explore what the pose controller system will be able to do within those states (for example, is an ability where a lizard charges and swings considered one state?)

#

no fuckin clue yet

main cosmos
obsidian wolf
#

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

#

i shouldn't have done this all in a day, i'm going insane

obsidian wolf
#

just had a memory of adding in temporary code somewhere

#

and now i can't remember where

obsidian wolf
#

poses in blender on the keyframes, i import the .gltf to engine here and convert the 3 poses to an idle sequence

dry monolith
#

so the takeaway is that using poses to animate leads to messy workflows

obsidian wolf
#

monkaHmm abnormal yes, neither gltf or blender are set up to handle this sort of animation, that friction is certainly real

#

messy (or do i regret it), idk, try and find some other projects where one guy NIH's a 3d engine like this

#

animation is hard

dry monolith
#

what do you mean neithyer gltf nor blender are set up to handle this sort of animation

obsidian wolf
#

they have no concept of a "pose" beyond having the ability to express them

#

i think i could've automatically imported these pose sequences as animations, but i don't know if that would be good

dry monolith
#

name a few pros of using poses to animate

#

it should be clear why there's no such system anywhere

obsidian wolf
#

they mostly come down to being simple,
from ux: you can interpolate between any two at any point and it generally gives decent results
from engine: easier to set up the tools to manage them

dry monolith
#

ok but those points are not unique to the system

obsidian wolf
dry monolith
#

the keyframe system is generalized form of the pose system

obsidian wolf
#

yeap

#

if i made anyone else use my code i'd certainly try to generalize it

#

but you're not going to be able to implement keyframe animation from the starting point of hardly understanding gltf and having a horribly hacked version of it in your engine in a day

dry monolith
#

anyways I don't want to keep this conversation going it feels like I'm attacking you for no reason

obsidian wolf
#

nah i like defending things

#

i mean it's certainly true that i might be in the category where given all knowledge, it would be best to just suck it up and do full keyframe animation rather than spending time managing the constraints

#

but i went into animation as a whole with almost no knowledge on any of it beyond general graphics programming

dry monolith
#

my primary concern is that you're probably wasting resources by sticking to it

obsidian wolf
#

and given the question of "should i switch now", the answer is probably not

dry monolith
#

eventually it's gonna have to go because it scales poorly

#

there is also a problem of usability that you have to pose every single bone for every single pose

#

and you cannot change two poses to interpolate between them if there are a few more pose frames in between

obsidian wolf
#

so the question is less

#

are there drawbacks to this

#

and more, is there something better

#

if it's just dropping the pose (all keyframes) limitation

main cosmos
#

the animation section of game engine architecture was so long that I skipped most of it ๐Ÿฅฒ

obsidian wolf
#

then what do i get out of that? because i can't animate like real games

#

infeasible with how much time real games spend on animation, both authoring and programming sides of it

main cosmos
#

ngl the fact that you have your own animated assets that actually look good is quite epic

obsidian wolf
#

yeah i coulda had star game jaker

dry monolith
obsidian wolf
#

this is what u did for saying "le lizard and fruit looks so cute xdd"

main cosmos
#

ebin :DDDD

dry monolith
#
    struct Skeleton
    {
        std::vector<Bone> bones;
        std::vector<Animation> animations;

        //compute a set of bone transforms using animation index and time
        void ComputePoseTransforms(Transform* pose, size_t anim_idx, float time);
        //turn a set of bone transforms into a set of matrices used for rendering
        void ComputePoseMatrices(glm::mat4* matrices, const Transform* pose);
        //apply inverse bind transforms to finalize the process
        void ApplyInverseBindTransforms(glm::mat4* matrices);

        float GetAnimationDuration(size_t anim_idx);
    };

the thing that implements the bare bones

obsidian wolf
#

it's all UX

main cosmos
#

the book goes deep into the various ways of representing animations with lots of code ex๐Ÿฆles

dry monolith
#

there should be basically no difference between most of the ux for both systems

#

and you also can leave the animation process itself to 3rd party tools

#

at least for the keyframe based one

obsidian wolf
#

80% of it is "how do i author content", making sure that it's possible to edit it and use it

if it's, make a flail animation in blender, make an idle animation in blender, set idle state, on falling, blend to flail state

  1. what does blending to the flail state look like
  2. is it literally just a question of quality then? because the animations in blender are going to be made with 2 poses, and adjusted with additional keyframes to correct problematic areas
obsidian wolf
dry monolith
#
  1. if you look carefully at the code I posted, the keyframe based system always computes a pose from keyframes and then turns them into set of matrices for rendering, so you should be able to interpolate between two arbitrary animations by interpolating the transforms of two poses obtained from them, before turning the final interpolated pose into matrices
#

2.idk you animate bones lol

#

there will simply be less bones to move around because you can place a keyframe anywhere on the timeline

obsidian wolf
#
  1. now we have multiple animations playing at once
    either way, it's not so much that i think it's better, but switching systems requires a reason for me, possibly some knowledge of an impassible obstacle, which is more a question of looking at a large set of animations i'll need for this game and considering it between these two systems (which i'm going to do now)
    unlike the traditional GP way, i am practicing programming in service of an actual product, rather than engine dev purity, so i have to consciously ignore seeking improvement if it doesn't serve the bottom line
dry monolith
#

I wouldn't say that you have to play multiple animations at once

#

you may obtain 2 poses, one is the end of source animation and the other is the beginning of the destination animation, and interpolate between these for some given transition time

#

so it's same as playing just one

#

interpolating between 2 playing animations would probably look better though

#

again the keyframe system is the generalized pose system

#

so what one can do the other can as well

obsidian wolf
#

yeah, but the restrictions of the pose system allow you to skip the first key frame of the second animation and replace it with your start pose

#

because the second key frame of the second animation is all synced, the interpolation is even across properties

#

more so, you just use that transition logic for everything

dry monolith
#

I don't get it

obsidian wolf
#

if it's a question of "how do i get a good idle animation into my game", it's doghsit, there's no point

#

if it's a question of "how do i convert an animation system's state machine into poses", it's a lot better

dry monolith
#

I don't get it ๐Ÿ˜ฉ

#

all you said is still applicable to keyframe system

obsidian wolf
#

because the second key frame of the second animation is all synced, the interpolation is even across properties
you don't have this guarantee

dry monolith
#

you can do this if you copypaste the pose in the editor

#

but I don't see how it's mandatory

#

the interpolation will always smoothly transition between any pose

obsidian wolf
#

if you're just saying you can artifically apply that limitation to yourself

#

is that what you're saying actually

dry monolith
#

maybe

obsidian wolf
#

ok

dry monolith
#

I don't understand the purpose of it

#

anyways how about we wrap this up, I need to go

#

if you have anything to add, I'll read it later

obsidian wolf
#

if you blend anim 1 and anim 2 (i miswrote)

#

and you cut out d for the interpolation step, then c-e will be a quick interpolation, c-f will be a medium interpolation, and c-g for the third track will be a slow interpolation

#

i.e. random parts of your animation will still be showing the old animation while other parts will switch to the new animation very quickly

#

but if b,e,f don't exist, the interpolation between c and g will be even across all tracks

#

either way, if you treat all animation as transition between two states (where cycling is a case where the end state is equal to the start state), then you need to animate all state transitions

#

you can do this trivially by blending between these two states

#

and you can make the system more robust by allowing more keyframes

#

but because there's a lot of state transitions, that's a lot of keyframes if you want to have really good animation. if you don't need really good animation, you can skip programming this step and just rely on the simple blend

#

it should be clear why there's no such system anywhere
either way, this isn't my idea, its from overgrowth https://www.youtube.com/watch?v=LNidsMesxSE, not necessarily suggesting you watch it, only that it's available if you have the desire yourself ๐Ÿ™‚

GDC

In this 2014 GDC session, indie developer David Rosen explains how to use simple procedural techniques to achieve interactive and fluid animations using very few key frames, with examples from indie games like Overgrowth, Receiver and Black Shades.

GDC talks cover a range of developmental topics including game design, programming, audio, visual...

โ–ถ Play video
#

fun convo tho, i appreciate the interest

dry monolith
#

I think there's a misunderstanding somewhere

dry monolith
#

due to interpolation being in place

#

so you could take any pair of time t0 and t1 and sample a pose and interpolate between them

#

a pose is nothing but a set of TRS per bone

obsidian wolf
#

are you just saying that you can add additional keyframes at e for track 2 and 3?

dry monolith
#

track?

obsidian wolf
dry monolith
#

I am saying that timeline is a continuous curve and each keyframe is a control point

#

you can sample a pose using time

#

this fact is true for both systems

#

you add redundant control points which is a flaw in my eyes

obsidian wolf
#

i do not care about flaws unless they are impacting my progress tangibly on the actual product i'm working on

#

that's a bit of a lie

#

i do care, but i don't like caring and so i am consciously trying to not care

dry monolith
#

how do I stop being passive aggressive

obsidian wolf
#

i believe this is where you have to make a bit of a stretch to empathize with my goals

dry monolith
#

I was trying to make a sentence but it always comes off as getting personal wtf

obsidian wolf
#

LOL

#

man you should see my conversations with my and my lead

#

he's a dry swedish man and so all of our conversations would come across as an argument between two people who hate each other

#

well

dry monolith
#

basically to put it bluntly I'm not trying to persuade you in any way

#

because I can see that there's a certain degree of sunk cost fallacy at play

#

finish the product then maybe consider it again

#

I wanted to bring up that the workflow could become suboptimal because of how many things you need to tweak per pose, and it grows with each individual pose added to the animation

#

as amount of bones times amount of poses

#

it works for overgrowth well because they rely on the procedural generation a lot

obsidian wolf
dry monolith
#

it simulates forces and does IK

#

yeah but then when you need to edit it you need to propagate the changes manually

#

across all poses inbetween

obsidian wolf
#

what

#

can you rephrase

dry monolith
#

say you need to edit something in first pose and last pose

#

now you need to edit all of them

obsidian wolf
#

that's how i interpreted what you said

dry monolith
#

wait what does it do

#

you added a keyframe to one pose, correct?

obsidian wolf
#

i modified the tail on the first pose in that second video

#

where the first pose maps to one of two poses by my idle animation from my engine skeleton data

dry monolith
#

okay but does it apply to all of the poses?

obsidian wolf
#

no, but thats definitely not desirable

dry monolith
#

if the change is in first pose of the animation and last pose of the animation you're going to have to edit the poses inbetween them

obsidian wolf
#

there are only two poses per animation

dry monolith
#

I see

#

my point is moot for your use case then

obsidian wolf
#

low quality

dry monolith
#

that should settle the debate

obsidian wolf
#

sort of, maybe you're more convinced than i am now xD but yeah

#

it's a little funny because like

#

right now, looking forward, there's a shit ton of work, so really it'd be sub-par for me to spend more than this weekend on this animation problem

#

i can totally imagine a future where i finish a bunch of things though, and i look again at the animations

dry monolith
#

that's the sunk cost fallacy part I was talking about

obsidian wolf
#

and they dont' meet my standard

#

but i can't really focus on that future, if i'm in that future, i'm succeeding

dry monolith
obsidian wolf
#

yeah i don't really work on this on weekdays unfortunately

#

and i don't want to bring anyone else on because i'm not trying to make money from it

#

so they're incredible time constraints xD

obsidian wolf
severe spruce
#

spiffy lookin fella

obsidian wolf
#

i like his little sash, but it also kind of looks like he draped orange toilet paper upon himself

severe spruce
#

do not lick the orange toilet paper nervous

main cosmos
#

Looks like a wise monk

obsidian wolf
#

yeah i can't decide if i want to lean into it

#

thinking about what object he should hold

#

considered a floaty water orb

severe spruce
#

scroll?

main cosmos
#

Monks use quarterstaffs ofc

severe spruce
#

four quarterstaves

dry monolith
#

A khakkhara (Sanskrit: khakkhara; Tibetan: เฝ เฝเฝขเผ‹เฝ‚เฝฆเฝฒเฝฃ, THL: khar sil; Chinese: ้Œซๆ–; pinyin: xฤซzhร ng; Japanese pronunciation: shakujล; Korean: ์„์žฅ; romaja: seokjang; "tin stick", sometimes referred to in English as a pewter staff, is a staff topped with metal rings traditionally carried by Buddhist monks, particularly in East Asian Buddhism.Original...

#

both

obsidian wolf
#

tin stick

#

that's actually a really nice design though

#

the one thing that i've been considering more recently compared to when i started

#

is thinking about the casting/attack animations before i settle on any character design

main cosmos
#

Obviously the main thing you're missing are lusty argonian maids

obsidian wolf
#

like here, it's not exactly easy to figure out how a lizard that holds a pot should actually attack

#

a lot of mage characters in games have attack animations that essentially just look like they're throwing a baseball

#

maybe i just make every character with a staff swing it xD

severe spruce
#

swinger characters, hmm

main cosmos
obsidian wolf
#

considering yoinking the blurred normals from teardown

#

@main cosmos i'm assuming there's some depth discontinuity rejection on the sampling for that, any details?

main cosmos
#

it only blurs normals that are near the camera, for one

#

it probably does a depth discontinuity check too, though I can't remember for shure

#

if you have teardown you can just renderdock it urself

obsidian wolf
#

Hmm mayhaps

main cosmos
#

it's a little tricky to run under renderdoc, but I can help if u get stuck

#

you have to use the global hook instead of the normal way

obsidian wolf
#

if i'm feeling adventurous one day ๐Ÿ™‚ or really need some details

#

i think it's fairly simple, especially since i don't need perfect performance

#

it scaling on distance to camera is probably the only other detail

main cosmos
#

yeah, it ain't very clamplicated

obsidian wolf
#

i sort of do the opposite rn

#

instead of blurring normals, i outline them KEKW

#

so hard edges like this are black instead of smooth

main cosmos
#

since u have a non-voxel game, can't you just explicitly model the bevel

obsidian wolf
#

voxels are certainly the best case for blurred normals, i don't think it would be as good in my case

main cosmos
#

lel

obsidian wolf
#

bevels aren't just a modifier

#

there's a lot of topo maintenance that you have to do on them

main cosmos
#

I think outlines might look better for your game anyways

#

guess it's not too hard to whip up a normal blurring shader to see

main cosmos
#

I can confirm that teardown has a check to avoid blurring normals over depth discontinuities

#

the whole shader is basically 25 loc

obsidian wolf
#

ah shit

#

just realized that i'm probably going to have to have some extra shit on skeletons to use for gameplay far in the future

#

obviously its a bit of a dream to have to never edit skeletons

#

but knowing kills the dream ๐Ÿฅฒ

#

reimporting skeletons is very scary

severe spruce
#

i too am afraid of skeletons

obsidian wolf
#

๐Ÿ’€

obsidian wolf
#

i need more indicators to show what's actually happening here

#

he's set up rn to attack in a diamond shape around him, and hits in a 3x3 area

main cosmos
#

didn't know those apples were 3D models

#

I thought they were 2D sprites lol

#

I think that speaks for the aesthetic of your game

obsidian wolf
#
#

spot em ;)

#

i actually have other spawners set up, i just haven't added the button to instance them yet lmao

#

which takes like 2 sec, 1 sec

main cosmos
#

I think one is the apple

#

lmao they have the dark banana

obsidian wolf
#

banana rot mechanic

#

my model loading is on god fucked

#

๐Ÿ™

#

asset loading returns a reference now and modern memory management got me fucked up ๐Ÿ’€

#

nvm? am i an idiot? apparently clearing my entity registry is somehow deleting a model? void

obsidian wolf
#

ya im dumb

#

but also

#

i fucking hate templates, more specifically the error messages that they produce

#

one of the only things about c++ that legitimately bothers me

#

having to comb through 60 line, 1500 character error messages makes me feel like i'm living in the middle ages

#

like this being the simplified version

#

naw, fuck off

main cosmos
#

aw hell naw

#

btw check the output log for a better clue

obsidian wolf
#

the output log was worse

#

i know what the error was

main cosmos
#

it will look worse, but actually point at your loc that caused it

obsidian wolf
#

yeah, i usually just scan over both for a file, then for a line number if it's there

#

don't even bother trying to read it

#

my asset editor sucks

#

not really but the memory management of it sucks

#

pov: engine dev, you want to click a button you haven't used in a while

obsidian wolf
#

surely i wouldn't spend 90 minutes debugging something and making no progress

#

right

#

nvm false alarm i'm continuing being an idiot, but the 90 minutes did actually fix things

#

ok this only took like 30 seconds of actual asset editing

obsidian wolf
#

Saurian Sorcery

#

gameplay thought, fruits move too fast right now to attack them, but slower feels weird. i thought about having some sort of breakable obstacle that would spawn slowly in sequence from the thing that you're defending

#

basically like minions in league of legends, something for the fruits to get stuck on. this might come from allowing the fruits to attack the lizards though, which is planned soon, so it's just a note for now

obsidian wolf
#

i do not understand something

#

i have a r32 uint texture

#

fout_id = uvec4(fin.id, 0, 0, 0); (vout is the same as fin)
that i write to with nonzero data

#

but the value in the texture remains 0

#

i do not know all of the state that could be fucked up here monkaHmm

obsidian wolf
#

i am posting about this in questions since i am out of things to look at

obsidian wolf
severe spruce
#

so the turtle is a doctor

#

the eternal struggle between apples and doctors finally in a computer game

obsidian wolf
#

something something a day keeps the apples away? ๐Ÿ™‚

#

the idea with him was for him to make things attack him, he looks very masochistic though ๐Ÿ˜„

main cosmos
#

are the apples zapping the turtle

obsidian wolf
#

yes

main cosmos
#

it's zapping time

obsidian wolf
cedar rune
#

zapples

#

Why does he have two health bars

obsidian wolf
#

i like that

#

you talking about the yellow part?or the black line

cedar rune
#

OH its a 3D health bar

obsidian wolf
cedar rune
#

It looked a bit confusing but I see it now

#

Neat

main cosmos
#

ah

obsidian wolf
#

this is only slightly broken ๐Ÿ™ƒ

#

though, i actually didn't get any crashes upon testing all of this for the first time, so this is still relatively successful

main cosmos
#

is that the boiling oil thrower

obsidian wolf
#

of some sort ๐Ÿ˜„

obsidian wolf
#

looks better on 144hz! hmm...

#

thinking about if i care about that discrepancy

main cosmos
#

Tower suggestion

obsidian wolf
#

i have thought before about adding both octopus, and snails lmao

obsidian wolf
#

and use for a weapon

main cosmos
#

that guy looks like an acid/thorn thrower

obsidian wolf
#

i think i should represent women at least somewhat so i think it's gonna be a woman xD

#

woman lizard

#

i think they need a belt of some sort or something though

#

dark souls tattered garb

main cosmos
#

put a bandolier strapped across her body

#

then give her a big gun

obsidian wolf
obsidian wolf
#

pretending to be a concept artist

main cosmos
#

dominance: asserted

obsidian wolf
#

huh?

#

it was meant to be a thx for the idea :)

#

i wonder if that tone is not read now though ๐Ÿค”

main cosmos
obsidian wolf
#

oooh

#

i forgor it was even like that ๐Ÿ’€ im too used to it

#

i wonder now if character animators are more blind to t poses

obsidian wolf
main cosmos
#

twitchy

#

I think the idle animation is a bit intense, but maybe that's the low framerate of the video talking

obsidian wolf
#

no lol

#

its just bugged

main cosmos
#

oh mao

obsidian wolf
#

the jumpy frame is intended

obsidian wolf
#

:wikid:

main cosmos
#

Honestly quite incredible

obsidian wolf
#

i'm sort of wondering about my gameplay code

#

case study would be, for the assassin, their attack was supposed to weaken units hit

#

so i have a struct for numerical stats

struct Stat {
    umap<???, StatEffect> effects;
    float value();
};
struct StatEffect {
    enum Type { Type_Base, Type_Multiply, Type_Add, Type_Override };
    // ... value, stacks, etc.
};
main cosmos
#

weaken in what way?

obsidian wolf
#

make them take more damage

#

and my abilities have callbacks at start casting, trigger, and end casting, where i manage stuff like cooldowns and what not, so clearly we need something to go in the trigger callback which adds a stat that's used for a damage multiplier

#

something like

void ability_callback() {
  // ...
  enemy.damage_taken_stat.effects[this_ability] = StatEffect(Type_Multiply, .2); // takes 20% more damage
}```
#

but it needs to have a limited duration, so we need a timer class, i already have one that i use for all my emitters in the existing gifs, and even the abilities use it

main cosmos
#

hmm I feel like Risk of Rain would be a good study on modifier mechanics

obsidian wolf
#

risk of rain has horrid source code

#

like it's dog shit awful

main cosmos
#

lmao rip

#

what about ror2

obsidian wolf
#

err i meant 2

#

idk about 1

main cosmos
#

ok same

obsidian wolf
#

2's is available because of modding

main cosmos
#

clearly it works though :^)

obsidian wolf
#

my timers work like this

        add_timer(scene, name, [](Timer* timer, void* data) {
            auto payload = (EmitterTimerTimeoutPayload*) data;
            payload->scene->registry.destroy(payload->entity);
        }, payload, allocated_payload = true, permanent_timer = false)```
main cosmos
#

I was kinda hoping they'd have a nice system for this, but I guess not

obsidian wolf
#

so i can just remove the effect if i have the key into the stat effect map when the timer triggers

#

there's two questions

#

do i ever need to do something to the timer other than just let it tick

#

and 2. does it really matter what the key into the stat effect map is

#

because my abilities have UUIDs (random u64s), so i could just use those, and even offset if i need to have multiple timers

#

really i should just continue with what i'm doing and not try to solve problems that don't exist

#

i.e. just add a timer and let it tick, if i ever find a reason to interrupt it, then worry about it then

#

and just use the ability UUID as the key for the stat effect map

obsidian wolf
#

like

#

man i don't even want to think about it, all i remember is when i tried adding a burn effect there were like 6 different "Burn" classes

main cosmos
#

Lmao you definitely have a better idea of how to do this than I do then

obsidian wolf
#

the reason why i don't really think it works in ror2's case

#

is because honestly, the development doesn't go that quick

#

like they aren't on the high end of item count, complexity, or anything like that

#

something like noita i'd mad respect the source code of even if i didn't understand it at first

main cosmos
#

RoR has a funny lizard character that reminds me of your game

#

Also the art style in general

obsidian wolf
#

the poison thingy?

main cosmos
#

Yeah

obsidian wolf
#

yuh

main cosmos
#

Poison boi

obsidian wolf
#

i like the game, just not the code dogekek

main cosmos
#

Wit da leap

obsidian wolf
#

acrid

main cosmos
#

I bet @urban lantern would have some good ideas about making an ability system

#

Heh, get teleported

obsidian wolf
#

for why?

dry monolith
obsidian wolf
#

naw

obsidian wolf
#

deccer was not

#

they were in the thread before your projects and i think joined for a bit at the start

urban lantern
#

no clue what risk of rain is

main cosmos
# urban lantern no clue what risk of rain is

SURVIVE AN ALIEN PLANETOver a dozen handcrafted locales await, each packed with challenging monsters and enormous bosses that oppose your continued existence. Fight your way to the final boss and escape or continue your run indefinitely to see just how long you can survive. A unique scaling system means both you and your foes limitlessly increas...

Price

$24.99

Recommendations

153803

Metacritic

85

โ–ถ Play video
urban lantern
#

hmm ive seen that somewhere some time ago

obsidian wolf
#

i been tryin to figure out how to add an ability to lizards that isn't just their basic attacking

#

there can be

  • just a button on a UI that you click
    -> with a cooldown?
    -> driven by mana that you get from attacking / being attacked?
    -> available on kill?
  • automatically with the above conditions
  • the one that i'm most fond of currently, a special tile in every area that you can place a lizard on to make them "cast"
#

i also probably want the enemies, or at least special ones, to have the same ability and casting sytem, so if it was player controlled, then it would be some AI heuristic

#

and if it was a tile, then there would be a tile for the fruits and for the lizards

#

i think i'm gonna start with the tile idea

#

since it's the most unique, and the others will be a fallback if i don't like it for some reason

obsidian wolf
#

also fixed a lot of the shit normals on the models

#

the tiles are very visible ๐Ÿ˜–

main cosmos
#

however, it can work if you don't expect the player to have more than a handful of towers at a time

obsidian wolf
#

i'm a little micro freak

main cosmos
#

(i.e., not bloons)

#

idk if you've played the company of heroes series, but it's great in terms of micro and per-unit abilities

obsidian wolf
#

nah i haven't

main cosmos
#

basically you only control like 6 squads (no individual unit control) at max, and some of them have manually-activated abilities like grenades and such

obsidian wolf
#

the main reason i didn't like sc2 was the build order geekiness

main cosmos
#

but it's pretty manageable, partly because abilities cost resources

main cosmos
obsidian wolf
#

im sayin the opposite

main cosmos
#

CoH places more emphasis on individual unit micro

obsidian wolf
#

wait what's the difference

main cosmos
#

SC: micro an army and an economy
CoH: micro a few squads

obsidian wolf
#

oh

main cosmos
#

it means you give a lot more attention to individual units compared to SC

obsidian wolf
#

i've always imagined a game where you control like 3 league of legends champions at the same time doing slightly different task as both

#

entirely unexplored and super fun

#

it sounds at least in that direction, so i'm interested to try it

#

i spent like 2 years of my life thinking about what parts of it people potentially wouldn't enjoy and how to avoid that

#

le classico wanting to make a super game

main cosmos
#

if you make it an mmo it will inevitably be a success

obsidian wolf
#

truly, i'm integrating networking as we speak

#

googling "how to make an MMO with RPC networking protocol"

dry monolith
#

MMO with HTTP

obsidian wolf
#

@main cosmos'

#

oops didn't mean to send but is COH1 worth it?

#

or only COH3

main cosmos
#

Haven't played coh3 yet but it seems good

#

Coh1 and coh2 are both worth it, though maybe coh1 is better for single player

#

Coh2 has steam workshop support which is quite nice

#

And matchmaking if you want to do PvP or PvAI

obsidian wolf
#

no interest in pvp

#

i saw some reddit comments saying that coh2 just had a couple more problems

main cosmos
#

Both are solid choices tbh

#

But I think the community content gives coh2 an edge overall (coh1 has it too, but it's harder to install mods)

obsidian wolf
#

i would just get 3 but 60$ lol

#

reminds me of how at my company all of the execs say 70$ instead of 60$ now void

#

what a splash

urban lantern
#

@obsidian wolf can you show @grave nacelle your animation editor thing again? they are too shy to ask ๐Ÿ˜„

grave nacelle
#

lol yes i would like to see

obsidian wolf
#

skeleton editing?

grave nacelle
#

the graph part

obsidian wolf
#

hmmm

#

i'm still not sure which part, i have two things, one for sequencing poses, and another for posing skeletons

#

when i import a model, the keyframes in the animation all get put into the "Extras" category

grave nacelle
#

the part in which you can parametrize animations to use them

#

variables state

#

and etc

obsidian wolf
#

and i manually move them to the pose category by dragging or doing the checkbox + migrate button

#

the timing in the pose categories is time to interpolate to it

#

it's very hardcoded, but it's designed specifically for my game, because i don't have enough time to make or use a complex animation system

#

can also preview them to mess around with timing. one thing i wish i did here was differentiate between cycling and non-cycling states

#

there's no graph though, see below for reasoning ๐Ÿ˜„
-> because i don't have enough time to make or use a complex animation system

#

i also used to be able to edit the poses in engine, but i haven't reenabled this because right now i'm just importing everything from blender

#

the animation system is mostly from this
https://www.youtube.com/watch?v=LNidsMesxSE
so if you're not using it or something similar, it's pretty hard to reference this stuff honestly

GDC

In this 2014 GDC session, indie developer David Rosen explains how to use simple procedural techniques to achieve interactive and fluid animations using very few key frames, with examples from indie games like Overgrowth, Receiver and Black Shades.

GDC talks cover a range of developmental topics including game design, programming, audio, visual...

โ–ถ Play video
#

this is what the results end up looking like for ~10-12 poses per character, they're not perfect but about as well as i can do without it being my job xD

#

if this isn't what you were lookin for, that's ok, its still fun to talk about ๐Ÿ™‚

grave nacelle
#

no it wasnt, i was looking for a graph editor for animation but it interesting anyway

obsidian wolf
#

yeah, i wanted to do that too, but decided just to hard code my graph into code

#

limiting keyframes to poses allows me to treat state transitions as just pose interpolation

obsidian wolf
#

i have seemingly learned that chameleons are the only lizards that catch bugs with their tongue

#

and now i have to decide whether i care

#

chameleons are so neat why do they get so many unique features

main cosmos
#

They got the p2w edition of life

obsidian wolf
#

truly

#

Watch these charismatic creatures shoot their tongues out like arrows to catch an insect, mimic leaves swaying in the wind, and display their hidden colorsโ€”and learn just how they do it.
โžก Subscribe: http://bit.ly/NatGeoSubscribe

About National Geographic:
National Geographic is the world's premium destination for science, exploration, and adve...

โ–ถ Play video
dry monolith
#

yes indeed, better use http

spring sentinel
#

No

#

Too many game engines use crap like RPCs and replication

#

Those donโ€™t scale very well

#

You need to go low level with your netcode and pack your bits into your packets manually, counting them accordingly. You need to set up your protocol to be resilient to lost packets and not halt the simulation just because delivery wasnโ€™t ACKโ€™d.

#

Bandwidth is going to be a concern with any MMO. Donโ€™t put in an abstraction layer. Every byte matters.

obsidian wolf
#

tbh i sort of do want to make something multiplayer at some point, but certainly not an mmo lmao

spring sentinel
#

First problem is that youโ€™re trying to slap networking on it after the fact

obsidian wolf
#

what

spring sentinel
#

Usually you want to start netcode early on and design a game around it

obsidian wolf
#

i dont want to make this multiplayer

spring sentinel
#

Oh

obsidian wolf
#

yeah i know how bad of an idea that is

obsidian wolf
#

need hands + feet, texturing (beyond just gradients), and the clothes was just testing so they're poorly made, but i think it looks not shit anymore?

#

i get the feeling that chameleon characters are generally avoided because of how weird the proportions are on those creatures

#

btw this is why i havent done the hands and feet

severe spruce
#

have you considered making this character inflict sleep

#

a coma chameleon if you will

obsidian wolf
#

๐Ÿ™‚

#

the unironic drive of it was that i wanted someone that would grab fruits with his tongue

#

and apparently chameleons are the only lizards that grab distant things with their tongues

urban lantern
obsidian wolf
#

holy muck, i just wrote a bunch of gltf writing code and it worked on the first time

#

i'm a freaking professional

spring sentinel
#

Can it save out @urban lanternโ€™s cube?

obsidian wolf
#

the round trip deccer's cube test

spring sentinel
#

Ya

obsidian wolf
#

no ๐Ÿ˜„ i could, but hierarchies are extra work and i dont need them

#

trying to automate my WCF tileset

spring sentinel
#

Whatโ€™s with the wasted space

obsidian wolf
obsidian wolf
spring sentinel
#

It supports tile-based games

#

๐Ÿ™‚

obsidian wolf
#

pretty sure that's a networking task, assign it to the server folks (you) ๐Ÿ™‚

spring sentinel
#

Oh just use my API

#

Have a collision map on the server. Pass in the target tile coordinate you wanna move toward on the next tick and a youโ€™ll get a stream of responses on what tile your character should be standing on every game tick back.

#

Just interpolate for rendering in between with whatever animations you like.

obsidian wolf
#

in approximately 50 years

spring sentinel
#

Ha

main cosmos
#

new mechanic for saurian sorcery 3

obsidian wolf
#

for the merch

#

tho that's actually a very neat idea

#

if only i could disassociate from the "japan" meme

main cosmos
#

Reminds me of this incredible meme

obsidian wolf
#

lmao

obsidian wolf
#

well i have all of the edges now

#

unfortunately 490 is a lot of meshes to make

#

so i'm going to try to generate faces instead of just edges

#

but idk how yet monkaHmm

obsidian wolf
#

i posted about this in the questions forum because it's a super niche problem, so visibility is good ๐Ÿ™‚ if you have any ideas, pls gib

obsidian wolf
main cosmos
#

I just noticed that the health bars have shadows lol

obsidian wolf
#

hehe, everything does, my materials don't have an option to exclude

#

(in this it's the range preview)

urban lantern
#

that looks super cool already

#

i also like the style of the whole thing

obsidian wolf
#

i'm sort of thinking about having gameplay mechanics not reference entities at all

#

so for example, the buff ability above would only buff a specific tile, not the orange guy that casts it

#

probably more effort than it's worth though

#

the current restriction is that abilities can only target squares, but their effects can then be attached to units

cedar rune
#

do your guys move

obsidian wolf
#

moving units from tile to tile costs money

cedar rune
#

I see

#

So that wouldnt transfer the buff

obsidian wolf
#

right, but you could buff a square, then swap units and transfer the buff

cedar rune
#

Thats interesting

obsidian wolf
#

and the way i'd have to set up self-buff abilities if i did it that way, is that it'd probably buff the last square that the unit was on, then teleport them back to it

obsidian wolf
#

finally made a tree

urban lantern
#

you have a hand for those kind of things

main cosmos
#

and a head

severe spruce
#

and my axe

obsidian wolf
#

not perfect, main issue is the arrow blending back into the quiver (which i have a fix for, it's just bugged), and we'll see how spawning the actual arrow projectile goes, but i like this ๐Ÿ™‚

#

the cast is supposed to be him throwing something, perhaps a large bear trap or a smoke grenade, not sure yet

obsidian wolf
#

i just realized they alternate hand sides in the idle animation facepalm

obsidian wolf
#

damn it's really crazy being able to reimport an animated mesh and not lose any data

#

takes like 3 minutes to fix that

obsidian wolf
#

nevermind i should not speak

main cosmos
#

Horrors within human comprehension

obsidian wolf
obsidian wolf
#

i have a teeny tiny problem, my ability casting works by having an ability targeting function, where when a target is found it casts a spell
works well if a spell is instant, but the more delay it has, the more likely it is to miss

#

it happens near the end of the vid above

#

there's two (and a half) ways i could fix this that come to mind

  1. instead of using the fruits current position, i have their pathing data, i could approximate how long it'd take for the ability to land (either pre-trigger casting time, or pre-trigger + travel time), and estimate where they'd be at that point in time
  • should be fairly accurate
  • fairly representative of how targeting actually works
  • can get kind of complicated, especially as abilities and effects grow in complexity (e.g. a unit has a move speed buff for 0.5 more seconds.. do i account for it if the ability will take 1.5 seconds to land?)
  1. i could update targeting at trigger-time (e.g. right when the arrow releases in the case above)
  • would be more accurate than currently is
  • very simple
  • lizards usually rotate to face their target, and turning to face it is usually done during the precast time, so this would mean they could cast in a direction they aren't facing
  • only mediocre accuracy

and the extra half option is to give lizards an "intelligence" stat, where i implement a tiered targeting AI system, and it selects the targeting behavior based off of it...
big raging crocodile? constantly missing attacks, but maybe the old wise wizard gives an aura that can help him out with that
old guy using a bow? knows the perfect square to target to maximize damage

  • unique to my knowledge
  • creates a lever to balance some things around
    ? probably not very intuitive (especially for minmaxers)
  • hardest to implement
main cosmos
#

Btw what age of empires 4 does is make projectiles curve towards the target (it seems like they follow some sort of parametric curve)

obsidian wolf
#

melee characters have this problem too, but #2 + that would work

#

its just a little odd because targeting is per-grid square only, and so that'd be a very large shift especially if not near the start of projectile life

spring sentinel
#

These are some of the same challenges missile guidance systems need to resolve.

main cosmos
#

but in a video game you can just cheat and make t=1 be the location of the target

obsidian wolf
#

instead of all dat im gonna do water this week or weekend i think

#

hardest part will be that i probably want to do reflections ๐Ÿ’€

#

and i have no clue how, i'm guessing i could do SS fairly easily, but i might just render twice from the camera flipped across the water plane lmao

main cosmos
#

rt bleakekw

obsidian wolf
#

literally the only reason i'm not going to intergrate any hardware RT is renderdoc

#

and software RT is too much work

main cosmos
obsidian wolf
#

renderdoc my beloved

main cosmos
#

bababooey

obsidian wolf
#

but i might just render twice from the camera flipped across the water plane lmao
i'm probably gonna do this xD

#

hmm wait does that even work

#

if the water plane isn't completely flat, idk how people distort it

#

i should probably just google around

main cosmos
#

Well it works for flat planes

#

UE has planar reflections as an option

obsidian wolf
#

i need at least a lil distortion, it'd probably be minimal tho

main cosmos
#

you can probably cook up some fake distortion to look like ripples or whatever

#

just by sampling the reflections with an offset

obsidian wolf
#

ye

#

i don't even think i draw a mesh for it

#

i also wanted to add a lizard bench for lizards, similar to TFT

#

mostly so they have a place to respawn and so the shop is less messy

#

not ugly water and that are soon tm ๐Ÿ™‚

dry monolith
#

also need to discard fragments above the plane, historically there were additional clipping planes in gapis for that, idk how it's done in modern days, could be manual discard calls

#

and pretty much you can't do planar reflections for curved surfaces

#

that's where probes begin to shine (very dimly and with artifacts)

obsidian wolf
#

hmmm

#

so SSR

dry monolith
#

adding normal maps and shifting uvs with them can simulate ripples somewhat plausibly but will expose parts where geometry cuts off at the waterline

obsidian wolf
#

the waterline will be masked off by foam

dry monolith
#

SSR is just bad, okay with probe fallback, but still meh

obsidian wolf
#

all of the references i liked for water are basically flat

#

i'm not doing no sea of thieves water, so maybe i can just do the planar hack and hide the artifacts

dry monolith
#

that's how it was done in 200X-s

#

e.g. half life 2

obsidian wolf
dry monolith
#

yeah foam works good

obsidian wolf
#

i basically just need a little movement so it isn't a static frame

dry monolith
#

can also mask away the ripple perturbations near the shore

main cosmos
obsidian wolf
#

what's the algo then? just march against planar render g buffer in reflection direction?

dry monolith
#

no just render using reflected camera and clip geometry above the water

obsidian wolf
#

yeah but how do offset

#

adding normal maps and shifting uvs

dry monolith
#

just offset literally

#

read normal, add normal*parallax_factor to uv

main cosmos
#

just add water one misinfo

obsidian wolf
#

oh

#

hmmm, i'm struggling to grok it, is depth not a factor?

#

i guess not

dry monolith
#

it'll look fine as far as I remember

obsidian wolf
#

well no point to overcomplicate it then unless i run into problems

#

i'll just try that

obsidian wolf
dry monolith
#

this is a github page that revives an ancient tutorial for XNA and D3D9 which has some pages on how to do planar water with reflections and refractions using method I described

#

I found the method there btw

#

or you can directly use the wayback machine if you prefer

obsidian wolf
#

hmm, nice

obsidian wolf
#

ignore reflections for a while lmao

#

add some noise waves with this and call it a day for now, i consider trying to experiment with hue shifts in the water to make things fancy

main cosmos
#

I hab idea

#

you can use the foam texture with some kind of noise

#

so it'd be noise that's only visible where the texture isn't black (i.e., in areas where it currently is)

obsidian wolf
#

are you just saying add the current of the image and the white parts of this? monkaHmm

main cosmos
#

uh I mean maybe multiplying the "foam density" (the texture you generate now) by noise

obsidian wolf
#

it'll probably be an add but yeah

#

im not sure

#

i want to try a lot of things because it's kind of random what looks good

main cosmos
#

the "adding" thing would be something else

#

like global foam that doesn't just affect the shore

#

what I'm talking about is specifically the shore foam, trying to make it more natural looking

obsidian wolf
#

i'll smoothstep after the add

#

so it'll affect it

#

perhaps not enough

obsidian wolf
obsidian wolf
#

ok

#

my experiments with hue shifting look really bad

#

it might look better with gradients on the tile set, which i've considered doing

severe spruce
#

bruh this is looking better every day

obsidian wolf
#

froge glad it's not looking worse every day

severe spruce
#

we'd still have some time until it would look bad froge

obsidian wolf
main cosmos
#

Mmm worter

#

Btw another feature you could add is a fresnel effect where the water subtly changes color with the viewing angle

obsidian wolf
#

i might do that

#

but it'll have to be based off the water plane i think to avoid it being too detailed amongst the stylized look

main cosmos
#

what I did back when I fiddled with water was make it turn slightly greener as you looked more directly at it. It was a very low frequency effect

#

If you ever add reflections then you can add proper fresnel and then it'll look perfect

obsidian wolf
#

this is a neat screenshot

main cosmos
#

what's that

#

looks like someone testing different water shaders

obsidian wolf
#

that's what i get out of it

obsidian wolf
#

i do like it, i'm exaggerating the effect here to evaluate it, but when it's subtle it looks really nice

#

i'm not so sure the right one is better though

main cosmos
#

I think it looks more plausible

obsidian wolf
#

i haven't found many good references

main cosmos
#

some random pic

#

that's a very low view though

main cosmos
obsidian wolf
#

a big problem with references is that that the sky and shallow reflections play a huge role

#

another one is that most real references are on beaches

main cosmos
#

yeah the depth has a big effect on the greenness of the water

obsidian wolf
#

a lot that i see look darker at more direct angles purely because there is less reflection

main cosmos
#

that's if the water is very deep