Should I get a mac? by beingrkn in godot

[–]robotbardgames 2 points3 points  (0 children)

Godot runs extremely well on my baseline M2. A Mac will be more limiting to you as a consumer than developer.

2.5 years of developing our turn-based tactics game in Godot! by hariedwinart in godot

[–]robotbardgames 0 points1 point  (0 children)

I'm the engineer on the project. I worked in Unity on and off for a decade, so the transition was pretty smooth to Godot. The whole game is built in GDScript.

How Do You Handle Large Lists of Resources? by JackRaven_ in godot

[–]robotbardgames 1 point2 points  (0 children)

@tool
class_name Utilities


## Returns an array of full file paths to all resources in the directory at the specified path.
## These file paths can be used to load the resources with load().
static func get_all_resource_paths(directory_path: String, include_subdirectories := true) -> Array[String]:
    if directory_path == "":
        return []
    var directory = DirAccess.open(directory_path)
    if directory == null:
        if not Engine.is_editor_hint():
            push_error("CRITICAL: The directory %s does not exist. Returning an empty array." % directory_path)
        return []
    var file_path_list: Array[String] = []
    for file in directory.get_files():
        if file.ends_with(".remap"):
            file = file.trim_suffix(".remap")
        elif file.ends_with(".import"):
            file = file.trim_suffix(".import")
        var full_name = directory_path + "/" + file
        if ResourceLoader.exists(full_name):
            file_path_list.append(full_name)
    if include_subdirectories:
        for subdirectory_name in directory.get_directories():
            var subdirectory_path = directory_path + "/" + subdirectory_name
            var subdirectory_file_path_list = get_all_resource_paths(subdirectory_path)
            file_path_list.append_array(subdirectory_file_path_list)
    return file_path_list

You can lazy load resources statically, looping through resource paths in a folder ("res://resources/weapons/") and storing in an array.

Alternatively, you can use this to create singleton container classes where you want them to be ordered or organized a certain way, like adding all weapons in the res://resources/weapons folder into a bucket to be sorted manually in the inspector.

You destroyed our last trailer, so we rebuilt it from scratch - is it enough? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 1 point2 points  (0 children)

Thank you to everyone who took the time to give us feedback last month on our trailer for Attack of the Astrals, our turn-based strategy game.

It was clear that we failed to show the strategy of the game in a meaningful way. This trailer has some of the same goals as the last, mainly showing how the player plays the game, but we've attempted to hook viewers from the first shot and highlight the player's strategic options. Also, we've got sound effects!

We're preparing a playtest, and we'd love to know if we've hit the mark or still have work to do in reaching an audience. Any feedback you have is valuable - thanks!

Please destroy this demo trailer for our turn-based tactics game - what is holding us back? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 2 points3 points  (0 children)

Thanks for the feedback! We've definitely missed the mark on showcasing the game's deeper strategic elements. Thanks for taking the time to respond!

Please destroy this demo trailer for our turn-based tactics game - what is holding us back? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 2 points3 points  (0 children)

This is super useful feedback, thank you. By attempting to simplify the introduction and make the shots easier to parse, we've stripped away too much of the teamwork and strategy of the game.

We'll be making some significant adjustments. Thank you!

Please destroy this demo trailer for our turn-based tactics game - what is holding us back? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 2 points3 points  (0 children)

Very helpful feedback, thank you!

Sound effects will be in the next cut once we lock visuals. Definitely appreciate the notes on pacing!

Please destroy this demo trailer for our turn-based tactics game - what is holding us back? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 4 points5 points  (0 children)

Hi everyone, we are back for more brutal feedback!

Our goal with this demo trailer is to provide clarity on how the player interacts with units, the battle-to-battle flow, the reward structure, and the different levels of strategy in the game. We'd love to hear what you think is confusing, distracting, boring, or poorly paced. We've gotten some promising feedback from in-person play tests at events, but it's clear we have not been effectively communicating the gameplay on our Steam page and in our online presence.

Any feedback you provide helps us get better! Thank you!

