Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Messages - Snarky

Pages: [1] 2 3 ... 302
Modules & Plugins / Re: MODULE: TotalLipSync v0.5
« on: Today at 08:45 »
Two more things...

ATM I'm using 120fps ('GameSpeed'), so I can use a AnimationDelay=1, and not -7 as it was before (on 40fps). I was told using negatives for AnimationSpeed, WalkSpeed, etc. was bad and 'unknowns'.

Code: Adventure Game Studio
  1. cJulius.ChangeView(1);          //julius
  2. cJulius.SpeechView=2;           //julius speech
  3. cJulius.AnimationSpeed=1;       //normal animation speed
  4. cJulius.SetWalkSpeed(7, 6);     //normal walk speed

...though I still use some negatives - for an old man:
Code: Adventure Game Studio
  1. cJulius.AnimationSpeed=0;               //old animation speed
  2. cJulius.SetWalkSpeed(1, 1);     //old walk speed

A. 0 is not a negative number.
B. At 120 fps, a 30-frame walkcycle will run 4 times a second. Since a cycle includes two footsteps, that's 8 footsteps/second. That seems faster than necessary.

Modules & Plugins / Re: MODULE: TotalLipSync v0.5
« on: Today at 07:04 »
Hi Snarky,

The speech animation delay seems to be too slow for TotalLipSync - no matter what I set a characrs to (1, 5, -25, 30), it doesn't make a difference.
What Speech Animation Delay does TLS use?

TotalLipSync doesn't use animation delay: it reads the timing data from the sync files and displays the corresponding frame.

Problems could potentially occur if the computer can't run the game at the game speed you've set. The animation might then fall behind the speech. So...

ATM I'm using 120fps ('GameSpeed')

Film runs at 24 fps. A lot of cheaper animation runs at 12 fps, literally one tenth of the framerate you have set: you're showing ten frames for each one of theirs! AGS by default runs at 40 fps, which is plenty for a point-and-click game, and twitch-based games like FPSs aim for 60 fps, which is also how fast most monitors refresh. Which is all to say that 120 fps is an insane framerate for an adventure game.

More significantly: with a high-res game like yours, many (most) computers won't be able to keep up, and this could affect lip sync (and other sync situations).

so I can use a AnimationDelay=1, and not -7 as it was before (on 40fps). I was told using negatives for AnimationSpeed, WalkSpeed, etc. was bad and 'unknowns'.

No negatives have caused problems, but still.
I have 30frames walking for all characters.

Well, the "cure" is worse than the disease in this case. A better question might be, do you really need 30-frame walkcycles? If you cut it to 15 (every second frame) or even 10 (every third), do you lose noticeable quality?

How does Rhubarb do it's timing,[/b] considering it's file is in tenths of a second:

Code: Adventure Game Studio
  1. 0.00    A
  2. 0.50    F
  3. 0.83    C
  4. 0.90    G
  5. 0.97    A
  6. 1.05    B
  7. 1.53    A
  8. 1.61    C
  9. 1.80    B
  10. 1.87    X
  11. 2.38    X

Those are hundredths.

Try this:

