AGS 3.4.0.6 (Alpha) - Builder Patch

Started by Crimson Wizard, Sat 27/09/2014 17:25:18

Previous topic - Next topic

Crimson Wizard

AGS 3.4.0.6 (Alpha) - Builder Patch

Download 3.4.0.6 (alpha) as a .zip archive

Download Linux build package
(unarchive into Editor directory to enable building game for Linux)

Source code: https://github.com/adventuregamestudio/ags/tree/develop-3.4.0

Debug symbols (for developers):
http://www.mediafire.com/download/jwu9jg3hm0bwlmo/PDB_3_4_0_6.zip


Previous alphas:
Spoiler

ACHTUNG!
This is a development version of AGS 3.4.0.
Use at your own risk. Please back up any games before opening them in this version of AGS.
New settings in this version may make your project files unusable in 3.3.0 after saving with this version.

Last updated: 28th of July, 2015
Includes all changes from AGS 3.3.3 release
The differences from 3.4.0.5 are marked with NEW sign.


Common features

Custom game resolutions
Make your game in any sensible or non-sensible resolutions, such as 1280x720, 1920x1080 or, heck, 233x856.
A proof that weird res work too:
Spoiler


[close]

Game resolution is now set not by simple drop-down list, but with a slightly more advanced dialog.
Spoiler



Select "Resolution" option and click on "..." button



In the dialog either choose one of the presets, or type in your own width & height, then press OK.
[close]


Extended WFN Font Support

Support was added for extended characters in WFN fonts (those with codes 128 - 255).

Papagayo lip sync

Support was added for Papagayo lip-sync format. The use is similar to Pamela lip-syncing (see "Lip sync" topic in the manual for more information).

Changed system limits


ItemOld limitNew limitComments
Custom properties30unlimited
Custom property name and value lengths20 / 500unlimited
Controls on GUI30unlimited
GUI name length20unlimited
Script modules50unlimited
Script symbols per script10,000unlimited


Engine

Free display resolutions

Run AGS games in literally any resolution your computer supports, with or without black borders. (Nearly) unlimited scaling up and down is supported. Run those old 320x200 games in 1920x1080 HD.
New Winsetup will help you to set things up.

Known issues so far:
- Do not expect magic from downscaling. When you shrink hi-res game more than 1.5-2 times down it becomes barely recognizeable (and font unreadable).
- There's a weird issue with mouse movement when you run a low-res game unscaled in a large fullscreen window. I am still looking into fixing this.

Full Screen VSync for Direct3D

This feature was previously available (but always on) in Draconian editions of AGS. With AGS 3.3.1, it has been integrated into the mainline builds. It's now possible to toggle VSync using the "Vertical sync" checkbox in Winsetup.exe. If it's checked, the game starts with vertical sync turned ON. In DirectX 5 mode, you can still toggle this by setting System.VSync to true/false. In DirectX 9 mode, the System.VSync property is now read-only (as opposed to being useless previously).

Improvements

  • In 32-bit games DrawingSurface.DrawImage() now properly applies overall transparency when drawing opaque sprites over surfaces with alpha channel.
  • DynamicSprite.CopyTransparencyMask() now does not overwrite transparency on destination with opaqueness from mask.
  • Engine will now try to use all available graphic renderers in an order of priority, if the previous ones fail.
    (Now Direct3D will be tried if Software renderer was requested by user but failed.)

