#i sent you the code in update thought it

1 messages Β· Page 1 of 1 (latest)

woven nexus
#

Lets message here, this will be easier.

#

Having a hard time keeping track with everything else going on in that channel.

nimble marsh
#

beatiful

#

yea

#

ok so

#

first this is the full code

#

and here is update

#
private void Update()
    {
        // ground check
        grounded = Physics.Raycast(transform.position, Vector3.down, playerHeight * 0.5f + 0.3f, whatIsGround);
        ClimbAble = Physics.Raycast(transform.position, new Vector3(1, 0, 1), playerHeight * .5f + .3f, whatIsGround);
        ClimbAbleMinus = Physics.Raycast(transform.position, new Vector3(0, 0, -1), playerHeight * .5f + .3f, whatIsGround);

        MyInput();
        SpeedControl();
        StateHandler();
        FovBooster();
        StateSpam();
        Dashing();
        Climbing();


        // handle drag
        if (grounded)
            rb.drag = groundDrag;
        else
            rb.drag = 0;
    }
#
   IEnumerator Climbing()
    {
        if (Input.GetKey(climbKey) && ClimbAble == true)
        {

            ClimbAble = false;
            yield return new WaitForSeconds(5f);
            rb.AddForce(0, climbDistance, 0, ForceMode.Force);

            Debug.Log("Climbed");

            state = MovementState.climbing;

            Invoke(nameof(readyToClimbNow), climbingCooldown);


        }
    }
#

=-

woven nexus
#

A Coroutine can be called like a method, but won't yield if done so.

nimble marsh
#

how do i make yield

woven nexus
#

Your main goal is just for ClimbAble to be false for 5f right?

nimble marsh
#

yup

woven nexus
#

Okay then I would make that specifically a coroutine. Something like

IEnumerator ClimbingDelay(){
  yield return new WaitForSeconds(5f);
  ClimbAble = true;
}```
nimble marsh
#

wont that litteraly just turn it on after 5 seconds

#

when im touching a wall the bool is true when i press the climb key i dont want to be able to climb on the same wall again

#

so i dont fly up the sky

#

i want a cool down for the Climbing

woven nexus
#

mh, okay. Then we will want to check if we are currently climbing still?

nimble marsh
#

yes

woven nexus
#

Then the State looks like a good source for that?

nimble marsh
#

if i press v two times or even hold it i get sent flying

#

ok

#

the state is already there

#

if state is climbing climbable false

#

you mean?

woven nexus
#

Yes, so for the delay we could check if the state is climbing, if it isn't we set ClimbAble to True, and if it is still climbing we wait another 5 seconds?

nimble marsh
#

no i want climable to only be true once im touching a wall

#

i already implomented a raycast for that

woven nexus
#

Ah, so if not climbing and also touching a wall?

nimble marsh
#

actually i might make it so i cant climb while im in state air

#

cuz i do have a state air

woven nexus
#

Makes sense.

nimble marsh
#

because imagine just falling onto a wall and fly out of upwards like what

woven nexus
#

So we can edit the coroutine to something like

IEnumerator ClimbingDelay(){
  yield return new WaitForSeconds(5f);
  if (/* Conditions to allow climbing again*/)
    ClimbAble = true;
  else
    StartCoroutine(ClimbingDelay);
}```
nimble marsh
#

this should work

#
while(state == MovementState.crouching){
                ClimbAble = false;
            }```
#

doesnt work :)

woven nexus
#

That would, though I think having the logic for when they play should be able to climb be in the coroutine will be easier. As it is being set false at just one spot as well.

nimble marsh
#

i removed ienumerator lol

woven nexus
nimble marsh
#
private void Climbing()
    {
        if (Input.GetKey(climbKey) && ClimbAble == true)
        {
            while(state == MovementState.crouching){
                ClimbAble = false;
            }
            rb.AddForce(0, climbDistance, 0, ForceMode.Force);

            Debug.Log("Climbed");

            

            Invoke(nameof(readyToClimbNow), climbingCooldown);
            state = MovementState.climbing;


        }
    }```
woven nexus
#

Yeah the climbable function doesn't need to be a coroutine anymore.

nimble marsh
#

this is climbing now

#

yea

woven nexus
#

It should climb but we need the delay still. So going with the previous code I posted you would just need to add a
StartCoroutine(ClimbingDelay);
to your method

