AGS 3.3 Wishlist

Started by subspark, Tue 09/12/2008 03:34:03

Previous topic - Next topic

GarageGothic

Quote from: dkh on Tue 14/09/2010 22:00:26
Customizable Idle Animation Speed

At the moment, there seems to be no option apart from going through every frame and adding a -5 delay or something. I have 8 directions with 32 frames of idle animation each. NO WAY! ;D

Not to suggest that your request isn't reasonable, but as a workaround you could just set up a timer to run the animation instead of using the built-in idle mode. There's even a module for it, but I have no idea if it's 3.2 compatible.

Creator

Would it be possible to have global arrays accessable from the global variables pane?

cianty

I think this was mentioned before but I HAVE to reiterate the need for folders in the Views collection. To me that is the single most important feature of all....
ca. 70% completed

DoorKnobHandle

There already are folders? Or what do you mean with "Views collection"?

cianty

ARGH! I am sorry! I meant the Rooms, of course.

That's what you get when posting with a headache...  :P

Rooms would definately need folders.
ca. 70% completed

subspark

QuoteRooms would definately need folders.
Agrees and seconds this.

Sparky.

cianty

I'd also love me some "switch", by the way.... :)
ca. 70% completed

Wyz

I'd love to see  native min, max and abs functions. I always end up with these in my code. ;D
Is it possible to include them as a macro? that way they will work for both floats and ints. Otherwise maybe minf, maxf and absf for floats?

I also like something I usually call clamp:
Code: ags

#define clamp(x,a,b) min(max(x, a), b)
Life is like an adventure without the pixel hunts.

GarageGothic

I'd love to see something like Dialog.RunOption(int option), preferably without having to call Dialog.Start() first.

Rulaman

The ability to set the loop and not only the view of animating cursors would be nice.

For example like Sierra's King's Quest 7 where the mouse-cursor changes when its over a hotspot.
If I had e.g. 20 muse cursors and it changes to the inventory item when i click in the Inventory on it. It animates/changed when i move over a hotspot.

At the moment I need 20 view for this. But an option to set the loop will decrease the needed views drastical.


Greetings
Rulaman
Zak: Komm mit mir Sushi.
Zak: Come with me Sushi.

deltamatrix

When will functions like setTransparency or TintScreen use a range of 0 - 255 rather than the far less accurate 0 - 100. For 32-bit games, this will be more necessary.
BAD WOLF - TORCHWOOD - MR SAXON - THE BEES ARE DISAPPEARING - PANDORICA - RIVER SONG

Akril15

It's a pretty tall order, but I would love it if lip-sync for LucasArts speech was implemented.

Wonkyth

Oooh, I would dearly love it if it was possible to publish custom events!
"But with a ninja on your face, you live longer!"

subspark

#413
You know, I always find it a little bit frustrating that AGS still provides 3.1 style handling for the speech audio type.
I would KILL to see full speech support become an integral part of the new 3.2 audio system. :D

EDIT:
QuoteIt's a pretty tall order, but I would love it if lip-sync for LucasArts speech was implemented.
This doesn't sound like a tall order at all. In fact, if what you say is true, I'm shocked that lip syncing for LucasArts style speech was never implemented.
No wonder I was having such a bullshit time with Pamela on my now abandoned game. ;D
Back then, I used a variety of handy Photoshop + Audio tools to make some awesome 640x400 LucasArts style character lipsync, but AGS chewed it up and spat it back out. :'(

Anyway, me hopes that the requested feature gets the attention we fellow know it deserves.

Cheers,
Sparky.

Calin Leafshade

I actually managed to do Lucas Arts lipsync... Only about 100 lines of code.

It's designed to parse pamela files. (although you have to rename the extension or AGS gets confused)

feel free to give it a try but its not the cleanest code in the world.

Code: ags

int SpeechTimer = 0;

struct SyncFrame{
  
  int time;
  bool played;
  String phoneme;
  
  
};

SyncFrame SyncFrames[50];

