Config
Log for #openttd on 5th January 2022:
Times are UTC Toggle Colours
00:03:07  *** Gustavo6046 has joined #openttd
00:45:07  <DorpsGek> [OpenTTD/team] tmn opened issue #282: [nb_NO] Translator access request https://git.io/JSDae
00:46:20  <DorpsGek> [OpenTTD/team] tmn opened issue #283: [nn_NO] Translator access request https://git.io/JSDaY
02:37:35  *** Wormnest has quit IRC
02:53:02  *** Gustavo6046 has quit IRC
02:53:18  *** Gustavo6046 has joined #openttd
02:54:54  *** Gustavo6046 has quit IRC
02:54:59  *** Gustavo6046 has joined #openttd
02:55:10  <Gustavo6046> Oops
03:05:00  *** iSoSyS has joined #openttd
03:20:46  *** glx has quit IRC
03:39:41  *** _aD has quit IRC
03:46:09  *** Flygon has joined #openttd
03:47:03  *** D-HUND has joined #openttd
03:50:26  *** debdog has quit IRC
05:47:11  *** supermop_Home_ has quit IRC
07:15:19  *** sla_ro|master has joined #openttd
07:52:21  *** tokai has joined #openttd
07:52:21  *** ChanServ sets mode: +v tokai
07:59:22  *** tokai|noir has quit IRC
08:05:57  *** andythenorth has joined #openttd
08:24:09  *** felix has quit IRC
08:27:49  <peter1138> Well
08:28:20  *** felix has joined #openttd
09:05:33  *** WormnestAndroid has quit IRC
09:57:32  *** Gustavo6046 has quit IRC
09:57:58  *** Gustavo6046 has joined #openttd
10:20:13  <TrueBrain> "For earlier versions of TTDPatch the variable .."
10:20:17  <TrueBrain> I love the vague reference :D
10:27:23  <TrueBrain> hmm ... are temp registers of a procedure local to the procedure, or local to the original varaction?
10:28:21  <TrueBrain> reading by the text, I assume the first ..
10:36:43  <TrueBrain> no, there is only 1 _temp_store .. okay
10:50:38  *** Gustavo6046 has quit IRC
10:53:07  <TrueBrain> what makes NML really hard to read for me, is that the keywords provided by NML is a HUGE list .. so often I am confused when reading NML: is this thing locally defined, or defined by NML
10:53:22  <TrueBrain> some namespacing would really have helped
10:58:11  <DorpsGek> [OpenTTD/OpenTTD] J0anJosep opened pull request #9780: Codechange: Make RoadScopeResolver constructor inlineable. https://git.io/JSSI3
11:00:41  <TrueBrain> andythenorth: am I right in that "num_supplies_delivered" in FIRS primary industries is currently "write-only"? (as in, it isn't actually used anywhere?)
11:01:09  <TrueBrain> well, except for the 28th entry (num_supplies_delivered_27)
11:01:49  <TrueBrain> ah, no, nevermind
11:01:51  <andythenorth> it should be read somewhere
11:01:56  <andythenorth> it's shuffled every 256 ticks
11:01:57  <TrueBrain> yeah, found it ..
11:02:06  <TrueBrain> NML is not the friendliest to read :P
11:02:39  <TrueBrain> basically, the boost is calculated based on the last 27 deliveries
11:03:51  <andythenorth> yes
11:03:56  <TrueBrain> cool, tnx
11:05:10  <TrueBrain> I guess that makes boosting a bit more relaxed, you only have to deliver 4 times a year or so
11:05:45  <DorpsGek> [OpenTTD/OpenTTD] LordAro approved pull request #9780: Codechange: Make RoadScopeResolver constructor inlineable. https://git.io/JSSIg
11:06:01  <TrueBrain> now approve my backport PR! :P
11:13:08  <TrueBrain> andythenorth: the tooltip of secondary industries say that you get a boost if you deliver all 3 cargoes (for example), but is this really true?
11:13:20  <andythenorth> yes
11:13:26  <TrueBrain> as in, the code reads as if the accepting cargoes are just adding to what is being produced?
11:13:27  <andythenorth> not in all cases, it's industry specific
11:13:31  <TrueBrain> ah
11:13:44  <andythenorth> amounts produced are multiplied by a fraction
11:13:54  <andythenorth> it might be e.g 2/8 if one cargo delivered
11:14:00  <andythenorth>  5/8 if 2 cargos delivered
11:14:06  <andythenorth> 8/8 if all 3 cargos delivered
11:14:10  <andythenorth> (examples)
11:14:17  <TrueBrain> ah, I see
11:14:32  <andythenorth> there's also a split on the output, which is fractional, but that's totally unrelated to the input above
11:15:04  <TrueBrain> so the current_production_ratio is additive of all inputs
11:15:12  <TrueBrain> and used as multiplier to the individual
11:15:58  <TrueBrain> so delivering only wheels to the car-maker is enough to make some cars, just slower :D
11:16:03  <TrueBrain> rEaLiSm :P
11:16:31  <TrueBrain> okay, and here too, if you delivered any in the last 3 months, it enables its fraction
11:16:32  <TrueBrain> gotcha
11:16:34  <TrueBrain> tnx :)
11:17:09  <TrueBrain> I love how you seem to be using persistent storage for temporary values :D
11:17:11  <TrueBrain> but that is fine :)
11:18:27  <TrueBrain> and I guess closure_counter is never really implemented?
12:10:33  <DorpsGek> [OpenTTD/OpenTTD] LordAro approved pull request #9779: Backport master into release/12 https://git.io/JSStn
12:10:39  <TrueBrain> \o/
12:10:54  <DorpsGek> [OpenTTD/OpenTTD] TrueBrain merged pull request #9779: Backport master into release/12 https://git.io/JSVNS
12:11:15  <DorpsGek> [OpenTTD/OpenTTD] LordAro approved pull request #9772: Fix missing icon https://git.io/JSStC
12:11:29  <LordAro> you're quick
12:11:46  <TrueBrain> trying to design a simple RPN-based language .. so I can use the distraction :P
12:17:41  <DorpsGek> [OpenTTD/OpenTTD] LordAro requested changes for pull request #9726: Fix: Prevents crash when no industries are present https://git.io/JSStz
12:18:33  <DorpsGek> [OpenTTD/OpenTTD] LordAro approved pull request #9769: Doc: Fix broken links in GitHub docs https://git.io/JSStV
12:23:20  <DorpsGek> [OpenTTD/OpenTTD] TrueBrain merged pull request #9769: Doc: Fix broken links in GitHub docs https://git.io/JyOdx
12:24:39  <DorpsGek> [OpenTTD/OpenTTD] TrueBrain merged pull request #9772: Fix missing icon https://git.io/Jygdh
12:24:48  <TrueBrain> abusing admin powers, as rebasing those PRs is stupid
12:24:55  <DorpsGek> [OpenTTD/OpenTTD] LordAro requested changes for pull request #9770: Fix #9765: Incorrect Company Values https://git.io/JSStS
12:25:25  <DorpsGek> [OpenTTD/OpenTTD] LordAro merged pull request #9780: Codechange: Make RoadScopeResolver constructor inlineable. https://git.io/JSSI3
12:36:06  <TrueBrain> $num_supplies_delivered[27] $num_supplies_delivered[27] %incoming_cargo_waiting[@i] + =
12:36:16  <TrueBrain> collect all the prefixes?
12:37:40  <LordAro> are you sure you're not writing perl?
12:37:59  <TrueBrain> lol
12:39:16  <LordAro> i think that could actually be valid perl, without the "+ =" on the end
12:39:57  <TrueBrain> sadly I need some meta-language, as I am not sure NewGRF is turing complete :P
12:42:29  <DorpsGek> [OpenTTD/OpenTTD] LordAro commented on pull request #9739: Copy server invite code to the clipboard automatically https://git.io/JSSqE
12:42:56  <LordAro> i'd be surprised if it wasn't
12:43:59  <TrueBrain> looping is a bit of the issue
12:44:11  <TrueBrain> you could do tail-recursion, I guess
12:44:15  <DorpsGek> [OpenTTD/OpenTTD] pelya commented on pull request #9739: Copy server invite code to the clipboard automatically https://git.io/JSSqa
12:46:07  <TrueBrain> did anyone check how ^^ looks visually?
12:46:18  <TrueBrain> code-wise it reads to me that it now has a button with the text "copy to clipboard"?
12:47:01  <TrueBrain> I would expect something smaller, tbh :) Like a small icon or what-ever ;) But this text might be .. long, for the location it is at :)
12:47:21  <TrueBrain> I might be wrong, there is no visual in the PR :P
12:49:45  <DorpsGek> [OpenTTD/OpenTTD] LordAro commented on pull request #9727: Feature #9059: Add buttons to toggle music in the Game Options menu. https://git.io/JSSqi
12:54:55  <DorpsGek> [OpenTTD/OpenTTD] LordAro commented on pull request #9642: Feature: Orientation of rail and road depots can be changed https://git.io/JSSqS
12:55:13  <LordAro> TrueBrain: yeah, ideally a little icon
12:56:50  *** WormnestAndroid has joined #openttd
12:57:20  <TrueBrain> https://gist.github.com/TrueBrain/58a388d5e396bba3ae3ec721d3d5fca3 <- something like this is what a FIRS primary industry is, I think ..
12:57:29  <TrueBrain> writing RPN is hard :P
12:57:34  <TrueBrain> now the question is, can I actually parse this
12:57:49  <TrueBrain> need to fix cargo labels for sure :)
12:59:01  <LordAro> if you're not careful you'll invent nml2.0 :p
12:59:53  <TrueBrain> I really hope not :P
13:00:16  <TrueBrain> I am mostly balancing .. am I going to do something that is easy to parse
13:00:18  <TrueBrain> or easy to write
13:23:02  <TrueBrain> why is there an "again" in action2 industry cb ..
13:26:13  *** D-HUND is now known as debdog
14:28:03  *** gelignite has joined #openttd
14:40:50  *** Smedles has quit IRC
14:49:27  *** glx has joined #openttd
14:49:27  *** ChanServ sets mode: +v glx
14:57:53  <TrueBrain> adding list support while remaining an RPN is hard :P Right, tons of updates, I think this might actually work :)
14:59:21  *** supermop_Home has joined #openttd
14:59:28  <supermop_Home> yo
15:03:19  <TrueBrain> found a use-case for "again" .. to cap the stockpile. Which is funny, as there is no need, but knowing how to do it in one go in NML is .. non-trivial :)
15:03:47  <TrueBrain> @calc 4096 / 3 * 256 / 74
15:03:47  <DorpsGek> TrueBrain: 4723.315315315315
15:20:06  *** Gustavo6046 has joined #openttd
15:30:36  *** Gustavo6046 has quit IRC
15:35:11  *** Gustavo6046 has joined #openttd
15:37:53  <glx> remember "again" is from NFO time
16:27:09  *** nielsm has joined #openttd
16:36:11  *** frosch123 has joined #openttd
16:38:21  <frosch123> TrueBrain: i think andy stored some temporary values in persistent registers for debugging. the in-game inspect window shows persistent registers, so you can use them like printf-debugging
16:38:54  <TrueBrain> So the comments told me, yes. Still funny :D
16:39:05  <glx> and temp registers are valid for current run only
16:44:14  *** Wormnest has joined #openttd
16:49:25  *** WormnestAndroid has quit IRC
16:50:26  *** WormnestAndroid has joined #openttd
16:54:30  *** WormnestAndroid has quit IRC
16:55:05  *** WormnestAndroid has joined #openttd
16:55:43  *** jottyfan has joined #openttd
17:01:23  *** Flygon has quit IRC
17:17:51  <TrueBrain> meh; I can compile Javascript to an AST in Rust easily .. but there is too much things you can do in Javascript you really cannot in NewGRF :P
17:17:57  <TrueBrain> so that would be a frustrating run for developers too
17:18:20  <frosch123> yeah, not turing complete :)
17:18:52  <TrueBrain> so I guess I should try to convert my RPN-language to NewGRF .. I think this could work
17:18:59  <TrueBrain> at least it is more readable than NFO :P
17:19:24  <frosch123> not sure about that :p
17:19:49  <TrueBrain> at least you can use variable names instead of numbers ;)
17:20:08  <TrueBrain> if you have better suggestions, I would love to hear them btw :)
17:20:44  <TrueBrain> but .. it is tricky :)
17:21:11  <frosch123> i only used RPN for terms, never for assignments or even function declarations
17:21:17  <frosch123> so, no idea :)
17:21:22  <TrueBrain> it is also not really meant for it :P
17:21:41  <TrueBrain> but I just designed a stack-based language, which RPN is too
17:21:42  <frosch123> i did not quite understood what your "global" namespace is
17:21:47  <frosch123> but maybe not important :)
17:21:49  <TrueBrain> persistent registers
17:21:54  <TrueBrain> couldn't find a better name
17:22:08  <frosch123> why are they global? they are part of the industry instance
17:22:15  <TrueBrain> mostly as I hate writing the word persistent, I have to admit :)
17:22:18  <frosch123> so i would expect "industry" namespace
17:22:32  <TrueBrain> I guess
17:22:40  <TrueBrain> felt equally weird
17:22:49  <frosch123> &industry::memory 123 []
17:23:14  <frosch123> &town::memory 123 []
17:23:14  <TrueBrain> also considered calling it "static"
17:23:25  <TrueBrain> well, "memory".. the idea is that you don't need to know the slot
17:23:27  <TrueBrain> you just give it a name
17:23:33  <TrueBrain> and the backend will assign it a slot
17:23:38  <frosch123> "grf::params 12 []" are readonly though
17:23:42  <TrueBrain> that is a bit the point .. not have to deal with numbers ;)
17:24:01  <TrueBrain> so "industry:my_variable_name"
17:24:36  <TrueBrain> guess "persistent:" would match NewGRF specs more
17:25:02  <frosch123> "persistent" would be for indexed-access again, like "memory" above
17:25:12  <TrueBrain> "persistent:my_variable_name"
17:25:16  <TrueBrain> I don't see what you mean?
17:25:19  <frosch123> the important part is the scope: industry, town, grf
17:25:22  <TrueBrain> I can type it just fine :)
17:25:39  <frosch123> "industry::my_variable_name" is different from "town::my_variable_name"
17:25:44  <TrueBrain> that is true
17:25:49  <frosch123> or "grf::my_variable_name"
17:26:03  <TrueBrain> I see you write too much C++, with all those double : :P
17:26:25  <frosch123> oh, i did not even notice you used single :
17:26:33  <frosch123> already corrected that when reading
17:26:37  <TrueBrain> :D
17:27:13  <frosch123> there was some other thing that used single :, i hated it... was it xml?
17:27:28  <TrueBrain> most things I know use a single : for scoping
17:27:33  <TrueBrain> it is only C++ that was like: NAH, one isn't enough
17:27:52  <TrueBrain> still no clue why they wanted two
17:28:10  <frosch123> so it gets a different token than : in ?:
17:28:13  <glx> maybe because it's easier when use in ternary operator
17:28:33  <frosch123> old c++ cared about tokens, then they allowed closing two < < with >>
17:28:48  <TrueBrain> yeah .. I was about to make similar remarks :P
17:29:07  <TrueBrain> at least it is not Perl, where you can make choices when parsing it :P
17:29:35  <TrueBrain> but okay, in this RPN spaces define the tokens, so it becomes a bit easier .. no doubts about any of that stuff :)
17:30:09  <TrueBrain> hmm, your remark does remind me that "openttd:" is also a bad scope
17:30:12  <TrueBrain> as it can be industry or town too
17:31:57  <frosch123> "openttd:" would be for vars 00-39 ?
17:32:09  <TrueBrain> I didn't actually look at things in that much detail
17:32:13  <TrueBrain> NML doesn't prefix it at all
17:32:17  <TrueBrain> which was mostly what was frustrating me :D
17:32:24  <frosch123> there is a TODO item for nml to add prefixes :)
17:32:51  <TrueBrain> how many times I was like: this name ... who defines it? FIRS? No .. NML? No .. owh, wait, here in FIRS? No .. owh, here in NML? Ah, yes!
17:32:52  <frosch123> currently NML has this PARENT/SELF thing in every switch, which makes combining them difficult
17:33:09  <frosch123> TrueBrain: don't mistake NML with pyNML :p
17:33:14  <TrueBrain> so I mainly wanted to make that a bit more obvious :)
17:33:24  <TrueBrain> no, when I write FIRS I mean pyNML :P
17:33:59  <TrueBrain>  ${cargo[0]}: (${cargo[1]} * production_level * LOAD_PERM(${industry.perm_storage.base_prod_factor}) * LOAD_TEMP(9)) / (16 * 16 * 100);
17:34:02  <TrueBrain> best example of how unclear it becomes
17:34:17  <TrueBrain> ${} is pyNML, production_level is NML, 9 is FIRS
17:34:27  <TrueBrain> it is like .. yeah ... lets not do that plz :)
17:36:52  *** Gustavo6046 has quit IRC
17:40:08  <TrueBrain> see, ideal I think https://gist.github.com/TrueBrain/0d8d7183c6eee45e5ac90bfa57777e29 works better
17:40:13  <TrueBrain> I am just not sure I can parse it :D
17:41:50  *** Gustavo6046 has joined #openttd
17:43:28  <TrueBrain> I wonder how FIRS would look .. lets try
17:44:02  <frosch123> s/min/max :p
17:47:02  <TrueBrain> how to differentiate between "industry" variables (so "SELF") and "industry" persistent registers? Suggestions? :)
17:47:30  <frosch123> industry::storage::your_name ?
17:48:18  <frosch123> though i guess, if you also need names for temporaries... you would end up with industry:persistent:your_name again :p
17:52:42  <andythenorth> lol yes the templating breaks my brain
17:52:50  <andythenorth> I really try to avoid looking at it
17:53:46  <andythenorth> it's better than the edition which used CPP variadic macros in nfo-but-via-renum
17:53:54  <andythenorth> that was ..... oof
17:57:49  <TrueBrain> https://gist.github.com/TrueBrain/0d8d7183c6eee45e5ac90bfa57777e29 <- that is how FIRS would look in Javascript, give or take mistakes
17:58:33  <TrueBrain> just no clue if that is convertible to GRF ..
17:58:42  <TrueBrain> I know the RPN can be done, or at least, I know for 90% it can
17:59:36  <TrueBrain> main issue is that it is part templating, part pass-through ... :D
18:01:07  <TrueBrain> why btw is there no industry cb without using registers but with telling what cargo ? :)
18:01:15  <TrueBrain> at least, how I read it, I can either only do the first 3 cargoes
18:01:18  <TrueBrain> or use the register version
18:01:23  <TrueBrain> it consumes so much registers :P
18:03:24  <frosch123> the no-register version is pretty useless
18:03:40  <TrueBrain> exactly!
18:03:43  <frosch123> when you deliver 1000 input, and the no-register version consumed 5, you have to call the thing 200 times
18:03:48  <TrueBrain> well, I guess I can use the "again" to only use 1 register ..
18:04:09  <frosch123> only 256 times until ottd says "grf broken"
18:04:37  <glx> ottd says broken on 16bit overflow
18:04:57  <TrueBrain> frosch123: I don't get that one, sorry .. 1000 input ? 1000 different cargoes? Or 1000 units of cargo?
18:05:05  <glx> https://github.com/OpenTTD/OpenTTD/blob/master/src/newgrf_industries.cpp#L614
18:05:07  <frosch123> 1000 units of cargo
18:05:18  <frosch123> delivering 1000 units within 256 ticks is not unreasonable
18:05:24  <TrueBrain> why does it have to call again if you only consume 5? If you set the "again" flag?
18:06:29  <frosch123> i don't understand your question. sound like "why is there a division operator, if you can just subtract the same amount until you reach zero"
18:07:13  <glx> a delivery can be of any numbers, but the callback has fixed values
18:07:15  <TrueBrain> and I don't understand what you were trying to say :P
18:07:18  <TrueBrain> so stale-mate! :)
18:07:37  <TrueBrain> you say: "you have to call the thing 200 times"
18:07:39  <TrueBrain> I don't get that part
18:07:44  <TrueBrain> that is what I was asking :P
18:07:48  <TrueBrain> a politer way of saying: huh?
18:07:49  <TrueBrain> :)
18:08:06  <glx> because you want to consume the 1000 received items
18:08:11  <frosch123> i mean: a industry-production callback always has to check the amount of cargo delivered, divide/multiply that number with something, and then return the result as output production
18:09:07  <frosch123> i.e. "output = input / 8" vs "while (input > 8) { input -= 8; output ++; }"
18:09:24  <TrueBrain> what does that have to do with the register version or not?
18:09:41  <glx> register version can dynamically adapt the values
18:09:47  <TrueBrain> (the reason I ask is because I start to wonder if I am not missing something here :D)
18:09:51  <frosch123> "output = input / 8" is the register version. the "while" is the non-register version with "again"
18:10:19  <TrueBrain> I don't follow .. I can always just look at incoming_cargo_waiting not?
18:10:25  <TrueBrain> and do input / 8 in both cases?
18:10:34  <TrueBrain> owh, no, okay, I get what you mean
18:10:42  <TrueBrain> I was thinking in a bit longer switch-statements :D
18:11:07  <glx> so instead of repeating 5 input gives 5 output, you can directly do 1000 input gives 1000 output via the registers
18:12:23  <frosch123> the non-register version is only useful for primary industries, which use prod_level
18:12:36  <frosch123> i think there is some flag somewhere to multiple the results of the cb with prod_level
18:12:41  <frosch123> (don't use it :p )
18:14:24  <TrueBrain> outputs[cargo.label] = cargo.multiplier * industry.production_level * industry.storage.base_prod_factor * industry.storage.current_production_level / 16 / 16 / 100;
18:14:32  <TrueBrain> at least it is more clear than the FIRS variant :P
18:15:02  <TrueBrain> it will be a very small subset of Javascript that can be supported .... but can it be done .. hmm
18:15:17  <TrueBrain> will it hurt me somewhere :)
18:16:08  <TrueBrain> signed vs unsigned might be tricky
18:16:35  <frosch123> yeah, NML users noticed :p
18:17:03  <glx> 15bit signed hits very hard
18:17:22  <TrueBrain> normally I would say: just use signed everywhere, but I am sure there are cases that is not optimal
18:18:46  <frosch123> as glx said. the problem is that not everything is 32bit, some things are 15bit, and when using 15bit things in 32bit computations, you have to know whether to sign-extend or not
18:19:12  <TrueBrain> yeah, and the facts that the advanced varact2 has different operators for signed vs unsigned
18:19:15  <TrueBrain> doesn't make it any easier ;)
18:19:27  <TrueBrain> when I use the Javascript approach, I have nothing to base that decision on :)
18:19:29  *** gelignite has quit IRC
18:19:56  <frosch123> ah yes, "grf has no strings" is compatible to "everything is a string" :p
18:20:03  <frosch123> *incompatible
18:20:22  <TrueBrain> the typelessness is more the issue :)
18:21:08  <glx> and procedures can work on full 32bit, but the return value is still 15bit
18:22:33  *** J0anJosep has joined #openttd
18:23:19  <TrueBrain> right ... so .. with the RPN I know I can deliver, and I know the footprint will be small
18:23:29  <TrueBrain> with Javascript .. I am not 100% sure, and I am unsure about the footprint
18:23:42  <TrueBrain> but .. Javascript would be 10000 times easier to write in for 99% of the users
18:26:05  <andythenorth> am I the 1%? :D
18:26:18  <TrueBrain> you writing RPN? That sounds like a disaster :P
18:26:19  <TrueBrain> sorry :)
18:26:26  <andythenorth> RPN looks quite appealing
18:26:34  <andythenorth> I've never done it, but it looks cool
18:26:44  <TrueBrain> it is really easy to mess up
18:27:19  <frosch123> but you can transform RPN into a graph
18:27:24  <frosch123> not so easy with JS
18:27:42  <TrueBrain> why do we want a graph?
18:28:22  <TrueBrain> mostly what I like about RPN, that I can stream it. I only need to read it once, and I have the answer at the end. With Javascript I need to build the AST, do reasoning on it, before I can output the result. Will take more CPU etc etc
18:28:29  <frosch123> i though the idea was: RPN in backend, user draws flow-diagram in frontend, or switches to advanced RPN mode
18:28:52  <TrueBrain> no, the idea is: use a templated variant, or an advanced mode
18:28:54  <TrueBrain> both use RPN :)
18:29:13  <TrueBrain> mainly as I found out that these functions are way too complex for visual languages :P
18:29:52  <TrueBrain> but I guess you are not wrong .. with an RPN it is always possible to experiment with it
18:33:17  <TrueBrain> pro for JS, syntax highlighters already exist :P
18:34:05  <frosch123> not sure you can syntax-highlight in RPN :p
18:34:15  <TrueBrain> me neither :D
18:34:22  <frosch123> but you can do something like bracket-highlight
18:34:44  <frosch123> highlight the child nodes of the operation at the cursor
18:35:29  <frosch123> preview as graph, preview as infix, ... etc
18:35:45  <TrueBrain> infix?
18:36:16  <frosch123> you enter "input 8 / &output =", preview says "output = input / 8"
18:36:52  <TrueBrain> lol, you flipped the left and right of the = operator from what I did
18:36:58  <TrueBrain> and it is one thing I kept wondering about while writing the RPN
18:37:12  <frosch123> oh, my mistake :)
18:37:14  <TrueBrain> it is a funny problem :)
18:37:18  <TrueBrain> it happens everywhere
18:37:26  <TrueBrain> similar with dict lookuips
18:37:29  <TrueBrain> dict key []
18:37:31  <TrueBrain> or key dict []
18:38:09  <TrueBrain> okay, decided to drop the &
18:38:17  <TrueBrain> it is not needed, so don't annoy the user with it
18:38:31  <frosch123> yay \o/
18:39:10  <frosch123> fewer sigils is always better
18:39:21  <TrueBrain> yeah, really trying to minimize the keywords and operators
18:39:22  <TrueBrain> too
18:39:53  <TrueBrain> the one thing that is a problem in both languages .. assigning register slots
18:40:01  <frosch123> https://xkcd.com/1306/ <- extend with truegrf at the next bottom :)
18:40:07  <TrueBrain> I need to do loop unrolling I think
18:40:12  <TrueBrain> so I can do it then, I think
18:40:26  <frosch123> do you have a use-case for loops?
18:40:28  <TrueBrain> can I lookup register X, where X is in register Y?
18:40:32  <TrueBrain> (in NewGRF)
18:40:36  <TrueBrain> or do they have to be fixed?
18:41:22  <TrueBrain> FIRS is full of examples of loops
18:41:25  <frosch123> the 60+x parameter can be a register, so you can address persistent storage via register
18:41:28  <TrueBrain> but they are all static loops
18:41:30  <frosch123> but you cannot address regular variables
18:41:36  <TrueBrain> preprocessor loops?
18:41:39  <TrueBrain> give them a name :)
18:41:54  <frosch123> better use functions imo
18:41:57  <TrueBrain> okay, tnx frosch123
18:42:22  <TrueBrain> take https://gist.github.com/TrueBrain/58a388d5e396bba3ae3ec721d3d5fca3#file-truegrf-primary-firs-rpn-L81 as example
18:42:23  <frosch123> subfunction(0, cct:MAIL); subfunction(1, cct:COAL) is plausible to me
18:42:26  <TrueBrain> just no way you can do that without a loop, and without going insane :P
18:42:32  <frosch123> loops are probably work-around for other things
18:42:57  <TrueBrain> I do not really mind the loops; keeps the code somewhat readable
18:43:14  <TrueBrain> I just wonder how far to go in supporting them :P
18:43:33  <TrueBrain> I don't mind if they have to be unrollable by the preprocessor
18:43:37  <TrueBrain> that is a fine requirements for me
18:44:16  <frosch123> haha, i like how the loop is unrolled inside the comment :p
18:44:25  <frosch123> but with a typo
18:47:57  <glx> the second 27 is not a typo
18:49:12  <frosch123> not?
18:49:18  <TrueBrain> it is the length value
18:49:23  <glx> it's the length of the list
18:49:36  <TrueBrain> it is a stack-based language, so after the values of a list, is an entry to indicate the length of the list
18:49:42  <TrueBrain> otherwise you can't search the list on the stack :)
18:52:12  <frosch123> i did not even notice it was a RPN link, i thought it was firs pynml :p
18:52:29  <DorpsGek> [OpenTTD/OpenTTD] DorpsGek pushed 1 commits to master https://git.io/JSS83
18:52:30  <DorpsGek>   - Update: Translations from eints (by translators)
18:52:39  <TrueBrain> I do not know what to think of this :P
18:54:07  <TrueBrain> https://gist.github.com/TrueBrain/58a388d5e396bba3ae3ec721d3d5fca3 <- RPN
18:54:10  <TrueBrain> https://gist.github.com/TrueBrain/0d8d7183c6eee45e5ac90bfa57777e29 <- JS
18:54:16  <TrueBrain> I am still ... in doubt :)
18:54:47  <TrueBrain> both about equal in length
18:56:15  <TrueBrain> I guess if I do a proper RPN, the def{ stuff would be like: "def{ .. } name = "
18:56:28  <TrueBrain> but ... that would make implementations rather complex :P
18:57:33  <TrueBrain> I did reduce the keywords to "def{", "loop{", switch and call
18:57:54  <TrueBrain> could change "call" into ()
18:58:21  <TrueBrain> procedure calls accept 1 parameter, not? Hmm .. do I want to allow that ..
18:58:47  <andythenorth> oh dear
18:58:56  * andythenorth now working out how to python template RPN or JS :P
18:59:15  <andythenorth> I already python templated GS :P
19:00:49  <TrueBrain> a procedure also returns a value
19:00:50  <TrueBrain> meh
19:00:56  <TrueBrain> why bother ...
19:02:08  <TrueBrain> ah, procedure variable is what procedure to execute ofc, not the parameter .. good; saves me from adding any of that :D
19:05:23  *** Gustavo6046_ has joined #openttd
19:06:04  <frosch123> since you mentioned it, i keep on thinking that "index dict []" would be easier to implement...
19:06:24  <frosch123> index can be an expression, dict never is
19:06:25  <TrueBrain> implementation wise it really doesn't matter :)
19:06:42  <TrueBrain> [] just looks at stack-1 and stack-2
19:06:43  <TrueBrain> that is it :)
19:06:57  <TrueBrain> or do you mean: easier to write?
19:07:31  <frosch123> no, i mean compiling to grf. va2 also is somewhat a RPN thingie
19:07:39  <frosch123> but you cannot store a dict-address in a grf-register
19:07:53  <frosch123> so when compiling the "dict []" part becomes a single instruction
19:07:53  <TrueBrain> no, I need my own stack anyway while parsing the RPN
19:07:58  <frosch123> while the "index" can be multiple
19:08:19  <TrueBrain> how I plan to create this, is a simple lexer that looks for spaces
19:08:23  <frosch123> anyway, i strongly favour the RPN version.
19:08:33  <TrueBrain> so it first finds, for example "dict", and stores the reference to the dict on the stack
19:08:33  <frosch123> the JS version is reinventing NML :p
19:08:46  <frosch123> it's cooler to have a RPN format, that other things can compile to
19:08:52  <TrueBrain> next it finds "index", stores reference on stack
19:08:59  <TrueBrain> next it finds "[]", which is an operator
19:09:03  <TrueBrain> it looks up stack-1 and stack-2
19:09:07  <TrueBrain> and outputs GRF based on it
19:09:18  <TrueBrain> so from a compiling point-of-view, the order is not relevant, I think
19:10:12  <TrueBrain> if "index" was instead "1 1 +", for example
19:10:15  *** Gustavo6046_ has quit IRC
19:10:22  <TrueBrain> the + would already resolve stack-1 and stack-2 into a single stack entry again
19:10:23  *** Gustavo6046_ has joined #openttd
19:10:54  <TrueBrain> hmm, and that is a valid point for the RPN .. you can make anything compile to the RPN .. it is harder to make other things compile into Javascript
19:11:22  *** Gustavo6046 has quit IRC
19:11:23  <frosch123> "industry.persistent 1 1 + []" would compile to "1 load_const 1 + load_persistent"
19:11:47  <frosch123> "1 1 + industry.persistent  []" is almost the same as "1 load_const 1 + load_persistent"
19:12:16  <TrueBrain> currently I am under the assumption "dicts" actually never go to GRF
19:13:52  <TrueBrain> hmm .. I do would like to support the NewGRF range switches, so you can quickly jump to something based on ranges .. how to call that? "switch"? "[...]" (just some random non-existing operator)? "lookup"?
19:15:08  <frosch123> i think if-cascade is easier in RPN
19:15:43  <TrueBrain> well, a loop-if-cascade in that case
19:15:45  <TrueBrain> for lists
19:15:53  <TrueBrain> as that is the actual case for me currently :D
19:16:15  <frosch123> "default result1 range-start1 range-end1 IFRANGE result2 range-start2 range-end2 IFRANGE"
19:16:51  * Gustavo6046_ double-checks his arsenal of large trouts
19:16:52  <TrueBrain> yeah, I went for something slightly different there ;)
19:17:12  *** Gustavo6046_ has quit IRC
19:17:14  *** Gustavo6046_ has joined #openttd
19:17:15  *** Gustavo6046_ is now known as Gustavo6046
19:17:17  <TrueBrain> mainly what I noticed that "end" is just "start + 1" - 1
19:17:32  <Gustavo6046> fixed nickname
19:18:01  <TrueBrain> so I went with: range1 range2 range3 3 result1 result2 result3 3 value switch
19:18:09  * Gustavo6046 looks menacingly at andythenorth, holding a large trout
19:18:12  <TrueBrain> if value is between [range1, range2), it returns result1
19:22:04  <TrueBrain> but the simple case in RPN is simple: default result1 range1 value > result2 range2 > result3 range3 >
19:24:20  <Gustavo6046> what is that weird language?
19:24:26  <Gustavo6046> it almost looks like a stack based language
19:24:41  <Gustavo6046> like Forth, kind of
19:25:39  <TrueBrain> an RPN, yes
19:26:22  <TrueBrain> right, less keywords is better, so away with "switch" .. just a bit sad frosch123 , that one of the things NewGRF does supply, I won't be using :D
19:29:12  <Gustavo6046> TrueBrain, I was about to ask what RPN stood for but I realized it's reverse Polish notation
19:29:14  <Gustavo6046> :D
19:30:58  <supermop_Home> I still have an rpn HP calculator
19:32:32  <Gustavo6046> what about un-reverse Polish notation?
19:32:37  <Gustavo6046> oh wait, that's just Lisp, isn't it
19:32:51  <TrueBrain> postfix vs prefix languages
19:32:53  <TrueBrain> both exist, yes :)
19:33:49  <Gustavo6046> yeah
19:34:03  <Gustavo6046> C has infix operators but its function calls are kind of like prefix notation
19:37:16  <TrueBrain> https://gist.github.com/TrueBrain/58a388d5e396bba3ae3ec721d3d5fca3 updated, now with a header that explain the language a bit more.
19:37:31  <TrueBrain> the only two keywords remaining are "def{" and "loop{"
19:40:14  <TrueBrain> frosch123: similar, is A B > like "A > B" or "B > A" .. depends on how you look at "stack" :D
19:40:38  <Gustavo6046> function pointers are fun to play with
19:40:46  <Gustavo6046> but iirc they get in the way of optimization, right?
19:44:21  <frosch123> TrueBrain: those are like division
19:44:27  <TrueBrain> yeah
19:44:27  <frosch123> so A > B
19:44:36  <TrueBrain> lets keep the order of operations from left to right, yes :)
19:44:53  <TrueBrain> no need to hurt us any more than needed :P
19:45:50  <supermop_Home> andythenorth how do you draw good stonework noise in a way that is reuseable?
19:46:03  <supermop_Home> or do you redo it for each sprite?
19:46:17  <andythenorth> supermop_Home I try not to do it :P
19:48:18  <andythenorth> supermop_Home I would just redraw it each time I think
19:48:33  <supermop_Home> oof
19:48:41  <supermop_Home> my walls don't look good
19:48:51  <supermop_Home> especially lava rock
19:49:07  <Gustavo6046> TrueBrain, masochism comes in degrees, sometimes we're ok hurting ourselves a little bit, but not any more than that
19:49:25  <Gustavo6046> lol
19:49:44  <TrueBrain> still in doubt about [] frosch123  :) Main reason I picked the current order, is becomes of this: "list key [] 1 =" <- if I do it reversed "key list [] 1 =", it is hard for me to see it manipulated "list".
19:49:57  <TrueBrain> but I think it will be one of those things ... lets make a parser first, and see what works and not after :D
19:51:12  <Gustavo6046> TrueBrain, ooh
19:51:23  <Gustavo6046> what if we wrote a simple compiler, that targets that RPN language
19:51:29  *** Wolf01 has joined #openttd
19:51:52  <TrueBrain> another one: true false <condition> or false true <condition> .. :D
19:52:01  <TrueBrain> I went for the first for now
19:52:07  <TrueBrain> feels more natural
19:52:24  <Gustavo6046> yeah
19:54:08  <frosch123> false true <condition> is easier to chain
19:54:14  *** gelignite has joined #openttd
19:54:28  <frosch123> result3 result2 <condition2> result1 <condition1>
19:55:01  <TrueBrain> depends on your frame of reference ;)
19:55:02  <TrueBrain> default result1 range1 value > result2 range2 > result3 range3 >
19:55:03  <frosch123> though for switches you have to keep the switch-value somewhere
19:55:07  <TrueBrain> works fine for me :)
19:58:12  <TrueBrain> hmmm, my if-chain is missing "value" a few times :P
19:58:31  <TrueBrain> but this again is, I guess, reading from left to right or from right to left :D
19:58:33  <TrueBrain> it is really funny :)
19:58:37  <TrueBrain> (to me at least :P)
19:58:44  <TrueBrain> pretty sure there is no right .. just choices :)
19:59:31  <TrueBrain> postfix notation is a bit more trivial in these regards, I guess
19:59:41  <TrueBrain> something like: / 20 10
20:00:01  <TrueBrain> or: > value range1 true false
20:04:12  <TrueBrain> s/postfix/prefix/
20:04:13  <TrueBrain> lol
20:04:28  *** Wolf01 is now known as Guest10406
20:04:30  *** Wolf01 has joined #openttd
20:06:32  *** Guest10406 has quit IRC
20:10:20  <TrueBrain> industry:storage: does have one caveat .. a new version should assign the same variable to the same slot, I guess :P
20:10:27  <TrueBrain> otherwise things might break a bit :)
20:10:58  *** virtualrandomnumber has joined #openttd
20:11:27  *** virtualrandomnumber has quit IRC
20:11:51  <andythenorth> a new grf version?
20:11:58  <andythenorth> with a compatible version bump?
20:12:21  <TrueBrain> FIRS 4.3 and 4.4, those versions, yes
20:13:03  <andythenorth> breaking compatibility with existing savegames is acceptable
20:13:23  <andythenorth> same variable same slot is nice, but variable meanings or valid value ranges etc might change
20:13:23  <frosch123> TrueBrain: the same applies to industry ids, random bits and stuff. i think those "locations" should be defnied when declaring the variable name
20:13:29  <andythenorth> and we have no migration capability
20:13:36  <frosch123> i.e. don't use implicit variable declaration
20:13:46  <andythenorth> the implicit in NML is a complete waste of time
20:13:46  <TrueBrain> you are both right, I think :)
20:13:54  <TrueBrain> I expect with TrueGRF people make a lot of small incremental releases
20:14:08  <TrueBrain> but yeah, I was thinking about explicit variable declaration
20:14:10  <TrueBrain> also for the type
20:14:14  <andythenorth> I try to make small incremental releases with grfs, and preserve compatibility wherever possible
20:14:19  <TrueBrain> that gives two options ..
20:14:22  <andythenorth> but when it's not possible....it's not possible
20:14:25  <TrueBrain> I can keep industry:storage: ..
20:14:32  <TrueBrain> or I can assign a local variable to that
20:15:17  <TrueBrain> so at the top you have to define something like: supplied_cycles_remaining_cargo industry:storage 29 list
20:15:26  <frosch123> andythenorth: there is a difference between "you decide when to break stuff", and "a compiler randomly switches things around, so you cannot even reload newgrf in-game, and always have to restart the game"
20:15:27  <TrueBrain> and: total_delivered local int
20:16:02  <andythenorth> frosch123 this is the problem with NML magical implicit IDs :)
20:16:14  <frosch123> yes, they are useless :)
20:16:24  <TrueBrain> so lets not repeat that for this language
20:16:27  <TrueBrain> what are we calling it ..
20:16:28  <TrueBrain> TrueRPN? :P
20:16:55  <frosch123> just RPN: reverse-polish-newgrf
20:17:01  <TrueBrain> :D
20:17:04  <TrueBrain> I like it ;)
20:17:10  <frosch123> the "polish" sets are known for realism, so reversing that
20:17:34  <TrueBrain> do I need u32 and u15
20:17:41  <TrueBrain> or can I just do u32, and convert where needed? :P
20:17:47  <TrueBrain> (well, i32 and i15 are more important, ofc)
20:18:49  <frosch123> u32/i32 are for storage, u15/i15 are function return values
20:19:45  <frosch123> technically you do not need the 32/15, just U and S
20:20:05  <frosch123> "def func() -> signed" "def func() -> unsigned"
20:20:11  <TrueBrain> now for a syntax to define types ... ugh
20:20:19  <TrueBrain> my functions don't return anything
20:20:20  <TrueBrain> much easier :P
20:20:21  <TrueBrain> just use a temp-register
20:20:23  <TrueBrain> is my answer :D
20:20:53  <TrueBrain> "num_supplies_delivered 27 list unsigned industry:storage type"
20:20:57  <frosch123> can you pass the register as output-reference to the function?
20:20:59  <TrueBrain> that feels a bit icky .. but I guess?
20:21:41  <andythenorth>  do we have enough registers? :P
20:22:16  <andythenorth> some are reserved
20:22:35  * andythenorth looks up the troublesome one
20:23:44  <glx> andythenorth: there are 256 useable registers (except in NML)
20:23:46  <andythenorth> 0x100 for vehicles is the one that kills me every time
20:24:07  <andythenorth> it's reused, which has ... interesting results
20:24:33  <glx> but 0x100 is a write only register from newgrf pov
20:24:49  <andythenorth> yup
20:25:18  <glx> with meaning for the caller depending on the callback
20:25:41  <andythenorth> it's dangerous when using random switch and spritelayers
20:25:48  <andythenorth> or rather...that's not possible :P
20:26:23  <andythenorth> I am still worried what happens if TB looks at Iron Horse
20:26:29  <andythenorth> FIRS is really simple
20:26:55  <frosch123> the problem with 100 is just that both you and nml use it :)
20:28:22  <andythenorth> I just stopped using random switch
20:28:27  <andythenorth> it was the easiest thing
20:29:27  <peter1138> Mmm, which path shall we follow today
20:29:45  <andythenorth> the path of righteousness
20:30:14  <peter1138> The path of refusing to believe in callback ID 1 as it's not documented...
20:34:27  <andythenorth> do newgrf docks use it? :)
20:40:48  <peter1138> Didn't get as far as triggers.
20:41:00  <peter1138> Besides it would all be done wrong.
20:42:01  <andythenorth> what isn't :P
20:46:54  <peter1138> Surfing With the Alien.
20:47:07  <peter1138> 80s guitar indulgence that I'd forgotten about somehow...
20:59:33  *** jottyfan has joined #openttd
21:18:19  *** J0anJosep has quit IRC
21:25:01  <Gustavo6046> four cities have many many busses and mail trucks going through them in a star of orders (asym cargodist), but this heavily congests the road stations
21:25:10  <Gustavo6046> what do I do? maybe replacing them with trains is the best course of action?
21:28:20  <FLHerne> Add links to make it more connected than a star?
21:28:44  <Gustavo6046> I mean, look at this https://i.imgur.com/ZkP4hzl.jpg
21:28:49  <Gustavo6046> FLHerne, links?
21:28:50  <Gustavo6046> Oh wait
21:28:51  <FLHerne> Trains are good, but you might need a lot of demolition to get into the centre
21:29:05  <Gustavo6046> is it even necessary to have them transport in a star with cargodist?
21:29:08  <Gustavo6046> Surely just a loop is enough, right?
21:29:14  <Gustavo6046> Maybe there are downsides
21:29:18  <FLHerne> No
21:29:25  <supermop_Home> turn off breakdowns
21:29:55  <FLHerne> For cdist, network graphs with bottlenecks are usually bad
21:30:00  <FLHerne> all-to-all is ideal
21:30:12  <FLHerne> somewhere in between is probably most practical
21:32:22  <Gustavo6046> ah
21:32:55  *** jottyfan has quit IRC
21:39:57  <Gustavo6046> those orders are something like ABCBDB
21:40:04  <Gustavo6046> supermop_Home, okay
21:43:51  <Gustavo6046> It's also that bus/truck stations tend to get clogged, especially if a vehicle is running early
21:44:02  <Gustavo6046> I would like them to spend the surplus days by going slower than the max speed or something
21:48:40  *** Webster has joined #openttd
21:50:18  *** Gustavo6046_ has joined #openttd
21:50:26  *** andythenorth has quit IRC
21:50:39  <Gustavo6046_> oops
21:50:58  *** andythenorth has joined #openttd
21:51:15  *** Gustavo6046 is now known as Guest10417
21:51:15  *** Gustavo6046_ is now known as Gustavo6046
21:51:27  <Gustavo6046> oops
21:51:31  <Gustavo6046> supermop_Home, yeah, true
21:52:34  *** gelignite has quit IRC
21:53:36  <supermop_Home> https://imgur.com/a/R29AMq6
21:53:58  <supermop_Home> generally road stops in series are not much better than a single one
21:54:23  <supermop_Home> as no vehicle can pass another in the line anyway
21:54:58  <supermop_Home> in parallel at least, a following RV can choose a different stop
21:55:42  <supermop_Home> same with a single stop that the rv could enter from either side
21:55:52  *** Guest10417 has quit IRC
21:56:05  <Gustavo6046> Is there a max length of transfering sequence in a cargodist route?
21:56:09  <Gustavo6046> Like max number of hops between stations
21:56:12  * Gustavo6046 hoppy wallaby
21:56:13  <supermop_Home> in practice, the RV pathfinder seems to cache too much of the vehicles route
21:56:27  <Gustavo6046> supermop_Home, but yeah, I did realize parallel is often better than serial
21:56:35  <Gustavo6046> take that silicon valley :P
21:56:36  <supermop_Home> so a late running vehicle hugs the on time one in front of it
21:56:44  <Gustavo6046> ah
21:56:46  <supermop_Home> and follows it into the same stop
21:56:55  <Gustavo6046> that sounds sweet! they're friends!
21:57:47  <andythenorth> I think someone tried a full mesh for cdist
21:57:52  <supermop_Home> as at the time it choses a route into the closest stop, it doesn't know it will be occupied
21:57:52  <andythenorth> might have been jgr :P
21:58:17  <supermop_Home> drive-in stops are better for this in therory
21:58:21  <supermop_Home> theory
21:58:44  <supermop_Home> as the late RV can leave before the on time one
21:58:58  <supermop_Home> but 1) you can't use articulated RVs
22:00:11  <Gustavo6046> ahh
22:00:14  <Gustavo6046> oooh right
22:00:16  <supermop_Home> and 2) the time it takes RVs to do the movement in and out of the stop is a huge bottleneck that erases most of the late vehicle's chance to catch up
22:00:23  <Gustavo6046> because in a drive-through, they have to exit in the same order they enter
22:00:25  <Gustavo6046> right?
22:00:28  <supermop_Home> yes
22:00:39  <Gustavo6046> what if it's a drive-through followed by a drive-in? o.o
22:00:43  <Gustavo6046> lol
22:01:19  <supermop_Home> the RVs stop at the drive through then pointlessly turnaround in the drive-in
22:01:49  <Gustavo6046> oh
22:01:57  <Gustavo6046> but don't they usually stop at the end, i.e. at the drive-in?
22:02:16  <supermop_Home> not if they just stopped at the drive through on the way there
22:02:21  <Gustavo6046> ahh
22:02:24  <Gustavo6046> hmm
22:03:07  <Gustavo6046> what if there was a stop type that was a weird Frankenstein, but one way only? a single through lane (you can pick the direction), because the space where the other lane would be is instead parking spots
22:03:27  <Gustavo6046> so like an expandable drive-in
22:03:31  *** WormnestAndroid has quit IRC
22:03:37  <Gustavo6046> you could link two lines of those in opposite directions, kinda like two lanes of one-way railway
22:03:37  <supermop_Home> if you have one chronically late RV that's just following the one in front with no chance to pass, its best just to manually stop the on-time RV briefly to let the other pass
22:03:47  *** WormnestAndroid has joined #openttd
22:03:57  <supermop_Home> Gustavo6046 that's been discussed and eagerly awaited for years
22:04:06  <Gustavo6046> :O
22:04:08  <Gustavo6046> I'm not the first one?
22:04:13  <Gustavo6046> (It sounds balanced because of the one-way thing)
22:04:23  <supermop_Home> as part of general new road stop and/or airport paradigm
22:04:28  <Gustavo6046> yayy I think alike to the awesome openttd folks :DDDD
22:04:33  <Gustavo6046> \o/
22:04:47  <Gustavo6046> that does sound like something that would go best in a NewGRF, though
22:05:04  <Gustavo6046> maybe that kind of thing could be API-ified so it isn't as hardcoded? idk
22:05:29  <supermop_Home> it would have to be a patch, because the statemachines for vehicle movement in those is hardcoded
22:06:18  <supermop_Home> this is also why airports that use different runway layouts than standard require a patch
22:06:56  <Gustavo6046> Ah :(
22:07:05  <Gustavo6046> how about a patch that makes them patchable by newgrfs or something
22:07:07  <Gustavo6046> patchception lol
22:07:14  <supermop_Home> the idea is to instead provide some means to make new movement patterns by other means rather than hardcoded
22:07:20  <supermop_Home> yes,
22:07:45  <supermop_Home> someone called rich did some work on it about 10 years ago
22:07:54  <supermop_Home> but it kind of petered out
22:09:22  <Gustavo6046> bitrot?
22:11:34  <Gustavo6046> petered out like in it didn't catch up with openttd development?
22:12:15  <andythenorth> there was a disagreement
22:14:35  *** nielsm has quit IRC
22:17:15  <supermop_Home> Gustavo6046 with trains you can do this at the end of the line that lets a late train pass an early one easily:
22:17:16  <supermop_Home> https://imgur.com/YiHSIh9
22:17:33  <Gustavo6046> ah
22:17:38  <supermop_Home> especially if the there is amble lay-up time
22:18:44  <supermop_Home> i often schedule trains to wait the time between train on the schedule plus a few days at end of line
22:19:15  <supermop_Home> that way train 1 doesn't try to leave until train 2 has arrived and cleared the jenction
22:19:18  <Gustavo6046> ohhh, so if one is coming and another is leaving at the same time, they don't have to wait for one to go through the intersection between station lanes and the two-way rails each time?
22:19:19  <supermop_Home> junction
22:19:56  <Gustavo6046> my layout is often like this, basically a roundabout https://i.imgur.com/iWVrxGI.png
22:19:57  <supermop_Home> basically this is what the subway here does at most end of line terminals
22:20:19  <Gustavo6046> hmm, what if a train wants to leave from the depot into the railway?
22:21:09  <supermop_Home> that's pretty uncommon - that depot is just for buying trains and starting them off
22:21:35  *** _aD has joined #openttd
22:22:02  <supermop_Home> if i wanted to use it for servicing or replacing trains i'd probably design it differently
22:22:30  <Gustavo6046> oh okay
22:22:33  <Gustavo6046> how do you maintain the trains?
22:22:38  <Gustavo6046> or service them, I think that's what maintenance refers to
22:22:43  <Gustavo6046> oh waitttt
22:22:44  <Gustavo6046> you disable breakdowdns
22:22:46  <Gustavo6046> breakdowns*
22:22:53  <Gustavo6046> I forgot :D
22:23:55  <_aD> hey now, where's the challenge, when running 10-unit trains, without servicing? :-D
22:25:21  <Gustavo6046> so, my roundabout station junction design is probably dumb and crapo
22:25:37  <_aD> but is it beautiful?
22:27:52  <Gustavo6046> I don't know, I'll let you be the judge of that. I linked a screenshot earlier
22:28:57  <supermop_Home> https://imgur.com/I7Ae9rO
22:29:21  <supermop_Home> this lets trains replace or service if needed and is still pretty functional
22:29:47  <supermop_Home> you can of course add mor platforms or double the line coming into it
22:30:35  <supermop_Home> again, I've scheduled the trains to wait at the station loading until the next one arrives, but you don't really need to
22:32:36  <Gustavo6046> ah
22:32:45  <_aD> oh that's much more svelte than mine :-\
22:33:02  <Gustavo6046> it's so simple yet so elegant
22:33:15  <Gustavo6046> I generally avoid putting depots behind stations, not sure why
22:33:36  <Gustavo6046> I guess so I can extend the station length if needed?
22:37:32  <_aD> http://simplypeachy.co.uk/journal/wp-content/uploads/2022/01/Quadruplex-Depot-design.png
22:38:02  <_aD> pls excuse the non-path signals, don't taze me bro.
22:38:10  <supermop_Home> i generally like to keep my stations at mines, farms etc as close as possible to simple sidings
22:38:42  <_aD> Service before loading.
22:38:57  <_aD> These were for long-distance journeys...them trains were haulin' for a while.
22:42:35  *** sla_ro|master has quit IRC
22:44:20  <DorpsGek> [OpenTTD/team] frosch123 commented on issue #282: [nb_NO] Translator access request https://git.io/JSDae
22:44:54  <DorpsGek> [OpenTTD/team] frosch123 commented on issue #283: [nn_NO] Translator access request https://git.io/JSDaY
22:50:39  *** frosch123 has quit IRC
23:04:12  *** Gustavo6046 has quit IRC
23:14:06  *** andythenorth has quit IRC
23:27:49  *** Gustavo6046 has joined #openttd
23:30:32  *** Wolf01 has quit IRC
23:36:24  <TrueBrain> https://gist.github.com/TrueBrain/58a388d5e396bba3ae3ec721d3d5fca3 <- added type definition .. now tomorrow we try to actually implement this :P

Powered by YARRSTE version: svn-trunk