Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
Raenir Salazar
Nov 5, 2010

College Slice
Programmers never read the documentation anyways. :(

Adbot
ADBOT LOVES YOU

Frosty Mossman
Feb 17, 2011

"I Guess Somebody Fixed All the Problems" -- Confused Citizen

pseudorandom name posted:

You can't expect programmers to read the game development thread, they have real jobs that pay well for reasonable hours.
Oh I'm a designer, I know very well how hard it is to make anyone read anything, and this thread is nowhere near as well formatted as my documentation. :v:

Raenir Salazar
Nov 5, 2010

College Slice

Frosty Mossman posted:

Oh I'm a designer, I know very well how hard it is to make anyone read anything, and this thread is nowhere near as well formatted as my documentation. :v:

Shots fired!

neurotech
Apr 22, 2004

Deep in my dreams and I still hear her callin'
If you're alone, I'll come home.

What are you all using for project management for your game project(s)? I'm messing around with GitHub's "Projects" feature but I'm not really enjoying the experience.

Raenir Salazar
Nov 5, 2010

College Slice

neurotech posted:

What are you all using for project management for your game project(s)? I'm messing around with GitHub's "Projects" feature but I'm not really enjoying the experience.

*awkwardly looks away*

On a good day I just open up notepad++ and write todo's.

jizzy sillage
Aug 13, 2006

Somewhere in my head, accessible only when I've taken my Ritalin. Otherwise it's basically a floordrobe in there.

neurotech
Apr 22, 2004

Deep in my dreams and I still hear her callin'
If you're alone, I'll come home.

I feel it. I'm building my first capital G game (just me on the project) and I'm finding it dangerously easy to flit around to different programming/game design challenges and then, before I know it have a bunch of partially-finished features in play.

I'm trying to give myself some structure via project management etc to reduce the chance of that happening.

5TonsOfFlax
Aug 31, 2001

neurotech posted:

What are you all using for project management for your game project(s)? I'm messing around with GitHub's "Projects" feature but I'm not really enjoying the experience.

Mostly GitHub projects at a high level. I'm not doing the whole points and estimates bs, and I'll knock out a quick feature or bug fix without tracking it.

I do make sure to only do one feature at a time, so that merging is straightforward.

leper khan
Dec 28, 2010
Honest to god thinks Half Life 2 is a bad game. But at least he likes Monster Hunter.

neurotech posted:

What are you all using for project management for your game project(s)? I'm messing around with GitHub's "Projects" feature but I'm not really enjoying the experience.

For work: jira

For self: fossil scm

TooMuchAbstraction
Oct 14, 2012

I spent four years making
Waves of Steel
Hell yes I'm going to turn my avatar into an ad for it.
Fun Shoe
I just file GitHub issues against myself if there's something I need to write down. But for the most part it's just "eat your vegetables". You gotta do the boring stuff as well as the fun stuff to get the game done. Usually it's not too hard to figure out what the boring stuff is, so it's "just" a matter of actually doing it. Whatever tricks you need to get that to happen are legit.

Shemp the Stooge
Feb 23, 2001
For work I use Trello and DoneDone. For personal stuff just Trello

roomforthetuna
Mar 22, 2005

I don't need to know anything about virii! My CUSTOM PROGRAM keeps me protected! It's not like they'll try to come in through the Internet or something!

TooMuchAbstraction posted:

Usually it's not too hard to figure out what the boring stuff is, so it's "just" a matter of actually doing it. Whatever tricks you need to get that to happen are legit.
But what if I don't *want* to do the boring stuff?

(Seriously though this is top tier philosophy.)

Hughlander
May 11, 2005

neurotech posted:

What are you all using for project management for your game project(s)? I'm messing around with GitHub's "Projects" feature but I'm not really enjoying the experience.

I use 3 Trello boards:
1 - Public facing talking about huge milestones
2 - Break those Milestones down into features that meet the design goals
3 - Micro stories / bugs / unfiltered thoughts in a kanban fashion.

I'm thinking about blowing it up for using Obsidian.md's Project plugin though since pretty much everything i do otherwise is in Obsidian.

(This is for home project, work is all confluence/jira, all the time.)

The Fool
Oct 16, 2003


Hughlander posted:

Obsidian.md's Project plugin t

tell me more

Sakco
Jun 6, 2009
We are a small team of 4-5 devs and we have moved away from Github to https://linear.app/ a year or two ago and have never looked back.

Hughlander
May 11, 2005

The Fool posted:

tell me more

I haven't used it yet fully, but basically everything is still just a .md file. You define state in frontmatter, and then have multiple views into it, like tables, a calendar, a kanban board, etc...

My problem was that I'd make 1 line cards in Trello and then lose the context 3 weeks later. So I'm hoping have the full note there will be a nudge to change that.

https://github.com/marcusolsson/obsidian-projects
Design Philosophy
When developing any software, you often faced with difficult choices. To help guide design decisions, this project adheres to the following principles:

Leave no trace: The plugin must not leave any plugin-specific configuration in the notes, such as custom front matter properties. Notes may be shared with colleagues and teams who don't use Obsidian. If the user stops using this plugin, they shouldn't have to clean up all their notes.
Keep it native: The plugin should look and feel like it's native to Obsidian. The plugin should also prefer native Web APIs over custom components whenever possible.
Stability over features: This plugin is geared towards professionals with high demands on reliability. Any bug reports and usability issues will be prioritized over new features.

Ranzear
Jul 25, 2013

Sakco posted:

We are a small team of 4-5 devs and we have moved away from Github to https://linear.app/ a year or two ago and have never looked back.

It ain't Perforce money but charging extra to not use Google accounts can gently caress off.

The Fool
Oct 16, 2003


imo more apps like that should charge extra if you don't use an external idp

google vs ms shouldn't matter though

or apple or fb or whatever

Ranzear
Jul 25, 2013

Show me an auth path from Facebook into Ansible to deploy a personal text environment over ssh and you will have discovered an exciting new mental illness.

I'll stick with ldap for now.

The Fool
Oct 16, 2003


I only mentioned fb and apple for completeness, if you're an actual business you're using google workspaces or aad or god forbid, okta

and if your using ldap you are either living under a rock or posting from 2013

neurotech
Apr 22, 2004

Deep in my dreams and I still hear her callin'
If you're alone, I'll come home.

Thanks for those replies, much appreciated. I'll give Linear a go today and see how that feels.

Does anyone have any experience building a web-based game, specifically one that you've deployed to a platform like Steam? If anyone's in this position, how did you go about doing that? Did you use Electron or some other similar solution?

5TonsOfFlax
Aug 31, 2001

neurotech posted:

Thanks for those replies, much appreciated. I'll give Linear a go today and see how that feels.

Does anyone have any experience building a web-based game, specifically one that you've deployed to a platform like Steam? If anyone's in this position, how did you go about doing that? Did you use Electron or some other similar solution?

I used Flutter to build Mark My Words. I did not release to Steam, but I did release to Android, iOS, and Web.

roomforthetuna
Mar 22, 2005

I don't need to know anything about virii! My CUSTOM PROGRAM keeps me protected! It's not like they'll try to come in through the Internet or something!

5TonsOfFlax posted:

I used Flutter to build Mark My Words. I did not release to Steam, but I did release to Android, iOS, and Web.
I would recommend not using Flutter because as a Google thing it will completely change its API on a whim and make you rewrite all your stuff, and before you're finished with that, change again. Also it does a pretty crap job of rendering the same widgets on different platforms (especially web was pretty unreliable when I tried it). Also for me webrtc was important; I diagnosed and fixed 2 bugs in the only available Flutter webrtc library and then gave up on Flutter because it was still poo poo and broken. (Also it doesn't really have a steam-compatible target unless things have changed a lot.)

