IRC logs for #openttd on OFTC at 2023-04-11
⏴ go to previous day
00:20:41 <Eddi|zuHause> somehow flatpak seems to me as a case of "we should have one standard to unify all the standards"
00:26:44 <dP> hm... I might have missed sending tile in #10507
00:28:16 <dP> well, I guess we'll see if anyone even notices that it's missing xD
00:39:55 <glx[d]> so MultiByteToWideChar() returns buffer size in characters including terminating \0, and of course ImmGetCompositionString() returns buffer size in bytes without terminating \0
01:13:26 *** Flygon has quit IRC (Quit: A toaster's basically a soldering iron designed to toast bread)
02:07:49 *** Wormnest has quit IRC (Quit: Leaving)
02:54:47 *** debdog has quit IRC (Ping timeout: 480 seconds)
02:56:48 <Eddi|zuHause> that doesn't sound like a problem. people always read the documentation carefully.
03:02:25 *** D-HUND is now known as debdog
03:21:27 *** Artea has quit IRC (Ping timeout: 480 seconds)
06:27:35 *** sla_ro|master has joined #openttd
06:46:49 <petern> Waking up at 5am is not so good for waiting for breakfast.
06:52:33 <petern> Is there an equivalent of strecat but for std::string? Or should I just use .c_str()?
06:58:45 <petern> Hmm, although std::string is a memory hog.
07:06:19 <dwfreed> I mean, it's just boundary checked strcat, right? std::string doesn't have boundaries, so you can just concat as much as you feel like
07:09:39 <petern> Obviously I need to clarify. Is there an equivalent of OpenTTD's strecat function for if the source text is in a std::string instead of a char[] or char*? Or should I just use .c_str()?
07:10:15 <dwfreed> yes, that makes significantly more sense
07:10:42 <dwfreed> and I would just use .c_str(), because that's likely all any other implementation would do anyway
07:11:26 <andythenorth> oof, (also lol) in a _tostring() method, calling an undefined method on a class results in an instance of an error class
07:11:36 <andythenorth> took a while to figure that out 😛
07:11:57 <andythenorth> result of calling non-existent methods 😛
07:15:45 <petern> Anyway, as std::string is 32 bytes and char* is 8 bytes, I'm not convinced it's worth changing it just to avoid a manual free later.
07:19:47 <petern> (In most cases 32 bytes would be enough to store the complete text without extra allocation...)
07:26:03 <andythenorth> hmm, my GS wants to check how much cargo was delivered in a month
07:26:10 <andythenorth> but there's no way to do that
07:26:27 <andythenorth> as GS can't run guaranteed monthly
07:26:55 <andythenorth> maybe there's a way to handle that
07:27:48 <andythenorth> does it help if I store the date when the amount was last checked?
07:27:54 <andythenorth> then try to do some date maths
07:29:17 <petern> Hmm, though std::string is quite likely to optimize small strings and avoid a separate allocation.
07:30:53 <TrueBrain> that "when I use date cheat, I shoot myself in the foot" bug .. I never seen a lower priority bug 😄
07:31:38 <andythenorth> it's valid though? 🙂
07:31:45 <andythenorth> problem is display of negative?
07:32:51 *** Speedy` has joined #openttd
07:37:15 <andythenorth> hmm GS is quite fun
07:37:18 <andythenorth> dunno why I complain so much
07:50:00 <andythenorth> lol though, the monthly loop is horrific
07:50:42 <andythenorth> gameplay expectation really is that things like "delivered town cargos" are a monthly update, but that means a lot of calls at OnNewMonth
07:50:50 <andythenorth> which is just about the worst possible way to use GS
07:51:03 <andythenorth> it takes game days to update the towns, even on a small map
07:55:40 <TrueBrain> seems regression-tests still doesn't like you LordAro 😦
08:04:13 <petern> Hopefully it likes me.
08:05:05 <andythenorth> yair 3 game days to update towns 😛
08:05:42 <LordAro> petern: std::begin & std::end. such modern
08:09:04 <andythenorth> maybe I could book-keep some of the OnNewMonth stuff in the middle of the month
08:09:18 <petern> Yeah, not really sure on that one, it's "the way" apparently, but it is wordier than ->begin() & ->end()
08:11:22 <LordAro> it's for the cases where you don't have such members (i.e. c arrays) i believe
08:11:41 <LordAro> (and you want a templated function that works with both)
08:12:07 <andythenorth> how can I reliably run something mid-month in GS?
08:12:21 <andythenorth> I can't just check day > 15, because that will repeat until month end
08:12:52 <andythenorth> I can check day > 15 && day < 17 because FFWD
08:13:00 <andythenorth> maybe I have to latch
08:13:14 <petern> Yeah. I noticed that `for (... : c-array)` also works which is nice.
08:14:21 <andythenorth> meh not sure I trust mid-month processing at all
08:15:04 <andythenorth> does FFWD cause days to be skipped, or does the simulation just run very very fast?
08:15:43 <LordAro> andythenorth: the latter
08:15:52 <petern> The only thing that is skipped is the delay between ticks.
08:15:54 <andythenorth> ok, so it should be safe for GS to check day
08:15:58 <andythenorth> but GS can be so far behind
08:16:02 <andythenorth> hard to know what will happen
08:16:27 <LordAro> yes, your GS event processing loop may miss a day
08:16:28 <andythenorth> no guarantee GSDate.GetDay(current_date) will *ever* return 15
08:16:47 <andythenorth> ok this is quite ironic
08:17:02 <andythenorth> I want to offload some processing to mid-month, so there's less chance GS runs behind by doing everything at month-start
08:17:11 <andythenorth> but I can't reliably do that because GS runs behind
08:17:40 <andythenorth> I did test pausing the game if GS gets behind
08:17:43 <andythenorth> that sort of works
08:17:54 <andythenorth> but not if the GS gets too far behind to pause
08:18:25 <andythenorth> economy control in GRF when? 😛
08:18:31 <andythenorth> GRF does not run behind
08:27:11 <TrueBrain> I was thinking about something like this, to finally answer some of the questions we keep asking. Curious for input
08:28:50 <petern> `parts; ///< Parts` I think may have interrupted myself writing that comment...
08:29:08 <TrueBrain> andythenorth: we already use honeycomb for the backend. But in this case, we just need a NoSQL database 🙂
08:29:24 <LordAro> TrueBrain: looks good
08:29:37 <LordAro> i wonder if we do in fact need some sort of identifying information though
08:29:58 <TrueBrain> there is the Savegame Unique ID
08:30:03 <TrueBrain> but what else are you thinking about?
08:30:03 <LordAro> how would the case where (for example) there's a dev repeatedly opening and closing the game testing something?
08:30:14 <LordAro> with enough of them, that could skew the results
08:30:17 <andythenorth> it would just be a pattern
08:30:21 <TrueBrain> the dev will not have the public key, and as such, won't transmit any information 🙂
08:30:32 <LordAro> (and also the "malicious" angle too)
08:30:58 <andythenorth> lol I can be fingerprinted by macOS and unreleased grf names 😛
08:31:04 <TrueBrain> that is a bit the point of the public key, to make sure only our final binaries do this
08:31:18 <TrueBrain> and also why I want play-time in there, so we can put a weight to the received JSON blob
08:31:24 <LordAro> ok, a newgrf developer testing something :p
08:31:36 <TrueBrain> so in your case, there will be many measurements of ~1 min games .. which won't win from someone actually playing 🙂
08:31:44 <TrueBrain> we could for example filter anything with less than 5 minute playtime
08:32:13 <TrueBrain> and as the `_newgrf_developer_whateveritiscalled` setting is also tracked, we can even use that in the weights
08:32:47 <TrueBrain> the one thing we cannot prevent, is the true malicious actor, which sends us payloads with random crap just to be funny
08:33:19 <TrueBrain> that is where the IP-ratelimit kicks in .. if you send me a JSON with the playtime of 5 hours, and you already send a payload 1 minute earlier ... I am going to ignore you
08:33:59 <TrueBrain> still allows for someone who can change IP rapidly to be evil, but ... then we are so far down this rabbit hole ....
08:34:29 <TrueBrain> just not sure we should call this Telemetry
08:34:33 <TrueBrain> as it is not really telemetry
08:34:44 <LordAro> "Telemetry" has not gone down well historically
08:34:56 <LordAro> are you planning on publishing the above somewhere?
08:36:05 <andythenorth> Telemetry has unfortunate framing in the tinfoil hat crew
08:36:12 <TrueBrain> updated to name it OpentTD Opt-In Survey
08:36:23 <andythenorth> what does Steam call it?
08:36:30 <TrueBrain> LordAro: yeah, wanted to post it in more visible on Discord in a bit, if nobody here sees an issue with that
08:36:34 <TrueBrain> just to collect some opinions
08:38:22 <LordAro> andythenorth: also survey iirc
08:38:37 <TrueBrain> but "Automated Survey" == telemetry
08:38:47 <TrueBrain> so it is a thin line to walk 🙂
08:38:59 <LordAro> that's true, Steam explicitly asks you every time i believe
08:39:10 <TrueBrain> yup .. "Do you want to participate in the survey"
08:39:33 <LordAro> make it a small button in the bottom corner? :p
08:39:53 <TrueBrain> what does Debian call it, when they track their package installments
08:40:06 <TrueBrain> `Debian Popularity Contest`
08:40:22 <TrueBrain> `Every day the server anonymizes the result and publishes this survey.`
08:40:28 <TrueBrain> so survey seems to be the norm for this kind of system 🙂
08:48:29 <TrueBrain> posted on Discord for feedback
08:49:36 <dP> it's not that unusual for people to play on self-compiled openttd, especially on linux...
08:50:57 <dwfreed> out of over 200,000 submissions, 10,000 or so are i386
08:51:18 <petern> I wish MSVC (or whatever it is I use with VS Code on Windows) would give me all these signedness warnings...
08:51:29 <dwfreed> so 1 in 20 debian systems is still i386
08:51:37 <TrueBrain> dwfreed: still too many .. I am just scared 😛
08:52:06 <TrueBrain> there are less arm64 submissions than there are i386 submissions
08:53:20 <LordAro> arm64 is actually new(ish?) though, as far as debian is concerned
08:53:43 <dwfreed> also a *lot* of "arm64" users are running raspbian
08:54:54 <dwfreed> there are more debian users running debian jessie than i386
08:55:22 <dwfreed> 368 raspbian users reported to debian popcon
08:57:34 <dwfreed> if raspbian included popcon by default, arm/arm64 combined would probably be in close competition with amd64
09:01:38 <dP> hm, wonder if I can finally stop running magic bulldozer on a server...
09:02:39 <petern> How is it only 10am...
09:03:09 <dP> looks like no, even if server can destroy industries now client just won't send the action without magic
09:07:09 <glx[d]> TrueBrain: Probably a triggered assert, I'll check later
09:11:53 *** Speedy` has quit IRC (Ping timeout: 480 seconds)
09:17:36 <dP> hm... people keep failing to find new company button in mp :p
09:35:02 <petern> Hmm, should I go to the other cycling club AGM tonight...
09:37:06 <petern> So I tidied up how GRF town names are loaded, but looking at how they're used is very weird...
09:48:11 <petern> Ah, town name types are selected by string ID if built-in, or grf-local index... weird 😄
09:54:18 <andythenorth> oof this is going to be expensive
09:54:54 <andythenorth> GSCargoMonitor.GetTownDeliveryAmount has no way of distinguishing between deliveries to sink industries and secondary industries
09:55:22 <andythenorth> so to find cargo intended for town, I need to find all the secondary and monitor their cargo, and net it off
09:55:52 <andythenorth> and the only way to find the industries for a town is to walk all of the industries on the map
09:55:57 <andythenorth> checking tile xy
10:02:29 <LordAro> petern: one of the oldest types of NewGRFs, iirc?
10:14:58 <petern> Hungry, just prepped my salad...
10:31:11 <andythenorth> yeah food needed
10:39:31 <petern> How often do you need to calculate the cost of a bridge for its performance to be a problem?
10:41:00 <andythenorth> I bet I can write a GS to find out for us 😛
10:41:41 <andythenorth> realistically, the bridge cost calc is the least likely to be the problem there 🙂
10:42:50 <andythenorth> wonder what GetIndustryDeliveryAmount() does if the cargo parameter isn't accepted at the industry
10:47:25 <dP> I guess in ai pathfinder may need to call bridge cost a lot
10:47:39 <dP> though it can just pre-compute it
10:48:25 <petern> Those timings are in nanoseconds. I don't think it's ever a problem.
10:48:55 <dP> 4k bridge would be a lot of nanoseconds ;)
10:48:59 <petern> In the common case, short bridges, it's worse...
10:49:59 <dP> yeah, that's a questionable improvement xD
10:51:36 <petern> Also what would the cost factor be for a 4096 long bridge...
10:51:58 <dP> well, you've got the formula in the pr ;)
10:53:20 <dP> something around 4000*sqrt(4000) by the looks of it
10:54:56 <petern> I tested it in game instead 😄
10:55:14 <petern> It's not unaffordable for an established company, which was surprising.
10:56:08 <petern> £16,468,949 for a 4094 long wooden bridge.
10:56:22 <dP> yeah, that's multiplied by smth I guess
10:57:11 <LordAro> perhaps the bridge cost calculation should be different :p
10:57:12 <iSoSyS> wasn't there a patch/PR that was a "font picker" using Openttd's GUI? I think I'm not imagining it, but I'm unable to find it.
10:57:39 <LordAro> mildly surprised it doesn't take the height of the bridge into account
10:57:43 <petern> Yes, it was a long time ago. It'll be in the tt-forums I think.
10:58:47 <petern> LordAro, yeah, the formula could b e changed to something else, and include heights.
10:59:02 <petern> But then you'd need an option to prevent someone saying it's broken the game...
10:59:23 <dP> though I'd prefer 0 cost bridges tbh
11:00:28 <andythenorth> lol the cost obsession for this game
11:01:55 <dP> well, my logic is that it somewhat reduces the downside of starting late in mp and having to bridge over everyone
11:02:22 <dP> I actually have a cashback for bridge costs on citymania
11:02:27 <dP> if that thing still works xD
11:02:55 <petern> You can probably do that with NewGRF?
11:03:34 <petern> Ah the old "I want to mod the game without using the mod features"
11:03:47 <dP> well, not my fault noone plays grf servers :p
11:04:01 <LordAro> andythenorth: just remove money
11:04:07 <dP> because they can't find the button
11:04:10 <LordAro> fixes all the game balance arguments
11:04:18 <iSoSyS> I really thought it much more recent and with a brown colored window. Maybe it was just a mock-up I saw somewhere recently.
11:04:35 <LordAro> probably a Zorg mockup
11:08:05 <dP> I seriously don't understand how people chose servers
11:08:28 <dP> or, well, I do, they just jump on the most popular ones without even reading the name but ugh...
11:09:06 <dP> 9 out of 10 players that end up on citymania 1mil cb server have no hopes to ever achieve even the first goal xD
11:09:25 <petern> Nah, the usual way is to look at the list and then just start your own because you'll definitely run it better
11:09:33 <dP> though I think I did a good job making the hardest server there is somewhat playable for complete newbies xD
11:10:12 <dP> petern: lol, yeah, that too
11:17:39 <andythenorth> ` Log.Info(GSCargoMonitor.GetIndustryDeliveryAmount(company, this.cargo, industry, true));
11:17:39 <andythenorth> total_excluded_industry_cargo_delivered_all_companies += GSCargoMonitor.GetIndustryDeliveryAmount(company, this.cargo, industry, true);
11:17:48 <andythenorth> first line returns '240' for my test industry
11:17:56 <andythenorth> second line returns '0'
11:17:59 <andythenorth> not sure what I miss
11:21:17 <andythenorth> it's really obvious 😛
11:24:25 <TrueBrain> ChatGPT remains funny .. it lies like its life depends on it 😄
11:24:45 <andythenorth> pls send examples
11:28:31 *** WormnestAndroid has quit IRC (Remote host closed the connection)
11:28:38 *** WormnestAndroid has joined #openttd
11:30:26 <dP> github trending is all just ai...
11:32:13 <TrueBrain> Basically, ChatGPT can't do math. You can prompt it to remember one number, ask it for something related, and it will swear up and down that one number is the answer to a formula that it really isn't
11:32:21 <TrueBrain> basically it is now argueing that 85 = 42654.181
11:32:40 <petern> I'm not artificial, only superficial.
11:33:44 <dP> it's not that surprised for llm not to be trained to be a calculator :p
11:38:02 <JGR> Fools seem to take whatever comes out of it as gospel though, won't be that long before it gets someone killed
11:38:36 <TrueBrain> the thing I find most annoying, is that it doesn't tell you it is lying. I wouldn't mind it being wrong, but the confidence it shows is just offsetting ..
11:38:39 <dP> there was some suicide story
11:42:15 <LordAro> not quite what JGR suggested
11:42:43 <dP> lol, I find it kinda annoying at the low signal/noise ratio of gpt answers
11:43:05 <dP> all the polite mumbo-jumbo, "not financial advice" remarks and other "safeties"
11:43:18 <dP> I know what you are, just give me the answer and stop wasting my time :p
11:43:19 <Rubidium_> how is ChatGPT lieing? It's just providing you with an answer that a (random) human could give. And given how bad some people are at things and still post that on the internet, then the result of ChatGPT gets bad too
11:43:42 <TrueBrain> so in your world that means it is telling the truth?
11:44:07 <petern> Ask it how much an OpenTTD bridge will cost? Might be faster than the 4096 case...
11:44:09 <LordAro> it's just going "yeah, that word probably comes next"
11:44:25 <TrueBrain> petern: I was doing exactly that 😛
11:44:30 <TrueBrain> which was a fun conversation 🙂
11:44:44 <TrueBrain> I gave it a table with costs; it tells me exactly what is going on
11:44:49 <TrueBrain> so it does that well 🙂
11:44:55 <TrueBrain> but any followup questions are just .... weird
11:49:10 <andythenorth> GPT will lie happily
11:49:17 <andythenorth> even when you catch it out, it will deny it for a bit
11:49:22 <andythenorth> quite good fake human
11:49:29 <LordAro> TrueBrain: much like an actual person when they double down after calling them out :p
11:49:46 <andythenorth> I find it really useful, it has helped me design FIRS 5
11:50:03 <andythenorth> and it's quite good as a fake friend when you want to complain about squirrel
11:50:29 <andythenorth> but it flat out lies, it will happily claim synonyms are antonyms if given the right prompts
11:50:36 <andythenorth> which an LLM should be able to filter for
11:50:51 <andythenorth> because semantic vectors
11:51:00 <dP> yeah, it seems to be good at rubber ducking xD
11:51:11 <andythenorth> it has no clue at all about grf, nml or nogo
11:51:27 <andythenorth> if we used python, it could probably generate a regressions AI for us 😛
11:54:09 <andythenorth> hmm it does know about OpenTTD src
11:54:25 <andythenorth> I'm asking it to write something so I can open story pages from a string
11:54:49 <andythenorth> this help text I have for towns....is shit
11:55:29 <andythenorth> how will it work?
11:55:41 <andythenorth> does script have a text stack?
11:56:54 <andythenorth> GPT hallucinated one
11:57:04 <andythenorth> and told me where to look for it (in some non-existent places)
12:02:43 <dP> I don't know what not having sprite stack means xD
12:04:08 <dP> most of the gs text api allows it
12:07:01 <andythenorth> uuf thought I might get a clue from clickable town names in GS text
12:07:05 <andythenorth> can't see how that's done
12:09:00 <andythenorth> and the text for the link
12:09:14 <andythenorth> can a control code consume two params?
12:09:53 <glx[d]> Parameters are included in GSText constructor, it's simpler to use than newgrf text stack
12:09:55 <TallTyler> Do we not have hyperlinks yet? (I’ve watched you have this conversation several times but have always been too focused on something else to truly pay attention)
12:10:08 <andythenorth> we do not have hyperlinks
12:10:48 <glx[d]> You can also set Params manually
12:11:36 <glx[d]> And yes, some control codes consume more than 1 param
12:11:46 <LordAro> links in MP chat are clickable, no?
12:11:59 <LordAro> or am i thinking of minecraft?
12:12:10 <andythenorth> some are clickable yes, town names etc
12:12:18 <glx[d]> Links are clickable, but they open a browser
12:12:26 <andythenorth> horrific idea: attach an arbitrary event via a control code
12:12:45 <andythenorth> oof, no GS is queue event-driven, not callback, can't do that
12:12:54 <glx[d]> Events don't work too well with gs
12:13:15 <andythenorth> well, opening story page is the goal here 😛
12:13:42 <glx[d]> Window handling only works locally and SP
12:15:09 <glx[d]> It's doable, but not via GS, it must be an internal openttd feature
12:15:47 <andythenorth> I think that's fine
12:17:27 <andythenorth> I had 2 alternative ideas for this:
12:17:27 <andythenorth> - add a dedicated UI 'open story page' button to the town and industry info windows, and a GS method to register which page is opened (default is none)
12:17:27 <andythenorth> - provide a text control code, taking 2 parameters (story page ID, text for the link); then use that anywhere that GSText is supported
12:18:00 <andythenorth> the 2nd option is more flexible
12:18:46 <andythenorth> but grf can't set the story page, so it wouldn't work for industries
12:19:13 <TallTyler> Can GS add things to industry windows? Or only towns?
12:22:20 <andythenorth> yes what dP said
12:23:10 <andythenorth> that will inherently conflict with what the grf is trying to do
12:23:14 <andythenorth> but one step at a time....
12:25:08 <JGR> It only adds text, it doesn't remove whatever other text is there
12:30:03 <andythenorth> so that could neatly say "Open story page for this industry...."
12:36:02 <andythenorth> can someone point me at an on click handler, maybe for town names?
12:36:07 <andythenorth> I am searching and not finding
12:41:15 <andythenorth> looks like I might need to declare a WID?
12:45:08 <JGR> Which window are you talking about that you can click on a town name?
12:45:26 <JGR> ScriptStoryPage::NewElement has location buttons?
12:47:49 <andythenorth> I was looking in Town Directory
12:48:05 <andythenorth> I thought MP chat had clickable town names, but couldn't see it in src
12:50:08 <JGR> The town directory window doesn't use script texts
12:51:23 <andythenorth> does anything have clickable script texts?
12:52:18 <andythenorth> WID_GOAL_LIST has HandleClick
12:54:31 <JGR> No, script text is still just text
12:55:05 <andythenorth> maybe goal question window
12:57:23 <andythenorth> I am looking at `IndustryViewWindow`, specifically it's `OnClick` method
12:57:28 <andythenorth> it is somewhat discouraging 😛
12:57:56 <andythenorth> we seem to measure clicks by actual x,y positions, including accounting for RTL etc
12:58:08 <JGR> How else would you measure clicks?
12:58:18 <andythenorth> composable UI system?
12:58:48 <andythenorth> that's what WID_FOO does (I assume)?
13:01:03 <petern> OnClick knows the widget, but sometimes you need to know where inside that widet...
13:01:45 <petern> But all the list-type stuff is generally just one widget, even if there are buttons drawn inside each row.
13:02:19 <andythenorth> I guess they usually repeat predictably?
13:02:46 <andythenorth> the industry window is probably one of the more special cases 😛
13:02:57 <petern> e.g. If you added a button to each row of the town list, you could either draw the fake button manually for the 10 rows that are visible, or you would need to instantiate an actual button for every possible row even if it's not visible.
13:04:05 <petern> Most of the time there are no buttons in the industry window anyway
13:04:32 <petern> Also, viewport signs? They're not widget buttons either...
13:05:01 <andythenorth> L979 industry_gui.cpp, ` if (!i->text.empty()) {` this is the GS text?
13:05:22 <petern> The industry window could actually be realised with real widgets I guess, there's not that many.
13:06:03 <andythenorth> it all makes sense when explained
13:07:23 <petern> That list down the left, apart from "All trains" and "Ungrouped trains" is all one widget.
13:07:31 <petern> And the list on the right... all one widget.
13:08:17 <petern> Our system also doesn't support grids of widgets either, which is annoying.
13:08:51 <petern> It has vertical or horizontal containers, which you can nest, but making sure all the sizes line up is a pain.
13:09:49 <JGR> WWT_MATRIX does the job, for the most part
13:09:49 <petern> There's also two different sorts of matrix 😄
13:10:24 <JGR> Using actual widgets like that becomes a faff when you want to start scrolling things
13:10:45 <petern> But at least it's not QT.
13:12:49 <petern> I made a GTK UI once, using the graphical GUI builder to lay out the widgets. That's impossible to build now as all that was deprecated...
13:14:00 <andythenorth> so making a segment of a string clickable...means measuring glyphs?
13:14:03 <andythenorth> not going to happen
13:14:17 <JGR> GObject and friends makes the OpenTTD code look stunningly clean and modern
13:15:03 <JGR> I don't miss trying to work with any of that
13:15:14 <petern> QT and moc was a clustermess too.
13:15:30 <JGR> I did have some success with wxWidgets
13:17:26 <petern> The other matrix widget could be useful, I'm not sure if handles multiple widgets under it though.
13:17:48 <glx[d]> glx[d]: I didn't expect that
13:18:28 <andythenorth> finding clicks on this will be a shitshow?
13:20:28 <JGR> Probably make more sense to some API to add a button, like the story book
13:20:45 <andythenorth> or a fixed text in a known rect
13:23:42 <TrueBrain> I might have been bored, and overdid it slightly
13:25:26 <petern> I like LordAro's suggestion about taking height into account though.
13:25:54 <TrueBrain> that would force you to go through every tile I guess, as the height might differ from tile to tile?
13:26:03 <petern> That requires a scan of the terrain so isn't so simple.
13:26:19 <TrueBrain> and expensive, computation wise
13:26:22 <andythenorth> I didn't read the diff, was it just "bridge_cost = 0xFF"?
13:26:32 <andythenorth> like the MS Excel "return 11" for the font size widget
13:26:43 <andythenorth> because the automated test checked for 11
13:26:48 <petern> Relatively, but if you are building a bridge you already have to check each tile to see if it's possible to build a bridge on.
13:27:03 <TrueBrain> true; so cost could be calculated while doing that 🙂
13:27:26 <petern> Original TTD didn't allow > 1 bridges, so the formula doesn't take it into account.
13:27:30 <TrueBrain> it really isn't an important PR .. we talk about 1.5us worst-case ..
13:27:49 <andythenorth> the "Display chain" button leaves room for an option "Story page" button eh
13:28:11 <TrueBrain> but I had a lot of fun writing some weird scripts 😄
13:28:16 <petern> Indeed, I bet the rest of the test for building a bridge costs more than that...
13:28:25 <andythenorth> Town window would be more challenging
13:29:10 <petern> Of course if you take height into account, you have the situation where terraforming to change the height first might save morning...
13:29:27 <andythenorth> imagine the micro-optimisation potential
13:29:35 <andythenorth> you could do a whole YT channel about it 🙂
13:29:59 <petern> But destroying a bridge always costs money, so it's not an exploit as such.
13:30:03 <TrueBrain> petern: one could even argue that the bridge itself costs, and the pillars costs .. and the latter depend on height
13:30:45 <petern> Do we still have the option to disable building on slopes? 😄
13:31:07 <TrueBrain> and if so, does anyone use it? /me looks at automated survey ...
13:31:32 <JGR> `bool build_on_slopes; ///< allow building on slopes`
13:31:41 <petern> #10633 is a case of someone found an algorithm (probably with some automated scanning tool) that isn't optimal...
13:31:55 <JGR> Another one of those things for loading ancient savegames
13:32:25 <TrueBrain> it is on by default, not?
13:32:32 <TrueBrain> so if we would remove it, those ancient savegames would still work fine, not?
13:33:05 <petern> It's exposed to NewGRF 😄
13:33:11 <TrueBrain> so we add telemetry in 14.0, and remove settings that are REALLY underused in 15.0? 😄
13:33:43 <TrueBrain> sorry, popularity contest
13:38:52 <Rubidium_> don't forget to add a configuration for the popularity thing, and then in 15.0 you can remove that setting as everyone allows the popularity thing :D
13:39:31 <glx[d]> ok so openttd runs fine in master, but with alloca branch it doesn't find required files
13:41:27 <TrueBrain> Rubidium_: Measured bias, nice 😄
13:42:40 <LordAro> TrueBrain: bonus survey item, though no idea how you'd achieve it - download method
13:42:50 <LordAro> i.e. steam / gogs / win store / native
13:44:24 <petern> Slightly different binaries 😉
13:44:54 <TrueBrain> That would be the easiest way 🙂 but let's not go there for v1
13:46:09 <petern> Or command-line parameter
13:46:25 <LordAro> i was thinking something to do with install location
13:47:09 <petern> Steam and Gog both let you use wherever you like for install location.
13:47:16 <petern> Windows Store is more restrictive though.
13:59:50 <orudge> You can detect Windows Store, probably programmatically, but otherwise by install location
14:05:29 <TrueBrain> for Steam you can check if the steam library is loaded 😉
14:12:20 <petern> If you can do it by command line parameter then you don't need to add support for weird APIs, at the expense of someone easily faking it if they cared.
14:14:16 <orudge> I don't think there's a way of forcing a command line parameter for a Windows Store app (that I'm aware of). The package API at least should be a very straightforward way of checking, if we care about it.
14:14:31 <orudge> Though we can also access stats on Microsoft's site as to how many folk are using the store app
14:17:59 <glx[d]> very weird `if (d_name == "." || d_name == "..") continue;` with d_name being "." doesn't continue in alloca PR
14:32:55 <Rubidium_> the trailing '\0' that is in the std::string?
14:44:08 <glx[d]> exactly the trailing '\0'
14:44:44 <glx[d]> comparison does len1 == len2 && ...
15:04:33 *** HerzogDeXtEr has joined #openttd
15:06:39 <andythenorth> I failed to figure out how to make a story page open 😛
15:06:53 <andythenorth> back to what I'm good at 😛
15:22:13 <glx[d]> petern: I think you can compare industry news messages in french for gender stuff
15:34:37 <andythenorth> I have made this 😛
15:34:42 <andythenorth> I hope we are proud
15:37:58 <andythenorth> now all it needs is a dedicated widget, strings, tooltips, and a GS method to attach / detach a story page
15:38:01 <andythenorth> and the widget needs to disable if no story page is attached
15:38:13 <andythenorth> then same for town 😛
15:39:56 <petern> Hmm, STR_FORMAT_INDUSTRY_NAME has a hyphen separator in French that isn't there in English.
15:44:44 <andythenorth> slow compile is slow
15:44:55 <andythenorth> changed a string, everything wants to recompile 😛
15:44:59 <petern> Well, I am seeing "Un nouveau" and "Une nouvelle" depending on the industry type.
15:45:11 <petern> I don't know how it works but...
15:45:49 <Eddi|zuHause> i once made a patch for a very early FIRS to support that stuff
15:46:22 <Eddi|zuHause> back when FIRS was in NFO
15:48:30 <petern> That's almost a hyperlink.
15:48:45 <andythenorth> it's a pisser though, there is a global story book (using INVALID_COMPANY), or there's local company story book
15:48:49 <andythenorth> so which page do you get?
15:49:11 <andythenorth> whichever one the GS has attached?
15:49:28 <andythenorth> "it's as though this needs thought through better"
15:51:42 <andythenorth> hand me a pram toy, so I can throw it out
16:07:32 <andythenorth> drop down menu? 😛
16:08:27 <petern> With a 1 pixel high scrollbar, and not quite wide enough so lots of ...?
16:14:13 <andythenorth> well someone will figure out this GS stuff 😛
16:15:37 <andythenorth> maybe the town gets a story page assignment per company?
16:15:48 <andythenorth> and then it's up to the GS what gets assigned?
16:39:31 <frosch> TrueBrain: IMO some stuff from misc_settings.ini should be part of the survey data, like used basesets, screen resolution, gui zoom, sprite/truetype font, ... and I am not sure what you mean with "playtime of the session": is it measured in realtime, in-game time, while paused/unpauses/mouse-in-window, or number of commands triggered, ... personally I often keep games open all-day paused, even when doing something else for a few hours
16:41:25 <TrueBrain> we can tune things as we go
16:41:45 <TrueBrain> currently things are a bit "all of the place", which is a bit annoying 😄
16:43:47 <dP> will patchpacks be able to send custom settings and data?
16:44:58 <TrueBrain> and about playtime, the important bit I tried to convey with this, is that we weight the survey. To avoid people starting tons of small games in the hope of getting in the top 10 😛
16:45:18 <TrueBrain> how to do it exactly .. didn't gave it any real thought ..
16:45:39 <frosch> openttd.cfg seems to be about 16 kiB, I guess that's also what the json would be about
16:45:45 <dP> if you weight they can leave 20 instances running forever
16:45:56 <TrueBrain> sounds about right, 16 KiB
16:46:32 <TrueBrain> so somewhere in between 🙂
16:46:55 <frosch> steam only tells the number of users online, not how many during the day, but maybe 2k submissisons/day, so 32 MiB/day 🙂
16:47:48 <TrueBrain> you might be underestimating that number
16:48:18 <frosch> well, we definitely can't store the survey data in a gh repo :p
16:48:44 <TrueBrain> we facilitate ~2000 multiplayer connections in a normal day
16:49:09 <TrueBrain> owh, no, that is TURN only
16:49:15 <TrueBrain> 10k connections a day
16:50:06 <TrueBrain> no, storing it in a GH repo might be a bad idea .. not because of the amount of data, that will fit easily .. but digesting the data will be annoying 😛
16:50:11 <TrueBrain> I think AWS DynamoDB will do fine
16:50:14 <frosch> ok... is number-of-players-in-the-game part of the survey somewhere? :p
16:50:17 <dP> it very much depends on how many players opt in which is hard to guess
16:50:17 <TrueBrain> which is a NoSQL database
16:50:50 <frosch> dP: that depends on the gui design, people are trained to click away "accept all cookies" banners
16:51:18 <dP> yeah, I guess if it's annoying popup with 10 steps to opt out you'll get a lot xD
16:51:37 <TrueBrain> the only thing I am not sure of yet, is what to store in the backend .. either the full document, and let the NoSQL database take care of it, or already prepare the data per setting/key, or something
16:51:48 <LordAro> also there'll be a damning medium blog post and we'll get to the top of hackernews
16:52:13 <TrueBrain> we could also store it in a time-series database
16:52:18 <andythenorth> ach, if GS wasn't GS, I could handle the button event and show an appropriate story page
16:52:32 <TrueBrain> or in a simple bucket system .. so many choices
16:52:43 <dP> openttd players are trained to ignore big red windows though 🤣
16:53:27 <TrueBrain> if we would convert the JSONs into a single time-serie value per setting, the amount of data will be laughable small
16:53:44 <TrueBrain> but you lose correlation
16:53:55 <TrueBrain> ("people who have setting A also have setting B" kinda thing)
16:55:01 <TrueBrain> guess step one is acceptance: do we consider it a good idea yes/no
16:55:12 <TrueBrain> step two would be to modify the client to send out JSONs (over HTTPS only plz :P)
16:55:55 <TrueBrain> hihi, we could attach it to the crashlog handler, so we know how often games crash 😛
16:56:10 <TrueBrain> also a counter how often the AI crashed? 😛
16:56:41 <glx[d]> and ai/gs crash reason
16:56:48 <frosch> don't log how often "reloadnewgrfs" is issued. that would identify andy
16:57:16 <TrueBrain> glx[d]: the tricky part is, that we want to keep data anonymously .. and strings are notorious for not doing that 😛
16:57:25 <TrueBrain> so if anyway possible, I would like to prevent strings
16:57:31 <TrueBrain> only if we REALLY have to 🙂
16:58:07 <TrueBrain> frosch: lolz; would be funny 😛
17:07:30 <andythenorth> how many times GS crashed, is the new meta
17:08:45 <andythenorth> ok so "Story page" won't work
17:08:45 <andythenorth> and making clickable text looks impossible
17:09:37 <petern> Automatic crash reports? :p
17:09:55 <Eddi|zuHause> because that worked so well the last time? :p
17:10:36 <petern> Was there a last time?
17:10:54 <JGR> For desync telemetry to be useful for resolving the issue, likely it will involve a lot of strings
17:13:00 <Eddi|zuHause> i think there was an option to upload crash reports like 15 years ago?
17:13:50 <JGR> The desync logs that come out of the JGR servers here tend to be longer than crash logs
17:18:08 <andythenorth> what about ctrl-click on the town name on the map to get a story page?
17:18:24 <dP> I'm not sure how useful any desync can be
17:18:25 <Eddi|zuHause> nobody will ever find that.
17:18:48 <dP> I have full recordings of the games and it's still pita to hunt desyncs
17:19:22 <dP> but it would be nice to at least see how often do they happend and maybe some correlation to newgrfs
17:20:55 <dP> Eddi|zuHause: yeah, especially not the target audience xD
17:21:08 <dP> imo clickable text is the way to go
17:21:12 <dP> just some work to implement
17:21:25 <andythenorth> I see no way to achieve it
17:21:40 <andythenorth> the game has a choice of fonts
17:21:47 <andythenorth> measuring glyphs will be near-impossible
17:21:57 <JGR> The reports I get out form the servers are useful to me anyway, I've fixed a bunch of issues based on the data in them
17:22:15 <Eddi|zuHause> we have clickable text... signs (station, town, etc.)
17:22:25 <andythenorth> browsers are built to do it
17:22:26 <JGR> andythenorth: It's not that big a problem
17:22:43 <Eddi|zuHause> clickable text is just a button without a frame
17:23:12 <Eddi|zuHause> not some weird deep magic
17:23:22 <dP> problem is getting the frame
17:23:51 <dP> but it's common enough task, probably just a matter of hooking into the right place in text layouter
17:24:49 *** tokai|noir has joined #openttd
17:24:50 *** ChanServ sets mode: +v tokai|noir
17:27:51 <TrueBrain> petern: I have that kinda ready via Sentry :p but as I have no way to predict the volume, I am reluctant to...
17:29:39 <andythenorth> even for wrapping text though?
17:31:47 *** tokai has quit IRC (Ping timeout: 480 seconds)
17:52:20 *** gelignite has joined #openttd
18:03:09 <petern> Speaking of wrapping text...
18:19:32 <JGR> Looking through the recent desync logs, it seems that there are yet more problems with objects on water
18:30:43 <andythenorth> hmm a text grid would be useful in story book
18:30:55 <andythenorth> I want to make a summary page for all towns
18:31:22 <andythenorth> whether they are growing (also various satisfaction criteria)
18:31:52 <andythenorth> but lining up columns in arbitrary text is not a winning game
18:34:20 <andythenorth> guess I could just follow precedent 🙂
18:34:26 <JGR> I'm not completely sure that this qualifies as a bug, but putting water objects with the no foundation flag on a canal allows you to bypass the canal's terraforming restrictions, which looks really strange
18:36:22 <andythenorth> oh that is quite strange
18:36:51 <andythenorth> can grf industry also do that?
18:37:45 <petern> I guess if it's no foundation then placing it should check if there are already foundations.
18:39:48 <petern> Oops, I forgot to go to the AGM :/
18:39:58 <petern> Or maybe ":)" as they can be tedious.
18:41:16 <JGR> andythenorth: Seems it gets a foundation
18:42:33 <DorpsGek> - Update: Translations from eints (by translators)
18:45:46 <LordAro> i have to go to ours these days
18:47:16 <andythenorth> goes it Horse with Variants yet?
18:48:18 <andythenorth> I should use the new callback eh
19:06:49 <andythenorth> hmm, a GSConsole perhaps?
19:07:00 <andythenorth> arbitrary commands
19:07:07 <andythenorth> limited how much use that might be but eh
19:22:49 <petern> This is turning into a very different PR L:p
19:28:16 <LordAro> petern: i did start it with "this might be completely separate" :p
19:28:29 <petern> It's okay, I have commits 😉
19:28:51 <petern> And if it's separate then some of the rest of the PR is pointless.
19:32:08 <petern> I wonder if hover-to-reveal would work better than resizing. Hmm.
19:43:32 *** Wormnest has joined #openttd
19:44:32 *** GeorgeVB has joined #openttd
19:44:32 <GeorgeVB> I want to disallow connecting some of the xUSSR set vehicles to some xUSSR set add-on vehicles
19:49:01 <michi_cc[d]> petern: Interesting typo in the PR#10634 description: "a test to ensure infinite recursion" 😛
19:50:13 <michi_cc[d]> Also, who broke my Discord desktop app?
19:54:45 <Kuhnovic> Is there a reason why Emscripten builds are capped at 1,8x in fast forward mode? I'm getting this in both chrome and edge
19:59:35 <FLHerne> Kuhnovic: you're sure it's not just hitting maximum performance? Even with wasm it'll be a few times slower than a native build
19:59:50 <FLHerne> and there might be some particular bottleneck
20:00:32 <Kuhnovic> I don't think so, it's way too consistent. It only fluctuates with 0.01 which is probably rounding error
20:00:52 <TrueBrain> Kuhnovic: you can't go faster as the refresh-rate of your browser
20:00:53 <LordAro> browsers are weird about vsync stuff
20:00:56 <FLHerne> recent Edge is the same browser engine as Chrome anyway, probably try Firefox for an actual datapoint
20:01:12 <TrueBrain> timers just don't return earlier
20:01:24 <Kuhnovic> Ah right, edge is based on chromium nowadays
20:01:40 <Kuhnovic> TrueBrain: Ah that makes sense
20:02:00 <TrueBrain> there are these days ways around it
20:02:05 <TrueBrain> but ... yeah, someone needs to build that 😄
20:02:38 <andythenorth> how to compose params for CARGO_LONG in GS? 😛
20:02:44 <andythenorth> maybe there's an example somewhere
20:05:14 <andythenorth> "/* First parameter is cargo type, second parameter is cargo count */"
20:06:53 <andythenorth> it's so weird writing OpenTTD mods in an actual language, not grf
20:08:06 <glx[d]> GS strings commands are the same as openttd string commands
20:08:30 <glx[d]> it's using strgen internally
20:09:17 <andythenorth> it's quite nice just reading openttd src to learn GS 😛
20:10:45 <andythenorth> never seen that before 🙂
20:12:04 <glx[d]> same holds for newgrf commands, some are even incorrect
20:13:44 <glx[d]> well of course this page is aimed at translators
20:14:10 <glx[d]> so probably not where param details should go
20:16:51 <glx[d]> probably better to add something like src\script\api\script_info_docs.hpp for string commands in the api doc
20:24:01 <LordAro> i opened up discord for #reasons. The channel i was in said "50+ new messages since ... December 2021"
20:24:03 <petern> Having winodws resize when I change selections is pretty weird too. Hmm.
20:24:19 <LordAro> i have now closed it again
20:25:34 <glx[d]> I have most discord servers muted, with some chans unmuted
20:31:29 *** gelignite has quit IRC (Quit: Stay safe!)
20:43:27 *** sla_ro|master has quit IRC ()
21:07:13 *** keikoz has quit IRC (Ping timeout: 480 seconds)
21:10:31 *** nielsm has quit IRC (Ping timeout: 480 seconds)
22:33:19 *** nebulabc has quit IRC (Quit: No Ping reply in 180 seconds.)
22:34:32 *** nebulabc has joined #openttd
22:37:52 *** urdh has quit IRC (Ping timeout: 480 seconds)
22:59:03 *** WormnestAndroid has quit IRC (Remote host closed the connection)
23:10:24 *** WormnestAndroid has joined #openttd
23:17:35 *** Wolf01 has quit IRC (Quit: Once again the world is quick to bury me.)
23:24:25 *** HerzogDeXtEr has quit IRC (Read error: Connection reset by peer)
continue to next day ⏵