#

Also I would suggest moving that state check into the coroutine also. And maybe move the crouch check out, as if we are inside the conditional already having climbable set to false because of a bad state won't stop it from climbing

nimble marsh
#
    IEnumerator ClimbingDelay(){
  yield return new WaitForSeconds(5f);
  if (ClimbAble == true) {
    ClimbAble = true;
  }
  else
    StartCoroutine(ClimbingDelay);
}```
#

what do i do

woven nexus
#

Ah so for the /* Conditions to allow climbing again*/ you want what ever logic needs to be true to allow the player to climb again.

nimble marsh
#

the only logic it needs is to be not in air state

woven nexus
#

So the coroutine will take care of the delay, but in there put like the air state, and is climbing state.

#

And then the crouch can be outside of the if, though I wouldn't use a while, I would just use an if check before hand

nimble marsh
#

rb

woven nexus
#

a while like that could cause an infinite loop and the editor to crash on you.

nimble marsh
#

brrb

#

back

#

so what shouidld i do?

woven nexus
#

change
if (ClimbAble == true)
to not check if ClimbAble is true, but to check that the state isn't climbing/air

nimble marsh
#

        IEnumerator ClimbingDelay(){
  yield return new WaitForSeconds(5f);
    if (state != MovementState.air) {
        ClimbAble = true;
  }
    else
        StartCoroutine(ClimbingDelay);```
woven nexus
#

Basically, after 5 seconds if we aren't in the air, or climbing allow use to climb again, otherwise wait another 5 seconds.

#

Yeah that looks about right.

#

Also

while(state == MovementState.crouching){
                ClimbAble = false;
            }
#

could cause you problems. change it to an if

#

also probably move it out of where we are already climbing

nimble marsh
#

wait

#

this

#
StartCoroutine(ClimbingDelay);```
#

it doesnt work

#

why iss that so

woven nexus
#

hhhmm, try

StartCoroutine(coroutine);```
#

or just add the () to the ClimbingDelay

nimble marsh
#

op

#

the () worked

#

so now if i play

#

it should work

woven nexus
#

\(-.-)/

#

we are getting closer at the very least

nimble marsh
#

wait

#

oh nvm

#

hoping it works

#

you really are tiring your self helping me thanks dude

#

i flew

woven nexus
#

coding can often take lots of small tweaks, as computers take things very literal. Also np, we all start somewhere, and this is nothing to some of the head pounders I have had to figure out.

nimble marsh
#

man your better than some people in this server

#

ok so now what do we suppose is the problem

#

to me litteraly going to the heavens

woven nexus
#

Ah I don't think we are setting ClimbAble = false; anywhere currently

nimble marsh
#

could we call so i can share screen

#

no vc if you want

woven nexus
#

I can't at the moment, I am on my phone.

nimble marsh
#

oh

#

dang

#

well so look

#
    IEnumerator ClimbingDelay()
    {
        yield return new WaitForSeconds(5f);
        if (state != MovementState.air)
        {
            ClimbAble = true;
        }
        else
        {
            StartCoroutine(ClimbingDelay());
        }
    }

    private void Climbing()
    {
        if (Input.GetKey(climbKey) && ClimbAble == true)
        {
            while (state == MovementState.crouching)
            {
                ClimbAble = false;
            }
            rb.AddForce(0, climbDistance, 0, ForceMode.Impulse);

            Debug.Log("Climbed");



            Invoke(nameof(readyToClimbNow), climbingCooldown);
            state = MovementState.climbing;


        }
    }
#

this is the code were working with

#

whats wrongg

woven nexus
#

Okay, give me one sec

nimble marsh
#

ok

woven nexus
#
  IEnumerator ClimbingDelay()
    {
        yield return new WaitForSeconds(5f);
        if (state != MovementState.air)
        {
            ClimbAble = true;
        }
        else
        {
            StartCoroutine(ClimbingDelay());
        }
    }

    private void Climbing()
    {
            if (state == MovementState.crouching)
            {
                ClimbAble = false;
            }

        if (Input.GetKey(climbKey) && ClimbAble == true)
        {
            ClimbAble = false;
            rb.AddForce(0, climbDistance, 0, ForceMode.Impulse);

            Debug.Log("Climbed");



            Invoke(nameof(readyToClimbNow), climbingCooldown);
            state = MovementState.climbing;

            StartCoroutine(ClimbingDelay());
        }
    }
