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 - RootBound

#1
Good post! How did you structure your design document, if you don't mind sharing? Describing mechanics, setting, story, characters, and puzzles sounds like a lot to organize, so I'm curious how you went about that.
#2
Sorry I couldn't participate this time around. Too much real life.
#3
AGS Engine & Editor Releases / Re: AGS 3.6.2
Sun 01/06/2025 10:10:12
I posted this on discord this week but will mention it here too:

I found an "illegal exception" bug. This happened when I made a mistake in my code and used "%s" instead of "%c" when formatting a string to use String.Chars[]. The line that caused the error was inside a "for" statement, and looked like this:
Code: ags
String value = String.Format("%s", otherString.Chars[i]);

Changing %s to %c stops the error, but I assume there ought to simply be some kind of error message here that stops compilation of the game instead of a crash.
#4
Traveling this week so I'm a "no" this time.  :)
#5
Fascinating. Can't imagine how you did this without dynamic arrays.
Quote from: abstauber on Thu 08/05/2025 07:39:56* Save the level
* Close the game
* Create a room and tell it to load the level, you just created
So when you save the level and load the level, where is the data being saved, and how is it being loaded?
#6
@Ghostlady I'm willing to give it a try if you can send me the background and existing animation frames.
#7
@Crimson Wizard you make good points. I'll have to consider whether to try to rewrite my current system to accomplish this.
#8
@abstauber that's incredible. It looks far more advanced and comprehensive than my method.

At the moment what I have looks like this to the end-user:

-Import all tile sprites into the AGS editor
-Set room size using regular AGS room editor
-Designate tile sets in script (e.g. sprites 1-16 belong to tile set A, and so on)
-Run the "game" (level editor)
-Use level editor to place tiles on grids (supports up to 4 layers, after that it gets very slow)
-Export each layer as a .pcx (alternative is .bmp, those are the only two AGS export formats)
-Choose a specific layer to export as a walkable area mask (tiles will not be walkable, everything else will--this is required by my platformer game template I'm making)
-Convert .pcx files to .png using outside program (AGS cannot import .pcx). I don't like this step, but the alternative is exporting as .bmp, which is space-inefficient.
-Import each tile layer as an object in the room
-Import walkable area mask (which should match the "normal" ground tile layer).
-Place objects in the room using normal AGS room editor (room object limit is 256, which is tricky if you want, for example, 100 coins to collect plus lots of other interactive objects--I'd prefer to generate these with overlays in script, but haven't figured out a way to make that work)
-Set a single hotspot for all objects of a given type, so that interactions can be handled in script modules.
-Everything else (character movement like falling, collisions etc) is handled in script (part of my platformer game template-in-progress)

So I wouldn't call it an "engine" and maybe more of a "tool" to use within the AGS editor.

I don't currently feel like it's robust enough for a general end-user, but it does work.

What are the end-user steps involved in your system? Can the user import sprites without using the AGS editor? Are files exported at all? I'm really curious how you handled it (and I admit your code is slightly above my comprehension).

Thanks very much!
#9
Hi @Crimson Wizard I'm using 3.6.2 as well, and have so far been having no issues.
#10
So a person walks into a doctor's office, and the doctor says, "You're too healthy. I'm prescribing a headache. I'll send the prescription in to your pharmacy."

The patient goes to the pharmacy, who say they received the prescription and they do have the headache in stock, but the patient's health insurance won't pay for it because it's a name brand and not a generic, with a price for 90 days of $35,000 dollars, which exceeds the plan's coverage. The pharmacy tells the patient they need to call their insurance.

The patient calls their insurance and waits on hold for a while. When a representative picks up, the representative explains that they need a Prior Authorization from the doctor. This is a basically a note from the doctor saying the patient needs the medication.

The patient says, "Isn't that just a prescription?"

The representative says, "No, this is a note from the doctor saying the patient actually needs the medication."

The patient calls back the doctor's office and says, "They need a Prior Authorization."

The doctor's office says, "Sure, we'll send that right in."

The patient goes back to the pharmacy, and the pharmacist says, "Sorry, the insurance is still saying they won't pay for it."

The patient calls the insurance again, who says, "We never received the Prior Authorization from the doctor's office."

The patient says, "Isn't there anything you can do? My doctor says I really need this headache."

The representative says, "Let me transfer you to another representative."

The patient waits on hold for awhile again.

The second representative says, "I dug around and figured out a way to override this. That means we'll pay for 90% of the cost of the prescription, so that leaves you with a co-payment of only $3,500 for the 90 days, or only $1,166 per monthly refill."

The patient goes back to the pharmacy counter, and the pharmacist says, "We haven't received any override information from the insurance. Do you want to pay the out-of-pocket price?"

The patient sits down in the waiting area and says, "God, my head hurts."
#11
Thanks so much to everyone who played and voted! It's great to see the participation.  :)
#12
My votes:

50 Words:
Spoiler
2:31:15 by Mandle
[close]

200 Words:
Spoiler
Leaving Home by Mandle
[close]

500 Words:
Spoiler
A Tragedy of Errors by Baron
[close]

Overall favorite:
Spoiler
A Tragedy of Errors by Baron
[close]
#13
Layer support enabled.  :)  Now I need to implement very silly things like actually being able to scroll around the room. (laugh)

