-
Notifications
You must be signed in to change notification settings - Fork 160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AGS 3/4 short-term roadmap for next update(s) #1121
Comments
I've been reconsidering the status of the master branch recently; originally (early in 2020) my thinking was that there could be a smaller 3.5.1 update with both some utility improvements and few new script API additions, some of which were added already. But as time goes it seem less a good idea to have another API update in backward compatible branch, for various reasons. Besides a need to maintain more versions at the same time, this may keep Editor users at the old branch and delay transition to newer one. Doing any API updates in the old branch is also awkward because you try to keep changes to minimum, and thus loose an opportunity to make a better feature redesign where it would be desired. So, my current thinking is that we should not have any new versions containing API changes in the older branch, and only have perfomance updates (as stated above in this ticket). For this reason, the post-3.5.0 master branch should not become a 3.5.1 version as it is, because it already contains new script API. The SDL port will be applied to both old branch and new one. This is still might be possible to do in one go as "ags4" for now can receive merges from master without serious conflicts (more or less). Any further perfomance update will probably have to be applied separately, as branches will become more different over time. We still need to think what version number we should use in the new branch. It definitely should be > 3.6, as 3.6 is for backward compatible branch with SDL. Maybe it makes sense to jump over couple of numbers just in case there will be other significant updates in the future (although idk if it's worth to do so). |
I agree with the plan. |
Following the idea from above comment, reused existing "ags3" branch (looks like I forgot to delete it earlier), merged latest release-3.5.0 in and cherry picked commits from master that only contain perfomance/utility enhancements and bug fixes applicable over 3.5.0. |
To make the CI work again where should the change go? |
so the SDL2 version will become 3.6 now ? |
Yes, this was the initial idea. 3.6 should be a SDL2 port with backward compatibility. |
An update: there are following branches now:
I guess, if ags3/ags4 division is surely decided, then ags4 and master should be merged, for the second (and hopefully final) time. SDL2 port needs extensive testing, so it's probably too early to merge into ags3 and ags4; at least CI must work correctly before it's done. Then we may put SDL2 version (ags3 based) on forums to let more people try it out. Something else that has to be decided actually, in regards to Windows version, whether we distribute engine dynamically or statically linked with SDL2. AFAIK the reasons for static linking with allegro 4 was simplicity of game installation (you basically just need an exe), and I am concerned users may not like having to add extra SDL2.dll, as it's another thing you can forget, or other reasons. |
imo this should be merged into master right away so that it gets some more testing and development on 3.6 can proceed. |
To clarify, what's currently in "master" is not meant for 3.6. This is the reason why I created separate ags3 branch. The master branch has already contained changes to script and game data, which I dont want to apply onto compatible branch anymore (I made a mistake with planning these changes in the past). But your suggestion implies that "master" should stay at "ags3" for now at least until 3.6 is released? Maybe I planned everything wrong again. |
my understanding was that ags4 is, well, the far-in-the-future branch, ags3 stays basically 3.5.x with only backports of bugfixes, and master becomes the 3.6 version which is basically 3.5+SDL2, plus all future developments targetting 3.x, backwards compatible to all 3.x games . |
As explained in the head post, I thought to have 2 branches - ags3 and ags4, but perhaps I was not clear about ags4 being a master branch. We wanted to switch to ags4 as soon as possible and make it master, because there are people who would like to continue developing it without having to deal with restrictions imposed by all the compatibility code in ags3. I would not want to do any game-related development on top of ags3 anymore, because it's becoming more complicated, and also inconvenient and unnecessary in presence of ags4 branch. Basically it becomes unclear why do we need an active ags4 branch if 3.5.0+ is still being developed. Or other way around: why continue adding more stuff in backward compatible branch when we have the one that allows to do bigger changes. We also simply don't have so many contributors to regularily develop in two branches at the same time. The only thing that were delaying this was SDL2 port, because I am persuaded that ags3 will also benefit from being based on a contemporary library. My thinking was to get SDL2 into ags3, and then to ags4 as soon as it becomes clear that it's a stable thing. Regarding "master" branch, I made a planning mistake in the beginning of the year, and already pushed some new game features there. But now I am in doubts about these. I see three ways out of this:
|
my opinion is that it's a mistake to make ags4 master and focus all development effort there, because to me it seems it will lead nowhere. the ags4 effort has no clear goals apart from "the old code sucks, let's rewrite it without caring about legacy"-i've rarely seen such an effort succeed, especially given that those that propagated this huge undertaking rarely seem to write code at all. my preference would be to make, as written above, the ags3 branch a legacy-fixes-only, make 3.6 (SDL2) master and focus main effort there, and leave the ags4 branch as the playground that it currently is. |
Define "main effort", @rofl0r. Ags4's branch goal is to make development less painful, it's basically ags3 with new features. and no backward compat. It works fine and I'm using it. We'll probably dub it AGS 3.8 or similar. When it comes to making new games, nobody needs to deal with three types of legacy savegames, obsolete game structures and systems that were replaced once or twice. |
Current ags3, or 3.6, also do not have any clear goals whatsoever. All these years it was a slow drag towards unknown. Improve a bit there, and a bit there.
Alan's question's right, what is the main effort in this context? Why have it in compatible branch, what is it for there? I feel like this discussion is going in circles many years. This whole project was a giant mistake from the beginning. We should not be developing new game features in the engine meant for running old games. Once all the ports were stable, we had to make another branch, or even another repository, and continue development there. These are separate tasks, each done by people who are interested in them. To be frank, I was never really interested in supporting old games, but I had to feeling responsibility for the previous work (and hate myself for this). |
As far as I can read up on the discussion that led to ags4, a lot of thought and effort had been put into it and the roadmap had been determined after a lot of painful deliberation. So why not continue with that roadmap? @ivan-mogilko 's #3 would be nearest to the roadmap as it had been originally planned. |
Actually that's a beautiful motto to go by. Improve or redesign or add in moderate steps, and whenever local code stands in the way that is only needed for compatibility to 2.x, drop that code locally. Whenever a largish body of decluttered, augmented code has accumulated, look for ways to improve/refactor the high-level structure. I wouldn't suggest rewriting the old codebase completely in one go, but AFAICS nobody has suggested that, at least not here. IMO it would also be fine to just drop large blocks of code altogether if those support features that the contemporary OSs don't support any longer (e.g., the Windows game explorer?), or that have become moot (ancient file formats). Provided those are easy to confine. |
well, i believe there was at least one big item on the ags3 roadmap still: decoupling the build tools from the editor. and i don't think this touches any code that can change behaviour for older games.
well, you may hate yourself, but the many people that can still play all these beautiful titles due to your work certainly don't. you've done a great service to the community, tbh. |
if i was to make a new game, i'd certainly care whether the features my game uses work only in this particular development version of ags i'm using or whether they will be seen as legacy and removed in the very next engine version. if you make a commercial game you could maybe think at first "it's a one-off project anyway", but half a year later you may want to support a new platform (like android) that's coming along and is now supported by ags4, but then you'll have to backport all features you need on your own to your now old engine version. |
This may be as well done while having ags4 branch as master, either in ags3 first and merging to ags4, or even in ags4 itself and then backported to ags3 (minus any format changes if they happen in ags4). But it's a good idea to review what is supposed to be done to achieve this "decoupling" milestone. I was gathering related tickets in the github project: https://github.com/adventuregamestudio/ags/projects/1 (was toying with these "projects" out of curiosity, but they may be ignored). I also wrote this quick overview in the repo wiki: https://github.com/adventuregamestudio/ags/wiki/AGS-Game-Build-process-(3.5.*), specifically interesting is Build steps table. |
The features that were (or still going to be) cut in ags4 are all considered obsolete for more than 10 years, and people are either not using them anymore, or not advised to use anyway. From what I understand, people who start their games today in 3.5.0 will likely be able to upgrade to "ags4" with minimal trouble. We ofcourse understand necessity of transition between versions, and not like want to cut or rewrite everything at once. We are also regularily in touch with game developers and learn what problems they have with the program. In this transition there are two main points afaik: updating game project (assets) and updating script (as API may change). Updating game project could be done by continious loading/saving them in steps, across few AGS versions, as explained above When updating script and encountering that some API was deprecated users normally replace it with new functions. If there are too many of these, it's possible to write a "compatibility layer" as a script module: such module would provide functions with old names which internally use new API. (I believe it's fairly possible to use this method withing ags4 and support almost all cut-out features, as they have equivalents in new script) |
Just want to chime in and say that I like that the tasks are easy to find in a board like this, makes it easier to find them when I want to orient myself on the current status of the decoupling |
Alright, since there are at least few things ought to be done for ags3, I think to retain ags3 as master branch for now. But because current master contains script and game changes, which I won't like to make part of further ags3 releases, I also would like to move (basically reset) master from its current position to ags3. I know this is not a very good thing... SDL2 port will be merged into ags3/master as soon as build server can build windows and linux at least. Ags4 branch may be freely developed further in parallel. I don't know how easy that would be to merge or port any things from ags3 to there, depends on changes. It's best to merge sdl2 port into ags4 too as soon as at least our build server can make windows and linux builds, that might make transition easier for developers. In regards to code changes the rules remain: ags3 should not have any new game features, only fixes, perfomance enhancements etc. All new script api and game features go into ags4. This may also make sharing things between these two easier, in theory (so long as game and utility engine code is nicely separated). |
Ok, done... |
Just bringing this up in case some of you devs missed it, an argument for why "ags4" should be released as AGS 4.0: https://www.adventuregamestudio.co.uk/forums/index.php?topic=58611.msg636629477#msg636629477 |
Has anyone said it wouldn't be? It's just a branch name. |
Ivan wrote on the forums:
And Alan Drake wrote in the thread above:
I'm suggesting that it shouldn't be released as AGS 3.8, but as AGS 4.0, for the reasons given in the forum thread. (And another reason: if "ags4" becomes AGS 3.8 and then later there is an actual AGS 4.0, it's going to be confusing to go back into the archives and come across discussions such as this, particularly for any future developers who weren't involved.) |
Thanks. I couldn't understand within the context of the forum thread where the confusion comes from, but now I do and I agree with you. |
I have no strong preferences. |
SDL2 backend is in master branch now. AGS 3.5.1 is the last version that has Allegro 4 backend, and it may be found in "release-3.5.1" branch. Regular patches could be still applied to that branch of course. I hope not, but if there will be a dire need for a larger allegro-based update, version 3.5.2 may be created by branching of release-3.5.1. I can also create a more explicitly named branch or tag marking the last allegro4-based version, if necessary. |
From now in master branch we work on completing SDL2-based engine for AGS 3.6.0. It's important to note that SDL2 backend was also merged into AGS4 branch, so it's going to be used for all future AGS development. In parallel I also started making stand-alone tools to replace the logic embedded within the Editor. See #1262, #1264, and one more may be coming soon. These tools on their own do not have ties to particular version, but to complete their integration we would have to modify the Editor too. That might be done as a part of 3.6.0, or as a next update, depending on how soon all necessary tools will be ready. |
I would like to suggest on ags3 to keep editor build with current implementation and additionally have the command line tools separately - deliver them in a zip/tar.gz called ags3-sdk. The disconnection is not going to be a small task, I predict it will be hard to sync ags3 to ags4 during this disconnection. Giving a bit of time with both should help picking up differences. Then later, disconnect the Editor on ags4. The idea is to have a release that people play with that have both, I am curious to see what bugs people would pickup by using. |
I was wondering if we may do this in 3.6.0, but guess you are right in that these tools may require more testing. But I still consider doing this in ags3 even if as an extra update after 3.6.0. Maintaining game building in both editor code and tools will become a big annoyance. I.e. with the unicode translations I already had to change both editor and translation compiler tool, and they have to be tested separately. |
let's move the disconnection to a 3.7.0 then. Just have a single major release with both. There's already a switch of backend of the Engine in 3.6.X, a switch of build tools is a new surface for bugs, I really would like having both together for a little time to try, test and compare things, and also getting feedback. |
Closing this now, so making a quick recap.
On the future plans, for ags4:
ags3 branch (3.6.* and on) does not have any far going plans at the moment, besides performance improvements and certain engine port updates. Finishing tools for this branch would be preferable, since people might keep using older versions of the Editor for a while, plus it might help recovering older projects. There's no "master ticket" for the next update though, only milestones: |
To recap current post-3.5.0 situation: in the end of 2019 it seemed that there's certain momentum gained with priorities discussed and @sonneveld finally preparing a SDL2 port branch, but then things stalled again unfortunately.
There seem to be big deal of my own fault in this too, thus my intention now is to set up a quick plan and make sure a step is made (or steps...).
What do we want to have
Guess the general conclusion was that:
What are priority tasks at the moment
How to divide tasks between ags3/ags4, in principle
As soon as there's defined ags4 roadmap, ags3 game updates should cease naturally.
Primary tasks for the nearest future
With all the above said, here's a table of priority tasks:
ignore non-essential differences for now, fix broken compatibility later
allow to "cut corners" and disable certain things, as some features may be reimplemented differently later
at least enough to automate
- script compilation
- game packaging
Task: SDL2 backend
Tickets for the reference: #1096
Branches for the reference: https://github.com/sonneveld/ags/tree/ags3--sdl2,
https://github.com/ericoporto/ags/tree/ags4--sdl2-sound-1
I'd like to do this in a parallel ags3-sdl2 branch forked of current master (ags3), because it will take several steps to make all things done, and many things will break in process thus require testing and fixing.
Besides engine itself, engine ports will have to be updated, and also editor will have to be updated to not use Allegro4 (hopefully it will be less complicated than the engine, as it uses only a subset of features from that library).
This could be something like AGS 3.6.
In regards to AGS 4, depending on how this will go we may either merge ags3-sdl2 branch into ags4 directly, or pick out changes and apply over ags4 branch (if merging is too complicated).
I guess in the end ags4 branch's differences will take their impact and we'll have to do things separately anyway.
Task: Engine port update
Tickets for the reference: #600 (?), #864 , #379
Branches for the reference: https://github.com/sonneveld/ags/tree/ags3--android-studio, https://github.com/sonneveld/ags/tree/android-64bit,
https://github.com/ericoporto/ags/tree/ags3--android-studio,
https://github.com/ericoporto/ags/tree/opengles2-render
For ags3 there were some improvements to Android port prepared by @sonneveld, which I'd like to have applied. Probably they will have to be added before SDL2 update.
Task: Compilation tools separation
Tickets for the reference: #872, #1007
Wiki page on existing game files and build step table: https://github.com/adventuregamestudio/ags/wiki/AGS-Game-Build-process-(3.5.*)
Task: Project source redesign
Tickets for the reference: #469, #1008, #1281
Other older tickets with roadmap drafts, for the reference
AGS 4 refactor/rewrite master ticket: #450 (pretty early, may be outdated now)
Sonneveld's draft for 3.6 engine/backend perfomance improvement: #762 (may borrow some ideas)
also note the idea about data migration between engines: #762 (comment)
The text was updated successfully, but these errors were encountered: