Adventure Game Studio

AGS Support => Advanced Technical Forum => Topic started by: fovmester on Sat 18/03/2006 09:08:36

Title: SetLabelText exception - Error: text too long
Post by: fovmester on Sat 18/03/2006 09:08:36
I'm using a gui to be a book in my game, where the text of the pages are a label. When turning the page I simply exchange the label text with another text from a big array. But when I run the game and turn the page I get this exception:

Error: SetLabelText: text too long

The text I tried to insert into the label was 192 characters long. It covers about half the page, which is also about half the size of the label.

I tried typing the same text into the label from the editor and it showed up fine in the editor, covering about half the page as expected.

Now, why then do I get this error when I use Label.SetText? I guess Label uses an array of characters (or maybe std::string?) to save the characters, and so it shouldn't be a limit put by storage space. I guess the limit is something that CJ has decided then, and if it's not too difficult, then please CJ, remove this limitation, because as far as I see it makes no sense and it would make my book work without having to do a lot of ugly workarounds.
Title: Re: SetLabelText exception - Error: text too long
Post by: RickJ on Sat 18/03/2006 09:21:13
Are you using the latest AGS beta?   Are you using the new method of setting the text?   

// The new way
Label.Text = ".......";

or

// The old way
SetLabelText("....");
Title: Re: SetLabelText exception - Error: text too long
Post by: monkey0506 on Sat 18/03/2006 14:40:05
Actually it goes like this:

// AGS 2.71 and later
Label.Text = "text";

// AGS 2.7
Label.SetText("text");

// AGS 2.62 and prior
SetLabelText("text");

You suggested that new-style Strings require the latest beta and forgot completely about the 2.7 method.

In any case, for AGS 2.7 and prior (which use old-style strings), there is a 200 character limit (this is because "string" is defined internally to be a char array of 200 characters).

I'm not sure why using 192 characters would crash, but perhaps you could try downloading the latest version (AGS 2.71) and using new-style Strings (note the capital 'S').  The limit for Strings is 2048 characters (I believe), so there shouldn't be any problems there.

Although...are you absolutely sure the text was 192 characters long?  It just doesn't seem like it should crash for anything less than 200 characters.  Perhaps you could post the exact line of code that is crashing the game?

[EDIT:]

Ohh...It seems that before AGS 2.72 BETA 3 Labels still had their text truncated to 200 characters (even if you use a String).  But still...200 != 192.
Title: Re: SetLabelText exception - Error: text too long
Post by: fovmester on Sun 19/03/2006 10:01:28
I use v 2.71 of AGS and first I had used Label.SetText but now I switched to Label.Text = ...

It's the same result. And I double-checked the nbr of characters and according to the word count in MS Word it's 195 character. So it is still < 200. Here's the text anyways:

Known by it's large leaves, the thief salvae is a brownish plant. The name comes from its dousing abilities commonly used by thieves. It grows in dark places, often inside caves or under bridges.

Here's the whole Book-code which handles everything concerning the books. I also added a check to see if it was really the text above and nothing else that was put in the label. And it was. I don't understand why I get an error! Shouldn't it truncate the text like you said, monkey?


// Main script for module 'Book'


#define BOOKSIZE 10
#define MAX_NBR_OF_BOOKS 10

struct BookContent {
  String title[BOOKSIZE];
String text[BOOKSIZE];
int nbrOfPages;
bool read;
};

BookContent books [MAX_NBR_OF_BOOKS];
int currentBook;
int currentPage = 0;

static function Book::addPage(int bookNbr, String title, String text) {
    int pageNbr = books[bookNbr].nbrOfPages;
    books[bookNbr].title[pageNbr] = title;
books[bookNbr].text[pageNbr] = text;
books[bookNbr].read = false; // cannot have read whole book anymore
books[bookNbr].nbrOfPages++;
}

// Shows the BOOK gui and handles reading through the book
static function Book::readBook(int bookNbr) {
  gBook.Centre();
  currentBook = bookNbr;
  books[bookNbr].read = true;
 
  gcLTitle.SetText(books[bookNbr].title[0]);
  gcRTitle.SetText(books[bookNbr].title[1]);
  gcLPage.SetText(books[bookNbr].text[0]);
  gcRPage.SetText(books[bookNbr].text[1]);
  gcLNbr.SetText("1");
gcRNbr.SetText("2");
  gBook.Visible = true;
}

static function Book::getCurrentBook() {
  return currentBook;
}

static function Book::getNbrOfPages(int bookNbr) {
return books[bookNbr].nbrOfPages;
}


// Called when clicking on the turn page buttons or the close book button.
static function Book::interface_click(int interface, int button) {
if (interface == BOOK) {
int bNbr = currentBook;
String p1;
String p2;
String t1;
String t2;

if (button == 2 && currentPage > 0) //turning to a lower page
currentPage-=2;
if (button == 3 && currentPage < Book.getNbrOfPages(bNbr)-2) //turning to a higher page
  currentPage+=2;
 
if (button == 2 || button == 3) {//turning the page

   
   t1 = books[bNbr].title[currentPage];
   p1 = books[bNbr].text[currentPage];
   t2 = books[bNbr].title[currentPage+1];
   p2 = books[bNbr].text[currentPage+1];
   
   //checking if the text in p1 really is what I think it is.
Overlay* i = Overlay.CreateTextual(0, 30, 300, 0, 65472, p1);
WaitMouseKey(4000);
i.Remove();

     gcLPage.Text = p1; //HERE COMES THE EXCEPTION
     gcRPage.Text = p2;
     gcLTitle.Text = t1;
     gcRTitle.Text = t2;
     
  } else if (button == 4) { //quit button
    currentPage = 0; //resets page
    gBook.Visible = false;
  }

gcLNbr.SetText(String.Format("%d",currentPage+1));
gcRNbr.SetText(String.Format("%d",currentPage+2));
}

}
Title: Re: SetLabelText exception - Error: text too long
Post by: Pumaman on Sun 19/03/2006 18:26:13
Labels used to have a 200 character limit, but this has been removed in the latest 2.72 beta (so long as you use the Label.Text="" approach)

Title: Re: SetLabelText exception - Error: text too long
Post by: monkey0506 on Sun 19/03/2006 22:00:17
But yet the string of text is only 195 characters.