Does it make any sense to develop AGS further?

Started by Crimson Wizard, Thu 13/04/2017 19:10:09

Previous topic - Next topic

Calin Leafshade

If we're sharing adventure game engines:

Adore is at a stage now where it is "usable" with caveats.

It's not a direct reimplmentation of AGS like Scotch's but it shares lots of similarity with the AGS design.

- Lua based scripting
- No IDE, all edited with text files and folder structures which, instinctively, seems faster than using AGS
- Build script based so I provide things like raw Photoshop files and a script extracts hotspots and stuff from it. Why reinvent the bitmap editor when better tools exist?
- Live reload of assets by pressing a key. One of AGS's bottlenecks is the slow compile speed and getting back into the game to test. In adore you can just press F9 and it reloads all the animations, rooms, script code and so on while keeping the game state ocnstant
- Resolution independent rendering. This allows you to render all your "game" stuff at the game res but UI/text at native resolution. This is becoming more acceptable as low res becomes as aesthetic choice rather than a limitation (like The Last Door)
- Two parallel threads similar to AGS's rendering/scripting dichotomy. Mine uses Lua coroutines to accomplish it.
- Animations are spritesheet based with some configuration. I rarely found that I reused sprites in lots of different views so it seemed like a complication.
- Pixel shader support with some effects built in (Black and white, bloom, saturation boost etc)

Some code to show how coding generally looks in Adore:

Code: lua

-- A room
local room = adore.scenes.new("maintenance")
room.ambientLight = {110,110,130}
room.bloom = true
room.scaling = {0.45,0.6}

function room:afterFadeIn() -- Room events
	
	aKass:say("I'm in! Man this place reeks of smoke. Someone's been taking breaks in here.")
	aRepro:infolink("This room's not supposed to be in use, Kass. Be careful.")
	aKass:say("When am I not?")
	aRepro:infolink("Well...")
	aKass:walk(1496, 930, true):face("right")
	aKass:say("Damn it. The door's locked.")
	aRepro:infolink("Turn back now! The virus will keep.")
	aKass:say("No, I said I'd do it today, I even brought this sweet card reader.")
	aRepro:infolink("That's not going to help you in here, is it? You were gonna steal a pass from someone in the lobby. Turn back.")
	aKass:say("No, if I wuss out I'll never impress anyone. If you're not going to help, stop blabbering so I can max my bandwidth. I'm sure there's something in here I can use.")
	
end

room.hAccessPanel = room:newHotspot({ -- Room hotspots
	name = "Access Panel",
	clickable = true,
	interact = function()
		if not room.openPanel.visible then
			aKass:walk(1670, 940, true):face("right")
			adore.wait(20)
			room.openPanel.visible = true
			aKass:say("Just pops right off!")
		else
			aKass:face("right")
			aKass:say("The security circuitry for the door. I need to overload it somehow.")
		end
	end,
	useInv = {
		cigfoil = function() -- When the "cigfoil" inventory item is used on the hotspot
			if not room.openPanel.visible then
				aKass:say("I need to take the casing off first.")
			else
				aKass:walk(1670, 940, true):face("right")
				aKass:say("I should be able to override the door's security circuitry by connecting these two terminals. Thankfully this little bit of foil should work...")
				Latency.activeInventory = nil -- Custom inventory implementation
				aKass.inventory:removeItem(iCigFoil)
				TODO("Animation of kass shorting the panel")
				TODO("Sound indicating door has unlocked")
				room.hDoor.unlocked = true -- Custom local state
				aKass:say("...and there we go!")
			end
		end
	},
	wiki = { -- Custom data for a hotspot
		source = "Free//Net Security News",
		text = "After getting locked in the university copy room with his co-worker Dr John Foster, Dr Kevin Schriebmen (UCL) demonstrated it was possible to bypass the S37 electronic lock by bridging two connections in the security panel."
	}
})


Code: lua

--A module script

