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 - Secret Fawful

#121
Yeah, I read what he said.

QuoteI never saw Gilbert provide anything other than his say so about this.

And so I asked "Did you ask him?"

He also said
QuoteThe fact that LucasArts moved from his beloved scumm onto lua based code for grime
When GrimE never produced a game that played functionally well. Grim was a masterpiece in everything BUT engine, because the engine was terrible. Everything I have seen from games like Fate of Atlantis and Full Throttle show a hell of a lot of customizability, power, and functionality. I couldn't finish Escape From Monkey Island because I couldn't get the game to select a fucking item so I could pick it up. But yes, great games have been made in Lua. Great games have been made in SCUMM, too, and the dismissal toward SCUMM pisses me off. So yes, it makes me ANGRY. If I dismiss GrimE I guess it's just because IT'S A PIECE OF SHIT.

QuoteBottom line: You are crazy.

Bottom line, the fact you have to paint me in a negative light, and anyone else, to avoid any possible questioning of your precious Lua is not only petty and dismissive, but means you're defensive and therefore consider my points valid.

It doesn't matter if I consider Lua valid, the fact that I want to consider any other option makes me crazy. You're a fucking dick. Experience is valuable.
#122
I just want to say thank you very much for this module. It presents a lot of neat gameplay possibilities, and I'm glad people are making things like this possible with the engine. Keep up the great work.
#123
No, what I said is completely valid. I want to know why Gilbert hates Lua. His word may not be gospel, but I still want to KNOW. Maybe you should consider listening to another opinion without being a dismissive tit. Example: "Oh, he may have said that, but he's a stupid OLD MAN. Who cares what he thinks. I'll never ask him. Because he's a shitstain who should go KILL HIMSELF NOW."

Lua, at most, shouldn't be a replacement anyway, but an alternative.
#124
Quote from: Monsieur OUXX on Mon 10/06/2013 17:27:43
Quote from: monkey_05_06 on Mon 10/06/2013 16:44:31
I've been maintaining for years that AGS is capable of anything, but no one wants to listen to a monkey.

That's because there's a hidden, implicit part in the sentence: "capable of anything without having to permanently re-invent the wheel and requiring insane workarounds". I guess we forgot to remove the [hidden ] tags around that bit. ;)



Every time I argue with him that he's wrong about AGS being able to do something, he proves to me that he's right.
#125
Quote from: ThreeOhFour on Fri 07/06/2013 15:13:52
Quote from: Secret Fawful on Thu 06/06/2013 23:47:32
I remember when Ron Gilbert shat all over Lua on his Twitter as a useful language. Made me seriously question its merits.

I never saw Gilbert provide anything other than his say so about this. The fact that LucasArts moved from his beloved scumm onto lua based code for grime - and that Schafer continued to use lua on projects like Brutal Legend makes his claims that scumm was far more amazing than lua seem quite petty. In addition, look at all the games made using lua - big, great, complex games. Allow these to speak for lua's usefulness rather than the words of a single person, I would say.

Did you ask him? No? Oh. Didn't care about the expertise about someone who has been programming for decades? Okay.
#126
I remember when Ron Gilbert shat all over Lua on his Twitter as a useful language. Made me seriously question its merits.
#127
But Siren: Blood Curse is the best horror game this gen.

#128
I'm not sure you're aware, but in AGS 3.2, instead of printing null in place of %s, it displays an error instead, stating "One of the string arguments supplied was not a string".

Apparently, earlier versions of AGS do not do this.
#129
Khris, you make a really really good point. I don't think the marquee would bother me a lot, but after a while that could get tedious. Your method sounds far better. I think part of wanting to implement this was a stubbornness to prove that I could learn to code a marquee in AGS, plus a stubbornness to prove a marquee can be done in AGS (I've seen it done in AGS before).

And that desire to push AGS's limits overrides the practicality of some ideas.

Also, I implemented it like this- but the text won't change when the inventory graphic (30 x 30 res) is over a hotspot.

Code: AGS