Bug Fixes

  • The engine now moves the portrait with the speaking character when using BasedOnCharacterPosition if the speaking character moves between calls to Say
  • Fixed occasional pathfinding failure on straight lines with complex walkable areas (reported here)
  • Printing [ no longer consumes all of the backslashes before it (e.g. "\\[" should now print \[ as expected)
  • Fixed crash that could occur when the screenshot is taken while game window is moved, minimized or restored
  • Fixed WAVE audio not looping after restoring a game
  • Fixed a bug that caused MP3 clip continuously increase its base volume if the directional volume modifier was applied.



Scripting

For statement

In addition to a while loop, you can now use a for loop in AGS script. The syntax is:
Code: ags
for([initialisation];[condition];[increment])
{
    [loop body]
}

Examples:
Code: ags
for(player.x = 0; player.x < 100; player.x++)
    Wait(1);

Code: ags
for(int i = 10; i > 0; i--)
    Display("i = %d", i);


Break statement

You can now break out of loops using the break statement. For example:
Code: ags
i = length - 1;
while(i >= 0)
{
    if(page[i] == target)
        break;
    i--;
}

Will halt the loop when a match is found or leave i as -1 if there was no match.

Continue statement

You can now continue to the next iteration of a loop using the continue statement. For example:
Code: ags
for(x = 0; x < 100; x++)
{
    if(x % 2 == 0)
        continue;
    Display("%d", x);
}

Will display only odd numbers between 0 and 100.

Do...While loops

The Do...While loop construct is now supported. For example:
Code: ags
x = 1;
do
{
    x++;
    Display("%d", x);
} while(x < 1);

Unlike While, Do...While runs the loop iteration *before* evaluating the condition. The loop above will run once.

NEWSwitch statement

Added support for "switch" statement. Strings and other variable types are allowed to be checked in switch condition.
Standard case statement features like fallthrough and break are also supported.

Example:
Spoiler
Code: ags

String x = "a";

switch(x)
{
case "a":
    Display("X is A");
case "b": // fall-through
    Display("X is B");
    break;
case "c":
    Display("X is C");
case "d": // fall-through
default: // fall-through
    Display("X is D");
}
[close]



Dynamic Arrays in Structs

Dynamic arrays are now permitted inside structs.
Spoiler

You can declare a struct like so:
Code: ags

struct DieRoll
{
    int BaseModifier;
    int DieCount;
    int Dice[ ];
    import function GetTotalValueOfRoll();
};

function PrepareDice()
{
    DieRoll a;

    a.DieCount = 3;
    a.Dice = new int[a.DieCount];
    a.Dice[0] = 6; // d6
    a.Dice[1] = 6; // d6
    a.Dice[2] = 8; // d8
    ...
}

And the dynamic array "Dice" can be initialised and used like any other dynamic array.
[close]

Dynamic arrays returned by Struct member Function.

It is now possible to define a member function of a struct, that returns dynamic array.
Spoiler

Code: ags

struct MyClass
{
	int Max;
	int Arr[];
	
	import void  InitArray(int max);
	import int[] GetArray();
	import int   GetArrayLength();
};

void MyClass::InitArray(int max)
{
	this.Max = max;
	this.Arr = new int[this.Max];
	int i;
	for (i = 0; i < this.Max; i++)
		this.Arr[i] = i;
}

int[] MyClass::GetArray()
{
	return this.Arr;
}

int MyClass::GetArrayLength()
{
	return this.Max;
}

function game_start() 
{
	MyClass my_obj;
	my_obj.InitArray(5);
	int get_arr[] = my_obj.GetArray();
	int i;
	for (i = 0; i < my_obj.GetArrayLength(); i++)
		Display("#%i = %i", i, get_arr[i]);
}

[close]

Managed User Structs

In AGS parlance, a managed struct is a struct that can be created dynamically. You must use pointers to refer to them (similar to built-in types like Region or Hotspot). You declare them with the keyword "managed" and construct new instances with "new", like so:
Code: ags

managed struct Point
{
    int X;
    int Y;
};

Point *GetPosition()
{
    Point *result;

    result = new Point;
    result.X = 30;
    result.Y = 40;

    return result;
}

Important: Managed structs are currently VERY limited in that they can't contain pointers (including dynamic arrays). It is hoped that this restriction will be lifted in the future.

#define Improvements

#define can now refer to other #define'd constants. Like VC++, #define symbol expansion only needs to make sense at the time of reference. Also like VC++, the order of previously defined constants isn't important, making stuff like this possible:
Code: ags

#define RED    GREEN
#define BLUE   456
#define GREEN  BLUE
Display("%d", RED); // Prints 456
#undef BLUE
#define BLUE  123
Display("%d", RED); // Prints 123

Note: To prevent circular references, a #define cannot refer to itself or anything previously used to expand the #define symbol.

Static extender functions

You can now declare the first parameter of a function as a static identifier that corresponds to a struct, e.g.
Code: ags
function AbsInt(static Maths, int value)
{
    if(value < 0)
        value = 0 - value;
     
    return(value);
}

This works in the same way as the normal extender method syntax (e.g. this Character *) but for static methods. The above code will define a new method in the static Maths called AbsInt. You can then import it in a header:
Code: ags
import function AbsInt(static Maths, int value);

And then use it elsewhere in your code just like it were a built-in Maths function:
Code: ags
int x = Maths.AbsInt(-3);


Extra Assignment Operators

The following C-style assignment operators are now supported:
*=   (Multiply by and assign)
/=   (Divide by and assign)
&=   (Bitwise AND and assign)
|=   (Bitwise OR and assign)
^=   (Bitwise XOR and assign)
<<=  (Bitshift left and assign)
>>=  (Bitshift right and assign)

Code Regions

This was previously available in Draconian editions of AGS. You can define an arbitrary region for code folding in your script like so:
Code: ags
#region MyRegion
do stuff;
do stuff;
do stuff;
#endregion MyRegion

The AGS editor will allow you to fold and unfold this region as though it were a code block. This has no effect on compiled code.

Bug Fixes
NEW

  • Fixed incorrect compiler parsing of a static function call inside array index brackets.
E.g:
Code: ags

int i = array[Game.GetColorFromRGB(0, 0, 0)]; // there was parse error after '['





Script API

Direction parameter for Character.ChangeRoom

This feature was previously available Draconian editions of AGS. The Character.ChangeRoom function now looks like this:
Code: ags
Character.ChangeRoom(int room, optional int x, optional int y, optional CharacterDirection direction)

Where CharacterDirection is a new built-in enum defined for facings (eDirectionUp, eDirectionUpLeft and so forth).

Character.DestinationX and Character.DestinationY

Two new read-only properties that can be used to determine where a character is currently heading (via a Walk command). If the character is currently stationary, these values are the same as Character.x and Character.y, respectively.

Character.FaceDirection

This function lets you to turn character to particular direction using new Direction enum (eDirectionUp, eDirectionUpLeft and so forth).

Global functions moved to Room class
GetRoomProperty ---> Room.GetProperty
ProcessClick -> Room.ProcessClick

GetRoomProperty is now Room.GetProperty to match Room.GetTextProperty. The old ProcessClick is now Room.ProcessClick.
You may need to fix your scripts if you use any of these, or disable "Enforce object-based scripting" option in Game Settings.

IsInteractionAvailable() for Other Types

This is another feature from Draconian editions of AGS. The IsInteractionAvailable() method can now be called on Hotspots, Objects and Characters.

Audio Clips API

There are two new properties for dealing with audio clips in this version.
Code: ags
Game.AudioClipCount

Retrieves the number of clips and
Code: ags
Game.AudioClips[n]

Allows you to access a particular audio clip.

AudioChannel.Speed.
The new property used to get or set audio clip's playback speed. The value is defined in clip's milliseconds per second; 1000 is default, meaning 1000 of clip's ms in 1 real second (scale 1:1). Set < 1000 for slower play and > 1000 for faster play.
NOTE: currently implemented for MP3 and OGG only.
NOTE: the engine will also map "AudioChannel.SetSpeed" function to this property, therefore you can run Gord10's "Self" game using new interpreter (e.g. on Linux).

Plugin API

There is now a new function that can be used to detect whether a plugin has been loaded:
Code: ags
Game.IsPluginLoaded(const string name)

Where name is the filename of the plugin

Improved Custom Dialog Options rendering

Following callbacks are now supported for custom dialog options rendering:

Code: ags

  // runs each tick when dialog options are on screen
  void dialog_options_repexec(DialogOptionsRenderingInfo *info);
  // runs when user pressed a key while dialog options are on screen
  void dialog_options_key_press(DialogOptionsRenderingInfo *info, eKeyCode key);


Additionally following items added to DialogOptionsRenderingInfo struct:
Code: ags

  bool RunActiveOption(); // runs the active dialog option (defined with ActiveOptionID property)
  void Update(); // forces dialog options to redraw itself ("dialog_options_render" callback will be called)


--- ATTENTION, breaking changes! ---
* You must now explicitly run active option, even if you use mouse controls.
* You must now explicitly reset active option if the mouse is not above options UI
* The "dialog_options_get_active" callback is now NOT called, at all. It is supported only for backwards compatibility when running old games.
You will need to slightly change the logic of your script. In most cases it will be enough to simply rename "dialog_options_get_active" to "dialog_options_repexec".


Following are two examples of making custom dialog options with the new script system:

1. Classic mouse controls
Spoiler

int dlg_opt_color = 14;
int dlg_opt_acolor = 13;
int dlg_opt_ncolor = 4;

function dialog_options_get_dimensions(DialogOptionsRenderingInfo *info)
{
    // Create a 200x200 dialog options area at (50,100)
    info.X = 50;
    info.Y = 100;
    info.Width = 200;
    info.Height = 200;
}

function dialog_options_render(DialogOptionsRenderingInfo *info)
{
    info.Surface.Clear(dlg_opt_color);
    int i = 1,  ypos = 0;
    // Render all the options that are enabled
    while (i <= info.DialogToRender.OptionCount)
    {
        if (info.DialogToRender.GetOptionState(i) == eOptionOn)
        {
            if (info.ActiveOptionID == i) info.Surface.DrawingColor = dlg_opt_acolor;
            else info.Surface.DrawingColor = dlg_opt_ncolor;
            info.Surface.DrawStringWrapped(5, ypos, info.Width - 10,
                    eFontFont0, eAlignLeft, info.DialogToRender.GetOptionText(i));
            ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontFont0, info.Width - 10);
        }
        i++;
    }
}

function dialog_options_repexec(DialogOptionsRenderingInfo *info)
{
    info.ActiveOptionID = 0;
    if (mouse.y < info.Y || mouse.y >= info.Y + info.Height ||
        mouse.x < info.X || mouse.x >= info.X + info.Width)
    {
        return; // return if the mouse is outside UI bounds
    }

    int i = 1, ypos = 0;
    // Find the option that corresponds to where the player clicked
    while (i <= info.DialogToRender.OptionCount)
    {
        if (info.DialogToRender.GetOptionState(i) == eOptionOn)
        {
            ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontFont0, info.Width - 10);
            if ((mouse.y - info.Y) < ypos)
            {
                info.ActiveOptionID = i;
                return;
            }
        }
        i++;
    }
}