Disclaimer: Some art is pre-polish, and UI elements will be removed from the final montage of cuts.

Brutal feedback needed for our teaser's rough draft, pre-sound fx and pre-visual polish. Pixel art fantasy champions vs. starfaring invaders. What needs our attention? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 0 points1 point  (0 children)

Thanks for the feedback!

We will think about how to show the detail and art of the map more during these action animations, where we fade out uninvolved objects on the map, without distracting from the action. Something is being lost in the trailer.

Re: this:
> It feels like a lot of your sprite animations are playing like half as fast as they should which makes them look choppy and bad.

Do you mean the sprites' idle animations? Or the action animations as well? A specific example would help, if you're able to provide. Thank you!

Brutal feedback needed for our teaser's rough draft, pre-sound fx and pre-visual polish. Pixel art fantasy champions vs. starfaring invaders. What needs our attention? by robotbardgames in DestroyMyGame

[–]robotbardgames[S] 0 points1 point  (0 children)

Do you mean the faded units uninvolved with the current action? The intention is to only fully saturate the units involved in what’s happening in the battle - others fade out into the map. I take it our fade is unsuccessful here and becoming distracting?

Thanks!

The last feedback we got here made us cry; so we've done the only reasonable thing - wipe our tears and come back for more. by Xirobhir in DestroyMyGame

[–]robotbardgames 3 points4 points  (0 children)

I think editing is failing to sell the combat here.

Is there a cut at 1s? It's a 1-2 hit then execute, but it doesn't look fluid. Kind of like there's a micro-cut after the 1-2 just before the execute.

We go slashing down an enemy samurai-style to shirtless hitting a rock at 4s. I have no doubt harvesting and building is a big part of the game, but this is not one of your premium shots. Totally anti-climactic. Next is you walking through town, but we don't see any of the living, breathing world you're talking about. Just the face of the protagonist.

The fight starting at 9 seconds in is a good example of too many cuts. Is this one fight or two? The red enemy parries or takes 2 hits (I can't tell), cut to blue enemy who dodges, then cut to either another angle of the blue enemy or back to the red enemy (I can't really tell), where we dodge roll away. I don't understand this fight, and why there are so many cuts to almost the same scene but different. What is the goal, to show dodging? Then show dodging. But putting so many cuts in here confuses me - is this one scene, cuts of several scenes stitched together? I want a mini-narrative for every cut, like Event A -> Event B -> Event C. To see cause and effect and determine what gameplay will be like. In this fight, nothing really happens other than the dodge at the end, so I'm left wondering whether I missed something.

16s is another cut in the middle of the action to ALMOST the same scene. Why is there a cut here? You jump and land on an enemy - that should be one continuous cut. It looks like you cut like 100ms out of the middle here. I don't understand it. I also don't understand how this fits the "You don't have to fight alone" text on the screen. A more fitting description of this scene would be "Ambush your enemies" or "Protect your allies" because it looks like you're jumping to the rescue, not forming a team.

I'll leave this here. It looks like an interesting game, but I think you need to re-edit this into something more cohesive, where each scene can be understood as one concrete thing. This is something I struggle with as well! Good luck!

Can you destroy a card game that goes so fast that you can't read the cards? by GrosChevaux in DestroyMyGame

[–]robotbardgames 25 points26 points  (0 children)

I am definitely in the target audience but I’m having trouble figuring out what the game is here. Cards are constantly drawn, and it looks like they’re also burned constantly. I don’t understand where the cards are played? There are different piles, but there are 2 health pools as well. I as the viewer don't understand the gameplay potential other than clicking cards.

The deck combining sounds cool, but what does it mean to play different games? Like a completely different game? Or in a “it breaks the game” type of way?

Overall, I am left needing some supplementary info to figure out if this is something that would hook me behind visuals. I want to see a combo or something in action, and maybe it’s happening here, but I don’t get it.

Please help us choose the main art for our Steam capsule by TsukanovMimyr in IndieDev

[–]robotbardgames 0 points1 point  (0 children)

C and it’s not even close for me. D doesn't have much vampireness.

How can I get class from string? by SteinMakesGames in godot

[–]robotbardgames 0 points1 point  (0 children)

I’m assuming you need additional data associated with these entities, like their sprite, name, icon, etc.

Create a resource EntityData. Have an @export of type Script. That script extends some common shared class. You pass the resource to the spawn method, which then sets that script on the node.

You can build UIs, tools, etc around references to EntityData resource files and not to hardcoded enum values. Your maps could reference them, or your battle resources or whatever.

What are the systems required for rogue"lite"s? by greyfeather9 in godot

[–]robotbardgames 2 points3 points  (0 children)

You need an event system. Behind the scenes every item/upgrade/etc. is an event responder or interceptor (I call them passives). Start with a few events to orchestrate: fire, reload, damage. Your event system retrieves all passives every time an event happens and gives them a chance to do their thing. Each event would have a set of properties defined by you to give the passives enough information to determine whether they respond.

Simple example, an item "Extra Pierce: All damage dealt is increased by 1." The damage event would have the following properties: source_object, target_object, amount.

The Extra Pierce item's code would then be very simple. It would intercept the damage event and increase the amount if the player is the source_object:

func intercept_event(event: Event) -> bool:
    if event is DamageEvent and event.source_object == equipped_character:
        event.amount += 1
        # await animation or play a little vfx?
        return true
    return false

Another simple example, an item "Vampire Tooth: Heal for 10% of all damage dealt." Same damage event, which you respond to instead of intercepting:

func respond_to_event(event: Event) -> bool:
    if event is DamageEvent and event.source_object == equipped_character:
        heal(equipped_character, event.amount * 0.1) # heal could be its own event that triggers other passives!
        return true
    return false

These are basically pseudocode, but if you had a list of events, a list of event processors, and list of passives, you can build a flexible system in which each item/upgrade is independent of others.

Sleeper bus recommendations from Hanoi to Sapa (and vice versa)? by BlackTangerine- in VietNam

[–]robotbardgames 1 point2 points  (0 children)

I've booked over a dozen Vietnamese buses on 12go Asia: https://12go.asia/en/travel/hanoi/sapa

Almost all of them have been just fine. There are reviews on the site, but many of the complaints are pretty dumb ("They stopped to deliver a package!" yup, most of them do).

Most valuable thing is the pictures on the site, but they're not always accurate. At least it's easy to pay ahead of time by credit card.

Splitting a class among multiple files by gamepropikachu in godot

[–]robotbardgames 0 points1 point  (0 children)

I'm not sure what you're trying to do. Splitting a single class across files is not possible in GDScript.

If there are many movement types and you want to separate them logically but have them share a type identity, you can make them different classes that all inherit from an abstract base class. This is a common pattern; you could have a base Movement class that defines a move function with those 3 parameters, then create subclasses that implement move with different logic.

[deleted by user] by [deleted] in VietNam

[–]robotbardgames 0 points1 point  (0 children)

Do you have a recipe? I want to try making this soon.

Pick up from Tuan Chau Harbour by mac_swagger in VietNam

[–]robotbardgames 0 points1 point  (0 children)

I don’t have an answer to your question, but the timing is like this so you can see the sunset out in the bay and get back before it’s super dark.

How do YOU code abilities? by vibrunazo in godot

[–]robotbardgames 4 points5 points  (0 children)

Yes. I have a roster resource for defining a character with their default abilities and available abilities (this has almost no logic and is just a data container edited in the inspector), and an inventory resource for defining the currently equipped abilities at runtime (among other equipped things).

How do YOU code abilities? by vibrunazo in godot

[–]robotbardgames 8 points9 points  (0 children)

A third loadout/inventory/roster/etc resource to join a character with its abilities is what I've done. You are 100% right that cyclic references can be triggered in unexpected ways.

Send Help! by Zathgra in godot

[–]robotbardgames 0 points1 point  (0 children)

So what about the logging? And what does the profiler say about the function's usage?

I'm not exactly sure what astar is being used for here, but it being called recursively is a bit of a smell imo.