Radiant's minor bugs thread

Started by Radiant, Fri 23/07/2004 14:45:12

Previous topic - Next topic

Radiant

More tiny bugs. But I've been working full-time with AGS last week and this is all that came up, so I must say AGS is remarkably stable.

I have a song playing repeatedly. Now I want to turn it off gently by using SetMusicRepeat (0), then PlayMusic (that song) again. I believe this should play the song once more and then stop; instead, it keeps the song playing and repeating.

If you have the dialog script editor open, if you add new topics to the dialog, the '@3' etc only appear if you close the script editor and re-open it

If you rename a view, the name is only really changed if you first select some other view, i.e. if you click on the sprite manager button the view remains unnamed

If you delete a walk-behind area, you remove its baseline. If you then press 'undo', you won't get the baseline back.

When using 'inputbox()' with a string longer than two lines or wider than 40 letters or so, the result looks weird.

If you've opened a room's script in the editor, the room is set to 'dirty' even if you don't modify the script at all. The same applies if you click on the 'animating backgrounds' button but don't change a thing.

By the way there's a button to copy the first background to the clipboard, but the only way to copy one of the animating backgrounds to the clipboard is by taking a screenshot from mid-game

If I create a game with a '+' in its name (i.e. the name of the directory the game is stored in; this name is actually legal in windows), the game crashes at startup with a fatal exception in strcopy/strcat

Gilbert

Quote from: Radiant on Fri 23/07/2004 14:45:12
I have a song playing repeatedly. Now I want to turn it off gently by using SetMusicRepeat (0), then PlayMusic (that song) again. I believe this should play the song once more and then stop; instead, it keeps the song playing and repeating.
I don't know, but it sounds that it behaves that way. You need to stop the music first, then call SetMusicRepeat (0), and then PlayMusic() again for that to take effect, as SetMusicRepeat () won't affect currently playing music. If you don't want to stop the music awkwardly, I think you may need to script so it'll wait for the current music to play to its end (via checking its position or whatever), then stop it, SetMusicRepeat (0).


Quote
If I create a game with a '+' in its name (i.e. the name of the directory the game is stored in; this name is actually legal in windows), the game crashes at startup with a fatal exception in strcopy/strcat
Don't use that character then, in my opinion game names using these characters are evil anyway.

Radiant

Quote from: Gilbot V7000a on Mon 26/07/2004 03:48:35
I don't know, but it sounds that it behaves that way. You need to stop the music first, then call SetMusicRepeat
Solved now, with a workaround.

Quote
Don't use that character then, in my opinion game names using these characters are evil anyway.
I like evil :)

a function like ObjectOn() can be used as a rvalue; it is unclear what, if anything, it returns

within the inventory GUI, would it be possible to center each item within its SetInvDimensions() allocated space?

the operators |=, &= etc don't work

If I select 'draw hotspot on inventory cursors', (e.g. click on the option) AGS gives the error 'you need to select an inventory item first' The option itself works fine, though.

If I select 'dont use inventory gfx as mouse cursors', instead the mouse cursor becomes the Blue Cup (tm) - even if none of my mouse cursors in the cursor menu have that graphic

It seems to me that if you use a sequence like this:
  while (a < b) {
    SetObjectPosition (2, 100, a);
    Wait (2);
    a++
  }
then the object will move halfway of what I specify, and then snap to its destination at once. Why?
Actually the same happens with moveobject().

Using the following code...
  PlayMusic (1);
  StartCutscene (1);
  ...
  while (IsMusicPlaying ()) Wait (1);
  EndCutscene ();
If I press ESC to terminate the cutscene, the music is still playing.

Isn't it true that if (IsGamePaused ()) is equivalent to if (IsInterfaceEnabled () == 0) ? If not, what's the difference?

Why isn't ShakeScreenBackground(0,0,0) be a valid way of turning the thing off again?

This code gives an error message (incorrectly terminated char const?)
  int i, try;
  try = 'X';
(and try = 'Z' would work!)

Gilbert

#3
Quote from: Radiant on Wed 28/07/2004 15:18:44
a function like ObjectOn() can be used as a rvalue; it is unclear what, if anything, it returns
For simplicity's sake, I think ALL functions return int values (so there're no such useless evil things as void functions and you can't return other things), if a function was not supposed to return a value, the returned value can be just something meaningless, just ignore it.