function ResetSyncFrames(){
  
  int i = 0;
  while (i <50){
    SyncFrames[i].played = false;
    SyncFrames[i].time = -1;
    SyncFrames[i].phoneme = "";
    i++;
  }
  
}

function TalkFrame(String Phoneme){
  
  if (Phoneme == "T") return 6;
  if (Phoneme == "L") return 13;
  if (Phoneme == "UH1") return 20;
  if (Phoneme == "IY0") return 6;
  if (Phoneme == "P") return 20;
  if (Phoneme == "R") return 21;
  if (Phoneme == "K") return 23;
  if (Phoneme == "S") return 15;
  if (Phoneme == "IY1") return 6;
  if (Phoneme == "IH1") return 6;
  if (Phoneme == "END") return 0;
  return 0;
  
  
}


function iSay(this Character*,  String what){
  ResetSyncFrames();
  if (what.StartsWith("&",false)){
    
    int firstspace = what.IndexOf(" ");
    String strnum = String.Format("%s",this.scrname);
    strnum = strnum.Substring(1, 4);
    strnum = strnum.Append(what.Substring(1, firstspace - 1));
    
    String filename = String.Format("%s.dat",strnum);
    //Display("%s",filename);
    File *PamFile = File.Open(filename, eFileRead);
    if (PamFile != null){
    bool processing;
    int index = 0;
    while(!PamFile.EOF){
    String line = PamFile.ReadRawLineBack();
      if (processing && !line.StartsWith("//")){
        int colon = line.IndexOf(":");
        if (colon > 0){
        String strtime = line.Substring(0, colon);
        SyncFrames[index].time = strtime.AsInt / 15;
        SyncFrames[index].phoneme = line.Substring(colon + 1, line.Length - colon - 1);
       // Display("%d;%s",SyncFrames[index].time, SyncFrames[index].phoneme);
        }
    
      index ++;
      }
    if (line == "[Speech]") processing = true;
    }
    PamFile.Close();
    }
    
  }
  
  this.SayAt(50, 50, 200, what);
  SpeechTimer = 0;

  
  
}

function DoSpeechChecks(){
   
   if (cLydiaTalk.Speaking){
    int i = 0;
    while (i < 50){
      if (!SyncFrames[i].played && SyncFrames[i].time == SpeechTimer){
        
        cLydiaTalk.LockViewFrame(10, cLydiaTalk.Loop, TalkFrame(SyncFrames[i].phoneme));
        SyncFrames[i].played = true;
        i = 60;
      }
      
      i++;
    }
    SpeechTimer ++;
    
  }
  
  
}

function repeatedly_execute_always()
{
DoSpeechChecks();
}

subspark

That code ain't messy either!

Calin, why is it that you have a solution to everything? Now I can work on Paracosmo again... YAY!

Sparky sends a big whiskery man-kiss your way! :-* Oh wha? You didn't want..? Too LATE!
I just planted a schloppy one right on your left cheek!! - Whichever one you think of first... :=

Sparx.

PS: You seriously kinda rock, dude.

Calin Leafshade

the code will need some heavy editing to generalise it.

Currently it only works for a single character so it needs generalising but the basic idea is there.

subspark

Quotethe code will need some heavy editing to generalise it. Currently it only works for a single character so it needs generalising but the basic idea is there.

That's cool dude. I've already begun customizing it and filling the system out with additional features. I never would have been able to begin from scratch though.

Sparky. :)

Icey

I wish easy online support,HD support,video(avi) to be pack with exe

Scavenger

Quote from: icey games on Fri 24/09/2010 00:26:53
I wish easy online support,HD support,video(avi) to be pack with exe

Online support is never that easy - it's one of the hardest things to ever to be attempted in a game. I doubt adding it to AGS's core system would even make it that much easier, beyond letting the linux and mac engines [such as they are] have the same code.

And if you're worried about people spoiling the game by watching the FMVs, I'm pretty sure you can just rename the files "videoXXX.dat" and run them. Packing them into the EXE itself would be a nightmare.

SMF spam blocked by CleanTalk