Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Topics - Monsieur OUXX

Pages: [1] 2 3 ... 16
The Rumpus Room / CJ is not Jesus
« on: 11 May 2018, 11:13 »
I was searching for an old thread in Google and I found this gem.

So I'm reposting so that all of you can enjoy this old thread on all its glorious insanity.

The best part imho :
I'm going to be perfectly honest.
Your views on everything annoy me. (...)
So in conclusion, I don't like you at all, and even though I never actually used the CJ JC thing.... from now on, I'm going to start. Just for you. Just because it shows disrespect for you in a special way that I never knew existed before.

Oh, the AGS community knew how to have fun, back in the day.


So I thought we could make use of modern technology to cast light on that diffiult question, just like Gilbert did in the thread back then.
It turns out that the answer is more cryptic than I expected. what do the Norwegians theologians know that we don't know?

How about we start allowing games with MonoAGS (AGS 5) in every forum tat would normally only allow pure AGS games?

I'm lookin at you, MAGS.

If people started making small games using the new engine, it would:
- be an incentive to use it
- it would slowly make some people acquire some knowledge about it. They would start being able to answer questions in the Technical forum and such. Buildibng the knowledge base, y'know.
- the best way for the community to acknowledge its existence and slowly adopt it is to talk about it, and actually see it here and there. The good ol' visbility concept.

I intend on trying to develop a tiny game with monoAGS.
This will be a test run to assert by myself how mature and/or easy-to-use it is. I will post my progress here.
If I succeed, I will try to convert a medium-size AGS game into MonoAGS. again, I will post my progress here.

This sort-of blog is meant to deliver tips to anyone trying to do the same, and maybe be an incentive to start something.

If you wonder why I'm posting this on the AGS forums, then please read this thread and all the other threads about the same topic.

Edit by cat:
MonoAGS Repository
MonoAGS Documentation

EDIT 2 :
Things to add in the "get started" wiki:
- if you can't build an Android project, it means you might need to install Xamarin (read more in the posts below)
- if you can't build any of the other projects, try these :
    1) make sure you have .Net Core installed (see posts below for links and version). To do so :
       - Open the Windows Command Prompt
       - type this and press return :
         dotnet --info
       - if you get an error message: then it means dotnet core is not installed. Otherwise you get the exact version currently installed.
    OR, if it still doesn't work:
    2) try to delete global.json and then rebuild the solution. This should specifically solve the error "The current .NET SDK does not support targeting .NET Standard 2.0. ..."
- If the solution builds fine but the project won't start, check if you have a message similar to "you cna't trun that type of project". If so, right-click on the actual game project in the solution (asopposed to the other projects : shared libraries and whatnot) and select "Set as Startup Project".
EDIT 3 : those comments are now included in the FAQ :

Critics' Lounge / Character in mountain clothes
« on: 10 Apr 2018, 23:26 »
Release candidate.

- the backpack makes zero sense in terms of size and straps. But at least it makes the sprite more acceptable to the player's eye.
- The character's face in the front cycle is too narrow.

Links to Photoshop source files :

Meet this guy (on the right). He's a Tibetan mountain guide from 1940.
You can consider that he's the same kind of guy who assist the nazi interrogator in Marion's bar fight scene in Raiders of the Lost Ark.

This is a concept art. It's not even finished, there are holes in the body and the backpack is a rough draft. But you get the idea.


Concept :
- his backpack is huge. Like sherpas.
- he's a cowardish villain.
- Some reference for the clothing :

Critics :
 - I'm not sure about the scale. I don't like that he seems slightly bigger (both by face and by body) than Indy.
 - I didn't design the color scheme. For now I've just copied the scheme of the other character on the left. But I don't really know in which direction I should go.

If you feel like painting over the face then suit yourself.
For the body, don't make the backpack overly complicated please, as his walkcycle will be animated.


Critics' Lounge / Indiana Jones side walk
« on: 29 Jan 2018, 22:10 »
This post is about the side walk, not the two other views (any paintover of those views will be ignored)

Known defects:
- shading is a bit dirty
- bad contrast in hat
- walking character one pixel too short in frame where he is standing up
- there is a weird gray pixel under his chin.


Following post-mortem this thread and all the previous threads

