Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - fernewelten

#21
Hi folks,

Here's something that has always made me wonder:

Most of the adventures seem to be constructed based on beautiful screenshot drawings. For instance, I remember a “work in production” whose very first picture they did was a Western town in glorious 1080p. They even included an animation of some cowboy being knocked unconscious while standing in a specific porch.

It must take days and hours to produce this level of intricate detail. How can you get away with doing this sort of thing _first_?

For instance, that picture above was in accurate hand drawn 2D perspective. So whenever some technical need comes up to re-arrange the houses or to make space for a side alley, etc., then all its prettywork will have gone completely to waste: All the fundamental lines will then work out differently which means that all the intricacies will have to be re-drawn from scratch. What if it turns out that the cowboy needs to be punched out on a different porch - or inside a living room? What if that particular scene will need to be even cut out completely?

You wouldn't construct a house or a luxus liner this way, or as that goes, a coffee machine. There, most of the important work would go into fundamentals: architecture, statics, plumbing, fire protection facilities. The form would be dictated by the function, not the other way round.

When all your friends are invited to the roofing celebration, even the windows haven't been put in yet. It's all still ugly. The upholsterer and interior designer will only be retained at a much later stage, _after_ the architect and the carpenter have done their thing.

In a similar vein, you'd expect adventures to start out with lots of boxes or blue cups where finished artwork will be inserted later on. You'd expect the finished screenshots to come nearly _last_.

Yet it seems to be even firmly ingrained in out forum rules that they should come _first_ before the house has even been constructed yet:
Quote from: Darth-Mandarb
3) A minimum of two (in-game) screenshots must be available.
If you aren't far enough to be able to take different screenshots, don't post yet!

Well, at that stage the work is no longer “in production”, or it shouldn't. It's in the final stages of getting the finishing touch.

#22
Hello folks,

I've happened by this jam page about an “Adventure Jam 2021”, scheduled to start in eight days, on May 7th (I'm neither organizer nor moderator).

Is any AGSer participating?
Is it worthwhile?
Do you have any experiences to share about that jam?

Edit: Just a short note/reminder that this jam will start in about 1 ½ days, on May 8, 1 o'clock Berlin time.
#23
Hello folks,

Please have a look at this plug (Huggles Goes On A Trip in the section "Completed Game Announcements").

Would you mind giving short feedback on the following points?

[ ] The thread title / game title is off-putting / doesn't appeal to me.
[ ]        Because of that, I didn't even open the thread.
[ ] The screen shots are off-putting / don't appeal to me.
[ ] The tone of the plug is off-putting / doesn't appeal to me.
[ ] The advertised plot is off-putting / doesn't appeal to me.
[ ] The advertised subject matter is off-putting / doesn't appeal to me.
[ ] The advertised game size (snack-size) is off-putting / doesn't appeal to me.

If there is just one area about the game plug that needs improving the most, what would it be?
#24
Hello,

is there an easy way to automatically get the build date (the date and time that F7 was hit in the Editor) into a constant that I can work with and display? Or alternatively, a build number that is automatically bumped whenever I hit F7?

I find it hard to keep the versions apart when incrementally fixing things and moving compiles around.

Keeping a global in the game and bumping it per hand doesn't quite cut it for me: When I fix things in a hurry, I tend to forget to bump the variable afterwards. So then I'm forced to talk about "the compile that is exactly 772335 bytes large". That isn't er, quite, er, professional.
#25
Hello folks,
I've tried building a complete AGS 4.0 system on Windows from the GIT repository.

