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 โต