Add spoiler tag for Hidden:
EDIT : everything that is written in this hidden section was my original post but you should not consider it my opinion -- it was more of a conversation starter and has been contested. The table is better.

I'm starting this thread in this forum for two reasons :
1) there was no thread dedicated specifically on MonoAGS
2) This is virtually a sub-thread to the "AGS 4"  thread (aka "why this project is screwed up"), only dedicated to MonoAGS as one of the many options.

What I like about MonoAGS
  • It's started by one (seemingly skilled) person, who has leadership
  • he sources are immediately available on git.
  • Some thought has been given to follow in AGS legacy (programming-wise). Specifically: Not being unncessarily anti-Microsoft, while still focusing on cross-platform tech
  • Some thought has been given to having a good, flexible scripting language (i.e. C# as a scripting language that can still be compiled separately from the engine or Editor source)
  • Some effort in the documentation

What I don't like about MonoAGS
  • The Editor is not part of the initial vision. It's envisionned as some sort of tool "external" to the engine, that can come after. It means there's no vision on assets management and game-creation pipeline.
  • It's focusing a lot on basic graphics rendering (SDL), with no vision regarding the other components, such as sound engine, controllers input, GUI, timing, etc. That's my biggest concern with many wannabe game engines: they lose steam after they manage to render the graphics of the game, but that's only 25% of the whole picture.
  • It doesn't do vectors, even only just by wrapping some basic directX primitives/data structures. There are many vectors usages that you might not think about until they're missing and it's too late (graphics scaling, walkable areas, perspective, camera control, tweens, parallax, etc.).

What I don't know about MonoAGS
  • Is the build automated? Like, do you maintain a solution made with something such as cmake to generate the .sln file and all? That's one of the weaknesses that CW pointed out in AGS. Those tools are real magic to generate soluions for any IDE/compiler/Visual Studio version in one click

Apart from that,I have no opinion on the switch from Mono to .net Core. That's a side discussion.

There should also be threads to discuss Blade Coder and Adore.

EngineAGSBladecoderMonoAGSAdoreEscoriaPlaceholder 1Placeholder 2
Middleware / underlying game engineAllegrolibgdxNoneLöve
aka Löve2D
GodotPlaceholder 1Placeholder 2
Editor includedYesYesNot yet

(plans on making things editable directy in-game)
No editor provided but many frontends suggested (e.g. Notepad++ with a plugin)

See link in footnote
YesPlaceholder 1Placeholder 2
Platform/VM for the engineNone (direct  C++), but has binds to some Windows libs.

JavaNon-Microsoft .Net Framework, aka “Mono” (considers moving to .Net Core)LuaPlaceholder 1Placeholder 2
Platform/VM for the Editor.Net framework
JDK requiredMono (considers moving to .Net Core)-Placeholder 1Placeholder 2
Hardware supportedWindows desktops.

Existing ports :
MacOS (outdated)

(not only the build+execution, but also subtle things for mobile devices such as tapping, hand motions and accelerometer)

(but for subtle things meant for mobile devices such as tapping and accelerometer, you’ll need extra code/libraries)

(not only the build+execution, but also subtle things for mobile devices such as tapping, hand motions and accelerometer)
Placeholder 1Placeholder 2
Engine’s languageOld-school C with big chunks of C++JavaC#LuaPlaceholder 1Placeholder 2
Editor’s languageC#JavaC#-Placeholder 1Placeholder 2
Main libraries used
(apart from DirectX+OpenGL which are included implicitly in most cases)
allegro 4I don't know how much of libgdx is self-sufficientOpenGL+OpenAL bundled in OpenTKI don't know how much of Lua is self-sufficientPlaceholder 1Placeholder 2
Proper versioningYes (git)Yes (git)Yes (git)Yes (git)Placeholder 1Placeholder 2
Automated testsNo ???Yes (“busted”)Placeholder 1Placeholder 2
Automated solution generationNoNot needed ? (Java all the way)NoNot needed (Lua all the way) ?Placeholder 1Placeholder 2
Automated build and releaseNoMost likelyYes?Placeholder 1Placeholder 2
Native support for Photoshop (PSD) filesNoNo?NoYes?Placeholder 1Placeholder 2
Localization mechanismsYes, up to 256 characters per font???Placeholder 1Placeholder 2
Good manual + community + tutorialsYesYesYes
(at least it has some doc and a proper home page)
Yes but only one demo gamePlaceholder 1Placeholder 2
MaintainersApprox.. 4Many for libgdx,
 +1 very efficient for Bladecoder,
+approx. 4 from the AGS community if we go there
+approx. 4 from the AGS community if we go there
Many for Löve2D,
+1 for Adore,
+approx. 4 from the AGS community if we go there
Placeholder 1Placeholder 2
Sound engineNot really, apart from just playing soundsYes


(OpenAL has good features, that tzachs has wrapped into MonoAGS)
YesPlaceholder 1Placeholder 2
Controllers inputJust the basic : keyboard+mouse (and joystick with a plugin)Yes+
(including mobile device gesture)
Just the basicsYesPlaceholder 1Placeholder 2
Subpixel management / maths / vectors

(see in an other post in this discussion what I mean by that)
apart from basic float management and the Tweens module

skelettal animation out of the box
basic OpenGL stuff + everything that was ported to C#.

Anything else has to be binded manually
YesPlaceholder 1Placeholder 2
Multithreading inside the gameNoProbablyto be implemented by the game designerProbably, using Lua?Placeholder 1Placeholder 2
Data structures / serialization / database-like processingNo, apart from arrays of structsYes (XML, Json and everything natively)Yes? (classes from Mono and/or .Net Core)Yes? (Lua has everything)?Placeholder 1Placeholder 2
Pixel-perfect low-res graphicsYes?Yes?Yes??Placeholder 1Placeholder 2
Collaborative work / compatibility with versioningPossible with scripts and rooms, but not recommended with the main game file (.agf) nor sprites library.?Editor doesn’t exist yet??Placeholder 1Placeholder 2
Game scripting languagecustom (AGS script)NONE YETC#
(but some people think that things are little too hard coded yet)
Luacustom (Gdscript, aka something similar to strongly-typed Python)Placeholder 1Placeholder 2
dialogs scripting languagecustom (AGS dialogs script)InkC#Lua?Placeholder 1Placeholder 2
in-game GUIsNone/custom

(poor set of native graphic controls)

(offered by libgdx)

(partially implemented)
Lua libs?Placeholder 1Placeholder 2

Escoria :
MonoAGS :
Libbgdx :
Löve :
Suggested editors for Löve :

Ink :
Java :
Mono :
Mono versus .Net Core :
Adore :


Normally Critics Lounge is to sho something that you've made and ask for constructive criticism.
But it's also a space for discussing the drawing techique used -- so, not to set a precedent, but I'd like to ask you tips on a specific topic : drawing foliage in pixel art.

Foliage in pixel art looks differently for every pixel-artist, but in the end I still think you can categorize the result in 3 families :

- Messy artifact-y foliage : That's usually when the artist simply scaled down a picture of a tree.
     Caracteristics :
      x There are almost as many pixels as there are leaves
      x There are almost as many shades of green/brown as there are leaves
      x The contrast is usually very high and there are way too many black pixels -- because in the original tree picture, the areas that were in the shadows (especially the self-cast shadows of the tree) were rather dark, and the artist failed to adapt that original shading to match the overall shading of his/her pixel scene.

Example 1 (background foliage):
PLEASE NOTE: I'm not criticising the guys who drew the backgrounds
 for this "Tanis" demo as I think they made an outstanding pixel art
 job for everything else. Only the foliage bothers me.


Exampe 2: these ones were probably drawn by hand, and yet they still
have this messy aspect and exagerated contrast :

- Overdrawn/overstylized foliage : That's when the artist actually drew the leaves one by one and got carried away with the shading. It gives everything a cartoony look or a "pillow shading" look.


Example 1: (see the leaves in the foreground)

Example 2 :  (notice how each leaf is drawn one by one in the middle tree)
(The crystal shard team produces amazing graphics but that's not the style
 we're aiming for)

- The magic look : (the look Id like to achieve) the foliage has exactly the right level of detail and number of colors. It has a crisp ascpect and yet it's not busy.

Example 1 (Fate of Atlantis as always     

Example 2       

Strangely, FotAQ artist succeeded here. Even though there's a lot of copy and paste.

So, now, the discussion: any ideas on how to achieve that render effect?

I was thinking the following transformations/filters in photoshop:
- gaussian blur (to remove unnecessary details)
- color quantizer (it's like a better posterize) to reduce the number of colors
- denoiser to remove the few rogue pixels remaining and giving an overall smooth (yet crisp) aspect
- and of course at the end a brightness-contrast (or better yet: curves) adjustment.

Any better idea?

how do you get the alpha of a pixel in a drawingSurface? By parsing the highest bits of the value obtained through GetPixel?

Scenario :
- I import a sound into the game
- In my room_load (before fade-in), I call aMySound.Play(eAudioPriorityNormal, eRepeat);
- I am able to play that sound fine from the "sound" panel
- the game compiles properly. I then run it from within the Editor, with F5.
- when I enter the room, the game crashes with error "an internal error has occurred(...) Error: Unable to create local script (...) Unresolved import 'aMysound'"


Note: I've tried compiling it for real ("build EXE") beforehand, but it didn't help.

Here is a simple experiment :

EDIT: code below was edited to take in account CW's feedback in next message)
Code: Adventure Game Studio
  1. void repeatedly_execute_always()
  2. {
  3.     while (!mouse.IsButtonDown(eMouseRight))
  4.     {
  5.         mouse.Update();
  6.     }
  7.     Display("Done!");
  8. }

You'll notice that the engine freezes and you can't exit the loop even by pressing a key or left-clicking.
What are your thoughts on this?

I'm looking for ways (as inconventional as needed!) to intercept user input during repeatedly_execute_always. Oh, and to reflect something on screen.

Modules & Plugins / MODULE : Display-based GUIs
« on: 13 Oct 2017, 19:21 »
This module lets you display an interactive GUI relying on the "Display" AGS built-in function rather than a regular function.

In a nutshell:
- it transforms any "Display" popup into an interactive popup
- it has the wams "flow" as the Display function (or Wait(1)): it blocks the game but still lets repeatedly_execute_always run once after each time it's called.
- you may have 3 types of controls : Labels, Buttons, TextBoxes
- it's based on text (because of the "Display" function) but you can still use pixel-perfect positioning of controls (horizontally, not vertically)
- you may use the keyboard left/right/up/down keys (to select the button or textbox), use "return" to validate your choice, or "escape" to close, etc.
- you may use the mouse to click on the buttons or textboxes

More generally, it's a basic toolbox that could become handy for anyone wishing to implement a GUI based on text, independently from the AGS context.

As a demo I implemented a Yes/No popup but you can also implement easily a popup window that prompts the user to enter text into an interactive textbox (moving cursor, backslash, "del" key, etc.).


Advanced Technical Forum / Engine loop chronology
« on: 11 Oct 2017, 12:14 »
I'm asking a question which answers are everywhere in the foruls and in the manual, but I need to have it discussed in one place to make sense of it.
What's the chronolgy/order of operations within one game loop?

Consider this piece of code :
(pre-requisite : create a GUI with a label called TestLabel somewhere)
Code: Adventure Game Studio
  1. bool valueChangedCount=0;
  2. void repeatedly_execute()
  3. {
  4.     for (int i=0; i<10;i++) {
  5.          Display(String.Format("i=%d, valueChangedCount=%d, mouse.x=%d", i, valueChangedCount, mouse.x));
  6.         TestLabel.Text=String.Format("%d", i);
  7.     }
  8. }
  10. void repeatedly_execute_always()
  11. {
  12.     valueChangedCount++;
  13. }

Now run the game. You will observe this :
- While the Display popup is displayed, the mouse will move on the screen because it's handled at a very low level by the engine.
- However mouse.x is not updated
- when i changes, the change is reflected into the Display popup AND in the TestLabel
- valueChanged does get updated.

All of that demonstrates  :
- that an instruction like Display (which can't be called in a blocking script) really blocks the engine.
  Proof: the game does not switch to next game loop (mouse.x not updated). So its behaviour is different from,
  let's say, Wait(1).
- however repeatedly_execute_always is called at each Display call (proof: valueChanged becomes true),
  which tends to demonstrate the opposite
- GUI changes are immediately rendered(even though the GUI not interactive since mouse is technically frozen). It means
  that GUI rendering is "outside" of game loops, i.e. outside of the repeatedly_execute/repeatedly_execute_always

Is there some logic in there? (not asking in a mean way, just trying to get the whole idea to avoid mistakes)
Is there some queued instructions black magic that I'm missing? Is this snippet code changing game loop each time yes or no?

EDIT: this module was actually heading towards two unrelated directions (on the one hand, experiments on blocking GUIs, and on the other hand the so-called "breakpoints" feature).

Therefore I'd rather start over and split it in two.

- the part concerning the Display-based GUIs :
- the part concerning breakpoints : working on it!

Add spoiler tag for Hidden:
Indiana Jones and the seven cities of gold development team proudly presents :

             AGS Breakpoints

                     (a.k.a. "DisplayGUI" module)

Click on image to watch video

What does it do?
In a nutshell :
  • 100% blocking interactive GUI in any script (well, any script where you could normally use function "Display")
  • Easily watch variables' values anywhere in your script, like a real breakpoint (and in future version : edit them)
In detail :
  • Watch the video above (url : ) or read this :
  • AGS is a very cool engine, but one of its downsides is that it has no real useful breakpoints. Breakpoints can pause the game (hurray!) but you can't watch the variables values, so the Breakpoints are mostly useful to check that your script goes nto a specific code branch (if...then...) but it won't help you debug a complex code with values changing everywhere.
  • Until now, your only solution was to use the "Display" function, but it was really a pain in the neck when you want to display several variables at once (you'd need to write a different "String.Format..." for every occasion). You could use a GUI, but since the whole point of this is to entirely "pause" the game (GUIs included) then the GUIs would be disabled (therefore becoming non-interactive).

    Well now you have a way to entirely pause the game anywhere in the script AND still be able to click around and benefit of useful features. This makes it much closer to a regular "watch" as seen in Visual Studio and others

How to setup:
Basic use setup:
1) import the DisplayGUI module,
2) import the modified Font0 provided in the demo game (you can simply swap the files in your game folder. Fear not! It only modifies the first 20-or-so characters in the font, which should be harmless since they are very rarely used by anyone. If you need those, you can modify the ascii codes in the module and you can quickmy edit the font using Rulaman's "TtfWfnSci" tool (you can find a link here).
3) Import the sprite that represents a small 3x*3px red square, that you may export from the demo game in the "displayGUI" sprites folder
4) Make sure that mouse mode "userMode1" uses this sprite as cursor
5) Before you call any instructions of the module, call "DisplayGUI.Init(myFont)" where myFont is the font that you just swapped

Advanced use setup:
1) Get the original "UltraVariables" module by SSH, or export the one present in the module's Demo Game.
2) Check the DisplayGUI's header to see what custom instructions you need to add to the Ultravariables module. There are only two : One export instruction, and one export instruction.