Code: Adventure Game Studio
  1. #define ROOM_LIGHT 169
  2. #define HIGHLIGHTER 1957
  5. #define OFFSET_X 65
  6. #define OFFSET_Y 65
  8. int oldMouseX;
  9. int oldMouseY;
  10. bool wasOn=false;
  11. DynamicSprite* plainRoom;
  13. int abs(int x)
  14. {
  15.   if(x<0) return -x;
  16.   return x;
  17. }
  18. int min(int a, int b)
  19. {
  20.   if(a<b) return a;
  21.   return b;
  22. }
  24. void CandleLight(this Object*, InventoryItem* item)
  25. {
  26.   this.Visible = !player.HasInventory(item);
  27.   if(this.Visible)
  28.   {
  29.     int t = (abs(this.X - mouse.x) + abs(this.Y - mouse.y))/2;
  30.     this.Transparency = min(t, 100);
  31.   }
  32. }
  34. function room_RepExec()
  35. {
  36.   if(plainRoom == null)
  37.     plainRoom = DynamicSprite.CreateFromBackground();
  38.   if(CandleLit)
  39.   {    
  40.     if(!wasOn || oldMouseX != mouse.x || oldMouseY != mouse.y)  // We need to redraw
  41.     {
  42.       oCoin1.Candlelight(iCoin1W);                //set translucency of objects based on closeness to mouse/candle
  43.       oGoldIngot.Candlelight(iGoldBrick);         //set translucency of objects based on closeness to mouse/candle
  44.       oGoldPen.Candlelight(iGoldPen);             //set translucency of objects based on closeness to mouse/candle
  46.       DrawingSurface* roomSurface = Room.GetDrawingSurfaceForBackground();
  48.       if(wasOn) // Erase the highlight from last frame
  49.       {
  50.         DynamicSprite* eraseSprite = DynamicSprite.CreateFromExistingSprite(HIGHLIGHTER, false);
  51.         DrawingSurface* eraseSurface = eraseSprite.GetDrawingSurface();
  52.         eraseSurface.DrawImage(OFFSET_X - oldMouseX, OFFSET_Y - oldMouseY, plainRoom.Graphic);
  53.         eraseSurface.Release();
  54.         roomSurface.DrawImage(oldMouseX-OFFSET_X, oldMouseY-OFFSET_Y, eraseSprite.Graphic);
  55.         eraseSprite.Delete();
  56.       }
  58.       // Draw this highlight
  59.       DynamicSprite* highlightSprite = DynamicSprite.CreateFromExistingSprite(HIGHLIGHTER, true);
  60.       DrawingSurface* highlightSurface = highlightSprite.GetDrawingSurface();
  61.       highlightSurface.DrawImage(OFFSET_X - mouse.x, OFFSET_Y - mouse.y, ROOM_LIGHT);
  62.       highlightSprite.CopyTransparencyMask(HIGHLIGHTER);
  63.       highlightSurface.Release();
  65.       roomSurface.DrawImage(mouse.x-OFFSET_X, mouse.y-OFFSET_Y, highlightSprite.Graphic, HIGHLIGHT_TRANSPARENCY);    //copy to background
  66.       roomSurface.Release();
  67.       highlightSprite.Delete();
  69.     }
  70.   }
  71.   else if(wasOn) // Erase the highlight from last frame
  72.   {
  73.     oCoin1.Visible = false;
  74.     oGoldIngot.Visible = false;
  75.     oGoldPen.Visible = false;
  77.     DrawingSurface* roomSurface = Room.GetDrawingSurfaceForBackground();
  78.     DynamicSprite* eraseSprite = DynamicSprite.CreateFromExistingSprite(HIGHLIGHTER, false);
  79.     DrawingSurface* eraseSurface = eraseSprite.GetDrawingSurface();
  80.     eraseSurface.DrawImage(OFFSET_X - oldMouseX, OFFSET_Y - oldMouseY, plainRoom.Graphic);
  81.     eraseSurface.Release();
  82.     roomSurface.DrawImage(oldMouseX-OFFSET_X, oldMouseY-OFFSET_Y, eraseSprite.Graphic);
  83.     roomSurface.Release();
  84.     eraseSprite.Delete();
  85.   }
  87.   oldMouseX = mouse.x;
  88.   oldMouseY = mouse.y;
  89.   wasOn = CandleLit;
  90. }

AGS doesn't seem to have a very good way of making a copy of a small part of a sprite efficiently: you have to first copy the whole thing and then crop it, which is likely slow. I tried an alternative approach (creating a small sprite and drawing the larger sprite to it with a negative offset) just to see if it would work – I have no evidence that it is actually any faster. But I have added a couple of optimizations to eliminate unnecessary redrawing.

It's possible that this code could have a bug where if you leave the room while the highlight is on, when you return that highlight will still be there as a permanent part of the background. If so, just make plainRoom a global variable.

Also, I used your distance formula for the objects (just the mean of delta x and y, or half the Manhattan distance), but the cartesian distance calculation Khris gives is certainly more accurate and can be slotted in instead.

The obvious questions are what MusicVol.Value is, where its value is set, and if you've checked that it has the value you assume when you use it to set the channelMusic volume.

I actually think the trail effect is kinda cool, but the fixes for these problems are pretty simple. I don't have time right now, but if no one else responds I'll have a crack at it later today.

Hey, I got one vote last time!

No worries, there were a lot of strong entries.

I've got quite a few things to say about what people have said about my pitch as well. Most notably about how it would be filled with dead-ends and random solutions. But I'm going to refrain from doing that. As far as I'm concerned, people are right that it wouldn't work, but for the wrong reasons. So it doesn't matter. :-D

You could of course filter out dead ends, but you did write that the randomizing would be "making some puzzles impossible and others possible." The pitch reminded me a bit of Indiana Jones and His Desktop Adventures, which I always thought was incredibly boring and repetitive (like most randomly generated games), so that didn't really win me over.