function dialog_options_mouse_click(DialogOptionsRenderingInfo *info, MouseButton button)
{
    info.RunActiveOption();
}

[close]

2. Keyboard controls
Spoiler

int dlg_opt_color = 14;
int dlg_opt_acolor = 13;
int dlg_opt_ncolor = 4;

function dialog_options_get_dimensions(DialogOptionsRenderingInfo *info)
{
    // Create a 200x200 dialog options area at (50,100)
    info.X = 50;
    info.Y = 100;
    info.Width = 200;
    info.Height = 200;
    info.ActiveOptionID = 1; // set to first option
}

function dialog_options_render(DialogOptionsRenderingInfo *info)
{
    info.Surface.Clear(dlg_opt_color);
    int i = 1,  ypos = 0;
    // Render all the options that are enabled
    while (i <= info.DialogToRender.OptionCount)
    {
        if (info.DialogToRender.GetOptionState(i) == eOptionOn)
        {
            if (info.ActiveOptionID == i) info.Surface.DrawingColor = dlg_opt_acolor;
            else info.Surface.DrawingColor = dlg_opt_ncolor;
            info.Surface.DrawStringWrapped(5, ypos, info.Width - 10,
                    eFontFont0, eAlignLeft, info.DialogToRender.GetOptionText(i));
            ypos += GetTextHeight(info.DialogToRender.GetOptionText(i), eFontFont0, info.Width - 10);
        }
        i++;
    }
}

