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

Messages - Kara Jo Kalinowski

#21
Quote from: heltenjon on Thu 27/02/2025 10:32:42I didn't vote this month. I was a few minutes too late. But as I haven't played all the games thoroughly, that's just as well.

Bière Américaine (MAGS) by Ponch
Spoiler
Nothing annoyed me at all. I like slider puzzles and don't find them particularly difficult. (Perhaps it's the other way around.) And some good humour at the end. So for me, it was a 10 minute, fun game. But if I liked it, surely I'm not supposed to vote for it?
[close]

Skrexeval's Quest (MAGS) by Emma Gundersen
Spoiler
The laptop I played this on didn't have the F-keys operational, so I couldn't save. I decided to come back to it, but didn't find the time before the time limit. From what I played, my thought was that this was probably going to be my favourite, mocking King's Quest with silly instant deaths.
[close]

Artifact by Kara Jo Kalinowski and Pell
Spoiler
I cheated and watched Wham! solve the maze for me. The maze was well made and everything, it's just that I find mapping mazes plain boring, and I've done that too many times in my gaming life already. I liked the annoying puzzle at the beginning/end. And that you had to walk through the maze just to try something new was just the right amount of trolling to be acceptable in this theme. When I tried to vote, but was a few minutes late, I was going to vote for this one.
[close]

One Million Years Dungeon by Falsely
Spoiler
Too long - Didn't Play.
Not really. But I did try it and found out I had to play it in another manner with more time, no noise and pen and paper at the ready. I also gathered from the other feedback that this one would take some time to play. Unfortunately, I've also been trying to play the nominees for the AGS awards and had a lot of work deadlines at the same time. So on the back burner it sits, unfortunately.
[close]

Congratulations to the joint winners!

And if you haven't had enough of breaking the rules, here's Space Quest Historian's game All Demons Must Go To Hell, which tried to break almost every single rule in the book, and turned out a hilarious game. Made in AGS. The maze is programmed in the same way Kara Jo did hers, by the way, as a single room with shifting exits.

Haha well thanks for the vote even if it was too late :P

I agree with the winners of this one. I liked both of them for different reasons, though I voted for one million years dungeon due to how invested I was in note taking and trying to find secrets. Congrats!


#22
My spoilery reviews

Bière Américaine (MAGS) by Ponch

Spoiler
I'm not really the greatest at sliding tile puzzles, especially the end of sliding tile puzzles where there's barely any room to move. But this one starts with small dimensions, so I guess it's the more frustrating part of the puzzle. I liked that it wasn't JUST a tile puzzle and that you had to make a path. Though I solved that part by screenshotting / paint.

I thought that walking off the path by mistake might make you restart the game which would have been awful, but I didn't want to risk it. Still don't know if it actually "kills" you or not. But staying on the path wasn't hard.

I liked the humor in the ending.
[close]

Skrexeval's Quest (MAGS) by Emma Gundersen

Spoiler
I really like the king's quest AGI vibes that this entire game throws. The vertical looping in the desert was a bit strange...as was that you start on the same Y value no matter where you enter the desert from. I felt that this game was one that didn't focus on the theme but rather included it as it authentically would have been used in games back in the day.

I could tell there were going to be soft locks and I didn't want to spend too much time restarting the game, so I'll admit that I did check the walkthrough for soft locks and accidentally spoiled a solution or two in the process. But in general, I like the feel of the game. I wouldn't have guessed that killing the guy caused a soft lock even though I probably should have suspected that.
[close]


Artifact by Kara Jo Kalinowski and pell (My game, but I'll give some thoughts and perspectives to the creation)

Spoiler
I don't expect to win this competition though I'm curious if I will get any votes! I think that there are others had so much more to them and probably deserve it much more than mine. I will say about mine, that my artist wanted to keep it small - and asked to keep it to 2-3 rooms. That's why I decided to go with a labyrinth - with doors on the North, West, East, South that could be shown or hidden to create 1 giant maze. If you look at the code, the entire labyrinth minus the final room is actually just 1 room. The creation of the doors and the random rotation upon entering each room (if you didn't notice!) is all handled through code - arrays specify where each door in each room lead, then it's all set up each time the room is loaded.

It was always my intention from the start that the final room's solution would be "Come here with no items and you won't get trapped" - but I really wanted to make it to where the person doesn't accidentally win the game without trying, if they leave the house right away. So that was my idea with the hat - he won't leave the house without it, so it would be very hard to accidentally leave without it on the first time. And same with having the letter - another added element the player is almost sure to have. I originally was going to have extra "useless" items in the drawers and in the crack underneath the dresser, but I think it worked out great with just the 3 items. And how getting rid of the items actually becomes the puzzle, due to not wanting to accidentally let the player win right away.