//rep_exec
LocationType loc_type = GetLocationType(mouse.x, mouse.y);
//mouse mode
if ((mouse.Mode == 4) && (loc_type != eLocationNothing)){
     Mouse.SaveCursorUntilItLeaves();
  }
  if ((mouse.Mode == 4) && (loc_type==eLocationHotspot)){
      LabelMotherHot.Text = "@OVERHOTSPOT@";
    }
  else if ((mouse.Mode == 4) && (loc_type==eLocationNothing)){
    //LabelOverHotspot.Text = String.Format("Use %s with @OVERHOTSPOT@", player.ActiveInventory.Name);
    LabelMotherHot.Text = String.Format("Use %s with", player.ActiveInventory.Name, 147, 178, 150, 16384);//here you must access the label through its name property, set in the gui editor.
    }


I also tried just using GetLocationType without going through all of this, but it still didn't work, so that's why I did it this way.
#130
I've been working on a GUI that has a Statusline on it. The problem is when I get into longer strings, such as using inventory items on hotspots, the text gets cut off. So I was working on implementing a marquee. I found code to help me get started...but I can't seem to get this to work at all.

Code: AGS

//top of Global Script  
int index;
String labeltext;
  String scroll_text(int i, int width, bool left){
  if (left && index>0)index--;
  else if (!left && index<labeltext.Length-width) 
  index++;
  return labeltext.Substring(index, width);
}


Code: AGS

function repeatedly_execute(){
  GUIControl*gc = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
  index=5;
  // put anything you want to happen every game 
  if (scrollDelay>0)scrollDelay--;
  if(!scrollDelay>0){
    scrollDelay++;
   if(labeltext.Substring(scrollIndex, 150))
     scroll_text(scrollIndex, 150, true);
   else scrollIndex = 0;
  }
  
  if (mouse.Mode == 0){
  //LabelOverHotspot.Text = "Go to @OVERHOTSPOT@";
  labeltext="Go to";
  labeltext.Append(Game.GetLocationName(mouse.x, mouse.y));
  LabelMotherHot.Text=labeltext;}

//etc.
}


Unfortunately, scrolling will not occur. I thought this way I could keep from returning the same substring in rep_ex every time, and now return a different substring so it would scroll....but I figure I'm doing something majorly wrong.
#131
Adventure Related Talk & Chat / Re: Gold Rush!
Tue 05/03/2013 13:29:58
I think it's the best game Sierra ever made. It's just so detailed and branching. And I love the setting and premise.
#132
AGS Games in Production / Re: A Golden Wake
Sat 02/03/2013 16:52:06
FINALLY, an original adventure game setting for once.
#133
Quote from: Khris on Fri 15/02/2013 11:23:59

I don't know about the music issue, have you confirmed that the music is stopped by AGS, as opposed to the Volume dropping, or the music file being broken?
The music will play in AGS' audio editor. It literally plays one-two seconds then just stops. I'm not sure if it's AGS or the volume dropping, but if so, then I don't get why music is working in other rooms.
#134
Actually, I only have a few. I've basically had to just swallow my pride and come ask, because I can't seem to fix anything, and these issues have been plaguing me for a month or two now.

For starters, a music issue. Whenever I enter my eighth room, the music that is set to play in that room starts for a few seconds then stops. No other music will play in this room, and no music will play for subsequent rooms, until I get to the world map, which is several rooms later. I can't not find any code that is shutting the music off or interfering, and I have no clue what is going on.

Then there is the problem of the world map. I wanted to set it to where any click on the hotspots will make your character walk there and then change to that new room. However, all he will do is walk there, and any click does not actually do what I want it to do.

Third, I'm trying to get a character to try to punch another character, and then have that character dodge immediately. I have both animations, but I'm playing them separately. Unfortunately, this is not working out how I wanted it to. Should I make it one big animation instead of two separate ones, or can two separate ones work this way?
#135
Hey, I am still alive. I haven't been murdered by maniacs yet.

I haven't been updating the thread or the website because I have been working non-stop on the game, and I just don't take the time to do that. I literally work every day on it, so do know it's going to be finished. The game is under Screen 7 for the forseeable future, so Mark has my permission to post anything for it. I have a specific post in mind when the time comes to talk about the mechanics of the game, because I've been extremely silent about what the game really is. You guys haven't even begun to see what the game is to offer, but I'm not ready to talk about that yet.

