-
-
Notifications
You must be signed in to change notification settings - Fork 98
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
Discussion on the future of Phobos #1458
Comments
In fact, due to the lengthy cycle of PR merges for this project, many contributors eventually maintain their own branches and continue to develop them independently, which results in an extremely difficult merging process. Moreover, for the current Phobos, those PRs still need to be addressed, which requires some method for prioritization and thus necessitates a 'vote' from users, even in the form of reacting with emojis (just an example, which is obviously not conducive to statistics). Addressing a portion of the PRs does allow the project to move forward, but of course, this does not fundamentally solve the problem. For PR:
|
This is already there in discussions, one of the reason I moved all suggestions to discussions, but for some reason no one uses the upvotes: |
This is one of the reasons why I am usually pushing users to build generalized features. We must provide building blocks so people build their own stuff, not very specific features. |
But there are already projects like KratosPP that have taken the lead in this direction, and it is very difficult to design something that is different yet equally universal. Users who can carry out such functional design often have a knowledge of engine functionality that is no less than that of engine developers (although they are often the same group of people) |
The three key problems have revealed the most important problem already. I'd like to give some of my opinion about these points below. Key problemsThe code qualityWe do have a coding-standard, but haven't enforce people do that yet. The code quality can usually be separated into several parts:
The naming rule is the basic one. But sadly, in the latest Another big problem is sometimes the new code is potential inefficiency, as you can always implement this feature in a better way. The main problem for this is this is a community based project and we don't have some plans, or iterations which lead our goal. So the main contributors cannot tell the newcomers whether there's a better way to implement the feature before the newcomer make the PR, and as it's a community based project, many people work at the time they are free, when they just want to do that, and their motivation fades really quickly, then this PR would never be completed! As I've mentioned above, Phobos is a community based project which has really few active main contributors now. Usually the main contributor would also charge in make sure the new PR have no side effect to the existing things. So testing people are needed, while we can hardly find any of them and we cannot test all cases currently. Lack of motivation for being a maintainerAs @Metadorius mentioned at the beginning, we don't earn money from this project, and for most developers, at least for me, take contributing to the project as a hobby to do at my spare time. I contribute to this project because I want to give my power to the community, but this isn't my work, so I can only have really few time spend on this. (And after coding from 10 a.m to 6 p.m everyday, I don't want to more code when I get back to home honestly, I'd rather to something else). But an active maintainer is necessary for any project, whether it's driven by the community or not. No clear objectivesThis is something between the two points above, as we don't have an active maintainer, we cannot make plans to achieve, such as fix any vanilla bugs, implement any new features or resolve existing Phobos bugs. And it also made us hard to keep the code quality on a high level. Solution?My optinion is an/some active maintainers is necessary. Everything I said below requires a/many active maintainer(s). I suggest we should make some plans, such as a release version every two months or some other intervals, and maintainers can arrange the things from the issues/existing pull requests at the beginning of this release cycle. And before the release cycle ends, we can give an experience pack to the modders, which is a time buffer for us to resolve the issues before the release version. And I suggest we to create branches for them with the naming like release/MAJOR.MINOR.BUILD.HOTFIX. So we can move to work on the next release cycle. And if this is implemented, we can disallow people to push to branch develop directly. The hotfix should be pushed to the corresponding release/x.x.xx.x branch and develop only accepts the PRs. This would also help in management. A true problem ahead is that as Phobos is growing HEAVIER and HEAVIER, modders begin to doubt if they really need this/that feature. I don't want to use someone's feature, but as it has been added into the latest version of Phobos I have to use it, even it will cause my FPS drops. So I have to stop upgrading Phobos, seeking for other self modified version, which is really bad for the consistent developing for Phobos itself. So by seperating all project into separate features, we can give the modder the ability to control which features should be enabled and which are not. We already have many feature have the switch, but the maintainer should take this reponsibility to decide which feature/bugfix need it. In my opinion, an active maintainer is the key for Phobos to go further. And yeah I don't have any good ideas about that. But I think this is just where the key problem lies. Our discussion should focus on how to find an active maintainer and how to make the system work better with as least active mainainer I guess. |
I. Help, unmerged PRs are stacking!That sounds like the project is lack of active collaborators who have write access. And my suggestion is simple, just recruit some voluntary collaborators from active, responsible, and mindful contributors, and allow them merge whatever look good without too much discussion, and try to trust them to not show some destructive behavior. About myself, I think I'm doing my best as who I am, or who I think I am. I make whatever I want, I intensively test my stuff, and sometimes help people doing something. That's the best someone without write access can do, because I can do nothing in advance. Eventually someone with write access will be needed, because a castle 99% built is a castle not built. I never asked, for whatever reason, such as stability regards, or simply not having the time to, it is always the collaborators' rights to decide how to spend their free time and whether to merge or even to look at the pull requests, and asking why you don't spend more of your free time on a non-commercial project doesn't sound like a polite thing to do. Can't blame people starting to maintain their own branch, even I do, and I will definitely use my play branch as a basis if someday I will ever create a mod for myself. Don't forget, that RA2 is an old game that you can't expect many new comers, not to say new developers, and we who are still enthusiastic modding it (or used to be) are more likely to be more and more occupied by non-hobby activities such as career, marrage, children, or as simple as new fancy games like Black Myth Wukong. That's to say, maintaining a high standard can lead to a strictly limited human resource pool, among an already selective few group who can develop, among an already shrinking fanbase of a sunset title. (If you really want to take my advice of recruiting new collaborators then don't come to me, I'm not a taker of long-term responsibility unless it's my job. Unless you don't mind me not doing everything you may have expected from a collaborator.) II. Lego system?Regarding KratosPP, in my narrow sights, the learning cost surpasses even c++ itself, and the resulting rulesmd.ini code are not straightforward and hard for another person to read how does it work out, that's not my prefered way to mod a game, and that's why I won't use it and would rather c++ instead. It might have a lower learning cost than c++ to some, but is still difficult to use, as it usually asks for ~20 lines of rulesmd.ini code to do something you can describe in one sentense with English. I agree that the features should be generalized and as customizable as possible, but I don't really want to make a lego system, that would take years to design and to develop, and take weeks for a modder to learn how to use it, if I had that much free time I get more interesting things to do, such as playing new games, watching anime, and sampling decicious food, whatever it is, it is more fun than developing a lego system for a game like RA2, as in my sights, c++ itself is already a lego system, just you have to make your pieces from crude oil. The closest thing in my todo list is the event handler system that user Metadorius (Kerbiter) mentioned in the issues panel. Can't believe whatever comes out from my hands will be something as lego-ish as KratosPP is, since I want to make it straightforward and keep the rulesmd.ini code readable. III. Objectives?Don't really think we need that. Some of our shinest creations, like unit tooltips and the super weapon sidebar, each may already present in a newer CNC game, and we are replicating these features on a game too old to have such on the launch. A modder can simply choose to mod on a newer CNC game and they start with many features that would take us months to develop and decades to merge, and even those they don't start with they can make a short work of it much faster than we can. That's said, we are still here because we like RA2 or want to stay here for whatever reason. Don't forget, that modding is for fun. Implementing features is fun on its own, but taking a long term objective is not for me. ConclusionThank you for reading. |
About the code quality: so far I am yet to see the overlooked bad naming to cause some kind of a fault. Yes we do stray away from code style here and there, but I think it's one of the minor-est issues. For stuff like that - there is clang-tidy and clang-format. They need to be intergrated into our workflows in CI and in the project. They are supported by all IDEs and they do provide automatic code style checks and linting. @chaserli was working on it but didn't finish it.
The main problem: where should we find one?
This is basically trying to find a unicorn. Such a person is very rare. |
on Lego system: I don't think we need to go as far as Kratos goes, but there is still something to improve.
|
That's ideal for software engineering and when making an indie game you have absolute control over the whole project. I know Unity engine work that way and I like it alot, it makes modding of Unity games easy to do. Don't forget we don't have control over the codes of Yuri's Revenge and Ares engine extension, it is not easy to do even as simple as to fix a bug with them, and it is the nature of c++ programs, that most of the info that will help you understand will be lost after it was compiled, and the program already present are completely not following the entity-component pattern. Making something like that on top of such complexity is even more consuming than it sounds like. |
Yeah absolutely. It should be an inspiration, not a direct copy. Entity-Component pattern is mostly based on OOP principles, not C#-specific reflection and such, so I think the core idea can be implemented so it is convenient for both us and users. |
Regarding the implementation of standards:
Regarding the release cycle:
Regarding whether users feel they need a certain feature: |
However, we're doomed from the very first step because we don't have enough active participants, and accepting all features
But you're right! We gathered here originally just for the sake of having more fun, rather than for anything else, although it might seem somewhat irresponsible to say so, but that's the truth.
The issue you mentioned does exist; we're not aiming to teach users how to cast spells of forbidden magic. In fact, I've experienced some engines that have comprehensive logic links and are relatively easy to write. But forgive me for not being able to find another usable example in the public community. In short, what I'm trying to express is a shift in the direction of functional design. I'm glad you understand what I'm saying. :P As for Lego, I'm more inclined to think it's a matter of how finely to split the functions. Personally, I believe the engine can split functions to the extreme. After all, simplifying the syntax doesn't need to be done by the engine; this can be entirely handed over to external tools to provide syntactic sugar, tool scripts, node-based visual editors, or even Excel. |
And most importantly, he is willing to take over this project :P |
Development builds were always reserving the right to be a testing ground. I don't think we ever advertised dev builds as something stable and robust, so I don't know where the expectations of those users come from. We try to do our stuff reasonably, and we expect people staying with us to be also reasonable. It is not our job to cater to false expectations or persuade users who don't understand or even hate the project, so I don't think this is a problem. |
It is indeed the case that they are just test versions, but those test versions have indeed had a negative impact. Moreover, I've found that many users perhaps because the release version is far behind the development version or for other reasons also regard the Build versions as sufficiently 'official' and place high expectations on them, and it seems difficult to change this concept. xD |
IV. Quality issuesIf something confirmed to be working can somehow break for an update, how can I feel safe grab the latest update as someone who don't code? I have encountered 2 incidence where a certain Phobos feature or fix caused an unexpected side effect.
Having an unforseen side effect in the code is something inevidable in software engineering, sometimes old stuff can break by stupid reasons, not to mention an interest driven project that not all of us are trained to be careful on such regards. I know it is hard to ask for people to take more responsibilities, but please at the very least make sure every line in your doc is confirmed, not supposed, and if something can have a side effect, give an option to turn it off. I'm following these in my pull requests. Lower standards, quality issues. Higher standards, everyone gets a custom branch. It is really hard to find a balance, when we are absolutely lack in active people. |
That's an issue caused by low level of activity and low frequency of stable release update. Despite such, even the latest dev build isn't new enough, that many useful features are still lying in the pull request panel, they aren't even becoming part of a dev build. I SEE NIGHTLY BUILDS ON MOD RELEASES CAN YOU BELIEVE ME??? That even makes me want to say well done because they somehow got a nightly build of the feature they want, which isn't easy to do for someone not quite familiar with github and how this project build nightly builds for pull requests. |
Note to myself: it appears that the current release schedule/versioning scheme is suboptimal and can be made simpler to follow, with more frequent releases and less burden on the maintainers (while also adding a possibility of better automation of stuff like changelog generation). |
Few more contributors who I forgot to mention: @Fryone @ststl-s @Super-StarX @Belonit @Coronia |
Here're some personal takes, might not be correct: ABOUT CODE QUALITY But in this case, coding standardization might discourage such passion cuz again, it requires further ability for participants and reduces the chance of merging pull request naturally, which is also a reason that there're many PRs being left there: once they losing the passion to continue, or having real life business, they won't be bother to do further maintaineance on it. Or instead, they'll develop their own branch instead since it doesn't have that much rules to follow. Again, I'm not against code quality by itself, but pushing it might result in ineffectiveness and de-motivation (considering people already don't have much motivation now). So a balance should be made, but so fat I don't have much idea on it either. The only thing I can think about as of now is: If a pull request just has some minor coding style problems, then maybe there's no need to ask the contributor to modify it by themselves. Maintainers could do it when merging instead as it's only a few minutes work, and they have the writing access. ABOUT MAINTAINER For the case of Phobos: in before there're criticisms about it 'doesn't know what's a modder truly want', considering some of our functions are impractical in actual modding scenarios. And as of now we also don't have much goal but to make the game better, but again the definition of 'better' is varied by people. Considering this 2 things, maybe it's better that we inviting some real modders to help with the maintaineance. Phobos can't standalone with a YR mod after all, so let's say modders are the 'clients' of this project, and we as a 'provider' is to provide them with what they need. Again, they don't have to know about coding, but could just give instruction such as 'what functions are still needed' and 'which pull request should be merged first',then the other programer help with execution. ABOUT REDUNDANT FUNCTIONS I think we should allow users to decide which functions they want to use, and cut out those they don't really need manually in order to prevent them from disruption their mods. 2 methods to achieve that: Simpler approach: adding toggles for several functions, especially those that needs to be calculated per frame. For example: [Phobos]
PassengerDeletion=false If this is set, then everything about PassengerDeletion will be omitted, saving the cost of its calculation. Harder approach: we make a branch with only basic framework, and split all functions into standalone pull requests. If someone only want to make use of a few functions in it, he can make a build with only those included. In this case, instead of a unified official build, people could assemble their own build in a more modular way. But it also has the disadvantage of requiring more work and knowledge in the field of coding. |
Small note. I'm far from being an expert, so I don't know what Phobos should be in total. But at least, it's good stuff to expand YR engine, so I don't see why it should be super-customizable, cause there is OpenRA for that. Of course, a lot of similar logic stuff should be united and generalized, but sometimes it's hard to find borders, cause everything seems to be connected in some sort. About big PR number, there is a lot of small PRs with fixes or small stuff plus some PRs for ideas/discussions/demos, so it's not that bad. |
In my opinion, It's unnecessary to worry about tons of the pull-requests leave here. |
我认为可能的解决方案:I think possible solutions are:
降低代码审核的标准。审核只需确保:
解决办法同上。如果你没法开源,那么你就得节流。把宝贵的人力资源省着用,用在那些对大多数人来说有意义的地方。
我不认为这是个需要解决的问题。尤里的复仇引擎就像一台型号老旧而且本来就粗制滥造的机器,把西木留下的这台破烂修好本来就是这个游戏最需要的开发方向之一。 |
This is why I said we need 'an idiot-proof, end-user facing merge tool,' but I believe creating such a tool is equally challenging.
But I think the feasibility of creating a similar tool for developers is relatively high, as you mentioned here. |
I love experimenting with stuffs and iam glad phobos exist so we dont stuck on waiting AlexB publishing his ares source. As for PR issues , yeah we need someone that can do review and have an handfull of time on their life to spend on those , since most people not have that time atm , or maybe lack of motivation. Also please stop with those force push abuses, why not discuss it before get merged instead nuking people stuffs that already mereged , jeez . |
I also think it is not correct to handle stuff like this and I am already talking with people about this. Apologies for this. |
Phobos is still a powerful drive for the community, continuing to push its development. However, due to the shortage of programmers and lack of financial support, several issues have arisen. I believe the future of the engine extension lies in plugin-based or custom toggle-based approaches:
Phobos 依然是目前社区的一个强大动力引擎,推动着社区的发展。然而,由于程序员数量不足且缺乏资金支持,导致了许多问题。 我认为拓展引擎的未来方向应该是 插件式 或 自定义开关式:
|
Regarding financial support why not apply something like cncNet Open-collective initiative ? Some stagnated features that are very interesting or useful could get a push if other people push for it. if overtime the feature got sufficient finnanical ammount maybe it is picked by some contributor/mantainer with more priority. In the case the feature contributor does it for free & declines the accumulated ammount then the money goes to the mantainer/dev that was checking reviewing it and if the mantainer/dev declines the ammount then that person can push the feature's ammount to another feature he whishes. Or a similar idea |
A review from @ststl-s , translated by AI, post by me due to the network issues, the final interpretation is owned by Ststl: I believe that the main problem is the lack of testers and the slow review process for PullRequests. Many new features, whether in the development build or PR, are eagerly desired by modders. However, due to the prolonged lack of testing, the official version has fallen seriously behind the version they compiled (branches), or even some PRs have never been merged. This leads to the following issues: First, when a new development version is released, some features may have bugs or be unnecessary for modders, those who are leading to game lag. This discourages modders from testing new versions. Currently, there are fewer and fewer people making RA2 mods, and they have less time. Modders are more inclined to use a compiled dll that is quickly available and stable. Waiting for an official version that is indefinitely delayed is clearly not an acceptable option for them. In the end, they stop following up on tests and simply use an old version of the development build, further reducing the number of testers for new versions and pushing the official release even further away. Secondly, For developers, such as myself, due to the slow PR review process and insufficient testing, it is often impossible to merge my features into the development branch. However, my friends may require these new features, leading to the creation of custom versions that mix in some new functions. This often involves self-testing and modifications, which are not easily tracked and merged by Git. Typically, after updating my own version, I would manually make changes again to port them to my own phobos branch (and they might not even be correct, some of my PRs have had issues when just simply copying code over, requiring additional adaptation and correction). As time goes on and my academic workload increases, I have even less time to keep these in sync. Eventually, I stop submitting PRs because each one brings complex merging issues between the official version and my custom version, greatly increasing the time cost and leading to a loss of motivation due to the long period without merges (although having someone use the features you've written is certainly a positive psychological boost, even if it has no practical significance). In the last, although code style is not critical, it affects the speed of the review process. Given time constraints, reviewers prefer to see simple and understandable code rather than spending time trying to understand someone else's naming conventions and guessing the purpose of functions, variables, and hooks. I have had such significant issues with this: my past PRs have been quite arbitrary, and many, including myself, have had to refactor PRs multiple times. It would be best to provide an excellent example, explaining the naming conventions, to make PRs easier to understand. Okay, so, Issue 1 is difficult to resolve; the reality that must be faced is the continued decline of the YR modding community, and the inevitable reduction in the number of testers. The only thing developers can do is to speed up the PR review process and the release of the official version, even if it's not perfect, as hotfixes can quickly address issues and motivate testers to continue their efforts. However, this again brings up the issue of the time cost for developers, which is limited, and reviewing others' PRs is less satisfying than creating new features and cannot drive more participation, unless developers are motivated to focus on phobos as the core and find more interest and benefit in pushing for the official release of phobos. Issue 2 is also a result of the slow iteration of the official version and the slow PR review process. Speeding up reviews and the iteration of the official version could at least improve the situation and reduce the time cost of manual merging. Issue 3 arises from new developers not understanding PR standards well. Adding an example might help to some extent. Most of these issues are not solvable and can only be alleviated. The time cost for developers and the time cost for modders to test and iterate are fundamentally conflicting points. What that can be done is to reduce waste of time, ensuring that more time is spent on mutual advancement rather than on manual merging and waiting for the next official version. Original text for reference:
|
话说,我们是否需要个官方QQ群或者其它什么的?我知道这是个国际项目,但似乎大多数用户来自中国,这有助于获得他们的反馈。中文互联网不能直接访问Discord,Github也经常连不上。 |
Why not? Let's do this. 630590659 (Last one was removed because it was reposted to the Phobos-log channel which may lead to potential leaks of private QQ accounts. Sorry for my privacy anxiety. This comment was initially posted without a QQ group number, and later edited to append the number, meaning it will not be reposted by the bot.) |
Good. But we still need the support from the developers to make this official. @Metadorius What do you think? |
I don't mind and I can advertise it, but I am not sure if the group itself should be called official. Official groups are usually curated by the staff of the project, which would be only partially true in this case, unless there's some way to get in the group for outsiders like me. Maybe something like "Phobos QQ group (maintained by: usernames here)" without explicitly stating it's official? I have a few questions though:
|
The Chinese netizens are used to call a group "official" as long as it is advertised via an "official" source. Many games have their "official" QQ groups for Chinese players, and the game staffs themselves will not join it. |
Unfortunately, QQ only offers manual translation, and you will have to right-click on "Translate" for each conversation to get a result. |
我的设想是最好能由项目的维护者(或者至少是开发者)组织这个群,收集来自中文社区的意见(例如:哪些已有功能需要改进、哪些pr有很多人希望能尽快合并)以及测试成果(例如某个mod的开发者使用包含pr的构建版本进行了测试且表现良好,那么我们可以收集这个信息用于代码审查时的参考),并将其反馈到Discord上。 |
I think the time is due for me as a head of this project to discuss something important for all of us. Even if I don't directly contribute or review code at the moment, it is still important to talk about this.
Key problems:
The result? You see it:
Many of those are in the "fridge" for multiple years already. On top of that, almost all of our maintainers are mostly gone, and the development stalls further and further. For me personally it's sad to see, because:
All of the listed problems are not something you can easily solve, and I personally don't have an answer to how to solve them at the moment, therefore, I invite any and all contributors and whoever has something to say on the topic to discuss this.
@Starkku @chaserli @MortonPL @ZivDero @FS-21 @tomsons26 @CCHyper @CrimRecya @TaranDahl @NetsuNegi @Multfinite @handama @DeathFishAtEase @Aephiex @Rampastring @Otamaa @secsome and whoever else
The text was updated successfully, but these errors were encountered: