|
jizzy sillage posted:Okay yeah, my bad, I forgot that this is for your job. I did mean this as "no matter where you look, rakes everywhere", but I can understand wanting to vent about something without being criticised for it; I'm sorry. Thank you, I appreciate this. roomforthetuna posted:Since you were jumped on so much last time you said a thing, when it did seem like you were being a bit weird about getting constructive responses to a request for help, I feel like I should say this time that I appreciated your grumbling for what it was and this time the response seemed like the one being weird. Yeah I get it; and for what its worth to jizzy I think there can be definitely cases where someone can learn 'the hard way' including me that "this isn't for me". I taught game programming at a high school for about a year and decided that pursuing something like JET as a means of visiting Japan wasn't going to work out, I enjoy teaching but not teaching children, especially when there's an uncontrollable undisciplined mob of them. I made a little web based js/html/css visual novel for that course and also learned that I didnt like web programming very much! And switched to making fun little game design puzzles in Unity which I think was much better and wish I thought of it earlier. I don't think my experiences and annoyances with Unreal point to that this particular engine isn't for me; there are after all mitigating circumstances, like using Blueprints for work reasons over C++ for the time being. I think I do definitely prefer Unity3D for its GameObject/Component system because I can more easily plop down "empties" that only really expose the base minimum and isn't full of a whole bunch of obscure and unnecessary settings and parameters, especially for multiplayer fps poo poo. Plus its a little easier to plop down my pre-existing little libraries into Unity then in Unreal. But Unreal ultimately is The Big Professional Game Engine that basically most game studios use, and most jobs I interviewed for used it, very few used Unity. This kinda reminds me of the Maya/Blender debate where unfortunately while Blender is probably my preferred (and free) 3D modeling software its also not the one most studios actually use unless they're small or only need assets in an ad hoc manner. Also I also think its good to be diverse in my tools, I'm always learning a lot everyday using Unreal and I like having that experience, in my previous job we rarely used blueprint and spending the past month mostly using blueprint has removed a lot of my previous apprehensions as I'm more used to it; its just unfortunate that there's less rakes but more like thorns that prick my skin when I grab it a little roughly at times. The thorns in this case being I wished to use the Pawn in a way to do certain camera trickery I think would be normal things for developers to do. Like due to the weird issues with Unreal's handling of rotations (legitimate issues, a lot of people coming in from Unity face many of the same issues with Gimbal lock that plagues Unreal that don't occur as often in Unity afaik because of Rotators aren't Quaternions) I want to have my "Pawn" actor centered on my "Target" but then offset the camera so all I need to do is rotate the Pawn so I can have full 3D rotations because doing it the other way just kept breaking down due to gimbal lock. And then well woops turns out the pawn despite not having a collision mesh still collides; which sure okay its fine that this is intended. I just wish it would've been more obvious that this is the default pawn-spawn behaviour; which as far as I can tell even googling after the fact knowing the issue, I still couldn't find where this is indicated, maybe its buried in a youtube video.
|
# ? May 4, 2024 17:19 |
|
|
# ? May 23, 2024 16:22 |
|
Is this the place where I ask for help with collision detection math? I have collision detection working for moving circles and static lines, but I actually need line segments, and the handling the edge (literally) cases have wrecked me. I can solve some edge cases but not all of them and my solution is a bunch of “try this then that” rather than a general solution. This question on stack exchange is essentially exactly what I’m trying to solve and I’m trying to implement the answer, but the sentence “Consider 𝑡 as given and ⋆ as quadratic equation in 𝑠.” seems to be doing a lot of heavy lifting that I just don’t understand. I understand quadratic equations but this does not look like one and I don’t know how to make it look like one, and even if I did I then don’t know what it means to take 𝑡 as given, just slap a value in?
|
# ? May 4, 2024 21:41 |
|
ArcticZombie posted:I have collision detection working for moving circles and static lines, but I actually need line segments, and the handling the edge (literally) cases have wrecked me. I can solve some edge cases but not all of them and my solution is a bunch of “try this then that” rather than a general solution. It's solving for time rather than for position, but given you know how the circle is moving you can calculate where it is at the resulting time. If you don't deal with acceleration then you can simplify that out.
|
# ? May 4, 2024 21:49 |
|
If you already have line-circle collisions working, you can find the closest point on the line at the time of contact - if that's not within the endpoints then it's a false collision and you should ignore it. Then you just need point-circle collisions against the line endpoints - which if you already have circle-circle collisions, is just a special case where one of the circles has radius 0. (Or perhaps a radius related to the line width, if you're doing physics calculations that reflect the width of the lines as drawn on-screen)
|
# ? May 5, 2024 01:31 |
|
I've been looking for free/cheapish retro game assets on Itch. It's for a pixel art game, so yeah pixel art, chiptunes, and sound effects in that vein. Are there any other sites that are good for that sort of thing?
|
# ? May 9, 2024 07:40 |
|
Cicero posted:I've been looking for free/cheapish retro game assets on Itch. It's for a pixel art game, so yeah pixel art, chiptunes, and sound effects in that vein. Are there any other sites that are good for that sort of thing? Quality varies but OpenGameArt has some good stuff.
|
# ? May 9, 2024 15:48 |
|
Cicero posted:I've been looking for free/cheapish retro game assets on Itch. It's for a pixel art game, so yeah pixel art, chiptunes, and sound effects in that vein. Are there any other sites that are good for that sort of thing? https://kenney.nl/assets
|
# ? May 9, 2024 17:26 |
|
This and https://opengameart.org/.
|
# ? May 11, 2024 08:34 |
|
+1 for Kenney. I got the All-in-one pack during a giveaway and it covers so much, for prototyping stuff it's been a godsend.
|
# ? May 11, 2024 17:12 |
|
Is there no straight forward technique in a shader or shader graph/nodes in either Unreal/Blender/Unity of having a wireframe but only of the edges of variable pointy/edginess? I don't mean like a outline shader like for some toon shaders but something that could be used to procedurally shade rust/wear and tear like for a robot?
|
# ? May 11, 2024 18:01 |
|
Raenir Salazar posted:Is there no straight forward technique in a shader or shader graph/nodes in either Unreal/Blender/Unity of having a wireframe but only of the edges of variable pointy/edginess? I don't mean like a outline shader like for some toon shaders but something that could be used to procedurally shade rust/wear and tear like for a robot? I would use the smoothing groups on the mesh to bake a UV mapped texture that has the distance to the nearest hard edge. Maybe round the inside corners a bit too. Then sample that in the shader.
|
# ? May 11, 2024 19:24 |
|
Raenir Salazar posted:Is there no straight forward technique in a shader or shader graph/nodes in either Unreal/Blender/Unity of having a wireframe but only of the edges of variable pointy/edginess? I don't mean like a outline shader like for some toon shaders but something that could be used to procedurally shade rust/wear and tear like for a robot? Yeah in-engine this is tricky, usually it's done by baking a map as KillHour suggested. "UTC Shader Library" (Epic Marketplace, free) might be able to assist, it's got material functions to generate some useful masks so you don't have to write them yourself. One of those masks is an Edge Detection mask, so you could procedurally add edge wear.
|
# ? May 12, 2024 01:36 |
|
Thanks y'all, I was experimenting with shaders and stuff.
|
# ? May 12, 2024 02:32 |
|
Raenir Salazar posted:Thanks y'all, I was experimenting with shaders and stuff. The problem is that the pixel shader doesn't really have access to information about edge groups. I think the newest versions of Unity expose barycentric coordinates in shadergraph (or you can manually pack them in the shader data), which you can use to figure out how close you are to the edge of a triangle. But that won't tell you anything about how sharp that edge is. You might be able to combine that with normal information to figure it out, but it's a lot of math that you'd be doing every frame just to get a constant answer - which is ideal for a baked map. I think a geometry shader might be able to do it, maybe? I don't know a ton about them, though.
|
# ? May 12, 2024 02:47 |
|
Oh yeah, I came here to share something that I figured out and was very hard to Google. I'm working with the UI Toolkit in Unity for my graph editor thing and that uses Manipulator classes that implement logic to work with IManipulatable interfaces on the UI elements so you can interact with them. If a UI element has multiple IManipulatable interfaces (like ISelectable and IDraggable), I need a way to figure out if one is already doing something and tell any others to gently caress off. I decided to do this by creating an IReservableManipulator interface that all my IManipulatable interfaces can inherit from, with a default reservation implementation. It looks like this: C# code:
C# code:
Edit: An important caveat is that you cannot access a protected property defined this way outside of the default implementation. This doesn't work, for example: C# code:
C# code:
KillHour fucked around with this message at 03:32 on May 12, 2024 |
# ? May 12, 2024 03:07 |
|
Raenir Salazar posted:Is there no straight forward technique in a shader or shader graph/nodes in either Unreal/Blender/Unity of having a wireframe but only of the edges of variable pointy/edginess? I don't mean like a outline shader like for some toon shaders but something that could be used to procedurally shade rust/wear and tear like for a robot? You also can do this by sending a lot of extra data to the pixel shader as well, like sending all the corners of each triangle baked into each vertex as extra geometry data. I don't recommend it.
|
# ? May 12, 2024 08:44 |
|
Cicero posted:I've been looking for free/cheapish retro game assets on Itch. It's for a pixel art game, so yeah pixel art, chiptunes, and sound effects in that vein. Are there any other sites that are good for that sort of thing? It's worth keeping an eye on the Humble Bundles, they're pretty much always running some sort of game asset bundle. Also, if you're using Unreal or Unity, the marketplace and asset store have some real gems (among a lot of trash). You can usually grab the assets and use them in other engines anyways, but no guarantees.
|
# ? May 12, 2024 09:03 |
|
KillHour posted:<C# default interface implementation things> Just a word of caution: default interface implementation methods/properties are a can of worms and it's hard to get to grips with some of the ways they interact with things. The problem is that you end up trying to use them as a base class (which is what you're already doing), in situations where you're unable to have a real base class (because your class needs to inherit from something already like you do from VirtualElement). There's lots of quirks where basically which interface implementation you get will depend on how the caller is storing a reference to your object (do they have an IReservableManipulator, do they have an IMySubclassedInterface, do they have a MySubclass; does any of those layers redefine the implementation?). Basically as you call out: KillHour posted:I don't just want any random code to be able to come in and replace the reservation because it will break poo poo. This is a problem, and this approach doesn't do much to stop that. Your IDraggable/classes could just implement their own methods for those reservation methods, and this is the behaviour: code:
Since even right now you're reliant on the caller code to correctly call TryReserve/TryRelease, I don't see a reason you can't do it as just a class and compose it instead of using inheritance: code:
code:
e: You can also use extension methods to mitigate the possibility of someone overwriting the default interface implementations though. So with your code, just do: code:
Red Mike fucked around with this message at 12:16 on May 12, 2024 |
# ? May 12, 2024 12:12 |
|
cultureulterior posted:You also can do this by sending a lot of extra data to the pixel shader as well, like sending all the corners of each triangle baked into each vertex as extra geometry data. I don't recommend it. Yeah I was curious mainly if there was a decent ish method like this because to some extent as a developer if I can avoid having to boot up artist tools that seems the most convenient to me but the baking the information into a texture route just seems overwhelmingly the better choice; curiosity only goes so far before the effort just seems not worth it.
|
# ? May 12, 2024 15:15 |
|
Raenir Salazar posted:Yeah I was curious mainly if there was a decent ish method like this because to some extent as a developer if I can avoid having to boot up artist tools that seems the most convenient to me but the baking the information into a texture route just seems overwhelmingly the better choice; curiosity only goes so far before the effort just seems not worth it. There's nothing saying that as a developer you can't automate the baking of the data procedurally. Think of it as an optimization - you're doing the calculation once and reusing it instead of doing it every frame. Thanks for this. You're right that default interface implementations are hard to work with. Honestly, this isn't shipping as a public API or even going to be used by anyone but me - I just wanted to have a single place to change the implementation if I need to do that instead of needing to remember to do it in each class. The composition approach of having a helper class for this might be a better way to go, but for some reason, I tend do avoid making classes like that. I'd prefer if the component was responsible for its own state instead of needing another class object that could get lost somewhere (I know I could make it readonly). Just how I think about things, I guess. In practice, it probably won't matter - I'll never override that implementation, and even if I did, I would never call that method from the child class, always from the interface. And even if I did THAT, it would only ever break that specific component. What I wanted to avoid was getting into a state where one component accidentally releases a reservation that another component has, and now I'm into undefined behavior territory and it's a pain in the rear end to debug because the component that broke doesn't actually have anything wrong with it. I think my implementation covers that, since there's no way to set that property for everyone else without going through the default implementation. In any case, thanks for going over that code. I learned some stuff, even if I probably will leave good enough alone until it does something to annoy me / make me rip it out. The bigger annoyance is that I have to set things up in the order that I want things to lock unlock, because a single "mouse up" event on one manipulator might unreserve that component before another manipulator gets a chance to check to see if it's reserved, and both manipulators apply their effects instead of just one. I can resolve that by tracking the event that caused the unlock to happen and ignoring that same event, but events are pooled and I don't want to keep a reference around. There's an event ID in the base event type, but it's internal so I can't use it. I might have to add a timestamp or ID to my custom event. Edit: I just realized I can use StopImmediatePropagation() to consume the event. KillHour fucked around with this message at 20:41 on May 12, 2024 |
# ? May 12, 2024 20:29 |
|
Honestly it's this exact sort of scenario that C# just has no good way to deal with right now, so whatever works for your use-case is best. I tend to avoid default interface implementations where possible only because IDEs love to suggest refactoring changes that end up breaking them sometimes, or when I refactor out a method it'll pick the wrong type for a parameter and all of a sudden it breaks halfway through some method call. And because usually it's something like UI or performance-important update methods, it ends up being such a pain to track down because there's not enough logging/tracking of it.
|
# ? May 12, 2024 23:15 |
|
The High Priest has spoken. https://twitter.com/TylerGlaiel/status/1788362032699555985
|
# ? May 14, 2024 03:34 |
|
Raenir Salazar posted:Is there no straight forward technique in a shader or shader graph/nodes in either Unreal/Blender/Unity of having a wireframe but only of the edges of variable pointy/edginess? I don't mean like a outline shader like for some toon shaders but something that could be used to procedurally shade rust/wear and tear like for a robot? It is why Substance and Blender bake them. You could bake a AO map for the model and use that as an input to do the actual wear and tear in a shader. To be honest, that is way more convoluted than just using an application to do it for you.
|
# ? May 14, 2024 07:22 |
|
Raenir Salazar posted:The High Priest has spoken. https://i.imgur.com/EZK2hWw.mp4
|
# ? May 14, 2024 11:55 |
|
Hahaha, awesome and hilarious. Is that your game? Looks amazing.
|
# ? May 14, 2024 13:09 |
|
Raenir Salazar posted:Hahaha, awesome and hilarious. Is that your game? Looks amazing. Yeah, it's called Goblin Camp. I'm pretty happy with how I got the water simulation working so this was a good excuse to do something stupid with it.
|
# ? May 14, 2024 13:24 |
|
Aryoc posted:Yeah, it's called Goblin Camp. I'm pretty happy with how I got the water simulation working so this was a good excuse to do something stupid with it. Love the art style, it feels like the same aesthetic feeling of like, Age of Empires but with modern graphics in a way that preserves the feel. Honestly that's probably my criticism of like Starcraft II, and other games like it they feel aesthetically like a step down. Do you have an early access page on steam or twitter where I can follow/like and subcribe/doot the bell icon and help greenlight etc?
|
# ? May 14, 2024 15:05 |
|
Raenir Salazar posted:Love the art style, it feels like the same aesthetic feeling of like, Age of Empires but with modern graphics in a way that preserves the feel. Honestly that's probably my criticism of like Starcraft II, and other games like it they feel aesthetically like a step down. Thanks, I'll pass on the compliments to our artist. And yes, we do have an early access page: https://store.steampowered.com/app/2431980/Goblin_Camp/ We also just released our demo too.
|
# ? May 14, 2024 16:19 |
|
Aryoc posted:Thanks, I'll pass on the compliments to our artist. Excellent! Does your artist do paid work? If you could dm me their social media or art station so I can make a note of them for later.
|
# ? May 14, 2024 16:27 |
|
Oh neat I didn't know the demo was out! I remember playing this like what, 10 years ago in ascii?
|
# ? May 14, 2024 16:31 |
|
More like 14 years ago in ascii! Long long time ago. As for the artist he's not doing any other work at the moment, we're both working on this game full time.
|
# ? May 14, 2024 20:01 |
|
Aryoc posted:More like 14 years ago in ascii! Long long time ago. As for the artist he's not doing any other work at the moment, we're both working on this game full time. Yeah that makes sense but I'd still appreciate getting their artstation/etc for future reference should in the future their situation changes. To be clear it's not like I'd be able to commission them or anything like that now, any projects I have would be years probably away from potentially being able to hire anyone, I just want to add entries to my spreadsheet of doom of potential contractors to contact first.
|
# ? May 14, 2024 20:12 |
|
Raenir Salazar posted:Yeah that makes sense but I'd still appreciate getting their artstation/etc for future reference should in the future their situation changes. To be clear it's not like I'd be able to commission them or anything like that now, any projects I have would be years probably away from potentially being able to hire anyone, I just want to add entries to my spreadsheet of doom of potential contractors to contact first. Alright, I'll ask him and send you a pm
|
# ? May 15, 2024 07:47 |
|
I think I finally cracked the code on writing SDF shaders! I got a loop working sampling a texture for positions and relative to UV space displayed 4 shapes (at the corners)! From within a Custom Expression node which is kinda like a mini-HLSL shader. This is good for me in particular because there's some materials out there on procedural world generation regarding SDFs that I had no idea what was going on but I think I have a better idea now. But yeah now instead of drawing a sphere to a texture 50 times a frame I can draw one sphere 50 times once instead of doing like 50 cpu-gpu transfers. Aryoc posted:Alright, I'll ask him and send you a pm Thanks!
|
# ? May 17, 2024 14:44 |
|
Raenir Salazar posted:I think I finally cracked the code on writing SDF shaders! Congrats! This is a long and frustrating but rewarding road. If you haven't seen it yet, I highly recommend checking out this blog: https://iquilezles.org/ I've spent the last 2+ years absolutely obsessed with SDFs, so feel free to ask any questions.
|
# ? May 17, 2024 14:55 |
|
KillHour posted:Congrats! This is a long and frustrating but rewarding road. Haha I think I have a few of their pages bookmarked! I think one thing that was confusing to me is how people seemed to approach SDFs tended to look kinda different if it is in a shader vs something else; here's a page mentioning distance fields that looked interesting but was hard to tell really what was happening: https://www.redblobgames.com/x/1728-elevation-control/ So now that I've got a bit more experience with it I'll take another crack at it, I took a quick glance and the main thing is how the different fields particularly the boundary one I'm not sure what's being indicated as I play around with it, but I'll see when I look at it more I guess. From a terrain procgen project perspective I think my main approach is to gather up different tools so I can get the results I want in different situations, small islands are probably going to require a different approach than a continent etc.
|
# ? May 17, 2024 16:26 |
|
I just spent most of today trying to debug why a colour I picked to be roughly 0.5, 0.5 for the purposes of placing a circle and for some reason it was like 0.2, 0.5 instead; turns out by default textures have sRGB enabled, which screws with the colour that gets sampled from the texture!
|
# ? May 17, 2024 21:37 |
|
Thought you folks would find this interesting! https://twitter.com/VictorTaelin/status/1791213162525524076?t=tzBIDRRCnLMgXpZ_rjaOWw&s=19 https://twitter.com/VictorTaelin/status/1791234624946860059?t=I3OkROCrQjpbFhom3NtByQ&s=19 BornAPoorBlkChild fucked around with this message at 00:53 on May 18, 2024 |
# ? May 18, 2024 00:35 |
|
Hey thread. I'm not sure if this is a common question that's already been answered, I didn't really see anything in OP or first page but I might have missed the obvious, so apologies. I've been thinking about game devel on a retro system for a while, dabbled in a few NES tutorials have some tech demos under my belt. I'm not terribly concerned about the act of getting the hardware to do what I want, I'm figuring that all out. What I am kind of stuck on is understanding how you develop a "plot" through a game loop. For a platformer type of game I think I can sort of wrap my head around how you'd do this. And indeed, most tutorials show a simple platformer where you load some assets and move a character through a simple environment. What is nebulous to me is where you go when you want something a little more complex. I'm going to use Zelda or one of the NES Final Fantasy games as an example, but don't mistake me as having some grand aspirations of writing a massive world RPG -- that's just the best example I have to illustrate my confusion. How do you handle something where you have many options for scenes, stages, etc. on a conceptual level? I'm happy to do the research myself but I think my lack of terminology is failing me -- not sure what to even look for. I'm also somewhat worried that some of the tutorials I found online that did kind of go into this were very technology or engine oriented, where I'm just kind of hoping for info at a conceptual level that I could theoretically apply to just plain NES assembler. I did find the disassembly for Zelda and Mario and a few other games online, but I'll be honest -- they're very complex, and while I'm sure I could actually follow the flow to figure this out, I'd love if anyone had some resources that just kind of explain at a higher level rather than trying to piece the game loop together from hours and hours of studying the code. My goal right now is just to absorb information. I'm not even sure if I want to try writing a game, but at this point I'm curious enough to just want to know how it's done for its own sake. I'm CERTAIN this HAS to exist in some form. Not sure if I asked a lot of nonsense so hopefully you get my meaning, happy to clarify my issues if needed. Thanks!
|
# ? May 23, 2024 14:20 |
|
|
# ? May 23, 2024 16:22 |
|
some kinda jackal posted:Hey thread. I'm not sure if this is a common question that's already been answered, I didn't really see anything in OP or first page but I might have missed the obvious, so apologies. you'll have a better time making games if you start on something that isnt incredibly constrained. this coming from someone who spends a bunch of time programming in those constrained environments. the answers to your questions involve either graph theory, compression, or program structure for legacy systems with constraints that just dont exist today. answers for a system as constrained as the NES are going to trend application specific very quickly.
|
# ? May 23, 2024 14:53 |