Config
Log for #openttd on 16th June 2020:
Times are UTC Toggle Colours
00:00:23  <supermop_Home> i feel like you could make a big tabletop roleplaying game based on the Japanese private railway / department store companies
00:06:09  *** lastmikoi has joined #openttd
00:16:24  *** Progman has quit IRC
00:17:50  *** HerzogDeXtEr1 has quit IRC
00:23:11  *** gelignite has quit IRC
01:16:26  *** snail_UES_ has quit IRC
01:37:29  *** Boingo has joined #openttd
01:40:30  <Boingo> Hello all.  My son and I have been enjoyning openttd for a few days now. With a few games under our belt, we are starting to get the hang of it and think we are ready to "invest" our time into a big world for the long haul. We undertand that the GRFs have to be installed before we start, so my question is, what are some of the best/most popular?  I can't seem to find a list that
01:40:32  <Boingo> sorts them in any sort of rating/popularity/downloads.
02:10:21  *** snail_UES_ has joined #openttd
02:28:11  *** debdog has joined #openttd
02:31:38  *** D-HUND has quit IRC
02:35:31  *** Flygon has joined #openttd
02:39:46  *** glx has quit IRC
03:28:48  *** Wormnest has quit IRC
03:32:55  *** Smedles has quit IRC
03:42:09  *** Smedles has joined #openttd
03:52:20  *** Wormnest has joined #openttd
04:35:02  *** Wormnest has quit IRC
05:29:23  *** andythenorth has joined #openttd
06:03:15  *** sla_ro|master has joined #openttd
06:04:50  *** heffer has quit IRC
06:05:52  *** heffer has joined #openttd
06:11:30  *** snail_UES_ has quit IRC
06:17:28  *** iSoSyS has joined #openttd
06:24:20  *** iSoSyS has quit IRC
06:31:28  *** keoz has joined #openttd
06:40:01  *** heffer has quit IRC
06:41:01  *** heffer has joined #openttd
07:02:25  *** cHawk_ has joined #openttd
07:06:03  <andythenorth> o/
07:08:30  *** cHawk- has quit IRC
07:57:02  *** Samu has joined #openttd
08:11:00  *** Progman has joined #openttd
08:22:40  *** arikover has joined #openttd
08:27:23  <arikover> Hello everybody!
08:28:58  <Samu> hi
08:30:47  <arikover> andythenorth: I just noticed the vehicles being displayed on top of Iron Horse pages (https://firs-test-1.s3.eu-west-2.amazonaws.com/iron-horse/docs/html/tech_tree_table_red.html) are randomized. And clickable.
08:31:01  <andythenorth> yes
08:31:18  <arikover> andythenorth: I've F5-ing for 10 minutes...
08:31:28  <andythenorth> :)
08:31:36  <arikover> So nice!
08:31:43  <andythenorth> you get very random combinations
08:32:04  <arikover> Yeah, I got a Spinner towing an HST.
08:32:42  <arikover> Totally worth it!
10:06:03  *** gelignite has joined #openttd
10:09:48  <FLHerne> Boingo: That's largely a matter of what you want to play :-)
10:10:20  <FLHerne> For "base game with a few more features", look at OpenGFX+
10:10:55  <FLHerne> Then there are things like the vacuum-tube set that extend the base game time-wise while having a similar style
10:13:22  <FLHerne> Iron Horse (trains) and Road Hog or eGRVTS (road vehicles) are a bit bigger but still sort of generic
10:13:53  <FLHerne> Then there's a whole bunch of "realistic" trainsets for different countries
10:14:10  <FLHerne> For industries, FIRS is probably best
10:14:43  <FLHerne> It has parameters to choose how many kinds of industry/cargo you want
10:15:59  <FLHerne> There's a better-categorized list on the wiki https://wiki.openttd.org/NewGRF_List
10:17:41  *** gelignite has quit IRC
10:34:20  *** sla_ro|master2 has joined #openttd
10:34:34  *** dvim has quit IRC
10:34:47  *** dvim has joined #openttd
10:39:45  *** sla_ro|master has quit IRC
10:39:58  *** mindlesstux6662 has quit IRC
10:40:16  *** mindlesstux6662 has joined #openttd
11:06:03  *** mindlesstux6662 has quit IRC
11:06:17  *** mindlesstux6662 has joined #openttd
11:10:01  <LordAro> is lunch?
11:11:09  <andythenorth> might be
11:12:58  *** arikover has quit IRC
11:16:18  *** ZirconiumX has quit IRC
11:53:48  *** arikover has joined #openttd
12:09:59  <argoneus> can you change the configuration of a gamescript in a running game?
12:14:32  <planetmaker> that's not forseen afaik
12:14:37  <planetmaker> similar to newgrfs
12:17:05  *** WormnestAndroid has quit IRC
12:17:18  *** WormnestAndroid has joined #openttd
12:26:10  <b_jonas> it's past 2020 in game and I only just realized that I forgot to build status to the company owner in all towns I use
12:26:24  <b_jonas> despite that I've had more than enough money for a while
12:26:35  <b_jonas> and it increases station ratings
12:30:51  *** WormnestAndroid has quit IRC
12:31:08  *** WormnestAndroid has joined #openttd
12:35:46  <Timberwolf> argoneus: You can change parameters of an existing GS if the developer allows you, but can't change which GS you're running.
12:35:58  <argoneus> oh, I see
12:36:00  <argoneus> thanks!
12:38:21  *** glx has joined #openttd
12:38:22  *** ChanServ sets mode: +v glx
12:53:35  <supermop_Home> hi
13:32:17  *** snail_UES_ has joined #openttd
13:43:13  <andythenorth> woah, GS dev can allow parameter changes? :o
13:43:28  <supermop_Home> Poppleton has a 2'  gauge plant nursery railway..
13:44:19  <supermop_Home> unfortunately there is no 4mm gauge track out there
13:46:37  <supermop_Home> hmm T gauge is close to being 2' for Z scale
13:49:45  <supermop_Home> also, i wonder if anyone ever regauged N scale trains to run on Z track to better model 1067mm
13:52:42  <supermop_Home> why can't i pick like mountain amount in scenario editor?
13:53:47  <arikover> Variety Distribution does that... -ish.
13:56:26  <supermop_Home> you can't set that in scenario editor
13:57:16  *** nielsm has joined #openttd
14:00:15  <arikover> I think you can: just click on "random" and you should see the standard window, just like when you do prepare a new game.
14:00:27  <supermop_Home> https://imgur.com/a/jyS4EXO
14:02:32  <supermop_Home> ugh it just makes a boring minnesota
14:03:12  <supermop_Home> tons of unconnected lakes in flat land, with isolated hills
14:05:45  <supermop_Home> and with max height 128, 512x256 map, alpinist, v high variety distribution
14:05:54  <supermop_Home> the tallest peak is only 19
14:06:51  <arikover> Your map is too small. Alpine works well for big maps, I think.
14:07:34  <supermop_Home> not only does the terrain generator suck, after 12 years of playing this game i still have no idea what result to expect from most of these settings
14:08:16  <supermop_Home> arikover the hills are certainly not limited my map size, there is plenty of flat land around them
14:08:34  <supermop_Home> i would expect a map of this size to have peaks at 30-40 height
14:15:22  <LordAro> it is well known that TGP has issues
14:24:01  <arikover> supermop_Home: Have you set Variety Distribution to None?
14:29:48  <arikover> supermop_Home: I just tried max height 128, 512x256, alpinist, variety distribution None, and I get a peak at 24 TTD-feet.
14:30:11  <arikover> supermop_Home: with 512x512, it gets as high as 30.
14:34:16  *** ZirconiumX has joined #openttd
15:02:36  *** Progman has quit IRC
15:15:08  <supermop_Home> i would say there needs to be better explanation of variety distribution and what to expect it does
15:15:43  <supermop_Home> the term itself is not really parseable
15:16:04  <arikover> That would be great, yes.
15:16:36  <supermop_Home> like i have no reason to think that none = bigger hills
15:24:10  <supermop_Home> also why do i get mountain tops flattened off at 24 when max height is 128?
15:26:15  <supermop_Home> https://imgur.com/a/jyS4EXO
15:26:35  <supermop_Home> as you can see - i can raise the mountain above the flat level manually
15:26:47  <supermop_Home> but why is it flat to begin with?
15:31:42  *** HerzogDeXtEr has joined #openttd
15:38:54  <supermop_Home> well this has completely killed my desire to play a game. going outside
15:45:15  *** frosch123 has joined #openttd
15:45:48  *** HerzogDeXtEr1 has joined #openttd
15:48:13  <Timberwolf> Map edge length, usually.
15:48:43  *** HerzogDeXtEr has quit IRC
15:49:04  <Timberwolf> I think there's an internal restriction on how high hills are dependent on length of smallest map edge. I haven't seen it clip the peaks like that before though, normally it just gives smaller hills.
15:51:25  <Timberwolf> andythenorth: `flags = CONFIG_INGAME` on `AddSetting()`
15:56:29  <b_jonas> I wish one of the transparency options hid the trees of the tree-lined roads in towns
15:58:27  <FLHerne> Yeah, that annoys me sometimes too
15:59:22  *** Wormnest has joined #openttd
16:23:16  <frosch123> b_jonas: settings dropdown -> full details
16:23:39  <frosch123> the option exists, just the gui is messy
16:24:16  <b_jonas> frosch123: thank you, that works!
16:24:21  <b_jonas> I'll be using that
16:24:44  <b_jonas> that's the one that hides railway fences too, those can get in the way too sometimes, so that's useful
16:25:25  <b_jonas> meanwhile, I'm now spending a lot of time building a complicated junction, and trying to make sure that it won't jam or deadlock
16:25:51  <b_jonas> the space is a bit tight
16:26:05  <Boingo> FLHerne: Thanks!  I looked at FIRS, but I think I might try ECS.
16:26:12  *** gelignite has joined #openttd
16:26:20  <b_jonas> it's for one of the two oil refineries that I want to transmit oil to
16:27:05  <b_jonas> so all the oil from the sea on the northeast and east to this refinery in the west, and all the oil on the south side to the other refinery in east
16:27:58  <b_jonas> but I'm going to share the four-track spine with a high capacity passenger train line
16:28:47  <b_jonas> eventually that spine will be four tracks all in one direction, and all trains will go counterclockwise, but for now I only have a large section of it (two of the three connections between the three big cities) so it's two-way
16:29:57  <b_jonas> the city stations are all directly part of the spine, and they take passengers and mail (and goods in the future), but all the oil refiners will be on sidelines
16:30:59  <b_jonas> so I'm designing the complicated but cramped sideline for the west oil refinery, which has a lot of parallel tracks so that it can't get congested by either oil tankers or goods trains, and the passenger line can just pass straight through in priority
16:31:26  <b_jonas> the passenger line won't even have bridges, because I eventually want it to be a really fast vac train line
16:37:01  <TrueBrain> Wall of text hits you for 2 points ;)
16:47:40  <b_jonas> yeah, it'd look better on a screenshot I guess
16:59:54  *** Flygon has quit IRC
17:18:03  * andythenorth needs a name for the FIRS GS
17:18:13  <andythenorth> SRIF GS
17:18:18  <andythenorth> GS GS
17:19:26  <_dp_> YAGS
17:19:40  <andythenorth> ha ha
17:19:47  <andythenorth> Ultimate GS
17:19:56  <andythenorth> Yet Another Ultimate GS
17:20:02  <andythenorth> it's going to be quite confusing
17:20:14  <frosch123> i second "YAK Shaving"
17:20:29  <frosch123> YAKS
17:20:33  <andythenorth> YAKS
17:20:42  <_dp_> GS of Life, the Universe, and Everything
17:20:52  <andythenorth> I could just call it GS
17:21:14  <_dp_> GS42 for short
17:21:17  <andythenorth> it will combine daylength, town growth and goals
17:21:21  <andythenorth> so it's a bit confusing
17:21:29  <frosch123> call it "Buy a FIRS server at myfirs.com"
17:21:54  <andythenorth> that is nice
17:22:06  <andythenorth> domain is for sale also
17:22:11  <andythenorth> 95
17:22:59  <frosch123> it will probably get more expensive now
17:23:04  <frosch123> so many hits
17:23:37  <andythenorth> cheap at any price
17:23:39  <frosch123> is there some obvious secondary meaning for "Firs" in some language?
17:23:54  <frosch123> or do they register all 4 letter combinations
17:23:56  *** Wolf01 has joined #openttd
17:24:16  <andythenorth> I only get the trees when I google
17:25:25  <Wolf01> I get only lego when I google instead :P
17:25:30  <frosch123> it's the federal inland revenue service of nigeria
17:25:58  <frosch123> not sure what a revenue service is though
17:28:07  <frosch123> i like sentences that contain both "taxes" and "voluntary complicance"
17:30:41  <frosch123> there is a font named "TT Firs" :p
17:32:07  <frosch123> https://www.myfonts.com/fonts/type-type/tt-firs/ <- i guess not worth the price for using it on the docs page
17:33:07  <andythenorth> lol :)
17:36:27  <LordAro> it's quite a nice font
17:38:00  <andythenorth> nice font
17:38:09  <andythenorth> I should buy it :P
17:38:24  <andythenorth> hmm I could do with a better domain for my AWS buckets
17:38:35  <andythenorth> https://firs-test-1.s3.eu-west-2.amazonaws.com/ is not snappy
17:42:20  <frosch123> playfirs.* is available
17:42:44  <frosch123> oi, newgrf.* is available
17:43:01  <frosch123> www.newgrf.*/firs
17:43:47  <frosch123> .game is expensive
17:45:43  <frosch123> oh. .fail exists, www.newgrf.fail/firs :)
17:45:45  <andythenorth> oh
17:45:52  <andythenorth> can we get .newgrf as TLD?
17:45:58  <andythenorth> or .openttd?
17:46:08  <_dp_> you know it's a really terrible name when 6-letter com is available :p
17:46:30  <andythenorth> firs.fail
17:46:50  <andythenorth> or we could offer openttd.org paths to AWS buckets? :P
17:46:54  <andythenorth> controversial
17:47:10  <frosch123> there is also .lol
17:47:40  <frosch123> maybe ask V to buy newgrf.wtf
17:48:05  <Eddi|zuHause> newgrf.nsfw?
17:48:36  <frosch123> cets.rip
17:49:06  <frosch123> oh, also .horse
17:49:14  <Eddi|zuHause> hey, i made a commit like a week ago
17:49:37  <Eddi|zuHause> or maybe 3 :p
17:50:28  *** virtualrandomnumber has joined #openttd
17:50:44  *** virtualrandomnumber has quit IRC
17:50:56  <andythenorth> iron.horse
17:51:15  * andythenorth is curious about whether to do one horse grf, or one per roster
17:51:20  <andythenorth> confusing
17:51:21  <frosch123> andythenorth: we worked hard to prevent <iframe> on bananas
17:51:47  <andythenorth> but http://bundles.openttdcoop.org/ will serve anything :)
17:51:55  <andythenorth> and we have allowed anyone in to publish to it
17:52:02  * andythenorth has no idea about wisdom of that
17:52:18  <supermop_Home> nice font
17:52:18  <frosch123> andythenorth: you will run out of grfids if you use a new one whenver you delete/add a roster
17:55:51  <supermop_Home> Timberwolf why clamp to a flat top at all?
17:55:52  <andythenorth> so far I have only added 3 and deleted none
17:56:51  <supermop_Home> it doesn't help ensure enough usable valley space the way a shorter hill / clamped floor would
17:58:25  <supermop_Home> gameplay wise, this map would be just the same if the mountain continued 8 level higher as implied by the slope before level 24
17:59:00  <supermop_Home> these flat tops just encourage the scourge of Car Factories on top of mountains
18:01:39  <andythenorth> wasn't it just Another Bug in MHL?
18:01:42  <andythenorth> or TGP?
18:01:48  <supermop_Home> maybe
18:01:49  * andythenorth is sure it was all explained before
18:02:00  <LordAro> MHL added alpinist
18:02:09  <LordAro> but i'm pretty sure it was an issue before
18:02:19  <supermop_Home> I've yet to see an Alp with a flat top
18:03:34  <supermop_Home> there are other things in alpinist that bug me too, but i don't see them being fizxable
18:04:08  <supermop_Home> things like steep pyramidal craters and dead-end valleys
18:08:36  <supermop_Home> https://imgur.com/a/jyS4EXO
18:08:48  <supermop_Home> like how doe these work geologinally
18:08:55  <supermop_Home> geollogically
18:10:06  <FLHerne> andythenorth: One per roster
18:10:48  <FLHerne> Smaller file downloads
18:10:51  <FLHerne> More discoverable
18:12:03  <andythenorth> is it confusing though?
18:12:13  <supermop_Home> i'd rather just the one grf, but invariably people will beg to play with all rosters on, and multiple grfs lets them do that
18:12:29  <andythenorth> I'm mostly concerned about compile time :P
18:12:47  <supermop_Home> all in one grf lets you BAD FEATURE some command and Conquer style into it with a GS
18:13:30  <supermop_Home> like CC Light blue gets british roster, Red gets continental,
18:13:38  <supermop_Home> etc
18:15:16  <supermop_Home> capture the other players HQ with an engineer to be able to build their trains
18:16:26  *** Compu has joined #openttd
18:17:06  <andythenorth> it's notable that NARS and UKRS are split and that's finr
18:17:07  <andythenorth> fine *
18:17:14  *** Compu has joined #openttd
18:17:21  <supermop_Home> indeed
18:17:23  *** Compu has quit IRC
18:17:51  <supermop_Home> they are different enough in style I've never tried to play with both of them together though
18:31:24  <DorpsGek_III> [OpenTTD/OpenTTD] ConnCraft commented on issue #7838: Crash in VehicleGroupWindow::GroupNameSorter https://git.io/JeKL5
18:43:19  <b_jonas> and of course my network still had and has a lot of bug that I won't find out till later
18:43:46  <b_jonas> in this case I had to add waypoint to force trains to specific platforms designated for dropping oil and goods
18:45:54  <b_jonas> I tried two separate stations first, but that failed because the oil drop point didn't accept oil (and also would supply oil from a nearby unused oil rig)
18:59:05  <Gustavo6046> Squirrel works fine, but I think it's a bit outdated. Perhaps it would not be a vain investment to switch to (or at least supplement support for) embedded JavaScript. Using something like QuickJS or Duktape should be a good start, a step in the right direction; the difficult part, as it usually (read: almost always) turns out to be for an embedded language, would most likely be
18:59:07  <Gustavo6046> integrating with the existing codebase.
18:59:14  <Gustavo6046> I want your input, though.
19:00:03  <LordAro> how is it outdated?
19:07:18  <FLHerne> Gustavo6046: Remember that OpenTTD code has to be deterministic
19:07:31  <Gustavo6046> FLHerne: yes, it does
19:07:37  <FLHerne> Given that JS's only numeric type is floating-point, that's not going to work well
19:08:06  <Gustavo6046> Can't we configure the interpreter we choose to use to allow integers?
19:08:13  <Gustavo6046> FLHerne: Duktape supports BigInt, I think
19:08:27  <LordAro> *if* (and it's a big if) we went with another scripting language, it'd more likely be lua
19:08:35  <LordAro> which is actually designed for embedding
19:08:37  <Gustavo6046> Which is what you want if you accurately want large integers
19:08:40  <LordAro> and y'know, actually designed
19:08:42  <Gustavo6046> Ew, Lua
19:09:12  <Gustavo6046> It is not a general-purpose language
19:09:41  <LordAro> yes?
19:09:49  <milek7> there was some discussion about wasm
19:10:03  <FLHerne> In that case, you're no longer using JavaScript, but some poorly-specified subset of JS
19:10:17  <Gustavo6046> milek7: WASM? Why WASM?! That is only for targeting VMs that support it, and only for performance-sensitive scenarios. This is OpenTTD.
19:10:21  <FLHerne> I don't see what that buys you
19:10:39  <Gustavo6046> FLHerne: WASM is actually not JS.
19:10:42  <Gustavo6046> It's bytecode.
19:10:52  <Gustavo6046> asm.js is the subset. And iirc it's already deprecated lol.
19:10:53  <FLHerne> I mean the no-floating-point thing
19:11:00  <milek7> uh, openttd is not performance sensitive?
19:11:17  <FLHerne> no-floating-point WASM would be a poorly-specified subset of WASM instead
19:11:19  <milek7> and you're adding VM anyway, be it js or wasm
19:11:26  <Gustavo6046> Subset?! You mean superset, right? BigInt is standard since ES2015 (and everyone who is not using Windows 98 anymore is using ES2015)
19:11:34  <FLHerne> Gustavo6046: No, I mean subset
19:11:38  <Gustavo6046> mikegrb: joke's on you, Squirrel too is a VM!
19:11:55  <Gustavo6046> I mean, sure, it's another VM, but it is a very small price to pay to support existing Squirrel stuff.
19:12:02  <Gustavo6046> I'm fine with it.
19:12:08  <Gustavo6046> FLHerne: floats are not non-deterministic.
19:12:24  <FLHerne> Gustavo6046: The vast majority of extant JS code, including the standard library, uses and assumes floating-point values
19:12:30  <Gustavo6046> Maybe across platforms. But then again, only for ridiculously high precisions, and/or for ridiculously high ranges.
19:12:36  <FLHerne> They are when using the native instructions
19:12:47  <Gustavo6046> Are processors that dumb?
19:12:54  <FLHerne> And soft-floats are *sloooow*, which negates the entire point
19:13:04  <FLHerne> Weirdly, it's because they're not dumb
19:13:07  <Gustavo6046> I mean, if you have a float32  (16), and a float32 (40), and add them, you will ALWAYS get 56.
19:13:10  <FLHerne> Or not enough
19:13:30  <FLHerne> The x86 FPU uses 80 bits to store intermediate results
19:13:39  <FLHerne> Which increases the precision
19:13:52  <LordAro> this discussion sounds a lot like "Gustavo6046 wants to write JS" to me
19:14:00  <FLHerne> But means you get different results depending on which regs the compiler happens to spill
19:14:16  <FLHerne> Or from other non-x86 platforms
19:14:19  <milek7> ieee754 basic operations are defined (most except sin/etc.), but making sure that every compiler generates compatible code (correct rounding modes, intermediaries, not reordering operations) isn't easy
19:14:24  <Gustavo6046> Or you can use coerciom, to ensure that tiny 0.00000001 errors are vanquished (the existence of these tiny errors should be neglected, as iirc they are automatically corrected by modern libc's or whatever component I forgot about, way before they are even considered in the deterministicity-sensitive scenario of OpenTTD's VM).
19:14:34  <FLHerne> Gustavo6046: No, that doesn't work
19:14:45  <FLHerne> Lots of people have tried to invent robust ways to do that
19:15:11  <FLHerne> But it's basically impossible without essentially falling back to soft-floats as integer ops
19:15:21  <Gustavo6046> Unless you use numbers smaller than 0.00025 or larger than 2 to the power of some number larger than 15, yes they do.
19:15:30  <Gustavo6046> And at this point they are pretty much just slow ints.
19:15:50  <Gustavo6046> I think in JS integer support is explicit. You need to use BigInt, which is an arbitrary precision number thing, much like Python's.
19:16:02  <FLHerne> Yes
19:16:15  <milek7> even ULP difference is not acceptable, it can accumulate to desync some long time after that
19:16:16  <Gustavo6046> I think it is faster than floating points for integer arithmetic, granted the result isn't too big (which would make some mallocs inevitable).
19:16:33  <Gustavo6046> I don't nkow i
19:16:46  <Gustavo6046> I don't know if you can explicitly set hard limits, like cap it at 32 bits or 64 bits.
19:17:05  <Gustavo6046> I think you can preallocate a few bytes, though. I'll check.
19:17:11  <milek7> (and we probably wandered into newgrf territory, because strictly GS doesn't have to be deteministic)
19:17:33  <FLHerne> milek7: AIs do at least, IIRC
19:17:37  <LordAro> milek7: they do if you ever want to go near multiplayer
19:17:50  <FLHerne> (I have questioned *why* they have to be before)
19:18:12  <FLHerne> In principle, they should be able to run only on the server
19:18:25  <LordAro> in principle perhaps
19:18:32  <LordAro> but that's not how the game is architected
19:18:38  <LordAro> you're welcome to redo everything
19:18:43  <FLHerne> But then you have to be really careful that the AI/GS code doesn't change the game state at all directly
19:18:54  <FLHerne> Or affect the RNG
19:19:03  <Gustavo6046> FLHerne: I think this code is designed badly, Q.E.D..
19:19:05  <FLHerne> And as LordAro says ^
19:19:26  <Gustavo6046> AI code does not change the game state directly.
19:19:34  <milek7> anyway, I don't get why you are so bent on using js
19:19:39  <FLHerne> Gustavo6046: I think you have a very poor understanding of the issues
19:20:32  <Gustavo6046> FLHerne: network code is not an easy task, but the results depend a lot on whether the networking is *designed* properly.
19:20:47  <FLHerne> Yes
19:20:57  <Gustavo6046> You could take the Unreal approach, and have the clientside predict predictible things, but in a way that does not change the game state, while the server computes everything unpredictable.
19:21:12  <Gustavo6046> This is called replication, and not only does it REALLY save on bandwidth, it would help us with this deterministicity problem.
19:21:22  <FLHerne> But it's designed the way it is for sensible reasons
19:21:28  <Gustavo6046> (Is there a better noun for deterministic things? Determinism? Like, "related to determinism", but not "determinism".)
19:21:40  <LordAro> "completely rearchitect the game engine so that Gustavo6046 can use JS to write AI/GS" is a bit much
19:21:41  <FLHerne> ok, now I'm not even sure you understand how it works *now*
19:21:50  <Gustavo6046> LordAro: I know.
19:21:50  <FLHerne> "This is called replication, and not only does it REALLY save on bandwidth"
19:22:05  <Gustavo6046> FLHerne: it did back in the day, when there was still dial-up
19:22:06  <Gustavo6046> But that is beside the point
19:22:15  <FLHerne> It would be pretty much impossible to save bandwidth compared to the way OTTD multiplayer works now
19:22:17  <Gustavo6046> (hence "not only")
19:22:25  <FLHerne> The entire game state is replicated, continuously
19:22:37  <Gustavo6046> "Replication" is a misleading name
19:22:41  <FLHerne> The *only* thing sent over the network are user actions
19:22:46  <FLHerne> Which are tiny
19:22:51  <Gustavo6046> The way I used it, I referred to a very specific thing
19:22:52  <milek7> LordAro: hmm, so GS doesn't just send commands as every other client?
19:23:06  <LordAro> milek7: it's just a special AI
19:23:09  <LordAro> afaik
19:23:10  *** Kapytan has joined #openttd
19:23:26  <Gustavo6046> The entire point of replication is that you do not need to worry about deterministic algorithms while still having the server issue less data through the network.
19:24:15  <Gustavo6046> And also, that the clientside *VIEW* of the game state at T should not be affected by packet loss at T-N (Unreal's replication mechanism uses UDP).
19:24:45  <FLHerne> Gustavo6046: Do you have a source for your very narrow definition of "replication"?
19:24:52  <Gustavo6046> I think I am failing to explain. I apologize.
19:24:53  <Gustavo6046> FLHerne: yes!
19:25:13  <FLHerne> According to what I remember, OTTD is a textbook example of lockstep-style active replication
19:25:21  <Gustavo6046> I am unaware of more technical documents, but these do probably exist too. I'll pray the wiki at BeyondUnreal is up.
19:25:25  <Gustavo6046> wiki.beyondunreal.com/Legacy:Replication
19:25:29  <Gustavo6046> Ah, it is up.
19:25:31  <Gustavo6046> Whew
19:26:07  <Gustavo6046> This implementation of replication is not lockstep. It was meant to eliminate it, as predeceding games suffered from it (remember Quake?)
19:26:41  <FLHerne> Gustavo6046: Your wiki is wrong :p
19:26:53  <FLHerne> Seriously, "Replication" is a well-defined term in CS for decades
19:27:33  <LordAro> FLHerne: tbf, so is CS's inability to name anything properly
19:27:46  <FLHerne> Well, maybe Unreal Engine specifically uses it as a term of art for something special, I don't know
19:29:45  <Gustavo6046> FLHerne: this definition also exists for decades.
19:29:55  <glx> anyway openttd server really issue almost no data
19:30:11  <Gustavo6046> I think it is a bit more domain-specific, as Unreal is a time-sensitive scenario, so it probably does concern with this.
19:30:44  <Gustavo6046> glx: only player commands, which I think is part of the (non-)issue that makes the determinicity of code so much more important.
19:30:44  <glx> it just dispatch commands received from clients, with some checks
19:30:56  <Gustavo6046> And maybe makes it very difficult to have serverside-only code run.
19:31:04  <Gustavo6046> (Or, by extension, clientside-only code, like effects.)
19:31:09  <Gustavo6046> It mure uses very
19:31:20  <glx> server side only code works well if done correctly
19:32:13  <glx> GS and AI are server side
19:32:50  <FLHerne> glx: Is that true currently? I didn't think so
19:33:33  <glx> it's guarded by !networking || server IIRC
19:34:52  <TrueBrain> hihi, fun fact, games from 1991 use "threads" by switching the stack pointer on regular intervals .. interesting :D (sorry, lovely random fun fact, just had to :D)
19:35:40  <Kapytan> Hi, I'm looking for a chat in CZ / CS. I can't know ENG. I use Goo..translat. The link "tycoonez.com" does not work.
19:36:26  <milek7> TrueBrain: green threads?
19:36:47  <TrueBrain> pretty sure their colour is not relevant (owh, the jokes)
19:37:18  <TrueBrain> but no .. they basically implemented their own context switch in an interrupt
19:37:25  <TrueBrain> which on its own is pretty impressive tbh
19:38:40  <Gustavo6046> It sure uses very little bandwidth, but at the expense of CPU time, PLUS it makes it impractical to compatibly run code in one place only, PLUS it makes it VERY difficult to manage dependencies (as all peers must have the same dependencies at all times!), unless the server somehow either uploads them, or redirects the client to download from an external source (like OpenTTD's addon
19:38:42  <Gustavo6046> repository, whose name I fail to recall), even if just temporarily, for the sake to join the server.
19:39:17  <Gustavo6046> You are placing many limitations in place, and I see little to no advantages to continue this way, at least none that hold up to this day.
19:39:50  <Gustavo6046> May you please state what is the sensible reason behind this radical design decision? I would LOVE to be corrected.
19:40:12  <Gustavo6046> s/sake to join/sake of joining/
19:41:34  <milek7> i don't think it is radical, it's just obvious thing to do
19:41:36  <milek7> when you have clearly discernible actions that acts based on global state
19:41:44  <FLHerne> Kapytan: The last archived version is here https://web.archive.org/web/20170425184500/http://www.tycoonez.com/
19:42:02  <TrueBrain> FLHerne: you looked that up? You are awesome :D 2017 .. nice :)
19:42:06  <Gustavo6046> milek7: why obvious?
19:42:08  <Gustavo6046> Also, why global state?
19:42:30  <glx> just remember when network code was implemented
19:42:31  <FLHerne> Kapytan: What page links to "tycoonez.com"? I don't believe it's ever been official in any way
19:43:04  <FLHerne> Gustavo6046: A very large amount of the game state is directly visible to the user at any time
19:43:46  <glx> every thing displayed on the screen depends on game state
19:43:50  <Gustavo6046> I think that it is inconceivable to rely on a global state when you operate with multiple machines, in the non-deterministic (or non-guaranteed) transport that is the network (TCP/IP stack and all that stuff), with ANY non-zero (and usually non-negligible) amount of latency.
19:43:51  <FLHerne> (e.g. if you zoom out, you can see the location, sprite, animation frame etc. of everything on a large part of the map)
19:44:16  <FLHerne> In an FPS game like most Unreal games, you can synchronize only what the player happens to be looking aat
19:44:24  <glx> latency is not an issue
19:44:25  <FLHerne> Which is a relatively small amount of state
19:45:06  <glx> and server is giving the heartbeat anyway
19:45:14  <b_jonas> oh yeah, another question. when I click on a secondary industry, it prints how much it produced last month. but one month is very short, since I have long trains. is there some way to see how much of each cargo that industry received and produced in the last few years, and how much of the products got delivered successfully so far?
19:45:26  <FLHerne> Gustavo6046: I don't understand how you can find it inconceivable, given that it demonstrably works
19:45:46  <FLHerne> (even over my very bad multi-hop wifi connection, which is very much not low-latency)
19:45:49  <TrueBrain> I love when people use words like "inconceivable", while it has been reality for 15+ years :D
19:45:53  <Gustavo6046> And for this reason I think it is a fallacy, if not a vice, to write network code with the notion of a perfectly synchronized and deterministic global state, if the very physical and low-level assumptions network code depends on is, and will always be, non-deterministic.
19:45:58  <TrueBrain> finds his reality-check-machine
19:46:14  <FLHerne> Gustavo6046: Your imagined reality doesn't correspond to the actual one
19:46:28  <Kapytan> <FLHerne>Link from: "https://wiki.openttd.org/OpenTTD:Community_portal"
19:46:40  <FLHerne> TCP maintains packet ordering
19:46:49  <TrueBrain> you guys do understand you are on a rollercoaster right? Going from "replace squirrel" to debating if the TCP protocol is deterministic :D
19:46:50  <Gustavo6046> The most portable true random number generator is that of packet loss. You don't need to visualize "atmospheric phenomena" of any sorts, nor do you need to send HTTP requests (or requests of any sort) to someone who does.
19:46:52  <frosch123> LordAro: lua is shit. rather go for python
19:47:09  <milek7> python embedding is pita
19:47:14  <TrueBrain> frosch123: embedding Python? Are you mental?
19:47:16  <Gustavo6046> In fact, you don't even need to request information from any other server. Just loop packets around in a physical loopback, and count the packet loss.
19:47:27  <Gustavo6046> frosch123: Python is not a very sane choice for embedding.
19:47:40  <frosch123> TrueBrain: yeah, your f-strings ruined it
19:47:42  <FLHerne> Gustavo6046: If only someone had invented TCP
19:47:48  <TrueBrain> frosch123: I do not appoligize for that!
19:47:56  <TrueBrain> :D
19:48:10  <FLHerne> The main purpose of which is to hide packet loss from application authors
19:48:12  <Gustavo6046> FLHerne: still non-deterministic. Sure, it avoids packet loss, but I still count retransmission as part of what makes network data non-deterministic.
19:48:13  <glx> but most of things happening in openttd don't rely on network, just the really small commands
19:48:39  <FLHerne> Gustavo6046: Actions know which game tick they apply to, so timing determinism is irrelevant
19:48:54  <TrueBrain> can we switch to entropy pleas?
19:48:59  <TrueBrain> that would make this conversation better
19:49:01  <Gustavo6046> The impossibility of having a packet reach from point A to point B with the exact same delay reliably is enough to guarantee non-determinism.
19:49:14  <Gustavo6046> FLHerne: good point.
19:49:46  <frosch123> anyway, i am out of popcorn
19:49:52  <TrueBrain> frosch123: aaaawwwwhhhh
19:49:59  * TrueBrain gives frosch123 some more wood to put on the fire
19:50:04  <Gustavo6046> But what I mean is, you work very hard to make deterministic code work on a deterministic state, on a non-deterministic transport. You really put your effort into make it ROBUST, and it pays. I very much admire it, and I am in absolute awe.
19:50:42  <TrueBrain> TCP is a deterministic transport mechanism .. please don't try to convince people otherwise ;)
19:50:56  <glx> yeah it's not UDP
19:50:58  <_dp_> "work very hard" rofl, it's like the dumbest network code you can make :p
19:51:21  <Gustavo6046> TrueBrain: it only guarantees that all packets arrive, and that they can be reordered by the TCP stack code at the recipient end.
19:51:27  <TrueBrain> _dp_: wtf? you looking for a kick or something? *giggles*
19:51:33  <Gustavo6046> I do not think that means determinism.
19:51:38  <frosch123> _dp_: just because it is a standard design, it's not dumb. factorio does the same
19:51:49  <Gustavo6046> _dp_: dumb and difficult.
19:52:00  <milek7> and simplest, doesn't require different code for client/server behaviour, and is cheat-proof
19:52:02  <Gustavo6046> It is sometimes easier to make dumb things. I think here it might be the opposite.
19:52:04  <frosch123> actually, it's funny. factorio tried a lot of magic in the beginning and then converged towards normal
19:52:11  <Gustavo6046> milek7: does not require, but also does not allow.
19:52:16  <FLHerne> Gustavo6046: The only non-determism is timing, which as I said before is irrelevant
19:52:18  <glx> difficult ? client sends a command, server analyse and dispatch
19:52:20  <TrueBrain> DorpsGek: whoami
19:52:20  <DorpsGek> TrueBrain: TrueBrain
19:52:23  <Gustavo6046> It is sometimes good to have different clientside and serverside code.
19:52:25  <glx> how is that difficult ?
19:52:28  <TrueBrain> good to know that DorpsGek knows me :)
19:52:38  <andythenorth> so I'll call my GS 'GS'
19:52:49  <Gustavo6046> And if you really insist in this uniformity of code, just go peer-to-peer! That is good too. I've been investigating ditching client-server architectures for games.
19:52:49  <andythenorth> seems vanilla choice
19:52:50  <FLHerne> Gustavo6046: The only situation in which the data received is non-deterministic is if your network connection has dropped altogether
19:52:54  <TrueBrain> Gustavo6046: please look up the definition of deterministic :) Timing has nothing to do with it :) It has to do with state, and transitions :) You are mixing up stuff here ;)
19:52:57  <andythenorth> unless I"m calling it JS
19:53:00  <frosch123> andythenorth: what? still at that topic? i thought that was settled hours ago
19:53:06  <FLHerne> At which point no-one cares
19:53:08  <andythenorth> well now it might be JS
19:53:09  <Gustavo6046> TrueBrain: I'm not talking about the determinism of the game state.
19:53:43  <frosch123> andythenorth: anyway, JS does not have 4 letters
19:53:43  <andythenorth> supermop_Home do I actually want it?  https://www.ebay.co.uk/itm/392835761287?_trksid=p2380057.m570.l5999&_trkparms=gh1g%3DI392835761287.N36.S1.typeWATCH_ITEM_ENDING_SOON.R1.TR6
19:53:44  <TrueBrain> TCP, the protocol, not the TCP/IP stack (I know, confusing names) guarantees deterministic behaviour on layer 7, barr some exceptins like connectionloss :)
19:53:58  <TrueBrain> frosch123: JSJS?
19:54:00  <TrueBrain> JSSS?
19:54:02  <TrueBrain> NOJS?
19:54:05  <TrueBrain> NoJS?
19:54:09  <Gustavo6046> I am trying to argue that it might not be necessary to have the game state be deterministic, and it could actually be easier to work with that assumption in mind, and to synchronize just enough that it would be almost invisible to your player client, and neglectable for external bot clients.
19:54:31  <Gustavo6046> Besides, it would open up many possibilities.
19:54:40  <frosch123> JSSS looks like you tried to type IEEE and shifted the keyboard under your fingers
19:54:43  <FLHerne> Gustavo6046: Sure, but you're trying to argue this in the face of several people familiar with the problem telling you it's a bad idea
19:54:46  <TrueBrain> Gustavo6046: but, mostly because I am growing a bit tired of debating fundamentals, you might realise by now you got a bit lost in your own conversation, and skipped why replacing Squirrel is a good thing :)
19:54:53  <andythenorth> TB was going to reimplement all of GS and NewGRF once
19:54:58  <andythenorth> I have the chat log somewhere
19:54:59  <Gustavo6046> Oh.
19:55:06  <TrueBrain> andytheno