IRC logs for #openttd on OFTC at 2023-06-25
00:14:46 <DorpsGek> [OpenTTD/OpenTTD] glx22 opened pull request #11069: Fix #11067, ed83c4b: Don't start competitors during map generation
00:33:39 <iqTop[m]> <peter1138> "They have updated their comment..." <- If I've been passive-aggressive like this other guy you mention, I apologize. I may have been unwillingly intoxicated by incorrect medication from 2017 to 2022, but right now if I screw up then that's on me.
00:33:39 <iqTop[m]> As for the topic in question, sounds to me like he doesn't want to admit that his ISP is shit. Probably pays $300 USD or so because its their only option for fast internet.
00:48:38 <iqTop[m]> That, or he's at college and the firewall blocks outgoing connections.
00:50:14 <iqTop[m]> If it is an ISP he pays for, "his ISP is shit" is just me guessing he has an ISP that is so draconian that they won't let him host game servers from home.
01:56:32 *** Wormnest has quit IRC (Quit: Leaving)
02:35:37 *** D-HUND has joined #openttd
02:38:52 *** Flygon has joined #openttd
02:39:14 *** debdog has quit IRC (Ping timeout: 480 seconds)
02:43:45 *** D-HUND is now known as debdog
03:32:56 *** keikoz has joined #openttd
04:15:43 *** tokai has joined #openttd
04:15:43 *** ChanServ sets mode: +v tokai
04:22:52 *** tokai|noir has quit IRC (Ping timeout: 480 seconds)
04:29:31 <DorpsGek> [OpenTTD/OpenTTD] rubidium42 commented on pull request #11069: Fix #11067, ed83c4b: Don't start competitors during map generation
05:20:48 *** nielsm has joined #openttd
05:21:19 *** HerzogDeXtEr has joined #openttd
07:28:29 *** Wolf01 has joined #openttd
07:42:40 <pickpacket> hahaha. I've made it so that no company can buy exclusive transport rights when another company owns it. In a way. Another company can still *pay for it*, but it just doesn't get it 🀣
07:42:59 <pickpacket> will have to check that bit of code. I guess that's maybe in the GUI somewhere?
07:55:52 *** Etua has joined #openttd
07:59:32 <jfs> the right thing is to handle the command such that it fails, and also add the same check in the UI so the command gets disabled when it would fail
08:01:49 <pickpacket> I've made it so that it does fail, but apparently the money is spent either way so I'll have to look at that. But I'm looking at how to disable it in the GUI if it would fail
08:01:50 <jfs> the important thing to keep in mind is that the function for a command is called twice: first for test, then for actual execution. you want to verify all the preconditions in the test run, so it doesn't react execution, but also still test the preconditions in the real run.
08:02:08 <pickpacket> wth happened to GH? It's slow as molasses
08:02:18 *** Etua has quit IRC (Quit: Etua)
08:04:10 <pickpacket> and it doesn't show line numbers in code files anymore!
08:04:51 <pickpacket> and #L anchors don't work
08:05:13 <ahyangyi> New and improvedβ„’ UI
08:05:41 <pickpacket> f***in' hell...
08:06:06 <pickpacket> check if this link works:
08:06:36 <pickpacket> I want to change it to:
08:06:36 <pickpacket> if (cur == TACT_BUY_RIGHTS && !_settings_game.economy.exclusive_rights || t->exclusive_counter != 0) continue;
08:07:08 <pickpacket> but the negation melts my brain... "is the company NOT able to buy exclusive rights"
08:07:19 <pickpacket> would this line be correct?
08:09:06 <jfs> it's better to add parentheses around the "or" expression to be clear
08:09:25 <ahyangyi> Or break it into two if statements
08:09:38 <jfs> or even break it down to sub-conditions
08:09:42 <pickpacket> I just did added parenthesis a second ago :D great minds think alike
08:10:01 <pickpacket> I'll try compiling this and hopefully have time to try it later today
08:10:09 <ahyangyi> /* Is the company not able to buy exclusive rights ? */
08:10:09 <ahyangyi> if (cur == TACT_BUY_RIGHTS && !_settings_game.economy.exclusive_rights) continue;
08:10:09 <ahyangyi> /* Does someone else already have the exclusive right? */
08:10:09 <ahyangyi> if (t->exclusive_counter != 0) continue;
08:10:12 <ahyangyi> like this?
08:10:26 <jfs> if (cur == TACT_BUY_RIGHTS) { if (!_settings_game.economy.exclusive_rights) continue; if (t->exclusive_counter != 0) continue; }
08:10:29 <ahyangyi> Just to avoid dealing with the negation
08:11:03 <pickpacket> I don't think that would work, because if the first if statement matches it'll never reach the second
08:11:21 <ahyangyi> Well, both result in `continue`
08:11:31 <ahyangyi> oh
08:11:46 <ahyangyi> I saw nielsm's version and now understand what's wrong
08:13:00 <pickpacket> hmm?
08:13:49 <ahyangyi> I missed the parenthesis πŸ˜›
08:15:05 <pickpacket> :)
08:16:04 <pickpacket> where do I find nielsms version?
08:16:29 <jfs> 10 lines above
08:16:57 <jfs> jfs = nielsm
08:18:03 <jfs> ahyangyi: if you use @-mentions the IRC bridge will translate the names, and otherwise they might not match up
08:18:42 <pickpacket> line 3326, Joel-Milligan?
08:20:07 <pickpacket> anyway, I need to go do other stuff :) cya
08:20:14 <pickpacket> and thanks for all the input!
08:29:45 <truebrain> seems that ~40% cached is the number we will have to live with πŸ˜› Still, 40% of the content served SUPAH fast to the end-user .. and only 60% slightly less (but still incredibly) fast πŸ˜„
08:30:50 <truebrain> zbase and abase combined are good for 60% of the used bandwidth of yesterday πŸ™‚
08:31:10 <truebrain> (and for those who missed my daily updates, context is BaNaNaS CDN)
08:31:44 <truebrain> also when looking at last week ... abase + zbase: 1TB. All traffic: 1.6TB
08:31:54 <truebrain> we always knew it was a lot, but now I know exactly how much is a lot πŸ™‚
08:37:36 <truebrain> (and before anyone asks, with Cloudflare the egress is free, so we don't actually care anymore how big the files are πŸ˜› )
08:37:41 <jfs> is it already compressed? if not, would it be possible to optionally negotiate a compressed version using one of the algorithms already included in the game for savegames? (would that actually gain anything significant?)
08:37:53 <truebrain> yes, they are compressed.
08:38:08 <truebrain> since the day of the birth of BaNaNaS, all content has been compressed πŸ™‚
08:38:14 <ahyangyi> in zip, I think
08:38:20 <truebrain> no, in .tar.gz
08:38:25 <ahyangyi> Alright
08:38:29 <truebrain> why would we ever do a zip, if we want to be cross-platform πŸ˜›
08:38:32 <ahyangyi> makes sense
08:38:53 <ahyangyi> Somehow the last time I got the download size wrong, I found the zipped version has the "right" size
08:39:04 <ahyangyi> by looking at the most significant digit only πŸ˜›
08:39:10 <ahyangyi> So, I learned the wrong lesson
08:39:15 <truebrain> πŸ˜„
08:39:45 <jfs> I wonder how much of those abase+zbase downloads are "select and download EVERYTHING" blindly
08:40:01 <truebrain> without joking, zip is a tar and gz in one, which is somewhat annoying to deal with. Our content is stored on-disk as a tar, as it is easy to find files. And on the wire it uses gzip over that to make sure it is as small as possible
08:40:27 <truebrain> (you can't seek in a zip-file)
08:40:44 <ahyangyi> And zip's handling of file name encoding is weird
08:40:53 <dP> tar.gz? I thought they were just tar, unless game extracts gz aftter download
08:41:13 <jfs> actually you can seek in a zip file, as the original format. zip is a concatenation of compressed files, while tar.gz is a compressed concatenation of files
08:41:27 <jfs> seek as in, decompress a single file from the archive
08:41:28 <truebrain> have you ever tried it? It is fun to try it in a zip-file
08:41:33 <truebrain> they really fucked up many concepts in a zip πŸ˜›
08:42:46 <truebrain> if I remember correctly, zip was that format that had its dir-listing at the end of the file
08:42:54 <truebrain> which is just awesome .. as to get there, you need to walk all the files first
08:43:05 <jfs> anyway, my suggestion was about using more than just gzip compression for the content too, like allowing xz or whatever
08:43:11 <truebrain> a tar on the other hand is streaming .. you can walk it while reading it
08:43:34 <truebrain> jfs: all attempts thus far shown the difference is in the single digits percentage wise
08:43:51 <truebrain> a few people have tried over the last few years even, as when we talk about BaNaNaS, people bring this up πŸ™‚
08:44:01 <truebrain> but as there are a lot of images in these bloody GRFs, it is not really helping
08:44:56 <LordAro> truebrain: thoughts on doing a dev-blog on all the infrastructure stuff? (once it is actually complete)
08:45:13 <truebrain> LordAro: planning to; as people tend to find those interesting, history has shown
08:45:21 <truebrain> but I first need to finish it, and this CDN is just being a dick
08:45:38 <dP> hm, 273mb vs 313 for abase, that gzip barely does anything...
08:45:42 <jfs> the directory in a zip file is at the end so you can extend the archive with more data without having to rewrite the entire thing (just overwrite the directory and add a new one) or have a fragmented directory. and also I'm quite sure it's designed so you can seek to a fixed offset from the end of the file to find a "footer" which points to the actual start of the directory, so you can find the
08:45:42 <jfs> start of the directory with at most two seeks
08:45:42 <truebrain> jfs: either way, don't let past experience hold you back, and try it out πŸ™‚
08:45:58 <dP> would be much better to use some modern image compression in grf format than trying to gz/xz over lz77
08:46:11 <jfs> GRFv9 when
08:46:26 <LordAro> truebrain: :)
08:46:35 <truebrain> jfs: That wouldn't surprise me if that works. I just remember it is a bitch to work with πŸ˜‰
08:47:05 <truebrain> But yeah, actually changing how GRF does compression would be much more helpful here
08:47:23 <jfs> it's also how self-extracting archives work btw, by having the directory at the end of the file you can quickly verify that the file contains an archive and begin working with that
08:48:07 <truebrain> but it is the reason tar and gzip are called "streaming formats", and zip is not πŸ˜›
08:48:19 <truebrain> I know there are advantages
08:48:19 <jfs> a hypothetical GRFv9 could be insane 32bpp only even
08:48:35 <truebrain> no, a better compression also really helps for things like iron horse
08:48:38 <truebrain> percentage wise
08:48:43 <truebrain> in absolute numbers it is non-sense
08:49:04 <truebrain> if we ignore the BaNaNaS bandwidth etc for a moment, the thing that mostly gets to me is how much storage space on disk OpenTTD uses for those formats
08:49:14 <truebrain> like abase is 300+ MiB
08:49:37 <truebrain> and as we just established, storing it compressed would help a bit, but would slow down the game a lot, so netto not worth it at all
08:49:54 <truebrain> so having a GRF format that slims that down, would be helpful overall; not just for transmissing of files
08:50:53 <truebrain> but I have a suspicion, but never confirmed it, that it would be best to first stitch together images in a GRF to a bigger image, and compress that .. as compressing a lot of small images rarely is useful
08:50:54 <jfs> right now the GRF saves each sprite as an individual PNG (or RLE bitmap), right?
08:51:12 <jfs> I wonder if there would be savings from saving a single big spritesheet PNG and then pointing into sections of that
08:51:35 <LordAro> regardless of grfv9, i don't think we could get away with "reencoding" all the existing GRFs?
08:51:56 <LordAro> because things like abase & zbase are functionally dead and won't ever get updated otherwise
08:51:58 <jfs> I doubt bananas license allows that yea
08:51:59 <dP> yeah, combining images should be much better for compresion
08:52:04 <dP> maybe not for lz77 though
08:52:23 <truebrain> jfs: we think the same thing here πŸ™‚
08:53:42 <dP> LordAro: who needs a/zbase, just add compression before opengfx2 dies xD
08:54:51 <LordAro> i still think we should "forcibly" deprecate & hide one of z/abase
08:55:15 <truebrain> people keep saying that, but nobody actually ever does πŸ˜‰
08:55:27 <LordAro> :p
08:55:43 <truebrain> like everytime someone mentions that, they are looking at some imaginary figure to actually do it
08:55:51 <truebrain> "I have this idea, but I don't dare to burn myself on it" πŸ˜› πŸ˜› πŸ˜›
08:55:53 <truebrain> hihi, sorry πŸ™‚
08:57:22 <andythenorth> it would be amusing to see the sea of pitchforks
08:57:29 <andythenorth> 'amusing'
08:57:36 <LordAro> yes
08:58:09 <truebrain> jfs: it is much worse, but it took me a bit of time to actually find the document specifying it .. as it isn't part of the NewGRF specs πŸ˜›
08:58:09 <truebrain>
08:58:13 <dP> just sneakily send opengfx2 instead, how would they know? :p
08:59:33 <truebrain> basically, it even depends on the person writing the GRF if there is any compression at all
08:59:47 <truebrain> images are stored in RGBRGBRGB or worse: RGBARGBARGBA format
08:59:58 <andythenorth> compression affects compile time iirc
09:00:02 <LordAro> also it opens the idea of "curation", which is a bit of a rabbithole in a minefield
09:00:03 <truebrain> so I would guess, anything you do here, would help a lot πŸ™‚
09:00:06 <andythenorth> I did test various flags
09:00:17 <truebrain> LordAro: it is, yes πŸ™‚
09:00:51 <truebrain> the silliest thing is, that OpenTTD ships with libpng for how many years now? πŸ˜„
09:00:55 <dP> truebrain: there is even RGBAM
09:01:01 <truebrain> but strictly seen it is optional
09:01:19 <truebrain> you just can't load heightmaps and making screenshots takes even longer πŸ˜„
09:01:31 <truebrain> but you can still use NewGRFs! πŸ˜„
09:02:01 <andythenorth> hmm
09:02:06 <truebrain> the compression was fully written for palette images, where the exceptation was that a lot of pixels in a row are the same
09:02:10 <truebrain> it was not meant to be used with 32bpp πŸ˜›
09:02:30 <truebrain> I think the LRE part in the lz77 variation used, is never actually triggered in 32bpp GRFs πŸ™‚
09:05:24 <truebrain> so yeah jfs , if I were you, I would fiddle around there; could be a huge diskspace saver πŸ™‚ And how we deal with existing content .. let's tackle that once it becomes actual πŸ™‚
09:05:41 <andythenorth> iron-horse.grf is 28.7 MB
09:05:51 <andythenorth> zipped it's 3.5 MB
09:05:57 <jfs> I'm wondering if I should rather work on, say, multithreading or deep water first tho
09:05:58 <andythenorth> what's the ratio there? πŸ˜›
09:06:02 <dP> there is also in-memory lre, though don't remember if works for transperent only or other pixels too
09:06:22 <jfs> (psst, and are ready!)
09:06:23 <andythenorth> hmm 8.2 compression ratio
09:06:26 <truebrain> jfs: welcome in the world of "oeh, there are so many things we could work on" πŸ˜„ I know that pain πŸ˜›
09:07:24 <andythenorth> I've tried uploading zips to bananas instead of tar.gz, but (a) I don't know if it makes any difference at the bananas end (b) bananas won't accept a zip produced with Apple's compressor
09:07:40 <truebrain> BaNaNaS should accept zips
09:07:50 <andythenorth> yes but Apple...
09:08:16 <jfs> could it be because apple's adds those extra hidden dirs and files inside to store attributes?
09:08:16 <truebrain> Python's `zipfile` should be able to read it; even Apple's πŸ™‚
09:09:30 <truebrain> but you can always try it andythenorth : start python and run `import zipfile; z = zipfile.Zipfile(""); z.infolist()`
09:09:54 <andythenorth> hmm I just tested uploading Horse, bananas accepts it
09:09:59 <truebrain> (to be clear, the backend unpacks the zip, and repacks it with a strong tar.gz when all is done)
09:10:03 <andythenorth> the zip contains only the grf, nothing else
09:10:15 <andythenorth> normally the zip contains other things, I will explore more
09:10:37 <truebrain> worst case, BaNaNaS web shows you those files, and you need to remove them again
09:10:45 <truebrain> after uploading a zip, you only see the content of the zip
09:10:52 <truebrain> even without folders they might have been in
09:11:14 <andythenorth>
09:11:14 <andythenorth> ok it's choking when it's a folder
09:11:29 <andythenorth> are those nested paths?
09:11:48 <truebrain> we don't strip out paths? I thought we added that in the end .. hmm .. so it is done a step later, owh well
09:12:03 <truebrain> it should really already been done πŸ˜›
09:12:15 <truebrain> the reason it doesn't pick up on those `license.txt` etc
09:12:30 <truebrain> anyway, you can see here you can just remove the special mac files πŸ™‚ So your (2) seems to be bad memory, not an actual truth πŸ˜› πŸ˜›
09:13:29 <truebrain> owh, yeah, I remember now .. for AIs and GSes you do want folder support, so what it does it scans the whole archive if everything is in a single folder
09:13:32 <truebrain> if it is, it removes that folder
09:13:36 <truebrain> MacOS is ruining that for you πŸ™‚
09:13:39 <andythenorth> maybe I make my own zip, not using Apple's utility
09:13:53 <andythenorth> last time I decided this didn't matter
09:14:04 <andythenorth> .tar.gz will do, just slow uploads
09:14:18 <truebrain> gzip and zip should be about the same size
09:14:22 <truebrain> otherwise, use gzip -9 πŸ˜›
09:14:29 <truebrain> ah, sneaky edit
09:14:30 <truebrain> pfff
09:14:33 <truebrain> you can also upload a .tar.gz
09:14:39 <andythenorth> yeah, these aren't things I really understand πŸ™‚
09:14:54 <andythenorth> alberth wrote the part of the makefile that makes the release
09:14:59 <truebrain> haha
09:15:46 <andythenorth>
09:15:55 <andythenorth> there's a zip target also that I never use
09:18:50 <DorpsGek> [OpenTTD/bananas-api] TrueBrain opened pull request #395: Fix: ignore __MACOS in zips/tarballs, as it only contains MacOS metadata
09:21:07 <truebrain> totally untested, but we will do that in a sec on preview
09:21:46 <truebrain> andythenorth: funny, that is a zip-file made by someone who doesn't use Windows πŸ˜›
09:22:05 <truebrain> (in general, zip-files don't contain a second folder in them, but all files are in the root; this in contrast to tar-files, where there is first a folder in them)
09:22:15 <LordAro> truebrain: ...MACOSX vs MACOS ?
09:22:43 <DorpsGek> [OpenTTD/bananas-api] TrueBrain updated pull request #395: Fix: ignore __MACOS in zips/tarballs, as it only contains MacOS metadata
09:22:45 <truebrain> did I mention the "untested" part? πŸ˜„ πŸ˜„
09:22:46 <truebrain> tnx
09:24:29 <andythenorth> πŸ™‚
09:28:14 <truebrain> andythenorth: please go to, login, and upload that zip file again please
09:28:35 <truebrain> just the upload and hitting "auto fill" is enough; no need to actually publish it
09:29:49 <andythenorth>
09:30:03 <andythenorth> that's a directory zipped
09:30:06 <andythenorth> works fine eh
09:30:17 <truebrain> would that make your life better?
09:30:25 <andythenorth> faster uploads πŸ™‚
09:30:43 <truebrain> so if LordAro can hit the approve button, that will be deployed moments after πŸ™‚
09:31:09 <andythenorth> ok that's our good deed for the day, now we watch TV? πŸ™‚
09:31:24 <truebrain> yes
09:31:43 <truebrain> such a simple problem, so easy to fix; I had no clue you ran into that πŸ™‚
09:34:30 *** Timberwolf has quit IRC (Remote host closed the connection)
09:43:29 *** keoz has joined #openttd
09:44:58 *** keikoz has quit IRC (Ping timeout: 480 seconds)
10:02:25 <DorpsGek> [OpenTTD/bananas-api] LordAro approved pull request #395: Fix: ignore __MACOSX in zips/tarballs, as it only contains MacOS metadata
10:02:28 <DorpsGek> [OpenTTD/bananas-api] TrueBrain merged pull request #395: Fix: ignore __MACOSX in zips/tarballs, as it only contains MacOS metadata
10:03:06 <truebrain> cheers
10:38:16 *** Timberwolf has joined #openttd
10:58:02 <DorpsGek> [OpenTTD/OpenTTD] PeterN merged pull request #11066: Codechange: Use std::optional for GRFConfig::GRFError
10:58:43 <DorpsGek> [OpenTTD/OpenTTD] PeterN merged pull request #11065: Change: Allow text shadow on WWT_EMPTY/WWT_TEXT to extend horizontally.
11:02:36 <DorpsGek> [OpenTTD/OpenTTD] PeterN merged pull request #11022: Fix #11016: Use after free in network invalid packet error path
11:02:39 <DorpsGek> [OpenTTD/OpenTTD] PeterN closed issue #11016: [Bug]: Use after free in network invalid packet error path
11:09:02 <andythenorth> hmm
11:09:11 <andythenorth> need to copy the town growth algorithm into GS
11:09:33 <andythenorth> TOWN_GROWTH_NORMAL is fine, but I want to multiply it by a factor
11:11:55 <andythenorth> grepped src for 0x10000 but can't find the town growth algorithm that way
11:12:38 <andythenorth> maybe TownTickHandler gets me closer
11:12:52 <DorpsGek> [OpenTTD/team] Naeso opened issue #430: [fr_FR] Translator access request
11:13:56 <DorpsGek> [OpenTTD/team] Naeso opened issue #431: [fr_FR] Translator access request
11:14:57 <talltyler> andythenorth: have you seen #11068? It could use a reference to your complementary/tint lookups for Horse πŸ™‚
11:14:57 <talltyler>
11:15:13 <talltyler> I also think I’ve seen you suggest that setting before
11:15:37 <andythenorth> interesting
11:17:45 <andythenorth> Horse has mappings cc1 -> cc2 tint
11:18:06 <andythenorth> not sure that's what the PR is referring to
11:18:16 <andythenorth> hmm can't figure out what GetNormalGrowthRate is doing
11:27:18 *** Timberwolf has quit IRC (Remote host closed the connection)
11:38:19 <jfs> GRFv9 fever dreaming: company coloring by base image, and an RGBA overlay for company color. the company color overlay is multiplied by the actual company color, so a pure grayscale (R=G=B) would produce a pure company color scale, but offset colors would cause hue variations... maybe this won't work as well in practice
11:39:50 <talltyler> That sounds like less-user-friendly RGBCC πŸ™‚
11:40:46 <peter1138> Multiply colours doesn't usually result in hue variations, just weirdness.
11:41:03 <jfs> you could just use one grayscale+alpha overlay to make CC, but I think having some way to shift the hue will be useful
11:41:23 <jfs> and yeah you're right, it won't give useful results that way
11:42:23 <peter1138> With 2CC the player can set both the primary and secondary hues, with your method they get to a primary and anything else is fixed, relative to the primary.
11:43:14 <jfs> I didn't get to the part where you can add a second overlay for the second CC
11:44:11 <andythenorth> I talked myself out of 3CC πŸ˜›
11:44:13 <andythenorth>
11:44:21 <andythenorth> variants instead, with many colours
11:45:09 *** gill6151 has quit IRC (Quit: The Lounge -
11:46:48 <AlphaGamma3521> Lovely
11:58:44 <DorpsGek> [OpenTTD/team] glx22 commented on issue #431: [fr_FR] Translator access request
12:05:27 *** gill6151 has joined #openttd
12:13:48 *** Timberwolf has joined #openttd
12:27:12 <andythenorth> maybe I should just make my own town growth rules
12:27:29 <andythenorth> what are the current rules? I never really understood them
12:28:59 <DorpsGek> [OpenTTD/OpenTTD] glx22 updated pull request #11069: Fix #11067, ed83c4b: Don't start competitors during map generation
12:29:52 <dP> andythenorth: Check simple CB I think it has it copied already
12:30:20 <dP> jfs: Isn't that how rgbam currently works?
12:31:46 <dP> Ah, nvm, didn't notice you're talking hue
12:31:50 <andythenorth> thanks dP
12:34:49 <DorpsGek> [OpenTTD/OpenTTD] PeterN commented on pull request #11069: Fix #11067, ed83c4b: Don't start competitors during map generation
12:43:23 <andythenorth> hmm
12:43:32 <andythenorth> 'recommended upgrade' property for vehicles?
12:43:41 <andythenorth> expose to a UI filter in autoreplace?
12:43:55 <andythenorth> prop value is just a list of eligible IDs from same grf
12:47:18 *** keoz has quit IRC (Remote host closed the connection)
12:47:29 *** keoz has joined #openttd
12:48:02 *** gill6151 has quit IRC (Quit: G-line: User has been permanently banned from this network.)
12:49:38 *** frosch123 has joined #openttd
12:49:38 <frosch123> andythenorth:
12:49:46 <frosch123> ttdp had it 15 years ago :p
12:51:01 <andythenorth> 🧐
12:51:50 <frosch123> though it was not a "recommendation", but a "newgrf plays the game"
12:51:55 <andythenorth> oh is this magic autorenew?
12:52:03 <andythenorth> seems like it just happens
12:52:11 <andythenorth> auto-tech-tree πŸ˜›
12:54:52 <DorpsGek> [OpenTTD/OpenTTD] glx22 commented on pull request #11069: Fix #11067, ed83c4b: Don't start competitors during map generation
13:07:38 <andythenorth> pfff
13:07:44 <andythenorth> so far my GS is stateless, no saveload
13:07:57 <andythenorth> which is much easier to develop with, because I can clear out state by reloading the save
13:08:34 <andythenorth> (there is local state, but it's easily rebuilt)
13:08:58 <andythenorth> but I need to persist some facts about industry instances, and I can't write them into the map 😦
13:09:32 <andythenorth> GS feature to read GRF registers?
13:10:20 <andythenorth> specifically I want to know how long since last production change at an industry
13:11:09 <andythenorth> yes, I want to avoid saveload
13:11:18 <andythenorth> it makes it impossible to develop GS
13:11:34 <andythenorth> because state can become corrupt
13:11:52 <andythenorth> then a new savegame has to be started
13:12:06 <andythenorth> there's no dev tool to inspect / traverse the root table
13:12:10 <andythenorth> nor set values in it
13:12:19 <andythenorth> I guess I could write one
13:12:42 <andythenorth>
13:12:42 <andythenorth> I started this
13:13:00 <andythenorth> ^ this can cause crashes, depending when in the month the button is clicked
13:14:37 <andythenorth> maybe I could make a state manager in storybook, but _prevent_ the crashes πŸ˜›
13:16:36 <andythenorth> wonder what the UI to it would be πŸ˜›
13:19:10 *** gill6151 has joined #openttd
13:47:30 *** keoz has quit IRC (Remote host closed the connection)
13:47:41 *** keoz has joined #openttd
14:09:01 <andythenorth> we could just store the date of last production change at an industry and expose it
14:15:25 <peter1138> Hmm, found a crash, time to go back to a debug build.
14:16:05 <andythenorth> maybe some industry history?
14:16:10 <andythenorth> how much could we afford to store?
14:16:25 <peter1138> There's a PR that adds a year or 2 of history.
14:16:38 <peter1138> transported/production
14:19:31 <peter1138> Oh, of course, debug build does not crash.
14:23:49 <andythenorth> maybe we could store production change results also
14:23:52 <andythenorth> for 2 years or so
14:30:19 <andythenorth> hmm not 2 years
14:30:28 <andythenorth> all I want is the date of last production change, and the value
14:30:31 <peter1138> 24 economy periods πŸ™‚
14:30:44 <andythenorth> I can read it in GS and cache it by walking all industries on the map once a month
14:30:48 <andythenorth> but eh
14:31:22 <andythenorth> actually I can't πŸ˜›
14:31:27 <andythenorth> GS can't read prod multiplier anyway
14:43:30 <DorpsGek> [OpenTTD/OpenTTD] PeterN opened pull request #11070: Fix: Setting tree lines drawn incorrectly for RTL languages.
14:54:00 *** Wormnest has joined #openttd
14:54:59 <DorpsGek> [OpenTTD/OpenTTD] PeterN opened pull request #11071: Fix: Ensure settings page label is orange.
15:02:35 <DorpsGek> [OpenTTD/OpenTTD] glx22 opened pull request #11072: Cleanup 6298b96: Left-over function declaration
15:09:32 <DorpsGek> [OpenTTD/OpenTTD] nielsmh approved pull request #11071: Fix: Ensure settings page label is orange.
15:09:40 <DorpsGek> [OpenTTD/OpenTTD] PeterN approved pull request #11072: Cleanup 6298b96: Left-over function declaration
15:11:08 <andythenorth> perhaps GS can read the news log
15:11:41 <andythenorth> no GSNews.Create() is the only method 😦
15:11:50 <andythenorth> I guess I need a patch πŸ˜›
15:11:56 <dP> aren't there production change events for gs?
15:12:06 <andythenorth> maybe
15:12:35 <andythenorth> theres EventIndustryClose and EventIndustryOpen
15:13:55 <andythenorth> I guess I could store the result of GSIndustry.GetLastMonthProduction()
15:14:08 <andythenorth> and divide it by the number of production cycles in the calendar month (8 or 9)
15:14:23 <andythenorth> and detect if supplies are delivered or not to trigger FIRS boost behaviour
15:14:33 <andythenorth> then divide by the supply effect
15:15:03 <andythenorth> I'll need GSNewGRF.ReadParameter() to be added though
15:15:20 <andythenorth> because the FIRS production boost amount is player parameter setting
15:15:40 <andythenorth> it's almost like this system was never designed eh πŸ™‚
15:16:39 <dP> more like it was designed to not allow gs access to any grf details
15:23:30 <DorpsGek> [OpenTTD/OpenTTD] glx22 commented on pull request #11071: Fix: Ensure settings page label is orange.
15:30:59 <peter1138> Yeah
15:31:18 <DorpsGek> [OpenTTD/OpenTTD] PeterN commented on pull request #11071: Fix: Ensure settings page label is orange.
15:32:16 <DorpsGek> [OpenTTD/OpenTTD] PeterN dismissed a review for pull request #11071: Fix: Ensure settings page label is orange.
15:32:18 <peter1138> 982GB USB memory stick for Β£20, that'll be fake πŸ˜„
15:32:19 <DorpsGek> [OpenTTD/OpenTTD] PeterN updated pull request #11071: Fix: Ensure settings page label is orange.
15:35:08 <peter1138> Hmm
15:37:43 <peter1138> Just arabic (which is the language I was looking at lol)
15:38:21 <DorpsGek> [OpenTTD/OpenTTD] PeterN updated pull request #11071: Fix: Ensure settings page label is orange.
15:47:19 *** m3henry has joined #openttd
15:51:20 <DorpsGek> [OpenTTD/OpenTTD] glx22 merged pull request #11072: Cleanup 6298b96: Left-over function declaration
15:55:04 <DorpsGek> [OpenTTD/OpenTTD] glx22 approved pull request #11071: Fix: Ensure settings page label is orange.
15:56:22 <m3henry> I'm not sure what rocket emoji means in this context. xD
16:04:40 <andythenorth> What if a GS and grf could declare compatibilty? Possibly by being packaged together?
16:06:13 <brickblock19280> It doesn't seem like a bad idea if you ask me but forcing it both ways is imo bad
16:10:19 <FLHerne> AI/GS having to explicitly save seems like a bad feature
16:10:58 <FLHerne> if the game saved the entire interpreter state, a majority of AIs wouldn't have serious save/load bugs :p
16:22:06 <DorpsGek> [OpenTTD/OpenTTD] PeterN merged pull request #11071: Fix: Ensure settings page label is orange.
16:24:34 *** Flygon has quit IRC (Quit: A toaster's basically a soldering iron designed to toast bread)
16:33:43 *** Smedles has quit IRC (Quit: - Chat comfortably. Anywhere.)
16:34:03 *** Smedles has joined #openttd
16:35:53 <andythenorth> I don’t know if my case is unique, but FIRS GS assembles state based on specific details of the grf which are included in the GS at compile time. That will break savegame state constantly, which is why I am endeavouring to keep the GS stateless so far
16:36:16 <andythenorth> The GS has access to all the industry type static props
16:37:49 <jfs> FLHerne: I guess there are three things to this. first is that we'd need to use a fully arena'ed allocator for the script engine, or otherwise have a way to walk, serialize, and re-establish the full state.
16:37:49 <jfs> second is that it would basically prevent an AI or GS from having their code upgraded during a game.
16:37:49 <jfs> third is that I'm not even sure if it would be possible to do in a way that's portable between different builds of the game, even less if they run on different CPU architectures or OS. and what if the scripting engine is upgraded.
16:40:30 <andythenorth> Hmm
16:41:11 <andythenorth> If we ever replace GS can we give it a firebug / web dev type object traverser?
16:41:47 <andythenorth> Testing GS is crap, because some effects require a lot of savegame prep / play
16:42:45 <andythenorth> Whereas being able to manipulate the value of e.g cargo monitors or other objects would be much more direct
16:53:56 <peter1138> Hmm, wonder what happened to #11070's CI job
17:11:04 *** gelignite has joined #openttd
17:15:04 <andythenorth> MIA
17:30:00 <DorpsGek> [OpenTTD/OpenTTD] PeterN updated pull request #11070: Fix: Setting tree lines drawn incorrectly for RTL languages.
17:30:26 <peter1138> Well, that'll restart it.
17:49:55 <peter1138>
17:49:55 <peter1138> I think my CPU would be a bit hotter than 44Β°C if that was the case...
18:13:38 *** gelignite has quit IRC (Quit: Stay safe!)
18:14:29 *** supermop_Home has joined #openttd
18:14:32 <supermop_Home> yo
18:15:15 *** gelignite has joined #openttd
18:22:35 <DorpsGek> [OpenTTD/OpenTTD] rubidium42 approved pull request #11070: Fix: Setting tree lines drawn incorrectly for RTL languages.
18:29:24 <andythenorth> what shall I do now?
18:29:25 <andythenorth> GS
18:29:28 <andythenorth> HEQS 2?
18:31:28 <andythenorth> this isn't backported to any releases yet, yes/no?
18:31:32 <andythenorth> changelogs say no
18:32:58 <DorpsGek> [OpenTTD/OpenTTD] PeterN merged pull request #11070: Fix: Setting tree lines drawn incorrectly for RTL languages.
18:41:29 <DorpsGek> [OpenTTD/OpenTTD] eints-sync[bot] pushed 1 commits to master
18:41:30 <DorpsGek> - Update: Translations from eints (by translators)
18:44:55 <andythenorth>
18:44:55 <andythenorth> I know the grid makes it impossible...but wouldn't diagonal roads be nice πŸ˜›
18:45:28 <supermop_Home> sure
18:45:34 <supermop_Home> or any number of things
18:46:25 <supermop_Home> I guess I should start using discord?
18:46:35 <andythenorth> you should
18:46:56 <supermop_Home> i use it for a music venue in Bushwick already
18:47:14 <supermop_Home> they have a membership thing and you can get setlist times
18:47:46 <supermop_Home> so you don't go all the way out there to find out that doors are at 8 but the person you wanted to see isn't on til 2
18:49:13 <supermop_Home> i guess i better draw some stuff
18:50:36 <andythenorth> ^ those are your roads?
18:51:16 *** tony_pixel has joined #openttd
18:51:16 <tony_pixel> One of the coolest roads
18:55:09 <andythenorth> ok FIRS
18:55:21 <andythenorth> random chance of permanent production increase for primaries
18:55:23 <andythenorth> if the town is happy
18:55:52 <andythenorth> original game does double production?
19:07:50 <jfs> original is only double/half production changes yes
19:08:50 <andythenorth> might be a bit aggressive πŸ˜„
19:10:49 <peter1138> Hmm, it's starting to cool off, except around my PC...
19:11:24 <peter1138> Can I abuse the font "os_handle" for freetype?
19:14:07 <michi_cc[d]> Depends in what "abuse" means I guess. But if freetype is basically the OS font library, why not?
19:20:01 *** supermop_Home has quit IRC (Ping timeout: 480 seconds)
19:24:49 <peter1138> Basically so I can pass an integer along with the filename.
19:40:05 <andythenorth>
19:40:05 <andythenorth> such production increases πŸ˜›
19:40:13 <andythenorth> 656% of the starting value
19:41:07 <andythenorth> now I need a side channel to abuse, so GS can trigger this increase πŸ˜›
19:42:27 <andythenorth> guess I just use these
19:42:40 <andythenorth> INDCTL_NO_PRODUCTION_INCREASE can be inverted
19:44:22 <andythenorth> is that the same as IND_FLAG_NO_PRODUCTION_INCREASE?
19:44:50 <andythenorth> hmm no, looks like industry var `gs_disallows_prod_increase`
19:44:52 <andythenorth> piss
19:45:02 <andythenorth> can't set that from grf can I πŸ˜›
19:45:04 <andythenorth> FFS
19:45:29 <DorpsGek> [OpenTTD/OpenTTD] PeterN opened pull request #11073: Codechange: Pass face index as font os_handle for FreeType fonts.
19:45:46 <peter1138> Hmm, that may be a fix .
19:46:14 <andythenorth> why can't grf set `gs_disallows_prod_increase`?
19:50:19 <andythenorth> tidy mind problem
19:50:39 <andythenorth> would be neater if I could default IND_FLAG_NO_PRODUCTION_INCREASE to True from the grf
19:50:48 <andythenorth> then set it False from the GS
19:51:04 <andythenorth> the whole thing is so stupid πŸ˜„
19:51:24 <andythenorth> I found the original argument between me and pm in about 2013 that caused all this
19:51:27 <andythenorth> it was stupid then too
19:52:22 <andythenorth> I guess I could just do a PR for extending the flags
19:52:28 <andythenorth> and for nml, and the docs
19:52:29 <belajalilija> I’ll ask here since Andy is here
19:52:32 <andythenorth> and the regressions
19:52:32 <belajalilija> Did you make
19:52:42 <belajalilija> Hang on let me google
19:52:47 <andythenorth> I hate GS
19:52:48 *** sittinbythefire has joined #openttd
19:52:48 <sittinbythefire> andythenorth: Those are my sprites from the old American Road Replacement Set, but there's about a dozen roadtype sets that have used those sprites in some form or another since, so depends which roadset you are using πŸ™‚
19:53:02 <andythenorth> they are a classic ^
19:53:26 <andythenorth> well we've deliberately nerfed grf because GS
19:53:40 <andythenorth> since 2013
19:53:53 <belajalilija>
19:53:59 <belajalilija> Did you make these wagons Andy
19:54:07 *** gelignite has quit IRC (Quit: Stay safe!)
19:54:27 <m3henry> With his bare fists!
19:54:43 <belajalilija> You know what i meant :kek:
19:55:37 <andythenorth> I should use more emojis, the GS situation is lolz, probably doesn't sound like that
19:55:39 <andythenorth> πŸ˜›
19:56:56 <andythenorth>
19:56:56 <andythenorth> belajalilija:
19:57:46 <andythenorth> maybe there's a side channel I can abuse to tell the grf the GS exists
19:58:13 <andythenorth> I could build a unique industry on the map, only buildable by GS, and count how many instances there are
19:59:17 <andythenorth> hmm could GS set a parameter in the grf?
20:00:17 <andythenorth> and load order is grf first
20:00:28 <andythenorth> global game variable grf can check?
20:00:56 <belajalilija> andythenorth:
20:01:38 <andythenorth> ++
20:01:43 <belajalilija> I need to check how iron horse scales against SBB stuff
20:01:51 <andythenorth> trying to avoid anything that also needs an nml patch 😦
20:01:54 <andythenorth> and docs update
20:02:46 <andythenorth> it's the docs πŸ™‚
20:02:52 <andythenorth> still haven't documented procedures πŸ˜›
20:03:15 <andythenorth> only 3 years later
20:05:10 <andythenorth> quite a lot of 'missing'
20:05:15 <andythenorth> and for 13.x
20:06:05 <andythenorth> I dislike writing the docs because I barely understand nml πŸ˜„
20:06:15 <andythenorth> trying to explain it to others breaks my brain
20:06:49 <andythenorth> every day is a school day etc πŸ™‚
20:06:58 <pickpacket> Who created nml?
20:07:46 <andythenorth> multiple contribs
20:07:56 <andythenorth> there were about 5 in the original group
20:07:57 <pickpacket> andythenorth: I’ve barely started learning nml. I don’t understand any of the python code FIRS or IRON HORSE are written in
20:08:08 <andythenorth> the python is much easier than the nml
20:08:23 <andythenorth> the templating is pretty horrible though
20:09:42 <andythenorth> "Bridges without speed limit" πŸ™‚ missed that
20:10:11 <andythenorth> 11 items need documented
20:10:30 <andythenorth> but 2 of them are the name callbac
20:10:46 <andythenorth> and a few are trivial
20:12:26 <dP> andythenorth: if you do it in nml :p
20:14:45 <pickpacket> I think my compile might be done soon… it’s in the linking step and my computer is almost entirely frozen
20:15:05 <pickpacket> time for bed anyway. Will have tonlool at it tomorrow afternoon
20:15:16 <pickpacket> *to look
20:15:31 <andythenorth> 64k action 2 IDs?
20:15:37 <andythenorth> not sure I hit the limit recently
20:15:49 <andythenorth> oh Horse is quite close 210
20:16:36 <andythenorth> I haven't particularly hit the action 2 ID limit
20:17:13 <andythenorth> there's a lot of horrific templating in my grfs to optimise compile time
20:17:21 <andythenorth> nml is so slow, relative to the python templater
20:17:35 <belajalilija> What’s action 2?
20:17:35 <andythenorth> so I drop lots of switches depending on conditions
20:19:36 * andythenorth finding all the GS <-> grf proposals :P
20:19:38 <andythenorth>
20:19:44 <andythenorth> ^ this is the one that recurs most
20:20:14 <andythenorth> there are a couple of ideas about allowing multiple GS per game also, which is believed to make it easier to then bundle GS with a grf
20:20:25 <andythenorth> and there was the proposal to sack GS in favour of a new format
20:21:38 <andythenorth> well we do now have a JSON lib πŸ˜›
20:21:45 <andythenorth> I'm not convinced either
20:24:16 <andythenorth> if I was a better programmer I'd just give GS read/write to industry registers
20:24:28 <andythenorth> but then again...a better programmer probably wouldn't πŸ˜›
20:24:37 <andythenorth> shared memory, where's the problem?
20:26:39 <andythenorth> I am sure no-one would approve the PR
20:26:43 <andythenorth> but it really would just work
20:26:51 <andythenorth> all of these problems would disappear
20:29:07 <FLHerne> jfs: valid points
20:31:12 <FLHerne> re. (3) I'm certain it's *possible* by serializing everything, but would certainly make life more awkward when embedding what's pretty much a 3rd-party interpreter
20:34:14 <FLHerne> seems to be a reasonably comprehensive implementation of it for Lua
20:36:13 <jfs> I think being difficult/impossible to upgrade the AI or GS code during a game would be a major killer for both players and developers, when it won't be possible to deploy bugfixes and improvements to a game in progress
20:38:52 <jfs> I'll admit to not having enough interest to be able to devote time to actually write a meaningful GS or AI myself, but I'm still convinced that the best way to handle saving is to design your entire script around using a working storage format for your internal state that can be passed directly to the save and load functions, so you won't need to convert anything on save, and on load will only
20:38:52 <jfs> need to convert if you have done a significant version upgrade of the script that needs to change the data format
20:39:06 <FLHerne> most of the fatal bugs I've encountered playing with AIs have been save/load failures ;-)
20:39:40 <FLHerne> your suggested method makes sense to me
20:39:47 <andythenorth> they need to be stateless πŸ˜›
20:39:56 <FLHerne> but having to understand that raises the bar to entry for a working AI
20:40:12 <andythenorth> goals and cargo monitors are already saved in the savegame by OpenTTD, afaik
20:40:14 <jfs> of course, if you use a strategy like that for your script, you would probably also need to write everything as small resumable chunks of state machine that keep returning to the same main processing loop and "do the next action"
20:41:50 <jfs> and yeah I realize that these ideas require a lot of programming experience to implement
20:48:47 <andythenorth> much safer
21:00:40 <sittinbythefire> andythenorth: Docs are fun πŸ™‚ 3 years ago I decided to do the NRT docs because I was tired of there just being an incomplete draft page with inconsistent specs, but after I got it 98% done I was told I was doing it wrong and just making things worse, so I quit and left it as it was. 3 years later there are still question marks I had left in the documentation where I wasn't 100% sure on the spec and
21:00:40 <sittinbythefire> was going to ask for confirmation. No one's ever updated it πŸ˜›
21:06:47 <andythenorth> I have regrets
21:07:01 <jfs> ways to "do documentation wrong": be incomplete, be confusing, be factually wrong
21:07:01 <jfs> as long as you don't make those mistakes (and "incomplete" can only be judged after stopping work on the documentation) then you'd be hard pressed to say it's being "done wrong"
21:07:46 <jfs> another could be to be putting documentation in the wrong place where it won't be found, which would just be a shame
21:09:07 <sittinbythefire> Haha I think anyone who's touched NRT seems to have some regrets πŸ˜›
21:10:12 <DorpsGek> [OpenTTD/OpenTTD] PeterN commented on pull request #11073: Codechange: Pass face index as font os_handle for FreeType fonts.
21:22:58 <sittinbythefire> jfs: In my case the argument was made that I'm not knowledgeable enough to write the docs, which to be fair isn't entirely inaccurate, but most of it was already out there somewhere just spread out across multiple places. I did my due diligence to cross-reference everything as thoroughly as possible and attempted to clarify things when I found a conflict, but I stopped before I was 100% done. I
21:22:58 <sittinbythefire> just find it mildly funny considering how many people have been making roadtype NewGRFs over the years and some of the specs they've been relying on are actually asking a question rather than stating a fact, and apparently nobody has found an issue with it.
21:28:33 <jfs> yeah that's not a good argument
21:33:29 *** HerzogDeXtEr has quit IRC (Read error: Connection reset by peer)
21:37:37 <dP>
21:37:37 <dP> hm...
21:38:01 <andythenorth> you win
21:40:09 <dP> wasn't me
21:40:20 <dP> so I lose
21:40:25 <dP> now need to debug xD
21:40:37 <dP> unless it's some known issue in 13.3
21:46:16 <peter1138> And #11070
21:46:47 <peter1138> Which may or may not crash
21:47:22 <peter1138> Drawing a line out of bounds shouldn't do anything, but something gets confused.
21:50:21 <peter1138> Possibly #11022
21:52:42 <andythenorth> gs grf then
21:52:57 <andythenorth> so the gs can make arbitrary calls to the grf?
21:53:06 <andythenorth> what happens if it does that in async mode? πŸ˜›
21:53:51 <peter1138> grf callbacks aren't commands
21:58:09 <andythenorth> oh just a var
21:58:16 <andythenorth> silly andythenorth
21:59:35 <andythenorth> so we'd prevent that callback writing to grf permanent storage?
21:59:42 <andythenorth> otherwise it changes game state
22:06:25 <LordAro> dP: what is the issue in that screenshot?
22:07:00 <dP> money overflow?
22:08:21 <LordAro> oh, you mean it underflowed back to positive?
22:08:32 <LordAro> i thought we fixed that recently
22:09:32 <LordAro> in fact, it was me, 2 years ago:
22:09:50 *** Wolf01 has quit IRC (Quit: Once again the world is quick to bury me.)
22:10:03 <dP> well, idk what it did but someone just completed all the goals on money server instantly and that's what I found in the save
22:10:27 <LordAro> curious
22:13:43 *** keoz has quit IRC (Ping timeout: 480 seconds)
22:20:28 *** nielsm has quit IRC (Ping timeout: 480 seconds)
22:29:30 <andythenorth> how do I set flags?
22:30:19 <andythenorth> `GSIndustry.SetControlFlags(industry, enum(INDCTL_NO_PRODUCTION_INCREASE=false));` isn't valid
22:31:40 <andythenorth> `GSIndustry.SetControlFlags(industry, {INDCTL_NO_PRODUCTION_INCREASE=false});` doesn't work either
22:32:09 <andythenorth> GS only has doxygen, so it's a guessing game
22:32:47 <andythenorth> so is this a bitmask or something similar?
22:34:44 <andythenorth> thanks
22:34:51 <andythenorth> also oops, look at the time πŸ˜›
22:34:56 * andythenorth must to sleep