IRC logs for #openttd on OFTC at 2026-01-01
β΄ go to previous day
00:22:32 *** Borg has quit IRC (Quit: leaving)
00:22:54 *** Wolf01 has quit IRC (Quit: Once again the world is quick to bury me.)
01:02:02 *** ChanServ sets mode: +v tokai
01:09:06 *** tokai|noir has quit IRC (Ping timeout: 480 seconds)
01:52:04 <talltyler> peter1138: Whenever you want to PR your desert noise PR, I want to review/approve it π
01:57:58 <reldred> peter1138: please π
01:58:31 <reldred> that and desert rocks are so good.
02:17:36 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
02:17:49 *** WormnestAndroid has joined #openttd
03:02:30 *** WormnestAndroid has quit IRC (Ping timeout: 480 seconds)
03:04:09 *** WormnestAndroid has joined #openttd
03:08:20 *** kikol has quit IRC (Quit: Page closed)
06:16:11 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
06:16:12 *** WormnestAndroid has joined #openttd
06:16:17 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
06:16:33 *** WormnestAndroid has joined #openttd
08:48:09 <peter1138> Morning, happy new year.
08:50:06 <andythenorth> 365 lunches to go
09:00:03 <Rubidium> _zephyris: are you in Hawaii or Alaska? Then I'd guess so, otherwise... seems a bit long :D
09:07:55 <reldred> Might make april 1st release date π
09:09:50 <andythenorth> new Horse this year?
09:13:03 <Borg> anyone can shred me info when NewGRF are instantiated? after all save chunks has been loaded? or on fly?
09:13:39 <Borg> I suspect its the first.. since code loading chunks is sequental.. and after that there is AfterLoad()
09:37:26 <Rubidium> I think it's hidden in the call to GfxLoadSprites in AfterLoadGame
09:42:02 <peter1138> After all chunks have been loaded, but before most (but not all) savegame conversions.
09:42:22 <Borg> GRFListCompatibility gcf_res = IsGoodGRFConfigList(_grfconfig);
09:42:27 <Borg> damn.. this complicates thing..
09:42:53 <Borg> I need temporary storage for chunk loading and then copy data to grf storage
09:42:58 <peter1138> Savegame changes in chunk handlers should only be for structural changes.
09:43:07 <andythenorth> was it lunch yet?
09:43:32 <Borg> peter1138: well, maybe I did it wrong.. but I added psa right into GRFFile class ;)
09:43:33 <peter1138> Is this for Persistent Storage storage?
09:43:50 <peter1138> Because PersistentStorage is already stored in a pool.
09:43:58 <Borg> peter1138: yeah, but pools are for Town storages
09:44:17 <peter1138> The pool stores all persistent storage, for towns and industries.
09:44:31 <Borg> yeah.. this part I dont understand at all
09:44:38 <Borg> that new (index) PersistentStorage()
09:44:54 <peter1138> Well maybe you should understand it instead of butchering it :)
09:45:08 <peter1138> It automagically gets created on the pool.
09:45:17 <Borg> okey, so whats the index thing? Industry ID and Town ID?
09:45:23 <Borg> and those are guaranteed to be unique?
09:45:28 <peter1138> You can then store the resultant pointer, but the pool owns that pointer.
09:45:50 <peter1138> index is the persistent storage id.
09:45:56 <andythenorth> was this global storage?
09:45:59 <peter1138> You don't need to use that constructor.
09:46:07 <andythenorth> grf-global or map-global?
09:46:14 <andythenorth> or map-grf-global?
09:46:23 <andythenorth> or grf-feature-global?
09:47:03 <Borg> andythenorth: grf-world.. aka map-grf-global
09:47:26 <Borg> every GRF loaded (grfid) have its own persistent world (global) storage
09:47:31 <andythenorth> so accessible by any feature?
09:47:45 <Borg> theoretically... for now. only Industries support it
09:47:47 <peter1138> And you should ignore the persistent storage stuff in industry_sl/station_sl, because that's for converting old structures.
09:48:35 <peter1138> In your saveload code, you only need to store the storage ref, not the storage itself.
09:48:49 <andythenorth> hmm train manager with storage
09:49:15 <andythenorth> "you can build 500 Kirby Pauls, but you're only allowed to start 10 of them at any one time"
09:49:52 <Borg> peter1138: I have no clue what are you talking about :( unfortunately.. im C dude..
09:50:06 <Borg> im reading static const SaveLoad _storage_desc[] = {
09:50:16 <Borg> and how SlObject() puts all the data into raw objects
09:50:32 <peter1138> That's how the data in the persistent storage is stored.
09:50:40 <Borg> peter1138: but! my psa storage is not in POOL
09:50:42 <peter1138> But you don't need to do that, because it's already there.
09:50:55 <peter1138> It absolutely should be in the pool. That's what the pool is for.
09:51:40 <Borg> okey.. but how I differentiated Town storage from World storage? or even industry storage?
09:51:52 <Borg> PersistentStorage have only grfid
09:51:54 <peter1138> Why do you need to?
09:52:10 <Borg> peter1138: for accessing it in StorePSA() for example?
09:52:27 <peter1138> Towns already have storage for multiple grfids, so look at how that does it.
09:52:41 <peter1138> In master that uses std::vector<PersistentStorage *> per town.
09:53:01 <peter1138> And the saveload code for that is ONE entry with REF_STORAGE.
09:54:32 <Borg> yeah I saw it.. and I get headache from all that C++ magickery.. templates.. pools..
09:55:52 <Borg> peter1138: I understand how Town storages work.. more of less.. because I looked up StorePSA() of Town
09:56:05 <Borg> it just goes via psa storage pool.. check for grfid.. and store data
09:56:54 <Borg> now... I need just one extra global storage for no-town.. and this part I dont get.. because psa_list is in Town class
09:57:05 <Borg> and so.. there are multiple storages per down
09:57:23 <Borg> src/town.h: std::vector<PersistentStorage *> psa_list{};
09:57:32 <peter1138> I mean, one single `std::vector<PersistentStorage *> _global_storage;` is surely not that hard to grasp?
09:58:02 <Borg> ah.. you mean I should add sth like this? hmm
09:59:03 <Borg> okey.. lets try this then! thx
09:59:24 <Borg> I need to rewrite my world storage first.. then test and then try to play w/ saveload
10:24:18 <kuhnovic> Third coffee this year
10:56:50 *** gelignite has joined #openttd
10:59:30 <Borg> c:/DEVEL/OpenTTD/src/newgrf_storage.h:235:13: error: 'list' in namespace 'std' does not name a template type
10:59:33 <Borg> extern std::list<PersistentStorage *> _world_storage;
11:07:30 <Borg> oh I need to #include <list>
11:10:14 <peter1138> Use std::vector, not std::list.
11:10:27 <peter1138> There is no need for a list here.
11:12:21 <Rubidium> Borg: you're aware of the difference between std::list and std::vector?
11:23:07 <Borg> Rubidium: yeah I know I should use vector most of the time.. but old psa here uses list.. so I use list...
11:23:29 <Borg> have hard time adding extra button World (right before Parent)
11:23:35 <Borg> I wonder if it will crash hard ;D
11:25:11 <Borg> okey :D compiling done.. lets try :D
11:27:58 *** marktheshark3209 has joined #openttd
11:27:58 <marktheshark3209> ufo stuck in road depot... apparantly indefinitly
11:35:13 *** belajalilija has joined #openttd
11:35:22 <Borg> now the hard part [; saveload
11:50:13 <Borg> will see.. compilation done
11:51:02 <Borg> it was easy :D after all
11:51:06 <Borg> okey.. then last questions..
11:51:20 <Borg> where is the best place to clean up my _world_storage
11:51:37 <Borg> because I need to delete all storages and clear list..
11:55:39 <Borg> lets find some global stuff...
11:56:23 <LordAro> marktheshark3209: ooh, fun. i guess the ufo was chasing a vehicle that's stopped (or was destroyed in) the depot?
12:06:04 <Borg> yeah.. C++ fscking magic
12:06:12 <Borg> no clue how those pool are deallocated
12:06:21 <Borg> and more worrying.. where..
12:07:06 <xarick> i need a more descriptive but yet short name for "std map set" - this name made sense when master used buckets for ScriptList
12:07:10 <Borg> ResetNewGRFData() is called in ShutdownGame()
12:07:44 <xarick> master had sets on sets
12:09:49 <xarick> "std map set" is actually a set of optimizations based on JGR's work of delaying this->values initialization until it's really necessary.
12:09:58 <rito12_51026> LordAro I have a problem with moving those doxygen options into the file and cmake in #14926. Because when I move them there, they are not set after checkout to master and #14926 fails on its own test
12:12:03 <xarick> thanks mr. copilot, "jgr lazy init" is a good name
12:12:23 <LordAro> rito12_51026: heh. might be acceptable for the initial merge
12:18:02 <Borg> yeah... its not cleared correctly..
12:19:16 <Borg> I get junk Load.. and then Load again
12:21:50 <xarick> my first screenshot of the year
12:27:14 <Borg> screw it.. added Clear_WorldStorage() to SwitchToMode()
12:32:12 <LordAro> peter1138: don't suppose you feel like PRing your alternative #15002 as well?
12:32:44 <Borg> okey! all works... maybe not the clean implementation.. but its PoC after all [;
12:32:55 <Borg> thx for hints peter1138 and Rubidium :)
12:33:34 <Borg> now I have World Persistent Storage.. accessible via standard stp/ldp with pos >= 0x80
12:33:46 <Borg> its independed of access type (generic or related)
12:33:59 <Borg> if related.. and pos is >= 0x80.. we access world storage
12:40:30 <Borg> 12 files changed, 205 insertions(+), 5 deletions(-)
12:49:24 <_jgr_> LordAro: I'd forgotten about that, I can just update the PR with it
12:59:51 *** WormnestAndroid has quit IRC (Read error: Connection reset by peer)
12:59:52 *** WormnestAndroid has joined #openttd
13:14:50 <Borg> peter1138: it doesnt work correctly.. I had a bad hunch.. and added DEBUG() to storage_sl.cpp and yep.. I see double items now
13:15:02 <Borg> because of that bloody pools
13:21:55 <Borg> yeah.. I need those outside of pool I think
13:22:06 <Borg> everything is loaded earlier
13:22:15 <Borg> storage chunk is loaded at very very end
13:32:06 <Borg> oh screw it.. lets add WorldStorage struct.. out of pool
13:34:55 <Borg> at least I can make it larger..
14:01:24 <peter1138> It's not because of pools. It's because you're doing it wrong.
14:25:20 <Borg> peter1138: yeah, you are probably right.. but I have hard time understanding how to decouple World storage from Towns.. because TileIndex is not saved
14:25:34 <Borg> only grfid.. + index and index is from pool
14:26:33 <Borg> so its much easier for me.. to just introduce WorldStorage out of pool and slap it and the end of save file.. saving grfid + Storage entires.. and when loading. just load them and push_pack to list
14:27:18 <Borg> anyway. happy w/ result.. works.. no duplicate entries in storage pool..
14:27:47 <Borg> the bigger question is.. whatever you guys will introduce such a feature... and how it will be accessed via GRF..
14:28:11 <Borg> implementation details arent importand.. I can always rewrite the GRF part to be compatibile
14:28:47 <Borg> because I work on old OpenTTD.. my persistent storage is just 16 entries.. so it was easy for me to play w/ 0x80+ pos
14:29:01 <Borg> you have 256 entries.. so.. different access type?
14:29:15 <Borg> I will leave that in your capable hands :)
14:31:46 <Borg> also I have no problem making my GRF compatibile w/ OpenTTD.. I alreeady introduced TTDFlag to see if I run under my fork
14:38:27 <Rubidium> that won't necessarily be future GRF-compatible though
14:40:14 <peter1138> PersistentStorage's TileIndex is mostly irrelevant.
14:40:23 <peter1138> It's just use for debug stuff.
15:19:48 *** Limyx826 has joined #openttd
15:20:42 *** Limyx826 has quit IRC (Remote host closed the connection)
16:54:18 <LordAro> talltyler: can you confirm everything in the above is in the changelog?
16:58:19 <LordAro> the bootstrap infra change isn't strictly needed for 15 release, but it'd be nice to have
17:05:05 *** digitalfox has joined #openttd
17:05:05 <digitalfox> LordAro: I do not want to interfere in something I do not know, and I do not really know how it works, but did glx not say that he could do the merge, but that a server restart or something like that was also necessary and he did not have access/permissions?
17:05:40 <LordAro> digitalfox: that's the one
17:05:57 <LordAro> it's already been merged, but is fully manual (no GH actions or otherwise)
17:07:15 <digitalfox> So who has the power?
17:07:15 <digitalfox> Truebrain to the rescue? π
17:07:52 <LordAro> unfortunately absent from irc/discord recently
17:08:27 <LordAro> Rubidium: go for release?
17:08:33 <andythenorth> truebrain: has been around from time to time
17:08:52 <andythenorth> break glass access? π
17:09:29 <digitalfox> So if Truebrains goes on SpaceX to Mars, no one else got the power? π
17:09:46 <LordAro> digitalfox: it's something we should probably resolve, yes
17:10:47 <LordAro> (or any other devs, would like a couple of approvals before i actually press the tag button)
17:14:34 <talltyler> Oh, we might want to mention the move from company passwords to player invites in the release announcement
17:16:57 <LordAro> i still foresee this being a sticking point for those upgrading :)
17:17:40 <LordAro> talltyler: tagging isn't dependent on the release announcement being ready, the release build will take a while :p
17:18:29 <talltyler> Are you waiting for me to create the tag? I am a bit busy with work today π
17:18:42 <LordAro> no, waiting for someone's approval to create the tag :)
17:19:07 <LordAro> i don't like to take unilateral decisions for such events :)
17:20:03 <talltyler> First item on the list of changes:
17:20:03 <talltyler> `* Companies in multiplayer no longer have passwords, invite specific players using buttons in the Online Players list instead`
17:24:03 <talltyler> Go for the release if you want, LordAro π
17:24:23 <LordAro> gah, my api key doesn't have permissions to do the changes
17:24:31 <LordAro> anyone else fancy running it?
17:26:38 <peter1138> Urgh. This silly Mastodon server has a post character limit :(
17:26:50 <LordAro> or i'll just do it manually
17:26:56 <talltyler> Hmm, I'll have to figure out how to promote this build to default on Steam π
17:27:06 <talltyler> Once it's ready, of course
17:27:17 <peter1138> The long post is too long, the short post is a bit short innit.
17:27:34 <talltyler> The short post is no shorter than usual, is it
17:27:58 <LordAro> take out the bullet points you deem unimportant :D
17:29:19 <peter1138> Script didn't work because you did it manually :o
17:33:14 * Borg is testing his global electricity GRF now [;
17:45:59 <peter1138> andythenorth, so what's the highest persistent storage index you use?
17:47:57 <LordAro> and publish docs also still being skipped for no apparent reason
17:49:41 <andythenorth> peter1138: current count of storage used is 37, so index 36?
17:50:00 <LordAro> @masterhellish (does this work?) you can publish the video now :)
17:50:12 <andythenorth> it did not work π
17:50:30 *** masterhellish has joined #openttd
17:55:55 <talltyler> I will announce on Discord, Steam, and TT-Forums
18:01:49 <andythenorth> send emojis π
18:03:22 <masterhellish> Congratulations all π
18:03:42 <peter1138> Urgh, stupid post limit.
18:04:11 <LordAro> i concur, gj everyone, it's been a long time coming :)
18:05:45 <digitalfox> LordAro: Agreed, thanks to everyone involved π
18:06:32 <xarick> i can finally upload my AI
18:06:51 <michi_cc[d]> talltyler: Reddit and X done.
18:07:24 * LordAro watches /newest on HN
18:07:36 <talltyler> Steam now has 15.0 set as the default branch. Probably should've done that before announcing it, oops π
18:08:08 <LordAro> what's the OGFX2 status on steam?
18:09:12 <peter1138> This is stupid question.
18:09:17 <peter1138> Did you remember to disable asserts?
18:10:09 <LordAro> or rather, michi_cc[d] did, and i remembered to merge it :)
18:12:28 <LordAro> /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../include/c++/15.2.1/variant:1509:2: note: candidate template ignored: requirement 'is_constructible_v<OneOfManySettingDesc, SaveLoad, EnumBitSet<SettingFlag, unsigned short, 16>, bool, ParticipateSurvey, ParticipateSurvey, const unsigned int &, const unsigned int &, const unsigned int &, SettingCategory, std::nullptr_t, std::nullptr_t,
18:12:34 <LordAro> std::nullptr_t, std::nullptr_t, std::nullptr_t, std::nullptr_t, const std::initializer_list<std::basic_string_view<char, std::char_traits<char>>> &, std::nullptr_t>' was not satisfied [with _Tp = OneOfManySettingDesc, _Args = <SaveLoad, SettingFlags, bool, ParticipateSurvey, ParticipateSurvey, const StringID &, const StringID &, const StringID &, SettingCategory, std::nullptr_t, std::nullptr_t,
18:12:40 <LordAro> std::nullptr_t, std::nullptr_t, std::nullptr_t, std::nullptr_t, const std::initializer_list<std::string_view> &, std::nullptr_t>]
18:13:50 <xarick> is bananas prepared for AIs with API 15 requirements?
18:18:32 <talltyler> LordAro: OpenGFX 2 ships with the build on Steam! π
18:22:42 <xarick> shouldn't the V sign be red?
18:25:16 <talltyler> orudge: Can you publish 15.0 on the Microsoft Store? The release docs say you have that power. π
18:26:02 <talltyler> Who has access to GOG to publish 15 there?
18:26:58 <LordAro> at least, no one has been able to/bothered enough to gain access to the dev account to get access to the developer docs to try to fix the CI
18:28:05 <talltyler> None of us play the GOG version π
18:30:45 *** tabytac has joined #openttd
18:30:45 <tabytac> talltyler: are the stats public on GOG users like stam has with steamDB and the like?
18:35:29 <tabytac> cant seem to find anything with a quick google search
19:47:37 *** gelignite has joined #openttd
19:50:15 <lea001> I added a disclaimer that Beginner Tutorial is unmaintained. It doesn't yet show up in-game for me after restarting the game, but perhaps there is a server-side cache in play?
20:11:24 *** Wormnest has joined #openttd
20:33:13 *** locosage has joined #openttd
20:33:13 <locosage> wow new menu is so tiny without missing sprites message
20:41:10 <LordAro> yeah, i noticed that lol
20:41:25 <LordAro> i guess that was the intent :D
20:44:14 <andythenorth> peter1138 are you thinking 128 storages would be enough? π
20:46:21 <andythenorth> was curious why you wanted to know highest FIRS index
20:46:53 <peter1138> Someone else is splitting it.
21:32:41 <andythenorth> is the ragged left edge intended?
21:32:56 <andythenorth> I know this had a lot of discussion, and I stayed out of that, plenty of voices were involved
21:36:22 <LordAro> mm, could be improved
21:36:41 <LordAro> with an unknown degree of difficulty
21:38:46 <andythenorth> I imagined this menu would get worked over a few more times yet
21:40:46 <tabytac> andythenorth: agreed, i think it is close to being much better than the old one, but not yet
21:41:32 <andythenorth> I find it much simpler to use
21:41:49 <tabytac> andythenorth: new or old?
21:41:55 <andythenorth> the 15.0 version
21:43:16 <andythenorth> I'd sack Highscore Table, if we could, or move it to a specific grouping with Exit
21:43:17 <peter1138> It needs code to override the offsets/padding of baseset sprites.
21:43:35 <peter1138> The traditional way to do this is to just duplicate the sprites with the correct dimensions.
21:43:40 <andythenorth> "Highscore" is unusual to me, "High Score" would be more contemporary?
21:43:54 <peter1138> But I'm not really fond of that.
21:44:15 <andythenorth> It's suitably JFDI though?
21:44:27 <andythenorth> separation of concerns
21:45:14 <andythenorth> in main toolbar menu, are they all just centered somehow?
21:45:48 <peter1138> In the toolbar, each button is set to be equal size.
21:46:43 <peter1138> In the main menu, all the buttons are set to be equal size, but the width allocated to the image part always comes from the image.
21:48:46 <LordAro> would it be expensive to just take the max dimensions of each icon?
21:49:57 <peter1138> Each widget is entirely independent.
21:50:40 <peter1138> MasterHellish reads Twitch chat about 5-10 minutes later, so it's everything I say is out of context :D
21:55:28 <Borg> there is that variable 0x9E (misc grf features)
21:56:00 <Borg> can be used to enable world storage (split) if worried about backward compat
21:56:09 <Borg> but start to get little messy ;)
21:56:52 <Borg> ActD can be skipped via Act9
21:58:01 <Borg> im sure this needs to be heavly discussed first. if its there real need for that..
22:01:40 *** davidxn has joined #openttd
22:01:40 <davidxn> Happy new year, congratulations on 15.0 and thanks for everyoneβs work keeping our favourite transport game alive!
22:12:07 *** Flygon has quit IRC (Read error: Connection reset by peer)
22:26:48 <Borg> heh.. im reading OpenTTD issues out of curiosity....
22:27:13 <Borg> that stuff is absolutly basic.. and it breaks?
22:27:27 <Borg> I wonder what changes are to YAPF... 1.8.0 vs master..
22:27:36 <Borg> or... maybe this is my tuned settings [;
22:28:35 <Borg> its quite some time I play with look_ahead_max_signals = 5 and yeah. trains can pick really long detours
22:29:35 <Borg> and w/ additional of jgr routing restrictions I started to build even more complex networks.. hence I had to introduce nd_station_eol
22:32:09 <Borg> LordAro: im supper happy w/ my openttd.. and YAPF especially now.. :) took me years to master it
22:34:32 <Borg> % git log --oneline 1.8.0..master -- src/pathfinder/yapf/ | wc -l
22:36:26 <Borg> out of curiosity.. ill reproduce that case here
22:51:32 <Borg> at least it consistent on 1.8.0 :D
22:52:37 <Borg> never used such construction
22:53:46 <Borg> when I removed PBS signals.. penalty become low enough so train moved
22:54:36 <Borg> okey. they are moving :) once cache has been flushed
22:55:45 <Borg> I forgot to turn off pf.nd_station_eol [;
22:56:10 <Borg> and PBS back signals arent problem.. yeah. they have strong penalty.. 1500
22:56:22 <Borg> but way is blocked by waiting train.. so detour is taken
23:00:40 <Borg> and glx point to other issue 9554.. but too short platform penalty can be big.. so big that player will never take it.. so no issue there
23:01:58 <Borg> peter1138: I think its the second...
23:12:11 <Borg> anyway! :) late.. goood nite
23:15:58 *** Borg has quit IRC (Quit: leaving)
23:19:10 <_zephyris> Woop! Thank you all for the v15 work!
23:20:10 <_zephyris> masterhellish: Watching your features video right now, really nice π
continue to next day β΅