Hopefully I'll have more information for you guys soon.
#136
General Discussion / Re: My Christmas Gift
Tue 25/12/2012 22:39:02
Monkey leaving is just another reason to hate Christmas this year.
#137
It works now. I had a couple other errors, but I managed to fix them. I should have asked SSH directly about these, but I'm tired and impatient. Anyway, thanks for the help. I'm doing things that I'm out of my league on here, but I don't know any other way to learn.
#138
Damn it, I can't believe I made that mistake on the inventory code.

As far as SSH's module, I've spent an hour trying to update the code on it, because it gives all sorts of errors now, and I'm still getting errors on it.

Code: AGS
 // Main script for module 'QueueSpeech'
queuespeech_t squeue;

function game_start () {
  squeue.insert=0;
  squeue.say=0;
  squeue.ol=null;
  squeue.stop_talk=0;
  squeue.prev_char=null;
  squeue.channel=-1;
}

function qDisplaySpeechSubtitled(Character *CharID, const string message, const string subtitle) {
   int i = squeue.insert % SPEECH_QUEUE_SIZE;

   squeue.s[i]=message;
   squeue.st[i]=subtitle;
   squeue.c[i]=CharID;
   squeue.insert++;
}

function qDisplaySpeech(Character *CharID, const string message) {
   qDisplaySpeechSubtitled(CharID, message, "");
}

function qSubtitleSetup(int y, int font, int colour) {
  squeue.subtitle_col=colour;
  squeue.subtitle_font=font;
  squeue.subtitle_y=y;
}

function qIsTalking() {
  if (squeue.ol!=null) return squeue.ol.Valid;
  else return 0;
}

function GetSoundNumber(String text) { //return 0 if unsuccessful
   String txt=text;

   int pos = txt.Contains("@");
   if (pos<0) return 0;
   int i = pos + 1;
   String str_rez="";
   while (i<txt.Length && txt.Chars[i]>='0' && txt.Chars[i]<='9') {
			str_rez=str_rez.AppendChar(txt.Chars[i]);
      i++;
   }

   while (i<=txt.Length) {
     String new_Str = "@";
      new_Str = new_Str.ReplaceCharAt(pos, i);
      i++;
      pos++;
   }

   return str_rez.AsInt;
}

function GetFreeChannel() { // returns a channel number
   if      (IsChannelPlaying(5)==0) return 5;
   else if (IsChannelPlaying(4)==0) return 4;
   else return 3;
}

function qStopSpeechChannel() {
   if (squeue.channel>2)
      if (IsChannelPlaying(squeue.channel)) {
         StopChannel(squeue.channel);
         squeue.channel = -1;
      }
}

function qStopSpeech() {
   if (qIsTalking()) {
      qStopSpeechChannel();
			if ((squeue.ol!=null) && squeue.ol.Valid) squeue.ol.Remove();
			if ((squeue.stol!=null) && squeue.stol.Valid) squeue.stol.Remove();
      int i = squeue.say % SPEECH_QUEUE_SIZE;
      if (squeue.c[i]!=null) squeue.c[i].UnlockView();
      if (squeue.prev_char != null) { squeue.prev_char.UnlockView(); squeue.prev_char = null; }
      squeue.stop_talk = 0;
      squeue.say = squeue.insert;
   }
}

function isnumchar (char c) {
  if (c=='-') return 1;
  else return (c>='0' && c<='9');
}

function SpecialHandler(String s) {
  int i=s.Contains("set-globalint ");
	if (i>=0) {
		i+=14;
    String str_rez="";
    while (i<s.Length && isnumchar(s.Chars[i])) {
			str_rez=str_rez.AppendChar(s.Chars[i]);
      i++;
    }
		int gi=str_rez.AsInt;
		i++;
		str_rez="";
    while (i<s.Length && isnumchar(s.Chars[i])) {
			str_rez=str_rez.AppendChar(s.Chars[i]);
      i++;
    }
		SetGlobalInt(gi, str_rez.AsInt);
		return 1;
	} else {
		i=s.Contains("add-score ");
		if (i>=0) {
			i+=10;	
			String str_rez="";
			while (i<s.Length && isnumchar(s.Chars[i])) {
				str_rez=str_rez.AppendChar(s.Chars[i]);
				i++;
			}
	    GiveScore(str_rez.AsInt);
	    return 1;
	  } else return 0;
	}
}	
 