nimble marsh
#

golly

#

ok

#

so iu just copy this?

woven nexus
#

Try that, I moved the while to outside, set climbing to false at the start of climbing, and also added a call to the coroutine, as we weren't actually starting it at any point.

nimble marsh
#

ok

#

i hope it works

woven nexus
#

Yeah should be able to just replace the old code.

#

this might give us some trouble.
Invoke(nameof(readyToClimbNow), climbingCooldown);
I am not sure what is in that, but as long as it doesn't conflict we should be more or less okay.

nimble marsh
#

still fly

woven nexus
#

ooof

nimble marsh
#

wait

#

why dont we just say if im climbing then climable is false

#

and i just make it so one frame has enough force to jump me up?

woven nexus
#

go for it

#

Ah yeah, because ClimbAble is being set true from the raycast I see.

nimble marsh
#

yes

woven nexus
#

If your idea doesn't work I probably would have a second bool, something like CanClimb, and have that checked as well.

nimble marsh
#
    private void Climbing()
    {
            while(state == MovementState.climbing)
            {
                ClimbAble = false;
            }

        if (Input.GetKey(climbKey) && ClimbAble == true)
        {
            ClimbAble = false;
            rb.AddForce(0, climbDistance, 0, ForceMode.Impulse);

            Debug.Log("Climbed");



         //   Invoke(nameof(readyToClimbNow), climbingCooldown);
           // state = MovementState.climbing;

          //  StartCoroutine(ClimbingDelay());
        }
    }
}```
#

i have put a // also at the ienu

#

prevnting errors

#

if this works i might breakdown

#

its been like 4 hours

woven nexus
#

Because basically the raycast will tell us if there is something to climb, and CanClimb would tell us if we are in a state that allow it.

nimble marsh
#

i flew

woven nexus
#

I wouldn't use while though

nimble marsh
#

i dont know if i should be happy or sad?

woven nexus
#

// state = MovementState.climbing;

#

you commented out the state being set to climbing XD

nimble marsh
#

oh

#

good

#

my heart took ascreen shot when i realized

woven nexus
#

uncomment that, and turn the while to an if.

nimble marsh
#

i did

#

UNITY IS LAGGING

#

PLEASE NO UNITY DONT CRASH

woven nexus
#

Did you get rid of that while? Whiles can cause unity to crash if the exit condition isn't reached.

nimble marsh
#

no

#

hell n-

#

its while state is climbing ju st dont make climbabl e true\

#

like comeone thats not coplicated

woven nexus
#
            {
                ClimbAble = false;
            }```
state is never set inside of it, so it will just keep setting ClimbAble to false untill the next iceage
#

if (state == MovementState.climbing)
{
ClimbAble = false;
}

nimble marsh
#

so

woven nexus
#

Believe me I have done that to many times to count

nimble marsh
#

i just close unity and hope my work didnt get fricked up?

woven nexus
#

eh, unfortunately yeah

nimble marsh
#

please dont croupt my ass

woven nexus
#

Your script should be fine, but if you haven't saved recently that might sting

nimble marsh
#

corrupt*

#

i havent clicked save in li ke 2 years

#

at least i have prefabs of everything

#

because my projcet got deleted multiple times and didnt remove scripts so i should be good

#

yup this place is fucking empty

#

like some ground and a bean

woven nexus
#

Check to make sure the scene was loaded

#

It might have loaded the default scene instead of your scene when it restarted

#

otherwise bad news bears

nimble marsh
#

nope but prefabs 😍

woven nexus
#

I religiously pres ctrl-s now'a days because of specifically while loops πŸ˜‚ 😭

nimble marsh
#

Lol man ima make ctrl s my secondly routine :)

woven nexus
nimble marsh
#

im a autosaver

#

bro comeon i forgot to edit the code and now unity freezed again

#

😭

woven nexus
#

πŸ˜…

nimble marsh
#

but i saved like two seconds ago so i mgood

woven nexus
#

I wan't to say if you code long enough you stop doing that as well, but...

#

It is like there is just enough time for you to forget why it crashed for you to reflexively press that play button again

nimble marsh
#

man i cant belive its been almost two years since i started coding but the stops made me forget everything that two years are like 1 month learning

woven nexus
#

I have been doing this for twelve and I constantly am having to re learn things. Like my computer science teach said on my final. "use google, because you will be using it for the rest of your career."

nimble marsh
#

bro when i put if it just does it for one frame

woven nexus
#

Ah

nimble marsh
#

i put the if statment in update

#

hope it works

#

Weee

#

im fucking flying again

woven nexus
#

I am assuming state is being changed

#

Check in


        MyInput();
        SpeedControl();
        StateHandler();
        FovBooster();
        StateSpam();
        Dashing();
#

if state is being change

nimble marsh
#
   private void Update()
    {
        // ground check
        grounded = Physics.Raycast(transform.position, Vector3.down, playerHeight * 0.5f + 0.3f, whatIsGround);
        ClimbAble = Physics.Raycast(transform.position, new Vector3(1, 0, 1), playerHeight * .5f + .3f, whatIsGround);
        ClimbAbleMinus = Physics.Raycast(transform.position, new Vector3(0, 0, -1), playerHeight * .5f + .3f, whatIsGround);

        MyInput();
        SpeedControl();
        StateHandler();
        FovBooster();
        StateSpam();
        Dashing();
        Climbing();
if(state == MovementState.climbing)
            {
                ClimbAble = false;
                
            }

        // handle drag
        if (grounded)
            rb.drag = groundDrag;
        else
            rb.drag = 0;
    }```
woven nexus
#

maybe wrap those in an if like if(state != MovementState.climbing)

nimble marsh
#

it litteraly says climbable false in inspector but iim flying like how

#

no

woven nexus
#

oh wait

#

I am dumb

nimble marsh
#

i want climbable to be off when im climbing bro what

woven nexus
#

put that if before the Climbing();

#

we are setting climb able false after we are climbing

nimble marsh
#

still doesnt work

woven nexus
#

Okay one sec

nimble marsh
#

BRO

#

OMG

#

I JUST FUCKING FOUND OUT WHY THIS WAS ALL HPAPING

#

FUCK ME

woven nexus
#
private void Update()
    {
        // ground check
        grounded = Physics.Raycast(transform.position, Vector3.down, playerHeight * 0.5f + 0.3f, whatIsGround);
        ClimbAble = Physics.Raycast(transform.position, new Vector3(1, 0, 1), playerHeight * .5f + .3f, whatIsGround);
        ClimbAbleMinus = Physics.Raycast(transform.position, new Vector3(0, 0, -1), playerHeight * .5f + .3f, whatIsGround);
if(state != MovementState.climbing)
            {
        MyInput();
        SpeedControl();
        StateHandler();
        FovBooster();
        StateSpam();
        Dashing();
}
if(state == MovementState.climbing)
            {
                ClimbAble = false;
                
            }
        Climbing();


        // handle drag
        if (grounded)
            rb.drag = groundDrag;
        else
            rb.drag = 0;
    }
nimble marsh
#

oh nvm i dont :)

woven nexus
#

oh XD

nimble marsh
nimble marsh
woven nexus
#

I also added the state != climbing check for all the others.

#

the only reason ClimbAble should be true is if for some reason the state is changing to something else.

#

is probably will cause some other issues, but hopefully will make climbing work

nimble marsh
#

bro

#

yours works

#

but after i press v

#

i cant move anymore

woven nexus
#

yeah

#

that is the other issues it would cause lol

#

easily fixed though

#

So what we want is just to switch out the climbAble and CanClimb

#

basically the raycast will say if there is something to climb, and we will add some logic to a new bool that says if the play can climb

nimble marsh
#

so i mkake a new bool

woven nexus
#

yep

nimble marsh
#

oke

#

ok i mdone with the bool what i do know

woven nexus
#

so change

        if (Input.GetKey(climbKey) && ClimbAble == true && CanClimb)
        {
            CanClimb = false;
#

and

if(!CanClimb)
            {
                ClimbAble = false;
                
            }
#

also get rid of the if around the other method calls.

#

the if(state != MovementState.climbing)

#

Last we need to change the coroutine, so one sec

nimble marsh
#

ok bu t ima go to the restroom

woven nexus
#

okay

#
  IEnumerator ClimbingDelay()
    {
        yield return new WaitForSeconds(5f);
        if (state != MovementState.air && state != MovementState.climbing)
        {
            CanClimb = true;
        }
        else
        {
            StartCoroutine(ClimbingDelay());
        }
    }
nimble marsh
#

backkers

nimble marsh
woven nexus
#

yes

nimble marsh
#

aight i did it

#

i test now?

woven nexus
#

did you do the three above also?

nimble marsh
#

yea

woven nexus
#

then yeah give it a shot

nimble marsh
#

now it doesnt even turn on climbable

#

meaning something is holding it always from turning on

#

climbed or not

woven nexus
#

Is CanClimb being set to true

nimble marsh
#

no

woven nexus
#

Like bool CanClimb = true;

nimble marsh
#

nor climbable

#

nope

#

its not turning on in the inspector

woven nexus
#

yeah just add the = true; to CanClimb

nimble marsh
#

when?

woven nexus
#

just where it is declared

nimble marsh
#

meaning the raycast

#

but something is preventing the bool from turning on no matter what soever

woven nexus
#

bool CanClimb = true;

nimble marsh
#

in update?

woven nexus
#

no, uhm,,,

nimble marsh
#

yea

woven nexus
#

thinking one sec

#

Can you climb once, or not at all?

nimble marsh
#

not at all

woven nexus
#

okay

nimble marsh
#

theres something prevnting it

woven nexus
#

where you created CanClimb as a varaible

nimble marsh
#

yea

woven nexus
#

add the = true; and then in the editor in edit mode you might have to set it true once also

#

you can set a default value to variables, but if it is public the editor might not update it automatically

nimble marsh
#

ok trsut me it wont work cuz something is prevnting it

woven nexus
#

are you in play mode?

nimble marsh
#

no

woven nexus
#

interesting

#

post the new code again

nimble marsh
#

think i fixed it

woven nexus
#
if(state != MovementState.climbing)
            {
        MyInput();
        SpeedControl();
        StateHandler();
        FovBooster();
        StateSpam();
        Dashing();
}
if(state == MovementState.climbing)
            {
                ClimbAble = false;
                
            }
#

change that to

#
        MyInput();
        SpeedControl();
        StateHandler();
        FovBooster();
        StateSpam();
        Dashing();
if(!CanClimb)
            {
                ClimbAble = false;
                
            }
nimble marsh
#

aight

woven nexus
#

Also change

nimble marsh
#

did

woven nexus
#
    IEnumerator ClimbingDelay()
    {
        yield return new WaitForSeconds(5f);
        if (state != MovementState.air && state != MovementState.climbing)
        {
            CanClimb = true;
            ClimbAble = true;
        }
        else
        {
            StartCoroutine(ClimbingDelay());
        }
    }

    private void Climbing()
    {


        if (Input.GetKey(climbKey) && ClimbAble == true && CanClimb)
        {
            ClimbAble =false;
            rb.AddForce(0, climbDistance, 0, ForceMode.Impulse);

            Debug.Log("Climbed");
            state = MovementState.climbing;
        }
        if(!CanClimb) {
            ClimbAble = false;  
        }
            

        //   Invoke(nameof(readyToClimbNow), climbingCooldown);
         

        //  StartCoroutine(ClimbingDelay());

    }
#

to

#
    IEnumerator ClimbingDelay()
    {
        yield return new WaitForSeconds(5f);
        if (state != MovementState.air && state != MovementState.climbing)
        {
            CanClimb = true;
        }
        else
        {
            StartCoroutine(ClimbingDelay());
        }
    }

    private void Climbing()
    {


        if (Input.GetKey(climbKey) && ClimbAble == true && CanClimb)
        {
            CanClimb =false;
            rb.AddForce(0, climbDistance, 0, ForceMode.Impulse);

            StartCoroutine(ClimbingDelay());

            Debug.Log("Climbed");
            state = MovementState.climbing;
        }
            

        //   Invoke(nameof(readyToClimbNow), climbingCooldown);
         

        //  StartCoroutine(ClimbingDelay());

    }
#

wait

#

sorry

nimble marsh
#

ok i havent changed no nothing

#

now good?

woven nexus
#

I just edited that last one

#

yeah

nimble marsh
#

aight

woven nexus
#

wait uhg

#

I edited it again

nimble marsh
#

aght

#

aight

woven nexus
#

Sorry, I am getting tired

nimble marsh
#

its ok

woven nexus
#

I will look through the rest of the code real quick

nimble marsh
#

youve helped for like and hour nothing to be sorry about

#

im the person who should be sorry for putting you in this

woven nexus
#

See if there is anything else that might be causing an issue

woven nexus
#

I love coding

nimble marsh
#

aight

woven nexus
#

well and hate it

nimble marsh
#

lol

#

still i cant climb

#

climbable is off

woven nexus
#

okay

#

in edit mode, is CanClimb set to true?

nimble marsh
#
if(!CanClimb)
            {
                ClimbAble = false;
                
            }```
#

i think its this code thats wrong

woven nexus
#

yeah, if CanClimb is not set to true, that will constantly be happening

nimble marsh
#

aaaah

woven nexus
#

So while not in play mode, make sure CanClimb is true in editor

#

and then play and it should be okay

#

hopefully

#

you know

nimble marsh
#

bro now i can climb the air

#

?

#

comeon

woven nexus
#

mmmhh

#

interesting

nimble marsh
#

LOL

woven nexus
#

ah

#

I think I know why

nimble marsh
#

bro

#

i fixed it

#

finnaly

woven nexus
#

cool

nimble marsh
#

wait

#

nvm

#

i didnt

woven nexus
#

I don't thin we are setting ClimbAble to false again

#

think*

#

wait no...

nimble marsh
#

this order here should be reveresd

#

fuck

woven nexus
#

wait where is that code.

nimble marsh
#

update duh

woven nexus
#

Send me the full code

#

I think something went fishy

#

Last time a swear lol

nimble marsh
woven nexus
#

just got back to a computer so have VS

nimble marsh
#

sui

woven nexus
nimble marsh
#

bro do i replace the entire code?

#

πŸ’€

woven nexus
#

Yeah, I mean if you need to go back your last version is just above

nimble marsh
#

ok

woven nexus
#

This logic is a little backwards now that I am looking at it on a bigger screen, but lets see if it works first.

