IRC logs for #openttd on OFTC at 2023-01-21
        
        
        
            โด go to previous day
00:01:17  <petern> Yeah, in general the secrets are... not really that secret.
 
00:03:10  <RatCircus> That's the way I prefer it. Life is short.
 
00:03:57  <petern> Speaking of which, the next level is now... urgh :/
 
00:05:28  <RatCircus> 31's cool. 32's a monster.
 
00:59:32  *** tokai has quit IRC (Quit: c('~' )o)
 
01:47:03  *** WormnestAndroid has joined #openttd
 
02:36:02  *** HerzogDeXtEr has joined #openttd
 
03:13:33  *** debdog has quit IRC (Ping timeout: 480 seconds)
 
03:17:51  *** WormnestAndroid has quit IRC (Ping timeout: 480 seconds)
 
03:18:07  *** WormnestAndroid has joined #openttd
 
04:00:30  *** Wormnest has quit IRC (Quit: Leaving)
 
04:17:20  *** TROILUS has quit IRC (Read error: Connection reset by peer)
 
04:17:21  *** TROILUS9 has joined #openttd
 
04:17:21  *** TROILUS9 is now known as TROILUS
 
05:16:34  *** Flygon_ has joined #openttd
 
05:18:34  *** HerzogDeXtEr has quit IRC (Read error: Connection reset by peer)
 
05:20:29  *** Flygon has quit IRC (Ping timeout: 480 seconds)
 
07:05:36  *** HerzogDeXtEr has joined #openttd
 
07:39:06  <andythenorth[d]> glx[d]: ha I was not paying attention ๐
 
08:11:21  <andythenorth[d]> hmm GS Event processing is incredibly slow
 
08:14:39  <andythenorth[d]> ok my event handling loop was blocking because all towns were being walked by something else
 
08:28:00  <andythenorth[d]> ok so MinimalGS has a main loop every 5 days
 