adore.event("on_mouse_press", function(x,y,b) -- Event based
		local scene = adore.scenes.getCurrent()
		local sx,sy = adore.camera.toRoom(x,y) -- Dynamic camera rather than viewport, can be rotated, zoomed, translated
		if scene:onClick(sx,sy,b) then -- Allows a scene to "catch" a click
			return
		end
		local hit = scene:query(sx,sy) -- Query a scene at a location to get all the stuff there
		if b == "l" then
			if Latency.activeInventory then
				if hit and hit.clickable then
					if hit.useInv then
						local fn = hit.useInv[Latency.activeInventory.uniqueName]
						if type(fn) == "function" then
							fn(hit, Latency.activeInventory)
						elseif type(fn) == "table" then
							for i,v in ipairs(fn) do
								aKass:say(v)
							end
						elseif fn then
							aKass:say(fn)
						else
							aKass:faceMouse()
							aKass:say("That won't work")
							Latency.activeInventory = nil
						end
					end
				end
			elseif not hit then
				aKass:walk(sx,sy)
			elseif hit.clickable then
				sayOrDo(hit, "interact")
			end
		elseif b == "r" then
			if Latency.activeInventory then
				Latency.activeInventory = nil
			elseif hit then
				Latency.wiki.show(hit,x,y) -- Custom functionality
			end
		end
	end)

tzachs

I might as well come forward too...
I'm also "secretly" working on a rewrite, my secret project is actually out in the open for a long time, and I've recently asked CW to join me (and if any other developer wants to join, yes! Please let me know).
You can see my progress on Github.