function dialog_options_key_press(DialogOptionsRenderingInfo *info, eKeyCode keycode)
{
    if (keycode == eKeyUpArrow && info.ActiveOptionID > 1)
        info.ActiveOptionID = info.ActiveOptionID - 1;
    if (keycode == eKeyDownArrow && info.ActiveOptionID < info.DialogToRender.OptionCount)
        info.ActiveOptionID = info.ActiveOptionID + 1;
    if (keycode == eKeyReturn || keycode == eKeySpace)
        info.RunActiveOption();
}
[close]

Dialog Options

The highlight colour for dialog options (default rendering) is no longer hard coded as yellow (14). You can use:
Code: ags
game.dialog_options_highlight_color = xxx;

And set the dialog options highlight colour to whatever you like. The default is 14.

GUIControl.ZOrder

New property of a GUIControl (button, label, etc) lets you to get its current ZOrder or even change one at runtime.

File.Seek and File.Position

New function File.Seek allows to set new position in the opened file stream, related to either beginning, end or last position, while File.Position property lets you to get its current value.

Mouse clicking simulation

Mouse.Click(MouseButton)
This function fires mouse click event at current mouse position (at mouse.x / mouse.y).
So you can do following:
Code: ags

    Mouse.SetPosition(100, 100);
    Mouse.Click(eMouseLeft);