Quote
the operators |=, &= etc don't work
I think they're never supposed to, are they really that useful?

Quote
If I select 'dont use inventory gfx as mouse cursors', instead the mouse cursor becomes the Blue Cup (tm) - even if none of my mouse cursors in the cursor menu have that graphic
Did cursor #4 (Use inv) exist in the list?

Quote
It seems to me that if you use a sequence like this:
Ã,  while (a < b) {
Ã,  Ã,  SetObjectPosition (2, 100, a);
Ã,  Ã,  Wait (2);
Ã,  Ã,  a++
Ã,  }
then the object will move halfway of what I specify, and then snap to its destination at once. Why?
Actually the same happens with moveobject().
I tried similar thing and it worked for me, did it gave the same problem changing the parameters?
Edit: you missed a ; after a++ but I think it's just a typo here, as it shouldn't compile anyway.

Quote
Using the following code...
Ã,  PlayMusic (1);
Ã,  StartCutscene (1);
Ã,  ...
Ã,  while (IsMusicPlaying ()) Wait (1);
Ã,  EndCutscene ();
If I press ESC to terminate the cutscene, the music is still playing.
When you skip a cutscene, actually the engine runs it as fast as possible (and making any Wait() functions to "wait" at no time), that makes the while loop looped MANY times and yet the music wasn't stopped yet (sorta equivalent to while(IsMusicPlaying()){}), which is like an infinite loop, to avoid this (hung up and more possibly overflows) the engine will stop a while loop automatically if it's looped for some LARGE number of times (how large I had forgotten), but of course when the loop was broken out the music was not ended yet, so the result. As a workaround you may add a StopMusic(); before the EndCutscene(); . (Though it's not a really good fix though, as it's dirty to let that break out from while loop happens, I think it'll even generate a warning in the log file).

Quote
This code gives an error message (incorrectly terminated char const?)
Ã,  int i, try;
Ã,  try = 'X';
(and try = 'Z' would work!)
Strange, didn't fail for me.

Radiant

Quote from: Gilbot V7000a on Thu 29/07/2004 02:58:20
For simplicity's sake, I think ALL functions return int values (so there're no such useless evil things as void functions and you can't return other things), if a function was not supposed to return a value, the returned value can be just something meaningless, just ignore it.
Well, yes. But this may cause unseen errors in scripting; for instance if you use 'if (ObjectOn(3))' rather than 'if (IsObjectOn(3))', your code won't work, but there never appears to be an error.
The point is it should be documented at some place what exactly these functions return, even if it's always zero.

Quote
the operators |=, &= etc don't work
I think they're never supposed to, are they really that useful?
Yes, I use them all the time in C++

Quote
Quote
If I select 'dont use inventory gfx as mouse cursors', instead the mouse cursor becomes the Blue Cup (tm) - even if none of my mouse cursors in the cursor menu have that graphic
Did cursor #4 (Use inv) exist in the list?
Yes, it did.

Quote
It seems to me that if you use a sequence like this:
Ã,  while (a < b) {
Ã,  Ã,  SetObjectPosition (2, 100, a);
Ã,  Ã,  Wait (2);
Ã,  Ã,  a++
Ã,  }
then the object will move halfway of what I specify, and then snap to its destination at once. Why?
Actually the same happens with moveobject().
Yes, the ; was a typo. I'm thinking it may have something to do with my computer being only 350 MHz. I'll make a small demo to demonstrate the point, it looks kind of weird here.

Quote
When you skip a cutscene, actually the engine runs it as fast as possible (and making any Wait() functions to "wait" at no time), that makes the while loop looped MANY times and yet the music wasn't stopped yet (sorta equivalent to while(IsMusicPlaying()){}), which is like an infinite loop, to avoid this (hung up and more possibly overflows) the engine will stop a while loop automatically if it's looped for some LARGE number of times (how large I had forgotten), but of course when the loop was broken out the music was not ended yet, so the result. As a workaround you may add a StopMusic(); before the EndCutscene(); . (Though it's not a really good fix though, as it's dirty to let that break out from while loop happens, I think it'll even generate a warning in the log file).
To my knowledge, any while loop that runs more than 150000 iterations, causes AGS to abort with an error message. I believe this isn't the case here, it seems, rather, that Wait() and IfMusicPlaying() and stuff are ignored while fast-forwarding. Anyway the point is, that after a cutscene skip, the game state may actually be different than if you actually watched the cutscene, which sounds like a bug to me. If what you state is true, then any number of things that depend on timing may actually turn out different after a cutscene skip.

Quote
This code gives an error message (incorrectly terminated char const?)
Ã,  int i, try;
Ã,  try = 'X';
Hehe, I figured this one out (and I still believe it's a bug). The point is that X was the name of a view I had recently deleted all sprites from. So the parser interprets it differently.

Radiant

SetRestartPoint() doesn't do what one expects - if I put one on the introduction animation, it is actually set in the first room after that, e.g. either it only registers once control is returned to the player, or it allows for keypresses to 'fall through' causing the animation to be aborted immediately.

the ^D debug info - if there's more than six or so objects, the text window won't fit on the screen.

I have this setup in a game:
StartCutscene(1)
Disclaimer
EndCutscene()
NewRoom (1) // Title screen appears
SetRestartPoint ()
StartCutscene (1)
// Demo animation and stuff
EndCutscene ()
Display ("some text");
It is possible for a single press of the ESCAPE key, to end the two consecutive cut scenes AND remove the text box that appears after that. Also, this key state is saved by SetRestartPoint(), so it is ppossible that the player has to quit rather than restart, to actually see the demo.

StrSetCharAt() tests whether its position parameter is >= 200, as well as whether it's >= StrLen(); in either case, it crashes the game with an error message. However, supposing the string IS larger than 200 chars (possible if you use "literal" strings and pointers thereto) and I want to write past char 200, this isn't possible.

If you restore the game, music continues playing from where it left off. However it does not take into account the 'music volume adjustment' for the room you are in after restoring

If you rename the executable, saved games no longer work

Why does AGS occasionally delete the executable? It's kind of annoying if you're testing a version and keep saving, quitting, making a change and reloading the game. Because if the change is too unsubtle, the savegame no longer works.

Small feature request: GetMusicVolume to complement SetMusicVol (so I can do GetMV, Play a tune at maximum vol, then restore the previous MV)

SSH

Try putting a Wait(1) after SetRestartPoint?

AGS deletes the executable if you save a template

Loading savegames from previous versions of the game is very dangerous and can seriously screw  things up... it's usually best to add your own debuggin mechanism to set any variables, etc

12

Akumayo

Another Bug:

The arrow GUI buttons on the custom inventory GUI do not scroll down or up through the items as they are supposed to.
"Power is not a means - it is an end."

Pumaman

#8
Quote from: Radiant on Fri 23/07/2004 14:45:12
I have a song playing repeatedly. Now I want to turn it off gently by using SetMusicRepeat (0), then PlayMusic (that song) again. I believe this should play the song once more and then stop; instead, it keeps the song playing and repeating.

You'd have to use StopMusic first, before your SetMusicRepeat call will take effect. Basically, the issue is that AGS's sound system doesn't currently allow changing the Repeat flag while a sound is playing.

QuoteIf you have the dialog script editor open, if you add new topics to the dialog, the '@3' etc only appear if you close the script editor and re-open it

Good point, but I don't think this is something I'll change. AGS interfering with your script while you've got it open would be bound to lead to trouble.

Quote
If you rename a view, the name is only really changed if you first select some other view, i.e. if you click on the sprite manager button the view remains unnamed

The same sort of thing applies to GUI names too. I suppose it's a bit unfriendly, but it's not something I would consider a problem.

Quote
If you delete a walk-behind area, you remove its baseline. If you then press 'undo', you won't get the baseline back.

Fair point, I'll get it fixed.

Quote
When using 'inputbox()' with a string longer than two lines or wider than 40 letters or so, the result looks weird.

The InputBox is only designed for quick debug input boxes and so on. For use in a real game, I'd really recommend creating your own input box GUI instead.

Quote
If you've opened a room's script in the editor, the room is set to 'dirty' even if you don't modify the script at all. The same applies if you click on the 'animating backgrounds' button but don't change a thing.

Good point, I'll get it fixed.

Quote
By the way there's a button to copy the first background to the clipboard, but the only way to copy one of the animating backgrounds to the clipboard is by taking a screenshot from mid-game

Yeah, the whole clipboard copying thing is a bit inconsistent -- eg. you can copy the background to the clipboard but not paste it back, and so on. It needs a rethink at some point.

Quote
If I create a game with a '+' in its name (i.e. the name of the directory the game is stored in; this name is actually legal in windows), the game crashes at startup with a fatal exception in strcopy/strcat

I just tried this but it worked fine. What was the full path name you used?

Quotea function like ObjectOn() can be used as a rvalue; it is unclear what, if anything, it returns

Originally I wanted the script compiler to be very simple, and as such all functions always returned an int. I wish I hadn't done it that way now, because it can lead to problems if you try and use the return value by accident.
The return value is indeed undefined in these cases, so I really wouldn't recommend trying to do anything with it.

Quotewithin the inventory GUI, would it be possible to center each item within its SetInvDimensions() allocated space?

sounds reasonable enough to me.

Quotethe operators |=, &= etc don't work

I didn't add these for the bitwise operators -- remember this is just a scripting language and using the bitwise operators at all is quite a rare thing.

QuoteIf I select 'draw hotspot on inventory cursors', (e.g. click on the option) AGS gives the error 'you need to select an inventory item first' The option itself works fine, though.

Hehe tha'ts silly, I'll get it fixed.

QuoteIf I select 'dont use inventory gfx as mouse cursors', instead the mouse cursor becomes the Blue Cup (tm) - even if none of my mouse cursors in the cursor menu have that graphic

I just tried that but it correctly used the Cursor Mode 4 cursor image.

QuoteUsing the following code...
Ã,  PlayMusic (1);
Ã,  StartCutscene (1);
Ã,  ...
Ã,  while (IsMusicPlaying ()) Wait (1);
Ã,  EndCutscene ();
If I press ESC to terminate the cutscene, the music is still playing.

It works this way because lots of people were having precisely the opposite problem -- ie. skipping the cutscene would just blank out the screen, then wait for 2 minutes for the music to finish, rendering the Skip feature pretty useless.
Therefore, IsMusicPlaying always returns 0 if a cutscene is being skipped.

QuoteIsn't it true that if (IsGamePaused ()) is equivalent to if (IsInterfaceEnabled () == 0) ? If not, what's the difference?

The Game Paused state is a very specific thing. When paused, all it means is that no animations or movement will get run.
The Game Paused state can only be changed in two ways:
* calling PauseGame/UnpauseGame
* turning on/off a Popup Modal or Mouse Ypos GUI
Other than that, it is never changed by AGS

The InterfaceEnabled state, on the other hand, is the state of the user interface, ie. whether the user can do anything. When the interface is disabled, GUI button clicks will not do anything, and mouse clicks won't trigger on_mouse_click.
The InterfaceEnabled state is automatically set by AGS when any blocking cutscene runs (eg. Wait, MoveCharacterBlocking, etc) or when you manually call Enable/DisableInterface.

QuoteHehe, I figured this one out (and I still believe it's a bug). The point is that X was the name of a view I had recently deleted all sprites from. So the parser interprets it differently.

Well spotted -- yes, #defines incorrectly work on 'single quoted' words. I'll fix it.

Pumaman

Quote from: Akumayo on Sun 01/08/2004 04:52:19
Another Bug:

The arrow GUI buttons on the custom inventory GUI do not scroll down or up through the items as they are supposed to.

On whose custom inventory GUI? It's up to you to code the up/down buttons.

Akumayo

Right when you start the editor in a new game.  There is a GUI called INVENTORY, the up/down buttons have script written in their GUI script, but it doesn't work.
"Power is not a means - it is an end."

Pumaman

Works fine for me. Are you sure you have enough inventory items that scrolling is necessary?

Radiant

One small feature request... an option to 'treat warnings as errors'. Some of the warnings AGS gives after the game closes down are kind of hard to track down (also because not all of them provide line numbers) so if the game were to abort on any warning, it would make fixing them easier.

This is a weird one... SetStrCharAt() apparently checks if its 'pos' parameter is >= 200, in addition to checking if it's >= StrLen(). So if you have a string with length >= 200 (which is possible if you do something like MyFunc("This is a very long string") ), you can't change all of it.
Why am I using this? Well, since currently AGS doesn't encrypt strings that are part of a global or room script, I figured I'd write my own encryption module. I've got this program that reads an AGS adventure executable and changes all the strings, and then I have to change them back in AGS. It mostly works, too, but crashes infrequently :/

Quote from: Pumaman on Sun 01/08/2004 05:18:21
You'd have to use StopMusic first, before your SetMusicRepeat call will take effect. Basically, the issue is that AGS's sound system doesn't currently allow changing the Repeat flag while a sound is playing.
Is it the case that PlayMusic checks if newmusic == currentmusic, and if so it does nothing? Because you could set it that if newmusic == currentmusic, to set currentrepeat = newrepeat.

Quote
If I create a game with a '+' in its name (i.e. the name of the directory the game is stored in; this name is actually legal in windows), the game crashes at startup with a fatal exception in strcopy/strcat
I just tried this but it worked fine. What was the full path name you used?
c:\prog\kq III+\compiled\kq III+.exe

Quote
Therefore, IsMusicPlaying always returns 0 if a cutscene is being skipped.
How about it instead stopping the music? No wait, that would only work with an IfMusicPlaying/Wait(1) combo. Hm. Okay I get your point, never mind.

Pumaman

Quote from: Radiant on Mon 02/08/2004 12:21:16
One small feature request... an option to 'treat warnings as errors'. Some of the warnings AGS gives after the game closes down are kind of hard to track down (also because not all of them provide line numbers) so if the game were to abort on any warning, it would make fixing them easier.

Yep, this one's already on my to-do list, it must've been suggested before.

Quote
This is a weird one... SetStrCharAt() apparently checks if its 'pos' parameter is >= 200, in addition to checking if it's >= StrLen(). So if you have a string with length >= 200 (which is possible if you do something like MyFunc("This is a very long string") ), you can't change all of it.

Yes, this is to stop people corrupting memory by writing to somewhere past the end of the buffer size for normal strings. I see how it's a problem in your situation, but I'm not sure of the best solution.

In terms of encrpytion, AGS does encrypt global messages and room messages, so if you have anything sensitive, put it in one of those.

QuoteIs it the case that PlayMusic checks if newmusic == currentmusic, and if so it does nothing? Because you could set it that if newmusic == currentmusic, to set currentrepeat = newrepeat.

If does indeed, at current. Are you saying that you wouldn't mind if PlayMusic restarted the music, with the repeat flag off, or wouldn't that break the smooth end you're looking for.

Quote
c:\prog\kq III+\compiled\kq III+.exe

Hmm, that worked fine for me. Very odd - what version of Windows are you using?

QuoteHow about it instead stopping the music? No wait, that would only work with an IfMusicPlaying/Wait(1) combo. Hm. Okay I get your point, never mind.

The easiest workaround here is just to add a StopMusic() call after your while loop - that way, the music is guaranteed to be stopped either way.

Radiant

Quote from: Pumaman on Mon 02/08/2004 20:52:15
Quote
This is a weird one... SetStrCharAt() apparently checks if its 'pos' parameter is >= 200, in addition to checking if it's >= StrLen(). So if you have a string with length >= 200 (which is possible if you do something like MyFunc("This is a very long string") ), you can't change all of it.
Yes, this is to stop people corrupting memory by writing to somewhere past the end of the buffer size for normal strings. I see how it's a problem in your situation, but I'm not sure of the best solution.
Would it be a lot of work for you to also have the strings in scripts encrypted?

Quote
QuoteIs it the case that PlayMusic checks if newmusic == currentmusic, and if so it does nothing? Because you could set it that if newmusic == currentmusic, to set currentrepeat = newrepeat.
If does indeed, at current. Are you saying that you wouldn't mind if PlayMusic restarted the music, with the repeat flag off, or wouldn't that break the smooth end you're looking for.
I've made a workaround using rep_ex_al (love that function!)
My suggestion was that PlayMusic wouldn't restart the music if newmusic == currentmusic, but simply sets the repeat flag again if you do PlayMusic again. It seems to me that would be what people expect. But it's no big problem.

Quote
c:\prog\kq III+\compiled\kq III+.exe
Hmm, that worked fine for me. Very odd - what version of Windows are you using?
ME.
Again, no big issue. I did notice by the way that if I manually rename the executable, saved games stop working :)

Small feature request: ResetMusicVolumeToTheValueInitiallySpecifiedInTheEditor().

I would appreciate it if, after RestartGame(), the keyboard buffers are automatically cleared. It is possible if the RestartPoint() is at some menu, that a key that was apparently pressed earlier immediately removes the menu when yuo Restart.

Pumaman

Quote from: Radiant on Tue 03/08/2004 17:46:02
Would it be a lot of work for you to also have the strings in scripts encrypted?

We've covered this before ... basically, I could, but I don't really want to start messing with the scripting system like that. I may do it at some point though.

Quote
Again, no big issue. I did notice by the way that if I manually rename the executable, saved games stop working :)

This is due to the support for LoadAGSGame, so the savegame contains the filename of the game that was being played at the time so that it can be restored from the right one.

QuoteSmall feature request: ResetMusicVolumeToTheValueInitiallySpecifiedInTheEditor().

Do you mean the Room Music Volume option? In this case, would a better solution be a GetMusicVolume to complement SetMusicVolume?

Quote
I would appreciate it if, after RestartGame(), the keyboard buffers are automatically cleared. It is possible if the RestartPoint() is at some menu, that a key that was apparently pressed earlier immediately removes the menu when yuo Restart.

I can certainly do that. I'm surprised it's a problem though, the keyboard buffer should never normally get the opportunity to fill up.

Hollister Man

That LoadAGSGame thing, did it do that in earlier versions?  I once saw my 5 DaS save files in Pirate Fry 1, lol.
That's like looking through a microscope at a bacterial culture and seeing a THOUSAND DANCING HAMSTERS!

Your whole planet is gonna blow up!  Your whole DAMN planet...

Radiant

Quote from: Pumaman on Wed 04/08/2004 20:55:09
Quote from: Radiant on Tue 03/08/2004 17:46:02
Would it be a lot of work for you to also have the strings in scripts encrypted?
We've covered this before ... basically, I could, but I don't really want to start messing with the scripting system like that. I may do it at some point though.
Oh yes, we did. Sorry to bother you. I'll code something that works some other way.

Quote
QuoteSmall feature request: ResetMusicVolumeToTheValueInitiallySpecifiedInTheEditor().
Do you mean the Room Music Volume option? In this case, would a better solution be a GetMusicVolume to complement SetMusicVolume?
Yes, that would also work. Or maybe SetMusicVolume (BASE_VOL) as a special parameter. Or whatever. I'm currently hard-coding it in the rooms (i.e. in enter_room, simply set a variable).

Quote
Quote
I would appreciate it if, after RestartGame(), the keyboard buffers are automatically cleared. It is possible if the RestartPoint() is at some menu, that a key that was apparently pressed earlier immediately removes the menu when yuo Restart.
I can certainly do that. I'm surprised it's a problem though, the keyboard buffer should never normally get the opportunity to fill up.
It's kind of weird. I'm not sure that is actually what is happening, but in most cases RestartGame doesn't do what I would assume it does (even if I don't put in a SetRestartPoint() ) anywhere. Specifically, my game starts with three cutscenes followed by the first room. If I hit restart, the game may end up anywhere within those cutscenes, or in the first room, or in the first room after the initial Display ("You are here"). I figured it was a keyboard problem but I may be wrong.




If you do this:
Code: ags

ChangeCharView (EGO, 3)
SetCharIdle    (EGO, 4, 0)
ChangeCharView (EGO, 5)

you get a warning that you shouldn't use ChangeCharView after SetCharView (that it requires ReleaseCV first).

This is a weird thing with string length... the second string gets split in two, and put in two textboxes. Maybe a compiler warning would be in order.
Code: ags

    string buf;
    Display            ("This is a rather long string that can be displayed in a variety of ways, some of which will cause it to be broken off right in the middle, as is about to be demonstrated in the following word: intersection. Strange, isn't it?");
    SetGlobalString (0, "This is a rather long string that can be displayed in a variety of ways, some of which will cause it to be broken off right in the middle, as is about to be demonstrated in the following word: intersection. Strange, isn't it?");
    GetGlobalString (0, buf);
    Display         (buf);


FollowCharacter() doesn't seem to work if the sheep character is in an animation loop (you'd have to do a MoveChar first)
e.g. AnimateCharacter (GUY, 4, 5, 1);
and some time later FollowChar (GUY, EGO)