https://www.codecks.io/blog/2019/creating-a-hit-steam-game-in-html5/ suggests Electron is the way to go, as you thought neurotech. Might be worth looking into Capacitor if you want to be able to do mobile as well as steam.

5TonsOfFlax
Aug 31, 2001

roomforthetuna posted:

I would recommend not using Flutter because as a Google thing it will completely change its API on a whim and make you rewrite all your stuff, and before you're finished with that, change again. Also it does a pretty crap job of rendering the same widgets on different platforms (especially web was pretty unreliable when I tried it). Also for me webrtc was important; I diagnosed and fixed 2 bugs in the only available Flutter webrtc library and then gave up on Flutter because it was still poo poo and broken. (Also it doesn't really have a steam-compatible target unless things have changed a lot.)

https://www.codecks.io/blog/2019/creating-a-hit-steam-game-in-html5/ suggests Electron is the way to go, as you thought neurotech. Might be worth looking into Capacitor if you want to be able to do mobile as well as steam.

Nah. I chose Flutter because I wanted to build something I, on Android, could play with my wife, on iOS. I already liked Dart.
Like I said, I've had a good experience.
I'll try Kotlin multiplatform if Google googles Flutter into the graveyard, but I'll be dead in the cold ground before I choose JavaScript or Typescript for a hobby project.