There's also a secret with the portrait that some people might miss that's a callback to King's Quest 2..

I don't think that my game will win any awards but I'm quite happy with how I incorporated the theme.
[close]

One Million Years Dungeon by Falsely

Spoiler
I could tell from the beginning that this would be the longest and most time-consuming game, and I was right. You can totally learn this symbol language and I was really invested in that - making sure to translate the text on the title screen and in the manual! As I mentioned before to you directly, I was disappointed that I couldn't manage to translate the Godere stone on its own - if there's an update to this game I really wish that the unused letters that don't appear in any other translated phrases could be provided somewhere, so that it's a bit easier. Cause figuring out stuff like this even when you don't need to is fun!

I felt dumb for needing a hint for that final puzzle and should have realized it myself but when I noticed that happening before I thought it was a small bug...

But yeah overall I really liked this game. Hopefully there's plans to add this one to the AGS database
[close]

#23
Quote from: Stupot on Tue 25/02/2025 04:19:33How are we getting on, campers?
Quote from: Stupot on Tue 25/02/2025 04:19:33How are we getting on, campers?

The theme this month really didn't resonate that much with me, so I definitely won't be making a full fledged adventure game, but I had a funny idea, which I might make.
#24
I added this to the ourScriptHeader in EditorPlugin.cpp

Code: ags
"import const char* HelloWorld();\r\n"

Then this in the .cpp file

Code: ags
const char *HelloWorld() {
    return "Hello World";
}

void AGS_EngineStartup(IAGSEngine* lpEngine) {
    engine = lpEngine;
    engine->RegisterScriptFunction("HelloWorld", (void*)HelloWorld);
}

At first I tried just the cpp file stuff but the editor wasn't recognizing the HelloWorld function. Adding the other line allowed the editor to recognize the function

Line 59:   
Code: ags
Display(HelloWorld());

__Plugin100.ash(59): Error (line 59): Cannot create pointer to basic type

What am I doing wrong? Thanks.

#25
Actually never mind... I forgot to delete an older version of the DLL... I didn't realize which DLL it was giving me problems about :/

Okay, now to try and figure out how to actually make something. Thanks

When distributing games made with plugins do I also need to distribute the visual c libraries?
#26
AGS Editor .NET (Build 3.6.1.25)

I installed both the 64 and 86 versions of the thing you linked above.

Actually, I tried it in 4.00.00.14 and it works there.
#27
#28
Quote from: Crimson Wizard on Tue 18/02/2025 17:59:45When a C or C++ program is built with MSVS, it will require corresponding VC runtime redistributable installed on the system. This depends on the selected Windows SDK and platform toolset (these may be found in project settings).

Supposedly, if you're using VS 2022, then you may use the generic VC redist for 2015-2022 versions, found here:
https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version

I have both the 64 bit and x86 versions installed. The dependencies listed here I have confirmed are in windows/system32 or a subfolder. I am compiling this DLL for x86 since AGS is 32-bit, I believe.

#29
Quote from: Crimson Wizard on Tue 18/02/2025 17:20:39Right, so you need to declare one compiler macro: THIS_IS_THE_PLUGIN.
In which case DLLEXPORT macro will become properly defined when you compile DLL, and functions become exported AFAIK.

You may either do
Code: ags
#define THIS_IS_THE_PLUGIN
before including "agsplugin.h"
or add THIS_IS_THE_PLUGIN to the Preprocessor Definitions in the project settings.

Thank you, that worked. For the second error...

I am using x86 release. The only thing I changed in the settings was turning precompiled headers off. VS 2022 free

#30
Quote from: Crimson Wizard on Tue 18/02/2025 17:06:27
Quote from: Kara Jo Kalinowski on Tue 18/02/2025 16:47:17I'm really trying here, but I can't figure out how to make sure those functions get exported. I included the code from those files you mentioned. I need to include Common.h, all of Common.h's dependencies, and so on? I tried using the console and it doesn't appear to be exporting any functions. I don't know what code causes the functions to be exported.

I don't understand anything you've just said. Export what functions? What is "Common.h"? Which console?

-The first error message. AGS_GetPluginName not exported from plugin. What is exporting it from the plugin? I've included all the code related to AGS_GetPluginName and nothing is being exported from the plugin.



Seems to show no functions are being exported.

EditorPlugin.cpp has an include "Common.h" but if I comment that out, it builds.

I have

EditorPlugin.cpp https://pastebin.com/GTERQdXu (commenting out the Common.h include)
agsplugin.h https://pastebin.com/N9GDp2m5
dllmain.cpp
Code: ags
#include <Windows.h>
#include "agsplugin.h";
#include "EditorPlugin.cpp";

int AGS_PluginV2()
{
    return 1;
}

