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

#2
Hi, CharlesS. Your friend is right, AGS is primarily aimed at 2D games. And like Kara said, it's focus is point and click adventure games like Space Quest, Maniac Mansion, etc., but it's flexible enough to make all kinds of games.

You'll probably want to start at the Getting Started page here, which introduces you to the game engine and editor, walks you through a tutorial, and links to the documentation you need to make games.
https://adventuregamestudio.github.io/ags-manual/

If you like videos, here's a fairly quick-moving tutorial that covers a lot of ground in about an hour and a half:
https://www.youtube.com/watch?v=Dm0ZdGtGbyY

Here's a playlist that covers the basics of making an AGS game over a series of videos. It's older, but most of it should still apply:
https://www.youtube.com/playlist?list=PLeuPHRWonRSQweIZ06N-6UmyZ0StBgLtq
#3
Quote from: Jordanowen42 on Sun 09/03/2025 03:38:16Let me pose another question- and I'm quite serious: how much would one of you chaps charge to program the whole puzzle for me?

I'm always up for a freelance gig, and you can message me if you're serious. But like I said before, I think you're probably one line of code away from fixing the immediate issue of the counter automatically changing through all its stages.
#4
Quote from: heltenjon on Sat 08/03/2025 16:45:36Here are my thoughts this month:

Limblob by Soulstuff:
Spoiler
This is your first game, right? I think you have done a good job. I liked the different walking/bouncing animations, and the blob population reminded me of Shape Village, which is not a bad thing in my book. There's a clear objective in the game, and fair (if easy) puzzles to get there. Well done. Next time, try to add sound or music as well.
[close]

Finding Balzac by Pell:
Spoiler
Short visual novel, four endings, placeholder sketches (which work fine, actually) and a clumsy/evil doc inspired by yours truly.  :-D  I'm honored! This was the funniest entry and had me laughing several times. Downside - unfinished and probably shorter than it was planned to be.
[close]

MAGSMan by Kara Jo Kalinowski:
Spoiler
I wish I had not read your idea before playing! Anyway, Hangman is a classic, and the quite large word list makes the game replayable as a casual game. Downside - no other extras like sound makes the game bare-bones. It's not an original idea, of course, which may count for something in a MAGS vote, even if it may live on my hard drive for a while.
[close]

Mall Quest (Unfinished) by Babar and jfrisby:
Spoiler
Ooohhh, I am getting Commodore 64 vibes again, partly because of the soundtrack, no doubt. I hope you finish this later on. I like the scenarios where the player runs around from npc to npc, fixing their problems and getting other items in return. (Reminding me of the bazaar in Sierra's Conquests of Camelot.) I found the ending, but I don't think a finished game will be spoiled.
[close]

Thank you. It's really an interactive gag cartoon with multiple endings to make it a game. Without the multiple endings, one of them would have been the punchline panel. I intended more polished graphics, but a late start and technical issues prevented that.
#5
Quote from: Kara Jo Kalinowski on Sat 08/03/2025 15:20:34
Quote from: soulstuff on Sat 01/03/2025 06:18:12Holy batcrackers I actually finished something with AGS



WELCOME TO LIMBLOB

A short and simple adventure

Story:

You arrived at the adventure game afterlife. Sadly, your poor
performance in your last game has left you a blob with no mouth or limbs.

You need to find a way to get limbs to be able to leave the afterlife and go into your next adventure.

DOWNLOAD LINK



Use of the theme: (light spoilers)
Spoiler
As you get more parts for your body you get access to actions or verbs. For example getting a mouth allows you to talk to people and since some of them are removable having them or not resolve different things.
[close]

I enjoyed the blob character and the game overall - I left a review on the game itself.

Quote from: pell on Tue 04/03/2025 06:29:45Here's mine. It still has placeholder art, but it's playable. There are multiple endings, depending upon your choices during the game.



https://gamesbypell.itch.io/finding-balzac

A quick funny little game, with a certain kind of humor. I appreciated the multiple endings, not a whole lot of games do that, especially MAGS games. A streamer playing the MAGS games thought that the game might have been hand drawn and scanned in, I was curious if it was that or if you used a tablet or something.
Thank you. I'd never made an AGS game with dialog before, so I wanted to try it out. The game I need to finish with heltenjon has a lot of dialog in it, so now I've got some experience with coding that.

Those were digital drawings done with a tablet.
#6
I usually use FontSquirrel.
#7
@Jordanowen42 Are you still having the problem we talked about?

Regarding the coding advice we've given you, I suggest taking whatever makes sense to you as a beginner and moving on to make your game. You can fall into a trap of rewriting things every time you get (or somebody gives you) a better idea and never get your project finished.

A lot of these things will make more sense to you as you gain experience.
#8
Quote from: Kara Jo Kalinowski on Thu 06/03/2025 00:49:20The deadline is passed, but voting hasn't started yet, so if it's not too late, here is mine. If it's too late for the voting, that's okay. I got a new computer and was dealing with headache of OS stopping working after a few minutes and like 5 or so OS reinstalls.

MAGSMan - a simple hangman style game made for MAGS Feb 2025 - Missing a body part

Created by Kara Jo Kalinowski

https://www.adventuregamestudio.co.uk/play/game/2832/

5000-more-common.txt is a list containing 5000 words that have been marked as common. This list was generated by Michael Wehar and is released into the public domain - https://github.com/MichaelWehar/Public-Domain-Word-Lists/blob/master/README.md. Note that this word list was generated while utilizing OPTED - http://www.mso.anu.edu.au/~ralph/OPTED/

(The original download link contained a small bug with the 10th letter being displayed offscreen for words length 10 or longer, that's been fixed.)



It was fun playing hangman for the first time in a while.
#9
I want to point out that there's nothing magic about room_RepExec. You can designate a function to run repeatedly while you're in a particular room by clicking its "Repeatedly execute" field in the Events tab under the room's Properties. That function name is just the default name that the editor gives you, and it automatically generates an empty function with that name in your room script.

You can use any allowable function name or even create the function first in the room's script and then enter that name into the "Repeatedly execute" field. If you do change the name, you need to make sure the name in that field matches the name of the function you want to call. Just changing the name in the script won't automatically change the name in the Events tab. This is true of the functions called from the other events as well.
#10
A game cycle, more commonly called a game loop, is just the continuous running process of the game. A game is a program that runs in a loop until you tell it to quit. While it's looping, it's checking for user input, updating the screen (animation) and performing the game logic.

The room_RepExec function is called repeatably, so anything you put in there is called repeatedly.

Just call UpdateTwoObjects where in the code you want that to happen. For example, you change visibility of the objects in oObject20_AnyClick() based on mouse clicks, so that might be a good place to call the update.
#11
I think I know what's happening here. You're calling UpdateTwoObjects every game cycle, because you call it from room_RepExec. That means that while object[2] is visible, the calculations to change the values of the counters happen every game cycle. If I'm right about this being the problem, I recommend one of two options:

1. The easiest way is just to call UpdateTwoObjects only when it needs to happen. Am I right in thinking that would be whenever the player clicks on one of the buttons?

2. If you want to call it every game cycle, you could set some kind of TwoObjectsNeedUpdating type of variable, and then set that to true after pressing a button (or whenever the update needs to happen) and then false again after performing the update.

Edit: To be clear, option 2 would normally not be a good idea. But it does illustrate how to selectively control something that would otherwise get changed by a continuous process (like keyboard and  mouse input).

I really loved the Myst games. I played the second, third and fourth games in the series, but not the first or last ones. I'm looking forward to seeing how this comes out.
#12
I've watched the video, and I'm going through the code to try to match these variables names to what they're meant to represent.

In case you're still up, can you tell me if myCounter1 and myCounter3 are supposed to be the six states and myCounter2 and myCounter4 the four temperatures? I ask because myCounter1 and myCounter3 show seven states in the code, 0 through 6.
#13
Quote from: Jordanowen42 on Thu 06/03/2025 23:55:18
Quote from: Khris on Thu 06/03/2025 11:35:17@pell
My point is that in the "all this stuff" part, if any of the lines concerning segment #1 are a match, the code for segment #2 never runs. This is also most likely what caused OP to open this thread.
Because why would they deliberately sabotage their segment2 code, then ask here why it doesn't work?
None of this is intentional, because it's all a hot, flaming mess. Again, sorry. But this needs to be unlearned ASAP.

As an aside: using the object[] array in a room script is possible but less readable than using oButton1 or oSegment2 or whatever.

I changed the segment 2 script so it's myCounter 3 and 4. Still nothing. Going to implement some more ideas.


Did you mean for segment 2 to run if segment 1 does not? Because the way you have it coded, the function will return if any of the if statements in segment 1 fail.
#14
Quote from: Khris on Thu 06/03/2025 12:13:06OP was copy-pasting the two dozen lines then replacing 11 with 12 but forgot to also rename the variables is my assessment.
So the second block is very much supposed to run in all cases and supposed to handle the second lava pipe segment (object[12]) but doesn't because the segment #1 / object[11] code always prematurely exits the function.

This caused me to look back again. I missed that there was a second part in scrolling because it looks like the first part since the OP forgot (presumably) to change the variable names. That's the "missing part".

The solution is surely to change those variable names to myCounter3 and myCounter4 unless we've overlooked something else.
#15
Quote from: Khris on Thu 06/03/2025 11:35:17@pell
My point is that in the "all this stuff" part, if any of the lines concerning segment #1 are a match, the code for segment #2 never runs. This is also most likely what caused OP to open this thread.
Because why would they deliberately sabotage their segment2 code, then ask here why it doesn't work?
None of this is intentional, because it's all a hot, flaming mess. Again, sorry. But this needs to be unlearned ASAP.

As an aside: using the object[] array in a room script is possible but less readable than using oButton1 or oSegment2 or whatever.

I think we're talking past each other. My point is that the code for object 2 is probably not running because it's probably missing. All the "stuff"  looks to me like it applies to object1.

I do need to clarify that when I said the control flow is the same with or without most of those return statments, I meant that the function just returns after the if/else statements anyway. Of course, if any other statements are added afterwards, those returns within the bodies of the if statements would shortcircuit the control.
#16
Quote from: Khris on Thu 06/03/2025 11:08:17Yes, but again: the code for the first object is very likely to also call "return;" which will exit the function and thus ensure that the code for the second object is never executed in the first place. Doesn't matter if the variable names are fixed if the code never runs.

Are you seeing a short circuit that I'm missing? Most of the return statements are superfluous. After the first two statements that check for visibility, all the other returns could be deleted (and should be) with no change to control flow that I can see (edit: only because the function just returns anyway after all these if/else statements).

Edit: I think the behavior in your first sentence is what the OP intends from what I can see.

Edit again: The OP can clarify, but it looks to me like it's:
 If object 1 visible, do nothing.
  If object 2 visible, do nothing.
 Otherwise, do all this stuff. (Except there is probably missing stuff causing the missing behavior.)
#17
Quote from: Khris on Thu 06/03/2025 10:59:15
Quote from: pell on Thu 06/03/2025 10:46:43To be fair, at least as far as  I understand the code, that looks like the intended behavior. The visibility of those two objects are set outside this function based on user clicks. If they are false, this function changes the sprites based on certain conditions, and if either are true, it returns without changing any of the sprites.
As Snarky already pointed out, the code will call "return;" in a ton of cases and thus exit the function before other variables are handled. This is almost guaranteed to not be intentional and very likely the reason why OP is posting in the first place; OP is just copy-pasting code without fully understanding what it does.

The OP claimed the code worked fine for the first object, but not for the second. I'm thinking the bulk of the body of the function probably needs to be repeated but using myCounter3 and myCounter4.
#18
Quote from: Snarky on Thu 06/03/2025 09:52:58So in this case, if (object[1].Visible == true) or (object[2].Visible == true), none of the rest of the function will run, since you have a return at the end of each of those blocks. In fact, I don't see how this could work as you describe at all:

Quote from: Khris on Thu 06/03/2025 10:10:36Right, the "return" kills the second part, I didn't even catch that :-D

To be fair, at least as far as  I understand the code, that looks like the intended behavior. The visibility of those two objects are set outside this function based on user clicks. If they are false, this function changes the sprites based on certain conditions, and if either are true, it returns without changing any of the sprites.
#19
Quote from: heltenjon on Thu 06/03/2025 08:54:31Edit: deleted, I was wrong.

In what way?

Edit: Never mind. You caught yourself as I was posting.
#20
I can see that on Line 128 of the full room code listing that object[2] relates to the variables myCounter3 and myCounter4. But I don't see where you handle either of those variables anywhere else in the code you posted (besides declaring them).
SMF spam blocked by CleanTalk