How to use:
Basic usage:  (no Ultravariables)
1) Don't forget to call DisplayGUI.Init(...) before anything
2) To display a Yes/No popup window, do as follows :
Code: Adventure Game Studio
  1. YesNoResult result = DisplayGUI.ShowYesNo("line of text 1", "line of text 2");
  2. if (result==eDisplayGUI_Yes)
  3.     Display("player clicked YES");
  4. else
  5.     Display("player clicked NO or exited the popup (by pressing ESCAPE or right-clicking)");
3) To display the Watch interface :
Code: Adventure Game Studio
  1. //Obviously, myVariable must exist. Oh, and it does "int" only, sorry!
  2. BREAKPOINT("myVariable name", myVariable);
  4. //You can watch up to 7 variables, and only 5 can be displayed simultaneously
  5. //(but you can see the others if you enter their name in the interface)
  6. BREAKPOINT("myVariable1 name", myVariable1, "myVariable2", myVariable2 /*, up to 7 */);

Advanced usage:  (with Ultravariables)
1) make sure you have followed the setup instructions above
2) Set  and get the value of any variable like this :
Code: Adventure Game Studio
  1. SET("myVariable", 7);
  2. int value = GET("myVariable");
3) Display them at will in your Watch interface by typing their name whenever you want.
4) Careful though! These variables are GLOBAL variables by design. In other words : There's only one ultraVariable with the same name in the entire game.