// DllMain - standard Windows DLL entry point.
// The AGS editor will cause this to get called when the editor first
// starts up, and when it shuts down at the end.
BOOL APIENTRY DllMain(HANDLE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }

    return TRUE;
}

I am missing something fundamental and I don't know what I am missing, because I don't know it.
#31
I'm really trying here, but I can't figure out how to make sure those functions get exported. I included the code from those files you mentioned. I need to include Common.h, all of Common.h's dependencies, and so on? I tried using the console and it doesn't appear to be exporting any functions. I don't know what code causes the functions to be exported.

agsplugin.h has this:

Code: ags
DLLEXPORT const char * AGS_GetPluginName(void);

EditorPlugin.cpp has

Code: ags
LPCSTR AGS_GetPluginName()
{
    // Return the plugin description
    return "SpriteVideo Plugin";
}

Again, I've not worked with DLL files, my brain isn't good at reading code I've never worked with and understanding it without explanations.

I just want to make something simple showcasing how information is passed back and forth between the DLL such as AGS reading the result of a function which returns "Hello, world" and similarly a function accessing some data within AGS using the DLL.
#32



What is all of the things I have to export from the plugin to stop getting errors? Just this doesn't work:

Code: ags
#include <Windows.h>

int AGS_PluginV2()
{
    return 1;
}

// DllMain - standard Windows DLL entry point.
// The AGS editor will cause this to get called when the editor first
// starts up, and when it shuts down at the end.
BOOL APIENTRY DllMain(HANDLE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }

    return TRUE;
}

I don't really want to keep solving this one error at a time until it stops erroring... I don't understand. I need a starting point. I had tried some other code that chatgpt gave me and it wasn't completely solving my issues, I thought I might be missing a dependency or something. Anyways, I'm too tired to understand this now, if nothing else, I'll keep trying tomorrow.
#33
Trying to learn from huge projects without explanations overwhelms me, but I'll try. I don't quite understand the bare minimum that needs to be included in a plugin for it to work.
#34
Advanced Technical Forum / Hello World plugin
Tue 18/02/2025 03:09:44
I have Visual Studio installed with MSVC as the help file says we should be using. I can't wrap my head around how to make a .dll file for runtime stuff. ChatGPT seemed to think I needed to download agsplugin.h but I didn't need the other files in the engine/plugins folder, but you can't really trust what ChatGPT says.

I did a new project / DLL

I'm trying various things, but it's complaining about things. Is there something simple that you could show me just to understand how it's meant to work? (I have never done anything with DLL files specifically.)

Specifically, I'm just messing around - I don't have a goal in mind other than wanting to add functionality when AGS's code seems limited, and just to know how they work. I am trying to make a run-time engine plugin as the first thing.
#35
In your VerbGui.asc (Tumbleweed/VerbGui/Edit Script), there is a function static void Verbs::Localize()

In that, it appears as so:

Code: ags
// English - eLangEN
    // yes/no-keys
    Verbs.SetKeys(eLangEN,  'y',  'n');
    
    Verbs.LocalizeActionButton(eLangEN,eGA_Open,    59, 60, 'q');
    Verbs.LocalizeActionButton(eLangEN,eGA_Close,   61, 62, 'a');
    Verbs.LocalizeActionButton(eLangEN,eGA_GiveTo,  63, 64, 'y');
    Verbs.LocalizeActionButton(eLangEN,eGA_PickUp,  71, 72, 'w');
    Verbs.LocalizeActionButton(eLangEN,eGA_LookAt,  73, 74, 's');
    Verbs.LocalizeActionButton(eLangEN,eGA_TalkTo,  75, 76, 'x');
    Verbs.LocalizeActionButton(eLangEN,eGA_Push,    65, 66, 'e');
    Verbs.LocalizeActionButton(eLangEN,eGA_Pull,    67, 68, 'd');
    Verbs.LocalizeActionButton(eLangEN,eGA_Use,     69, 70, 'c');

And similar code for other languages.

So you can do 1 of 3 things:

Change the sprite ids from within this function. The first sprite is the ID of the regular sprite and the 2nd ID is the sprite with mouseover. This is if you want your sprites to have different ids for whatever reason. It would be then be the "default" values of the sprites.

Paste this function wherever inside the code you want to change the buttons, and from then on, it will use the new sprites.

Open your sprites folder and just import over the old sprites. This is the most simple and sounds like what you really want to do.
#36
Quote from: Crimson Wizard on Sun 16/02/2025 23:17:41My first thought is that I would try avoiding Walk command and use Move instead, which does same pathfinding but does not play any automatic animations. Then use LockView / Animate / UnlockView to animate the character as you see fit.

The remaining problem is turning: Move won't halt for you to do the turning animation. Which probably means that you would have to do something along these lines:
* detect when the character starts to move into a new direction;
* stop character;
* play turning animation;
* call Move again, from the new starting point but with the same end point.


