Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - WatchDaToast

#1
For your consideration:



Strange things are happening in the animal kingdom of Velehill. Unknown shadows of large appearance are seen roaming through the forests and making the ground shake with every step of their steel feet. Houses and trees are destroyed and one animal after the other seems to disappear mysteriously.
Finn, a young roebuck,
soon finds out about the disappearance of his family as well. Without hesitation, he goes on a journey to find them, not knowing he and his new friend Gwen the owl will soon uncover a dark secret that should have been kept hidden for all eternity...


Please consider for:

Best Game Created with AGS
Best Writing
Best Character
Best Gameplay
Best Background Art
Best Character Art
Best Animation
Best Original Music & Sound Design
Best Voice Work
Best Programming
Best Puzzles

Thanks so much! :)
#2
Hey everyone!
Some of you may have seen the thread over at the "Games In Production" part of this board:
https://www.adventuregamestudio.co.uk/forums/ags-games-in-production/beyond-the-edge-of-owlsgard/


So many things happened in the meantime, and I can proudly say that the game is very close to its release now :-D I currently plan to release it in December this year, as a commercial game on Steam.

Owlsgard is now playable in two languages (german and english), and aside from two minor characters, every character in the game has full voice acting in both languages.
To make sure that that the english version is just as enjoyable as the original german version, I am now looking for english native speakers who would be up to test the game.
Each tester will be visible in the game's credits.

Since most bugs were already found during earlier testing phases (at least I hope so (laugh) ), the focus of this testing phase would be on the english localization. Imagine it's a movie and you are the english test audience. ;)  This means that you play through the game, have fun with it (hopefully), and tell me what the experience was like for you, if there were some weird errors, misplaced speech files or issues that the voice actors and me did not catch yet.

Thanks so much in advance, and feel free to drop me a PM if you're interested!  :-D
#3
I contacted Darth Mandarb today and asked him to unlock the Owlsgard thread. I was so busy with social media the last few years that I totally forgot to put up the demo in my thread as well! :-D

So glad to hear that positive feedback here so far! :-D
Really means a lot to me!
#4
Critics' Lounge / Re: Some of my game tracks
Mon 07/09/2020 15:51:53
@Nikolas

Thanks a lot for this detailed post! :)

Until now I always used those slow "woosh" cymbals to add some tension before a new phrase
starts (and to make some transitions from one part to another seem smoother).
But now that you mention that, I can see why they could feel distracting! Normally I`d say those
slow cymbals are used when something appears on screen, like a logo. Maybe it would be better
to just add "normal" cymbal hit? I need to try it! :)

I only use a soundfont named OmegaGMGS2, which still sounds very midi-ish. But I like
the timbre of the instruments a lot. Aside from that, not a lot of mixing is done on my tracks.
I usually add some reverb to the instruments in Cubase and remove most of the mid frequencies, so
the sound effects and voices in the game don`t get drowned out during louder tracks (it also helps
to make the whole sound of the music a bit "warmer").

You are right, there is still a lot of room for individual velocities, haven`t really bothered with that much until now.
But I already have an idea where I could change up the tempo a bit during the track... I will experiment
a bit with it and then post a newer version. :)

I still compose my tracks just like I did when I made "normal" midi files, which means the orchestration
is a bit barebones and reduced to the most important instruments. I have not much experience on
how to make it sound more convincing in terms of a full orchestra sound, but I`d love to experiment around and
learn more about this as I am writing more tracks.
Could you give me more insight on what you mean by more thought overall? :)

Thanks again for this constructive criticism, it really helps a lot! :D
#5
Critics' Lounge / Re: Some of my game tracks
Sat 05/09/2020 16:32:13
@Hobo
Thanks a lot!  :)
I am super glad that this track seems to be good so far and that the melodies seem to sound natural for a first-time-listener.

@Cassiebsg
Thanks! :slight_smile: I really wanted this cheesy adventurous feel. Good to know it comes across well..

@Mandle
Thank you!
You are right about that!
I already created a looping version of this theme, where after the final conclusion,
it immediately goes back to the rythm you hear at the very beginning. And thus, it loops
seamlessly. I think the worst you could have is a short moment of silence before it starts again,
which won`t happen this way. :P
I want to use the looping version of the song during a part where the player steers a little ship across an ocean to reach the next playable area, and so far I think it works somewhat well with the
upbeat rhythm and the ascending energy of the song during some parts. Wouldn`t want to use it during puzzle solving parts though, it would be way too anticlimatic. :)
#6
Critics' Lounge / Re: Some of my game tracks
Sat 05/09/2020 12:05:13
Oops! Did not know soundcloud needs a special secret link for private links!
Thanks for pointing that out. Fixed it! :)
#7
Critics' Lounge / Some of my game tracks
Sat 05/09/2020 11:25:15
Hey everyone!
I am currently writing the entire soundtrack for my AGS game, but I am a bit insecure about the quality of my compositions.
It would be great if some here could take a look at the songs I made and check if they sound alright.
After working on these for so long, I can`t tell if they sound ok anymore . When drawing a picture, I can always flip it to see the mistakes... but with music,
this has always been a bit harder for me.  :-D

For a start, this is the main theme of my game:
https://soundcloud.com/user-666832169/owlsgard-theme-ver1/s-caRuVnVnNZK

When creating music for games, I always write a midi first and then put some soundfonts on them. Totally not a convincing orchestral sound, but so far it works within the retro game vibe.
Haven`t bothered too much with the mixing.
I like the different parts of the track, but I am not sure if this whole composition is coherent in itself. I even get the feeling it could be confusing for new listeners on some parts.
#8
@eri0o
I was checking the IdleView`s last frame in my script, but it only did that after I changed "If (cEgo.view)" to "If (cEgo.View)". Kind of weird though.
Before I found this out, I assumed AGS did not check if the player was currently playing an Idle View or something. I haven`t scripted in a few months, so that may explain why i wrote view in lowercase. Mistake on my end.  :-D


So far it all works perfectly! First the players blinking view plays, and then another idle animation gets picked randomly.
To go back to the blinking view after one random Idle View has played, I made this horrible mess of a spaghetti code.
It looks for the last frame of each random Idle animation and brings back the blinking idle, which repeats the whole process.

Code: ags
 

 /////Randomly picked Idle animations

   ///looks around 1 Idle
    if ((cEgo.View == 513) && (cEgo.loop == 0) && (cEgo.frame == 6)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 513) && (cEgo.loop == 1) && (cEgo.frame == 10)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 513) && (cEgo.loop == 2) && (cEgo.frame == 10)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 513) && (cEgo.loop == 3) && (cEgo.frame == 6)) {
  cEgo.SetIdleView(64, 2);
    }
    
    ///looks around 2 Idle
    if ((cEgo.View == 514) && (cEgo.loop == 0) && (cEgo.frame == 10)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 514) && (cEgo.loop == 1) && (cEgo.frame == 8)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 514) && (cEgo.loop == 2) && (cEgo.frame == 8)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 514) && (cEgo.loop == 3) && (cEgo.frame == 12)) {
  cEgo.SetIdleView(64, 2);
    }
    
    ///wiggles ears Idle
    if ((cEgo.View == 515) && (cEgo.loop == 0) && (cEgo.frame == 24)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 515) && (cEgo.loop == 1) && (cEgo.frame == 25)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 515) && (cEgo.loop == 2) && (cEgo.frame == 25)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 515) && (cEgo.loop == 3) && (cEgo.frame == 6)) {
  cEgo.SetIdleView(64, 2);
    }
    
    ///anxious shudder Idle
    if ((cEgo.View == 516) && (cEgo.loop == 0) && (cEgo.frame == 31)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 516) && (cEgo.loop == 1) && (cEgo.frame == 33)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 516) && (cEgo.loop == 2) && (cEgo.frame == 33)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 516) && (cEgo.loop == 3) && (cEgo.frame == 6)) {
  cEgo.SetIdleView(64, 2);
    }
    
    ///freezes and shakes Idle
    if ((cEgo.View == 517) && (cEgo.loop == 0) && (cEgo.frame == 38)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 517) && (cEgo.loop == 1) && (cEgo.frame == 38)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 517) && (cEgo.loop == 2) && (cEgo.frame == 38)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 517) && (cEgo.loop == 3) && (cEgo.frame == 6)) {
  cEgo.SetIdleView(64, 2);
    }
    
    ///bounces around Idle
    if ((cEgo.View == 518) && (cEgo.loop == 0) && (cEgo.frame == 6)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 518) && (cEgo.loop == 1) && (cEgo.frame == 34)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 518) && (cEgo.loop == 2) && (cEgo.frame == 34)) {
  cEgo.SetIdleView(64, 2);
    }
    else if ((cEgo.View == 518) && (cEgo.loop == 3) && (cEgo.frame == 12)) {
  cEgo.SetIdleView(64, 2);
    }