the ^D debug info - if there's more than six or so objects, the text window won't fit on the screen. Maybe it should give one pop-up box per five objects or so?

If you restore the game, music continues playing from where it left off. Which is good. However it does not take into account the 'music volume adjustment' for the room you are in after restoring.

One of my beta-testers (for KQ3+) suggested this:
I notice that scrolling arows have been added to the save/load dialogs (regular list box, by the way). Could  you add a repetitive scrolling if the user holds the mouse down on one of them?

Thanks for the feedback!

Pumaman

QuoteIt's kind of weird. I'm not sure that is actually what is happening, but in most cases RestartGame doesn't do what I would assume it does (even if I don't put in a SetRestartPoint() ) anywhere. Specifically, my game starts with three cutscenes followed by the first room. If I hit restart, the game may end up anywhere within those cutscenes, or in the first room, or in the first room after the initial Display ("You are here"). I figured it was a keyboard problem but I may be wrong.

What if you restart the game by clicking on a button (so that no keypresses are involved)? Does the same problem happen?

QuoteIf you do this:
ChangeCharView (EGO, 3)
SetCharIdle    (EGO, 4, 0)
ChangeCharView (EGO, 5)
you get a warning that you shouldn't use ChangeCharView after SetCharView (that it requires ReleaseCV first).