My approach is similar to Snarky's suggestion, it's a complete redesign (I'm ticking almost all of the boxes in his list, and planned to tick them all before first release).

The engine is written with c#, the scripting language is also c#, and the editor (there is no editor currently, but there will be) will also be in c#, so hopefully having one language to rule them all will make it easier for developers to contribute.
Regarding the API: I tried to keep some level of familiarity with AGS's API and workflow (so I still have Object, Character and Room) but did change stuff where I saw an opportunity for better concepts (Views are out, Outfits are in, so this is more in line with Visionaire).

Currently the engine is working on Windows, Mac and Android, I'm working on the IOS port and will move on to Linux next, and after that will start working on the editor.

For the engine I'm using an entity-component based system, similar to unity, and I have Object, Character and various GUIs as pre-set entities with all the components you'd expect, so you would normally not need to touch the components (so the workflow will be similar to AGS), but you'd be able to add/remove components if you want specific behaviors. So for example, if you decide mid-game that you want your object to talk, you don't need to replace it with a character (or add a dummy character), you can just add a "talk" component to your object and you're good to go. And as GUIs are also entities with components just like objects, you can even turn your character to a button mid-game if you have some crazy mini-game idea.

Another highlight of the engine is it's built to be customizable from the bottom up. There's a hooking system which you can use to replace even the most basic systems (you don't like the built-in path finding? No problem, code your own and switch).

Also, The API is built heavily on c# async/await, which should make it easier to program actions happening in parallel.
Here's an example from the demo:
When you look at the window, the camera will zoom in, rotate and move (all with asynchronous tweens), at the same time, followed by the character saying "there's nobody home", and then the camera will tween back to its original position:

Code: ags

private async Task lookOnWindow(object sender, AGSEventArgs args)
{
	_room.Viewport.Camera.Enabled = false;

	float scaleX = _room.Viewport.ScaleX;
	float scaleY = _room.Viewport.ScaleY;
	float angle = _room.Viewport.Angle;
	float x = _room.Viewport.X;
	float y = _room.Viewport.Y;

	Tween zoomX = _room.Viewport.TweenScaleX(4f, 2f);
	Tween zoomY = _room.Viewport.TweenScaleY(4f, 2f);
	Task rotate = _room.Viewport.TweenAngle(0.1f, 1f, Ease.QuadOut).Task.
		ContinueWith(t => _room.Viewport.TweenAngle(angle, 1f, Ease.QuadIn).Task);
	Tween translateX = _room.Viewport.TweenX(240f, 2f);
	Tween translateY = _room.Viewport.TweenY(100f, 2f);

	await Task.WhenAll(zoomX.Task, zoomY.Task, rotate, translateX.Task, translateY.Task);
	await Task.Delay(100);
	await _player.SayAsync("Hmmm, nobody seems to be home...");
	await Task.Delay(100);

	zoomX = _room.Viewport.TweenScaleX(scaleX, 2f);
	zoomY = _room.Viewport.TweenScaleY(scaleY, 2f);
	rotate = _room.Viewport.TweenAngle(0.1f, 1f, Ease.QuadIn).Task.
		ContinueWith(t => _room.Viewport.TweenAngle(angle, 1f, Ease.QuadOut).Task);
	translateX = _room.Viewport.TweenX(x, 2f);
	translateY = _room.Viewport.TweenY(y, 2f);

	await Task.WhenAll(zoomX.Task, zoomY.Task, rotate, translateX.Task, translateY.Task);
	_room.Viewport.Camera.Enabled = true;
}


On top of that, the engine supports custom shaders, object compositions, independent resolution, parallax and more.

Dave Gilbert

#82
This kind of thing is a BIT out of my wheelhouse, so please correct me if I'm wrong. It seem like the engine is being fragmented and evolving in completely different ways by different people, which means we will have several different versions of the engine that all individually do awesome things but are impossible to merge together cohesively. Again, this kind of thing is WAY above my head, but my first impression is that this is exactly what we should NOT be doing? That this will inevitably lead to big problems? Again, beyond my experience, but my first reaction is to go "Eeek!"

As I said before, getting new development features is less of a priority for me then aiding ease-of-use for players. 90% of my tech support questions are caused because winsetup is arcane and clunky, and if the wrong options are chosen the game just refuses to play instead of giving useful feedback. For example:

The eternal struggle between DirectDraw and Direct3D. In many cases, one of the drivers will work but not the other. If the wrong driver is chosen by default, the game just will not start. It would be nice if the game could detect which one your computer will run, and just switch over to it. 

Also, the options for fullscreen mode are confusing. Currently there are three:

-Max round multiplier
-Stretch to fit screen
-Stretch to fit screen (preserve aspect ratio)

The average user will not know what "max round multiplier" means. *I* don't even know what it means, nor can I find an explanation anywhere on this forum or in the manual. And I don't understand why anyone would want to "Stretch to fit screen" and NOT preserve the aspect ratio. If there's a reason for including that option, I am unaware of it.

OK this has gone slightly off-topic. I'm aware that these are issues/questinos that I should have brought up before, but never did because I didn't think they were a priority for people. I've been encouraged to be more vocal so this is what you get. :)


Calin Leafshade

Well I mean, to be clear, none of my work is dependent on AGS in any way. It's an entirely new engine that borrows some of AGSs concepts because they are good.

This is really how software gets developed. I try something with a unique perspective, so does Tzachs, so does scotch and then the best one "wins" so to speak. My "no-editor" approach is faster and easier for power users but less friendly for newbies and that's ok. The people who don't want the complexities of an editor can use Adore and the people who think the editor provides a good point of reference can use Tzachs'.

I'm certainly not forking AGS in any sense and AGS developed games would not work in Adore.

Snarky

Quote from: Dave Gilbert on Fri 21/04/2017 15:50:58
As I said before, getting new development features is less of a priority for me then aiding ease-of-use for players. 90% of my tech support questions are caused because winsetup is arcane and clunky, and if the wrong options are chosen the game just refuses to play instead of giving useful feedback. For example:

The eternal struggle between DirectDraw and Direct3D. In many cases, one of the drivers will work but not the other. If the wrong driver is chosen by default, the game just will not start. It would be nice if the game could detect which one your computer will run, and just switch over to it. 

Also, the options for fullscreen mode are confusing. Currently there are three:

-Max round multiplier
-Stretch to fit screen
-Stretch to fit screen (preserve aspect ratio)

The average user will not know what "max round multiplier" means. *I* don't even know what it means, nor can I find an explanation anywhere on this forum or in the manual. And I don't understand why anyone would want to "Stretch to fit screen" and NOT preserve the aspect ratio. If there's a reason for including that option, I can't think of one.

("Max round multiplier" means that you multiply up the game resolution to the biggest integer number that will fit on the screen, thus ensuring sharp pixels. So a 640x480 game on a 1920x1080 screen will be running in x2 = 1280x960, because x3 = 1920x1440, which doesn't fit. This setting is usually the best option for windowed mode.)

Writing an alternative to Winsetup really is easy, though (it's just windows app with dropdowns/check boxes to make selections, and then read/write the configuration to/from a text file). If your players don't find it usable, create your own setup program! Stuff with Direct3D/DirectDraw or the game failing to run is harder to fix, but is the sort of thing that is built deeply into AGS â€" one of those arguments for a comprehensive rewrite / starting over.

Crimson Wizard

#85
Oh great. So now the options in winsetup are confusing. And this is a great moment to tell this. Not the moment when I was asking advice on forums to how organize it, and name those options. But almost a year after it was made.

I am done. And out of here.


QuoteWriting an alternative to Winsetup really is easy

Of course it is. Certainly more easy than fixing savegames or exporting game to iOS. There are millions of coders around the world who could do that, but it's just that everyone prefer to whine about winsetup is confusing and asking me to revamp it, choosing time when I cannot do that.

Dave Gilbert

This was not my intention and I apologize. This thread seemed to indicate that a "developer perspective" was wanted, so I gave it. I understand that not everything can be done at once. I am sure there are reasons why things are set up the way they are. Reasons that I am not aware of.

As I said, I am just a user of AGS. I don't understand how the engine actually works, so I am inevitably going to make a request or make a comment that is "wrong" And I don't want you to quit in frustration because of it. My comments are obviously making things worse, so I'll back off for now. But please reconsider.

JanetC

Quote from: Dave Gilbert on Fri 21/04/2017 15:50:58
This kind of thing is a BIT out of my wheelhouse, so please correct me if I'm wrong. It seem like the engine is being fragmented and evolving in completely different ways by different people, which means we will have several different versions of the engine that all individually do awesome things but are impossible to merge together cohesively. Again, this kind of thing is WAY above my head, but my first impression is that this is exactly what we should NOT be doing? That this will inevitably lead to big problems? Again, beyond my experience, but my first reaction is to go "Eeek!"

Our fault too! We currently have a mutant version of AGS that works great for iOS but isn't integrated with the main branch.

m0ds

#88
Quote2. Talking about bringing in professional programmers. Just...stop.

Sure, let's have all the local, capable programmers splinter off and create their own adventure game engines instead, as this thread seems to  indicate is happening. Is there a reason why these people have decided to make their own rather than contribute to AGS? You tell me.

Quote3. Making this all about money. It's not. And attempting to pay someone to do something they have clearly lost interest in doing isn't going to help matters.

So you don't understand the philanthropic aspect, and how just because one person doesn't want to be imbursed somehow can only mean no-one does, nor should be. Granted, making it all about money is not a good thing, but don't get narrow minded and make this all about "money + CW". There's a lot more to it than that, ie a community thriving from funds. Someone who doesn't want to be paid can still quite easily accept that cash and pass it onto someone they feel is more deserving, or charity. There's occasions where it's kind to refuse money, but there are those where it's just being a stubborn dick about it, dragging everyone elses potential earnings down with you.

I said it to Snarky and I'll say it to you - stop shutting or trying to shut down lines of opinion. You're better than that. And the buck of the discussion of money does not stop with you, it really doesn't.

Alongside people who've never earned from AGS telling us not to involve money, whilst we're at it, let's definitely also have more people who've barely touched/used AGS in 10 years lead our topics of conversation about the engine. It makes total sense ;)

CW, it might actually be worth stepping back, down, or away. It would force the AGS community to rethink or restructure the way it procures its development and that seems a pretty relevant thing to do at the moment.

ps. Hi scotch!

Calin Leafshade

We could start an indiegogo and then never deliver a product, eh m0ds?

The point is that you couldn't pay me enough money to put up with supporting that code base.
It has to be a labour of love or you just won't get the commitment you need.

Professional programmers just don't go into open source projects to get rich.. there are better ways of doing that.

m0ds

#90
Not even relevant. We're discussing AGS and its potential/future, not my personal projects ya smarmy git.

Perfect example though of someone that can only equate money to themselves, and not others, nor any consideration on how to pass it on. It's not necessarily even your fault, as you're in the majority, it's more of a society controlled perspective.

But, who said anything about getting rich?

I don't know the technical ins-and-outs of AGS, and would admit I don't really have a clue on what's best for the technical team. The things I'm talking about here, are things that I feel from some of my personal experiences and strengths, of for whatever reason sticking around here for 15+ years, granted that doesn't include releasing own point & click adventures, but I know how to make money here, I'd like to learn how to do it for the benefit of others stronger than I do currently, and I know how to get people together when it's needed or is innovative (ish). You can choose to make use of this or sweep it aside, it doesn't bother me either way, but that's why I think such things could be important here, because they have been a positive benefit to me, and I'd rather pass that on that "stick with the norm" of everything being the way it has been for 20 odd years. You'll have to pardon me if that, admittedly, impatience, rubs off as being a dick :=

Now my slightly OT but important Q, to Dave, is would you be the official 'treasurer' of AGS? I think everyone here could agree it's okay if all of AGS's potential earnings went through you, be they small or not small. Without forcing on you the burden of book-keeping for it, I'm just curious, is it something you'd do, or consider? Not suggesting some kind of crazy monetization, nor saying AGA is incapable (being the person any funds go to right now) but the notion - if the community needed a standing point on who and what represented any of its finances - would you do it?

Snarky

Quote from: Screen 7 on Fri 21/04/2017 19:41:40
Not even relevant. We're discussing AGS and its potential/future, not my personal projects ya smarmy git.

When you're saying that your opinion on making the engine commercial is more worth listening to because of your experience making money with AGS, and that your perspective on money is more enlightened than what the rest of us can grasp, it's a bit relevant...

Quote from: Screen 7 on Fri 21/04/2017 19:06:14
Alongside people who've never earned from AGS telling us not to involve money, whilst we're at it, let's definitely also have more people who've barely touched/used AGS in 10 years lead our topics of conversation about the engine. It makes total sense ;)

QuotePerfect example though of someone that can only equate money to themselves, and not others, nor any consideration on how to pass it on. It's not necessarily even your fault, as you're in the majority, it's more of a society controlled perspective.

SilverSpook

#92
Haven't had time to read this entire thread, but I'm interested in the Patreon or other on-going funding mechanism to help the the AGS developers out.  Especially if it could lead to better user experiences and Mac / iOS compatibility.

I'm also with Wadjet Eye in that I came from alternate engines, Unity in particular, because AGS was just way, way easier to make adventure games in.  And I'm saying that having been lead programmer on 3D Unity games and Half Life and Unreal mods over decades -- AGS just has the least overhead to think about, the least fixer-upperness to fixer-up, and is the most robust in the adventure scene.

m0ds

#93
QuoteWhen you're saying that your opinion on making the engine commercial is more worth listening to because of your experience making money with AGS, and that your perspective on money is more enlightened than what the rest of us can grasp, it's a bit relevant...

No sir, it's not. I'm clearly not talking about any experience from a game that's WIP, am I. And yes, considering I pay 7 community members, I probably am more enlightened on such topics. Not so much as Dave though, that's other level shit, $trillions ;) But "engine commercial" was merely one line of discussion, I was actually talking about the whole lot, an AGS economy, even if it's a small one, for the benefit of all, and if not for our benefits, then for others. All the other ships have their nets in the water, catching this never ending source, but we just paddle along with our pride. But it's cool... I know money discussion and AGS go together like chalk and cheese. And that's not a problem. Just a bit tough to work with, when you're in my position. See my previous post, this is why I ask Dave such a Q. I'm all for the idea of a little profiteering, and I'm not ashamed of it. The same way a growing number of us round here aren't ashamed of profiteering from AGS itself. If it can be done in an agreeable way around here, it should be done, to quote charles cecil, "simply no two ways about it". Until AGS is raising money for charity or struggling devs on a regular basis, which it could do quite easily, you can consider my experience here "incomplete". I apologize for being blunt and a dick, but I'm not sorry for my strong view point on this, no matter how awfully I put it across :=

That brings me back round to one of my earlier posts about a sense or purpose, which IMO is more important than any cash, which could be argued may also 'erode' a sense or purpose, but I honestly feel it could help this community, and the hearts of its visionary designers and players, etc etc, to feel it's giving back more than it ever intended. Handled correctly, cash is no less a useful tool as AGS, notepad or a spanner. For some reason, we keep it actively and persistently out of our toolkit.

Calin Leafshade

The money issue has kinda already been answered.

Dave Gilbert tried to pay several people to work on AGS, including myself. All refused.
CW himself said that he doesn't want money.

I mean, show me *anyone* who would work on AGS for a reasonable sum who has the skills to do so.

m0ds

#95
Dave and CW are 2 people. This is a community of several thousand. Can you, with certainty, apply the same answer to monkey05_06, alan v drake, rickj (not sure if he does AGS stuff)? And people who have experience but have never come forward to this point in time, either because such a paid opportunity has never existed or because there's been not so much call for it with CW doing a good job of it in the meantime and CJ for love of labour before that?

There's never been a concerted effort to call for programmers. And like any audition process, you never know what you're gonna get.

People refuse the cash because they don't want to be obligated to the project. That's understandable. But someone will be. There's something for everyone, or rather, someone for everything. Don't get me wrong, if someone like CW wants to carry on, unpaid, etc etc, that's no problem to me personally. But it might have more (worse) ramifications than someone being obligated and paid (depending on how important/drastic the possible ramifications are for you). It kind of does for me, and it sounds like it kind of does for Dave. But it's true, that's seemingly only relevant to a particular side of the usage of AGS (commercial games).

When it comes to the big questions here at AGS, we usually put it to vote. If this question is "already answered" then way too much is getting "answered" simply because of a forum post by one or two members, which doesn't seem a very fair or democratic way to come to that conclusion. I realize, it hasn't come to that lately. But it looks like voting on something is going to be necessary at some point...to help find support for CW, to stabalize AGS' future, something.

AGA

Out of interest, do you know what contracting developers charge, Mark?  And I'm not even talking particularly good ones here.

RickJ

AGA, I believe the going rate for contract developers is in the neighborhood of $10000 per month. I recently saw an ad for a full time lead developer that offered $110k to $140k per year.

LimpingFish

#98
So a handful of people depend on AGS to make a living. So what? They outlaid no money for the program, and pay no licensing fees to use it in a commercial capacity. If I had a commercial AGS game in the works (and who says I don't?), I wouldn't automatically assume that I could then demand the whole AGS project lean into my way of thinking because I have a couple of quid riding on it. Like I said earlier, if AGS doesn't meet their need, and they have the money to pay for a commercial engine (which, let's be honest, would cost a fraction of the amount required to pay a programmer to develop AGS for an indefinite period) then pay for one! I'm not saying it's current AGS or nothing, but can we at least stop decrying a future in which we don't monetize the community?

Instead of this 1% demanding how we should decide our future, and dictating who has a right to talk about it (the cheek! :=) based on the fact that commercial endeavors are something they need to think about, how about we get our shit in order (I mean, secret rewrites of the engine going on, while the person in the driving seat of development has a public existential crisis about the validity of the current engine?! Way to go guys. FFS!) and secure the immediate future of the program.

Crimson Wizard is out, it seems. That sucks, but he owes us nothing, and has given us more than we had any right to expect. So many thanks to him, and I wish him all the best.

Now, what do we do next? Any of you secret-Santas interested in a spot of philanthropy?

...

I am angry and annoyed with how this is playing out.
Steam: LimpingFish
PSN: LFishRoller
XB: TheActualLimpingFish
Spotify: LimpingFish

Grundislav

Maybe I'm chiming in a bit too late in all this, but as another commercial AGS developer, here are my thoughts:

AGS is and always has been great and easy to use. I appreciate the fact that people went ahead and continued to develop the engine and add new features after it went open source. Personally, I can count the number of times I've thought "man, I wish AGS could do this" on one hand. Then again, my projects have never really been ambitious to the point of requiring the engine to do anything crazy.

As it stands right now, I'm fine with the current version of AGS. If development on it is abandoned, that's fine with me. I'd much rather it stay as is than have Crimson Wizard or anyone else who decides to take on the responsibility suffer any sort of emotional breakdown over it. That's just not worth it.

Does AGS need anything more? Maybe? But I can't really think of anything that it absolutely NEEDS for my purposes.
Is this opinion completely egocentric? Absolutely, but again it's my opinion, and I'm presenting it from the point of view of my needs, which are probably similar to a lot of other devs.

It seems that the community at large is pretty happy with most of the things AGS can do currently. Those who can accept what it does do well with it. Those who want other things go on and use other engines. That's just how it goes.

I don't think AGS should have a Premium Edition or be monetized in any way, because quite frankly, the demand for AGS point and click adventures isn't high enough. You're not going to get thousands of developers flocking to buy this new and improved licensed version of AGS. You might get twenty, if you're lucky. So it would effectively be a waste.

Anyway, that's all I've got to say on the matter!

SMF spam blocked by CleanTalk