I have this on repeatedly_execute_always in my global script. It works, but I imagine it could take quite some toll on the poor AGS engine, which has to check this mess every tic?  :-D
#9
@Khris @Matti
Thanks a lot! Gonna change these lines then!  :)

I still have this problem that AGS won`t check the idle views frames though. (I made a mistake by the way, it is supposed to be (cEgo.view == 64) instead of (cEgo.loop == 64)).
So far it seems that AGS only checks the "normal" views a character can have, not the idle views. Even when the main character is clearly on frame 2 of his idle view, AGS takes no notice.
Only when I assign the view by script via Ego.ChangeView(64), AGS notices it.

Looks like I need to call the idle animations like Matti did in the latter script then...
Or play them with a script that checks when the player stands still.

Edit: Wait a second, I found the reason why AGS won`t check. I need to write .View instead of .view. Oops.
#10
Hey everyone, I really hope some of you helpful people can somewhat solve this issue for me!  :-D
I wonder how I could go about displaying random idle animations ingame.

So far, as soon as the player stands on a spot, a standard idle animation always plays in which he blinks with his eyes for a short amount of time. After that, I want to randomly let the game pick
one of 5 idle animations, in which the main character does random things. After that, I want the character to go back to his normal blinking frame, so the process can start over.
Like this:

[Blinking Animation] --> [Random Idle]  --> [Blinking Animation] --> [Random Idle] etc...

My scripting skills are make-do for the most part and I am not sure how to properly get this thing done. I had this hacky idea here, placed in repeatedly_execute_always:
Code: ags
if ((cEgo.loop == 64) && (cEgo.frame == 6)) {  ////Normal blinking view which got assigned to the main character at the game start. frame 6 is the last frame

  int RandomIdle = (Random(5));
  if (RandomIdle == 0) {
  cEgo.SetIdleView(70, 2);  ///random idle 1
  }
  else if (RandomIdle == 1) {
  cEgo.SetIdleView(71, 2);  ///random idle 2
  }
  else if (RandomIdle == 2) {
  cEgo.SetIdleView(72, 2);  ///random idle 3
  }
  else if (RandomIdle == 3) {
  cEgo.SetIdleView(73, 2);  ///random idle 4
  }
  else if (RandomIdle == 4) {
  cEgo.SetIdleView(74, 2);   ///random idle 5
  }
  else if (RandomIdle == 5) {
  cEgo.SetIdleView(75, 2);  ///random idle 6 
  }
  
}


After this code, I would have added more scripts that checks the last frame of each random idle animation, so the idle view for the character can be reset to the normal blinking view.
Of course this is a pretty bad solution, and so far this script presented here did not even work (nothing happened).

I hope someone here can help me with that... (laugh)
#11
Ooh, what a relief. Did not think it would turn out to be that easy. Thanks a lot!
So, when I leave a lot of "translated" lines empty because the original line did not have any mistakes, does AGS automatically leave these in the new "default" language?
#12
You are right, I may have created some weird stuff with the last script. Strangely, it works perfectly so far. :P
The only problem I encountered with the original script was that the first step sound, which already appears on frame 1, could not be heard. I assumed that was because the script checked if the player
was walking on frame 1, when the sound should have been played, so it was already too late.
It all started working perfectly when I checked on frame 0, which should not be able to be checked because the player is not walking.

