AGS 3.5.0 - RC 5 (new upcoming version)

Started by Crimson Wizard, Tue 30/04/2019 20:38:49

Previous topic - Next topic

Crimson Wizard

AGS 3.5.0 - RC 5
Current release number: 3.5.0.21


For Editor
Spoiler

For Android
Spoiler

For AGS developers
Spoiler

Released: 28th November 2019

Previous stable version: AGS 3.4.3 P1 forum thread


This release is brought to you by:

- Alan v. Drake
- BigMC (fixes to building on some Linux systems)
- ChamberOfFear (Editor's Color Themes)
- Crimson Wizard
- John Steele Scott (OpenGL support on Linux)
- Martin Sedlak (new pathfinding)
- Matthew Gambrell (better threaded audio support and bug fixes)
- monkey0506 (steam/gog plugin stubs)
- morganw
- rofl0r (bug fixes)
- scottchiefbaker (fixes to building on some Linux systems)
- sonneveld
- tzachs (new navigation bar for the Room Editor)



What is new in 3.5.0

Common features:
- Now using Allegro v4.4.3 library (previously v4.4.2).
- Support for large files: compiled game, sprite set, room files now may exceed 2 GB.
- Deprecated relative assets resolutions: now sprites, rooms and fonts are considered to match game's resolution by default and not resized, unless running in backwards-compatibility mode.
- Allow room size to be smaller than the game's resolution.
- Removed fonts count limit.
- Raised imported sprites count limit to 90000 and removed total sprite count limit (this means you may have around 2 billions of dynamic sprites).
- Removed length limit on the Button and TextBox text.

Editor:
- Editor requires .NET Framework 4.5 to run. Dropped Windows XP support.
- Editor preferences are now stored using .NET configuration model, instead of the Windows registry.
- Added support for custom UI color themes.
- Game and room templates are now by default saved in AppData/Local/AGS folder. Editor finds them in both program folder and AppData.
- Allow to change IDs of most of the game items in the project tree by swapping two existing items. This is done by calling a context menu and choosing "Change ID".
- Added "Game file name" option to let users easily set compiled game file's name.
- Added "Custom Say/Narrate function in dialog scripts" options to General Settings which determine what functions are used when converting character lines in dialog scripts to real script.
- Added "Allow relative asset resolutions" option to "Backwards Compatibility" section. Disabled by default, it makes game treat all sprites and rooms resolution as real one.
- New revamped sprite import window.
- Sprites that were created using tiled import can now be properly reimported from source.
- Added context menu command to open sprite's source file location.
- Using Magick.NET library as a GIF loader. This should fix faulty GIF imports.
- New sprite export dialog that lets you configure some export preferences, including remapping sprite source paths.
- Sprites have "Real" resolution type by default. "Low" and "High resolution" are kept for backwards compatibility only. When importing older games resolution type will be promoted to "Real" whenever it matches the game.
- New navigation bar in the room editor, which allows to select any room object or region for editing, show/hide and lock room objects and regions in any combination.
   These settings are saved in the special roomXXX.crm.user files.
- Improved how Room zoom slider works, now supports downscale.
- Added "Export mask to file" tool button to the Room Editor.
- Added MaskResolution property to Rooms. It ranges from 1:1 to 1:4 and lets you define the precision of Hotspot, Regions and Walkable Areas relative to room background.
- Added "Default room mask resolution" to General Settings, which value will be applied to any room opened for editing in this game for the first time.
- Added "Scale movement speed with room's mask resolution" to General Settings. This is a backward compatible option that supposed to be False by default.
- Removed Locked property from the Room Object, objects are now locked by the navbar.
- Split GUI's Visibility property into PopupStyle and Visible properties.
- Added Clickable, Enabled and Visible properties to GUI Controls.
- "Import over font" command now supports importing WFN fonts too.
- Removed "Fonts designed for high resolution" option from General Settings. Instead added individual SizeMultiplier property to Fonts.
- Alphabetically sort audio clips in the drop lists.
- Display audio clip length on the preview pane without starting playback.
- Sync variable type selector in Global Variables pane with the actual list of supported script types.
- In preferences added an option telling whether to automatically reload scripts changed externally.
- Added "Always"choice to "Popup message on compile" preference. Successful compilation popup will only be displayed if "Always" choice is selected.
- Added shortcut key combination (Shift + F5) for stopping a game's debug run.
- Don't display missing games in the "recent games" list.
- Build autocomplete table a little faster.
- Disabled sending crash reports and anonymous statistics, because of the AGS server issues.
- Corrected .NET version query for the anonymous statistics report.
- Disabled screenshot made when sending a crash report, for security reasons.
- Fixed "Script Compatibility Level" was not correctly set when importing projects made in AGS 3.4.* versions.
- Fixed crash and corruption of project data when writing to full disk.
- Fixed saving sprite file to not cancel completely if only an optional step has failed (such as copying a backup file).
- Fixed changing character's starting room did not update list of characters on property pane of a room editor until user switches editing mode or reloads the room.
- Fixed room editor kept displaying selection box over character after its starting room has changed.
- Fixed room editor not suggesting user to save the room after changing object's sprite by double-clicking on it.
- Fixed sprite folders collapsing after assigning sprite to a View frame or an object.
- Fixed view loops displayed with offset if the view panel area was scrolled horizontally prior to their creation.
- Fixed Audio folders were displaying internal "AllItemsFlat" property on property grid.
- Fixed MIDI audio preview was resetting all instruments to default (piano) after pausing and resuming playback.
- Fixed MIDI audio preview had wrong control states set when pausing a playback.
- Fixed autocomplete not showing up correctly if user has multiple monitors.
- Fixed autocomplete crashing with empty /// comments.
- Fixed script compiler could leave extra padding inside the compiled scripts filled with random garbage if script strings contained escaped sequences like "\n" (this was not good for source control).
- Fixed crash when editor was updating file version in compiled EXE but failed and tried to report about that.

Scripting:
- Fixed compiler was not allowing to access regular properties after type's static properties in a sequence (for example: DateTime.Now.Hour).

Script API:
- Introduced new managed struct Point describing (x,y) coordinates.
- Introduced StringCompareStyle enum and replaced "caseSensitive" argument in String functions with argument of StringCompareStyle type.
- Implemented Dictionary and Set script classes supporting storage and lookup of strings and key/value pairs in sorted or unsorted way. Added SortStyle enum for use with them.
- Implemented Viewport and Camera script classes which control how room is displayed on screen.
- Implemented Screen struct with a number of static functions and properties, which notably features references to the existing Viewports. Deprecated System's ScreenWidth, ScreenHeight, ViewportWidth and ViewportHeight in favor of Screen's properties.
- Added Game.Camera, Game.Cameras and Game.CameraCount properties.
- All functions that find room objects under screen coordinates are now being clipped by the viewport (fail if there's no room viewport at these coordinates).
   This refers to: GetLocationName, GetLocationType, IsInteractionAvailable, Room.ProcessClick, GetWalkableAreaAt and all of the GetAtScreenXY functions (and corresponding deprecated functions).
- Added Character.GetAtRoomXY, Hotspot.GetAtRoomXY, Object.GetAtRoomXY, Region.GetAtScreenXY, replaced GetWalkableAreaAt with GetWalkableAreaAtScreen and added GetWalkableAreaAtRoom.
- Replaced Alignment enum with a new one which has eight values from TopLeft to BottomRight.
- Renamed old Alignment enum to HorizontalAlignment, intended for parameters that are only allowed to be Left, Center or Right.
- Added new script class TextWindowGUI, which extends GUI class and is meant to access text-window specific properties: TextColor and TextPadding.
- Added new properties to GUI class: AsTextWindow (readonly), BackgroundColor, BorderColor, PopupStyle (readonly), PopupYPos.
- Added Button.TextAlignment and Label.TextAlignment.
- Added missing properties for ListBox: SelectedBackColor, SelectedTextColor, TextAlignment, TextColor.
- Replaced ListBox.HideBorder and HideArrows with ShowBorder and ShowArrows.
- Added TextBox.ShowBorder.
- Added AudioClip.ID which corresponds to clip's position in Game.AudioClips array.
- Added Game.PlayVoiceClip() for playing non-blocking voice.
- Added SkipCutscene() and eSkipScriptOnly cutscene mode.
- Allowed to change Mouse.ControlEnabled property value at runtime.
- Added Game.SimulateKeyPress().
- Added optional "frame" parameter to Character.Animate and Object.Animate, letting you begin animation from any frame in the loop.
- Try to create all subdirectories when calling File.Open() for writing, DynamicSprite.SaveToFile() and Game.SetSaveGameDirectory().
- Deprecated "system" object (not System struct!).
- Deprecated Character.IgnoreWalkbehinds and Object.IgnoreWalkbehinds.
- Deprecated DrawingSurface.UseHighResCoordinates. Also, assigning it will be ignored if game's "Allow relative asset resolutions" option is disabled.

Engine:
- New pathfinder based on the A* jump point search.
- Implemented new savegame format. Much cleaner than the old one, and easier to extend, it should also reduce the size of the save files.
   The engine is still capable of loading older saves, temporarily.
- Implemented support for sprite batch transformations.
- Implemented support for multiple custom room viewports and cameras.
- Removed limits on built-in text wrapping (was 50 lines of 200 chars max each).
- Removed 200 chars limit for DoOnceOnly token length.
- Reimplemented threaded audio, should now work correctly on all platforms.
- Made debug overlay (console and fps counter) display above any game effects (tint, fade, etc)
- Made fps display more stable and timing correct when framerate is maxed out for test purposes.
- Print debug overlay text using Game.NormalFont (was hard-coded to default speech font).
- Improved performance of hardware-accelerated renderers by not preparing a stage bitmap for plugins unless any plugin hooked for the particular drawing events.
- Reimplemented FRead and FWrite plugin API functions, should now work in 64-bit mode too.
- Support "--gfxdriver" command line argument that overrides graphics driver in config.
- Implemented "--tell" set of commands that print certain engine and/or game data to stdout.
- Use "digiid" and "midiid" config options to be used on all platforms alike and allow these to represent driver ID as a plain string and encoded as an integer value (for compatibility).
- Completely removed old and unsupported record/replay functionality.
- Replaced number of fatal errors reported for incorrectly called script functions with a warning to the warnings.log instead. This is done either when arguments may be fixed automatically, or script command simply cannot be executed under current circumstances.
- Expanded some of the error messages providing more information to end-user and developers.
- Fixed engine could not locate game data if relative path was passed in command line.
- Fixed potential bug which could cause DoOnceOnly tokens to be read incorrectly from a savedgame.
- Fixed engine crashing with "division by zero" error if user set InventoryWindow's ItemWidth or ItemHeight to 0.
- Fixed engine crashing if Object.SetView is called with a view that does not have any loops.
- Fixed old walk-behind cut-outs could be displayed on first update in a room if the room's background was modified using raw drawing commands before fade-in.
   This happened only when running Direct3D or OpenGL renderer. Note that this bug was probably never noticed by players for a certain barely related reason.
- Fixed BlackBox-in transition done by software renderer could have wrong aspect ratio.
- Fixed Direct3D and OpenGL displayed pink (255, 0, 255) fade as transparent.
- Fixed Direct3D was slightly distorting game image in pixel perfect mode.
- Fixed Direct3D was not clearing black borders in fullscreen, which could cause graphical artifacts remaining after the Steam overlay, for example.
- Fixed potential crash that could happen when switching between fullscreen and windowed mode, or switching back into game window (only observed on Linux for some reason).
- Fixed IsMusicVoxAvailable() not working correctly in old games which use 'music.vox'.
- Fixed a bug in mp3/ogg decoder where it assumed creating an audiostream succeeded without actually testing one.
- Restored support for running games made with experimental 3.3.0 CR version.
- Fixed character's blinking frames drawn incorrectly when legacy sprite blending mode was on.
- Fixed increased CPU load when displaying built-in dialogs (save, restore etc).
- Restored legacy InventoryScreen() behavior which picked sprites 0, 1, 2 for inventory dialog buttons when predefined 2041, 2042 and 2043 were not available.
- Added Scavenger's palgorithms plugin to the list of builtins, for ports that use ones.
- Added stubs for monkey0506's Steam and GoG plugins to let run games on systems that do not have Steam/GoG installed (all related functionality will be disabled though).
- Added stubs for SpriteFont plugin.
- Added missing stubs for agswadjetutil plugin.

Linux:
- Support for OpenGL renderer.
- Use same FreeType library sources as Windows version, which suppose to fix TTF font glitches.
- Re-enabled threaded audio setting.
- $APPDATADIR$ script paths are now mapped to "$XDG_DATA_HOME/ags-common", making sure it is a writeable location.

Windows:
- Windows version of AGS is now built with MSVS 2015 and higher.
- Engine is marked as a DPI-aware application that supposed to prevent window scaling by system.





On color themes

After launching the Editor, go to File - Preferences. In the "Editor Appearance" group box you will find "Color Theme" setting. If you haven't installed any themes yet the selection list will be empty. Press "Import Color Theme" and select appropriate JSON file, containing theme configuration.
Sample color theme: Dark UI Theme.

There is no specification on theme creation yet, but I hope there will be one at some point. For now you may copy and modify existing one. Themes are in JSON format, which you may edit in most simple text editors. If the theme is broken, the editor will report an error and reset to Default theme on startup.
ChamberOfFear also suggested creating a repository for the themes to let people upload their own and improve existing ones, which we may do in a future.



On new navigation bar in the room editor

This was made by tzachs back in 2014, but got into the editor only now. The feature is working, but may need polishing.

Screenshots (warning - big size):
Spoiler




[close]

Quoting tzachs (from his old thread) -

- Room Layers

This feature allows you to view (and edit) walkable areas/walk-behinds/hotspots/regions/characters/objects/edges in the same time (as opposed to only seeing one of them at a time, like we've seen before).
Well, not entirely though: walkable areas/walk-behinds/hotspots/regions still can't be seen together (as they use masks and is part of the natives dll so I skipped it for now) but they can be seen along objects, characters, and edges.

- Visibility

Each layer can be made visible/hidden by the push of a button. In addition, for the objects/characters/edges layers each item in the layer can also be made visible/hidden by the push of a button. This will only affect the editor, not the actual game.

- Locking

Each layer can be locked/unlocked by the push of a button. In addition, for each layer, each item in the layer can also be locked/unlocked by the push of a button.
A locked item cannot be moved until it is unlocked, useful to prevent mistakes when designing the room. This will only affect the editor, not the actual game.


On Dictionary and Set script types

AGS 3.5.0 introduces two new script classes Dictionary and Set. Both are containers (like special kinds of a list) that store Strings in them. Unfortunately AGS script does not support "generic" code which would allow to create these container classes for any type, so we decided to make ones with String support for the time being, and because Strings are pretty universal type that may store many things in itself.

Dictionary is a container that stores key/value pairs. The existing analogue is "custom properties". It lets you define a name for some value and attach value in it, then later read or change that value using same key.
Code: ags

Dictionary *dict = Dictionary.Create();
dict.Set("name", "Roger");
dict.Set("health", String.Format("%d", 10));
...
int health = dict.Get("health").AsInt;


Set is a container that stores just lone strings, and it mainly has a use of describing a list of unique items. The existing analogue is "Game.DoOnceOnly" function.
Code: ags

Set *myTasks = Set.Create();
myTasks.Add("bought milk");
myTasks.Add("pressed button");
myTasks.Add("locked door");
myTasks.Remove("pressed button");
...
if (myTasks.Contains("bought milk"))
{ // do something
}


Both Dictionary and Set may be created in 4 different forms, combining two properties: a) sorted/unsorted mode and b) case-sensitive/case-insensitive mode. Note you cannot change their behavior after creation, but you may copy their contents to another Dictionary or Set. Both classes provide GetItemsAsArray() method which lets you get their current contents in same order as they store it (sorted or not).


On new room viewport and camera commands

This release changes the way AGS handles room viewport. Originally room view was covering whole screen and always drawn 1:1. 3.5.0 separates old viewport into viewport and camera, also changing the meaning of viewport term. Additionally, 3.5.0 now supports multiple viewports and cameras.

In 3.5.0:
Viewport is a place on screen where room is drawn, defined in game coordinates (e.g. 0,0 - 320x200).
Camera is a place in room which is being drawn, defined in room coordinates.

The part of the room "seen" by camera is being copied to the viewport on screen, scaled up or down if necessary.
For example, if you set camera's size twice as small than the viewport, then room will appear zoomed in x2. If you set camera's size twice as big than the viewport, room will appear zoomed out x2.
NOTE: you cannot set camera size larger than the room's background.

To access viewport and camera use new properties: Screen.Viewport and Game.Camera. These are primary viewport and primary camera that are always present and cannot be removed.
Screen.AutoSizeViewportOnLoad boolean value turns automatic viewport adjustment on room load. It is ON by default which corresponds to normal room view you are used to.
As extra, there are Screen.Viewports array and Screen.ViewportCount property that tells that array's size, as well as Game.Cameras array and Game.CameraCount. These arrays may come useful when working with multiple viewports/cameras.

In regards to viewports/cameras, note that they currently are belong to the global Game state and automatically transit to a new room along with player. You would have to remember to clean unnecessary ones up either in "room leave" or "room enter before fade-in" events.

Since the relation between screen and room is now more complicated new functions were added to help convert between screen and room coordinates: Screen.ScreenToRoomPoint(), Viewport.ScreenToRoomPoint() and Viewport.RoomToScreenPoint(). These functions return an object of Point type containing (x,y) coordinates.
Screen.ScreenToRoomPoint() returns null if there is no Viewport on screen under these coordinates. This is because if there will be multiple viewports supported in the future then engine simply won't know which to choose having none under these coords.
Both Viewport.ScreenToRoomPoint() and Viewport.RoomToScreenPoint() have 'clipViewport' parameter which tells whether they should return null if the coordinates lie outside of the visible part of the room.


Old viewport functions are now deprecated, they may still be enabled if you set "Script compatibility level" to v3.4.1 or lower.
Here's correspondence between old and new functions:




Old commandNew command(s)
SetViewport(x, y);Game.Camera.SetAt(x, y);
ReleaseViewport();Game.Camera.AutoTracking = true;
GetViewportX();Game.Camera.X;
GetViewportY();Game.Camera.Y;

As you may see, what was known as "viewport" earlier is now called "camera", and "new viewport" is something that was never supported before.

eri0o

Just reporting this version is working great on Wine too! I am a bit focused on my game in the 3.4.3.1 right now, but it did compile once I removed the following code:

Code: ags

game.replay_hotkey = 0;


I had this code because the now removed replay thing used to be called by default with the same key combination I use when Capturing with OBS Studio and also the same hotkeys as Peek, which I also use for capturing.

Other than this I haven't yet upped the API version for 3.5.0 to play with the new things like the cameras. :]

bx83

Hi, just a question you probably answered 1500 posts ago -- is there coming back from this version?
What I mean is: If a have a project done in 3.4.3, and I update to 3.5beta, will my actual project file no longer be able to be edited with 3.4.3 or anything lower? I understand the game savegames are non-compatible, but is the game.agf etc. file?

Crimson Wizard

Quote from: bx83 on Sat 04/05/2019 10:00:43
Hi, just a question you probably answered 1500 posts ago -- is there coming back from this version?
What I mean is: If a have a project done in 3.4.3, and I update to 3.5beta, will my actual project file no longer be able to be edited with 3.4.3 or anything lower? I understand the game savegames are non-compatible, but is the game.agf etc. file?

Not automatically. But if really wanted, it is possible to edit game.agf by hand (its a text file) and cut out new stuff. Rooms are much harder because they are saved in binary, so probably would require recreating and importing/exporting backgrounds etc.

To sum up, I won't recommend upgrading unless you are certain you will finish your game with this version.

Crimson Wizard

#4
Update: AGS 3.5.0 - Beta 2

ZIP file: https://github.com/adventuregamestudio/ags/releases/download/v.3.5.0.11/AGS-3.5.0-Beta2.zip
Linux pack for the editor: https://github.com/adventuregamestudio/ags/releases/download/v.3.5.0.11/AGS.3.5.0.11.Editor.Linux.Pack.zip

Changes since Beta 1:

Editor:
- Added "Custom Say/Narrate function in dialog scripts" options to General Settings which determine what functions are used when converting character lines in dialog scripts to real script.

"Custom Say" must be a Character's extender function declared in one of your script headers. Function must take 1 parameter of type String (speech text) in order for dialog scripts to compile correctly. It will then be used to replace dialog lines like
Code: ags
CHAR: Say something
.
"Custom Narrate" must be a simple global function taking 1 parameter of type String.  It will be used to replace dialog lines like
Code: ags
narrator: Tell something
.
IMPORTANT: there were complications and this currently does not work for "Say" checkbox. Meaning, if you have "Say" checkbox on, the dialog option text will be displayed using regular Character.Say.

Engine:
- Support "--gfxdriver" command line argument that overrides graphics driver in config.
- Fixed Character.DestinationY telling incorrect values beyond Y = 255.
- Added stubs for monkey0506's Steam and GoG plugins to let run games on systems that do not have Steam/GoG installed (all related functionality will be disabled though).


Also lots of fixes to the new functionality and regressions found in 3.5.0.

cat

#5
I'm currently using 3.5.0.11 and have a weird issue: My object is not visible in the room editor, but it is visible when running the game. I can drag it around but cannot see it. The object uses alpha channel. When I replace the graphics with one of the default graphics that ship with the two-click-template, it is shown. It does not make any different whether I choose objects to be visible in the "Edit this room's" bar.

Edit: When executing the game, alpha channel does not work - the background is shown black. In sprite editor, I set AlphaChannel to true and TransparentColour to LeaveAsIs

Crimson Wizard

Quote from: cat on Thu 16/05/2019 19:07:19
I'm currently using 3.5.0.11 and have a weird issue: My object is not visible in the room editor, but it is visible when running the game. I can drag it around but cannot see it. The object uses alpha channel. When I replace the graphics with one of the default graphics that ship with the two-click-template, it is shown. It does not make any different whether I choose objects to be visible in the "Edit this room's" bar.

Is it possible to send me a project? or at least the room (*.crm, *.crm.user files)?

cat

Turns out that I was using 16bit (which is the default of the template) instead of 32bit. Switching to 32bit and reimporting the sprites solved the issues. Is there a reason for using 16bit at all?

Crimson Wizard

Quote from: cat on Fri 17/05/2019 20:32:03
Turns out that I was using 16bit (which is the default of the template) instead of 32bit. Switching to 32bit and reimporting the sprites solved the issues. Is there a reason for using 16bit at all?

I don't think there's any benefit today.

Also I thought we changed all templates to 32-bit. Maybe there's one left where I did not copy an updated version.

Crimson Wizard

#9
Update: AGS 3.5.0 - Beta 3

ZIP file: https://github.com/adventuregamestudio/ags/releases/download/v.3.5.0.12/AGS-3.5.0-Beta3.zip
Linux pack for the editor: https://github.com/adventuregamestudio/ags/releases/download/v.3.5.0.12/AGS.3.5.0.12.Editor.Linux.Pack.zip

Changes since Beta 2:

Editor:
- Added "Game file name" option to let users easily set compiled game file's name.

Scripting:
- Fixed compiler was not allowing to access regular properties after type's static properties in a sequence (for example: DateTime.Now.Hour).

Script API:
- Try to create all subdirectories when calling File.Open() for writing, DynamicSprite.SaveToFile() and Game.SetSaveGameDirectory().


More fixes to the new functionality and regressions found in 3.5.0.

Dualnames

Worked on Strangeland, Primordia, Hob's Barrow, The Cat Lady, Mage's Initiation, Until I Have You, Downfall, Hunie Pop, and every game in the Wadjet Eye Games catalogue (porting)

cat

#11
I just got an error message in script editor while editing a module (I imported a sprite and then edited the script):

Spoiler
Error: Unable to create the backup sprite file. Make sure the backup sprite file is not read-only
Version: AGS 3.5.0.11

AGS.Types.AGSEditorException: Unable to create the backup sprite file. Make sure the backup sprite file is not read-only ---> AGS.Types.AGSEditorException: Unable to create the backup sprite file. Make sure the backup sprite file is not read-only
   at save_game(Boolean compressSprites)
   at AGS.Native.NativeMethods.SaveGame(Game game)
   at AGS.Editor.NativeProxy.SaveGame(Game game)
   at AGS.Editor.AGSEditor.SaveGameFilesProcess(Object parameter)
   at AGS.Editor.BusyDialog.RunHandlerOnThread()
   --- End of inner exception stack trace ---
   at AGS.Editor.BusyDialog.Show(String message, ProcessingHandler handler, Object parameter)
   at AGS.Editor.AGSEditor.SaveGameFiles()
   at AGS.Editor.Components.FileCommandsComponent.CommandClick(String controlID)
   at AGS.Editor.ToolBarManager.ToolbarEventHandler(Object sender, EventArgs e)
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at AGS.Editor.ToolStripExtended.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[close]

Besides that, I just want to mention that I absolutely LOVE the new sprite import GUI!

Edit: Ah damn it, looks like my sprite file broke - when I try to edit the sprites now, the editor just closes.
Do you want a copy of it before I git-revert it?

Crimson Wizard

Quote from: cat on Tue 21/05/2019 21:25:25
Edit: Ah damn it, looks like my sprite file broke - when I try to edit the sprites now, the editor just closes.
Do you want a copy of it before I git-revert it?

Hmm, I could look, but it may be just a result of some error during writing.



BTW I should have mentioned earlier, there's a bug in this version which happens when you use DynamicSprites, occasionally game may crash and say something about "trying to remove sprite that does not exist". I already fixed it but it's not released yet. This problem may be temporarily avoided by increasing sprite cache size.

doimus

I saw there was a suggestion to improve text parser a bit over there in the now locked alpha thread...

I have one little improvement in mind that could streamline the whole parser business a lot:

Could we have parser words imported from plain text files?
Something simple like csv, which just lists all possible sinonyms in a single line of text. Ie. each line becomes a word group. Or we could manually specify groups as first value, whatever.

Quote
1, look, examine, peek at
2, get, take, pick up
3, talk, ask, tell, inquire
......

That way we can have all the words in a separate spreadsheet with spell checking, thesaurus and whatnot, and then just export to csv as needed.

Crimson Wizard

#14
Quote from: doimus on Wed 22/05/2019 17:04:09
I saw there was a suggestion to improve text parser a bit over there in the now locked alpha thread...

I saw a mention of improvement, but after I asked what the person had in mind they never replied back...

Quote from: doimus on Wed 22/05/2019 17:04:09
I have one little improvement in mind that could streamline the whole parser business a lot:

Could we have parser words imported from plain text files?
Something simple like csv, which just lists all possible sinonyms in a single line of text. Ie. each line becomes a word group. Or we could manually specify groups as first value, whatever.

Do you mean importing parser contents in the Editor or modifying it at runtime?
BTW I wonder if editor plugin API currently has access to parser dictionary. If it does, then this may be solved with the plugin.
Otherwise, some generic format should be established, as well as a rule of how and when the import occurs. OTOH morganw wanted to gradually shift Editor towards using files directly from disk rather than requiring to import them into editor data. This is too for consideration.



If at runtime, I guess a universal function would be to let you read and edit parser dictionary in the script? That would allow fill it from any source you like, hardcoded in script or a text resource.

I do not think I will be doing this for this particular release though. It's long overdue and currently I am more inclined to fix remaining bugs. Next update maybe.

We have two new script classes called Dictionary and Set, and were considering replacing some of the built-in functionality with them for convenience. For example, DoOnceOnly function could be replaced with something like "DoOnce" Set, and custom properties could be replaced with a Dictionary property.
Similarily, text parser's dictionary could be exposed into the script as a Dictionary object that game developers may modify as they please.



cat

#15
I reverted my sprite files but whenever I compile the game, the editor crashes without any message. And now it even crashes when just opening the game.

I reverted also the game file and module and now it was fine. I was able to re-import the sprites. However, it is very weird that the whole editor crashes without even a warning.

cat

#16
Now I had this error again while assigning sprites to a view. Why would the editor try to write the backup sprite file while editing a view? This is very annoying, because I just imported quite a lot of sprites for a view. All the sprites I previously imported are either gone of turned black in the sprite editor. When I tried to open the view where the sprites are used, the editor crashed again on me.

To me, this is mostly annoying, because I use source control and commit often, but other people might be in serious trouble when this happens.

Spoiler

Error: Unable to create the backup sprite file. Make sure the backup sprite file is not read-only
Version: AGS 3.5.0.11

AGS.Types.AGSEditorException: Unable to create the backup sprite file. Make sure the backup sprite file is not read-only ---> AGS.Types.AGSEditorException: Unable to create the backup sprite file. Make sure the backup sprite file is not read-only
   at save_game(Boolean compressSprites)
   at AGS.Native.NativeMethods.SaveGame(Game game)
   at AGS.Editor.NativeProxy.SaveGame(Game game)
   at AGS.Editor.AGSEditor.SaveGameFilesProcess(Object parameter)
   at AGS.Editor.BusyDialog.RunHandlerOnThread()
   --- End of inner exception stack trace ---
   at AGS.Editor.BusyDialog.Show(String message, ProcessingHandler handler, Object parameter)
   at AGS.Editor.AGSEditor.SaveGameFiles()
   at AGS.Editor.Components.FileCommandsComponent.CommandClick(String controlID)
   at AGS.Editor.ToolBarManager.ToolbarEventHandler(Object sender, EventArgs e)
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at AGS.Editor.ToolStripExtended.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[close]

Crimson Wizard

@cat

I will look into this, but do you have any idea of a reliable test case? Like, have you got a project in such state that I could do few actions and get same error?

Quote from: cat on Wed 22/05/2019 19:48:51
I reverted my sprite files but whenever I compile the game, the editor crashes without any message. And now it even crashes when just opening the game.

Also that may help to at least find out why it crashes like this if I had project files in the broken state.

doimus

Quote from: Crimson Wizard on Wed 22/05/2019 18:07:22

Do you mean importing parser contents in the Editor or modifying it at runtime?
BTW I wonder if editor plugin API currently has access to parser dictionary. If it does, then this may be solved with the plugin.
Otherwise, some generic format should be established, as well as a rule of how and when the import occurs. OTOH morganw wanted to gradually shift Editor towards using files directly from disk rather than requiring to import them into editor data. This is too for consideration.

I meant just replacing the current input method in the editor with plain file input. Currently, it's difficult to input new words and to edit old words, once the dictionary gets too big.
So basically the engine parser data structure remains the same, it's just the user input method that changes.

But having a dictionary at runtime definitely sounds like a more useful option!


cat

If it happens again, I'll send you the source.

SMF spam blocked by CleanTalk