This will simulate user click at (100,100).

GUI.Click(MouseButton) and Button.Click(MouseButton)
Run the OnClick event handler for the GUI or Button, if there is one.
Code: ags

    btnStart.OnClick(eMouseLeft); // simulate user press on a button


GUI.ProcessClick(int x, int y, MouseButton))
Performs default processing of a mouse click at the specified co-ordinates, similar to old ProcessClick, but affects only interface (GUI and any child controls).
Code: ags

    GUI.ProcessClick(50, 120, eMouseRight); // simulate user click with right mouse button on GUI


Custom property values can be set at runtime

The related script functions are added to all classes that supported GetProperty() and GetTextProperty(), that is - Room, InventoryItem, Hotspot, Object and Character:
Code: ags

  /// Sets an integer custom property associated with this room.
  static bool SetProperty(const string property, int value);
  /// Sets a text custom property associated with this room.
  static bool SetTextProperty(const string property, const string value);

They return 'true' if the property value was changed, or 'false' if such property does not exist, or property type is incorrect (like setting text value for integer property).

NOTE: Room, Hotspots and room Objects property values are reset to defaults when ResetRoom() is called.

Improvements to Tinting functions to make various tinting methods and properties compliant.
(This should be compatible with Draconian Edition scripts)

Region.Tint() script function now has optional luminance parameter
Code: ags
void Tint(int red, int green, int blue, int amount, int luminance = 100);


New SetAmbientLightLevel() script function.
Code: ags

  /// Sets an ambient light level that affects all objects and characters in the room.
  void SetAmbientLightLevel(int light_level);


New Character.SetLightLevel and Object.SetLightLevel script functions
Code: ags

  /// Sets the individual light level for this character.
  import function SetLightLevel(int light_level);


Negative light levels can be used in 8-bit games to produce darkening effect.
This applies to Ambient, Character and Object light level functions (it already worked with Region.LightLevel).

System.RuntimeInfo
This property returns a string, which contains runtime information, same as you were getting when pressed Ctrl+V (Ctrl+Alt+V - since AGS 3.3.3).



Editor

Building for multiple platforms
The Editor can now build for several different platforms. This is configured with this new option in General Settings (Compiler -> Build target platforms):



Select the platforms you like to build the game for by pressing on "drop down" button to the right and checking or unchecking items in the list:



"DataFile" builds a game data file, and cannot be unchecked. Other targets may be selected in any combination.
More platforms will be added in time.
Note, this only affects doing full build (Build -> Build EXE / Rebuild all files). When running in test mode only Windows version is built always.