function DisplaySpeechQ_RE() {

   if (qIsTalking()==0) { // wait for character to finish talking
      if (squeue.say < squeue.insert) { // if something left to be said

        int i = squeue.say % SPEECH_QUEUE_SIZE;

				if (!SpecialHandler(squeue.s[i])) {
					String buf;
					String new_Copy = buf;

					qStopSpeechChannel();
					int cur_sound = GetSoundNumber(buf);
					squeue.channel   = GetFreeChannel();
					if (cur_sound>0) PlaySoundEx(cur_sound, squeue.channel);

					squeue.ol = squeue.c[i].SayBackground(buf);
					if ((squeue.stol!=null) && squeue.stol.Valid) squeue.stol.Remove();
					if (squeue.st[i]!=null && squeue.st[i]!="") {
							squeue.stol = Overlay.CreateTextual((system.viewport_width-GetTextWidth(squeue.st[i], squeue.subtitle_font))/2, squeue.subtitle_y, 320, squeue.subtitle_font, squeue.subtitle_col, squeue.st[i]);
					}
				
					squeue.stop_talk = 1;

					if (squeue.prev_char != null) squeue.prev_char.UnlockView();
					squeue.prev_char = squeue.c[i];

					if (squeue.c[i].Animating==0 && squeue.noanim[i]==0) {
            int view = squeue.c[i].SpeechView;
            if (view < 1) { Display("error: Talk view isn't assigned!"); QuitGame(0); }
            int loop =squeue.c[i].Loop;
            int delay=squeue.c[i].AnimationSpeed;
            squeue.c[i].LockView(view);
            squeue.c[i].Animate(loop, delay, eRepeat, eNoBlock, eForwards);
					}

				}
        squeue.noanim[i] = 0;
        squeue.say++;
      } else if (squeue.stop_talk) { //finish talk animation
				 if ((squeue.stol!=null) && squeue.stol.Valid) squeue.stol.Remove();
         if (squeue.prev_char != null) { squeue.prev_char.UnlockView(); squeue.prev_char = null; }
         qStopSpeechChannel();
         squeue.stop_talk = 0;
      }
   } // end of if (qIsTalking()==0)
}

String str_delay;
String qDelay(int time){

   int n=time;
   if (n<1) n=1; else if (n>=AGS_STRING_LENGTH) n=AGS_STRING_LENGTH-1;

   String format;
   String.Format(format, "%%%dc", n);
   String.Format(str_delay, format, ' ');
   squeue.noanim[squeue.insert % SPEECH_QUEUE_SIZE] = 1;
   return str_delay;
}

String   qSetGlobalInt(int globalint, int value) {
  String.Format(str_delay, "set-globalint %d %d", globalint, value);
  squeue.noanim[squeue.insert % SPEECH_QUEUE_SIZE] = 1;
  return str_delay;
}
  
String   qAddScore(int points) {
  String.Format(str_delay, "add-score %d", points);
  squeue.noanim[squeue.insert % SPEECH_QUEUE_SIZE] = 1;
  return str_delay;
}

function qSkipCurrentMessage() {
   if (qIsTalking()) {
			squeue.ol.Remove(); // IsTalking already checks if null/valid
			if ((squeue.stol!=null) && squeue.stol.Valid) squeue.stol.Remove();
	 }
}



//Main global script file (Repeatedly execute):

function repeatedly_execute() {
  // put anything you want to happen every game cycle here
  
   DisplaySpeechQ_RE(); // place it before any other script code in rep. exec.
  
}



//Main global script file (on_event function):
function on_event(int event, int data) {

   if (event==eEventLeaveRoom) qStopSpeech();

}


function qSetSkippable(int skippable) {
  squeue.skippable=skippable;
}

// optional
// on_key_press:
function on_key_press (int keycode) {
  if (squeue.skippable && (game.skip_speech_specific_key>0) && (keycode==game.skip_speech_specific_key)) qSkipCurrentMessage();
}