Free to use for any purpose whatsoever, provided you credit us in your game credits (if any ;) ). Don't forget to credit SSH too for his UltraVariables module.


Version 1.1 :
Added simple graphic theme (because prettier things are more attractive)
              Pro : prettier
              Con : makes the popup blink because AGS function "DisplayTopBar" doesn't behave the same way as "Display". I would suggest: use the theme for Yes/No popup, but not for the Watch interface.


if you're familiar with AGS, you know that under specific conditions (running a 320x200 game with Direct3D) you can have high-resolution characters in a low-resolution game. Some consider it a glitch, some like it, and at the end of the day the causes of that peculiarity is very well known (it has to do with allegro and all that).

But now, WHAT IF I did this :
- creating a 640x480 DynamicSprite (and of course drawing anything i want into its drawing surface)
- putting a dummy character in the bottom-middle of the screen, with the appropriate walkable area (which could be : no WA at all, or with a 50% scaling -- in this thought experiment i'm not sure what would work, i'd need to try)
- setting the view/loop/frame of that character to point to the dynamic sprite i mentionned earlier

...wouldn't i get high-resolution graphics in my low-res game? Now imagine that this would be a window of text or something that's better in high resolution (like a console or anything required in some special debug mode). Wouldn't that work?

In (i.e. patch 4) :