#

Ah I see one thing

nimble marsh
#

bro can u code a bomb in the script so you can kill me?

#

doesnt work at all

woven nexus
#

lol

#

are you climbing once?

#

or not at all now?

nimble marsh
#

not even climbable ture

woven nexus
#

Add
Debug.Log(CanClimb); before our if in update

#

I am not sure why it would be false, but that should be the only thing stopping us from climbing at all

nimble marsh
#

bro

#

agian

#
        if (!CanClimb) {
            ClimbAble = false;
        }```
#

this code is the preventing

#

litteraly breaking the climb in 3 lines

#

canclimb cant be on if climeable is never on

woven nexus
#

you should be able to get rid of it

nimble marsh
#

the rely on each other

#

i did

woven nexus
#

and?

nimble marsh
#

im just giving you a tip

#

making you realize its wrong

woven nexus
#

no I mean is it working lol

nimble marsh
#

cuz you did it like two times

#

im flying

woven nexus
#

uhg

#

is there a delay for from the initial climb and flying?

#

or is it just straight up?

nimble marsh
#

no

#

ijust hold v and fly

#

and if i spam v like v v v v v v v v v v v v vv v v v itll fly me

woven nexus
nimble marsh
#

i made !canclimb climbable and climbable to canclimb = true;

woven nexus
#

post

#

just that

nimble marsh
#
if (ClimbAble == true) {
            CanClimb = true;
        }```
woven nexus
#

okay try it with out that also

nimble marsh
#

idid

#

and i flew

woven nexus
#

okay, post the full code again. I can't track what is happening if multiple changes are being made.

#

otherwise we both might just need sleep/rest at this point lol

nimble marsh
woven nexus
#
        if (state == MovementState.climbing) {
            CanClimb = false;
        }
        if (ClimbAble == true) {
            CanClimb = true;
        }
nimble marsh
#

i did that already :>

woven nexus
#

get rid of them?

nimble marsh
#

f (state == MovementState.climbing) { CanClimb = false; }1

#

this i did

woven nexus
#

yeah, get rid of it.

nimble marsh
#

oh

woven nexus
#

both, and try

nimble marsh
#

lets see

#

it says climbable is true but v doesnt do no nothing

#

be right back

#

ima go for like 10

woven nexus
#

Send a screen grab of the script in the editor when you get back.

nimble marsh
#

im back

#

look bro we all need a rest

#

youve helped me enough and this project is real hard

nimble marsh
#

yo

#

star