Reviews.rateGame which is the whole review algorithm (rather complicated). Reviews.getReviews which calculates the separate review scores and calls getGenericReviewMessage (see below) Reviews.getGenericReviewMessage(game, score) which generates the generic review text for each reviewer.
I believe the UltimateLib has some helper methods to make custom windows easier but any UI changes require HTML knowledge and I don’t think there’s much point in abstracting this any further. Advanced modding simply does require some HTML/JS skills.
UI.showModalContent("#myDialog", {
disableCheckForNotifications: true,
close: true, //whether there is an X button that closes it
onOpen: function() {
//do something
},
onClose: function() {
GameManager.resume(true);
}
});
Ugh.
I dunno if this doesn’t work or I am just (…), but it’s just like it was earlier, I’m clicking anywhere and the game just freezes.
(sorry for going a bit offtopic)
Noticed this and just wondering if support could be added or not, Is there a way to provide the folder name to mods, so say for whatever reason you download a mod and name the folder hippo2. Can you provide the mod which is actually hippo the folder url so it knows to find the files in hippo2? example:
var folderPath = "......"
GDT.loadJS(['mods/'+folderPath+'/source.js']);
But folderpath would be provided on your end with the correct folder name?
The function that generates the candidates when you hire staff is currently anonymous. It probably deserves to be exposed in some way. You could do that by just giving it a name, so we could override the entire thing, but it might also be useful to add events for it.
An event that’s fired before returning the generated candidates, maybe “beforeStaffChoice” or “beforeHiring,” which passes to the event handlers the array of generated candidates, the budget ratio, and maybe that mersenne twister you create (why do you do that, BTW? Why not just keep using the company RNG?) would allow modders to append traits to staff without replacing the whole function. I was thinking it might be interesting, for example, to have staff members sometimes have a specialty in certain genres (so you might get, for instance, a designer who’s particularly good with Action games). It would be pretty easy to implement with an event like that.
An event that fires after a new staff member is chosen could also be useful. I don’t need it myself, though.
EDIT: Actually, on reflection, an “afterStaffChoice” event would be necessary for what I was thinking, since the properties of the generated staff members are manually copied to the Character object that’s later created. Simply adding a property to that array wouldn’t be enough, we’d need to store the information in the mod’s data store. So, an “afterStaffChoice” event that passes, to the handler, the object from the generated candidate array which the player chose to be hired (which would include any of the properties we appended in the “beforeStaffChoice” event), or nothing (if the window was closed without hiring a staff member).
UI._hireStaff(applicant): method that is called to add an applicant to the company and initialize the visuals. UI._generateJobApplicants():returns the array of generated applicants.
Event data will contain the generated applicants, the settings used to generate them and the rng in use.
The reason we use a separate RNG: We want that job searches are deterministic so you can’t cheat by simply reloading the game. We don’t want to save the applicants in data, so we generate them when the UI shows. The company’s RNG state from the time we initiated the search to the time the UI shows is not deterministic because it depends on the players actions in the meantime. We thus store a seed when we first initiate the search and initialize a new RNG from that seed when we generate applicants.
I’m also adding a new Sales.applyGridSales method which is called every week to apply the sales. This should make it much easier to overhaul the sales logic for the grid system (you can then simply hijack that method). /cc @Stian
Add strings to translation through code. Instead of writing your very own localization, (@Darkly) you should be able to just write
nb.addString("police", "politi")
Also, could you please update your mod-API documentation to include the optional properties of GDT.addResearchItem? (if there isn’t any optional properties, ignore. But I seem to recall there being)
Would be easy to backport this from the UltimateLib. If someone wants to give this a go, we welcome pull requests. Otherwise it might take a while longer for us to get to this.