Code: Adventure Game Studio
  1. AudioClip* ac;
  2. ac.
When you do this and stop at the dot, you receive suggestions for AudioClip members, including "ID" which is not a member of AudioClip (only AudioChannel)
If you try to force it and type "ID", then of course the compiler complains about it.

Editor Development / minor bug in the editor : undef
« on: 19 Sep 2017, 20:23 »
I'm using 3.4.0 patch 4 (if this is not the latest version, then please ignore)
The Editor throws an exception when I type the following keystroke into a script file : #.u.n.d.e.f.SPACE ( #undef followed by space bar)


I want to automatically run some script during the black screen inbetween fade out/fade in.
This script is long and complex and might freeze the screen half a sceond. That's why I want to do it at the exact moment when the player does expect the game to be unresponsive.
I want this script to run at EVERY room change, no matter what. So it should happen automatically.

therefore the question is : how do I automatically pick that up?

I've tried this but it seems to be triggered only after the end of the fade in (I suppose AGS doesn't happen player.Room until then?)

Code: Adventure Game Studio
  1. void room_Leave()
  2. {
  3.     Display("changed room");
  4. }
  6. int player_prevRoom=-1; //cheap trick to detect room leave
  7. void DetectRoomLeave()
  8. {
  9.     if (player_prevRoom<0)
  10.         player_prevRoom = player.Room;
  11.     if (player_prevRoom!=player.Room)
  12.         room_Leave();
  13.     player_prevRoom=player.Room;    
  14. }
  17. void repeatedly_execute_always()
  18. {
  19.     DetectRoomLeave();
  20. }