#14
So I've noticed that people often ask if it's possible to make platformers with AGS, and they get the same answer: Yes it is, here's an example, and no, we don't support tile-based drawing of rooms.

I'm trying to expand that answer to: Yes it is, and here's a working game template, and yes, the template lets you draw tile-based room backgrounds.

So far the code has been full of hurdles, but I've made great progress today, so I wanted to announce the existence of this endeavor.

For now, enjoy the results:

#15
@Crimson Wizard Thanks for the code-tidying suggestion. I revised it. It certainly looks much more efficient and elegant now. :)
#16
Maybe I'm the only one who wants this, but if you have a big scrolling room in your game and you want to take a screenshot of the whole room at once, with characters and objects overlays and so on all in their proper places, here's a function you can use to do that!

The screenshot will be saved to where you have your saved game files.

NOTE: If you have custom viewports or multiple cameras, this will not work properly. You'll need to disable them and go back to the default game viewport and camera, and re-enable them afterward.

Please let me know if you have any questions (or if you find any bugs)!

EDIT: Code revised as suggested by Crimson Wizard below.

Code: ags
//place this function in global script, then call it in on_key_press, or when clicking a GUI button, etc., whatever you prefer
function take_fullroom_screenshot()
{
  PauseGame();
  //saves original camera coordinates and checks if camera was tracking player character
  int oldCameraX = Game.Camera.X;
  int oldCameraY = Game.Camera.Y;
  bool WasAutoTrackingOn;
  if(Game.Camera.AutoTracking == true){
    WasAutoTrackingOn = true;
  }
  else{
    WasAutoTrackingOn = false;
  }
  //if you want to hide GUIs and the mouse cursor, feel free to do so here. 
  //or you can also specify the render layer in the parameters of every DynamicSprite.CreateFromScreenShot() instance.
  
  //creates dynamic sprite, pans camera around room, takes screenshots of each part of room,
  //splices them onto dynamic sprite, and saves sprite to file
  DynamicSprite* BigScreenShot = DynamicSprite.Create(Room.Width, Room.Height);
  DrawingSurface* DrawOntoBig = BigScreenShot.GetDrawingSurface();
  DynamicSprite* PartialScreenShot;
  for (int y = 0; y < Room.Height; y += Game.Camera.Height)
  {
    for (int x = 0; x < Room.Width; x += Game.Camera.Width)
    {
        Game.Camera.SetAt(x, y);
        Wait(1);
        PartialScreenShot = DynamicSprite.CreateFromScreenShot();
        DrawOntoBig.DrawImage(Game.Camera.X, Game.Camera.Y, PartialScreenShot.Graphic);
    }
  }
  DrawOntoBig.Release();
  BigScreenShot.SaveToFile("$SAVEGAMEDIR$/BigScreenShot.pcx");
  //removes dynamic sprite, returns camera to original coordinates, and reactivates auto-tracking if it was on
  BigScreenShot.Delete();
  PartialScreenShot.Delete();
  Game.Camera.SetAt(oldCameraX, oldCameraY);
  if(WasAutoTrackingOn == true){
    Game.Camera.AutoTracking = true;
  }
  //if you manually hid GUIs and the cursor, re-enable them here!
  UnPauseGame();
}
#17
My reviews:


Let's talk about anal sex:
Spoiler
As others have said, it was more an educational dialog than a game, but I think it accomplishes what it sets out to do.
[close]

Weaving time:
Spoiler
This feels like a well-realized simulator, with the simple added option of different gender presentation each day. I wanted this to make more of a difference (for example, do you not get blamed for the problem at work if you're in masc mode?) but it seems that the overall mood level is all that makes a difference (unless I missed something).

On the other hand, to have a variance in gender presentation simply be a normalized part of everyday life is perhaps just as valuable.

Also, the first time the mood went to 200%, it warmed my heart.

A bug: the game crashed when I started a new game after finishing it once. "Invalid overlay ID"
[close]

I voted for:
Spoiler
Weaving Time
[close]
#18
Hi Barn Owl,

I believe dialog scripts are considered global scripts, so they can't access room object names. To access a room object from a global script, you would need to do so using the object's ID number--for example, "object[1]" will refer to the object with ID number 1.

You can find the object's ID number by looking at the object in the room editor.

Then try:

Code: ags
object[ID number here].Visible = false
#19
This is a great theme - I don't think I've seen a prompt before that was not about the content of the game but rather about the form. It's creative and feels really different. I doubt I'll have time to enter but I'm really curious to see what projects it inspires.
#20
Ok, well I am officially declaring this contest a tie between @Creamy and @heltenjon so the two of you have the esteemed honor of designing the next scenario. Thanks for both of your participation!
SMF spam blocked by CleanTalk