08:28:02  <andythenorth[d]> `        // Loop with a frequency of five days
 
08:28:02  <andythenorth[d]> local ticks_used = GSController.GetTick() - loop_start_tick;
 
08:28:02  <andythenorth[d]> GSController.Sleep(max(1, 5 * 74 - ticks_used));
 
08:28:56  <andythenorth[d]> if that is removed, the button event handling is ~instant
 
08:29:16  <andythenorth[d]> but then FFWD game speed factor is cut from ~300x to ~8x
 
08:29:28  <andythenorth[d]> devil, deep blue sea
 
08:35:56  <andythenorth[d]> I tried with no-sleep and the GS reduced to minimum, just an event handling loop and month / year counters
 
08:36:12  <andythenorth[d]> GS is quite overhead eh?
 
09:27:22  <TrueBrain> I am closing down the ability to upload a new AI on BaNaNaS
 
09:27:25  <TrueBrain> we have 69 AIs currently
 
09:28:52  <andythenorth[d]> it's TrueBrain ๐ฎ
 
09:36:48  <andythenorth[d]> had an idea that we could run GS on another thread/core, except for commands
 
09:36:53  <andythenorth[d]> but game state might change
 
09:50:50  <andythenorth[d]> do we know why there's a recommended 5 day sleep on GS main loop?
 
09:51:03  <andythenorth[d]> cutting it to a single tick sleep murders FFWD
 
09:51:27  <andythenorth[d]> but a 5 tick sleep seems to preserve about 90% of FFWD speed, whilst responding to button clicks almost instantly
 
09:53:48  <andythenorth[d]> a 10 tick sleep is similar, but I can detect the click delay
 
10:44:36  <andythenorth[d]> how do I make AIOrder.InsertOrder available to GS?
 
10:44:48  <andythenorth[d]> I thought it would just be one line a .h file or something
 
10:44:51  <andythenorth[d]> but my eyes fail
 
10:46:58  <osswix> Stupid dumb question; what language are game scripts even in? I successfully merged two, so maybe I should learn at least the basics so I can make my own in the future.
 
10:49:01  <andythenorth[d]> does the comment `* @api -game` cause the method to be dropped from NoGO?
 
10:49:31  <andythenorth[d]> GS is squirrel
 
10:50:49  <JGR> andythenorth[d]: It's is not included in the GS version of the class, yes
 
11:07:59  *** Wolf01 has quit IRC (Quit: Once again the world is quick to bury me.)
 
11:11:40  <andythenorth[d]> "Fly the plane"
 
11:11:52  <andythenorth[d]> petern: I am sure you are enjoying me dragging you into this ๐
 
11:24:38  <andythenorth[d]> so....can I expose my GS storybook buttons to hotkeys?
 
11:43:42  <Samu> there's many more functions using the global functions when there's already a script one
 
11:43:58  <Samu> should I... replace them all :p
 
11:44:10  *** michi_cc[d] has joined #openttd
 
11:44:10  <michi_cc[d]> Okay, #10380 looks like it would be a gigant conflict if I ever get back to my newmap branch. (Not a criticism against the PR, more against me that I've been procrastinating for like 10 years on that ๐ )
 
11:44:40  <Rubidium> Samu: awful would be using std::map for the tiles of a map
 
11:47:25  <Samu> already gonna fix my rail PR using ::MapSize()
 
11:48:16  <Rubidium> michi_cc[d]: does that change all the fields where stuff gets saved, then yes... that'll conflict in a nasty manner, though otherwise it might reduce the size of the branch if it was mostly about how tile indices are used/stored
 
11:48:36  <Eddi|zuHause> michi_cc[d]: but something like #10380 is also overdue for like 10 years :p
 
11:49:13  <DorpsGek> [OpenTTD/OpenTTD] SamuXarick updated pull request #10376: Fix: [Script] Ensure building/removing rail lines can't be backwards and allow building/removing rail lines coming from or heading to the void https://github.com/OpenTTD/OpenTTD/pull/10376
 
11:51:10  <petern> andythenorth[d]: It's almost like chocks away
 
11:53:54  <andythenorth[d]> petern: we have a no war theme, but I'm considering a 'release bomb' button
 
11:54:14  <Samu> oh, nice, I always wondered why GS's couldn't use some of the AI functions
 
11:54:15  <andythenorth[d]> which demolishes the tile somewhat underneath the plane, but allowing for speed and rate of fall of bomb etc
 
11:54:47  <Eddi|zuHause> we have this fighter jet disaster...
 
11:55:19  <andythenorth[d]> I'm also considering 'release giant cat' button, which will plant one of the object cats
 
11:55:26  <andythenorth[d]> and then giving the GS to yogscast for jingle jam
 
11:55:30  <michi_cc[d]> Rubidium: The main conflict to my branch would be that I switch the map accessors to take a Tile* to avoid the cost of repeatedly getting the appropriate sub-tile for the TileIndex.
 
11:55:44  <michi_cc[d]> But don't let that stop you, I could have worked on that years ago ๐
 
11:55:51  <andythenorth[d]> it's quite plausible that  funny GS would raise ยฃ100k or so for charity on the stream
 
11:56:03  <andythenorth[d]> 'donate to bomb cats'
 
11:56:28  <andythenorth[d]> I would not mind raising ยฃ100k for charity by basically doing stupid scripted things
 
11:57:16  <Eddi|zuHause> michi_cc[d]: shouldn't that be a thing the optimizer should figure out? most of the map accessors should be inline?
 
11:58:21  <michi_cc[d]> It's not about that, but that TileIndex to Tile* becomes somewhat costly. Some clever code rewriting  can mitigate that, but this is way beyond a normal compiler optimization.
 
11:59:42  <Eddi|zuHause> can't we merge Tile and TileExtended and live with the potentially wasted memory?
 
12:01:33  <petern> What problem does that solve?
 
12:02:12  <Eddi|zuHause> simplify the map accessors?
 
12:02:20  <Samu> no one really attempted to make a GS-as-an-AI
 
12:02:27  <Samu> i wonder what kind of bugs will you uncover
 
12:05:53  <Samu> Script_Group is also not accessible to GS
 
12:06:10  <Samu> will you look at that one?
 
12:06:14  <petern> Eddi|zuHause: I don't think it does though.
 
12:07:16  <Eddi|zuHause> petern: but in the context of michi_cc[d]'s approach to pass a pointer instead of an index, it would save passing two pointers in some situations
 
12:08:21  <andythenorth[d]> Samu: ๐ ๐ง :spray_bottle:
 
12:08:49  <andythenorth[d]> 'an AI is just a GS fixed to company mode'
 
12:08:52  <andythenorth[d]> said nobody yet
 
12:09:23  <michi_cc[d]> Well, I do merge both in my branch, but there the end goal is a re-arranged Tile struct that is smaller anyway.
 
12:23:39  <Rubidium> test1 is basically the current code, test2 would be an intermediate variant and test3 would be with merged objects
 
12:30:10  *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
 
12:30:12  *** WormnestAndroid has joined #openttd
 
12:32:04  <petern> Can't see much on mobile, what's the summary?
 
12:32:42  <michi_cc[d]> Rubidium: Definitly interesting. It would de-couple Tile and Map enough that I might not even have to change any map accessor even with a changed map backend.
 
12:33:57  <michi_cc[d]> petern: Pass a wrapper tile class into the map accessors, and let the compiler optimize the wrapper away.
 
12:34:40  <michi_cc[d]> Which means *_map.h is mostly independent on how the map is actually stored.
 
12:35:54  <TrueBrain> I always wondering when talking about map/tiles .. how important is it to us to hold on to the low memory usage of OpenTTD? If it would, say, double, would anyone actually mind? Bit random question maybe, but I always wonder ๐
 
12:37:26  <petern> 32bpp and 4x extra zoom pretty much wiped that out anyway
 
12:37:27  <michi_cc[d]> TrueBrain: I think the important thing is cache usage, not main memory usage, i.e. access patterns.
 
12:37:30  <reldred> I dunno what weโre even getting for the increased memory usage but letโs ball
 
12:37:43  <TrueBrain> michi_cc[d]: I totally agree; read access mostly is what should be really fast
 
12:37:59  <TrueBrain> we used to balance memory-usage too, but I think that is non-sense these days, not?
 
12:38:21  <TrueBrain> petern: didn't even consider that; so yeah, okay ๐ Just funny how times change ๐
 
12:38:22  <Rubidium> adding 4 bytes to the map array is 1 GB for 16kx16k ;)
 
12:38:46  <TrueBrain> Rubidium: pff. nothing we support anyway ๐
 
12:39:45  <TrueBrain> and yeah, you shouldn't have
 
12:39:48  <TrueBrain> really, you shouldn't
 
12:39:53  <TrueBrain> this is not a military game ffs ๐
 
12:40:36  <TrueBrain> funny how the local gov attitude towards you seems to be winning from the bombs ๐
 
12:40:42  <andythenorth[d]> yeah it's in company mode
 
12:40:46  <andythenorth[d]> has to be to control the vehicle
 
12:40:49  <TrueBrain> "No, I refuse your bomb to blow up my house, AS I DONT LIKE YOU"
 
12:40:54  <andythenorth[d]> I might need to flip to and from deity mode
 
12:41:07  <andythenorth[d]> also 'DemolishTile' is not as advertised by Doxygen
 
12:41:13  <andythenorth[d]> it doesn't remove everything on the tile, at all
 
12:41:25  <andythenorth[d]> `Destroy everything on the given tile.`
 
12:41:32  <andythenorth[d]> except objects, industries and protected buildings
 
12:41:35  <andythenorth[d]> and town signs
 
12:41:41  <TrueBrain> would be a weird game ... "a town has to like you for you to destroy it" .. such a weird balance that gives
 
12:41:44  <TrueBrain> first you send it bananas
 
12:41:47  <TrueBrain> then you blow parts up
 
12:41:56  <andythenorth[d]> well it was the early 90s
 
12:42:05  <andythenorth[d]> nothing made sense between 1989 and 1997
 
12:42:33  <andythenorth[d]> anyway we have been neglecting GS and we should pay our dues
 
12:43:44  <andythenorth[d]> hmm clicking 'bomb' too fast actually causes it to become quite non-responsive
 
12:43:56  <andythenorth[d]> due to the events on the queue
 
12:44:09  <andythenorth[d]> maybe I should add spam protection
 
12:44:55  <andythenorth[d]> now trying to write my name in demolished tiles
 
12:45:24  <andythenorth[d]> could do a painter-type game
 
12:46:47  <andythenorth[d]> I wonder if we could enforce some sort of 'performance mode' ๐
 
12:46:53  <andythenorth[d]> with a limited event queue
 
12:47:17  <andythenorth[d]> I don't know much about how UI performance is handled in comp sci ๐
 
12:47:39  <andythenorth[d]> also can we add a plane crash?
 
12:47:55  <andythenorth[d]> I want to add tower defence objects, with a random chance of downing your zellepin
 
12:48:03  <andythenorth[d]> nobody has to die
 
12:48:28  <petern> Rubidium: I did already increase the map size by quite lot without anyone complaining...
 
12:50:57  <petern> Maybe it was silent protest...
 
12:51:32  <petern> I doubled TileExtended.
 
12:51:38  <TrueBrain> that was long ago ๐
 
12:55:12  <Eddi|zuHause> that was basically yesterday
 
12:56:54  <andythenorth[d]> think of the RAM
 
12:57:06  * andythenorth[d] copies the entire map into a GS table
 
12:57:40  <petern> The original split was because making an 8-byte struct 9 bytes would either suck for performance or waste 7 bytes...
 
12:58:13  <TrueBrain> michi_cc[d]: one concern would be that debug builds would be even slower ๐ But I am sure there is something that can be done about that ๐
 
12:59:19  <andythenorth[d]> copying all the tiles into GS only adds about 300MB to 500MB RAM use locally btw
 
12:59:24  <andythenorth[d]> 'probably fine'
 
13:01:10  <andythenorth[d]> 'flag' is retconned
 
13:01:18  <andythenorth[d]> I just tried to draw regular shapes, but it's hard
 
13:01:28  <andythenorth[d]> between the command delay, and my own accuracy ๐
 
13:02:06  <andythenorth[d]> hmm could convert this to peaceable version
 
13:02:10  <andythenorth[d]> could have a tree-planting plane
 
13:03:33  <glx[d]> andythenorth[d]: Not the full tiles, just tile indexes
 
13:04:07  <andythenorth[d]> I copied _some_ of their data, like which town they belong to
 
13:04:11  <andythenorth[d]> not much of it
 
13:05:17  <andythenorth[d]> oops, PlantTree didn't appear to be working
 
13:05:23  <andythenorth[d]> but then again...I had trees hidden
 
13:16:11  <andythenorth[d]> video shows a bit of the control lag, due to command queuing / latency ๐
 
13:20:21  <andythenorth[d]> might do a storybook with one mini-game on each page
 
13:20:30  <andythenorth[d]> think I can make Train Whack! in game now
 
13:21:01  <andythenorth[d]> thinking about writing a python UI generator though, tracking all the buttons in GS is quite bureaucratic
 
13:21:06  <TallTyler> Best news to wake up to
 
13:23:37  <Samu> andythenorth[d], I wonder what ScriptOrder::IsValidVehicleOrder do to a freewagon
 
13:24:42  <andythenorth[d]> I would like to figure out GS UI control
 
13:24:56  <andythenorth[d]> seems like it should be able to open arbitrary windows / click buttons
 
13:25:02  <andythenorth[d]> but I can't find a relevant command
 
13:28:23  <glx[d]> Samu: It will fail, as a wagon can't have order
 
13:28:50  <glx[d]> Unless the API is buggy
 
13:29:06  <Samu> yeah, i wonder what's going to happen
 
13:29:15  <Samu> because IsValidVehicle returns true to free wagons
 
13:29:40  <Samu> IsValidVehicleOrder then proceeds to do some stuff to it
 
13:30:46  <TallTyler> andythenorth[d]: Check out the beginnerโs tutorial GS, it dies at least some of this IIRC
 
13:31:54  <andythenorth[d]> I couldn't find it clicking, only highlighting what should be clicked
 
13:32:00  <andythenorth[d]> but I may be mistaken ๐
 
13:32:17  <andythenorth[d]> I couldn't find a window.open type method either
 
13:38:11  <glx[d]> There is not, because it's not possible as straight forward as closing
 
13:39:03  <glx[d]> We don't have a generic open function
 
13:43:48  <petern> Shall I try making the map non-integer scaled?
 
13:43:53  <petern> I think it would go horribly...
 
13:47:16  <andythenorth[d]> if I make ships controllable, I can do submarine hunter
 
13:47:21  <andythenorth[d]> or actual fishing
 
13:47:28  <andythenorth[d]> or treasure hunt
 
13:47:45  <andythenorth[d]> "You found the gold, bank balance + ยฃ1m"
 
13:57:11  <petern> These guys are fighting each other but can't reach... yay
 
14:07:56  <Samu> tried to append an order to a wagon, the API does pass a lot of tests, reaches ScriptObject::Command<CMD_INSERT_ORDER>::Do
 
14:08:11  <Samu> and return with a CMD_ERROR
 
14:08:24  <Samu> but it executed a lot of tests needlessly
 
14:08:49  <Samu> the early IsValidVehicle passed when it should fail
 
14:09:37  <Rubidium> ghehe... most of the @pre checks for commands are probably essentially duplicate code as the command must check them again in any case (stuff coming from the network cannot be trusted)
 
14:12:51  <Samu> at least free wagons can't really have orders appended
 
14:13:07  <Rubidium> and IsValidVehicle must return true to be able to move free wagons around in the depot, so it must explicitly not fail for things like MoveWagon to still function
 
14:14:35  <Samu> AIOrder.GetOrderCount should return -1 for free wagon
 
14:14:51  <Samu> it currently goes to check how many orders the wagon has
 
14:14:57  <Rubidium> on the other hand, for some other functions you want to exclude those. But alas, that has not been done and might need a review. On the other hand, returning garbage when performing a stupid query is fine as well IMHO
 
14:16:06  *** WormnestAndroid has quit IRC (Remote host closed the connection)
 
14:21:53  <Samu> in groups, i can try move a wagon from a group to another, yeah... i guess i feel a need to fix this
 
14:22:26  <Samu> gonna search all cases of IsValidVehicle in the API and try to do something about it
 
14:34:32  <petern> Rubidium: Not sure what the pre-checks do, I guess they give a better error/warning to the GS?
 
14:37:38  <petern> I don't like the archvile that killed me.
 
14:38:18  <Eddi|zuHause> "(stuff coming from the network cannot be trusted)" <-- do we need a blockchain? :p
 
14:49:25  <andythenorth[d]> I was considering a blockchain in GS
 
14:49:32  <andythenorth[d]> Between companies
 
14:49:49  <andythenorth[d]> Proof of work via cargo transport or similar
 
14:50:04  <andythenorth[d]> Then tradable coins or something
 
14:51:58  <petern> Huh, my older (lol) laptop's display is not working :/
 
14:52:29  <petern> P7450 Core 2 Duo is not that old right?
 
15:00:56  <petern> Release Date: 11/20/2008
 
15:08:41  *** WormnestAndroid has joined #openttd
 
15:10:16  <Samu> Rubidium, should I create a ScriptVehicle::IsPrimaryVehicle
 
15:11:12  <Samu> was thinking fixing it like such: EnforcePrecondition(false, ScriptVehicle::IsValidVehicle(vehicle_id) && ::Vehicle::Get(vehicle_id)->IsPrimaryVehicle());
 
15:11:31  <Samu> IsPrimaryVehicle however is not in the API
 
15:16:19  <glx[d]> API doesn't need to make IsPrimaryVisible, it's really an internal thing
 
15:17:02  <glx[d]> Typing on phone is hard
 
15:18:33  <Samu> it's just that the @pre descriptions will mention a function that doesn't belong to the API...
 
15:18:38  <glx[d]> But it can use it in some places of course
 
15:20:16  <glx[d]> Preconditions are mainly to error early (and in rare case to not trigger asserts later)
 
15:22:55  <Rubidium> conceptually I can imagine that IsValidVehicle should just return true for the primary vehicle, so it's useful in basically all places and then add a IsValidVehicleOrFreeWagon for the depot stuff that actually needs the free wagon
 
15:27:19  *** supermop_Home_ has joined #openttd
 
15:30:11  <supermop_Home_> is there a way to determine not just if a nearby tile of a station is road, but if nearby tile of any in same section is road?
 
15:43:53  <Pruple> don't think so. you can figure out which tiles are adjacent to the section via 41 and test them all, but that's going to get a bit silly. and might create strange results in the case of irregular or overbuilt stations.
 
15:55:01  <Samu> is it okay to ask the number of wagons on a FreeWagon?
 
15:55:33  <Samu> some questions are difficult to answer what's intended, what's not
 
15:58:51  <Samu> i guess it's legit for this one
 
16:00:50  <supermop_Home_> i want to determine a cohesive 'front' of the station at build time, and ideally not have the graphics change
 
16:07:27  <petern> Eddi you 'brave' person.
 
16:13:04  *** gregdek has quit IRC (Quit: Connection closed for inactivity)
 
16:14:08  <Samu> How do I use MoveWagon function, it's so confusing
 
16:15:12  <petern> Why does anyone reply to that person? They are so toxic...
 
16:22:20  <andythenorth[d]> petern: But are you one of the culprits? Or one of the seasoned thugs? I assume you donโt want to be one of the presidents.
 
16:23:14  <andythenorth[d]> I am surprised OzTrans is allowed back given the actual previous transgressions, but eh, big world, room for all
 
16:24:32  <andythenorth[d]> Did we fix all of GS yet? In a branch?
 
16:24:38  <andythenorth[d]> I am shopping
 
16:24:48  <andythenorth[d]> In a mall, with my kids
 
16:25:41  <petern> I may need food, but I'm still hungry from cycling so that's probably a bad idea.
 
16:27:19  <petern> Hmm, -3ยฐC again tomorrow. Maybe one freezing bike ride in a week is enough.
 
16:27:54  <Samu> there's something fishy with MoveWagon
 
16:28:23  <Samu> if i have 2 wagons, i can't swap them
 
16:28:36  <Samu> or i fail to use the command
 
16:28:42  <petern> Free wagons can't be rearranged.
 
16:31:16  <Samu> MoveWagon shouldn't just return true
 
16:31:50  <Samu> could be returning a different front, unless AIs are limited and can't swap
 
16:32:00  <Samu> not sure im using the command correctly
 
16:34:22  <Samu> can move 0 to 1 to swap, but not 1 to 0
 
16:43:47  <petern> You may need to move 0 to 2 to swap -- i.e. place 0 after 1.
 
16:47:56  <Rubidium> michi_cc[d]: that's the begin, I guess there are a lot of places where Tile can be used instead of TileIndex in the non-map-accessor function. Though I guess this is a nice, somewhat, middle ground for review and such. I would like to have the static actual tile data in Map, but that's probably something for a later moment when all the other places have been amended
 
16:49:08  <Rubidium> michi_cc[d]: I'm also wondering about adding + DiagDir functions to Tile, and whether that would be reasonable to implement in your branch
 
16:51:43  *** Etua has quit IRC (Ping timeout: 480 seconds)
 
16:58:03  <michi_cc[d]> Rubidium: Well, specifically for the newmap branch, it would only be efficient if Tile knows its TileIndex, as pointer arithmetics alone wouldn't get you there, unless I'd add a reverse map cache.
 
16:59:16  <michi_cc[d]> But then, nobody knows if my current idea is even the best idea, so don't take it too much into consideration.
 
17:21:43  <Samu> I have a feeling GSVehicle.GetRefitCapacity will assert, need to test
 
17:22:23  <Samu> somewhere on CheckOwnership
 
17:33:58  <Rubidium> michi_cc[d]: currently it does... mostly because I have a few implicit conversions back to TileIndex/uint to not explode this one commit
 
17:35:14  <Rubidium> but then again, what is going to be the next tile when there are two to choose from (tunnel/bridge entrance)
 
17:36:37  <Rubidium> also I could imagine Tile in your case being a TileIndex and ActualTile* or something similar
 
17:38:32  * Rubidium wonders what would be a good game to do map performance profiling with
 
17:41:37  <andythenorth[d]> not Wentbourne?
 
17:45:07  <petern> My web server comes in useful for something at least...
 
17:45:59  <Rubidium> oh, that's a slide show
 
17:50:49  *** Wormnest has joined #openttd
 
18:21:05  <Samu> okay, there is a bug with GetRefitCapacity, I'm OWNER_DEITY, and the command is executed as local company, the player
 
18:21:26  <andythenorth[d]> can we have storybook page animation?
 
18:21:36  <Samu> I mean, the command is issued by OWNER_DEITY, but reaches at the other end as local company
 
18:24:25  <Samu> but something's not quite right here
 
18:25:35  <Samu> nevermind, it's right, this was confusing to follow
 
18:27:18  <Samu> too many commands that can't be queried as OWNER_DEITY
 
18:27:35  <Samu> for such simple reasons like, you're not the owner of the vehicle
 
18:27:55  <Samu> but I'm deity, it should not matter
 
18:28:29  <Samu> need to enter companymode scope
 
18:28:35  <Samu> just to get refit capacity
 
18:29:10  <andythenorth[d]> how do I get a random item from a list in GS?
 
18:29:12  <andythenorth[d]> `town_list.Valuate(GSBase.RandItem);`
 
18:29:15  <andythenorth[d]> is how superlib does it
 
18:29:19  <andythenorth[d]> but I don't understand that
 
18:29:40  <Samu> that valuates the towns in the list to have a random number
 
18:29:40  *** gelignite has joined #openttd
 
18:29:43  <andythenorth[d]> I want to pop one item, randomly chosen
 
18:29:51  <andythenorth[d]> like random.choice()
 
18:29:59  <andythenorth[d]> in a language that doesn't make me cringe
 
18:30:06  <Samu> then just use town_list.Begin(); after doing the valuate
 
18:30:22  <Samu> it picks the highest number 
 
18:31:11  <Samu> picks the town that received the highest number when you did the valuate
 
18:33:18  <petern> Seems a very inefficient way.
 
18:34:51  <andythenorth[d]> Squirrel eat Squirrel, python game
 
18:35:03  <andythenorth[d]> I don't mind Squirrel, I just find it a bit lolz ๐
 
18:35:45  <petern> Oh no, I'm now on the model railway YouTube algorithm.
 
18:36:03  <Merni> this is why I turn off search history and watch history on youtube
 
18:36:12  <Merni> when I want something I'll search for it, dammit
 
18:39:50  <petern> And of course the Lego algorithm...
 
18:40:06  <petern> The Lego Train intersection is real.
 
18:42:33  <DorpsGek>   - Update: Translations from eints (by translators)
 
18:43:34  <imlegos> petern: You mean this?
 
18:43:58  <andythenorth[d]> crashed the game again ๐
 
18:44:06  <andythenorth[d]> I should use debugger or something
 
18:44:12  <andythenorth[d]> crashing the game with GS is trivial for me
 
18:49:36  <dP> TrueBrain: It is important for those who run multiple openttd instances on one server
 
18:51:28  *** Flygon_ has quit IRC (Read error: Connection reset by peer)
 
18:52:17  <Merni> > This branch is out-of-date with the base branch
 
18:52:17  <Merni> > Merge the latest changes from master into this branch.
 
18:52:17  <Merni> Sorry, I'm not an experienced git user, do I have to do something about this? And if so, do I select "Update with merge commit" or "update with rebase"?
 
18:54:47  <andythenorth[d]> we have GSTileList.AddRectangle()
 
18:54:54  <andythenorth[d]> do I miss AddCircle()?
 
18:55:37  <petern> It's a Manhattan Circle.
 
18:55:49  <andythenorth[d]> for the Manhattan Project
 
18:56:07  <andythenorth[d]> lot of people living in that shopping mall
 
18:56:15  <andythenorth[d]> like Dawn of the Dead
 
18:58:51  <andythenorth[d]> newgrf house flag: nuke-proof
 
18:59:16  <andythenorth[d]> Samu will be pleased to know that the same city is chosen every time I reload the game
 
18:59:25  <andythenorth[d]> the same every time
 
19:00:00  <andythenorth[d]> kinda is, makes testing the script more repeatable
 
19:00:19  <andythenorth[d]> will be a PITA if I ever really want to use random between test runs
 
19:00:22  <andythenorth[d]> but I don't ๐
 
19:01:36  <andythenorth[d]> so do player initiated commands also run one per tick?
 
19:01:48  <andythenorth[d]> the UI seems more responsive than that
 
19:02:35  <petern> Have you tried clicking things faster than 30ms?
 
19:05:56  <andythenorth[d]> ^^ that has to run on ffwd as clearing the rects is glacially slow
 
19:06:13  <andythenorth[d]> or maybe it's just the event handling that's slow
 
19:07:47  <JGR> It's probably be quicker if you added a script command to clear by area instead of doing it one tile at a time
 
19:09:33  <andythenorth[d]> "but GS authors must assemble from primitives"
 
19:09:39  <andythenorth[d]> why is AddRectangle there even?
 
19:09:54  <andythenorth[d]> it should be foreach {add to list} over the required tiles
 
19:13:10  <andythenorth[d]> do we need triangles? ๐
 
19:13:34  <JGR> You can do that as a series of lines
 
19:13:53  <JGR> In general minimising the number of commands issued is a good idea
 
19:14:15  <andythenorth[d]> I am struggling to see how to balance
 
19:14:38  <andythenorth[d]> * the apparently intended design to give primitives and avoiding polluting the base game with extra API methods for convenience
 
19:14:53  <andythenorth[d]> * the limit on commands, which makes issuing long sequences of primitives rather costly
 
19:15:19  <andythenorth[d]> I know that RISC won over CISC, but still
 
19:15:45  <andythenorth[d]> I assume people implemented languages and compilers over RISC, I doubt apps are written using ARM machine code ๐
 
19:16:46  <JGR> Each command is sent separately over the network, which is the opposite of the idea of very fast simple primitives in RISC
 
19:21:59  <Merni> andythenorth[d]: what game is this
 
19:24:49  <andythenorth[d]> Merni: War Games, the movie
 
19:26:14  <Merni> a video game that includes bridge and global thermonuclear war would be fun though
 
19:28:37  *** ChanServ sets mode: +v tokai
 
19:30:10  <andythenorth[d]> JGR: I am not very au fait, but does RISC fit more smaller instructions through the CPU per cycle?
 
19:31:29  <JGR> The distinction is a bit fuzzier these days
 
19:33:40  <Eddi|zuHause> andythenorth[d]: the idea is that if you make the instructions smaller, you have more room for optimizing things out
 
19:33:46  <andythenorth[d]> so GS is more like ... I can't find a suitable bacronym
 
19:34:38  <Eddi|zuHause> if you have big instructions, you have lots of setup and cleanup stuff you could leave out if the next instruction builds on top of that
 
19:35:41  <andythenorth[d]> I feel like you could write a blog about how GS could learn from this
 
19:36:22  <Eddi|zuHause> GS has a different problem, because speeding up command processing is impossible. so putting as much as you can into one single command is a better approach
 
19:37:00  <andythenorth[d]> up to some limit of plausibility...
 
19:37:27  <JGR> Eddi|zuHause: "Impossible" seems a bit pessimistic
 
19:37:27  <Eddi|zuHause> but the opposite is true for non-command instructions, since the performance management is built on counting instructions, having big instructions (like, say, "qsort") is circumventing this metric
 
19:38:14  <Eddi|zuHause> JGR: well, in the current architecture, sending a command suspends the script until a tick is processed. and ticks are fixed
 
19:38:21  <Rubidium> I guess the problem is that the GS has been built upon the foundation of the AI, and the AI was meant to only do things allowed to players. Players do not place 100 rail tracks in all kinds of different orientations, they place maybe 3 sections (if they're really fast). So a GS is more-or-less limited to what a human GS could do (though still somewhat faster)
 
19:38:40  <andythenorth[d]> if AI was a subset of GS
 
19:38:45  <andythenorth[d]> locked to one company
 
19:38:49  <andythenorth[d]> and rate limited
 
19:38:54  <andythenorth[d]> would that have been a weird idea?
 
19:39:08  <andythenorth[d]> I know GS was quite emergent, just asking ๐
 
19:40:08  <Eddi|zuHause> andythenorth[d]: if you remove the rate limit for non-command instructions, then people will complain about the game pausing annoyingly
 
19:40:12  <Rubidium> then the pesky thing is still the command processing in ticks, so things work the same in multiplayer :(
 
19:40:14  <andythenorth[d]> the implication being that GS is then only limited by actual performance constraints
 
19:40:52  <andythenorth[d]> Eddi|zuHause: or seriously inhibiting FFWD rate
 
19:40:55  <Samu> IsValidVehicle is ambiguous, if i get vehicle type of wagon 2 of a freewagon chain, it says it's not a valid vehicle
 
19:41:14  <Rubidium> remove multiplayer, and GS can run as many commands as it wants
 
19:41:21  <Eddi|zuHause> andythenorth[d]: only around 3 people care about FFWD speed
 
19:41:37  <andythenorth[d]> just running the GS loop with no sleep reduces FFWD rate by factor of about 35
 
19:41:45  <andythenorth[d]> with sleep: 300x game rate
 
19:41:50  <andythenorth[d]> without sleep: 8x game rate
 
19:42:01  <andythenorth[d]> just handling a main and event loop, no commands
 
19:42:33  <Eddi|zuHause> andythenorth[d]: well without sleep, the script uses up all opcodes every tick
 
19:42:34  <andythenorth[d]> inserting a 5 tick sleep mostly eliminates that effect
 
19:42:49  <andythenorth[d]> I though opcodes were only limited for commands?
 
19:43:04  <Eddi|zuHause> no, opcodes are for everything that isn't a command
 
19:43:07  <andythenorth[d]> it looks more like GS just blocks the main openttd tick loop
 
19:43:13  <andythenorth[d]> but I have no evidence, only guesses
 
19:43:19  <Eddi|zuHause> for every tick you have X opcodes and 1 command
 
19:43:21  <JGR> There is a setting to control for many opcodes scripts are allowed to consume
 
19:43:31  <Rubidium> andythenorth[d]: GS definitely blocks the main tick loop
 
19:47:27  <andythenorth[d]> wonder if anyone ever instrumented it
 
19:48:24  <JGR> GS/AI instances have lines in the FPS window
 
19:49:37  <andythenorth[d]> oh and a memory report ๐
 
19:50:46  <andythenorth[d]> with no sleeps
 
19:51:21  <andythenorth[d]> with a 5 tick sleep
 
19:52:02  <nielsm> if you never sleep and never issue commands in a GS, it will just issue all the computation it can, i.e. limited by the opcodes setting
 
19:52:22  <andythenorth[d]> even a 1 tick sleep
 
19:52:46  <andythenorth[d]> ignore game speed factor in these screenshots, this is all paused, but display didn't catch
 
19:54:49  <andythenorth[d]> well I was recording nuking the map, but on 1 second sleep
 
19:54:55  <andythenorth[d]> but I got a segfault instead ๐
 
19:59:49  <JGR> Your machine/build seems awfully crash-prone
 
20:03:26  <andythenorth[d]> but isn't that general to the mac builds?
 
20:03:31  <Samu> GetName of a freewagon -> Train #0
 
20:03:37  <andythenorth[d]> last time I counted about half the reported crashes were macOS
 
20:03:46  <andythenorth[d]> but the playerbase should be about 5% macOS
 
20:05:44  <Merni> Apple just makes all open source software crash randomly
 
20:06:28  <andythenorth[d]> Apple no longer has the software quality skills to do that reliably
 
20:06:48  <petern> I went shopping. Oh dear.
 
20:06:54  <andythenorth[d]> did you buy a pie?
 
20:07:56  <petern> I bought a crustless quiche which is almost a pie.
 
20:08:10  <petern> Crustless is about half the calories, not that I am counting.
 
20:10:53  <andythenorth[d]> I suppose it is more likely the mac build is flawed
 
20:11:03  <andythenorth[d]> than that our forked old squirrel is creaking under stress ๐
 
20:11:47  <andythenorth[d]> turn sound down first
 
20:12:44  <petern> They were better as flash animations.
 
20:12:52  <andythenorth[d]> make flash great again
 
20:12:58  <andythenorth[d]> GS flash interpreter?
 
20:17:16  <Samu> GetMaxAge and GetAgeLeft on a freewagons returns funny numbers
 
20:18:06  <andythenorth[d]> not an engine is it?
 
20:18:44  <Samu> but dont have a mag age aparently
 
20:19:36  <Samu> am I right that wagons don't have a max age?
 
20:20:19  <Samu> u create so many trains, u should know
 
20:20:32  <andythenorth[d]> try testing it with a GS see what it says
 
20:27:02  <andythenorth[d]> can't repro the segfault
 
20:27:09  <andythenorth[d]> what minigame shall I make next?
 
20:31:22  <andythenorth[d]> Eddi|zuHause town growth via storybook could be a thing, believe there's maybe a way to select the town from a list there
 
20:31:57  <andythenorth[d]> `SPET_BUTTON_VEHICLE
 