The "Compiled" folder has changed. Now each platform has its own subdirectory: "Windows", "Linux", etc. To distribute your game - pack/copy contents of corresponding folder(s).

More properties to set for game objects
Padding for Text GUI Windows
Text GUI windows now have a padding property which lets you control how much space appears between the border and the text inside a text GUI window. Previously, this value was hardcoded as 3 pixels. It now defaults to 3 pixels.
Spoiler
[close]
Clickable for Room Objects is now exposed in the editor.
Spoiler
[close]
TintLuminance for Room Regions to set all tint parameters at design time.

Editor Plugin API
Exposed GUI Panes to plugin API.

Various improvements

  • Added "Close all tabs" command for the pane's context menu.
  • Added Preference option "Prompt dialog on closing multiple tabs".

Bug Fixes

  • Undo history will no longer be deleted when a tab changes its docked state
  • Fixed crashes under certain circumstances when a script editor is closed
  • Fixed crash if selecting a character without a normal view in the room designer
  • Ctrl+Tabbing now works the first time when cycling through open editor tabs
  • Go to Line... now goes to the correct line and doesn't select it
  • The project is now completely rebuilt whenever Enable Debug Mode in General Settings differs from the setting used for the last build
  • The sprite editor now highlights drop targets when you drag sprites around
  • Fixed a crash when trying to run game setup from editor while "Compiled" folder does not exist.
  • Fixed project items could sometimes get incorrectly arranged inside the folder.
  • Fixed writing faulty timestamps in project file on some occasions that could spoil usage of file versioning control.
  • Fixed Help window positioning on multi-monitor desktop.



WinSetup
Improvements
* You can now make actual language name displayed instead of "Game Default" if you put following line in the "[language]" section of acsetup.cfg:
Code: text

default_translation_name = "British"



Contributors
Spoiler

Alan v. Drake
ChamberOfFear
Crimson Wizard
cellproductions
Gurok
monkey_05_06
Tzachs
salty-horse
[close]

Gurok

#1
Wow, this is exciting, CW! The release is getting so big now.

I would like to add that 50 was a very low limit for the number script modules :D

I renamed the old threads appropriately (I hope).

Okay, downloading now! :D
[img]http://7d4iqnx.gif;rWRLUuw.gi

Radiant

Interesting. I was just working in 3.3 alpha turbo, but I'll go for this one instead.

Gurok

