Times are UTC Toggle Colours
00:41:01 *** HerzogDeXtEr has quit IRC 01:04:34 *** Arveen2 has joined #openttd 01:08:29 *** Arveen has quit IRC 01:24:28 *** Wormnest has quit IRC 01:36:23 *** Flygon has joined #openttd 02:22:55 *** glx has quit IRC 03:01:45 *** Samu has quit IRC 03:09:21 <DorpsGek_II> [OpenTTD/OpenTTD] nikolas updated pull request #7086: Change #6173: Update SDL driver to use SDL 2.0 https://git.io/fhamZ 03:22:09 *** Gustavo6046 has quit IRC 04:33:06 *** tycoondemon has quit IRC 04:44:18 *** tokai has joined #openttd 04:44:18 *** ChanServ sets mode: +v tokai 04:51:19 *** tokai|noir has quit IRC 05:07:08 *** heffer has joined #openttd 05:08:59 *** heffer_ has quit IRC 05:38:51 *** nielsm has joined #openttd 05:42:17 <peter1138> hi 05:43:18 <nielsm> morning 05:44:03 <peter1138> Fixed those issues in show coverage. Not particularly happy with how I did one of them :/ 06:17:58 <nielsm> is there really not a "ctrl state changed" flag anywhere? 06:34:22 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh approved pull request #7446: Feature: Show coverage area for existing stations and towns https://git.io/fjsZ7 06:35:45 <nielsm> the station window is geting really crowded with buttons tho 06:36:09 <nielsm> would really like to either make icons for some of them, or combine them in some way 06:36:23 <nielsm> (or maybe move some to another row/position) 06:45:43 <peter1138> I couldn't see one for state changed, no. 06:46:10 <peter1138> Ooh, approved. I'd like to fix up those fixes first though :-) 06:49:33 <DorpsGek_II> [OpenTTD/OpenTTD] PeterN dismissed a review for pull request #7446: Feature: Show coverage area for existing stations and towns https://git.io/fjsZ7 06:49:34 <DorpsGek_II> [OpenTTD/OpenTTD] PeterN updated pull request #7446: Feature: Show coverage area for existing stations and towns https://git.io/fjksj 06:52:12 <peter1138> Heh, the full CZTR set is massive... wow. 06:52:20 <peter1138> 32bpp 4x does that, I guess :) 07:00:09 <nielsm> https://0x0.st/zbTy.png 07:00:16 <nielsm> how about moving things around like that? 07:01:27 <nielsm> move the "query" buttons to a separate line, keep the "action" buttons at the bottom 07:01:38 <nielsm> and make accepts/ratings a more clear toggle/"tab" 07:07:31 <peter1138> Hmm. 07:08:24 <peter1138> Good idea. Separate PR? 07:08:32 <nielsm> yea 07:11:19 <peter1138> Well, only change in the 7446 update is I squashed the fixes and added a comment about ctrl state. 07:11:23 <peter1138> Off to work now. 07:12:50 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh approved pull request #7446: Feature: Show coverage area for existing stations and towns https://git.io/fjsn4 07:14:04 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh merged pull request #7446: Feature: Show coverage area for existing stations and towns https://git.io/fjksj 07:21:33 <DorpsGek_II> [OpenTTD/OpenTTD] PeterN commented on pull request #7498: Change: Consider any cargo with passenger town effect for passenger-type subsidies. https://git.io/fjsn2 07:33:05 *** Wolf01 has joined #openttd 07:33:22 <Wolf01> Moin 07:46:31 <V453000> yo 07:48:40 <Wolf01> V, if a server is lagging in F, and it's not the internet connection for sure, is that because the server itself can't keep up? 07:51:12 <V453000> lagging as in an update takes longer than 16.6 ms? 07:51:39 <Wolf01> Skipping frames continuously, trying to drop players 07:51:57 <V453000> well honestly idk, but try to see how long an update takes 07:52:12 <V453000> but if it's certainly not connection then I guess it's cpu load :) 07:52:45 <Wolf01> Maybe trying with a headless linux could help instead of windows dedicated 07:53:26 <Wolf01> But the server maintainer needs to find out a 64bit machine for linux :P 08:00:35 <nielsm> okay let's try this, maybe the changed UI works in first attempt??? 08:01:41 <nielsm> I think it does :o 08:02:11 <nielsm> https://0x0.st/zbTn.jpg 08:02:36 <nielsm> "close airport" and "coverage" buttons look a little tight, I want to add some padding to them 08:05:33 <nielsm> https://0x0.st/zbT5.png that's not quite right 08:06:35 *** gelignite has joined #openttd 08:07:37 <nielsm> https://0x0.st/zbTR.png 08:07:39 <nielsm> good 08:11:43 <peter1138> Yeah, they were not equal width before cos not enough space. 08:11:50 <Wolf01> The OTTD UI always bothered me, too many buttons in different places, the bottom 3 buttons should be in a dropdown in the title bar, maybe coverage too, as they aren't related to UI change 08:12:49 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh opened pull request #7540: Change: New layout for the Station view window https://git.io/fjsc0 08:13:02 <nielsm> agree there are too many buttons 08:13:17 <nielsm> this is a low effort attempt to make it less bed 08:13:19 <nielsm> bad 08:15:15 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh commented on pull request #7540: Change: New layout for the Station view window https://git.io/fjscz 08:16:29 <peter1138> I... didn't update widgets did I? o_O 08:16:47 <DorpsGek_II> [OpenTTD/OpenTTD] PeterN commented on pull request #7540: Change: New layout for the Station view window https://git.io/fjscw 08:17:11 <peter1138> I've never actually seen a GS tutorial anyway.. 09:14:21 *** Talmir has joined #openttd 09:14:30 <Talmir> Hello :) 09:16:08 <Talmir> I have a weird question. I am a software developer and like to tinker with various game related topics in my free time. I am trying to find out how the game generates its towns, and wish to make a rought version of it for a personal project of mine (a indirect town sim where you make abstract decisions that help the town grow or shrink depending) 09:16:45 <nielsm> look in town_cmd.cpp 09:17:15 <Talmir> I have been trying to find information on this on the wiki but came up empty. From reading the source code I think (probably wrong) that the game generates a random distribution of points, and then used kdtrees to form the road system, am I on the right track? 09:17:27 <Talmir> Ahh, didnt see the reply. I will look there, thanks 09:17:37 <nielsm> nope, that's wrong :) 09:17:54 <nielsm> there's a couple different rulesets for how roads are constructed 09:18:35 <nielsm> but basically (as far as I know) towns are constructed in steps, each step starts at the town centre and random walks the road network and at some point decides this is where to expand at 09:18:42 <nielsm> and then builds a new house or new road at that point 09:19:24 <Talmir> I see :) Is a new "walker" spawned every x tiles (intersections) to make the grid like layout? 09:19:52 <nielsm> the grid layouts are just dumb modulo checks based on distance to town centre 09:20:02 <Talmir> I felt it looked too orderly for it to be a random walker function :) 09:20:17 <Talmir> I see, I may have been overthinking this then :D 09:20:37 <nielsm> in the scenario editor, try building some towns with each of the four layouts 09:20:42 <nielsm> original, improved, 2x2, 3x3 09:22:45 <Talmir> Cool :) Thanks for the help. This feels pretty obvious to me right now. I was way overthinking this. 09:44:58 <peter1138> Basically it's more adhoc than you imagined :) 09:45:55 *** andythenorth has joined #openttd 09:48:46 <andythenorth> yo 09:49:27 <Talmir> yeah, but in a good way :) I was afraid that it'd be way over my head. This I can work with. I imagine there are many more rules under the hood here that help make it look good, but its a good starting point for me , thanks guys :D 09:50:36 <andythenorth> moar and better towns? :P 09:50:37 <andythenorth> 'probably fine' 09:52:00 <Talmir> yeah :) I was asking how the towns were generated, had some crazy imaginings in my head of random distributions and kdtree partitionings, happy I asked here before going off on my own and spending the next month making anything usable for my side project 09:52:22 <nielsm> thing is, towns grow slowly and the world changes around them 09:52:28 <nielsm> so they can't have any kind of grand plan 09:52:59 <nielsm> and if initial generation and later expansion used different rules you'd have essentially double work on code maintenance 09:53:21 <andythenorth> I was thinking of lolz things 09:53:33 <andythenorth> like random rulesets for 'try to go uphill' 09:53:36 <andythenorth> or 'follow water' 09:54:59 <andythenorth> these HEQS trams are 3 tiles or 5 tiles long :P 09:55:01 <andythenorth> is that insane? 09:55:28 <nielsm> cargo trams? 09:56:01 <nielsm> 5 tiles is too much imo, 3 is okay, but more than 3 is not good 09:57:04 <nielsm> I had some thoughts about modular airports: https://0x0.st/zbAq.txt 09:59:59 <nielsm> slight update https://0x0.st/zbAb.txt 10:00:29 <Talmir> I would looove a modular airport :) The current ones feel a bit clunky. You place a small one at the start and later when it is time to upgrade it it is a pain in the ass to do 10:01:31 <andythenorth> I don't mind airport yak shaving 10:01:47 <andythenorth> but OpenTTD is mostly about tinkering to fix congested routes 10:01:55 <andythenorth> so modular airports adds a whole new level of that 10:03:30 <peter1138> andythenorth, station coverage display got merged! 10:03:39 <andythenorth> :D 10:03:48 <andythenorth> and NRT? o_O 10:03:52 <peter1138> Not yet :/ 10:03:55 <andythenorth> oofies 10:04:05 <nielsm> NRT is delaytown 10:04:14 <LordAro> nielsm: dare i suggest that such thoughts should be put on the wiki somewhere? 10:04:15 <andythenorth> it's the most well-crafted addition in years :P 10:04:17 <peter1138> NRT is pretty ready except people keep finding bugs ;p 10:04:25 <andythenorth> do it MHL style 10:04:27 <andythenorth> ship all the bugs 10:04:32 <andythenorth> then we have to live with them 10:04:34 <peter1138> Yes, probably 10:05:03 <peter1138> nielsm, with your patch is it possible to have neither accepts nor ratings visible? 10:05:08 <peter1138> Erm, with 7540 10:05:23 <peter1138> Ah, no. 10:08:31 <nielsm> https://wiki.openttd.org/User:Nielsmh/Modular_airports 10:08:50 <peter1138> :D 10:09:10 <nielsm> somehow I was actually logged in on the wiki 10:09:17 <peter1138> It'll get lost, but less lost than a textfile elsewhere. 10:09:20 <nielsm> so I didn't have to faf with that for 15 minutes first 10:09:46 <peter1138> https://wiki.openttd.org/Peter1138/Roadtypes < lol 10:10:03 <peter1138> NewGardens. What? 10:11:35 <peter1138> Oh wow, I didn't forget to export widgets. 10:21:18 <peter1138> Modular airports would definitely be nice. 10:21:27 <peter1138> Ability to convert existing airports to such also. 10:21:43 <peter1138> (And then the ability to remove those stupid 'new' layouts) 10:21:56 <andythenorth> can you keep the ones 10:22:02 <andythenorth> where the big one has less throughput 10:22:06 <andythenorth> than the small one 10:22:16 <andythenorth> distant-join airports? :P 10:22:21 <peter1138> Nah, if all airports are modular, then you can remove the definitions and move them to newgrf. 10:22:44 <peter1138> You can still build those layouts from modular parts, or add a newgrf that specifies such a layout. 10:23:00 <peter1138> Or something like that. 10:24:06 <peter1138> Hmm, squirrel-based map generator? 10:28:05 <nielsm> structured the modular airports page somewhat more 10:28:17 <peter1138> Strnage idea, "infinite" map by making it wrap around... 10:28:32 <nielsm> why is the margin above headings so huge in the wiki 10:28:51 <peter1138> Another strange idea, sparse maps (Minecraft style) generated as needed :p 10:29:15 <peter1138> nielsm, dunno 10:29:23 <nielsm> actually padding-top is the big value it seems 10:29:38 <andythenorth> fog of war! 10:29:43 <andythenorth> srsly 10:29:51 <andythenorth> you only get to see 25% of map at start 10:30:22 <peter1138> Not a horrible idea. 10:30:35 <peter1138> Want to build a long route? Build some smaller routes first. 10:30:38 <nielsm> "you have discovered a new town! they demand tribute to allow your railroad to continue. pay £25M, or wait 3 days (real time)" 10:30:47 <peter1138> Random starting position... 10:30:53 <peter1138> Sounds like a gamescript. 10:31:04 <nielsm> railroad tycoon style "can only connect to existing network" 10:31:07 <peter1138> Triremes lost at sea! 10:31:08 <nielsm> ugh 10:31:36 <peter1138> Hmm, that head-to-head mode that was once implemented. 10:31:44 <nielsm> andythenorth: this is where Regions come in again :) 10:44:30 *** Talmir has quit IRC 10:47:08 <nielsm> https://wiki.openttd.org/User:Nielsmh/Zones 10:47:15 <nielsm> may as well put that there too 10:47:25 <andythenorth> yair 11:03:47 *** gelignite has quit IRC 11:13:12 <peter1138> Hmm, might investigate that deep-sea patch again at some point 11:15:30 <Wolf01> Hmmm, shower, then brain standby until this night 11:17:48 * _dp_ just made a python thingy that connects to a cb server and claims town 11:17:52 <_dp_> now to remember why... 11:20:06 <peter1138> Heh 11:23:13 <_dp_> wanted some automation to catch server crash 11:23:21 <_dp_> but already catched it myself 11:23:39 <_dp_> though it seemed fun so I did the thing anyway xD 11:53:42 <planetmaker> nielsm, terrain types: (grass, rough, rocky) * (temperate / arctic / tropical), desert, swamp. Water can be a terrain type, but just could be an uint which defines a height below which there is water 11:54:23 <planetmaker> With water I'd actually prefer the same / similar implementation as with snowline height. 11:55:00 <planetmaker> as it would allow interesting game play with rising or receeding water levels 11:57:07 <planetmaker> additional terrain types maybe: semi-arid, tundra, glacier, rock outcrop 11:57:40 <andythenorth> labels! 11:57:54 <andythenorth> TUND, ARID, NUKE 11:57:57 <planetmaker> TTT. terrain translation table :P 11:58:05 <andythenorth> the last one is post-apocalypse 11:58:09 <planetmaker> :) 12:02:19 <Xaroth> It would be interesting to have height levels below the water level 12:02:24 <Xaroth> or.. depth levels 12:02:54 <Xaroth> makes tunneling under water more interesting as well. 12:04:23 <planetmaker> exactly. And would allow terraforming under water. And bridge building interesting, too, taking into account maximum bridge heights 12:04:37 <Xaroth> mhm 12:04:50 <planetmaker> terraforming = changing heights 12:04:53 <nielsm> are we talking RCT terrain again? 12:04:55 <Xaroth> maybe required depth levels for boats 12:05:02 <nielsm> or dwarf fortress? 12:05:04 <planetmaker> *that* is then possible, too 12:05:17 <planetmaker> nielsm, no, why? 12:05:23 <Xaroth> heavy barges requiring deeper water than hovercrafts 12:05:23 <nielsm> :) 12:05:45 <andythenorth> we should do things that are more lolz 12:05:51 <andythenorth> also obvs. some water should ice up 12:05:54 <andythenorth> or be marsh 12:06:06 <Xaroth> or different water levels 12:06:09 <Xaroth> i.e. mountain lakes 12:06:09 <planetmaker> hovercraft, coastal = depth 1 (as now). big ones depth 2 or so :) 12:06:22 <nielsm> inland lakes with depth would be nice yes 12:06:25 <andythenorth> also some vehicles that modify terrain :P 12:06:28 <andythenorth> much lolz 12:06:34 <planetmaker> different water levels like lakes would continue to work like rivers: shallow at same level as land 12:06:35 <Xaroth> connect them to the sea and they drain out. 12:06:46 <Xaroth> creating floods 12:06:47 <planetmaker> he :P 12:06:48 <Xaroth> and mayhem 12:06:48 <andythenorth> snowplough, dredger, etc :P 12:06:50 <Xaroth> and death 12:07:00 <planetmaker> sea-ice would be interesting :) 12:07:14 <Xaroth> until summer arrives 12:07:49 <planetmaker> and then the sea level rises and floods everything 12:07:52 <planetmaker> everysink :P 12:13:33 <_dp_> df terrain sounds fun 12:13:45 <_dp_> dig too deep and horde of demons destroys your network xD 12:14:37 <andythenorth> lava 12:14:43 <andythenorth> salt dome 12:15:52 <planetmaker> chalk mountain 12:16:23 <andythenorth> cheese lake 12:16:44 <planetmaker> don't mix that with the grease lake 12:17:48 <planetmaker> but... lava or cliff could be possible terrain types, too 12:22:00 <Wolf01> <_dp_> dig too deep and horde of demons destroys your network xD <- mines release the balrogs 12:25:09 <peter1138> Well there was a patch for deep water already. 12:25:21 <peter1138> I think it was pre-MHL though, so less feasible. 12:26:43 * _dp_ is seriously thinking of doing tower defense GS for openttd 12:28:41 <_dp_> making a horde of monsters would be a bit tricky... 12:29:21 <peter1138> Can GS spawn disasters? 12:29:43 <nielsm> afaik no 12:30:07 <nielsm> a giant swarm of UFOs arriving at once 12:30:09 <nielsm> ugh 12:30:09 <planetmaker> I don't think so ... a short coming :) We need NewGRF disasters or so... or GS disasters 12:30:12 <peter1138> GS-controlled disasters should be a thing. 12:30:56 <nielsm> need GS industry control... 12:31:07 <planetmaker> GS industry control is somewhat feasible 12:31:18 <peter1138> Earthquakes? 12:31:26 <peter1138> SimCity terrority. 12:31:32 <planetmaker> delete entities. Easily done with GS 12:31:44 <peter1138> Some things, yes. 12:32:01 <peter1138> But spawning existing disasters / disaster vehicles should be possible. 12:32:10 <nielsm> make a way for GS to supply sprites and create new disaster vehicles, and plot a path for them 12:32:24 <nielsm> and then receive events when the vehicle reaches points on the path 12:32:34 <peter1138> With new bits like specific target for UFOs. 12:32:56 <peter1138> GS to supply sprites? hmmmmmm sounds like a NewGRF thing to me. 12:33:53 <nielsm> well if you want a custom disaster vehicle with GS programming the GS has to knw about it 12:34:10 <nielsm> then have GS that can depend on a newgrf so that newgrf is always loaded when the GS is 12:34:44 <peter1138> Well, at least some way for a GS to reference a specific type of disaster vehicle, if it's present. 12:35:10 <peter1138> Then the GS can bug the end user to enable the NewGRF, rather than adding new "force this newgrf to load" functionality 12:36:04 <peter1138> But that's getting a bit ahead :p 12:36:20 <peter1138> Also without vision :p 12:36:28 <peter1138> Maybe we need whatever it was TB was working on. 12:36:34 <peter1138> @seen truebrain 12:36:35 <DorpsGek> peter1138: truebrain was last seen in #openttd 1 week, 3 days, 18 hours, 35 minutes, and 29 seconds ago: <TrueBrain> if that is the excuse, I am done 12:44:20 *** andythenorth has quit IRC 12:46:03 *** andythenorth has joined #openttd 13:04:02 <peter1138> nielsm, /home/petern/Projects/OpenTTD/src/misc_gui.cpp:1006:15: error: 'DrawWidget' overrides a member function but is not marked 'override' 13:05:12 <peter1138> nielsm, and possibly others. 13:55:26 *** andythenorth has quit IRC 14:02:24 <nielsm> oh 14:02:59 <nielsm> wait I didn't touch that? 14:03:03 <nielsm> or, where? 14:05:52 *** sla_ro|master has joined #openttd 14:27:16 *** Samu has joined #openttd 14:32:57 *** Flygon has quit IRC 14:41:47 *** Gumle2 has joined #openttd 14:43:58 *** andythenorth has joined #openttd 14:56:36 *** tycoondemon has joined #openttd 14:57:48 *** Alberth has joined #openttd 14:57:48 *** ChanServ sets mode: +o Alberth 14:57:59 <Wolf01> o/ 15:00:28 *** erratic has joined #openttd 15:01:11 <supermop_work> yo 15:03:25 <peter1138> nielsm, master. 15:03:32 <peter1138> nielsm, does not build at the moment. 15:04:17 *** Wormnest has joined #openttd 15:04:47 <peter1138> https://github.com/OpenTTD/OpenTTD/commit/dcb2571888f58aee2e5aa3512f36707a3adde472 < that commit. 15:05:43 <peter1138> nielsm, CI checks if it can rebase, but doesn't check if that rebase will compile. 15:07:02 *** Progman has joined #openttd 15:07:03 <nielsm> :s 15:07:21 <peter1138> Actually I think it's just github checking if it can rebase. 15:08:08 <nielsm> doesn't the CI also rebase before compiling? or was that only the old? 15:09:20 <rubenwardy> You don't hash passwords? 15:09:48 <rubenwardy> or just on the server side 15:09:55 <Samu> do be do 15:10:10 <rubenwardy> you should look into the Secure Remote Password protocol 15:10:20 <rubenwardy> Minetest uses it to protect players from servers 15:10:29 <nielsm> it's salted md5, easy to bruteforce if you want to 15:10:30 <rubenwardy> because most people are stupid, and reuse passwords 15:10:46 <rubenwardy> although, tbh "company password" sounds more like a key than a password 15:10:58 <nielsm> salt is the map seed 15:11:09 <nielsm> yes it's not supposed to be secure 15:11:11 <rubenwardy> like, "enter the key to join the server" on older games 15:11:15 <nielsm> it's to protect against griefing 15:11:24 <nielsm> not to protect your personal information 15:11:26 <rubenwardy> SRP is good for user account passwords 15:19:04 *** Gumle2 has quit IRC 15:29:11 <LordAro> nielsm: yeah, it did that briefly with the jenkins CI, but everything got split up for Azure 15:29:32 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh opened pull request #7541: Fix dcb2571: Missing override keywords https://git.io/fjsEO 15:33:12 <Samu> Round 8 got infrastructure maintenance costs enabled, coupled with very easy costs, terrain, settings 15:33:33 <Samu> it's funny to see well established AIs bankrupting 15:33:39 <Samu> AdmiralAI 15:33:39 <andythenorth> is it cat? 15:34:13 <LordAro> andythenorth: no, dog 15:34:38 <Samu> I wonder how my AI will perform 15:34:46 <Samu> it has no code handling that setting 15:35:01 <Samu> i think it will bankrupt too, if it starts spamming helicopters 15:35:08 <Samu> has a tendency to mass helis 15:37:17 <DorpsGek_II> [OpenTTD/OpenTTD] PeterN approved pull request #7541: Fix dcb2571: Missing override keywords https://git.io/fjsEW 15:44:14 <Samu> wow, my AI did well 15:44:17 <Samu> im impressed 15:44:29 <Samu> maybe terrain being very flat was a big help 15:45:03 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh merged pull request #7541: Fix dcb2571: Missing override keywords https://git.io/fjsEO 15:45:10 <Samu> at the very end it started making helicopters, and i was starting to see company value not increasing... became stale 15:45:28 <Samu> but still i was impressed, i was honestly expecting bankrupt 15:46:07 *** erratic has quit IRC 15:48:06 <Samu> https://imgur.com/svnrVbp 15:50:37 <peter1138> ^ https://i.imgur.com/svnrVbp.png 15:50:56 <peter1138> Which mad person plays with toyland? o_O 15:53:37 <Samu> it's round 8 15:53:56 <Samu> every 4 rounds, starting from round 4, it's toyland 15:54:23 <Alberth> toyland has such nice industry chains 15:56:19 *** Gustavo6046 has joined #openttd 15:56:28 <DorpsGek_II> [OpenTTD/OpenTTD] stale[bot] commented on pull request #7418: Fix: Validate control-codes in NewGRF strings https://git.io/fjsEH 15:56:56 *** frosch123 has joined #openttd 16:04:15 <andythenorth> quak 16:09:20 <frosch123> moo 16:19:08 <Eddi|zuHause> peter1138: bonus points if you switch to original toyland instead of opengfx :p 16:19:53 <V453000> peter1138: hi :P 16:20:00 <V453000> been years tho 16:20:20 <juzza1> what industry set uses all these new cargo labels at https://newgrf-specs.tt-wiki.net/wiki/CargoTypes ("Kill Bill", "Hattori Hanzō's Katana" etc.) 16:20:51 <andythenorth> they're awesome 16:21:04 *** Gumle2 has joined #openttd 16:21:12 <Eddi|zuHause> i wish people would stop putting such stuff in there 16:21:48 <Eddi|zuHause> didn't someone want to split that table into basic/advanced/fantasy cargos? 16:22:53 <andythenorth> was it you? o_O 16:23:00 <andythenorth> it needs to be one table 16:23:04 <andythenorth> it only serves one purpose 16:23:07 <Eddi|zuHause> i fear it was me 16:23:13 <andythenorth> and that's to check the label isn't used already 16:23:23 <andythenorth> I guess I could use browser find for that though 16:23:25 <Eddi|zuHause> i think i gave up because editing a table like this was... not good 16:23:34 <Eddi|zuHause> like, inserting a new column 16:23:35 <andythenorth> the table is hateful to edit in wiki 16:23:39 <andythenorth> but it's wiki so eh :( 16:23:51 <andythenorth> "nobody needs to learn html" 16:24:02 <andythenorth> just all these stupid frigging non-html languages 16:24:05 <Eddi|zuHause> html wouldn't solve my problem 16:24:10 <andythenorth> pretending not to be markup, but they are 16:24:22 <andythenorth> wiki, md, rst, bbcode, redmine blah blah 16:24:33 <Eddi|zuHause> an excel import/export 16:24:46 <andythenorth> awk! 16:24:47 <andythenorth> sed! 16:24:48 <andythenorth> python! 16:24:54 <andythenorth> rust! 16:24:56 <andythenorth> ooo 16:24:58 <andythenorth> perl 16:25:00 <andythenorth> I win :) 16:26:04 <Alberth> didn't you miss xml? 16:26:32 <andythenorth> html is xml :P 16:26:33 <frosch123> juzza1: someone who ragequit 16:26:43 <andythenorth> another one? 16:26:50 <andythenorth> but doesn't everyone rage quit? 16:26:53 <frosch123> forum drama, not irc drama 16:27:07 <Samu> it's funny how Rondje manages to win 16:27:07 * andythenorth waits for TB to un-ragequit 16:27:19 <frosch123> ragejoin sound scary 16:27:22 <Samu> basically, towns grow and end up connected to each other 16:27:31 <Samu> so it starts building 16:27:48 <Samu> it only takes a really long time to happen 16:27:53 <andythenorth> I have definitely ragejoined stuff in my lifetime 16:28:08 <frosch123> sounds like politics 16:28:42 <andythenorth> I did actually ragejoin a political party a few years 16:28:43 <andythenorth> ago 16:28:46 <andythenorth> then I ragequit 16:31:44 <Alberth> so many new trains, I should play openttd again 16:33:31 *** HerzogDeXtEr has joined #openttd 16:38:11 <Samu> trAIns vs SnakeAI was real close, 100% vs 97% 16:38:22 <Wolf01> Bye, tomorrow. 16:38:23 <Samu> snakeAI did well with aircraft 16:38:26 *** Wolf01 has quit IRC 16:38:41 <Samu> bankrupted the first time though, but then restarted better 16:38:52 <Samu> but didn't win 16:43:16 <supermop_work> andythenorth: had to ragequit mensa 16:43:38 <Hazzard> I had a feature idea, a "go to depot and renew vehicle" order 16:43:43 <andythenorth> supermop_work: mega lolz 16:43:51 <andythenorth> Hazzard: what does it do? 16:44:48 <Hazzard> It would renew the vehicle, rebuying the engine so the age goes back to 0 16:44:58 <Hazzard> for getting high station ratings 16:45:00 <andythenorth> write a GS to do that 16:45:04 <andythenorth> oh wait 16:45:08 <andythenorth> "write a GS to do that" 16:45:11 <andythenorth> that's better 16:47:02 <Hazzard> Gamescripts need to be shared with all clients in multiplayer? 16:47:08 <Hazzard> (just want to make sure I understand) 16:53:14 <andythenorth> I was trolling sorry 16:55:14 <Hazzard> Lol 16:59:35 <Hazzard> Would a gamescript not work though? :P 17:00:34 <andythenorth> dunno 17:01:42 <Hazzard> seems like these GSes are mainly alternate game modes 17:25:57 *** Gumle2 has quit IRC 17:27:07 *** Gumle2 has joined #openttd 17:51:19 *** erratic has joined #openttd 18:03:19 <Eddi|zuHause> while i'm reordering this cargo table, do i just plain remove all cargos which do not mention a GRF they are contained in? 18:05:15 <andythenorth> dunnno 18:05:18 <andythenorth> hard to know 18:05:54 <Eddi|zuHause> we should have some hard rule that you can only include cargos if your industry set is in a usable state 18:06:13 <Eddi|zuHause> to have a handle against people who just add their ideas... 18:07:27 <andythenorth> you can be the guardian of that page :) 18:08:07 <Eddi|zuHause> that sounds like a horrible idea :p 18:12:11 <Eddi|zuHause> ok, i'll remove them for now... 18:15:43 <Eddi|zuHause> now, next i wanted to split the FIRS cargos in basic and advanced... do you have some table i could use for reference? 18:18:46 <andythenorth> release or push? 18:19:02 <Eddi|zuHause> yes 18:19:40 <V453000> checkmate 18:20:38 <Eddi|zuHause> V453000: any objections if i move YETI into the "fantasy/scifi" section? 18:20:44 <Eddi|zuHause> the cargo, i mean 18:21:02 <V453000> WAT 18:21:18 <V453000> why? :d 18:21:21 <Eddi|zuHause> https://newgrf-specs.tt-wiki.net/wiki/CargoTypes <-- i want to split up this table 18:21:40 <V453000> oof that's a lot bigger than I remember it 18:21:45 <Eddi|zuHause> yes 18:21:54 <V453000> how much of it is andy's fault 18:21:54 <Eddi|zuHause> it's become unwieldy 18:21:59 <Eddi|zuHause> some 18:22:21 <V453000> move yetis where ever you want :) I don't really care tbh 18:22:59 <Eddi|zuHause> V453000: i want to add a "fantasy/scifi setting" for things like toyland, mars, wasteland, etc. 18:23:24 <V453000> do :) 18:23:35 <V453000> /me is messing with articulated nonsense 18:23:48 <Eddi|zuHause> that sounds annoying :p 18:24:28 <V453000> the purpose is good 18:24:52 <V453000> worse part will be when I want to visually switch between 2x4 and 8 unit vehicles 18:25:00 <V453000> need to do a more wtf articulation :D 18:25:23 <Eddi|zuHause> V453000: like the HEQS trams? 18:25:41 *** chomwitt has joined #openttd 18:25:53 <V453000> I'm not sure what HEQS trams do 18:26:18 <Eddi|zuHause> V453000: they change length and hide some articulated parts 18:26:39 <V453000> oh 18:26:42 <V453000> wait you can change length? 18:26:44 <andythenorth> Eddi|zuHause: http://bundles.openttdcoop.org/firs/push/LATEST/docs/html/code_reference.html#cargos 18:26:46 <andythenorth> is push 18:26:58 <V453000> I thought you can't do that 18:27:11 <Eddi|zuHause> V453000: yeah, if you forbid refitting at stations, you can change length based on which refit 18:27:23 <Eddi|zuHause> V453000: you can't change the number of articulated parts 18:27:34 <V453000> I see 18:28:02 <V453000> I might just make a 5-part 8/8 instead without hax 18:28:19 <Eddi|zuHause> andythenorth: that table does not show the economies where the cargos are used? 18:28:27 <V453000> with length of units 1-2-2-2-1 I get 8 in total and centers in the middle, and in the 4/8 halves' centers 18:29:52 <V453000> I think I had that functional in one of my prototype newgrfs 18:29:59 <Eddi|zuHause> so you either show a sprite with x-x-A-x-x or x-B-x-B-x? 18:30:05 <V453000> yes 18:30:08 <andythenorth> Eddi|zuHause: click on the name 18:30:14 <andythenorth> it's an interwebs :) 18:30:28 <V453000> the only problem this causes is increased speed on curves, but in this case that shouldn't matter much 18:30:41 <Eddi|zuHause> andythenorth: grmbl 18:31:02 <V453000> I wanted to apply the same idea to all of NUTS wagons and merge all wagons into 1... but I can't do that unless I can fix the curve length speeds 18:31:02 <andythenorth> you can compile it yourself and modify the table :P 18:31:04 <Eddi|zuHause> andythenorth: i need to make a JOIN on those interwebz 18:31:06 <andythenorth> it's trivial 18:31:15 <andythenorth> I can't do it for you now 18:31:26 <andythenorth> in fact this is all outdated anyway 18:31:44 <V453000> andy's vehicle lengthening sounds interesting, I wonder if I could fix it that way 18:31:44 <andythenorth> I unfortunately moved FIRS to github 18:31:56 <andythenorth> so all docs publishing is lost 18:31:56 <Eddi|zuHause> doesn't matter, it's a wiki, it's meant to be outdated :p 18:32:06 <andythenorth> FIRS docs are outdated :P 18:32:13 <V453000> eh probably not, nvm 18:32:22 <Eddi|zuHause> V453000: fwiw, i don't think andy understands the lengthening :p 18:32:39 <andythenorth> I understand the nfo 18:32:52 <andythenorth> the specific rules were beyond my capability :P 18:33:09 <Eddi|zuHause> i wonder if i still have that file 18:33:24 <V453000> XD well the lengthening doesn't help my case as the curve lenght is mostly decided from number of units in some length if I understand that correctly 18:33:29 <V453000> but yeah whatever :) 18:33:44 <Eddi|zuHause> curve speed is a wtf 18:33:54 <V453000> yes 18:34:09 <Eddi|zuHause> it needs to be fixed separately, i never worried about it 18:34:47 *** patrickm[m] has joined #openttd 18:35:22 <andythenorth> Eddi|zuHause: you had ascii art :P 18:35:36 <Eddi|zuHause> i did 18:41:09 <Eddi|zuHause> but i don't find it 18:43:33 <Eddi|zuHause> other annoying thing, your table is sorted on name, not label :p 18:46:31 <andythenorth> it has javascript sort no? 18:46:35 <andythenorth> just hidden 18:46:41 <andythenorth> missing UI 18:47:00 <andythenorth> hmm 18:47:06 <andythenorth> I should not have moved FIRS to github 18:47:08 <andythenorth> it was a mistake 18:47:23 <Eddi|zuHause> talking about this "table" http://bundles.openttdcoop.org/firs/push/LATEST/docs/html/cargos.html#acid 18:48:33 <frosch123> andythenorth: now you can't blame hg anymore? 18:49:02 <andythenorth> Eddi|zuHause: yeah that table no sort :P 18:49:32 <andythenorth> also why do you need the economy? o_O 18:50:08 <andythenorth> hmm 18:50:16 <andythenorth> is there some way I could slave hg to github? 18:50:37 <andythenorth> so that I can pull changes into the hg repo? 18:51:01 <Eddi|zuHause> that sounds like you took a few wrong turns you need to back out of :p 18:51:18 <andythenorth> is this what AWS Lambdas are for? 18:51:47 <andythenorth> also 18:51:58 <andythenorth> does anyone remember when web publishing was easy? 18:52:07 <Eddi|zuHause> also, i can't find "Packaging" in the wiki table 18:52:11 <andythenorth> you just had an sftp server, and apache in front of it 18:52:21 <andythenorth> now all of that is impossible, because cloud 18:52:45 <andythenorth> Eddi|zuHause: MSNP 18:53:10 <Eddi|zuHause> ah, right 18:54:37 <andythenorth> wonder if I can serve FIRS docs from my home internet? 18:54:53 <andythenorth> I could buy a raspberry pi or something 18:57:12 <Eddi|zuHause> doesn't github have some builtin docs publishing? 18:57:53 <andythenorth> it has a very specific implementation of github pages 18:58:02 <andythenorth> which does one thing and one thing only 18:58:32 <andythenorth> and is oriented to publishing a single revision of a website 18:58:35 <Eddi|zuHause> remember when you could make websites with HTML? 18:58:38 <andythenorth> preferably compile with jekyll 18:58:55 <andythenorth> Everything Has Gone Wrong 19:00:02 <V453000> does any other cargo than GOOD use the "automatically-double-vehicle-capacity" nonsense? 19:00:11 <andythenorth> YETI! 19:00:13 <andythenorth> NOPE 19:01:04 <V453000> seriously that thing is weird 19:02:19 <Eddi|zuHause> andythenorth: sugar cane is not a thing anymore? 19:02:32 <frosch123> V453000: 2x goods, 2x mail, 4x pax 19:02:55 <andythenorth> Eddi|zuHause: not currently 19:02:58 <andythenorth> will return probably 19:02:59 <frosch123> V453000: 2x sweets 19:04:10 <V453000> I'm not getting x2 on mail 19:04:20 <V453000> didn't check out the rest 19:12:18 <Eddi|zuHause> V453000: that picture in the forums, looks like you didn't set the 32px flag correctly? 19:12:28 <frosch123> hmm, i may have to build a second rocket silo 19:12:35 <frosch123> but it would have so much downtime 19:15:33 <V453000> I didn't know that flag existed 19:15:50 <V453000> does the flag make it draw the same way as on horizontal diagonals? 19:16:33 <Eddi|zuHause> yes 19:16:38 <V453000> could try 19:16:41 <V453000> where do I put it? 19:16:57 <Eddi|zuHause> in properties somewhere? 19:17:04 <Eddi|zuHause> NML or NFO? 19:17:16 <V453000> NML of course 19:18:48 <andythenorth> is there a flag? 19:18:50 <andythenorth> :P 19:19:03 <V453000> tbh I'm a bit sceptical it will actually look better 19:19:09 <V453000> but lets see 19:19:21 <frosch123> V453000: "train_width_32_px=1;" somewhere at the top after the grf{} 19:19:34 <Eddi|zuHause> yeah, it's a grf-wide flag 19:20:28 <frosch123> V453000: https://github.com/frosch123/CaterpillarSnakeSlug/blob/master/css.pnml#L16 <- like that 19:20:35 <V453000> nice 19:21:29 <V453000> that's much easier than I expected :P 19:22:01 <andythenorth> oic 19:22:02 <andythenorth> train_width_32_px = 1; 19:22:04 *** Wormnest has quit IRC 19:22:06 <andythenorth> very horse already 19:22:46 <V453000> yeah I guess that looks more proper 19:23:36 <andythenorth> so how can I publish some static html + images etc to a public web address? 19:23:54 <andythenorth> needs to be in directory structure corresponding to commit revs 19:24:14 <planetmaker> <andythenorth> so all docs publishing is lost <-- why don't you publish the docs anymore on coop bundles server? 19:24:15 <andythenorth> build is in Azure Pipelines 19:24:32 <andythenorth> there's no way to? 19:24:48 <andythenorth> unless I have hg slaved to git? 19:24:48 <Eddi|zuHause> planetmaker: because apparently he's unable to unplug the old build process and plug the new repo location into it 19:24:51 <andythenorth> and have jenkins do it 19:25:01 <andythenorth> well it has to be done on AP no? 19:25:12 <andythenorth> but I don't really understand AP 19:25:18 <Eddi|zuHause> andythenorth: there's no reason why jenkis couldn't pull from github 19:25:48 <andythenorth> how? 19:26:08 <andythenorth> at work I'd just give jenkins the repo address 19:26:18 <andythenorth> but it's all configured to expect that already 19:26:57 <andythenorth> jenkins seems quite broken currently, I don't know how to fix it 19:26:58 <andythenorth> https://jenkins.openttdcoop.org/job/road-hog/1607/console 19:27:54 <planetmaker> that broken is your build script... it failed on some *** [generated/graphics] Error 1 19:28:01 <planetmaker> which is code you wrote 19:28:04 <V453000> =D apparently my side-views of maglev wagons are not drawn for width_32 :D 19:28:18 <planetmaker> it's ugly to have these zillions of profiling python lines there... but they're harmless 19:28:55 <andythenorth> so how do I fix it? 19:29:09 <planetmaker> hm, chameleon not found 19:29:14 <andythenorth> where are the images for the jenkins VMs kept? 19:29:21 <planetmaker> 00:06.798 ModuleNotFoundError: No module named 'chameleon' 19:29:23 <andythenorth> or are they configured with ansible or something? 19:29:37 <planetmaker> no. It's ugly hand-crafted cruft 19:30:30 <andythenorth> hmm 19:30:46 <andythenorth> the sort-of-plan was to move grfs to github and azure pipelines 19:30:50 <andythenorth> but then TB ragequit 19:31:20 <planetmaker> so, seems chameleon was not installed when python was upgrade 19:31:22 <planetmaker> d 19:31:36 <andythenorth> so should we switch plan, and make coop stuff more alive? 19:31:48 <andythenorth> or jump to 3rd party things nobody understands? 19:32:04 <frosch123> andythenorth: using hosted stuff works for standard stuff 19:32:17 <frosch123> it works fine for git repos and building c++ applications 19:32:18 <andythenorth> it's a bit scary that all of openttd build is now on AP 19:32:38 <frosch123> but i think building grf may be too much off the road 19:32:40 <planetmaker> the only way I really see make coop stuff more alive is to have a 2nd server where I can re-install all stuff from scratch. And when that's done, move the whole lot back to the current server (the current contract is nice as in cheap IPv4 addresses... and server is ok) 19:33:11 <andythenorth> frosch123: building grfs on AP was pretty quick, once I understood the horrible UI 19:33:23 <planetmaker> unfortunately it seems I fried my old PC... so I don't have it as the option I initially planned to use it :| 19:33:24 <andythenorth> it's also really slow, because it reinstalls all deps for ever build 19:33:35 <andythenorth> every * 19:33:56 <planetmaker> so... you build grfs on azure? 19:33:57 <frosch123> andythenorth: is it really? every grf would have to do that 19:34:16 <frosch123> you need packaged stuff, which will get harder with nml bundles and nrt and stuff 19:34:19 <andythenorth> well that is the problem 19:34:22 <andythenorth> https://github.com/andythenorth/firs/blob/azure-pipelines-setup/azure-pipelines.yml 19:34:38 <andythenorth> I got it working in about 2 days 19:34:47 <andythenorth> but not in a way that most authors would ever be able to do 19:34:56 <planetmaker> well. Now make it generic that g30rge can use it :) 19:34:59 <andythenorth> it requires a lot of understanding of github and AP 19:35:00 <V453000> :D 19:35:10 <andythenorth> apparently it can all be templated in GH 19:35:25 <andythenorth> but then I think TB over-committed, which only ends in maintainer overload + quit 19:35:49 <andythenorth> what's the least we could do, besides 'nothing'? 19:36:59 *** Wormnest has joined #openttd 19:40:27 <Eddi|zuHause> regexp of the day: "([^"]) 19:40:44 <andythenorth> planetmaker: so what is bundles? 19:40:50 <andythenorth> the implementation 19:41:06 <planetmaker> bundles? It's a disk with ssh access 19:41:19 <planetmaker> and a webserver attached to it 19:41:56 <planetmaker> though... on devzone it is mounted directly 19:42:10 <andythenorth> how does it handle creating the version dirs? 19:42:21 <planetmaker> it's done by jenkins 19:42:22 *** Alberth has left #openttd 19:42:57 <planetmaker> it's part of the compilation / deployment script each project brings. There's a default which works with hg 19:43:12 <planetmaker> which is used when no build script is provided 19:43:14 <Eddi|zuHause> {| class="wikitable <-- is that weird syntax, or just missing a "? 19:43:55 <planetmaker> https://github.com/OpenTTD/nml/blob/master/.devzone/build/jenkins_postbuild.sh 19:44:13 <frosch123> missing a " 19:44:19 <planetmaker> hm, no 19:44:25 <planetmaker> actually... not there. hm 19:45:33 <andythenorth> so how is nml getting built by jenkins? 19:47:56 <planetmaker> it is built by that script. I just wonder how the deployment on bundles works :P 19:48:07 <planetmaker> that script and the one without the 'post' in the name 19:50:09 <planetmaker> and... I press 'build' because of hooks or so 19:54:40 <andythenorth> so is jenkins just connfigure to poll GH for nml? 19:54:43 <andythenorth> configured * 19:57:13 *** gelignite has joined #openttd 20:00:04 *** glx has joined #openttd 20:00:04 *** ChanServ sets mode: +v glx 20:05:52 *** sla_ro|master has quit IRC 20:12:38 <nielsm> I maybe ought to look at some more of those reported kdtree bugs in detail... 20:15:19 <LordAro> mm 20:19:06 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh commented on issue #7530: Crash in kdtree.hpp when removing track in development version https://git.io/fjs2p 20:20:49 <planetmaker> andythenorth, basically yes 20:21:45 <Eddi|zuHause> how, if i add one column, i have to adjust colspan by 2? 20:25:17 <andythenorth> because everything is awful 20:25:34 <Eddi|zuHause> there must be a mistake somewhere, but i don't see it 20:28:10 <andythenorth> html should be generated 20:28:13 <andythenorth> from data 20:28:31 *** Wormnest has quit IRC 20:31:01 <Eddi|zuHause> i feel a bit uneasy to just change this page, instead of making some temporary review version... 20:34:05 <Eddi|zuHause> i think the orginal colspan is already wrong 20:36:07 <Eddi|zuHause> ah well... here we go 20:37:22 <DorpsGek_II> [OpenTTD/OpenTTD] nielsmh commented on issue #7481: kdtree.hpp crash when Oil Rig is removed https://git.io/fjsaL 20:37:30 <Eddi|zuHause> there are probably a few questionable decisions buried in there: https://newgrf-specs.tt-wiki.net/wiki/CargoTypes 20:38:24 <LordAro> nielsm: i had to run the game for a long time (>300 years) until the crash occurred 20:38:29 <andythenorth> nice purple 20:38:32 <Eddi|zuHause> also, i seem to have missed the alloy steel and stuff 20:38:50 <Eddi|zuHause> might be a bit too strong purble 20:38:53 <Eddi|zuHause> purple 20:39:00 <frosch123> Eddi|zuHause: your section titles make no sense 20:39:09 <frosch123> basic cargos: present when no newgrf is used 20:39:28 <Eddi|zuHause> yeah, that might need some iteration :) 20:41:01 <Eddi|zuHause> probably some more FIRS cargos that should be moved 20:41:13 <Eddi|zuHause> but that might have been a problem with the outdated docs 20:41:53 *** Wormnest has joined #openttd 20:42:40 <andythenorth> where's kill bill gone? :P 20:42:47 <nielsm> eh I'll do that then... 20:43:45 <Eddi|zuHause> i'm done with this for today, need something to free my brain 20:46:07 <andythenorth> it's probably better 20:55:00 *** frosch123 has quit IRC 20:57:37 *** Gumle2 has quit IRC 21:00:24 <peter1138> Didn't I have a rant about that stupid 32px thing the other day? :P 21:00:45 <Eddi|zuHause> i wasn't going to bring that up :p 21:03:55 <DorpsGek_II> [OpenTTD/OpenTTD] Gymnasiast commented on issue #7530: Crash in kdtree.hpp when removing track in development version https://git.io/fjsaV 21:06:35 *** Progman has quit IRC 21:09:34 <DorpsGek_II> [OpenTTD/OpenTTD] JGRennison commented on issue #7481: kdtree.hpp crash when Oil Rig is removed https://git.io/fjsaK 21:19:35 *** arikover has joined #openttd 21:28:50 <andythenorth> bed 21:28:51 *** andythenorth has left #openttd 21:34:04 *** Wormnest has quit IRC 21:42:52 <DorpsGek_II> [OpenTTD/OpenTTD] LordAro updated pull request #7538: Remove TinyEnumT type https://git.io/fj3Bl 21:46:25 *** Wormnest has joined #openttd 21:56:20 <DorpsGek_II> [OpenTTD/OpenTTD] LordAro opened pull request #7542: Fix #7255: Prevent crashlog corruption by only printing the 20 most recent news messages https://git.io/fjsVs 21:57:58 *** arikover has quit IRC 22:00:25 *** nielsm has quit IRC 22:15:42 <DorpsGek_II> [OpenTTD/OpenTTD] Teletoby12000 opened issue #7543: suddenly it crashes without any reason https://git.io/fjsV0 22:18:21 <DorpsGek_II> [OpenTTD/OpenTTD] LordAro commented on issue #7543: suddenly it crashes without any reason https://git.io/fjsVz 22:23:57 <DorpsGek_II> [OpenTTD/OpenTTD] Teletoby12000 commented on issue #7543: suddenly it crashes without any reason https://git.io/fjsVw 22:31:58 *** gelignite has quit IRC 22:33:48 *** Supercheese has joined #openttd 23:18:12 <DorpsGek_II> [OpenTTD/OpenTTD] LordAro commented on issue #6605: Crash: loading savegame https://git.io/fjswI 23:40:00 <DorpsGek_II> [OpenTTD/OpenTTD] LordAro commented on issue #6605: Crash: loading savegame https://git.io/fjswC