Mentula Posted 5 hours ago Report Share Posted 5 hours ago Hi devs and modders, In 0 A.D. 27 and before it was possible to mod the pregame page by adding scripts to the gui/pregame folder. Example of applications are: adding items to the main menu; running startup scripts. Since commit 0fcc4f5fc5 the gui/pregame directory is not loaded anymore, in favour of loading the mainmenu.js file only. It is not clear how mod scripts can run in this page after this change. ✖ It is not an option to override mainmenu.js, mainmenu.xml, page_pregame.xml or other files. This will of course break the compatibility with other mods, as only the last loaded mod will execute the code. Maybe @phosit, do you have an idea? I am pinging you as the author of the change. Thanks. 1 Quote Link to comment Share on other sites More sharing options...
Stan` Posted 4 hours ago Report Share Posted 4 hours ago Hey @Mentula Nice to see you're still active! Can't you add a file like autociv like so ~mainmenu.js to extend it ? Else maybe you can wrap the module into something else and use that elsewhere. sounds inconvenient though @phosit Quote Link to comment Share on other sites More sharing options...
Mentula Posted 4 hours ago Author Report Share Posted 4 hours ago 20 minutes ago, Stan` said: Can't you add a file like autociv like so ~mainmenu.js to extend it ? That's the point. If the directory gui/pregame was loaded by the xml - like it was before: <script directory="gui/pregame/"/> then one could create a file named mainmenu~MyMod.js and do all sort of scripting therein (for example making proxies of existing functions). But this is not the case anymore for the pregame page. At first glance, this is the only page which changed behaviour. To make a comparison, session.xml is still loading the entire directory gui/session: <script directory="gui/session/"/> 32 minutes ago, Stan` said: Nice to see you're still active! I wish I was! New release, new work for porting mods. I played my last game in 2023, but 0 A.D. is always in my heart. Quote Link to comment Share on other sites More sharing options...
phosit Posted 2 hours ago Report Share Posted 2 hours ago There is an example in "binaries/data/mods/test.scriptinterface/module/modified/". In your example you would write a file "mainmenu~local_rating.append.js". In that file you can override the init-fuction or anything else. init = function() { // new init code. } Quote Link to comment Share on other sites More sharing options...
Mentula Posted 1 hour ago Author Report Share Posted 1 hour ago @phosit try creating a file gui/pregame/mainmenu~MyMod.append.js with any content; this file is not loaded. Or do you get a different outcome? Quote Link to comment Share on other sites More sharing options...
phosit Posted 1 hour ago Report Share Posted 1 hour ago With "any content" do you mean "no content"? Then that's expected. An empty file shouldn't change the behaviour. eg: appending nothing to the mainmenu.js doesn't change anything. When adding a `warn` call at global scope of the "append" file, it works for me. Quote Link to comment Share on other sites More sharing options...
Mentula Posted 1 hour ago Author Report Share Posted 1 hour ago @phosit right, I was too quick. So, what works and what does not: ✔ gui/pregame/mainmenu~MyMod.append.js ✖ gui/pregame/mainmenu~MyMod.js The second approach has worked in all versions prior 28 - and this was "the" established practice, as far as I could see. It looks like the "append" keyword has a special meaning for evaluation of files (I tried with other keywords). Then I have two questions: Should modders be advised to rename all files of the form "module~MyMod.js" with "module~MyMod.append.js"? If so, could this be explicited somewhere? Probably not so relevant here https://gitea.wildfiregames.com/0ad/0ad/wiki/PortA27ToR28, but it would have helped. 1 Quote Link to comment Share on other sites More sharing options...
Grapjas Posted 25 minutes ago Report Share Posted 25 minutes ago (edited) I was dabbling into this too. In my case i simply needed an extra main menu button, doing let grapejuice = { "caption": translate("Grapejuice Info"), "tooltip": translate("View the changes that this mod brings to the game."), "onPress": () => { Engine.OpenChildPage("page_grapejuice.xml"); } }; mainMenuItems.unshift(grapejuice) into `MainMenuItems~grapejuice.append` Seems to be clean and works well if i do the same in another mod. However if the variable name is the same in some other mod it will hardcrash on startup. Even if you let the variable out of it and just do mainMenuItems.unshift ( { "caption": translate("Grapejuice Info"), "tooltip": translate("View the changes that this mod brings to the game."), "onPress": () => { Engine.OpenChildPage("page_grapejuice.xml"); } } ) in 2 different mods it will hardcrash aswell. Not sure why and if this the recommended way of doing it anyway. Edited 16 minutes ago by Grapjas Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.