after posting this I'll be on my way investigating on_event and/or late_repeatedly_execute

Beginners' Technical Questions / fonts anti-aliasing
« on: 20 Jul 2017, 15:48 »
Since the AGS scripters dream team is currently in Iceland, I'm sure it will be super easy for them to find a few minutes to interrupt their current board game or outdoor sports activity to help AGSers in distress ;)

I'm currently rewriting the wiki about Fonts, and I'm confused regarding the fonts anti-aliasing.

If you know some answers, please answer each question as separately as possible
  • When you "use TTF fonts", does it mean: "use TTF fonts that were definitely rendered into pixel fonts at import time"? Or does AGS only render them in the Fonts pane but still secretely keeps the original TTF font for just-in-time rendering ?

  • Does AGS import the font with no anti-aliasing and then adds it at rendering time, in the engine?

  • How does anti-aliasing work in relation with outlines? I've tried to use a TTF font in a 640x480 game, enabled anti-aliasing in the game settings, and then enable "automatic outlineStyle" in the font. The result is terrible (the font gets totally screwed up because the outline also gets anti-aliased it seems, so it inserts transparent pixels randomly in the text)

  • In 2017, what is the added value of Calin Leafshade's SpriteFont Rendere plugin? ( here:  )

The AGS 3.4 patch 4 update mentions :
Fixed game compilation on systems which have Japanese ANSI or similar locale
as default locale for non-Unicode applications.

Does that have impacts in the game's Japanese fonts and/or Japanese translation? Or is it just a compilation thing? Is it possible to make a game in Japanese?

Pages: [1] 2 3 ... 16