neurotech
Apr 22, 2004

Deep in my dreams and I still hear her callin'
If you're alone, I'll come home.

Oh I'd definitely go with Electron, I've got the most experience with that. If I were to aim for mobile I'd probably go with React Native. I'm focused on making this as a desktop game first and foremost, though. I'm more curious as to how people have setup their project in a way that makes it easy to create builds for Steam.

FuzzySlippers
Feb 6, 2009

If you wanted something way heavier Cocos Creator is a Unity alternative that uses web stuff. You can code in typescript and use whatever frameworks (vue/react/etc) you want with it for UI while also having Unity comparable 3D/2D graphics stuff. The engine is open source and free to use. It's mobile focused but can do pc/mac (linux?) desktop builds.

It doesn't get a lot of talk because it's Chinese and most of the community resources aren't in English. Seems like a neat engine that I'm gonna use for something eventually since I like typescript.

leper khan
Dec 28, 2010
Honest to god thinks Half Life 2 is a bad game. But at least he likes Monster Hunter.

neurotech posted:

Oh I'd definitely go with Electron, I've got the most experience with that. If I were to aim for mobile I'd probably go with React Native. I'm focused on making this as a desktop game first and foremost, though. I'm more curious as to how people have setup their project in a way that makes it easy to create builds for Steam.

cmake with a native windows target.

Ranzear
Jul 25, 2013

FuzzySlippers posted:

If you wanted something way heavier Cocos Creator is a Unity alternative that uses web stuff.

With Unity getting dunked on these days I do look back at the Cocos 2Dx based game we localized with a bit of fondness. It didn't seem to have that "every animation obviously has the same curve" telltale of unity nor the weird aliasing of spine. Dunno what it was.

Creator is a newer version of that?

FuzzySlippers
Feb 6, 2009

Ranzear posted:

With Unity getting dunked on these days I do look back at the Cocos 2Dx based game we localized with a bit of fondness. It didn't seem to have that "every animation obviously has the same curve" telltale of unity nor the weird aliasing of spine. Dunno what it was.

Creator is a newer version of that?

Yeah, it's essentially Cocos 3D. It seems to have near comparable 3D to Unity except some of the highest end SRP stuff. I also didn't notice any performance gotchas like I'd seen in Godot. The Creator editor is closed source because that's how they are funding development (premium support) and releases are rapid. The actual engine is open source and free and you can easily hook any custom build of the engine up to the editor.

Since typescript is nice enough to write and supports very rapid development and it also allows you to use the wide array of js/ts web frameworks for UI it seems like a great engine for indies. The only time I've seen it discussed online is people being suspicious of the commie smell on it :shrug:

Rocko Bonaparte
Mar 12, 2002

Every day is Friday!
I have a question about UE5 UI, and I guess that includes Common UI. I'm adapting my main menu to be a Common Activatable Widget (so I can do some widget stacking like I was going on and on about and will talk about later). I have a parent canvas in which I have:

1. A vertical box containing six buttons with text labels.
2. A text box at the top to state "Main Menu." It is aligned to the top, centered, and fitting across.

I was using this a non-Common-UI widget before and it rendered as expected. However, as a Common Activatable Widget, it puts the Main Menu text centered in the screen both horizontally and vertically. This doesn't depend on the vertical box and its elements at all; I can move them around to no effect on it. It also seems to ignore all alignments I try, and I will note I clear offset and positions and adjust sizes so that the element shows in the currently-set area in the designer. Regardless, in the game preview, it's slapped in dead center again. What is this all about?

A side question: I see a lot of comments about only using one canvas. So how does that work with different widgets? Don't I need a base canvas on which to even draw anything?

Rocko Bonaparte
Mar 12, 2002

Every day is Friday!

Rocko Bonaparte posted:

However, as a Common Activatable Widget, it puts the Main Menu text centered in the screen both horizontally and vertically.

I haven't gotten an answer anywhere about my problem, but I think I have figured something out with Common UI and how it works a little differently for layout. All the tutorials I have seen start with a center-aligned container and they work from there, so they are all working around this without acknowledging it. Like, maybe everybody knows and doesn't bring it up, or everybody is just aping some Primordial Eve of somebody that knew something important about it (probably this). So I found I could put in a vertical box underneath my canvas, align it the center, have it take up the whole screen, and then get stuff to align inside of it where I wanted it.

So I think the rule of thumb in CommonUI is all the stuff immediately under a canvas is just going to be center-aligned no matter what your opinion on the matter is, and you have to add layout under there to get what you want.

One thing I really don't like about that is sizing to the full canvas size. That's forcing me to hard-code some values that I don't expect to transfer to other form factors, but I don't know how that works yet.

Raenir Salazar
Nov 5, 2010

College Slice
Anyone understand the witchcraft happening here?

code:
#define GET_FUNCTION_NAME_CHECKED(ClassName, FunctionName) \
	((void)sizeof(&ClassName::FunctionName), FName(TEXT(#FunctionName)))
code:
/**
 * Helper macro to bind a UObject instance and a member UFUNCTION to a dynamic delegate.
 *
 * @param	UserObject		UObject instance
 * @param	FuncName		Function pointer to member UFUNCTION, usually in form &UClassName::FunctionName
 */
#define BindDynamic( UserObject, FuncName ) __Internal_BindDynamic( UserObject, FuncName, STATIC_FUNCTION_FNAME( TEXT( #FuncName ) ) )
Until I found GET_FUNCTION_NAME_CHECKED there didn't seem to be a means of getting the name of a function on the fly; but I don't understand the macros, it kinda looks like they're already getting a string so what's happening here, how does the function pointer get turned into a string literal? I was looking at BindDynamic as they seemed to accept a function pointer and converts it internally into a string but it's puzzling me how this actually happens.

In Unreal Engine/C++ to be clear.

Luckily I did eventually find GET_FUNCTION_NAME_CHECKED which covers my needs but its annoying how difficult this was to find, I ultimately couldn't get this idea fom google, chatgpt had to tell me, which is a shame.

xgalaxy
Jan 27, 2004
i write code
The sizeof will fail to compile if the passed in function doesn’t actually exist on the class.
The # in the macro in front of the passed in function converts it to a string. That’s part of C++ macro language.
It looks like they cast the sizeof to a void which I suppose gets discarded during compile so that the macro just returns the string literal of the function name or compile errors if the function doesn’t exist.

The key part is the # which makes it a string:
https://learn.microsoft.com/en-us/cpp/preprocessor/stringizing-operator-hash?view=msvc-170

xgalaxy fucked around with this message at 03:20 on Nov 25, 2023

Raenir Salazar
Nov 5, 2010

College Slice

xgalaxy posted:

The sizeof will fail to compile if the passed in function doesn’t actually exist on the class.
The # in the macro in front of the passed in function converts it to a string. That’s part of C++ macro language.
It looks like they cast the sizeof to a void which I suppose gets discarded during compile so that the macro just returns the string literal of the function name or compile errors if the function doesn’t exist.

The key part is the # which makes it a string:
https://learn.microsoft.com/en-us/cpp/preprocessor/stringizing-operator-hash?view=msvc-170

Ahah! Thanks to you I've figured this out, if I make my own define like this:

code:
#define FuncToString(FuncName) STATIC_FUNCTION_FNAME(TEXT(#FuncName))
Then I can use it for Logging and passing around like this:

code:
UE_LOG(MyTestLog, Log, TEXT("[db] Test: %s"), FuncToString(&MyTestClass::MyTestFunction));
Thanks!

e: Or well, turns out it just gives me garbage unicode wingdings.

But that's fine, I imagine it just needs to be massaged a little.

e2: Works now! Intellisense was giving me fake syntax errors regarding trying to do ToString() on the resulting FName.

Raenir Salazar fucked around with this message at 04:40 on Nov 25, 2023

blastron
Dec 11, 2007

Don't doodle on it!


I don’t know if this is related to what you’re trying to do, but Unreal has built-in functionality for retrieving the name of the current function as a string through the __FUNCTION__ macro, as described here. It’s pretty handy for logging errors.

Raenir Salazar
Nov 5, 2010

College Slice

blastron posted:

I don’t know if this is related to what you’re trying to do, but Unreal has built-in functionality for retrieving the name of the current function as a string through the __FUNCTION__ macro, as described here. It’s pretty handy for logging errors.

IIRC I think I wanted something a little more flexible as that only gets you maybe the name of the current function it's called in? So if I want to Bind a specific function to an event in BeginPlay that would only let me bind BeginPlay.

However it turns out you can remove all events associated with a specific UObject with RemoveAll so I don't actually need all this effort to avoid having to save a reference to my call back anywhere. :)

Raenir Salazar
Nov 5, 2010

College Slice


Working on porting some of the basics of my procedural world project to Unreal Engine. So far I've got a basic procedural mesh, the main next step is figuring out how to blit it to a texture; ideally without needing a SceneCaptureComponent2D in my scene.

The other choice I need to make is figuring out my coordinates. Do I keep my current X/Y notation and then flip the normals and have the camera pointed "Down" or do I rotate the mesh? Decisions decisions.

e: I actually CANNOT for the life of me get Blit to work in Unreal. Presumably the function to do this is
code:
UKismetRenderingLibrary::DrawMaterialToRenderTarget(...) 
but it the RenderTexture I pass in remains blank. :(

Raenir Salazar fucked around with this message at 05:22 on Nov 26, 2023

OneEightHundred
Feb 28, 2008

Soon, we will be unstoppable!
This might be a little advanced for the type of stuff discussed here but I'm starting a new project to get a Zstd-like decompressor running on GPU compute, bolted to a Zstd stream analyzer:
https://github.com/elasota/zstdhl

Basically right now there are two options for this type of thing: Brotli-G and GDEFLATE.

Brotli-G I haven't looked at too much, the compression ratio is nice but it seems unfinished, possibly back-burnered, and has a bad memory leak.

GDEFLATE has Microsoft's blessing right now, but it's deflate-based so the compression ratio isn't really competitive.

I'm trying an alternative approach for a Zstd-based decompressor: It's transcode-only from Zstd so you have to compress a block with Zstd then feed it to the transcoder and it will reassemble it in the new format. That basically means I can completely ignore Zstd upstream and benefit from any improvements to its compressor without having to merge. I've been devising a bunch of tweaks to how it works to make it practical for GPU decode, especially since FSE table construction is forced to be serial the way Zstd does it, but I came up with a new way of generating the tables which only adds ~0.3% to the file size, one part of it is fully parallelizable and the other part is only serial for at most 9 iterations.

What will be REALLY nice is if I can get dictionary decompression working on it, since neither of the existing options support that.

If the GPU vendors go ahead with hardware decompression units then this is going to be rapidly rendered useless though, so guess I'll just have to roll the dice.

pseudorandom name
May 6, 2007

GDEFLATE probably already has native hardware blocks on nvidia, given the backdoors built in to DirectStorage.

Adbot
ADBOT LOVES YOU

OneEightHundred
Feb 28, 2008

Soon, we will be unstoppable!

pseudorandom name posted:

GDEFLATE probably already has native hardware blocks on nvidia, given the backdoors built in to DirectStorage.
I've read that they have "optimizations" for it but as usual they don't say what that means.

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply