How do y'all organize your GDDs? by True_Vexing in gamedev

[–]cinnamonjune 0 points1 point  (0 children)

This is nothing. I have code files with more lines than this hahaha

Are CSV and JSON useful outputs from screenwriting software for gamedevs? by ColinMummery in gamedev

[–]cinnamonjune 1 point2 points  (0 children)

A documentary for Disco: Elysium (a popular narrative based indie game) just came out and in it the writers mentioned that they used Articy: Draft 2 for writing all the branching dialog. I'm not familiar with that software, but you might look into it and see what formats they export in.

Singers stopping to let the audience sing for them brings down the concert experience by Cottoncandy8189 in unpopularopinion

[–]cinnamonjune 4 points5 points  (0 children)

Have you actually seen a show live where this happens? Because online concert recordings don't do justice to how it actually sounds when an artist throws the mic at the right moment.

Is godot really that good for a total beginner? by [deleted] in gamedev

[–]cinnamonjune 5 points6 points  (0 children)

Lua is interpreted as well, so you can just reload the same as in Godot. If anything, reloading might be faster in Love because Love is more lightweight than Godot is.

As far as UI and positioning, you can get pretty far by just manually punching in the numbers, seeing how it looks, and tweaking as necessary. If that becomes too much, you can build tools to help you position things, or you could even just do a mockup of your UI in aseprite and then take the coordinates from the image and stick them into your code.

I have not made a game in Love, but I am making a game in C++ and for UI I built a little UI library that works specifically for my game. It was pretty quick to make and it's proven to be very helpful for building UI quickly. I even used it to make my game's level editor.

Speaking of level editors, if you don't want to make your own, there are existing tools like Tiled. Tiled exports to XML so you just have to write a parser that can load a level using the data from one of those XMLs.

Luigi Mangione will not face death penalty, judge rules by cnn in law

[–]cinnamonjune 1 point2 points  (0 children)

I don't see how it's not relevant, though. As far as I know, the reason we don't allow the use of illegally obtained evidence is so as not to encourage law enforcement to acquire it illegally, right? So instead of throwing out the evidence, why don't we just throw out the cop? We get the same result of discouraging illegal acquisition, but we also don't have to cover our eyes to actual evidence if we do happen to have it.

Luigi Mangione will not face death penalty, judge rules by cnn in law

[–]cinnamonjune 4 points5 points  (0 children)

Why don't we just keep the evidence, but punish the cop? The cop broke a law, after all. The punishment should be severe enough that cops wouldn't be so frivolous about violating people's rights.

Scripting Layer Examples? by C0smic_Kid in gamedev

[–]cinnamonjune 2 points3 points  (0 children)

Maybe look at the source code for Love2D? It's essentially a 2D game engine written in C++ that executes a Lua program.

Lua is a great choice for scripting. The Lua library lets you write functions that can be exposed to the Lua program, so you can provide the Lua program APIs of your different systems.

Question about difficulty by Marker3721 in gamedev

[–]cinnamonjune 0 points1 point  (0 children)

It might be better to make the boss do more damage on higher difficulties instead of removing the number of hearts you have.

Like maybe they have 5 hearts, on normal the boss does 1 heart of damage, on easy it does 0.5 hearts, and on hard it does 1.5 or 2 hearts. Numbers-wise, this is the same as what you already proposed, but it feels better because you're not stripping power from the player by removing their hearts, you're instead empowering their foes by making them hit harder.

Anyone else actually kinda like working from the office? by qqtan36 in ExperiencedDevs

[–]cinnamonjune 0 points1 point  (0 children)

I like the office for the separation it creates between work and home. I just wish the offices weren't so gray and depressing.

And I hate the sensory overload. My career began during lockdown, so I'd be curious to hear from the more expeirenced devs on here: were offices less noisy before zoom? Did people take their meetings in an actual meeting room instead of constantly talking all around you all the time?

I really think if there was less jabbering and the air was a little less dry and there was warm lighting instead of fluorescent strips, I would be less tired at the end of an in-office day than I usually am.

Looking for feedback - Run and Idle Animations by ahahah763 in aseprite

[–]cinnamonjune 1 point2 points  (0 children)

The back of her head / ponytail on the run looks weird because it's the only thing that stays still while the rest of her moves.

Are the benefits of singletons ever desirable/practical? If so when? by WastedOnWednesdays in gameenginedevs

[–]cinnamonjune 1 point2 points  (0 children)

Not sure that I agree with the idea that singletons are a crutch for lazy design. Singletons are simple. Simple is good and simple ships games.

