-
Notifications
You must be signed in to change notification settings - Fork 159
/
Changes.txt
6036 lines (5528 loc) · 332 KB
/
Changes.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
REVISION HISTORY
================
VERSION 3.6.2 - Beta
Common:
- Event handler function are now allowed to be located in any script module.
- New naming rule for the voice clips: full char name, followed by a number, separated by a dot,
e.g. "RogerTheGreat.1234.ogg". The old rule may be enabled again by a switch in "Backwards
Compatibility" settings.
Editor:
- In General Settings added "Use old-style voice clip naming rule" which lets to select whether
the game should expect old-style voice clip filenames (4-letter char name followed by number)
or the new one (full char name, followed by a number, separated by a dot).
- Added "WrapText", "TextPaddingHorizontal", "TextPaddingVertical" properties to GUI Button.
- GUI Labels can select full range of Alignment values in their TextAlignment property.
- Added "TurnWhenFacing" property to Characters.
- Textual GUI controls can now select "Null Font" as their font: this will prevent any text to be
drawn even if one is assigned, and make it have zero size (when it matters).
- "Events" tab on the Properties Grid now has "ScriptModule" selection, which lets define in which
module should the related script functions be generated and looked for. The GUI Controls use
a ScriptModule set in their parent GUI, and Room events always has a fixed room script selected.
- Added "Open Recent" submenu in the File menu.
- Sync script editor's commands in Edit menu with the context menu.
- Added "Toggle Line Comment" command to Edit menu for scripts.
- More panes in the Editor are DPI-aware (rescale well with the system font scaling).
- Editor tabs now display icons indicating their contents (may be disabled in Editor Preferences).
- Room panel tabs now display room names.
- Editor will now remember certain window states: "Sprite selector" window and splitter position,
splitter position in "Sprite manager".
- Support reordering folders in Project Explorer with drag & drop.
- Support importing plain script files: ash, asc or both, - besides script modules (*.scm).
- On "Color Finder" pane also display actual RGB values that the engine will use. They may be
different from requested RGB, because historically engine limits drawing color's RGB precision
to 16-bit.
- Font's "SourceFilename" and "Font Size" properties now have buttons that let import another font
file, or reimport same font with different size respectively, instead of clicking on a button on
the preview window.
- Global Variables panel now allows to declare arrays.
- Added "Controls transparency" slider to GUI edit pane.
- Copy, paste and delete commands now apply to all the selected GUI controls in GUI editor.
- When pasting a copied GUI control, Locked property of a new control will be turned off.
- Support editing group properties for selected GUI controls.
- Support importing 1-bit (monochrome) and 4-bit images as sprites, room backgrounds and masks
(converted to 8-bit).
- Support importing indexed PNGs as room backgrounds and masks.
- Do not alter or clamp palette for 8-bit sprites imported in a 16/32-bit game.
- Removed obsolete "Copy walkable area mask to regions" command from the Room editor.
- Improved scrolling of drop-down lists in the Room's navigation bar: made scroll buttons larger,
and support mouse wheel.
- Do not delete previously built game exe from Compiled/Windows folder when testing a game
from the editor.
- Added "/maketemplate" command-line option that tells Editor to run, make template out of the
said game, and quit.
- Fixed Editor refusing to open a project if one or more of the sections are missing in the file.
- Fixed importing indexed PNG as a sprite, previously Editor would mistakenly treat the source
image as 32-bit.
- Fixed importing 8-bit BMP sprites with no "Remap palette" and "Leave As Is" as a transparency
option would still remap palette index 0 to the first found palette entry with Alpha 0,
even if that's a filler entry not used by the image.
- Fixed exporting room backgrounds was always writing a 32-bit image rather than using actual
background's color depth.
- Fixed "Color Finder" and color properties were mapping a color number to RGB values with
accuracy mistakes, resulting in slightly different values than the engine would use.
- Fixed an unhandled exception occuring when rebuilding rooms if any script's header is missing.
- Fixed double warning message when trying to close the Editor while a game test is running.
Script API:
- Added eNullFont constant that lets assign or pass a "null font" to any property or function
parameter which expects a font's ID. This "null font" will simply make any text not drawn
and have no actual measurements (size, spacing, etc).
- Added global events: eEventDialogStart, eEventDialogStop, eEventDialogRun,
eEventDialogOptionsOpen, eEventDialogOptionsClose (these are handled in "on_event").
- Added Button.WrapText, TextPaddingHorizontal, TextPaddingVertical.
- Added Character.TurnWhenFacing property.
- Added Character.MoveStraight() complementing WalkStraight().
- Added DateTime.CreateFromDate() and CreateFromRawTime().
- Added static Dialog.CurrentDialog property and non-static ExecutedOption and AreOptionsDisplayed
properties.
- Added RenderLayer enum, and optional "layers" parameter to DynamicSprite.CreateFromScreenShot(),
that tells which of the game's render layers to capture when making a screenshot.
- Added File.Copy() and File.Rename().
- Added File.GetFileTime() that returns file's modification time.
- Added File.ReadBytes(), File.WriteBytes(), File.ReadRawFloat(), File.WriteRawFloat().
- Added Game.GetSaveSlotTime() that returns a time this save slot was last written.
- Label.TextAlignment has now type Alignment, rather than HorizontalAlignment, and has
full alignment range (both horizontal and vertical).
- Added FileSortStyle and SortDirection enum, and optional "fileSortStyle" and "sortDirection"
parameters to ListBox.FillDirList(). This lets to sort resulting list by name or time,
in ascending or descending order.
- ListBox.FillSaveGameList(), RestoreGameDialog() and SaveGameDialog() now let define a range
of save slots for display.
- Added Overlay.SetPosition() and SetSize() functions for convenience.
- Added Speech.SpeakingCharacter that returns currently speaking character (for blocking speech).
- Added GetTimerPos() that returns timer's position (remaining time), in ticks.
- Added CopySaveSlot() and MoveSaveSlot(), which moves existing save to another slot.
- Added optional "sprite" parameter to SaveGameSlot(), that lets to pass a number of an arbitrary
sprite to write into this save instead of a standard "screenshot".
- Added System.GetEngineInteger() and System.GetEngineString() for returning diagnostic
information about engine's runtime state. Possible arguments are defined by
EngineValueID enum.
- Added new game-wide option OPT_SAVEGAMESCREENSHOTLAYER that lets to define which of the game's
render layers will be captured when making a standard screenshot for the save game.
- Expanded `on_mouse_click` callback, now supports two more parameters: click x,y coordinates.
Engine:
- Dropped support for pre-3.5.0 game saves.
- Ensure that Character.Speaking returns true when a speech is playing even if the character
has no speech view.
- DynamicSprite.CreateFromFile() may now load 1-bit and 4-bit bitmaps, converting to 8-bit.
- Do not alter or clamp palette for 8-bit sprites loaded into a 16/32-bit game at runtime.
- Assigning InventoryItem.Graphic will no longer reassign CursorGraphic too even if they were
identical previously.
- Calling DeleteSaveSlot() on a slot within 0-50 range will no longer secretly move a save with
the topmost number (within the same range) to fill the emptied slot. If you still like to
recreate this behavior, then use MoveSaveSlot() command.
- Implemented video buffering on a separate thread. Allow to drop late video frames.
- Added new accessibility config settings in "access" section: "speechskip" and "textskip".
These let player to override game's skipping style for character speech and text messages
respectively.
- Added "max_save" config option in "override" section: this lets to enforce an arbitrary number
of saves displayed in a standard save/restore dialogs in game.
- Added "--no-plugins" command-line argument that denies loading any plugins;
also added respective config option "noplugins" in "override" section.
- Fixed displaying room masks with Debug command in legacy "upscale" mode.
Engine Plugin API:
- Added IAGSEngine.Log(), which lets plugins to print using engine's log system.
Compatibility:
- Fixed loading of games made in AGS 2.55-56 which include plugins.
- Fixed loading of rare games made with AGS 2.5 or higher, which contained deprecated
"room animations" (animations themselves are currently not functional).
- Fixed old pathfinder imprecision affecting few pre-3.0 games.
- Allow pre-2.7 games to have RestartGame() command be followed and overridden by a NewRoom().
This is necessary for some older games to be able to proceed.
WinSetup:
- Redesigned winsetup into a tabbed dialog.
- Added "Reset To Defaults" button that resets all options to values from the game's default
config file.
- Added "Accessibility" settings for skipping speech and text messages.
---------------------------------------------------------------------------------------------------
VERSION 3.6.1 - Patch 7, September 2024
Engine:
- Hotfix mouse cursor not being drawn sometimes after changing rooms (regression in 3.6.1 P6).
VERSION 3.6.1 - Patch 6, September 2024
Editor:
- Fixed Ctrl+C and Ctrl+V not working in GUI editor.
- Fixed sprite export and copying a sprite to clipboard operations were always exporting
a 32-bit image, regardless of the actual sprite's color depth.
- Fixed "Recreate spritefile" command was unintentionally converting any sprite to 32-bit if its
source was not found, and it was taking existing image from the old spritefile.
Engine:
- Fixed Software renderer could crash the game under some circumstances when the sprite cache's
limit is exceeded (this is a regression in 3.6.1).
- Fixed text-based lipsync's frame delay calculation: the existing formula was causing the delay
value to "jump" back and forth with the slightest difference of speech text length, resulting
in the speech lines of close length to be played with the notably different animation speeds.
- Fixed drawing a 32-bit sprites on a 8-bit surface (e.g. a room mask), it was done wrong and
was causing a memory corruption too.
- Fixed drawing a room's walkable mask in script could cause errors during character walking
if used colors exceeded walkable area number limit.
- Fixed walk-behinds not drawn over characters and objects anymore (regardless of their baselines)
after walk-behind mask was changed using drawing operations in script.
- Fixed Game.SimulateKeyPress() not working in "old key-handling mode" (regression since 3.6.0).
- Fixed script location is not reported in case of logical errors in engine's functions
(regression since 3.6.0).
WinSetup:
- Removed an obscure "Use 85 Hz display" option.
VERSION 3.6.1 - Patch 5, August 2024
Editor:
- When the room background size changes, clamp Room Edges to the new size.
- Fixed Editor refusing to load a project if its folder name exceeds 40 characters.
(An obsolete historical limitation which we forgot to cut from the program.)
Compiler:
- Fixed script compilation hanging forever if a non-latin unicode character is met in script
(outside of comments).
Engine:
- Fixed GUI.ProcessClick() using mouse position when detecting a GUI control, instead of
the position passed in the argument list.
- Fixed Region.GetAtScreenXY() was returning null for offscreen coordinates. Made it return
region[0] for consistency with other room areas, and backwards compatibility.
- Fixed room Overlays not sorted in the order of their creation, like screen Overlays.
- Fixed a potential mistake in Lucas-Arts speech position when there are multiple room
viewports and speaking character is not directly visible in any of them.
- Fixed Engine could switch program's locale to the current system locale by mistake
when player is typing text. This could potentially lead to random glitches in text input
in games which are run in ASCII mode and are handling extended characters.
- Fixed TextBox was trying to display unsupported characters (in ASCII mode), resulting in
random garbage.
VERSION 3.6.1 - Patch 4, July 2024
Editor:
- Fixed extracting templates with very large files inside would cause "Out of memory" error.
- Fixed crash occuring when trying to import a non-existant GIF frame during Sprite Import.
- Fixed potential mistake with sprite transparency occuring when importing a 8-bit sprite
into 16/32-bit game.
Compiler:
- Fixed "\t" (and few other less common escaped chars) not handled properly when they are
inside string literals.
- Fixed a crash in compiler occuring if user script defined a variadic function.
(User-defined variadic functions are not properly usable at the moment, but this at least
prevents an unhandled exception.)
Scripting:
- Declare "UNICODE" macro for scripts if game is made in unicode mode.
Script API:
- Added a number of missing OPT_* constants used with Get/SetGameOption functions.
Engine:
- Fixed setting Screen.AutoSizeViewportOnRoomLoad to false in "game_start" could cause primary
viewport and camera become initialized with zero width and height.
- Fixed setting camera's size in "game_start" would unexpectedly get camera clamped to 320x200.
- Fixed number of mistakes in Text Parser occuring when handling "multiwords".
VERSION 3.6.1 - Patch 3, June 2024
Editor:
- Fixed that after deleting a View's frame editor did not select next frame (regression in 3.6.1).
- Fixed "Delete last loop" button not appearing in the View Editor if the view is filled using
"Assign sprites to view" command from the Sprite Manager.
Engine:
- Implemented an alternate solution for rendering "bad" TTF fonts that does not increase their
loading times (after previous patch 2).
- Allow scene render during "load room" event if the last room transition was "Instant".
This has to be done because number of games used this event for custom transitions.
- For games compiled in "Debug" mode "warnings.log" file will be written in "savegame dir"
on platforms where modifying game directory is forbidden in principle (OSX, iOS, Android, Web).
- Fixed System.Log() was registered for plugins using a wrong argument list.
Compatibility:
- Fixed loading of 3.5.0 saves (broken in 3.6.1).
Windows:
- Fixed disk space check was testing space in the current directory instead of the
save game location.
VERSION 3.6.1 - Patch 2, May 2024
Editor:
- Fixed few potential program errors for "Generate Keystore" in Android preferences.
- Fixed external processes (such as test game runs) were started using ShellExecute,
which could theoretically lead to unintended results.
Engine:
- Fixed String.Replace crashing the engine if the resulting string exceeds 3000 bytes.
- Fixed releasing a mouse button could cause double "on_event" call (with eEventGUIMouseUp).
- Improved rendering of TTF fonts which have glyph sizes surpassing declared font's height.
This fixes the look of text on gui controls, and automatic outlining on these fonts.
- Fixed a dialog shown with InputBox() function drawing typed text beyond text box'es border.
- Fixed custom dialog options in the "old mode" not triggering redraw when the active
option changes.
VERSION 3.6.1 - Patch 1, April 2024
Editor:
- Fixed View's frame preview sometimes drawn incorrectly, in case of certain panel sizes.
- Fixed folding in the script editor not working correctly if there's a commented closing
bracket ("//}") inside this code section.
- Fixed Editor sometimes failing to update game exe's file information and/or icons, if
user was importing any sprites during this working session.
Engine:
- Fixed room objects not updating under Direct3D/OpenGL renderer, if they were assigned a dynamic
sprite, then that sprite was deleted, and a new one assigned with coincidentally same ID.
- Fixed room objects not updating under Software renderer, if they were assigned a dynamic sprite,
and that sprite was modified while object was not visible on screen.
- Fixed inventory cursor's crosshair not displayed (when enabled in game settings).
VERSION 3.6.1, April 2024
Common features:
- Implemented Deflate compression option for sprites.
- Removed length limits for: Game name, savegame folder, Character's script name and
regular name (description), Inventory item's name (description), Mouse cursor's script name,
Audioclip's script name.
Editor:
- Discontinued Source control integration functionality, removed "Put sound and sprite files
in source control" option from General Settings.
- In General Settings moved few properties to different groups for better consistency.
- Added "Scale Character sprite offsets" property to General Settings. This property refers to
scaling of Character.z and sprite offsets added by LockViewOffset script command.
- Added TextureCacheSize and SoundCacheSize properties to Default Setup. These let configure
the sizes of runtime texture and sound cache sizes respectively.
- Added "Leave room after fade-out" event to Rooms (called "Unload" by default).
- Added Translated property to all GUI Controls (was available only in ListBox). Translated
property tells whether this control's text has to be translated, and applied text direction
(in right-to-left text mode).
- Support '\n' linebreak character in the Label's Text and potentially other text properties.
- Improved Room Editor controls:
Added free panning mode done by holding the middle mouse button, or alternatively -
by holding Space + LMB.
Mouse Wheel without key modifiers scrolls the room vertically; Shift + Mouse Wheel scrolls
the room horizontally.
Zoom is done by Ctrl + Mouse Wheel and room now zooms towards or outwards the cursor position.
- In Room Editor the context menu is now displayed by RMB or Shift + RMB while editing masks.
The individual room mode menu is merged with the "copy coordinates" command when shown.
- In Room Editor the hint with coordinates is now also displayed when moving Objects or Characters
with keyboard.
- In Dialog Script editor support most Edit menu and context menu commands from the regular Script
editor, with a few exceptions.
- In Sprite Manager added command "View" -> "Show filenames" which toggles display of a sprite's
source filename under the sprites.
- Adjust sprites' import settings after "Crop sprite edges" command; this would ensure that these
sprites are restored from source file keeping their cropped sizes.
- During sprite export Editor will display a proper progress dialog.
- Zoom controls in Character and View panes now allow downscaling too. View editor displays the
preview sprite stretched to fill the parent panel.
- View editor now allows to select multiple frames at once, across multiple loops too, using
standard Shift + LMB and Ctrl + LMB combinations. Properties panel lets modify properties for
all the selected frames at once.
- Added "Replace with all sprites from folder" command to the View editor's context menu.
- For Audio Clips in the project tree added "Force Reimport", "Force reimport all file(s)" and
"Replace Source File" context menu commands.
- For Output Panel added "Copy selection" context menu command.
- Implemented Log Panel that lets you see the engine and game logs right in the Editor.
- Improved LipSync panel looks in case user's system has display scaling option enabled.
- "Goto Definition" command in script will now work for most of the game entities too, such as
Characters, GUIs, and so forth. In that case it will find a game's entity and open a respective
editor panel for it. This still does not work for some types, such as Room objects, and Views.
- Added main menu commands for opening a Project folder and Compiled folder.
- Added "Export Global Messages to script" menu command. This command is meant for upgraded
pre-3.2 game projects, and will generate a script with a String array, moving global messages
texts there.
- For script's tabs added a context menu command for opening this script's location.
- When run with "/compile" argument Editor will print all messages to the console (stdout),
instead of displaying modal message windows.
- For Android build target Editor now supports a directory to place plugins in.
- When building a game for Android and Linux the Editor will now be more tolerant to missing
plugins and only issue a warning instead of stopping with error.
- Config will now be saved in UTF-8, letting to support setup program's title text in unicode.
- For non-Windows build targets Editor will fix config containing Direct3D graphics driver
option and set OpenGL instead.
- For Color Themes: implemented character literal, braces match and braces error settings.
- Made Editor be somewhat more tolerate to missing XML nodes in Game.agf, in many cases it will
still let open a game.
- When upgrading older game projects, Editor will insert a call to SetRestartPoint() in the end
of the 'game_start' function in GlobalScript.asc. This is done to complement removal of an
automatic restart point in the engine. This inserted command is safe to remove.
- When upgrading pre-3.2 rooms with disabled SaveLoadEnabled property the Editor will reset
this property and insert a comment with a warning into the corresponding room's script.
This is done because this property is deprecated as is no longer accessible.
- Fixed Editor refusing to open a game if one of the translation files is missing.
- Fixed General Settings and Default Setup not working correctly right after importing
a pre-3.* game project.
- Fixed importing GIFs or 8-bit PNGs may lose transparent pixels if source images used
other palette index than 0 for transparency.
- Fixed Project Explorer's folders collapsing after certain user actions, such as dragging
items or renaming things.
- Fixed deleting collapsed "region" in script would sometimes lead to portion of the script
undeleted but staying invisible.
- (Possibly) Fixed a "Index out of range" exception in Script editor, related to the
"script location" drop-down list, which could occur at random circumstances while
working with the script, and any Color Theme is enabled.
- Fixed Editor could miss some of the files when cleaning up old compiled files after the
Game's Filename property is changed.
Scripting:
- Support "#else" preprocessor directive.
Script API:
- Implemented Room's "After fade-out" event.
- Added eEventLeaveRoomAfterFadeout event for the global "on_event".
- Added eEventGameSaved event which runs after game was saved.
- Expanded interaction functions for Character, Object, InventoryItem, Hotspot and Region types:
now they all receive respective object's pointer as a parameter, similar to GUI event functions,
as well as a cursor mode this interaction was run with, if applicable.
- Added Game.ResetDoOnceOnly(), which completely resets all DoOnceOnly instances.
- Added Game.PrecacheSprite() and Game.PrecacheView(), which preload certain sprites and linked
frame sounds into the engine's sprite cache memory.
- Added ScriptName property to AudioClip, Character, Dialog, GUI, GUIObject, Hotspot,
InventoryItem, Object.
- Added static GetByName() function to AudioClip, Character, Dialog, GUI, GUIObject, Hotspot,
InventoryItem, Object.
- Added Object.AnimationVolume property, which works similar to Character.AnimationVolume.
- Added static File.ResolvePath() and File.Path attribute.
- Added support for a text formatting to a number of functions:
DisplayAtY(), Character.SayAt(), Character.SayBackground(), DrawingSurface.DrawStringWrapped().
Engine:
- Updated to SDL 2.28.5 and SDL_Sound 2.0.3+.
- Significant performance improvement to scripts. Script running speed restored to a level
close to AGS 3.2.1. Testing few "script-heavy" games showed fps raise by up to 30-40%
compared with 3.6.0 engine.
- Improved performance of String objects in script. For instance, appending a character to
a String is now roughly x2 times faster, *sequential* iteration of String.Chars[] in Unicode
mode is about x12 (!) times faster (Strings in ASCII mode have relatively less improvement,
because they have been faster than Unicode mode already).
- Improved performance when creating, deleting and manipulating Overlays; allows the game
to have thousands of those with much less slowing down.
- Improved performance when updating and deleting dynamic sprites, and notifying any objects
that have to redraw themselves. Engine no longer resets Graphic properties of objects
referencing deleted dynamic sprite to 0.
- Implemented "texture cache", in addition to the existing "sprite cache". The texture cache
keeps textures generated from raw sprites and lets reusing them, improving performance
and reducing CPU workload. The actual impact is proportional to the game's resolution and
amount of simultaneously animated objects on screen.
- WFN font renderer now too supports unicode mode and renders texts in utf-8, so long as the
font contains glyphs of corresponding indexes.
- Buttons, ListBoxes and TextBoxes now support Right-to-left text direction.
- DrawingSurface.DrawString now supports Right-to-left text direction.
- All the script File functions now treat paths in case-insensitive way (including subdirs),
which makes them platform-independent.
- Removed an automatic SetRestartPoint() call at startup. This is done in case user does not want
to use default "restart" save slot, or has a custom save system.
- Support handling multiple mouse clicks per game frame, similar to how multiple key presses
were supported since 3.6.0.
- When starting up, engine will now precache only first 4 or 8 loops of the starting player
character's View. This is done to avoid filling sprite cache with too much sprites at once
in case when the player's View contains lots of additional animations.
- Characters will now have their graphic offsets, set by Character.z property and LockViewOffset()
function, scaled along with the character's own scaling. This is done so long as the respective
game option is enabled in the General Settings.
- Ensure that character and object scaling is updated even when the game is not drawn.
This fixes rare issues when their scale property did not update in time whilst the game was
completely fadeout, and similar cases.
- Allow to change Character's move speed while its moving.
- When Character is ordered a new move command while already moving, the engine will try to make
a smooth transition between old and new moving without a delay.
- Ensure that when Overlays have identical ZOrder they will be sorted in the order of their
creation. Besides convenience, this is also meant to restore historical behavior from before
Overlay.ZOrder property was introduced.
- Allow game to call DynamicSprite.CreateFromDrawingSurface() and CreateFromBackground()
with zero or negative size, clamping it to 1x1, in consistency with Create().
- Engine will now log a warning for the most incorrect parameters to Animate function instead
of quitting the game.
- Engine will now skip blocking Character.Say commands instantly while skipping a cutscene.
- Object.SetView now lets invalid loop and frame values, and fallbacks to using loop 0, frame 0,
printing a warning. This is also consistent with backwards-compatble SetObjectFrame() behavior.
- Changed Object.SetView() to not play a frame's sound, which could lead to a duplicated sound
play if Object.Animate is run right after.
- Text Overlays internal images are now registered as dynamic sprites, and their IDs may be
read from Overlay.Graphic. This lets find out their sizes using Game.SpriteWidth/SpriteHeight
and optionally draw them somewhere using DrawingSurface.DrawImage.
- Ensure all the script API is now correctly available for the plugins.
- Engine will now safeguard plugin's reading and writing of game saves, so that any mistakes
done by plugins won't affect other parts of a save.
- Engine will disable vsync in a "infinite fps" mode, because vsync prevents getting more fps.
- Engine will force any in-game debug messages to be displayed as blocking message boxes,
disregarding game's "Display all messages as speech" option.
- Display critical alerts as system modal message dialogs on all platforms that support that
(unless engine is run with "--no-message-box" parameter).
- Print some info about memory usage when reporting a "Out of memory" error.
- Deprecated in-game "console", as practically useless.
- Added new config settings in "graphics" section: "sprite_cache_size" (which replaces deprecated
"cachemax" in "misc") and "texture_cache_size".
- Fixed Characters may be seemingly "walking in place" for some time when arriving at destination.
- Fixed Display and Say commands treating the second met "&" sign as a voice-over token too
(they must only check the first one in string).
- Fixed PlayMP3File() function limiting filename argument by an arbitrary number of characters.
- Fixed speechlines were adjusting their Y position while trying to not overlap GUIs even when
these GUIs are completely offscreen.
- Fixed first Sierra-style speechline in a sequence was adjusting its Y position without need
when GUIs are set to be hidden during game pause (this includes blocking speech).
Normally, the speechlines are adjusting their Y position in order to not overlap GUIs,
but when GUIs are hiding during speech there should not be any need to do so.
- Fixed script behavior in case a local variable was assigned a value without being initialized
with a zero memory by compiler's intruction beforehand. This is not a problem with the standard
compiler, but technically could be an issue with any custom implementation.
- Fixed old-style letterbox viewport getting broken after loading an old pre-3.5.0 save.
Engine Plugin API:
- Added IAGSStream interface, IAGSEngine.OpenFileStream() and GetFileStreamByHandle().
- Added IAGSEngine.ResolveFilePath() method, which resolves a script path (with location tokens)
into a proper system filepath.
- Fixed IAGSEngine.GetFontType() incorrectly reporting TTF font type for WFN fonts with more than
128 characters.
Compatibility:
- In Editor, restored all the Character's variables available in "backward-compatible" mode.
This is primarily to make it easier to import very old games.
- Allow to run an animation over a loop with zero frames, by using the placeholder frame.
This lets particular old games to continue running instead of crashing with error.
- Fixed slower character walking speeds in pre-3.1 upscaled and high-resolution games.
- Fixed Object.SetView() and SetObjectFrame() not treating -1 for loop and frame as
"keep previous values" in older games.
- Fixed inventory window not updated after game.top_inv_item is assigned a new value.
- Fixed a "New Room" command in old-style dialog scripts was preventing "First time Enter room"
event to be called.
Windows:
- 32-bit Windows engine is now built as "large address aware" program, which will allow it to use
up to 3 GB of RAM on 32-bit systems and 4 GB of RAM on 64-bit systems (was 2 GB previously).
iOS:
- Updated port for 3.6.*.
Web / Emscripten:
- Fixed Safari cannot switch the game into fullscreen mode.
WinSetup:
- Added options for setting texture cache and sound cache size.
- Added options to disable particular graphic drivers and graphic driver selection,
and fullscreen mode selection.
---------------------------------------------------------------------------------------------------
VERSION 3.6.0 - Patch 11, April 2024
Editor:
- Fixed exception in Room Messages editor occuring if a certain game's Character is missing.
Engine:
- Fixed disabled GUIs not hiding their controls if "Hide all their controls" disabled style
is set in General Settings, and game is run with Direct3D or OpenGL renderers.
- Fixed "greyed out" GUI controls leaving traces on parent GUIs when running with Software
renderer.
- Fixed text parser in Dialog Options not working correctly if "new key handling" mode is on.
- Fixed DynamicSprite.SaveToFile() return value was inverse (regression in 3.6.0).
- Fixed engine crash in GetHotspotProperty() if the function is called with invalid ID.
- Fixed room Camera may fail to restore its position in the room after loading a save.
- Fixed fonts may not be assigned correct parameters when a new game is launched
by calling RunAGSGame() in script (regression since 3.6.0 or 3.5.*).
Compatibility:
- Fixed engine refusing to load saves made by 3.2.0 engine, although being capable to do so.
VERSION 3.6.0 - Patch 10, February 2024
Editor:
- Fixed a warning condition for copying 32-bit bitmaps to a desktop clipboard of less color depth.
- Fixed keyboard shortcuts for GUI Editor's Copy and Paste commands.
- Fixed a rare exception when scrolling the room in the editor.
- Fixed "Auto-number speech lines" and "Create voice acting script" operations failing
if a Character's name contains underscore.
Compiler:
- Fixed escaped character literals not being parsed correctly. This makes character literals
like '\n' and '\t' actually work in script.
Engine:
- Updated SDL_Sound library to 2.0.3.
- Improved OpenGL texture management, which should result in less system and video memory
spent on sprite textures.
- Fixed Character.AddWaypoint() potentially using wrong walkspeed, if multiple characters or
objects are ordered to start a non-blocking move in a mixed order.
- Fixed Character.AddWaypoint() is using incorrect speed if this room has a non 1:1 mask
resolution, and "Scale speed with mask resolution" setting is enabled.
- Fixed Overlay.Create() crashing the engine if a non-existing sprite is passed as an argument.
- Fixed Say("...") command get stuck in endless loop if Speech.DisplayPostTimeMs is non-zero.
- Fixed PlayFlic() not working if called second time in game.
This is likely a regression since 3.6.0.
- Fixed NumPad keys not handled properly by the engine (in on_key_press, IsKeyPressed, and TextBox
control). This is a regression since 3.6.0.
- Fixed OpenGL renderer causing scaled sprites to have colored outlines sometimes while using
Linear filter.
VERSION 3.6.0 - Patch 9, January 2024
Engine:
- Fixed engine incorrectly reporting a script loading error, which may occur if the total size of
script's global variables is bigger than the size of the compiled bytecode.
VERSION 3.6.0 - Patch 8, January 2024
Editor:
- Fixed command "Crop sprite edges" in the Sprite Manager would copy import settings from the
completely unrelated sprite onto the cropped one.
Engine:
- Fixed @GAMENAME@ label not updating if Game.Name property is changed at runtime.
- Fixed System.ColorDepth was reporting a final display resolution, while it should report game's
native resolution for historical reasons.
Compatibility:
- Fixed "upscale" mode not working for "default" game resolution in pre-3.1 games (the hidden
meaning of "default" is 320x200 also).
Windows:
- Fixed a rare bug when the Windows engine could fail loading the game for no good reason.
This error is related to a bug in Windows SDK 8.1.
VERSION 3.6.0 - Patch 7, December 2023
Editor:
- For Android build target disabled compression of `.ags` and `.vox` assets, as that slows down
engine streaming resources (sprites etc).
- Fixed Editor failing to start if user preferences file is corrupted
(this is a second fix, complementing one done in AGS 3.5.1).
- Fixed RAM use spiking fast during batch sprite reimport from sources, which could randomly
lead to program errors.
- Fixed Dialog properties displaying internal values not meant to be seen by a user.
- Fixed selecting parent GUI after its control did not display GUI's own properties in
the Properties Grid.
- Fixed Editor generating deprecated settings in the default config file.
Engine:
- Fixed GUI controls unexpectedly clipping parts of text even if "controls clip contents"
setting is disabled, in case when their Font has VerticalOffset property set.
VERSION 3.6.0 - Patch 6, November 2023
Editor:
- Fixed GUI editor could display selection rectangle from a different GUI editor pane,
if two or more are displayed on screen at the same time.
- Fixed "autoptr" and "builtin" keywords not colored as valid keywords in the script editor.
- Fixed character literals in a script editor having wrong colors when a Color Theme is applied.
Engine:
- Made String.Chars and Length properties work faster in ASCII mode.
- Issue a warning when blocking Display or Say commands are called during fade-out.
- Fixed engine failing to startup sometimes if controller device subsystem failed to init
(it should not init at all in this version, as we do not support joysticks yet).
- Fixed "Before fade-in" event could be called recursively under some peculiar conditions
(regression since 3.6.0).
- Fixed buttons on a non-clickable GUI were still changing to "mouse over" graphic under cursor.
- Fixed button click not registered if it has been made not visible and visible again during a
single game frame (regression since 3.6.0).
- Fixed TextWindow borders drawn behind the rightmost corner pieces, which may be seen if the
edge sprites are half-transparent.
- Fixed a brief black screen flash occuring right after the video playback ends
(regression since 3.6.0).
- Fixed engine refusing to load legacy saves if the audio clip count does not match
(number of audio clips should not affect saves).
WinSetup:
- Added an option to disable "smooth scaled sprites" setting.
- Added an option to disable language selection.
- Made filter names in "disabled" section treated in case insensitive way.
VERSION 3.6.0 - Patch 5, September 2023
Editor:
- Reimplemented multiple sprites properties editing in the Sprite Manager. This ability was
dropped in 3.5.0 unintentionally.
- Fixed Autocomplete not treating certain struct members as "static" or "protected" if their
declaration is too long.
Engine:
- Fixed Character.WalkStraight() was resetting walking animation if called during walking.
- Fixed Character's idle animation getting reset to frame 0 when the speech is played without
a valid speech view (idle animation should continue playing in such case).
- Fixed idle animation sometimes not starting immediately after Character finishes walking.
- Fixed a crash occuring if script tries to get or set a custom property for a non-existing
Room Object (this seem possible to do by iterating over `object[]` array).
Compatibility:
- Implemented "legacysave_assume_dataver" override option in config, which lets to instruct the
engine which game data version to assume when restoring legacy (pre-3.5.0) saves. This "hack"
appeared to be necessary because of a mistake done during development of the older engine
versions, where the save format was changed, but engine was made to rely on the game data
version instead of incrementing save format index.
- Implemented "legacysave_let_gui_diff" override option in config, which lets the engine to
read less gui elements from restored save than the number registered by the game.
This is to emulate a (possibly unintended) effect in pre-3.5.0 saves.
- Fixed engine could try to load game data from game.exe without checking whether data is actually
appended to it when restoring a legacy save in a game with a different file structure.
- Fixed number of GUI elements were not tested when loading a legacy save, which could lead to
GUI data getting overwritten incorrectly without a warning if number of controls changed since.
If the test failed, engine will act according to "legacysave_let_gui_diff" config option:
either quit with error or log a warning and continue.
Plugins:
- Fixed potential "index out of bounds" exceptions in the built-in PalRender plugin.
VERSION 3.6.0 - Patch 4, August 2023
Editor:
- Export Game's Title into translations.
- Fixed Game.agf was not created after importing a 2.* game project (regression in 3.6.0).
Engine:
- Character.AnimationVolume property is now applied to the portrait animation as well.
- Removed few of the less important game messages from logging, because they may quickly clutter
the log under some circumstances.
- Fixed when animating a character portrait, the first frame's linked sound is not played.
- Fixed IsSpeechVoxAvailable() returning positive result if run from IDE and Speech folder
is empty.
- Fixed speech and messages were skipped by modifiers and other special keys (Ctrl, Alt, etc).
- Fixed crash occuring when you resize DynamicSprite while it is displayed on screen.
- Fixed audio clip started right before a ChangeRoom would not play until after the room changes.
- Fixed in Software display mode the room Overlays may not be properly covered by a walk-behind
under very specific conditions.
- Fixed System.Log() would cause engine crash if there are more format placeholders than args.
- Fixed some game options that are not allowed to be changed at runtime could still be
overwritten when restoring an old save, leading to a weird game behavior.
VERSION 3.6.0 - Patch 3, July 2023
Editor:
- Don't error when loading a room file which has unsupported number of events,
instead these will be cut out. This may let e.g. use room templates from newer
versions of AGS.
- Sprite's default property is changed from deprecated Resolution setting to SourceFile.
- Fixed full spritefile recreation would write duplicate sprites into the spritefile,
if game project (Game.agf file) contained multiple sprites with same ID for any reason
(for example, if they were added by manually editing Game.agf).
- Fixed importing SCI fonts with >128 chars.
- Fixed font preview did not properly display characters with indexes 128-255.
Engine:
- Fixed "noloopcheck" script function modifier was not handled correctly sometimes.
- Fixed a button with inventory placeholder did not update immediately when the active
inventory is set.
- Fixed textual GUIs were not redrawn immediately after a call to SetGameOption(OPT_RIGHTTOLEFT).
VERSION 3.6.0 - Patch 2, June 2023
Common:
- Fixed a TTF font could cause a crash in the Editor or the Engine if the font renderer tries
to draw a letter with higher number than the highest glyph number in the font.
Editor:
- Added "Restore all sprites..." command to the Sprite Manager's context menu
(this duplicates the "File -> Recreate sprite file" menu command added previously).
- Refresh Sprite Manager after fully recreating a sprite file.
- Sprites will now hide their "Resolution" property if the game settings have "Allow relative
asset resolutions" disabled. This is to avoid user's misuse of this property.
- Fixed a minor memory leak occuring when editing a tree item's label in Project Explorer.
Engine:
- Engine will now find and load plugins in the game dir when run from a different location.
- Fixed crash occuring if Character was told to FaceLocation while "Turn to face" game
setting is enabled, and character's View does not have enough loops.
- Fixed Character resetting current non-blocking animation if it was ordered to Move,
as soon as it arrives at destination.
- Fixed crash occuring if a GUI button was somehow set a negative NormalImage number.
- Fixed "bad script stack" error could be sometimes displayed if the game was aborted in
the middle of running a script.
VERSION 3.6.0 - Patch 1, May 2023
Editor:
- Fixed room's deprecated setting LegacyMusicVolumeAdjustment not applied correctly.
Engine:
- Fixed Room Objects whose dynamic sprite was deleted in "leave room" event becoming
invisible during fade-out transition. Logically this has to happen, but historically
they kept displaying until the transition end, so we restored this behavior for compatibility,
and simply because there's no "after fade-out" event in the engine yet to delete these sprites.
- Fixed Game.StopAudio() fails to remove queued clips if no particular audio type id is requested.
- Fixed performance regression in the script related to long loops (regression in 3.6.0).
- Fixed memory leak occuring when printing text in Right-to-left mode (regression in 3.6.0).
- Fixed rare mistake during text wrapping which may occur if a Unicode text is cut in the middle
of the word.
- Fixed playing certain WAVs caused game to freeze forever on exit.
Compatibility:
- Fixed frame-linked sounds not playing in the games made before 3.6.0.
- Allow game to call DynamicSprite.Create() with negative size, clamping it to 1x1.
VERSION 3.6.0, April 2023
Common features:
- Full Unicode support for all game texts: game properties, scripts, translations, input.
ASCII/ANSI mode is still working, for backwards compatibility. This may be configured
in the game project.
- Extended sprite compression options: lossless storage optimization for 16- and 32-bit
sprites; LZW compression option for sprites in addition to existing RLE compression.
- GUI controls may now be told to clip their contents, which means that nothing gets drawn outside
of their borders (as defined by X, Y, Width, Height properties). The only exception is Sliders,
which are more complicated.
- The historical TTF fonts' "fixup" that altered their height and vertical offset is now
optional and works only if backwards compatible option is set.
- Max number of AudioChannels is now 16 (was 8).
- Removed game Cursors hard limit (was 20).
- Increased Room Objects limit to 256 (was 40).
- Discontinued "Windows Game Explorer" support in both Editor and Engine.
Editor:
- Editor requires .NET Framework 4.6 to run.
- Added Android build target support (requires "Android component" installed).
- Added Web/Emscripten build target support (requires "Web build component" installed).
- Expanded UI color theme format, support global color options and allow missing entries.
- Script editor works in unicode mode.
- Added "Text format" option in General Settings which lets switching between ASCII/ANSI and
Unicode (UTF-8) modes. This defines which format the game texts will be written in, when
saving the game project and compiling the game.
- Added "Use old-style keyboard handling" option to the General Settings, which lets select
between classic key press handling and new one meant for unicode chars support in scripts.
- Supports compiling UTF-8 translations. TRS file now has "Encoding" setting that tells
how to interpret this TRS text.
- Added support for building multiple speech voxes, by taking files from the Speech subfolders.
- Added support for adding custom files into the game package. This is done by assigning
a list of directories to "Package custom data folder" option in General Settings.
- Editor now copies a acsetup.cfg file from the project's root folder (if one is provided by)
as a base for generating default config file. Settings from Default Setup will be written over,
but other found options won't be removed.
- Added "Sprite file compression" option in General Settings, replacing "Compress the sprite file"
option. The new option allows a selection of compression algorithm used for sprites. Currently
supported: None, RLE (old default compression) and LZW.
- Added "Enable sprite storage optimization" option to the General Settings, that permits the
editor to repack sprites in a different storage format, reducing their disk size whenever
possible. This option may be used alongside with the sprite compression. Note that this does not
change how the sprites work in game.
- Added "GUI controls clip their contents" option to the General Settings.
- Added "TTF fonts height used in the game logic" option to the General Settings, that makes
your game use real font's pixel height when arranging text and text-based UI elements,
as opposed to the nominal font's size.
- Added "Touch to Mouse Emulation", "Touch to Mouse motion mode" and "Display FPS on Screen" to
Default Setup. Removed few deprecated options.
- Added "TTF font adjustment" property to Fonts, as well as to General Settings where it serves
as a project default for the new fonts. This property lets you choose between "no changes" and
backward compatible TTF fixup meant to keep fonts made for AGS displayed as they were meant to.
- In the "Import TTF" dialog added a choice to import the size closest to the given pixel height.
- Fonts now have Auto Outline Style and Auto Outline Thickness properties.
- Fonts now have a readonly Family Name field, that lets user see the original name of a font
they've imported (if available).
- Added IdleDelay property to Characters that lets you set time needed to pass before IdleView
is activated. This is equivalent to the Character.SetIdleView script function.
- Added Character.IdleAnimationDelay property to let setup idle view's animation speed.
- Added Cursor.AnimationDelay property to let setup cursor's animation speed.
- The TextWindow edges now have distinct names in the dropdown list of the property grid.
- Rooms created from a Blank template will now have default background of a game's resolution.
- When creating new room objects they will now have their script names set to some default value.
- Added Room.BackgroundAnimationEnabled property to let have disabled animation on room load.
- Editor will now create an empty sprite file if one is missing in the game project. Any existing
sprite descriptions in the project will be kept, letting user to reimport these from sources.
- Added "File -> Restore all sprites from sources" menu command.
- Added "Apply" button on editor's Preferences dialog.
- In Preferences replaced "Import Color Theme" with a "Open Theme Folder", as a temporary solution
for managing theme files.
- Select script editor's font in the editor's Preferences.
- Added "Help" option to the editor pane's tab context menu.
- Upgraded script editor to Scintilla 3.21.1 and ScintillaNET 3.6.3.
- Cursor's position in script is now displayed on the status bar.
- Dialog scripts now too can open help topics for keywords or script functions under cursor on F1.
- Added zoom controls for the Sprite Manager, Character, Cursor, Inventory and View panes.
- Sprites may now be imported by drag'n'drop into the Sprite manager.
- In sprite manager's context menu added command "Create source files for all sprites with missing
/ external sources..."
- In sprite manager's context menu added (restored) command "Replace sprite using previous files".
Also made "previous file" remembered consistently whenever a sprite is imported or replaced.
- In sprite manager's "export all" dialog added "skip if inside project's folder" option.
- In sprite manager's "export all" dialog added "reset tile settings" option.
- On the View pane the frames having set delay and linked sound will be now indicated with icons.
- Editor no longer errors and fails when opening a game project with some script files missing.
- Editor no longer errors on empty translations when compiling the game.
- Editor now exports values of the string type Custom Properties to translations.
- Editor no longer prevents exporting string arguments from Get/SetTextProperty calls to TRS file.
- Editor now cleanups spritefile on game load, identifying any data not referenced by the project
and marking it for deletion.
- Fixed editor silently enabling all available Build Targets when upgrading a pre-3.4.0 project.
This could be very inconvenient as there are several of them supported now.
- Fixed open folders in the Project Tree were collapsing whenever you create a new subfolder or
change an object's name in properties.
- Fixed editor was not preventing from entering Character's and AudioClip's ScriptName too long
for the engine to handle.
- Fixed Image and View properties in various objects were allowing negative values.
- Fixed some of the object previews (at least GUI) could crash if user entered a non-existing
sprite's number as an Image property.
- Fixed editor displaying unhandled exception if the script which user is trying to open was
missing. Instead it will now open a blank script.
- Fixed room editor was suggesting to save the modified room even if no changes were made.
- Fixed a recently imported sprite could be displayed incorrectly scaled up in the room editor
for high-resolution games, if the "Allow relative asset resolutions" was enabled in General
Settings, and the sprite 0 had "Resolution" property set to "Low".
- Fixed program crash occuring on sprite's import if failed to open a source file for any reason.
- Fixed View animation preview stopping at frame 100 (if loop contains over 100 frames).
- Fixed going to a "find all" result in dialog script did not highlight the found text,
and sometimes did not scroll down to it.
- Fixed "Goto Definition" not working for Enums and Defines (macros).
- Fixed script autocomplete sometimes was not updated right after opening a script.
- Fixed script autocomplete for function calls was mistreating commas in strings and inline
comments as if they were separating actual parameters.
- Fixed script autocomplete was not displaying members of extended structs if the parent struct
was declared in another header.
- Fixed script autocomplete was not working for enum names.
- Fixed structs and enums were not highlighted if declared inside a script's body.
- Fixed in dialogs numbers inside names were incorrectly highlighted as numeric values.
- Fixed matching or mismatching braces were not highlighted consistently at all times in
regular and dialog scripts.
- Fixed crash occuring when user was trying to set breakpoint on the very last line in script.
- Fixed few editor panes were not opening correct help topics in F1.
- (Possibly) fixed error message text in the runtime error popup could be drawn partially beyond
the popup borders if the user's system has text scaling option enabled.
Compiler:
- Support unicode character literals.
- Support using float literals when defining default values for function arguments.
- Support hexadecimal number literals (e.g. "0xABCDEF").
- Removed 500-characters line limit.
Script API:
- Expanded `on_key_press` callback, now supports two parameters: key code and key modifier flags.
- In the new key handling mode `on_key_press` is called for each actual key press;
e.g. combinations like Ctrl+Z will result in two `on_key_press` calls, one with eKeyCtrlLeft and
second with eKeyZ; added support for "NEW_KEYINPUT_API" macro in scripts.
- Implemented new `on_text_input(int ch)` callback which is called when the engine receives
a printable character. This callback is essential for handling unicode chars in script.
- Similarily, expanded `dialog_options_key_press` with the third `mod` argument, and implemented
`dialog_options_text_input` callback for receiving unicode chars during the custom dialog
options state.
- Implemented `dialog_options_close` callback which is called when custom dialog options are
removed from the screen. This allows to perform any required cleanup.
- Added eEventEnterRoomAfterFadein event for `on_event` callback, which corresponds to
"enter after fade-in" room event.
- Added eKey constants for Shift, Control and Alt keys.
- Added eKeyMod enum for key modifiers constants.
- String.AppendChar(), ReplaceChar() functions and String.Chars[] property are now working with
the unicode characters.
- String.Format("%c") specifier will now be able to print unicode characters.
- Extended Button.Animate() to have blocking style, direction and starting frame parameters, thus
matching other Animate commands (of Character and Object).
- Extended all Animate() commands by adding "volume" parameter, that defines volume of the
frame-linked sounds for the duration of this animation.
- Added Character.AnimationVolume, defining volume of the frame-linked sounds.
- Added Character.IdleAnimationDelay to let control idle view's animation speed.
- Character.Scaling is no longer limited by a range of 5-200 (now supports 1-32767).
- Hotspot.Name and Object.Name may now be set in script.
- Added Object.ManualScaling and Object.Scaling.
- Deprecated Object.IgnoreScaling (use Object.ManualScaling instead).
- Object.SetView default loop & frame values are now 0 (was -1 which retained loop and frame
indexes from the previous view, often unexpected to the user).
- DrawingSurface.DrawImage() and DrawSurface() now support optional source rect coordinates.
- Added functions for getting DrawingSurface of room masks: GetDrawingSurfaceForWalkableArea(),
GetDrawingSurfaceForWalkbehind(), Hotspot.GetDrawingSurface(), Region.GetDrawingSurface().
- Added new delay parameter to Mouse.ChangeModeView() to let control cursor's animation speed.
- Added Game.ChangeSpeechVox() and Game.SpeechVoxFilename, support switching the voice-over pack.
- Added Mouse.AutoLock property that toggles automatic mouse lock inside the game window.
- Added Room.Exists().
- Added System.Log().
- Added SkipWait() that skips any active Wait() function.
- Added WaitMouse() to complement existing Wait functions.
- Added InputType enum which defines input devices and lets create their sets as flags.
- Added WaitInput(), a more generic and extendable function that accepts a combination of flags
telling which input types to wait for.
- All Wait* functions now may have infinite timeout if you pass a negative timeout parameter.
- All Wait* functions now return the reason they were skipped: a combination of InputType flag
and a respective key or button code.
- Added GUIControl.Transparency property.
- Added Overlay.CreateRoomGraphical and CreateRoomTextual. Use these two functions to create
"room overlays": that is - overlays that display a sprite inside the room, sorted among other
room objects, characters and walk-behinds.
- Added readonly Overlay.InRoom property that tells if this is a room or screen overlay.
- Extended Overlay.CreateGraphical() with a new "clone" parameter that tells whether to assign
a sprite index, or make a sprite's copy owned exclusively by this overlay. The former will
save program memory but make overlay update if the sprite is edited later. The latter is
meant primarily for backwards compatibility. Overlay.CreateRoomGraphical has the same param.
- Added Overlay.Graphic property that lets you change overlay's sprite after it's created.
- Added Overlay.Width and Height properties, that let you freely scale existing Overlay.
- Added readonly Overlay.GraphicWidth and GraphicHeight properties that let read original
overlay's graphic size, as not all overlays hold a sprite reference (e.g. textual overlays).
- Added Overlay.Transparency property.
- Added Overlay.ZOrder property that lets you sort Overlays among themselves and other objects
in the same "game layer": screen overlays are sorted among GUI, while room overlays are
sorted among room objects, characters and walk-behinds.
- Added Speech.TextOverlay and Speech.PortraitOverlay for accessing blocking speech overlay
and portrait overlay respectively.
- Added Game.BlockingWaitSkipped which tells the result of the last blocking wait skipping,
also including result of the blocking speech skipping.
- SkipSpeechStyle now supports eSkipNone mode; when used it will disable any kind of skipping,
such speech can be only skipped by a direct command from script.
- Extended Screen.ScreenToRoomPoint() with an optional "restrictToViewport" argument, which
lets to choose whether tests over empty place result in conversion through the default
viewport or a null pointer.
- Added AudioClip.PlayOnChannel().
- Added AudioChannel.Pause() and Resume() functions, and IsPaused property.
- Added AudioChannel.SeekMs(), complementing PositionMs (as the Seek() function interprets
position differently depending on the audio format).
- PlayVideo() now supports an option to play both game's and video's audio track simultaneously.
- Added File.WriteRawInt() to complement ReadRawInt().
- File paths in script now support $DATA$ token, which tells to read files from the game package.
This only works for read operations. Functions that support this token currently are:
File.Open(), DynamicSprite.CreateFromFile(), ListBox.FillDirList().
- Debug(2, 0) command that displayed walkable areas is superceded by Debug(2, n), where "n" is
a mask type: 0 - none, 1 - hotspots, 2 - walkbehinds, 3 - walkable areas, 4 - regions. This
command also works as a toggle switch, calling it with the same mask index will turn it off.
- Debug(5, n) command that displayed character's walk paths now also works as a toggle switch.
Engine:
- New SDL2-based backend for graphics, audio and input.
- Hqx graphic filters discontinued (could be temporary).