IRC logs for #openttd on OFTC at 2022-06-11
            
00:07:17 *** HerzogDeXtEr has quit IRC (Read error: Connection reset by peer)
00:08:07 <DorpsGek> [OpenTTD/nml] JGRennison opened pull request #255: Fix #253: Use non-ternary varaction2 sequence for abs() builtin function https://github.com/OpenTTD/nml/pull/255
00:32:00 <DorpsGek> [OpenTTD/nml] JGRennison updated pull request #255: Fix #253: Use non-ternary varaction2 sequence for abs() builtin function https://github.com/OpenTTD/nml/pull/255
01:09:27 <DorpsGek> [OpenTTD/nml] glx22 approved pull request #255: Fix #253: Use non-ternary varaction2 sequence for abs() builtin function https://github.com/OpenTTD/nml/pull/255#pullrequestreview-1003407279
02:22:26 *** Wormnest has quit IRC (Quit: Leaving)
02:38:09 *** glx has quit IRC ()
02:44:50 *** godbed has joined #openttd
02:48:11 *** debdog has quit IRC (Ping timeout: 480 seconds)
03:28:07 *** godbed is now known as debdog
04:09:35 *** wallabra_ has joined #openttd
04:14:16 *** wallabra has quit IRC (Ping timeout: 480 seconds)
04:52:58 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
04:53:03 *** WormnestAndroid has joined #openttd
06:11:22 *** andythenorth has joined #openttd
06:12:29 *** HerzogDeXtEr has joined #openttd
06:28:44 <andythenorth> meh duplicate realsprites are not a trivial fix
06:29:20 <andythenorth> 50% of them are valid, as they're used for randomised sprite reversal
06:29:49 <andythenorth> there are about 2000 that are *not* required
06:30:02 <andythenorth> but only because the vehicle is 8/8
06:30:37 <andythenorth> the same template loop also generates realsprites for < 8/8 length, and these don't produce duplicates as the offsets vary
06:32:51 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
06:33:38 *** WormnestAndroid has joined #openttd
06:37:05 <andythenorth> so 89981 duplicates
06:37:30 <andythenorth> I can reduce that to about 87000 by reconstructing the generator
06:37:59 <andythenorth> but the remaining 87000 are needed because OpenTTD can't reverse vehicles with length < 8/8 :D
06:38:20 <andythenorth> 'needed'
06:41:41 *** WormnestAndroid has quit IRC (Ping timeout: 480 seconds)
06:41:56 *** WormnestAndroid has joined #openttd
06:42:58 *** nielsm has joined #openttd
07:23:15 *** Flygon has joined #openttd
07:23:36 *** wallabra_ has quit IRC ()
07:53:14 <andythenorth> 90KB of duplicates removed so far :P
07:53:55 <andythenorth> 0.26% saving
08:08:45 <andythenorth> hmm
08:09:09 <andythenorth> there are 2396 instances of "8bpp 180 10 8 29 -3 -16 normal"
08:10:03 <andythenorth> realsprites that point to globally defined offsets, at OpenTTD runtime? :P
08:10:24 <andythenorth> removing them only reduces the nfo by a tiny amount, probably TMWFTLB
08:23:47 <TrueBrain> "on the hunt for" I see? :)
08:29:56 <TrueBrain> 54 public repos for TrueGRF ... that is -a lot- more than I anticipated ...
08:33:57 <andythenorth> demand is real :)
08:34:02 <andythenorth> 54 new FIRS forks? :P
08:34:13 <TrueBrain> not even
08:56:38 *** Samu has joined #openttd
09:23:17 *** Smedles has quit IRC (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
09:23:25 *** Smedles has joined #openttd
09:30:42 *** andythenorth has quit IRC (Quit: andythenorth)
09:34:29 *** frosch123 has joined #openttd
09:55:27 <TrueBrain> https://github.com/TrueBrain/codespaces-websocket <- maybe I am somewhat annoyed by GitHub Codespaces :P
10:02:12 *** WormnestAndroid has quit IRC (Remote host closed the connection)
10:02:55 <frosch123> elaborate bug reports :)
10:03:03 <Eddi|zuHause> i'm not convinced i understood much of what you were saying
10:04:49 <TrueBrain> tldr; GitHub forgot that websockets exist :P
10:05:12 <frosch123> will you post it to HN? :p
10:05:18 <TrueBrain> haha :D
10:20:49 <Eddi|zuHause> TrueBrain: well, that statement implies that the reader knows what a websocket actually does
10:20:57 <TrueBrain> it surely does
10:21:25 *** ufo-piloot has joined #openttd
10:21:36 <Eddi|zuHause> which is circular, because the existance of the bug means that the supposed reader maybe doesn't know that
10:22:00 <TrueBrain> you make it sound like I should care :P
10:22:57 <Eddi|zuHause> my mathematical education taught me that you need to carefully define every word you use :)
10:23:20 <TrueBrain> that only results in terrible life experience, honestly ;)
10:24:11 *** Etua has joined #openttd
10:24:30 <Eddi|zuHause> and the experience that two people argue about completely different things because they happen to use the same word for it, is how much less terrible? :p
10:25:02 *** Etua has quit IRC ()
10:25:27 <dwfreed> I mean, the target audience of the repo is more GH engineers, who, if they don't know what a websocket is, shouldn't be engineers
10:25:52 <Eddi|zuHause> dwfreed: well, that never stopped anyone from being an engineer either :p
10:26:05 <dwfreed> "your shit's broke, here's the most basic reproducer: <link to this repo>"
10:26:26 <TrueBrain> dwfreed: do realise he is just arguing for the shake of arguing, which can only be resolved by doing the same :P
10:26:55 <frosch123> what are the ingredients to an arguing shake?
10:27:02 <dwfreed> rofl
10:27:07 <frosch123> is it water or alcohol based?
10:27:09 <TrueBrain> shake .. ugh ..
10:27:12 <TrueBrain> dunno what happened there :P
10:27:17 <dwfreed> frosch123: alcohol
10:27:24 <dwfreed> always alcohol
10:27:45 <Eddi|zuHause> most "alcohol" they're trying to sell you is mostly water.
10:28:00 * dwfreed hands Eddi|zuHause everclear 190
10:30:13 <TrueBrain> while creating this repository, I found another bug in GitHub Codespaces ..... but 1 report per time is enough :P
10:32:25 <Eddi|zuHause> i can totally see "this newbie has posted 30 bugs in a day, let's just ignore him and go about our normal life" a common reaction :p
10:34:16 <Eddi|zuHause> i definitely had days where the forum triggered that kind of reaction in me. (and usually it was the correct reaction)
10:34:50 <frosch123> what if the reaction is "wow, is this the author of TrueWiki and TrueGRF?"
10:35:40 <frosch123> Eddi|zuHause: https://skyline.github.com/TrueBrain <- just imagine
10:35:54 <frosch123> (i still wonder what intern implemented that)
10:38:06 <Eddi|zuHause> anyone remember this "OpenTTD 500+" guy that opened like 10 topics and wanted an own subforum?
11:47:48 *** glx has joined #openttd
11:47:48 *** ChanServ sets mode: +v glx
12:09:11 *** MaverickFischer has quit IRC (Remote host closed the connection)
12:11:38 *** MaverickFischer has joined #openttd
13:24:16 <Samu> interesting find regarding ship reverse code
13:24:55 <Samu> if the ship wants to head into the same tile
13:25:25 <Samu> since there is no initial tile cost, it ends up picking whatever comes first
13:25:47 <Samu> and sometimes that means, reverse
13:26:25 <Samu> with a start tile cost, it can assign that pick, the reverse pick, with a higher cost
13:26:34 <Samu> than non reversing
13:46:44 <Samu> the reverse penalty is too strong, ship prefers to make that detour, compared to master with no costs on starting tile https://i.imgur.com/Ssio0G9.png
13:49:38 <Samu> i need to make videos sometimes
13:49:57 <Samu> but no idea where to upload them as quick as in imgur
13:51:41 *** WormnestAndroid has joined #openttd
13:55:43 *** gelignite has joined #openttd
14:13:38 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
14:19:55 *** wallabra has joined #openttd
14:28:08 *** WormnestAndroid has joined #openttd
14:49:39 <Samu> wow rail pf costs are very dense
14:49:57 <Samu> there's even an entire separate file dedicated for it
15:01:57 *** wallabra has quit IRC (Quit: ZNC 1.8.2 - https://znc.in)
15:03:34 *** wallabra has joined #openttd
15:14:50 <Samu> too dense for my liking
15:15:00 <Samu> not gonna add a start tile cost for yapf rail
15:19:40 <Samu> just discovered the existance of stSlopeCost
15:20:11 <Samu> it could be used for both rail and road
15:20:30 <Samu> but apparently roads have their own slopecost
15:30:29 *** andythenorth has joined #openttd
16:11:30 *** Wormnest has joined #openttd
16:19:29 *** Samu has quit IRC (Remote host closed the connection)
16:20:16 *** Samu has joined #openttd
16:35:08 *** gnu_jj_ has joined #openttd
16:37:49 *** Smedles has quit IRC (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
16:37:56 *** Smedles has joined #openttd
16:38:43 *** gnu_jj has quit IRC (Ping timeout: 480 seconds)
16:47:12 <andythenorth> if I generate 3 grfs from 1 repo
16:47:21 <andythenorth> how do I do version numbers? :o
16:48:09 <frosch123> why should they be different?
16:58:20 <andythenorth> releases where nothing changed?
16:58:27 * andythenorth should read how mono-repo projects do it
16:59:39 <andythenorth> https://fusebit.io/blog/discontinuous-semver/?utm_source=www.google.com&utm_medium=referral&utm_campaign=none
16:59:49 <andythenorth> "First, end-users rarely understand the levels of risk involved in different versions beyond “it’s broken, so I need to upgrade”, which allows us to push process in that direction."
17:00:43 <frosch123> use the date-based versions
17:01:17 <frosch123> https://bananas.openttd.org/package/newgrf/4b415253 <- like that
17:03:06 <andythenorth> "semver is dead"? :P
17:04:49 <frosch123> semver is only useful if you maintain release branches
17:04:53 <frosch123> did you ever do that?
17:06:05 <frosch123> if you change something significant, you would likely rather change the name: fish -> squid -> sam
17:07:07 <frosch123> openttd is now also (year-2010).(hotfix)
17:07:10 <andythenorth> I sometimes bump the minor version with breaking changes :P
17:07:15 <andythenorth> but not the major :P
17:08:19 <andythenorth> ok so change the version number format, and apply same version to all components
17:08:27 <frosch123> if you make breaking changes, do they break all 3 sets?
17:08:34 <andythenorth> 'who knows'
17:08:40 <andythenorth> 'assume yes'
17:08:59 *** Samu has quit IRC (Remote host closed the connection)
17:09:21 *** Samu has joined #openttd
17:09:26 <andythenorth> I forsee downsides to this approach, but eh
17:09:39 <andythenorth> into all lives a little rain must fail
17:09:41 <andythenorth> fall * :P
17:11:07 <andythenorth> next question: changelog :P
17:11:09 <andythenorth> 1 or 3? :P
17:13:05 <frosch123> one, bug each line tagged with [set1], [set2], [all of them]
17:15:06 <andythenorth> nobody reads changelogs anyway?
17:16:39 <andythenorth> tags would allow parsing and splitting if needed eh
17:16:54 <andythenorth> alternatively, 3 separate changelogs, but the option to combine them :P
17:17:23 <frosch123> yeah, factorio's in-game changelog can be fitlered by tags
17:17:39 <frosch123> so you can show/hide bug-fixes/features/modding-api-stuff
17:18:05 <frosch123> also, let me guess the next question: names? :p
17:18:18 <andythenorth> yup :P
17:18:21 <andythenorth> but BBL
17:22:26 *** andythenorth has quit IRC (Quit: andythenorth)
17:28:58 *** Samu has quit IRC (Ping timeout: 480 seconds)
18:11:20 *** Compu has joined #openttd
18:12:28 *** Compu has quit IRC ()
18:44:56 <DorpsGek> [OpenTTD/OpenTTD] DorpsGek pushed 1 commits to master https://github.com/OpenTTD/OpenTTD/commit/814c61a321fc2073452c027b0d1b1372021d4869
18:44:57 <DorpsGek> - Update: Translations from eints (by translators)
20:03:25 *** Flygon has quit IRC (Quit: A toaster's basically a soldering iron designed to toast bread)
20:13:06 <DorpsGek> [OpenTTD/OpenTTD] LC-Zorg commented on issue #9317: The city, while expanding, blocks waterways, which may block the movement of ships https://github.com/OpenTTD/OpenTTD/issues/9317
20:31:11 <DorpsGek> [OpenTTD/OpenTTD] LC-Zorg commented on issue #9916: [Bug]: Trains become lost and randomly reverse direction despite there being no signal https://github.com/OpenTTD/OpenTTD/issues/9916
20:33:54 *** andythenorth has joined #openttd
20:46:46 <andythenorth> so what shall I call Iron Horse grfs?
20:47:35 <andythenorth> the rosters are something like Pony (UK-ish), Mustang (North American ish), Jura (France, Italy, Switzerland, Austria, Germany ish)
20:48:09 <andythenorth> currently Bananas name is "Iron Horse 2 (Trains)"
20:51:16 <frosch123> Iron Horse 2A, 2B, 2C :p
20:51:34 <frosch123> Iron Horse, Steel Pony, Bronce Cow
20:52:07 <andythenorth> yeah Copper Cow was suggested previously
20:52:20 <andythenorth> Steel Moose
20:52:27 <andythenorth> Nickel Mustang
20:52:56 <andythenorth> this is better than
20:53:10 <nielsm> Zinc Chicken?
20:53:24 <andythenorth> "Iron Horse 2 (Trains) - Jura Edition (Alps and Surrounding Countries)"
20:53:26 <andythenorth> or
20:53:37 <frosch123> "jura" sounds like dinos
20:53:39 <andythenorth> "Iron Horse 2 (Trains) - Pony Edition (UK and Ireland, also Corsica"
20:53:57 <andythenorth> Jurassic Park: the final franchise
20:54:08 <andythenorth> Jura horse is also Freiberger
20:54:19 <andythenorth> but I wouldn't mind varying from horses
20:55:02 <frosch123> https://en.wikipedia.org/wiki/Equidae#Classification
20:55:13 <andythenorth> I always thought Mouflon would be be better for Alpine Europe
20:56:18 <andythenorth> or Ibex
20:56:22 <frosch123> yeah, ibex
20:56:45 <frosch123> lime ibex
20:57:48 <andythenorth> Ibex are quite interesting https://en.wikipedia.org/wiki/Alpine_ibex#/media/File:Stambecchi_sulla_diga_del_Cingino.jpg
20:57:56 <andythenorth> aka Steinbock
20:58:37 <frosch123> that's the german name
21:16:37 <andythenorth> Titanium Ibex
21:16:44 <andythenorth> I quite like Lime Ibex, but Lime isn't a metal :P
21:19:56 <andythenorth> Tungsten Ibex?
21:19:58 <Eddi|zuHause> well, if you ask an astronomer... :p
21:20:31 <andythenorth> Chrome Ibex?
21:20:34 <andythenorth> Nickel Ibex?
21:21:34 <Eddi|zuHause> Eisenbock :p
21:22:34 <andythenorth> isn't that beer?
21:23:53 <andythenorth> Mercury Ibex?
21:24:14 <andythenorth> Steel Mouflon
21:26:07 <frosch123> leadibex, bleibock
21:30:05 <frosch123> hmm, apparently alps have copper, silver, scheelite (tungsten)
21:30:36 <frosch123> https://en.wikipedia.org/wiki/Scheelite <- do you have a livery like that?
21:40:59 <Eddi|zuHause> Steelbex
21:41:31 <Eddi|zuHause> doesn't sound much less of a beer
21:42:08 <Eddi|zuHause> i(ron)bex
21:42:43 *** flonxxd[m] has joined #openttd
21:42:49 <andythenorth> Wolfram Ibex? :P
21:42:57 <andythenorth> Wolfram Mouflon
21:44:13 <frosch123> i don't think wolfs are successful hunting ibex'
21:49:24 <andythenorth> wow dP's suggestion to comment out tile compression is interesting https://github.com/OpenTTD/nml/blob/master/nml/spriteencoder.py#L374
21:49:45 <andythenorth> cuts a Horse nml->grf time from 31s to 17s
21:50:01 <andythenorth> increases grf size from 36MB to 43MB
21:51:19 <frosch123> huh, since when is the sprite compression relevant for horse?
21:53:27 <frosch123> cropping and compression is cached, and could be made multi-threaded if necessary
21:53:47 <frosch123> usually you complain about parsing :)
21:54:57 <andythenorth> dP wondered if this would be faster than the nml -> nfo -> grf route
21:57:18 <andythenorth> hmm nml -> nfo -> grf is about 17s
21:57:47 <andythenorth> but smaller grf file size, which is better
21:58:27 <_dp_> you can also try nmlc with -u
21:58:39 <_dp_> also you can always debug without compression and release with
22:00:04 <_dp_> btw afict -u doesn't disable tile compression which is probably a bug
22:00:22 <andythenorth> frosch123 is / could the actions tree be cached, and skip parsing if the nml input file is unchanged?
22:00:44 <andythenorth> for the frequent case where only a png is changed
22:00:53 <frosch123> andythenorth: could nml be ported to use grfpy as backend?
22:01:14 <andythenorth> dunno :)
22:01:20 <frosch123> same :)
22:01:21 <andythenorth> but there's a Horse -> grfpy port
22:01:49 <frosch123> hmm, was it grfpy or pygrf?
22:02:15 <_dp_> https://github.com/citymania-org/grf-py
22:02:21 <_dp_> unless you're talking about smth else
22:02:38 <frosch123> yeah, that one
22:02:42 <_dp_> and porting nml to it doesn't make much sense imo
22:02:57 <andythenorth> hmm the speed up with removal of compression is non-existent
22:03:03 <andythenorth> it's just the cache kicking in
22:03:15 <andythenorth> I don't normally have nmlcache for Horse, so I forgot to clear it
22:03:24 <frosch123> _dp_: i just used it to answer andy's question :)
22:03:39 <frosch123> something that can be done in theory, but not really
22:04:14 <frosch123> andythenorth: that sounds about right :) compression is meant to be irrelevant in nml
22:04:26 <_dp_> I was thinking about caching actions in grf-py but it's hard and pointless
22:04:32 <_dp_> they compile instantly anyway
22:04:38 <frosch123> i had a patch to add a threadpool for compression, but it was not worth the complication for marginal speedup
22:05:00 <andythenorth> threadpool parsing :P
22:05:09 <frosch123> it only made sense for 32bpp compression in yeti
22:05:43 <andythenorth> might be at the limit for squeezing out performance then :)
22:05:57 <andythenorth> sharding the grf by roster looks quite sensible
22:08:19 <_dp_> andythenorth, do you re-generate all sprite files every compile?
22:08:37 <_dp_> I'm starting to suspect that's why nml can't cache them and everything is slow
22:08:48 <andythenorth> yes, but they aren't actually replaced unless they've changed
22:09:02 <andythenorth> otherwise nml can't cache them
22:09:04 <frosch123> _dp_: usually the problem is that andy generates nml with python. the generated nml is like 100MB, which takes ages to parse
22:09:15 <andythenorth> yup
22:09:29 <andythenorth> Parsing ... 4.6 s
22:09:29 <andythenorth> Preprocessing ... 5.9 s
22:09:39 <_dp_> well, that doesn't change with nfo output
22:09:51 <frosch123> the core problem of andy grf is that the abstraction is at a wrong position in the compile
22:10:04 <frosch123> generating a huge intermediate format is just wrong
22:10:08 <andythenorth> yup
22:10:27 <andythenorth> I am not a good enough programmer to import nml modules directly and write grf from them
22:11:17 <_dp_> as I understand nml isn't very convenient to use directly
22:11:23 <_dp_> that's what grf-py is made for
22:11:46 <_dp_> also it keep everything in python so no intermediates and higher potential for optimization
22:11:56 <andythenorth> so I waste about 12s of 26s writing out an intermediate, then parsing it back in to an AST etc
22:12:10 <andythenorth> so about 45% of compile time is pointless
22:14:05 <andythenorth> 'get a better programmer' :P
22:14:07 <andythenorth> I should fire myself
22:16:01 *** nielsm has quit IRC (Ping timeout: 480 seconds)
22:16:28 <_dp_> Actually, your switchesplosion probably contributes to that parsing time quite a lot
22:17:19 <_dp_> can be optimized quite a lot if instead of A->B->C switches you do A*B*C
22:17:51 <andythenorth> I replaced a lot of per-vehicle switch chains with procedure calls and that cut huge amount of time
22:17:55 <frosch123> "switchesplosion" is a good term for it :)
22:17:59 <andythenorth> and size
22:18:07 <andythenorth> 'have generator, not afraid to use it'
22:18:14 <andythenorth> 3 layers of nested loop, what could go wrong?
22:20:02 <andythenorth> hmm must to sleep
22:20:04 <_dp_> last time 1 checked horse had like 1Mb of switches
22:20:10 <_dp_> in binary
22:20:19 <andythenorth> is that all?
22:20:37 <andythenorth> grf is 36MB, the rest is realsprites?
22:20:42 <_dp_> yep
22:20:48 <andythenorth> the raw pngs are only 9MB
22:20:54 <andythenorth> so I assumed the rest was actions
22:21:07 <_dp_> grf aint png
22:21:15 <_dp_> it sucks at compression
22:21:18 <andythenorth> would it be smaller if it was :P
22:22:31 <_dp_> also most of those 36mb are duplicates :p
22:23:57 <andythenorth> maybe I should disable flipping vehicles in depot?
22:25:19 <andythenorth> most of the dupes just relate to reversed vehicles
22:25:24 <_dp_> oh, 1.5Mb switches in recent IH xD
22:25:24 <frosch123> container format 2 can technically store duplicated sprites only once
22:25:31 <frosch123> but noone bothered to implement that in nml
22:25:32 <_dp_> also: Found 123789(66%) duplicate sprites, 20477557(64%) bytes total
22:27:07 <_dp_> yep, simply optimizing storage in grf can cut those 20mb
22:27:20 <_dp_> probably not compile time though
22:28:34 <andythenorth> I found about 87000 duplicates that relate to reversed vehicles
22:32:27 <andythenorth> if OpenTTD could actually reverse trains that aren't 8/8, a lot of this would be cut :P
22:34:51 <_dp_> I still don't understand what's the difference between flipped and reversed :p
22:35:14 <andythenorth> flipped is specifically player controlled
22:35:23 <glx> I once tried to remove duplicated action2, but it was very slow for a very little size reduction
22:35:25 <andythenorth> reversed can be selected randomly
22:35:36 <_dp_> but the end result is the same, no?
22:35:39 <_dp_> or do you abuse flipping for liveries?
22:35:56 <andythenorth> flipping is used for normal flipping of asymmetric trains
22:36:01 <andythenorth> and abused for liveries
22:36:13 <andythenorth> some trains are also built reversed, randomly
22:36:40 <andythenorth> the method I use for correcting the offsets is pretty crude :P
22:36:49 <andythenorth> spritesheet_bounding_boxes_asymmetric_reversed = list(
22:36:49 <andythenorth> spritesheet_bounding_boxes_asymmetric_unreversed[4:8]
22:36:49 <andythenorth> )
22:36:49 <andythenorth> spritesheet_bounding_boxes_asymmetric_reversed.extend(
22:36:49 <andythenorth> spritesheet_bounding_boxes_asymmetric_unreversed[0:4]
22:36:50 <andythenorth> )
22:37:09 <andythenorth> I am curious why OpenTTD can't actually do it, I assume there's a reason
22:37:48 *** Wormnest has quit IRC (Quit: Leaving)
22:40:37 <_dp_> but when it's not abused you can just do (flipped xor reversed)?
22:45:03 <andythenorth> possibly :)
22:45:13 <andythenorth> too late for logic
22:45:18 * andythenorth -> sleep time
22:45:25 <_dp_> lol
22:45:26 *** andythenorth has quit IRC (Quit: andythenorth)
22:45:47 *** frosch123 has quit IRC (Quit: be yourself, except: if you have the opportunity to be a unicorn, then be a unicorn)
22:50:45 *** m1cr0man has quit IRC (Quit: G'luck)
22:51:38 *** WormnestAndroid has quit IRC (Ping timeout: 480 seconds)
22:51:53 *** m1cr0man has joined #openttd
22:52:01 *** WormnestAndroid has joined #openttd
22:54:04 *** m1cr0man has quit IRC ()
22:54:26 *** m1cr0man has joined #openttd
23:14:34 *** gelignite has quit IRC (Quit: Stay safe!)