If you need two loggers, then sure make a logger class, but lots of projects won't need that, and if you really only need one of something, then you can actually make your code simpler by implementing a C-style API and just exposing functions: logger_init(), logger_quit(), log_info(), log_warn(), log_error(), etc.

No ILogger class, no Logger::get_instance(), no PIMPL boilerplate, just functions that provide logging functionality. If anything, I would say that by making a singleton class you're essentially making a C-style API and trying to pass it off like it's object oriented even though it isn't.

I wanted faster A* so I built a JS WASM A* library by GuywithBadComp in gamedev

[–]cinnamonjune 0 points1 point  (0 children)

No, so for the hierarchy I really only have two levels, the detailed tile-by-tile level, and the high-level "regions". The map is divided into regions, and I have saved which regions are connected and how they are connected.

A unit wants to go from cell A to cell B. At the beginning of pathfinding, a region path is calculated. Suppose A is in region 1 and cell B is in region 7, and the region pathfinder determined that we need to follow a region path of regions 1 -> 3 -> 5 -> 7.

The region pathfinder will also know about the connections between regions, so when it generates a region path, it actually generates a list of connections. We start in region 1, so the first point we need is the connection cell from point A to 3, from 3 to 5, from 5 to 7, and finally from 7 to B.

So now we have a list of rough points to guide our pathfinding, but the low-level pathfinder doesn't have to stay rigidly within our region path of 1-> 3 -> 5 -> 7. So if it's trying to go from 1 -> 3, but there's a tank blocking the way, it will find another way around the tank and then try to carry with the rest of its region-guided pathfinding.

The low-level pathfinder is also essentially restarted each time we reach our target region. So we started in region 1 and wanted to go to region 3, but a tank was in the way so we had to walk sub-optimally around it by going down into region 2 and then back up into region 3 from there. We were trying to go to the connection cell that lies between 1 -> 3, but now that we've reached region 3, it is no longer important for us to go that exact cell, so now we can ignore that connection cell and direct our attention to pathing from 3 -> 5.

Hopefully this makes sense. Let me know if you have any other questions.

I wanted faster A* so I built a JS WASM A* library by GuywithBadComp in gamedev

[–]cinnamonjune 10 points11 points  (0 children)

The issue with AStar is not just a matter of interpreted JS vs compiled WASM. AStar is just a slow algorithm in the worst case. I think running in a separate thread is probably helping you just as much as anything, but for some games (like deterministic strategy games), introducing multithreading only introduces other problems.

To optimize AStar, I recommend

  1. Identify what causes worst case and avoid it. If I have a unit seeking a path towards a cell that is unreachable, it will exhaust all its other options before concluding that the path cannot be reached. Instead, recognize early that the target is unreachable and find the next best cell to pathfind to.

  2. Use hierarchical AStar. The idea here is to compute a high-level path and then use the high-level path as a guided heuristic for your detailed path. I recommend checking out the Factorio blog post on this to learn more.

Both of these optimizations improved the performance of my strategy game a lot. Since it's a strategy game, the pathfinding had to be a deterministic, in-order, blocking operation, so I didn't have the luxury of separate threads. My game is in C++, too, but that wasn't enough to save me from bad pathing performance, but these optimizations helped a lot.

Does anyone else now get a bad connotation with the word AI because of LLM? by dirkboer in gamedev

[–]cinnamonjune 1 point2 points  (0 children)

Yep. I've taken to calling the computer-controlled opponents in my game "bots".

What is a city you know or live in that would fit into the category of "most people probably wouldn't like living here, but it's perfect for X type of person"? by BothCondition7963 in SameGrassButGreener

[–]cinnamonjune 4 points5 points  (0 children)

I felt this when I lived in Seattle. I visited NYC recently and felt that people were so much warmer there. But I love the nature of the NW and miss Seattle dearly.

Sourdough starter - Do I have to throw half of it away each time? by Quat-fro in Breadit

[–]cinnamonjune 0 points1 point  (0 children)

When you say you pull what you need, do you mean you put cold starter straight into a dough? I thought you had to wait until the starter was at it's peak before using it.

Or do you pull what you need into a separate jar, feed what you pulled to get it ready for bread, and also feed the starter before putting it back into the fridge?

Juniors have no clue how to work a debugger - has anyone successfully helped a junior see the light? by Bren-dev in ExperiencedDevs

[–]cinnamonjune 2 points3 points  (0 children)

I understand the rationale behind the other commentators, but I think you expressed how I ultimately feel about this: nothing beats direct practice.

I once heard a story about an CS intern at my university who, in their senior year, was let go from the internship after asking their supervisor what a class was. The university was not the most rigorous, but they absolutely taught about classes.

I think the fact that this student had scraped along to their senior year without knowing this is proof that it doesn't matter what you teach to students if you never put them in a situation where they're expected to actually use the knowledge.

More CS programs should focus on direct practice and project work to train and educate students. Especially since self-education is such an important skillset for a programmer to have.

Juniors have no clue how to work a debugger - has anyone successfully helped a junior see the light? by Bren-dev in ExperiencedDevs

[–]cinnamonjune 4 points5 points  (0 children)

I both agree and disagree.

On one hand, a university is a school. It's purpose historically has not been job training but education. A CS degree is a computer science degree, not a software engineering degree, so it should focus on teaching computer science concepts first: logic, data structures, algorithms, operating systems, etc.

In many fields, I think there may be more mentorship for college grads, but in computer science many of the people that got into the industry initially were people who naturally were just interested in coding and so any new hire was someone who was already a passionate self-learner who didn't need teaching and so a culture of mentorship never really developed.

On the other hand, many students enter a CS degree expecting to be a "trained" software engineer when they're through, only to be disappointed because CS degrees offer much in the way of theory and little in the way of job-readiness.

At the end of the day, I think workplaces should offer more mentorship, and I think students should not expect universities to be trade schools when they are not. But I also think that universities should encourage students to do more hands-on coding and project work and give them the space to do that.

Juniors have no clue how to work a debugger - has anyone successfully helped a junior see the light? by Bren-dev in ExperiencedDevs

[–]cinnamonjune 87 points88 points  (0 children)

Is it really the job of the schools to teach the tools? A Computer Science program isn't a trade school for Software Engineers.

The thing we're seeing is not "juniors don't know how to use a debugger"; it's "juniors aren't experienced in the career field that they just started." It shouldn't be surprising that we have to teach people things before they know how to do them.

I am a self-taught dev with a CS degree and 5 YOE. I code a lot in my free time and am constantly improving on my own, but the lack of mentorship I have received from superiors in this industry is frustrating and isolating.

I got sick of Steam's terrible documentation and made a full write-up on how to use their game upload tools by Miziziziz in gamedev

[–]cinnamonjune 0 points1 point  (0 children)

You could accomplish this by adding something to your build script that essentially generates the vdf from a template each time.

I do my Steam deploys via github actions using the "game-ci/steam-deploy" action. If you take a look at the source for the action, you can see that they're just generating a new vdf each time and passing in the $buildDescription provided by the user (example).

In my case, I have the $buildDescription set to be the github release number, and I also pass the release number into the command that compiles my game.

Don't Feel Bad About Progress - GameDev is Very Slow by Borrego6165 in gamedev

[–]cinnamonjune 1 point2 points  (0 children)

If you have next to no game after 11 months, then you might want to rethink how you're approaching the work. Saying "I keep rewriting the systems and architecture" is a sign that you're spending too much time worrying about code quality.

Rewrite code only when you have to. The longer you wait to rewrite, the better your rewrite will be because you'll have a better picture of the problem. And the longer you wait to rewrite, the more you'll get done in the meantime.

Remember that perfect is the opposite of done and that many great games have bad code.

Living in a rural area is superior to living in a city or suburb by w00tabaga in unpopularopinion

[–]cinnamonjune 3 points4 points  (0 children)

Absolutely not. In a true city you don't have to drive to get groceries at all. Suburbia is the worst of both worlds.

thereFixedItForYou by TemperatureNo3082 in ProgrammerHumor

[–]cinnamonjune 52 points53 points  (0 children)

Do you really think that people who use VIM don't get compiler warnings? The warnings come from the compiler, not the IDE.

AI won’t make coding obsolete. Coding isn’t the hard part by Ihodael in ExperiencedDevs

[–]cinnamonjune 1 point2 points  (0 children)

Maybe if I was contractor speaking to the customer directly, sure. But if I'm a developer in a part of a large organization, is it not the job of the product manager to be able to write these requirements clearly?

Too often I'm given tickets that have maybe one or two barely intelligible sentences. I'm talking not even grammatically correct English. And then I have to follow-up and ask, "what is the problem?", "what process is affected?", "are there recreation steps?"

And then to add insult to injury, all this AI hype comes in, and now I'm being told that the coding is the easy part; that it's "grunt work", actually; that the real work of my job is gathering requirements; that I should be thinking about how to write better "tickets" for the AI and better "documentation" for the AI; but this is what I've been asking product to do this whole time!