If you use AGS 4, then the situation may become somewhat easier, as AGS 4 exposes new Pathfinding API, which lets you to get the path beforehand and either move character segment by segment, or detect when the character approaches turn points.


Quote from: Kara Jo Kalinowski on Sun 16/02/2025 22:54:53I see the following in the help file:

Code: ags
IAGSEngine.GetMovementPathWaypointCount 
IAGSEngine.GetMovementPathLastWaypoint 
IAGSEngine.GetMovementPathWaypointLocation 
IAGSEngine.GetMovementPathWaypointSpeed 

These are from plugin API, not script API. Unfortunately, movement path was never exposed to script.

The problem is going to be as I mentioned before, that when the character changes directions it's not immediately obvious where the destination is, so you wouldn't know where to turn. For example, a waypoint moving up 50 pixels and over 5 pixels is going to move vertically 10 pixels before changing x coordinate. So it has a similar problem to the code I pasted earlier.

Looks like AGS 4 might be the solution then... But do you think it would be unfeasible in AGS 3 to write a function to calculate the waypoints?
#37
So I was wondering how I would go about changing the default behavior of walking. By that, there have been a couple questions on Discord in which writing my own walk script *might* be the way to go, but it's a pretty big undertaking. I was trying to browse through the github to see how AGS handles default walks, which is a bit much to take in since things are happening throughout multiple files. But 2 things I was considering how to solve (things asked on the Discord server) are as follows:

1. How can I disable the "Up" animation while leaving Left, Down, and Right intact?

Here was my solution:

Code: ags
function late_repeatedly_execute_always()
{
  if (!old_moving && player.Moving)
  {
    old_moving = true;
    old_x = player.x;
    old_y = player.y;
  }
  if (player.Moving)
  {
    if (player.x != old_x || player.y != old_y)
    {
      if (player.x > old_x && player.y <= old_y ) 
      {
          player.Loop = eDirectionRight;
      }
      else if (player.x < old_x && player.y <= old_y) {
        player.Loop = eDirectionLeft;
      }
      else if (player.x == old_x && player.y <= old_y && player.Loop == eDirectionUp) {
        player.Loop = eDirectionRight;
      }
      
      old_x = player.x;
      old_y = player.y;
    }
  }
  old_moving = player.Moving;
}

This works, but with a problem. If player.x == old_x I don't know if the eventual path is going to be heading to the left or to the right. I have it assuming right, but it might wait a few frames, the x decreases, and then turn left.

2. How do I include a custom turning animation instead of using default animations?

I realized through testing that I could possibly play a different animation when the direction changes, but you can't call blocking animations within late_repeatedly_execute_always, and the default walk cycle is going to assume you are moving even if you stop to play an animation using custom code.

It would be a better solution if I could code my own walk cycle. How does AGS do it?

I see the following in the help file:

Code: ags
IAGSEngine.GetMovementPathWaypointCount 
IAGSEngine.GetMovementPathLastWaypoint 
IAGSEngine.GetMovementPathWaypointLocation 
IAGSEngine.GetMovementPathWaypointSpeed 

I don't know if those are things that I have access to using AGS code. If AGS walk is done by calculating waypoints and walking in straight lines (which I think is what's going on) is there a way to calculate those waypoints and then have me code how I want a character to walk? Or is there a way to see if the next waypoint is to the left or right of the current location? Or maybe there's a simpler solution to problems like these... Not just limited to these specific issues.
#38
I wasn't sure if this question would be better suited here for in general, since it's not really a scripting question, but is still technical-related, so sorry if it's in the wrong place.

If I want to write a module/template to be published on the forums for general use, what version of AGS is best to target? Is the latest official release too recent? I know some people still use older versions...but people starting new projects will probably be on the latest version anyway, right?
#39
Looking further, the specific entry where searches start crashing is "Engine Plugin Run-time API" which has a ton of sub-indexes. That could also be what's causing it, when it tries to process that one specifically.

Searching for an index prior to that which exists doesn't crash it. Searching for "Engine Plugin R", anything later than that, or that doesn't exist crashes it.
#40
Quote from: Crimson Wizard on Sat 15/02/2025 16:54:16
Quote from: Kara Jo Kalinowski on Sat 15/02/2025 16:30:05I thought that it might be memory-related issues.

Why?



It doesn't seem to have problems searching for earlier letters of the alphabet just for later letters. Searching for indexes that start with A,B,C,D,E all don't crash it. It's F or later that crash it. Which leads me to think that the problem is having to process further down the list. But I don't really know how this stuff is coded behind the scenes so I can only guess what the problem might be.

Also for those first letters that don't crash the game, adding a second letter with no matches in the index will crash it, but ones found won't crash it.
SMF spam blocked by CleanTalk