I had to update all the String code, but it crashes on a RepExec function error on line 40 under the GetSoundNumber function on SSH's code. The problem is due to a null pointer referenced.

EDIT: I fixed the null errors by changing repeatedly_execute to RepExec but now background dialog never happens.
#139
All right, so I followed a similar topic from November on this subject, but that led me nowhere. I came to the conclusion I'm using this code all wrong, but I've used it the only two ways I can think of and it's still not working correctly. I'm wanting two characters or more to hold a continuous, non-blocking conversation in the background that starts once a dialog ends. Basically, I want to be able to start up such a dialogue from any point. Then if I leave and come back to the room, I want the dialogue to be running again. To accomplish this, I, of course, put the dialogue under repeatedly execute. Currently I was giving one of the characters a dummy inventory item, and then later I would take it away when I no longer wanted this conversation to happen in that room anymore.

Here is my code in the end of the dialog:

Code: AGS
cCharJack.Walk(83, 125, eBlock, eWalkableAreas);
 SetTimer(1,0);
 cCharJack.HasInventory(iInvDummy);


And then under Rep_Exec in the room itself-

Code: AGS
function room_RepExec()
{
  if (cCharJack.HasInventory(iInvDummy)){
  if(IsTimerExpired(1))
  {
    if(turn == 0)
    {
      cCharJack.SayBackground("You pompous @#%$!, just who do you think you are?");
      cRangSlim.SayBackground("I'm not going to sit here and watch you abuse your power.");
      cCharJack.SayBackground("Abuse my POWER! Huff! Huff!");
      cCharJack.SayBackground("You're lucky I don't split your skull!");
      cRangSlim.SayBackground("I've fought better men than you!");
      cCharJack.SayBackground("Who? The elderly?");
      cRangSlim.SayBackground("You are elderly! I can hear your dentures clattering!");
      cCharJack.SayBackground("Just who do you think you are, you %$@!?");
      cRangSlim.SayBackground("Don't you know who I am? I'm Steve Dedman!");
      cCharJack.SayBackground("Oh! Some puffed-up TV stooge, eh!?");
      cRangSlim.SayBackground("What did you call me, you big windbag!?");
      cCharJack.SayBackground("Windbag!?");
      SetTimer(1, 280);
    }
    else if(turn == 1)
    {    //etc etc.
      SetTimer(1, 150);
    }
    turn ++; //this is universal to all instances of dialog, so put here
  }
}
}


However, currently, the background dialogue will not play at all unless I remove the Inventory requirements, and then it will only play the final two pieces of dialogue, and at the same time. I want each piece of dialogue to play one after the other, and I want the characters to say them while animating. They do none of this. I know I'm horribly screwing this code up, so....what do I need to do to make this work? Because I can't find anything else on this. I'm honestly embarrassed to even ask because I know I'm doing this very, very wrong.
#140
Is Crime and Punishment too old-fashioned? Is The Art of War not relevant still? What about 20,000 Leagues Under the Sea, The Hitchhiker's Guide to the Galaxy, or Dracula? Are they so boring they should be replaced by movies? Not for me.

The adventure game started as a means to interact in a literary world, and the advent of graphics came about because people could and wanted to innovate. They wanted to walk around in a world and interact with it so that they could see it, but the more that advanced, the dumber the games got. The closest games ever got to being able to achieve literary significance was with text adventures, which is what most people consider the 'archaic' and non-innovative time in adventure games. In reality, more innovation came about in terms of new ways to play games in that time than any other in the history of adventure games, and now the biggest leap we get to see is a minor change in someone's engine. Give me a bloody break. First people want to take puzzles out of adventure games, now you want to take the characters out too? What the HELL is wrong with this generation of gamers and designers!? This generation is the reason truly innovative games like The Last Express tanked and shitty games playing on established brands like Back to the Future get a fanbase.

And Heavy Rain was a broken, glorified arcade game with a broken plot. If that's where the adventure game is meant to go, then I don't want anything to do with the genre anymore. I'll stick to the old style of design.
SMF spam blocked by CleanTalk