#3
I suspect this might be a debug build :(

Spoiler
[close]

Edit: It was mostly good while I was testing it though. My game is configured to run full screen with max scaling by default. I noticed some weirdness when launching from the editor. It appeared in a window that took up the whole screen, but the taskbar and about 1 pixel of the window were visible. Previously, AGS would just ignore the full screen setting in the configuration when launching from the editor. It looks like it's now doing a hybrid between full screen / windowed. Not saying it's bad, just takes some getting used to.
[img]http://7d4iqnx.gif;rWRLUuw.gi

Crimson Wizard

#4
Quote from: Gurok on Sat 27/09/2014 18:54:39
I suspect this might be a debug build :(

Spoiler
[close]
Looks like "assert" was triggered. How does this happen?

Quote from: Gurok on Sat 27/09/2014 18:54:39
Edit: It was mostly good while I was testing it though. My game is configured to run full screen with max scaling by default. I noticed some weirdness when launching from the editor. It appeared in a window that took up the whole screen, but the taskbar and about 1 pixel of the window were visible. Previously, AGS would just ignore the full screen setting in the configuration when launching from the editor. It looks like it's now doing a hybrid between full screen / windowed.
The might be just a very large window, covering most of the screen...
E: Oh, I got it. It appears that if you first configure it as fullscreen, then run as test mode from the editor, the game is not forced to run normal windowed mode (only the size of scaled game) but uses fullscreen window size instead.
In earlier AGS it was enough to just send "windowed" flag via command line. Now it depends on many settings at once. This needs to be dealt with somehow.

Gurok

Quote from: Crimson Wizard on Sat 27/09/2014 19:15:51
Looks like "assert" was triggered. How does this happen?

Well, for me it happens when you delete a chunk of text near the end of a script module. It's always happened in debug builds, AFAIK
[img]http://7d4iqnx.gif;rWRLUuw.gi

Alan v.Drake


xenogia

Not sure what I'm doing wrong during installation but I get the following error when I try to load it up.  Currently using Win 8.1 x64

Alan v.Drake

Have you extracted it all in a directory and launched AGSEditor.exe from there ? Because it seems to work properly, although I'm running xp here.

- Alan

Crimson Wizard

@xenogia, uhhh, this is a known problem, you would need latest version of VC++ 2008 redistributable:
http://www.microsoft.com/en-us/download/details.aspx?id=26368

This solved it for few people, please tell if that works for you.

monkey0506

This is another reason why the engine's reliance on VC++2008 is becoming problematic. :-\

xenogia

#11
I already had Service Pack 1 installed of VC 2008 SP1, and yes I installed it all into one directory and tried to load AGSEDITOR.exe and still got that error :(

I also tried uninstalling and reinstalling the 2008 runtime files, still same error.

Crimson Wizard

I will make myself a virtual machine with Win8 on this week and find out what is required to run AGS.

Knox

Quote from: Crimson Wizard on Sat 27/09/2014 17:25:18
This is the logical continuation of AGS 3.3.1 Alpha 2 released by Gurok about two months ago.
A special note about custom resolutions. They will supposedly be included into next alpha release, because they still require few minor corrections. This won't take too long.
Hi,

If I am currently using AGS 3.3.1 Alpha 2 Turbo, does this mean I can start using this version now or should I wait for the next alpha release of this version so I can use higher resolutions (1280x720)? As for the 2013th "3.4.0 Alpha" with limits removal, would the next alpha release of this version potentially at least include unlimited GUI controls? For me personally that would be the most important part of the limits removal and I would have no problem waiting for the rest of the limit removal.  :smiley:
--All that is necessary for evil to triumph is for good men to do nothing.

Crimson Wizard

Quote from: Knox on Tue 30/09/2014 17:53:23
If I am currently using AGS 3.3.1 Alpha 2 Turbo, does this mean I can start using this version now or should I wait for the next alpha release of this version so I can use higher resolutions (1280x720)?
Wait for 1-2 weeks, I am doing last fixes to custom resolutions.

Quote from: Knox on Tue 30/09/2014 17:53:23
As for the 2013th "3.4.0 Alpha" with limits removal, would the next alpha release of this version potentially at least include unlimited GUI controls?
That's possible; I am reviewing my 2013th changes now to see which may be moved here without trouble.

oskargunn

I seem to get the same error as xenogia when starting the editor. Also tried installing the latest VC++ 2008.

Crimson Wizard

Uh, I am stupid. Gurok basically told this, but I thought it is because of Editor itself...
I somehow put Debug version of AGS.Native.dll into this package. It requires different set of libraries that do not belong to VC Redist.

I updated the package, please download again (same link).
Tested this on virtual machine with Win 8.1 x64.

BTW, it appears working even without this VC redist installed... might be it uses higher VC runtime libs in the Win 8 system that are not displayed in programs list. I make a guess that this VC update is required for WinXP only. I must investigate this more.

ChamberOfFear

Did you remove the function GetRoomProperty(string property)? Compiling outputs the error "Error (line xxx): undefined symbol 'GetRoomProperty'".

Gurok

GetRoomProperty is now Room.GetProperty to match Room.GetTextProperty. You'll need to change your function calls or turn off "Enforce object-based scripting" in the general settings of your project.

Hey CW, this should probably be listed with the other API changes.
[img]http://7d4iqnx.gif;rWRLUuw.gi

Crimson Wizard

Ok, done. I also found there are couple of "bug fix" lines that refer to updated 3.3.0/3.3.2 rather than 3.4, so I removed them.

SMF spam blocked by CleanTalk