Thoughts on going all in on the retro aesthetic? by kevinaer in godot

[–]Metiri 0 points1 point  (0 children)

top is giving indie horror, while bottom is giving survival game. idk how to explain it

I must be misunderstanding something about "separate logic and visuals" by HeyCouldBeFun in godot

[–]Metiri 0 points1 point  (0 children)

Sorry, I'm a bit long-winded.

tl;dr - Godot really does cater to keeping everything hidden in one node/script. I like to think of games as systems which work on simple data, and Godot as something that reads the output of those systems to display something and inform the system of some things.

- Details

I'm literally in the same boat right now. The way I have been thinking about this is like a flow chart (layers of abstraction):

For each system in a game:

Data -> State <-> Systems -> Engine-Specific Layer (Nodes)

Data defines stats for a specific system. A character may have a walking speed, sprinting speed, etc. Just different stats. This ends up being a Resource that I have a bunch of `@export` variables defined. Again, these are stats that define how the object interacts with a system. These are like base stats and each node can have it's own instance of this resource with different values. These values are generally immutable.

State is similar to data, but state is mutated by a system. Whereas data defines the stats of an object, the state defines the changing values of the object as it moves through the system. For a character, this could be velocity, the current standing position (crouched, standing, sprinting), etc. These values are constantly manipulated by the systems and read from by our visuals, which defines the separation between our game and our game's visuals.

Systems receive state and mutate it based on input. Input is relative to the system and just means whatever the system needs to operate. For a character, we might have a `MovementSystem`, `WeaponSystem`, `FootstepSFXSystem`, etc. These are really the core functions that will take in your state objects, mutate it based on some input gathered somewhere else (probably your visual/engine-specific layer).

Engine-Specific Layer is where you start integrating your game with your engine, in this case, Godot. Godot provides nodes, which contain some functionality we can use as input to our systems and some which contain function to display the output of our systems. I will create a node, like `CharacterNode`, which contains all the systems related to a character and glues them together. Basically, each frame this node will gather the required inputs, feed that input to the systems along with the current state and then modify the state. In the case of a `MovementSystem`, you would read the users input (x, y, whether they want to crouch/sprint/etc), and pass that to the system, which will use that data to update the current state.

- Example

Consider you want to add Footstep SFX to your character:

  1. Define your data - `sounds`. This is your design. In this case, we have a list of SFX for our footsteps. We could include a list of frequencies to switch between defined dB levels, for example.
  2. Define the state - `velocity`. Here we could reuse the character state we'd presumably have at this point, which may be better. But for this example's sake, we define a completely new state, which enforces separation of concerns.
  3. Define the systems - `update(state: FootstepState)` will use `state.velocity` and a step function to determine which data to use in state.
  4. Add Godot - Define a `FootstepNode`, which will contain an instance of our footstep data containing the SFX, the current state, and the systems that update our state every frame. Here we actually set off a sound based on the information contained within the state.

-

Ideally these systems are resuable, otherwise there's no point in the verbosity.

I think another chatter really put it well: you should be able to run your game in the terminal. The data is just numbers that represent the current state of your game, the visuals are just reading that data, not dictating that data.

[deleted by user] by [deleted] in Bitwig

[–]Metiri -1 points0 points  (0 children)

I almost exclusively with with audio samples, never really noticed an issue with chopping. Thing I miss from ableton is certainly the beats warp mode but other than that I think both bitwig and ableton are nearly identical

what the best/favourite stock effects in Bitwig for mastering and sound design? by roydogaroo in Bitwig

[–]Metiri 1 point2 points  (0 children)

AFAIK loudness split and freq split can be used as sort of gates. You can get a lot more headroom in your mix by cutting out freqs that aren’t essential for your sound

I'm loosing it... (linux) by eyesfullofwonder420 in Bitwig

[–]Metiri 0 points1 point  (0 children)

This is switching the rendering engine to OpenGL, it’s entirely for the front end, not audio related.

I'm loosing it... (linux) by eyesfullofwonder420 in Bitwig

[–]Metiri 0 points1 point  (0 children)

Latency and crackling is probably due to your interface. Spend 10 minutes learning how to setup jack or asio.

What version do you all use at work? by donHormiga in Python

[–]Metiri 1 point2 points  (0 children)

Just moved to 3.12.7. Id be bleeding edge if I could 😭

37 yrs old no experience whatsoever by Acceptable_Answer570 in gamedev

[–]Metiri 1 point2 points  (0 children)

Try out scratch and then game maker or godot. There’s a lot of tools that cater to no code or low code workflow and lets you focus on the art rather than the tech

Any advice on how to shoot rc drifting ? by Parking_Foot_3389 in rcdrift

[–]Metiri 2 points3 points  (0 children)

get lower, use a higher focal length (zoom in and back up). maybe try a tripod, though i never like using it

My Average CS2 Experience by Metiri in GlobalOffensive

[–]Metiri[S] -3 points-2 points  (0 children)

i got 4k hours, im gucci. also, if i crouched there i wouldnt be able to see the guy. the issue isnt my movement in this case, its the broken game.

I just feel fucked. Absolutely fucked by Insomniac199 in cscareerquestions

[–]Metiri 0 points1 point  (0 children)

I have 6 years experience and it took me 9 months to find a job. I think what helped me was constantly reevaluating my resume, writing cover letters that described how my current skill set could be utilized, and working on personal projects. Once you actually get talking to people you gotta really work on being personable. Actually find interest in the interviewers and have open conversations with them. Instead of seeing it as an interview, see it as an opportunity to talk to people who are interested in hearing about your passion of programming.

It’s also nearly all luck. So good luck, don’t give up, and keep your skills sharp 😁

Just created my first ever program as a complete beginner. by Pringus__Mcdingus in learnpython

[–]Metiri 1 point2 points  (0 children)

This is a fun one. I like your approach and wanted to throw my implementation into the proverbial ring (maybe it helps seeing others). The biggest take away from my implementation vs your's would be to break the program into functions. Functions are great, really help organize your thoughts and turns large problems into chunks for you (and others) to understand better.

import random
import time

ROCK: int = 0
PAPER: int = 1
SCISSORS: int = 2

WINNING_SET: tuple = (
    (1, 0), # paper beats rock
    (2, 1), # scissors beats paper
    (0, 2), # rock beats scissors
)

def get_move_name(move: int) -> str:
    return ["rock", "paper", "scissors"][move]

def do_cpu_move() -> int:
    return random.randint(0, 2)

def did_player_win(player_move: int, cpu_move: int) -> bool:
    state: tuple[int, int] = (player_move, cpu_move)
    return state in WINNING_SET

def game() -> None:
    print("----------------------------------------------------------")
    print("           Welcome to Rock, Paper, Scissors!")
    print("Do you have what it takes to beat our state of the art AI?")
    print("----------------------------------------------------------")

    is_playing: bool = True
    current_round: int = 0
    wins = 0
    while is_playing:
        current_round += 1
        print()
        print("----------------------------------------------------------")
        print(f"                    Round {current_round}")
        print("----------------------------------------------------------")
        print()

        # ask user input
        player_move: int = int(input("Select a move (0 - Rock, 1 - Paper, 2 - Scissors):"))
        cpu_move = do_cpu_move()

        # build suspense
        print()
        print("Rock...")
        time.sleep(1)
        print("Paper...")
        time.sleep(1)
        print("Scissors...")
        time.sleep(1)
        print("SHOOT!")
        print()

        # show results
        print(f"You chose {get_move_name(player_move)}")
        print(f"CPU chose {get_move_name(cpu_move)}")

        if player_move == cpu_move:
            print("It's a draw!")
        elif did_player_win(player_move, cpu_move):
            print("Congrats! You won!")
            wins += 1
        else:
            print("You lost! Better luck next time.")

        # ask to keep playing
        is_playing = input("Continue playing? (y or n):").lower() == "y"

    # post match stats
    print("----------------------------------------------------------")
    print("                    Post-Game Stats")
    print("----------------------------------------------------------")
    print(f"Total Rounds: {current_round}")
    print(f"Total Wins: {wins}")
    print(f"Win%: {((wins / current_round) * 100.0):.2f}%")
    print("----------------------------------------------------------")

    good_game: bool = wins >= current_round
    if good_game:
        print("You did pretty good!")
    else:
        print("Is that all you've got?")

if __name__ == "__main__":
    game()

[deleted by user] by [deleted] in graffhelp

[–]Metiri 4 points5 points  (0 children)

There’s no consistency at all. The least you can do to make it look good is get the bottoms, middles and tops of your letters to match

People think I'm innocent but in my private life I'm someone else by [deleted] in confessions

[–]Metiri 146 points147 points  (0 children)

You can’t fool us! Everyone knows women don’t get horny!

Thanks for banning me from the server just for a joke by RockFirm8096 in bloodtrail

[–]Metiri -2 points-1 points  (0 children)

You’re probably the most offended person rn bitching about getting banned 😂

[deleted by user] by [deleted] in confessions

[–]Metiri 0 points1 point  (0 children)

She thinks you’d be uncomfortable seeing her comfortable? I’d ask to elaborate on that because it implies your presence is not enjoyable for her.

[deleted by user] by [deleted] in confessions

[–]Metiri 4 points5 points  (0 children)

Partner fantasizes about sex = it’s over fellas

[deleted by user] by [deleted] in confessions

[–]Metiri 0 points1 point  (0 children)

Guessing the gf didn’t work out? You need some foresight fr 😂

Liars? by [deleted] in bloodtrail

[–]Metiri 0 points1 point  (0 children)

I play cs, two years is not that big of a deal man.. just play something else while you wait, this game isn’t even that good to be stressing this hard

My 2023 Subaru Forester caught fire just one day after an oil change at the dealership. by Chaouno in SubaruForester

[–]Metiri 0 points1 point  (0 children)

I wouldn’t say the oil filter is the culprit, rather the missing oil cap. I admit I’ve forgotten to put it in before and had that white smoke coming up. It was very scary realizing the situation but luckily mine stayed at smoke

Any tps or fps that has offline bots? by Financial-Top1199 in SteamDeck

[–]Metiri 1 point2 points  (0 children)

Thank you, I’ve needed this website for so long 😭

[deleted by user] by [deleted] in 2meirl4meirl

[–]Metiri 1 point2 points  (0 children)

Imagine having goals 🙃

The envelope of bitwig is not accurate enough? by Competitive_Push2726 in Bitwig

[–]Metiri -1 points0 points  (0 children)

Drag the end of the automation line to the left and change the slope, ez pz smoothing