So far, I put lastPlayerframe in there again, in hopes of making this messer a bit nicer:
Code: ags
  if(player.View == player.NormalView && player.Moving) // Walking
  {
    if((player.Frame != lastPlayerFrame && player.Frame == 0) || (player.Frame == 10) || (player.Frame == 5)) // Switched to frame 1 (start of walkcycle)
    {
      // Choose two different random footstep clips
      footstepClip1 = Random(FOOTSTEP_AUDIO_COUNT - 2);
      if(footstepClip1 >= footstepClip2)
        footstepClip1++;
      footstepClip2 = Random(FOOTSTEP_AUDIO_COUNT - 2);
      if(footstepClip2 >= footstepClip1)
        footstepClip2++;
 


Maybe it`s because I still struggle with understanding more complex scripts like this, but I added another check on frame 5 and 10 (the frames directly before the next step). So far I assume that this assures that, when the player is switching from one
walkable surface to another (which changes the footstep sound), the script checks the sounds that shall be played shortly before the next step. Frame 10 is the last frame of the walkable animation before it starts on frame 1 again, so I thought I make the script check there to assure that the first frame of the walkable animation has the correct sounds played.

Sorry if I hurt your brain with these things, I guess I may have gotten a bit wrong how this script should work... :-D
#13
Long story short, all my game`s dialogue was finished and I sent it to someone for proofreading.
I let AGS number all the ingame lines and exported a huge text file (the one that is meant to be used by
voice actors) with all the lines, sorted by characters that were saying them. I sent that to the one person doing
the proofreading, thinking this would be the most straight-forward way for him to do the proofreading.

Now, as I slowly see the corrected lines stack up, I notice that replacing the original lines inside the
scripts might turn into much more of a nightmare than I was expecting. :(

I wonder, is there a somewhat efficient way to replace the corrected lines, without having to
look up each script they appear in and manually replacing them there?
I thought about creating a translation text file and adding the corrected lines as "translated" versions
beneath the original ones. I could accept that amount of work, even if it may take me a week to do.
But in the end, I would need a way to replace the original lines with the "translated" or to be exact, proofread ones in AGS.
I remember hearing about such a feature in AGS, but I am not sure.

Any help is greatly appreciated here. I think I should have given this a bit more thought before I sended out
that text file...  8-0
#14
Wow! Thanks SO much for showing me how to do it in such an elaborate way! (laugh)
Gonna try to recreate this in AGS now!

Edit:

This is amazing! It works like a charm! :-D
I made some alterations, would you take a look if this is right?

I removed the else section you added, so I can occasionally switch the main characters view for other movements like swimming, without having that Display(".."); option pop up.
Shouldn`t create any issues, or does it?
Code: ags
// Convenience function to update the linked audio for a particular animation frame in a character's walkcycle
void SetFootstepAudio(this Character*, int Footsteploop, int Footstepframe, AudioClip* clip)
{
  if(Game.GetLoopCountForView(this.NormalView) > Footsteploop && Game.GetFrameCountForLoop(this.NormalView, Footsteploop) > Footstepframe)
  {
    ViewFrame* vf = Game.GetViewFrame(this.NormalView, int Footsteploop, int Footstepframe); //////int koennte vor This noch sein
    vf.LinkedAudio = clip;
  }

}


To change the footstep sounds depending on rooms or screen locations, I did this:
Code: ags
        // Set the footstep clips to the random values
        if(i == eDirectionDown || i == eDirectionUp) // Front or back loop
        {
          if (WalkOnGrass == true) { ////Footsteps on grass
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_FB, footstepsGrass[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_FB, footstepsGrass[footstepClip2]);
          }
         else if (WalkOnWood == true) { ////Footsteps on wood
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_FB, footstepsWood[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_FB, footstepsWood[footstepClip2]);
          }
         else if (WalkOnSand == true) { ////Footsteps on sand
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_FB, footstepsSand[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_FB, footstepsSand[footstepClip2]);
          }
         else if (WalkOnStone == true) { ////Footsteps on stone
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_FB, footstepsStone[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_FB, footstepsStone[footstepClip2]);
          }
          else {   /////keine Footsteps
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_FB, aFinnNone);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_FB, aFinnNone);
          }
        }
        else
        {
          if (WalkOnGrass == true) { ////Footsteps on grass
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_SIDE, footstepsGrass[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_SIDE, footstepsGrass[footstepClip2]);
           }
         else if (WalkOnWood == true) { ////Footsteps on wood
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_SIDE, footstepsWood[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_SIDE, footstepsWood[footstepClip2]);
           }
         else if (WalkOnSand == true) { ////Footsteps on sand
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_SIDE, footstepsSand[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_SIDE, footstepsSand[footstepClip2]);
          }
         else if (WalkOnStone == true) { ////Footsteps on stone
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_SIDE, footstepsStone[footstepClip1]);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_SIDE, footstepsStone[footstepClip2]);
          }
          else {    /////keine Footsteps
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_1_SIDE, aFinnNone);
          player.SetFootstepAudio(i, FOOTSTEP_FRAME_2_SIDE, aFinnNone); 
          }
        }


Just wanted to ask if this approach would create any bugs in the long run. :)

Edit 2:
Also, since your script that checks the first frame of the walking animation did not work for me, since the players first footstep sound already occurs on the first frame, I made this little (maybe a bit stupid) alteration:
Code: ags
  if(player.View == player.NormalView && player.Moving) // Walking
  {
    if((player.Frame == 0) || (player.Frame == 1) || (player.Frame == 5)) // Switched to frame 1 (start of walkcycle)
    {
      // Choose two different random footstep clips
      footstepClip1 = Random(FOOTSTEP_AUDIO_COUNT - 2);
      if(footstepClip1 >= footstepClip2)
        footstepClip1++;
      footstepClip2 = Random(FOOTSTEP_AUDIO_COUNT - 2);
      if(footstepClip2 >= footstepClip1)
        footstepClip2++;

This way, the footsteps immediately play on the first frame when walkin and change depending on the ground the player walks on.
I guess its` not too wise to have a script constantly check the players frame 0 when he is standing...
#15
I have been struggling with this for quite a while now and searched the forums for solutions. I found a few old threads, but I still can't really wrap my head around how it works. :(

I tried to get random footsteps for the main player by writing a global function that creates a random value (between 0 and 7) and for every different value, I assign a different sound effect to some frames of the players walking view (when he takes a step). Inside a room script, I checked if the player was on a certain frame in his walking view (I checked that using repeatedly_execute_always) und if yes, called the function. It worked somewhat.
It seemed as if AGS needed to catch up with the scripts everytime the function was first called. The main character walked around soundless, until he took around 3 or 4 steps. Then I started hearing
the footsteps. Sometimes the sounds stopped for a moment, especially if I switched to a different Loop while walking (when I switched from walking left to walking up).
Aside from these issues, sometimes the same footstep sound was randomly played one after the other, which I want to avoid, since it sounds a bit strange. That`s the reason why I want these random footsteps in the first place. But somehow my brain is too burned out right now to come up with a clean script that avoids the repeating of sounds.

I am sure such a script can be pulled off without any of these things happening, and I would be super thankful if someone here could help me understand how such a thing could work properly. :-D
#16
Works perfectly! Thanks so much! :-D
#17
Thank you! It's that easy actually?

I have look into the guiscript.acs, but I couldn`t find said line even with a search. I started using version 1.5.2 of the plugin in late 2017. :(
Could I do it an a different, more hacky way?
#18
Heya! I really needed to bump this thread for a reason.
I have been using this great plugin for my game troughout the last two yeas and made some custom changes to it here and there (mostly altering the way some verbs works).

However, now I want the player to be able to talk to any hotspot and object troughout the game, not only to characters. I have been looking for a line of code I could edit to enable this, but I haven't found anything similiar, nor do I know how I could achieve that with another (hacky?) way.
Any help is greatly appreciated <3
#19
@Cassiebsg @MrPr1993 @Stupot @Ali
Thanks so much!! :P

@DBoyWheeler
Yes, in that regard, there seem to be quite a few adventures in production right now.
Fox Tail, Inherit the Earth 2, Trip To The Ark Fantastic, among some others I have seen but can't recall the names of.
I think anthro animal worlds are a great setting to tell certain stories... and I am not talking about furry dating simulators here *cough*.

@Crimson Wizard
Great to hear, that was exactly the mood I tried to convey. I was inspired by the Kings Quest series and how they managed
to create such a mood of mystery and wonder with their backgrounds. :P

@Khris
Ooh, it's you! I remember you as well, and how you kept helping me out with my countless scripting problems back in the day (I remember
working on my first AGS game King`s Cat back then...).
Great to hear you like it, hopefully it will turn out as good as I imagine it right now.
#20
Hey everyone, just wanted to let you know this project is still alive and going strong!
Revamped the first post in this thread - I replaced all the old screenshots with their newest and most polished counterparts, als there are a few new graphics to see now.  8-)
Let me know if you like them! :-D

All in all, I can tell you that most of the graphics and animations are pretty much done by now. I am currently animating the last bit of the game's ending, and from then on, the only thing I have to take care of
graphically are a few touch-ups on backgrounds in chapter 3 and 4, as well as some background animations that are still missing. Might still be quite a bit of work, but most of that will be more like a routine work instead of the creatively exhausting job that was coming up with all the character sprites, backgrounds and animations.  :)

2020 will be the year of the audio department - I will write the game's music and add sound effects. Also, with the help of a friend and tester, I managed to get some quite professional german voice actors to do the roles in this game, and everyone is super excited about how it's going to turn out! I would be excited to also do an english talkie version, even if that meant a few additional months of cutting and mixing audio files. Hopefully I will be able to keep you updated in this thread this year... after I neglected it all troughout 2019. (roll)
SMF spam blocked by CleanTalk