Good point, that's not really an error so it probably shouldn't appear.

QuoteThis is a weird thing with string length... the second string gets split in two, and put in two textboxes. Maybe a compiler warning would be in order.

Hmm well spotted, SetGlobalString isn't completely safe with strings > 200 characters. It's supposed to truncate them to 200 but doesn't quite work properly -- I'll get it fixed.

QuoteFollowCharacter() doesn't seem to work if the sheep character is in an animation loop (you'd have to do a MoveChar first)
e.g. AnimateCharacter (GUY, 4, 5, 1);
and some time later FollowChar (GUY, EGO)

Characters will only follow when they're idle - this is by design so that you don't have to turn off follow whenever you want to move or animate the character.

Quotethe ^D debug info - if there's more than six or so objects, the text window won't fit on the screen. Maybe it should give one pop-up box per five objects or so?

Fair point, I'll look into it.

QuoteIf you restore the game, music continues playing from where it left off. Which is good. However it does not take into account the 'music volume adjustment' for the room you are in after restoring.

Strange, I'll look into it.

QuoteI notice that scrolling arows have been added to the save/load dialogs (regular list box, by the way). Could  you add a repetitive scrolling if the user holds the mouse down on one of them?

Yeah, I'm not entirely sure what do with the list box scrolling - the current arrows look a bit ugly and it would be nice to provide customizability. I'll have a think about it.

SSH

Quote from: Radiant on Thu 05/08/2004 14:26:08
Quote from: Pumaman on Wed 04/08/2004 20:55:09
Quote from: Radiant on Tue 03/08/2004 17:46:02
Would it be a lot of work for you to also have the strings in scripts encrypted?
We've covered this before ... basically, I could, but I don't really want to start messing with the scripting system like that. I may do it at some point though.
Oh yes, we did. Sorry to bother you. I'll code something that works some other way.

How about a workaround to make it easier for people:

1. Add an "encrypt string" function to the script editor to encrypt anything between quotes on the current line
2. Add a decrypt function to AGS

This way people could write

Display(Decrypt("Press the RED button to win"));
then use the editor function to get
Display(Decrypt("Bloogyblarghlyfubarwigglewoggle"));

which then displays correctly
12

SMF spam blocked by CleanTalk