But it sounds like a lot of these ideas are going into your Private Detective game, so I guess we'll see. Good luck!

The Rumpus Room / Re: Happy Birthday Thread!
« on: 17 Jun 2018, 18:22 »
Happy b-day Disco!

Snarky I liked yours ideas on both competitions, before the results revealed. There is some chemistry here, maybe we should cooperate!! :P

Yeah, if I can make time I would be interested. I've been here 15 years and don't have a completed game to show for it, not counting the Awards Ceremonies. A MAGS might be worth a shot.

The Rumpus Room / Re: What's on TV?
« on: 17 Jun 2018, 06:23 »
I think that's  Michael Ontkean (from Twin Peaks), and if so it's got to be The Rookies.

As for what's wrong with the code provided, one mistake is at line 98 in Time.asc:

Code: Adventure Game Studio
  1.    d.Year = rawdays / 365;

By the year 3200 there have been 800 - 32 + 8 = 776 leap days, more than two years (so I'm surprised that subtracting 1 is enough to give the right year at all).

I'm also highly dubious of the logic in lines 112 and 115:

   if (d.IsLeap()) rawdays = (rawdays - howmanyleapyears) % 366;
   else rawdays = (rawdays - howmanyleapyears) % 365;

I think you always have to do mod 365 here, because the question isn't how many days are in this year, but how many days are in the years that have gone by. I think doing mod 365 on the raw day count and then subtracting the number of leap days (or vice versa, as in the code) is convoluted but correct, but the other variation is straight up wrong. You would then have to do another check to make sure you're not on day 366 of a non-leapyear.

What do you need the int representation for, anyway? If you just want to store it, you could trivially encode it as

Code: Adventure Game Studio
  1.  int dateCode = this.Day + this.Month * 100 + this.Year * 10000; // Gives YYYYMMDD

And decode it as:

Code: Adventure Game Studio
  1.   int day = dateCode % 100;
  2.   int month = (datecode / 100) % 100;
  3.   int year = datecode / 10000;

No, I didn't mean it would be an entirely linear "one tomb at a time" experience, although you would gradually work your way deeper into the necropolis (and further back in time), generally speaking.

In my mind, the whole point of the ghost roads (which are a real thing: I was inspired by the Seonjeongneung tombs in Seoul, where a "spirit path" connects the king's tomb to his wife's, and a sign warns tourists "This is a sacred path. Keep off the royal tomb's spirit walkway.") is that they allow the ghosts to move around and interact with each other; and this would be an element of the gameplay. Andail actually edited out a link I had embedded in the phrase "crumbling network of ghost roads", which was meant to hint at a puzzle I have in mind where you would need to divert some of the connections between tombs in order to arrange confrontations between certain ghosts (a little bit like the mix-and-match AI personality puzzles in Technobabylon), among other things.

Also, thanks for the detailed comment Snarky. (nod) I was starting to think it was just such a crappy idea.

Hey, you got two votes, which is better than I did!

And on that note:

Then I think yours is the high school monster hunter one.
Nope. (wrong)

Then yours must be the Maniac Mansion randomly generated one. I'm glad you didn't mind the feedback, as I was quite critical of that one! (And mine, by process of exclusion, was #1: Haunts.)

Man, getting 0 votes sucks. It's one thing for something like a Background Blitz where you can always see flaws and areas to improve your technique, but a pitch is an idea almost in its purest form, before you've had a chance to screw it up in practice. I feel a bit like Mitch Hedberg when one of his jokes bombed: "I hate it when a joke doesn’t kill, you know? I thought it would get big laughs. All these jokes have been pre-approved as funny by me!"

Unlike in the last round, where the concept was plainly too ambitious to be a realistic project, my entry this round is an idea I might actually attempt. It's been pre-approved as awesome by me!

Without delving into the code (and I see that you've got the calculation from Stackoverflow, which would require further study), I'm guessing it's very likely to do with starting the month and day counts at 1 instead of 0. It messes with any calculations that use division or modulo.

Then I think yours is the high school monster hunter one.

General Discussion / Re: Incredibly sad news
« on: 11 Jun 2018, 21:39 »
I'm very sorry to hear that. All my sympathy to those who knew him.

Suicides are such a terrible waste. We as a society need to do a better job with prevention and treatment.

It’s fun trying to guess which one of Snarky’s feedbacks is for his own pitch. I’m thinking number 7.

Now that the poll has closed: (wrong)

Congrats to #7 and #3! I voted for 7 and 3 was my runner-up, so I can't complain about the results on that score...

I'm gonna guess #7 is Blondbraid (or maybe Mouth for War), #2 is Jojo, #4 is Danvzare, and #9 Gurok. But that's based purely on degree of similarity to last round's pitch, which might not be a good guidance.

The Rumpus Room / Re: *Guess the Movie Title*
« on: 10 Jun 2018, 14:57 »
Oh. Oh. Is it Emily Browning in the new image? I know it's not from a movie I've seen...
Oh right! Recognize her from American Gods...

It's an old post with another link to the same domain.

Rather than reveal my vote, I thought it might be nice to offer a bit of feedback on each pitch. I agree with others that these were stronger overall than the last round, with lots of entries that could make games I'd like to play.

Obviously this is just one random person's opinion, and from the votes and posts in the thread it's clear that others respond differently, so don't take the criticism too hard. Also, one of the entries is mine, but I've disguised that by offering feedback on it anyway:

The premise seems to me like a really strong setup for puzzles. Also, I love the notion of "ghost roads" that are built for ghosts to travel rather than people.

On the negative side, a game where you're just dealing with ghosts one tomb at a time sounds like it could get a bit monotonous and mechanical unless it's a really short game. (Not to mention a little played out, with dozens if not hundreds of haunted house-themed adventure games.) There should be some element that breaks up the structure and lets it "come alive", so to speak.

This pitch does sound like an epic quest, and the specificity of the historical setting is appealing.

At the same time… ¡Jesús Cristo! That's dark! Starting with the slaughter of the main character's family and then moving on to the European invasion of the Americas, when the vast majority of the native population was wiped out, enslaved or subjected to gruesome atrocities... The upbeat tone of the write-up seems like a really strange fit for the story.

Man, this is an excellent mystery/thriller setup. It could be a Hitchcock movie or an episode of Suspense. The detail of the letters being from after he died is a cool hook.

On the other hand, the pitch gives very little idea of what the game consists of. The write-up is over-long, but still confusing on some points (are they married or not? if he's "away on business", why is his family around?). On the third hand, perhaps making some points in the pitch deliberately confusing works as a way to get people engaged with the story?

Like #3, this is another classic thriller premise. And unlike #3, there's at least some indication of what the gameplay revolves around.

Here's the thing I can't get past, though: Wouldn't it be, like, really, really easy to prove you are the real you and your evil twin the impostor? The predicament sounds more silly than sinister.

This sounds like something that could be a really good game. However, it's a little vague at this point. It could be Buffy, it could be Stranger Things or IT, it could be The Faculty, it could be Goosebumps or AYAOTD or Eerie, Indiana. Or it could be a fairly generic RPG superficially dressed up in a high school skin.

I guess what would really sell me is a clearer sense of how the elements are tied together. Who are these kids when they're not hunting monsters? How do their school lives matter beyond just leveling up and recruiting team members?

The notion of an infinitely replayable adventure is intriguing. However, does it work as a fun game in practice? Dead ends and red herrings, random solutions and puzzles that are just roadblocks and don't in themselves advance the story; these a common criticisms of bad adventure game design, but seem almost inevitable for this concept. I am skeptical…

Fun! Biblical stories seem like they make a great basis for adventure games, and I wonder why there haven't been more of them. Getting down the tower is also a really nice, self-contained adventure game goal. The tone of the pitch suggests a sense of humor I would enjoy.

A couple of nitpicks: I think I would have preferred if the languages were actually real ones. Also, I have to question where the phrase book came from in the first place. (My suggestion: it was dropped by an angel, annoyed at having to deal with all the hassle of now having to bring messages in all kinds of languages.)

I'm a sucker for Christmas stories, so you had my attention right off the bat. The premise is fun and feels season-appropriate in that it sets up some silly, all-in-good-fun antagonism, and offers a solid game structure. The one thing I don't like is the "or doom the world!" bit, which seems entirely extraneous and illogical given what you've described.

Isn't this pretty much a game already? (Apparently the one I'm thinking of is called A Way Out.) Escaping from prison definitely offers a lot of scope for interesting puzzles, and the virtual reality component adds a potentially interesting dimension to that. On the other hand, I guess it's a trope for a reason, but the romantic tension sounds both half-heartedly generic and a bit skeevy to me.

Great description of an interesting mechanic. Is it an adventure game, though? (Andail has edited out the rules for this round from the first post – why, Andail?! – but in the last round it said 'the pitch should fit a very loose description of "adventure game" (this genre is rather broad these days)' and I don't think this falls under even a loose definition.

Pages: [1] 2 3 ... 302