20:31:57  <andythenorth[d]> A button that allows the player to select a vehicle, and triggers an event wih the vehicle.`
 
20:32:10  <andythenorth[d]> SPET_BUTTON_TOWN would be a worthwhile addition
 
20:32:15  <Eddi|zuHause> andythenorth[d]: i've literally no idea how a storybook works, or even looks
 
20:32:21  <andythenorth[d]> also SPET_BUTTON_STATION
 
20:32:46  <andythenorth[d]> and UI elements
 
20:32:54  <andythenorth[d]> text, push buttons, some kind of vehicle selection widget
 
20:33:04  <Eddi|zuHause> andythenorth[d]: i've also no intention to learn about it
 
20:33:12  <andythenorth[d]> I mean...I could have just posted in the forums ๐
 
20:33:19  <andythenorth[d]> but you are now the community manager for difficult cases ๐
 
20:33:45  <Eddi|zuHause> i'm the person that says "no, do it yourself"?
 
20:38:23  <petern> Reptol to GS converter.
 
20:39:42  <Eddi|zuHause> you might get some lawyers from TrueScript people
 
20:40:17  <glx[d]> Merni: for OpenTTD projects the rule is rebase, for other projects it may be different
 
20:41:02  <glx[d]> commit checker will fail on merge commit
 
20:41:29  <andythenorth[d]> TrueBrain: when is TrueGS starting? ๐
 
20:42:06  <TrueBrain> How about... never? ๐
 
20:46:59  <Eddi|zuHause> we once discussed this idea about inidividual town personality scripts
 
20:52:13  <andythenorth[d]> probably be better to do personality scripts in grf
 
20:52:26  <andythenorth[d]> with some GS comms
 
21:02:30  <Samu> GetRunningCost on a FreeWagon actually returns the correct cost!
 
21:04:22  <Samu> but I think the command shouldn't be allowed
 
21:05:13  <andythenorth[d]> ok next stupid thing: bad harvests
 
21:05:53  <JGR> Agricultural recessions? ๐
 
21:06:17  <andythenorth[d]> gameplay for that is really annoying, but that's not the point of this
 
21:06:21  <andythenorth[d]> trying to explore the spec
 
21:06:34  <andythenorth[d]> even better idea, migrating fish
 
21:06:47  <petern> Ah the old "farm actually requires its fields" plan?
 
21:07:03  <andythenorth[d]> ok, so fishing grounds move seasonally, but the GS rebuilds all your fishing boat orders for you
 
21:07:23  <andythenorth[d]> requires logging the station, destroying industry, moving it, reconnecting orders to the station
 
21:08:02  <andythenorth[d]> presumably changing an order in a shared order set is just one cmd
 
21:08:21  <glx[d]> would be better to build new, insert order to new, remove order to old, delete old
 
21:08:56  <andythenorth[d]> but reducing production on old also
 
21:09:28  <andythenorth[d]> can GS relocate a city?
 
21:09:37  <andythenorth[d]> let me rephrase that ๐
 
21:09:46  <JGR> I ca't imagine that players will be all that keen on GSs fiddling with their vehicle orders
 
21:09:51  <andythenorth[d]> no they won't
 
21:10:05  <andythenorth[d]> but they won't like their city getting randomly nuked by other players either ๐
 
21:10:14  <andythenorth[d]> or the zeppelin bombing
 
21:11:24  <andythenorth[d]> I'd try and implement Risk, but I hate Risk ๐
 
21:24:08  <andythenorth[d]> ok so I need to influence grf industry production
 
21:24:15  <andythenorth[d]> we have a var for that, with some abuse
 
21:25:21  <andythenorth[d]> hmm, src might know
 
21:26:48  <andythenorth[d]> ok we might want more flags
 
21:28:59  <JGR> They're at the top of that same page
 
21:29:29  <andythenorth[d]> something like a, per cargo 'request to increase production'
 
21:29:37  <andythenorth[d]> and equivalent 'request to decrease production'
 
21:29:40  <andythenorth[d]> would be useful
 
21:29:52  <andythenorth[d]> a signalling channel
 
21:31:49  <andythenorth[d]> and maybe a corresponding event that grfs can emit, 'have increased production'
 
21:31:56  <andythenorth[d]> possibly as a CB result or something
 
21:32:24  <nielsm> don't industries actually have a "production level" property per output cargo...
 
21:32:32  <andythenorth[d]> it's a prop, default 16
 
21:32:48  <JGR> You could add a "write to perm storage" command for maximum flexibility and difficulty of debugging
 
21:33:04  <andythenorth[d]> I asked for "write to perm storage" but was told no, that will never happen
 
21:33:22  <andythenorth[d]> because writing to shared memory is a fail pattern
 
21:38:10  <dP> Rubidium: GS could execute commands instantly if it queued them for network at the time of execution
 
21:39:01  <nielsm> you're saying add async command execution to GS?
 
21:39:08  <glx[d]> main GS limitations comes from the fact it's a derivative of AIs
 
21:39:49  <nielsm> can we implement Promises in squirrel?
 
21:40:17  <nielsm> (actually, does it already have that? I think it has some kind of coroutines)
 
21:40:18  <dP> No, just execute them instantly, you only need to make it so clients get them in the same order
 
21:42:51  <glx[d]> commands are already queued anyway, but the issue will be waiting for the return, the 1 tick delay simplifies the handling I think
 
21:47:27  <Samu> freewagons don't have a reliability right?
 
21:47:49  <Samu> at least scripts are returning 0 from v->reliability
 
21:48:01  <nielsm> only vehicles with motive power have reliability
 
21:48:08  <dP> I'll may try doing insta execution in 13 since callbacks I have will break anyway and reimplementing them would be more hassle
 
21:48:12  <nielsm> in fact, I think only the front vehicle in a train has reliability
 
21:48:21  <Rubidium> dP: that would mean that the server needs to be 1 tick ahead of everybody, I think. After all, it must already be processing the tick and only once everything your tick is done you can send the message that the others can run that tick
 
21:49:09  <dP> Yeah, it will be ahead, but that's totally ok imo
 
21:50:24  <Rubidium> practically that would also meann that the client commands are always delayed by 1 tick, so the player at the server has essentially a 2 tick advantage
 
21:51:49  <dP> Who cares, totally worth having GS suck less
 
21:52:24  <nielsm> would it be unrealistic to have the behaviour different in dedicated server mode?
 
21:52:57  <nielsm> use the current behaviour when there is a local player, but multiple commands per tick from GS in dedicated mode
 
21:52:57  <dP> Can be done but it's more trouble than it's worth
 
21:53:11  <Rubidium> nielsm: that would make debugging harder, as the script will behave differently
 
21:53:46  <glx[d]> ideally even SP should use a hidden dedicated server, so it's possible to easily invite friends
 
21:54:22  <dP> Openttd isn't some competitive FPS for two tick advantage to matter
 
21:55:06  <JGR> glx[d]: This doubles all of your memory and CPU usage costs
 
21:55:53  <Samu> question, are freewagons supposed to have a v->vehstatus?
 
21:56:13  <Samu> well, they have something defined there, but from a script perspective, it's garbage
 
21:56:50  <Samu> but when it's in a depot, VS_INDEPOT is not set
 
21:57:05  <Samu> if (v->IsStoppedInDepot()) return ScriptVehicle::VS_IN_DEPOT;
 
21:57:12  <Samu> this however, returns that state
 
21:57:48  <Samu> okay, i'll let this one pass
 
21:57:52  <supermop_Home_> some 15+ year expired kodak 400 i shot looks like it was all through dichroic glass
 
21:58:52  <Eddi|zuHause> sounds like a disease
 
21:59:39  *** Venemo has quit IRC (Remote host closed the connection)
 
22:08:53  *** keikoz has quit IRC (Ping timeout: 480 seconds)
 
22:15:05  <Samu> how many AIs am I gonna break?
 
22:17:27  <andythenorth[d]> even if the execution model changed, GS still needs some kind of flood protection though?
 
22:17:40  <andythenorth[d]> renice for GS ๐
 
22:27:12  <supermop_Home_> Eddi|zuHause looks like it has a disease 
 
22:28:00  <Eddi|zuHause> supermop_Home_: looks like home video from the 70s
 
22:36:06  <andythenorth[d]> is there godzilla in an object grf?
 
22:36:41  <andythenorth[d]> considering a GS that does this
 
22:36:57  <andythenorth[d]> the aim was to demolish buildings
 
22:38:04  <andythenorth[d]> multiplayer, each player gets a monster
 
22:38:15  <andythenorth[d]> first one to destroy n tiles will
 
22:38:23  <andythenorth[d]> not sure I can count tiles reliably though ๐
 
22:38:47  <andythenorth[d]> probably first one to click 'punch' and 1000 events to the queue wins
 
22:39:45  <andythenorth[d]> I think I can only count events, not individual tiles destroyed
 
22:39:49  <andythenorth[d]> oh I could keep a count of tiles
 
22:39:55  <andythenorth[d]> and discard non-uniques
 
22:42:05  <andythenorth[d]> maybe I just use the giant cats grf
 
22:42:46  <andythenorth[d]> in competitive multiplayer, I could reward players for completing goals
 
22:43:01  <andythenorth[d]> offer a monster attack, for e.g. 1 minute, in a city of their choice
 
22:47:11  *** Etua has quit IRC (Ping timeout: 480 seconds)
 
22:50:45  <andythenorth[d]> ha ha did it again ๐
 
22:52:29  <andythenorth[d]> no clean repro, it's just going to annoy people no?
 
22:52:32  <andythenorth[d]> also patched client
 
22:52:42  <petern> A copy of your script and a savegame might be useful.
 
22:55:33  <petern> Urgh, down to 20/13 after starting at 100/100, and with a megasphere.
 
22:56:53  *** WormnestAndroid has quit IRC (Ping timeout: 480 seconds)
 
22:57:24  <glx[d]> you really should try vcpkg andythenorth[d] or at least find which lib from brew is breaking {fmt} for your build
 
22:58:00  *** WormnestAndroid has joined #openttd
 
22:58:39  <glx[d]> also try to reproduce the GS crash in debugger to catch the exact location
 
22:58:40  <andythenorth[d]> glx[d]: I will, I just need to do it on a day when someone can step me through connecting cmake to vcpkg, in an isolated way
 
22:58:46  <andythenorth[d]> I tried, but failed
 
22:58:54  <Rubidium> andythenorth[d]: I did try to test that issue with the crashing OpenTTD when there is a syntax error. I have run it through valgrind and with the address sanitizer on my computer, and none of them are giving any indications of problems
 
22:59:11  <andythenorth[d]> hmm, ARM specific? ๐
 
22:59:13  <glx[d]> it seems specific to OSX
 
22:59:34  <glx[d]> at least I tried win64 and wsl
 
23:00:00  <andythenorth[d]> I did try vcpkg install, but all I got was broken dev env (because I delete brew) and no toolchains (git etc)
 
23:00:23  <andythenorth[d]> I am sure it is solvable
 
23:00:25  <glx[d]> vcpkg is only for the libs
 
23:00:32  <andythenorth[d]> yeah, I need to isolate that
 
23:00:51  <Rubidium> andythenorth[d]: do you run a debug build or release build?
 
23:00:53  <andythenorth[d]> I tried uninstalling most of brew to force openttd to use the vcpkg libs, but that was as tupid idea
 
23:01:02  <andythenorth[d]> release build for speed
 
23:01:07  <andythenorth[d]> debug is achingly slow
 
23:01:31  <petern> On no, another archvile trap.
 
23:01:50  <glx[d]> you need an extra cmake command line parameter for vcpkg
 
23:01:53  <Rubidium> yeah, though that might mean there is some optimisation bug in the compiler you're triggering
 
23:02:22  <glx[d]> at least nightly builds are also affected
 
23:02:31  *** Wolf01 has quit IRC (Quit: Once again the world is quick to bury me.)
 
23:03:15  <glx[d]> and IIRC beta2 was fine
 
23:03:38  <Rubidium> hmm, did both use the same compiler version?
 
23:04:19  <glx[d]> not sure actions log are still available, but we did some changes in OSX specific code too
 
23:04:49  <andythenorth[d]> ok triggered it again
 
23:05:04  <andythenorth[d]> I don't have a reliable repro, there's some jitter
 
23:05:25  <andythenorth[d]> tomorrow I can do a debug build / attach the debugger and try to repro if that helps?
 
23:05:36  <andythenorth[d]> it could be 30 minutes of clicking a button though ๐
 
23:07:13  <glx[d]> RC1 and beta 1 both use The CXX compiler identification is AppleClang 13.0.0.13000029
 
23:07:16  *** nielsm has quit IRC (Ping timeout: 480 seconds)
 
23:07:41  <glx[d]> so that should eliminate a compiler issue
 
23:08:52  <andythenorth[d]> I have to do some jobs tomorrow, but I can try a vcpkg build
 
23:09:11  <glx[d]> well you should be able to easily reproduce #10361 at least
 
23:10:40  <glx[d]> if using a debug build also crash, it could fill the missing data between [04] openttd              0xba798001003b29c4 (Game::StartNew() + -5009832372984610448)
 
23:10:40  <glx[d]> and [05] openttd              0x00000001003b29c4 (Game::StartNew() + 368)
 
23:11:43  <andythenorth[d]> ok, tomorrow then ๐
 
23:13:36  <andythenorth[d]> oh Auz Objects has gone military ๐
 
23:13:41  <andythenorth[d]> Garry has drawn a lot of tanks
 
23:13:48  <andythenorth[d]> free roam RV mode?
 
23:14:13  *** WormnestAndroid has quit IRC (Ping timeout: 480 seconds)
 
23:14:33  *** WormnestAndroid has joined #openttd
 
23:14:35  *** Samu has quit IRC (Quit: Leaving)
 
23:18:11  <andythenorth[d]> ok, I will re-read the log when I wake up ๐
 
23:52:43  *** Tirili has quit IRC (Quit: Leaving)
 
23:54:10  *** gelignite has quit IRC (Quit: Stay safe!)
 
continue to next day โต