Starting with the instructions in ags/Readme.md, you get pointed to ags/blob/ags4/Windows/README.md.
You're pointed to the solutions for building the Engine and Editor, but building those is not enough per se:

  • The resulting Editor will not find the templates, e.g., the BASS template
  • hitting F1 will provoke an error that the help file cannot be found (Should it even? Doesn't AGS4 have a HTML based help?)
  • the Editor doesn't offer an option to compile for Linux.

So several “bundling” or “deployment” steps seem to be still necessary. I haven't found information for that, but it might be me, I might have searched the wrong places.

Assuming an AGS4 Editor and Engine is compiled. Just what do I have to do  to end with an installation that is just as complete as what I get when installing AGS-3.5.0.31-P9.exe?
#26
Hello Folks,

Easter is just around the corner, and so I've got an Easter adventure for you.


Huggles goes on a trip


Huggles and his mum are rabbits that are living peacefully in a bunny meadow. But when they try to sell their eggs this year, they run into a snag. Huggles needs to rise above himself to save the day ...

  • Fight with a strange lock
  • go on a boating trip
  • outwit a guard
and help Huggles help his mother to sell her Easter eggs!




(Note that the screenshot above isn't a spoiler â€" your lock will be dynamically generated and have different tiles.)

Standard BASS interface (right-click: examine things; left-click: interact with things).
Get the inventory through the top-left "hamburger" button or tapping the "i" key.

Note that the hotspot of the cursor is Huggles' nose. Helpful if you need to target something tiny on-screen.

I don't have a Linux box, so I've only tested the Windows version.
Download the game here:
https://gamejolt.com/games/Huggles_goes_on_a_trip/688487
(A Windows and a Linux version is available.)

Hints and tips thread: https://www.adventuregamestudio.co.uk/forums/index.php?topic=58995.msg636634455#new

Have fun playing, and merry Easter!




Newest update

Version 2.01

  • Fixed some small bugs
  • Uploaded the game to Gamejolt.
#27
Hints & Tips / Huggles goes on a trip
Thu 01/04/2021 12:14:22
So here's a thread for questions that might come up.
#28
So, where's the posting for MAGS March 2021 gone to ???
#29
Hi folks,

So AGS used to be the brain child of Chris Jones, and I had already been a lurker at that time, thinking “Well I certainly don't have the time to make small adventure games right now, but there'll come the time when this will change, and then I will probably want to do them with this tool.”

And when I returned after many years, “suddenly” the project has turned open source, and there was a crew diligently coding away at the studio software, with a small hard core seemingly having done this for around ten years. I mean the crew that programs the system, not the crew that programs adventures using the system.

So how did this transition come to be? What made you take up such a colossal task of tending to about 200'000 lines of code in more than 2'000 files?

  • Were you friends of Chris' at the time?
  • Did someone rope you in?
  • Were you fascinated at some aspect of the code?
Are there some annals somewhere where an “AGS historian” explains how AGS came to be? I'd be very interested to read them.  ;-D

#30
So here's a hints and tips thread for A Christmas Saved [MAGS December edition]

Where's Scratchy?
Spoiler
In the top right corner of the maze.
[close]

How do I get there?
Spoiler
Joey's headlights can illuminate all passage parts that lie straight ahead.
The walls on the perimeter of the known maze are thick to make it easier to see where the doorways are.

Apart from that, you're on your own, I'm afraid. The maze is randomly generated.
[close]

So how do you get past Scratchy?

That's a lengthy process, but here's how to get started:
Spoiler
You need to get her to like you. So start off tactfully. If you simply go off on her with impertinent requests, she'll become miffed in no time.
[close]

I noticed. So once that happens, what do I do?
Spoiler
The only successful option is to apologize.
[close]

That doesn't get me far. What did I miss?
Spoiler
After you apologize, you must really restart "from square one", i.e., greet her anew and so on.
[close]

But I'm running out of options. All of them seem to irritate her.
1.
Spoiler
Hint: The last dialogue option is always a safe way to back out of dialogues.
[close]
2.
Spoiler
You might have entered into the conversation a bit too hastily. If you look (right-click) around a bit …
[close]

So how do I know when the time of pleasantries has passed?
Spoiler
Well, you know, she starts to like you. And you'll get audio feedback. Once you do, you'll no longer get the options for the pleasantries, but you don't need them either (unless you drive her up the wall again).

All the "Tell me again" options are safe.
[close]

What's up with the whistling?
Spoiler

There are three of them:

  • I'm miffed.
  • I'm now at peace again. (Restart with greeting her.)
  • I like you. (Often, a lot of options will disappear that you no longer need.)
[close]


I need to find some trivia (facts). Where do I get them?
Spoiler
Well, you know, we were told to make this contest about “companions” …
[close]

I need to find something for Scratchy, namely., …
Spoiler
… a broom.
[close]
* Where?
Spoiler
Joey and Jason need to find something adequate in Jason's room.
[close]
* What?
Spoiler
The paint brush on Jason's desk can be repurposed.
[close]
* I know where it is, but I can't take it.
Spoiler
Joey (the forklift) must tell Jason (the boy) to look out for the broom, otherwise, Jason won't see the need.
[close]

So what exactly do I need to say about Scratchy's various experiences?
Spoiler
The facts are randomly generated, sorry.

But note that you can safely select the “Tell me again…” options to be told all the respective facts again. Also note that in the Scratchy dialogues, each line must be confirmed by a click, so you can take as long as you want to process those facts.

Each dialogue should comprise an option (the last option) that allows Joey to safely back out. Some of these last options will terminate the conversation, but no worries, when Joey gets back he can jump right into the “Tell me again …” options to reprise where he left off.
[close]
#31
Hi folks,
Meet Luke:
Luke is a bit of an autist, and so he doesn't know about his surroundings too well. When told to look at something on his right, he sometimes faces to the front â€" or back â€" instead. Sometimes an object is directly behind him, yet looking at it, he turns to the left as if he was only interested in its left edge for some strange reason. See my current game entry to watch him fumbling and bumbling, especially in the tree branch room.

What an awkward fellow this Luke guy is, and AGS makes him that way. Luke is using the standard functions Character.FaceLocation() and Character.FaceObject(), and those functions give results that are at the very least very counterintuitive, not to say plainly wrong.

How come? I've tried to research a bit of context for doing directions in the two-dimensional room, and this is what I've found:

To start off with, AGS doesn't natively know the concept of "looking downwards" as in "looking at your feet" or "looking upwards" as in "looking into the sky". You can code and draw it, of course, but it will be a special animation. Instead, when AGS talks about "down", it means "turned toward the human player (towards the fourth wall)", and when it talks about "up", it means "turned away from the human player (towards the back stage wall)".

Thus, "down" and "up" describe aspects of the depth dimension, not the height dimension.

This is relevant for FaceDirection() and such. No matter what direction you specify, the character will always look straight ahead, but it will be turned in different ways.

  • If a character does FaceDirection(eDirectionUp), it doesn't really look "upwards", it looks upstage instead and you'll see the back of the character's head. If it does "FaceDirection(eDirectionDown)" it looks downstage.
  • Similarly, if it does FaceDirection(eDirectionLeftUp) it looks upstage to the left, etc

Well, FaceObject() seems to often calculate this turn incorrectly.
How calculate a correct turn?

Details inside:
Spoiler
The character will always look straight ahead no matter how high the object is above the floor, so the object's height or elevation must be irrelevant information when calculating how the character should be turned. Instead, exactly two specifications should be relevant:

  • Whether the object is to the left or the right of the character.
  • Whether the object is upstage or downstage with respect to the character.

The easier part is calculating whether the object is to the left of the character and how far. You compare the character's and object's X dimensions. However, the relevant point for this comparison should  be the middle point of the object's width, and the scaling of the object should be taken into account when determining this middle.

It's harder to find out whether the object is in front of the character:

  • Usually, whenever AGS tries to find out whether something is "in front of" something else, it uses the baselines: The (geometrically) lower the baseline of a thing is, the more downstage it is considered to be.
  • If we use the lower edge of the sprite instead of the baseline, we will get into trouble in a lot of very common situations. Take for instance, a cup object that is lying on a table. The lower edge of the cup sprite will be near the table top, that is "high up". If we use this value as a depth information, we would conclude that the cup is "far away in the distance", which is wrong.
  • The only way to tell AGS how distant the object is is setting the baseline of the object. AGS doesn't provide any other way to tell this information. So conversely, AGS should actually consider the baseline for depth calculations whenever it is set; it should not deliberately play dumb and ignore a set baseline, taking the lower edge of the object against better knowledge.

So to recap, a preliminary outline of a correct algorithm for ch.FaceDirection(o) would be:
Turn to eDirectionAB, where

  • A is "Up" when the baseline of o is geometrically higher than the baseline of ch, otherwise "Down" (use the lower edge of the sprite iff the baseline isn't set);
  • B is "Left" when the middle of o is geometrically to the left of the middle of ch, otherwise "Right" (and consider the scaling when determining the middle).

This preliminary outline must be adapted because the character can turn straight to the right or left and straight upstage or downstage, too. A good predictable calculation might be: Draw a vector in the 2d space from the middle of the baseline of the character to the middle of the baseline of the object. Then turn the vector to the nearest multiple of 45°. Then convert this angle into the direction we are looking for.

Also, some characters can only turn to the straight orthogonal directions, they don't have views for eDirectionLeftUp etc. â€" the calculation above should then use multiples of 90° in these cases.
[close]

Does AGS do this? No, and as far as I can determine it hasn't done this for decades:

  • When dealing with objects, it uses their left edge, so FaceObject() makes characters strangely prefer their left-hand side.
  • When the objects have a baseline set, it ignores the baseline, so FaceObject() wrongly assumes for a lot of objects that they are in the background when they are on a table etc. instead.
  • I haven't analysed the code that far, but I think that the function doesn't cleanly round to nearest multiples of 45° (90°) either; for instance, it seems to prefer the "DownRight" direction unless the lower left corner of the object is nearly directly under the character and only then switches to the "Down" direction.

Whole generations of adventure coders must have struggled with those functions and come to the conclusion that they must be broken in some elusive way. Oodles of adventures must contain kludgy workarounds. So there must be a very tenacious reason to keep those broken functions broken or else they would have been fixed long ago. And based on these experiences, I doubt that they can ever be fixed in future, either.

In the light of this it might be better to fix this on the AGS program side and provide drop-in replacements for FaceLocation(), FaceObject(), and FaceCharacter(). This is what I try to offer below:

  • FaceLocationBetter() offers directions in clean 45° multiples and so short-circuits any angle rounding operations that FaceLocation() might do.
  • FaceObjectBetter() and FaceCharacterBetter() use the baseline when set.
  • FaceObjectBetter() determines the object width whilst considering the scaling and uses the middle of this width. It uses an auxiliary function CurrentSprite() that gets the sprite that the object currently displays.

Perhaps the code might be useful in some way. It should go into GlobalScript.asc, and GlobalScript.h should get some suitable definitions. Or if you keep a module with often-used functions, you could stick it there instead.

The code might still have some bugs.

Code below:
Spoiler

Code: ags
int CurrentSprite(this Object *)
{
    readonly int view = this.View;
    if (0 == view)
        return this.Graphic;
    readonly ViewFrame *frame = 
        Game.GetViewFrame(view, this.Loop, this.Frame);
    return frame.Graphic;
}

function FaceLocationBetter(this Character *, int dest_x, int dest_y,  BlockingStyle bs)
{
    readonly int diff_x = dest_x - this.x;
    readonly int diff_y = dest_y - this.y;
    int sign_of_diff_x = 2 * (diff_x >= 0) - 1;
    int sign_of_diff_y = 2 * (diff_y >= 0) - 1;
    readonly int abs_x = diff_x * sign_of_diff_x;
    readonly int abs_y = diff_y * sign_of_diff_y;
    
    if (abs_x < abs_y)
    {
        readonly int tan_val = diff_x * 29 / diff_y; // 12/29 is an approximation for tan 22.5°
        if (tan_val >= -12 && tan_val <= 12)
            sign_of_diff_x = 0;
    }
    else
    {
        readonly int tan_val = diff_y * 29 / diff_x; // 12/29 is an approximation for tan 22.5°
        if (tan_val >= -12 && tan_val <= 12)
            sign_of_diff_y = 0;
    }
    return this.FaceLocation(
        this.x + 10 * sign_of_diff_x, this.y + 10 * sign_of_diff_y, bs);
}

function FaceObjectBetter(this Character *, Object *o, BlockingStyle bs)
{
    int y = o.Y;
    if (o.Baseline != 0)
        y = o.Baseline;
    int x = o.X;
    int width = Game.SpriteWidth[o.CurrentSprite()];
    if (!o.IgnoreScaling)
        width *= GetScalingAt(o.X, o.Y) / 100;
    x += width / 2;
    this.FaceLocationBetter(x, y, bs);
}

function FaceCharacterBetter(this Character *, Character *ch, BlockingStyle bs)
{
    int y = ch.y;
    if (ch.Baseline != 0)
        y = ch.Baseline;
    this.FaceLocationBetter(this.x, y, bs);
}
[close]
#32
Hello,

Seemingly, the standard GUI textbox can have any dimensions. However, no matter how large its height is, it will only accept text on one single line. I would have expected a way to configure the textbox so that long text wraps around and fills several lines, but alas, no dice.

I'd even hoped for a mechanism by which a textbox would accept a typed shift-return and convert it into '[' internally or at least accept a typed '[' and display it as a newline or at the very least accept a typed '[' and put a '[' into the Text string. Nope. It seems to simply gobble both shift-returns and '['s without further ado.

My mind boggles. I can't “wrap”  (pun intended) my mind around the fact that this sort of thing wouldn't have been implemented into the engine about a decade ago.  8-0  Anyway, never mind that. So, what would be the least painful way to get a "proper" textbox into a GUI that would wrap long text?




#33
Modules, Plugins & Tools / MODULE: Hexagons
Tue 07/04/2020 04:46:29
Hello,

I've used the last lockdown days to learn about grids of hexagonal tiles, and I've made a module out of it -- mainly for my own use, in minigames and such. If you think it useful, you're free to use it as you like. I've put the module under a CC-BY license.

Summary
This AGS module provides a framework for managing grids of hexagonal tiles.

  • Define a grid in arbitrary shape. Shortcuts for defining rectangular and hexagonal grids.
  • The tiles may be squashed.
  • Assign each tile on the grid a unique index (tile number) â€" so that you can keep the tile information in a (one-dimensional) dynamic array
  • Get the co-ordinates that correspond to a tile index.
  • Get the position of the centre of any tile -- so that you can position ,e.g., an object to it.
  • Convert the mouse position to the tile that the mouse is over.
  • Draw tile outlines onto a DrawingSurface., e.g., the room background.
  • Fill tiles with any colour (realized by drawing onto a DrawingSurface).
  • Print a sprite into the centre of a tile (onto a DrawingSurface).
  • Convert pixel co-ordinates (e.g., mouse co-ordinates) to Cube co-ordinates and Cube co-
    ordinates to the pixel co-ordinates of the centre of the tile.
  • Loop through a grid along any grid dimensions.
  • Convert from Rectangular co-ordinates to Cube (Axial) co-ordinates and vice versa.

Main limitation: Hexagonal grids have tiles with either “pointy tops” or “flat tops” -- I've only implemented flat tops so far.

The module is designed for AGS 3.5. You'll probably be able to make it work in AGS 3.x if you provide a declaration for managed struct Point { int x, y; }.

I'm providing documentation as well as a demo AGS program that uses these features. The program features some simple games and a maze generator for hex mazes.



Get the module here: http://www.loquimur-online.de/ags/Hexagons/Hexagons-1.01.zip
(The module proper and the documentation are in the Assets subdirectory, as stated in the README file.)
#34
Hi folks,

The Preferences of the AGS Editor used to ask whether the Editor should collect anonymous usage information and send them to a centralized server. I can't find this preference in version 3.5.0 (Build 3.5.0.23).

Where is this configured now?
#35
Hi,

A suggestion: Currently, on the AGS Games page, if you put "fernewelten" into the "Game search" box, you don't get any hits. However, if you put "Peter Bouillon" in, you do. Seems that the database query only works for real names, not for usernames. Similarly, the "members" subsection of the board offers lots of different ways for searching members, but the username isn't among them AFAICS.

Would it be hard to put that in as an additional option?

#36
Hi folks,

The adventure that I currently play has a mechanism where whenever you hit and hold a certain key, all the objects, hotspots, and characters that you can interact with are pointed out with animated arrows.

I wonder how this can be reproduced in AGS.

The straightforward way would be to define an invisible "pointing" object for each object, hotspot, and character in each room. Whenever the player hits the magic key, move the "pointing" objects above the things they point to (beware of characters and objects that are currently moving) and set the "pointing" objects visible. When the player releases the magic key, make all the "pointing" objects invisible again.

There are two downsides to this straightforward approach:

  • It really eats into your reservoir of objects, there can only be so many objects per room.
  • Defining all those "pointing" objects in every room will drive you nuts.

To avoid these issues, you could do "pointing" characters instead of "pointing" objects. But this still has the downside of cluttering the game with about 30 "pointing" characters, and you'd still need to tediously define about 30 "pointing" characters in the editor by hand for each game.

Is there another way to make this happen?
#37
Hi,

the only way I know of getting the left, right, top, bottom co-ordinates of characters or objects is a huge hassle:

  • I first have to find out the appropriate sprite, by getting either the graphic or the view and frame as appropriate. This is a hassle by itself
  • Then I can get at the sprite dimensions.
  • Then I have to find out whether scaling applies. This depends on the character or object and also on their position in the room.
  • If it does apply, I then have to modify the aforementioned dimensions according to the scaling that is in effect.
  • Then I can add the coordinates to the object X (!) or character x (!) or object  Y (!) or character y (!) values. (BTW. note the naming consistency.  :-\  )
  • If it happens to be a character, I then need to subtract half the effective sprite width from the x values, which is inexact but the best I can do.

Is there an easier way than all that?
#38
Hello, fellow adventurers!

I'd like to present the polished version of my recent MAGS game.
See below under "Release notes" for the changes.

Jake's Very Last Journey.

Jake has an unfortunate mishap on his way home, a mishap that lands him right in the clouds. He needs to find his way to the Pearly Gates and into heaven. But to make that happen, he needs your help.

Encounter, and counter, a preachy neighbour and an ill-tempered ghost in a wild and wonderful journey!

   

Download the game via the AGS Game directory
and play the game! Jake's eternal bliss depends on you!

Standard BASS interface. (If you think that Jake is acting overly obtuse, remember that your mouse has a right-click (examine) button!)

Hints & Tips thread




Release notes

Version 01.01:
Initial MAGS version.

Version 01.02:
Core gameplay hasn't changed as compared to the MAGS version, but I fixed bugs and improved animations.

  • Clearer BASS system explanation screen
  • Higher-res Jake sprites.
  • Improved Jake animations.
  • Removed bugs when clicking on components of the opening screens.
  • Fixed bug, Jake could sometimes walk through the crashed car.
  • Improved screw handling in first cloud screen.
  • Cloud potholes easier to discern in first cloud screen.
  • Fixed glitches in Mr. Reckman's song.
  • Probably fixed bug in ghost room: clicking on ghost when gui is up could cause strange effects.
  • (Windows version:) Thicker outlines for superior readibility
  • (Windows version:) Better visual for "ball lightning" gui and "cloud ghost" gui.
#39
Hi folks,

Is there a way to realize the following scenario within an AGS game?
Some GUI is shown.

  • User clicks on a specific GUI button
  • AGS reacts by opening the standard internet browser of the computer and showing a specific website in it.

This would probably only work on Windows systems, since Linux doesn't have the concept of a “standard” web browser AFAIK.
#40
Seemingly, when you register for the board, fill out the questionnaire and the inscription form, the system claims that an "activation link has been sent successfully" but the mail did NOT get sent. And no, it doesn't end up in the spam folder, either.

When you aren't a user yet, it is nigh impossible to report such an issue. There is a "staff list" column in the forum, but you can only see that when you are logged in. So you can't send PM, and there isn't any email address provided you could send a report to, either.

Even if you _are_ a forum member, it's kind of hard to contact the administrators: The _first_ name in the "Administrators" block is Pumaman, and they seem to block PM.
SMF spam blocked by CleanTalk