[Back to Index]

[00:02] <grogbot> <monyarm> Now i've seen everything, i found a VN where the images are simply stored in a 7z file
[00:03] <grogbot> <monyarm> But everything else is hardcoded in the exe
[00:17] <dreammaster> I wish more games implemented their logic in scripts. It's always such a pain trying to reverse such games. :P
[00:41] <grogbot> <Henke37> scripts are nice for other reasons too. you can decouple script execution from program execution easily. No more inner main loops!
[00:43] <omgpizzaguy> How do we feel about typeid()? Not seeing it used ever, but it's a possible replacement for RunTimeClassType in the ultima 8 code
[00:45] <ScummBot> Port build status changed with dbf404b7: Failure: master-openpandora, master-debian-x86, master-webos, master-osx_intel, master-caanoo, master-dingux, master-debian-x86-clang, master-gp2xwiz, master-gcw0
[00:49] <-- yuv422 left irc: Remote host closed the connection
[00:49] <dreammaster> I'm not familiar with it. Which I guess would make it belong to the more recent C++ specs we don't yet support
[00:49] --> yuv422 joined #scummvm.
[00:49] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[00:51] <grogbot> <Henke37> i think that guess is wrong. it's not a new feature.
[00:51] <grogbot> <Henke37> it's just that nobody uses it
[00:52] <dreammaster> Huh. Count me among them then :)
[00:52] <omgpizzaguy> Yeah. I believe it's what dynamic_cast uses in most implementations
[00:53] <grogbot> <Henke37> it's the magic incantation to get a pointer to the current RTTI data for an object.
[00:53] <grogbot> <Henke37> suffice to say, but most people have no business working with that data.
[00:55] <grogbot> <Henke37> and given that I know how said data looks like, i agree with the standard in that it's very implementation specific
[00:59] <omgpizzaguy> yeah I was thinking the only things possible to do with it reliably is to use == or name()
[01:00] <grogbot> <Henke37> there aren't many features in the standard for the data yes
[01:24] <-- yuv422 left irc: Remote host closed the connection
[01:25] --> yuv422 joined #scummvm.
[01:25] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[01:36] --> DominusExult joined #scummvm.
[01:36] <-- DominusExult left irc: Changing host
[01:36] --> DominusExult joined #scummvm.
[01:37] <-- Dominus left irc: Ping timeout: 246 seconds
[01:37] Nick change: DominusExult -> Dominus
[01:42] <-- yuv422 left irc: Remote host closed the connection
[01:42] --> yuv422 joined #scummvm.
[01:42] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[01:57] <-- SylvainTV left irc: Read error: Connection reset by peer
[02:04] <-- omgpizzaguy left irc: Ping timeout: 256 seconds
[02:25] <-- yuv422 left irc: Remote host closed the connection
[02:25] --> yuv422 joined #scummvm.
[02:25] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[02:30] --> JohnnyonFlame joined #scummvm.
[02:54] <grogbot> <Mataniko> is there a way to check if a game is running?
[04:06] --> omgpizzaguy joined #scummvm.
[04:16] <dreammaster> If you mean from core code, it may be a bit of a hack, but I guess you could check if the global g_engine is defined. But honestly, any code that behaves differently for the games vs the launcher would be better served by having a mode selector or something that the engines could call in the constructor
[04:33] <Scummette> [scummvm] Mataniko pushed 1 new commits to master: https://git.io/JfW3a
[04:33] <Scummette> scummvm/master 38325bf Mataniko: BACKENDS: Don't turn off screen when ScummVM is running a game
[04:49] <Scummette> [scummvm] Mataniko pushed 1 new commits to master: https://git.io/JfW3Q
[04:49] <Scummette> scummvm/master b0895cf Mataniko: BACKENDS: Fix SDL version check for SDL_EnableScreenSaver
[04:49] <grogbot> <Mataniko> my issue was from sdl-events - I don't know if it's elegant, but i'm having engineInit pass in a bool to eventSource
[04:49] <grogbot> <Mataniko> and engineDone
[04:50] <dreammaster> I'm not too familiar with the backends, but to my eyes the commit looked okay
[04:54] <grogbot> <Mataniko> ty
[05:11] <-- omgpizzaguy left irc: Ping timeout: 272 seconds
[05:11] <Scummette> [scummvm] dreammaster pushed 4 new commits to master: https://git.io/JfWsf
[05:11] <Scummette> scummvm/master 5d5b864 dreammaster: ULTIMA4: Move DungeonView into views/
[05:11] <Scummette> scummvm/master a2c72ee dreammaster: ULTIMA4: Dungeon monster fixes
[05:11] <Scummette> scummvm/master b84ab12 dreammaster: ULTIMA4: Refactored use of statics in DungeonView
[05:30] <-- dreammaster left irc:
[05:36] --> Shine joined #scummvm.
[05:53] <-- JohnnyonFlame left irc: Read error: Connection reset by peer
[06:03] <Scummette> [scummvm] ZvikaZ opened pull request #2238: SDL: Return unicode keycode for Hebrew input (master...z_hebrew_input_unicode) https://git.io/JfWGk
[06:42] <-- cd left irc: Quit: cd
[07:08] <-- Lightkey left irc: Ping timeout: 240 seconds
[07:22] --> Lightkey joined #scummvm.
[07:48] --> Begasus joined #scummvm.
[08:07] <-- Shine left irc: Read error: Connection reset by peer
[08:20] <ScummBot> Port build status changed with 52017e57: Success: master-openpandora
[08:37] --> Shine joined #scummvm.
[08:41] <ScummBot> Port build status changed with 52017e57: Success: master-debian-x86
[08:59] <ScummBot> Port build status changed with 52017e57: Success: master-webos, master-osx_intel
[09:05] <Scummette> [scummvm] lotharsm pushed 2 new commits to master: https://git.io/JfWCk
[09:05] <Scummette> scummvm/master 2d7fe18 lotharsm: I18N: Update translation files from source
[09:05] <Scummette> scummvm/master 42a6782 lotharsm: I18N: Rebuild translations.dat
[09:19] <grogbot> <sev> @Mataniko game would regularly call copyRectToScreen(), while GUI will call copyRectToOverlay().
[09:30] <ScummBot> Port build status changed with 52017e57: Success: master-caanoo, master-dingux, master-debian-x86-clang, master-gp2xwiz, master-gcw0
[09:55] --> SylvainTV joined #scummvm.
[09:55] #scummvm: mode change '+o SylvainTV' by ChanServ!ChanServ@services.
[09:55] <grogbot> <Henke37> It's been a while since I last did a build. who likes signedness mismatch warnings?
[10:03] <grogbot> <IlDucci> I've checked the latest additions to Weblate and I've posted a few questions. The biggest one is: is "NES Classic" related to the recent mini console?
[10:06] <grogbot> <Henke37> https://pastebin.com/35RQ6FFD
[10:06] <grogbot> <Henke37> presumably no. i say it is more likely to the few supported games that were released on the nes
[10:09] <grogbot> <Henke37> who feels like cleaning up the dragons engine? it is one of the noisiest engines here.
[10:11] <grogbot> <sev> @Henke37 we kill them every now and then, they just keep popping up
[10:11] <grogbot> <Henke37> yup.
[10:12] <-- yuv422 left irc: Remote host closed the connection
[10:13] --> yuv422 joined #scummvm.
[10:13] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[10:13] <grogbot> <sev> this sound like nonsense:
[10:13] <grogbot> <sev> engines\director\transitions.cpp(384,21): warning C4146: unary minus operator applied to unsigned type, result still unsigned
[10:14] <grogbot> <sev> uint h = clipRect.height();
[10:14] <grogbot> <sev> rto.moveTo(0, -h + t.yStepSize * i);
[10:14] <grogbot> <sev> is MSVC so dumb?
[10:15] <grogbot> <sev> void moveTo(int16 x, int16 y);
[10:15] <grogbot> <Henke37> unary vs binary subtraction. it is different!
[10:16] <grogbot> <sev> so, I have to write '0-h'?
[10:16] <grogbot> <sev> the thing is that the transition works just as expected
[10:17] <grogbot> <Henke37> i would just put the subtraction on the right side of the multiplication in this case.
[10:18] <grogbot> <sev> so, MSVC is really dumb then. that's sad
[10:19] <grogbot> <sev> so, when I have
[10:19] <grogbot> <sev> uint a = 5; int b = -a; I wll get 5 in b?
[10:19] <grogbot> <sev> I hardly believe it is the case
[10:20] <grogbot> <Henke37> neither I think that's the case.
[10:21] <grogbot> <sev> another reason to support my statement that MSVC is not a C++ compiler
[10:22] <grogbot> <aryanrawlani28> It's really not, I read a post on reddit just yesterday. It's really ages behind clang and gcc, and I also read something like it still doesn't support the keywords and xor , etc
[10:22] <grogbot> <aryanrawlani28> I should really switch to a better compiler soon
[10:55] <Scummette> [scummvm] ScummVM-Translations pushed 3 new commits to master: https://git.io/JfW84
[10:55] <Scummette> scummvm/master 585b668 IlDucci: I18N: Update translation (Spanish)
[10:55] <Scummette> scummvm/master 5459904 Timpii: I18N: Update translation (Finnish)
[10:55] <Scummette> scummvm/master 4b2e859 goodoldgeorge: I18N: Update translation (Hungarian)
[10:56] <-- heroux left irc: Ping timeout: 258 seconds
[11:01] <Scummette> [scummvm] ccawley2011 pushed 1 new commits to master: https://git.io/JfW8Q
[11:01] <Scummette> scummvm/master f8a883f ccawley2011: SDL: Unify implementations of activateManager and deactivateManager
[11:02] --> heroux joined #scummvm.
[11:20] <-- yuv422 left irc: Remote host closed the connection
[11:20] --> yuv422 joined #scummvm.
[11:20] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[12:02] <Scummette> [scummvm] sev- pushed 17 new commits to master: https://git.io/JfW01
[12:02] <Scummette> scummvm/master 627c901 sev-: DIRECTOR: Fix MSVC warnings
[12:02] <Scummette> scummvm/master 50b9d9a sev-: DIRECTOR: Fix another MSVC warning
[12:02] <Scummette> scummvm/master 08d0eeb sev-: DIRECTOR: LINGO: Simplified func_cursor(), so MSVC is less confused
[12:03] <grogbot> <sev> @Henke37 could you please rerun the compilation? I fixed most of the warnings
[12:03] <grogbot> <Henke37> already? sure.
[12:03] <grogbot> <sev> oh yeah, and I broke it
[12:04] <grogbot> <sev> OMG
[12:05] <grogbot> <sev> fixed
[12:05] <Scummette> [scummvm] sev- pushed 1 new commits to master: https://git.io/JfW0F
[12:05] <Scummette> scummvm/master 9195ecf sev-: DRAGONS: Fix typo caused by dreaded autocomplete
[12:18] <ScummBot> Port build status changed with 7759af51: Failure: master-openpandora
[12:20] <grogbot> <Mataniko> > I've checked the latest additions to Weblate and I've posted a few questions. The biggest one is: is "NES Classic" related to the recent mini console? @IlDucci yes
[12:21] Last message repeated 1 time(s).
[12:21] <grogbot> <Henke37> looks like most warnings are solved now.
[12:22] <grogbot> <Henke37> https://pastebin.com/8Tkxj4Dx
[12:22] --> ajax16384 joined #scummvm.
[12:22] #scummvm: mode change '+o ajax16384' by ChanServ!ChanServ@services.
[12:33] <grogbot> <antoniou79> @Mataniko could you restore my privilieges as a translator on weblate? It seems I can no longer directly save a translation (Greek) and can only make suggestions.
[12:36] <-- _sev left irc: Quit: This computer has gone to sleep
[12:38] --> _sev joined #scummvm.
[12:38] <-- _sev left irc: Changing host
[12:38] --> _sev joined #scummvm.
[12:38] #scummvm: mode change '+o _sev' by ChanServ!ChanServ@services.
[12:40] <grogbot> <Mataniko> whats your username, i'll check
[12:44] <grogbot> <antoniou79> it should be antoniou79
[12:44] <grogbot> <Mataniko> i don't see any specific user ACL - everyone should translate
[12:45] <grogbot> <Mataniko> any particular project?
[12:47] <grogbot> <antoniou79> Both ScummVM and ScummVM website. I get a "Not allowed" sign when hovering over "Save" and the tooltip says that "this translation only accepts suggestions and those are only approved by voting"
[12:47] <grogbot> <antoniou79> I am not sure what I am doing different than before, but it used to work. Direct saving that is
[12:47] <grogbot> <antoniou79> I am translating to Greek
[12:49] <grogbot> <IlDucci> That happened to me as well
[12:49] <grogbot> <IlDucci> There's been some changes on the Translation Website
[12:50] <grogbot> <IlDucci> @Mataniko Related to the old NES or to the new NES "mini" Classic?
[12:55] <grogbot> <Mataniko> "NES Classic" - The mini console
[13:13] <grogbot> <monyarm> I was looking at the source of some engines, and noticed that blade runner has an adpcm decoder, isn't that something that should be in audio or in common? Adpcm is a relatively common format
[13:14] <grogbot> <monyarm> And looking at the includes, it only includes files from common, nothing blade runner specific
[13:15] <grogbot> <monyarm> Same for the decompress_lzo.h/cpp
[13:15] <ScummBot> Port build status changed with 7759af51: Failure: master-ps3, master-webos, master-osx_intel, master-caanoo, master-dingux, master-ps2, master-pspfull, master-gp2xwiz
[13:16] <-- speachy left irc: Read error: No route to host
[13:16] <grogbot> <IlDucci> Funny that NES Classic had custom palettes
[13:16] <grogbot> <IlDucci> Okay
[13:16] --> speachy joined #scummvm.
[13:23] <grogbot> <criezy> @antoniou79 I just added you to the Translators group on weblate. That should restore your ability to save changes.
[13:26] <grogbot> <Mataniko> Iducci: I'd didnt
[13:26] <grogbot> <Mataniko> It had a palette
[13:27] <grogbot> <Mataniko> Anyone knows why calling g_engine->pauseEngine doesn't actually pause?
[13:28] <-- yuv422 left irc: Remote host closed the connection
[13:28] --> yuv422 joined #scummvm.
[13:28] #scummvm: mode change '+o yuv422' by ChanServ!ChanServ@services.
[13:30] <grogbot> <sev> @monyarm we do have ADPCM decoder in common/
[13:30] <grogbot> <sev> it has many flavours, and maybe this particular flavour is too different from the others
[13:30] <grogbot> <sev> but I think, it could still be merged in
[13:32] <grogbot> <monyarm> Question, an archive I'm working on has the file name as an 8 byte name and 4 byte extension, padded with spaces. If I create a class inheriting from Archive. Would having the hasname function remove the spaces and add a period in between when comparing, be enough to make f.open("BGM.PAK/BGM1.WAV") work?
[13:39] <ScummBot> Port build status changed with 9195ecf6: Success: master-openpandora
[13:41] <-- tsoliman left irc: Quit: I've been banished!
[13:44] --> tsoliman joined #scummvm.
[13:44] #scummvm: mode change '+o tsoliman' by ChanServ!ChanServ@services.
[13:44] <grogbot> <madmoose> @monyarm I don't believe anything else uses that particular variant of ADPCM. If anything ends up using I don't mind moving but if not I'd prefer to not have to jump through more levels of indirection than I have to 🙂
[13:47] --> omgpizzaguy joined #scummvm.
[13:55] <grogbot> <Mataniko> Still looking around - looks like dialogs pause games, not actual calls to g_engine->pauseEngine
[14:21] <grogbot> <Mataniko> Also, any historical reasons why dialogs can't be dismissed via code?
[14:26] <ScummBot> Port build status changed with 9195ecf6: Success: master-ps3, master-webos, master-osx_intel, master-caanoo, master-dingux, master-ps2, master-pspfull, master-gp2xwiz
[14:29] <omgpizzaguy> Oh typeid is not terribly useful I guess, the operator== is not guaranteed. No idea how to replace Gump::FindGump
[14:30] <omgpizzaguy> I'm thinking this was a nice refresher coarse for that code, but it's not completely replaceable.
[14:46] <grogbot> <Henke37> the Engine::pauseEngine member function does pause engines. or unpause them. but i am hoping to refactor that to make it much harder to bungle
[14:47] <grogbot> <Henke37> instead of trusting that callers count correctly, I am now handing out pause tokens that will automatically resume the engine when destroyed
[14:49] <grogbot> <antoniou79> @criezy thank you, indeed that fixed the issue!
[14:56] <grogbot> <Mataniko> @Henke37 maybe it's engine specific? Even in scumm if you don't call runModal on the pause message, you will not be paused
[14:56] <grogbot> <Henke37> sounds like a bug to me
[14:56] <grogbot> <Henke37> a bug that i'm aiming to address
[14:58] <grogbot> <Mataniko> not sure about that, all pauseEngine does is to call pauseEngineInternal - in the scumm example it just pauses the sound
[14:59] <grogbot> <Henke37> i suppose that may be true
[14:59] <grogbot> <Mataniko> But clearly there is a way to pause the VM completely, since dialogs do it
[14:59] <grogbot> <Mataniko> I'd like to tap into that without a dialog
[14:59] <grogbot> <Henke37> i wonder if this is yet another "no real main loop" design issue
[15:02] <grogbot> <Mataniko> WDYM?
[15:03] <grogbot> <Henke37> why does calling runModal stop the engine? because it hijacks the main thread and no longer runs the main loop of the game, instead running its own main loop
[15:04] <grogbot> <Mataniko> basically one global loop
[15:06] <grogbot> <Henke37> if only things were that simple in reality.
[15:06] <grogbot> <Henke37> some engines have a real main loop. other engines spin up sub loops all over the place. it's a mess
[15:07] <grogbot> <monyarm> In order to debug some image format reading, I want to write out the pixel data to a file, how would i do that in scummvm? Cause i know alot of standard functions are disabled
[15:07] <grogbot> <Henke37> they got away with it on old hardware and old oses where you didn't have to deal with "other code"
[15:07] <grogbot> <Henke37> to write out the pixels, use the DumpFile class.
[15:08] <grogbot> <monyarm> thank you
[15:17] <grogbot> <monyarm> #0 0x00005555557c2175 in Common::File::close() (this=0x7fffffffd220) at common/file.cpp:103 #1 0x00005555557c1c24 in Common::File::~File() (this=0x7fffffffd220, __in_chrg=<optimized out>, __vtt_parm=<optimized out>) at common/file.cpp:38 #2 0x00005555555c995a in TMXFile::ReadFile(char*) (this=0x7fffffffd2b0, path=0x5555558104d4 "test.tmx") at engines/smt/formats/image/tmx.cpp:6 getting the following stacktrace, with this code: byte*
[15:17] <grogbot> pixels = (byte*)malloc(dat.formatsettings.width*dat.formatsettings.height); f.read(&pixels, dat.formatsettings.width * dat.formatsettings.height); Common::DumpFile df; df.open("dump.image"); df.write(&pixels,dat.formatsettings.width * dat.formatsettings.height); any idea what i'm doing wrong?
[15:17] <grogbot> <monyarm> I also tried calloc, but same result
[15:22] <grogbot> <monyarm> Thread 1 "scummvm" received signal SIGSEGV, Segmentation fault. 0x00005555557c216f in Common::File::close (this=0x7fffffffd220) at common/file.cpp:103 103 delete _handle; this is where the segfault happens
[15:25] <grogbot> <monyarm> managed to fix it
[15:26] <grogbot> <monyarm> kinda fixed it, it doesn't seg fault anymore, but the dumpfile output is nowhere to be seen
[15:30] <-- crns left irc: Quit: offline for a while
[15:40] <grogbot> <monyarm> figured it out, i need a path, i can't just dump to "dump.image" i have to dump to "dumps/dump.image"
[15:42] --> crns joined #scummvm.
[15:54] --> ny00123 joined #scummvm.
[16:08] --> cd joined #scummvm.
[16:49] --> criezy joined #scummvm.
[16:49] #scummvm: mode change '+o criezy' by ChanServ!ChanServ@services.
[17:17] --> dreammaster joined #scummvm.
[17:17] #scummvm: mode change '+o dreammaster' by ChanServ!ChanServ@services.
[17:19] <grogbot> <lephilousophe> you should not use malloc or calloc, that's C++ so it is new[]
[17:22] <grogbot> <Henke37> someone mind waiving the Codacy tests for my PR? https://github.com/scummvm/scummvm/pull/2147 It doesn't understand objects with significant lifetimes
[17:39] <-- omgpizzaguy left irc: Read error: Connection reset by peer
[17:39] --> omgpizzaguy joined #scummvm.
[17:50] <grogbot> <lephilousophe> @Henke37 Codacy is an aggregate of some dumb tools and shouldn't be taken seriously.
[17:50] <grogbot> <Henke37> yup. which is why i'm asking for a waiver.
[17:51] <grogbot> <lephilousophe> what do you mean?
[17:52] <-- balrog left irc: Quit: Bye
[17:52] <grogbot> <Henke37> is there no way to ignore the result?
[17:55] <grogbot> Command sent by monyarm
[17:55] <grogbot> ./engines/plugins_table.h:8: error: undefined reference to 'g_ENGINENAME_getObject()' ./engines/plugins_table.h:8: error: undefined reference to 'g_ENGINENAME_type'
[17:56] <grogbot> <lephilousophe> @Henke37 I don't think so and it doesn't prevent merge
[17:56] <-- omgpizzaguy left irc: Ping timeout: 272 seconds
[17:56] <grogbot> <lephilousophe> you will just have to bear with this ugly red indicator 🙂
[17:56] <grogbot> <monyarm> any idea what that error is about?
[17:56] --> balrog joined #scummvm.
[17:57] <grogbot> <Henke37> sounds like it's related to dynamic plugins
[17:58] <grogbot> <lephilousophe> @monyarm I don't have plugins_table.h in ./engines/
[17:58] <grogbot> <Henke37> must be a generated file
[17:58] <grogbot> <monyarm> Note that i replaced the actual engine name with ENGINENAME, cause the name is nsfw. And ya it's a generated file
[18:00] <grogbot> <monyarm> did make clean, and make again, still the same issue
[18:03] <grogbot> <lephilousophe> https://github.com/scummvm/scummvm/blob/master/engines/plumbers/detection.cpp
[18:04] <grogbot> <lephilousophe> at the end of the file there is a #if PLUGIN_ENABLED_DYNAMIC(PLUMBERS) REGISTER_PLUGIN_DYNAMIC(PLUMBERS, PLUGIN_TYPE_ENGINE, PlumbersMetaEngine); #else REGISTER_PLUGIN_STATIC(PLUMBERS, PLUGIN_TYPE_ENGINE, PlumbersMetaEngine); #endif
[18:06] <grogbot> <monyarm> Ah, my capitalization was off in my detection file
[18:07] Last message repeated 1 time(s).
[18:24] <-- Begasus left irc: Quit: Ex-Chat
[18:54] --> omgpizzaguy joined #scummvm.
[19:00] <grogbot> <deckarep> Hi is the a relevant channel for the sci engine. Im new and landed my first contribution a few days ago.
[19:01] <dreammaster> Yes it is. Though whether any of the sci developers not necessarily be around right now
[19:03] <grogbot> <Mataniko> bumping my earlier question - any reason why dialogs are not dismiss-able via code?
[19:03] <grogbot> <ZvikaZ> @deckarep , anyway, ask your question, you don't know who will be able to answer...
[19:06] <grogbot> <deckarep> Sure, main question: Im trying to reverse engineer and submit a patch for the SCI opcode instruction set. In ScummVM for SCI we can use the disasm command on a selector. When doing this using LSL6 I noticed the opcode numbers do not match whats defined in the SCI engine virtual machine which made me wonder if the disasm debug is buggy or reliable to work with?
[19:07] <grogbot> <deckarep> Also, i thought Id start a discussion but maybe submitting a comprehensive bug is more appropriate.
[19:11] <grogbot> <ZvikaZ> Well, I haven't used much it in the newer games, but generally speaking the debugger is very reliable. But feel free to submit a bug, if you won't get here an answer soon.
[19:14] <grogbot> <deckarep> So far all the debug commands are helping me find what I need and work correctly but disasm is the one that seems off...but I dont think it can be the VM otherwise game wouldnt play correctly but seems like its perhaps an issue with just the logic for showing the disassembled bytecode. I will submit a bug with some examples. 👍🏼
[19:19] <grogbot> <ZvikaZ> Maybe even better, try to debug the debugger, and submit a PR 😉 But I guess bug is great too...
[19:20] <Scummette> [scummvm] dreammaster pushed 1 new commits to master: https://git.io/JfWDl
[19:20] <Scummette> scummvm/master 2826549 dreammaster: ULTIMA4: Remove problematic assert
[19:21] <grogbot> <deckarep> I would love to do that...the only problem is my C++ skills suck. Still reading through the source but ScummVM is an intimidating beast. Also very amazing what the open source community has built!
[19:28] <grogbot> <ZvikaZ> Well, I'm a relatively new comer here as well, and share your appreciation
[19:43] <grogbot> <monyarm> So, question, i've created a class that inherits from Archive, but how do i register it so when i do "f.open("bgm.pak/bgm1.wav")" it can find the file?
[19:44] <Scummette> [scummvm] sev- pushed 4 new commits to master: https://git.io/JfWyc
[19:44] <Scummette> scummvm/master b52e09b sev-: DIRECTOR: LINGO: Fixed 'if' preprocessor
[19:44] <Scummette> scummvm/master 1a373ab sev-: DIRECTOR: LINGO: Added tests for new 'if' edge case
[19:44] <Scummette> scummvm/master 9c772b1 sev-: DIRECTOR: LINGO: Expanded grammar to accept expression as references
[19:45] <-- Mia left irc: Quit: Leaving
[19:51] <Scummette> [scummvm] sev- closed pull request #2191: SDL: Move detection of the desktop resolution into the SdlWindow class (master...getDesktopResolution) https://git.io/JffGf
[19:51] <Scummette> [scummvm] sev- pushed 1 new commits to master: https://git.io/JfWyr
[19:51] <Scummette> scummvm/master 2f6d219 ccawley2011: SDL: Move detection of the desktop resolution into the SdlWindow class
[20:00] <grogbot> <monyarm> I think i might be mistaken about how Archive and Searchman are supposed to work
[20:02] <grogbot> <_athrxx> @Mataniko That code is incredibly old. So probably noone remembers whether there is any purpose behind that lack of functionality. The whole GMM functionality was a GSOC task. The dialogs might be even older. I can only help you guessing. My guess would be: noone so far needed dismissing a dialog via code. If you want to add this without causing any issues, why not?
[20:07] <grogbot> <Mataniko> I was looking at win32 forms MessageBox and they also don't have a way to dismiss by code. I'm looking at a dialog box as a workaround to the pausing issue - i don't think introducing workarounds to a workaround is good practice
[20:08] <dreammaster> When you register an archive with SearchMan, it adds it as if it were in the current directory. So if you want to be able to have the files detected as bgm.pak/bgm1.wav, have your Archive implementation explicitly check for the bgm.pak/ prefix in the passed filename.
[20:09] <dreammaster> I do something similar in my Ultima engine, where I expect a data/ prefix on any passed filename to the archive methods, and internally remap it to the correct folder prefix for whichever Ultima game is running
[20:17] <grogbot> <monyarm> dreammaster, could you link me to some engine that registers an archive with searchman, and does explicit checking? Other than ultima, cause it's pretty big. And also would this work for archives within archives, cause some of the games i work on have a dozen archive formats, and can have a frankly ridiculous depth.
[20:18] <grogbot> <monyarm> Also, Common::Array doesn't seem to like having structs with Common::String in it.
[20:19] <dreammaster> That's where you hit against one of the weaknesses of archives. They don't nest generically. In fact, whereas with the normal filesystem you're expected to use Common::FSNode to handle subdirectories rather than hardcoding "/" or "\" in filenames as a path separator, you can't use FSNodes within folders within an archive.
[20:20] <dreammaster> So in the case of Ultima, I had to do hardcoding of filenames like data/file1.txt, even though it was nasty
[20:21] <dreammaster> As for another example, let me check
[20:21] <grogbot> <monyarm> That really is nasty
[20:22] <grogbot> <monyarm> maybe i can write a helper function that when giving a / seperated path, goes through both pathman and the archives, looking and trying to find the last one
[20:22] <dreammaster> Maybe: https://github.com/scummvm/scummvm/blob/2f6d219dce8cda2e02fb647fbad2f03995fe6b85/engines/glk/glk.cpp#L127
[20:23] <grogbot> <Henke37> oh dear oh dear. i recall some games i've poked at that have three layers of archives
[20:23] <dreammaster> The Blorb class is then implemented in blorb.cpp/.h - I read in an index in Blorb::load and set up dummy filenames for each resource
[20:25] <dreammaster> That'd be problematic. With the current archive system, your archive would have to recognise the file path was going into a second archive, and then instantiate and maybe cache a second archive instance, and pass it the remainder of the filename, and so on
[20:25] <grogbot> <monyarm> Persona 3/4 has quite a few layers too, i remember a file that had 5 or 6
[20:25] <dreammaster> Damn
[20:28] <grogbot> <monyarm> there really should be a better implementation, if archive can create a readablestream, could Searchman be set up (would probably requiring editing how it works), to be able to support FSNode? I feel like it would be much better, and alot less ugly
[20:29] <grogbot> <monyarm> Authough actually
[20:29] <grogbot> <monyarm> Looking at the wiki, it says that there already is such such functionality, i think
[20:30] <grogbot> <monyarm> There are new File::open methods: You can pass an "Archive" subclass (e.g. a ZIPArchive) to it, and it will search for that file in the Archive). In particular, the SearchMan is such an Archive subclass, and can wrap arbitrary paths, ZIP or ARJ archives, etc. By providing Archive subclasses, you can extend this arbitrarily.
[20:32] <dreammaster> Well, yes, you can force Common::File::open to use a specific archive, but that still doesn't solve the problem of subdirectories, because if you're using a specific archive for the open, your filename string can be whatever weird format your archive expects.
[20:33] <dreammaster> And you're correct that SearchMan does inherit from Archive, but it basically acts as a container for archives that have already been created; it doesn't allow archives to be nested, because in the Archive implementation, all the custom archives have a createReadStream method that must provide read access to a given file within their archive
[20:35] <dreammaster> They don't use SearchMan, they just do whatever to return a read stream to read an entry from their file
[20:35] <grogbot> <Henke37> read and seek access. which will be fun for archives with compressed subfiles
[20:35] <grogbot> <monyarm> what about Common::File::open ( SeekableReadStream * stream, const String & name ) Maybe it could be used somehow?
[20:35] <grogbot> <monyarm> @Henke37 Oh god, the very first layer in the persona games is a freaking ISO
[20:36] <grogbot> <Henke37> i think you've mentioned that before. it is certainly unusual.
[20:36] <grogbot> <monyarm> an iso with an extra header at the front
[20:36] <grogbot> <monyarm> 32 bytes
[20:36] <grogbot> <monyarm> then just a regular iso
[20:37] <grogbot> <Henke37> not the best of ideas. yellow book has a lot of redundancy. and that's on top of whatever the filesystem does.
[20:37] <grogbot> <monyarm> yellow book?
[20:37] <grogbot> <Henke37> the standard for data cds.
[20:37] <grogbot> <Henke37> goes well with the red book standard for audio cds.
[20:38] <grogbot> <Henke37> there is a whole rainbow collection for more or less obscure cd types
[20:38] <grogbot> <monyarm> didn't know that that's what it was called
[20:39] <grogbot> <monyarm> But damn it, the reason i forked ScummVM for my project, is that i was hoping it would have figured out stuff like this. Are there no games in ScummVM that have nested archives? It can't be that rare, i find it in every other game i look at, though granted the internal archives are either xored or just a toc and then the contents.
[20:40] <grogbot> <monyarm> Gah, this will be something that will take forever, i'll worry about when i get to the point where i'll have to open nested archives.
[20:40] <dreammaster> None that I'm aware of. I fail to see the benefit of having nested archives/zips/wahtever when you could just have one big one
[20:40] <grogbot> <Henke37> you are correct. there is little benefit to it. but that doesn't stop developers from doing it.
[20:41] <grogbot> <monyarm> shrug all i know is that alot of PS2 games do it
[20:41] <grogbot> <Henke37> at best they are doing it to fake having subfolders. which can help with the filename lookup performance.
[20:41] <grogbot> <monyarm> they have a big archive containing most of their data, and then will for example have all the backgrounds or menu graphics in a very simple archive within the main archive.
[20:42] <grogbot> <monyarm> Gah, i'll just leave figuring out nested archives for future monyarm. In the mean time, I need some help with an issue novelvm: ./common/array.h:192: T& Common::Array<T>::operator[](Common::Array<T>::size_type) [with T = MyEngine::PakHeader; Common::Array<T>::size_type = unsigned int]: Assertion `idx < _size' failed.
[20:42] <grogbot> <Henke37> then again, i've seen subarchives when everything was accessed by ordinal ids.
[20:42] <-- Shine left irc: Read error: Connection reset by peer
[20:43] <grogbot> <monyarm> when they have subarchives, they are generally all in a single directory, and with numerical names.
[20:44] <-- omgpizzaguy left irc: Ping timeout: 240 seconds
[20:45] <dreammaster> The error above simply means you tried to access the array beyond the last element
[20:45] <grogbot> <sev> @DreamMaster @monyarm if you need subdirectories in your Archive, try to use SearchSet which is a subclass of it
[20:45] <grogbot> <sev> and it supports directories
[20:46] <grogbot> <sev> @Mataniko Nobody needed to dismiss dialogs via code so far, this is why it is not implemented
[20:46] <dreammaster> Really? Cool. Thanks sev, I'll have to check it out
[20:46] <grogbot> <monyarm> I already figured out searchset, what I need is a simple way to have nested archives
[20:46] <grogbot> <sev> @Henke37 Codacy is pointless, we usually just ignore it
[20:46] <grogbot> <Henke37> right. think my pr is ready?
[20:46] <grogbot> <sev> @monyarm what do you mean by nested archives?
[20:47] <grogbot> <sev> @Henke37 maybe, need to review
[20:48] <grogbot> <sev> @Henke37 ah, that is that big one....
[20:49] <grogbot> <Henke37> it touches a lot of different engines. but each touch is small.
[20:49] <grogbot> <monyarm> Some games, mainly ps2 games, have a main archive, and then have other ones within. for Example: Data.CVM bustups\000.PAC 01.SPR ##.TMX With the TMX files being the ones i need, for example
[20:49] <grogbot> <monyarm> and that's one of the simpler cases
[20:51] <grogbot> <sev> but where are the nested archives?
[20:51] <grogbot> <sev> I see that you have tree-like structure here, not nested things which are compressed in compressed
[20:51] <grogbot> <monyarm> CVM, PAC and SPR are each archives
[20:52] <grogbot> <sev> you mean, each one contains more files?
[20:52] <grogbot> <monyarm> Ya
[20:52] <grogbot> <sev> are they different by their format from their outer shells?
[20:53] <grogbot> <sev> e.g. PAC is same format as SPR
[20:53] <grogbot> <sev> as CVM
[20:54] <grogbot> <monyarm> CVM is a modified ISO, PAC is table of contents, and then data, no compression, SPR was either xored or had compression, i'll have to check
[20:56] <grogbot> <monyarm> SPR has a bunch of metadata for the included files, but is otherwise quite close to PAC
[20:57] <grogbot> <monyarm> there's also EPL, which are a completely different format, which can also be found in some SPR's
[20:59] <grogbot> <sev> how I would do it
[21:00] <grogbot> <sev> I would stuff everything into a SearchSet, but my archive would contain name, offset and method
[21:00] <grogbot> <sev> where method is method of compression/handling
[21:02] <grogbot> <monyarm> I'm not getting it, how would you get the TMX file? So you add the CVM to a SearchSet, and with the "method", you'd be able to figure out if the file is another archive or not, but then how would you get the files out of there?
[21:06] <grogbot> <sev> so, I understood from your explanation that CVS is ISO -> plan data
[21:06] <grogbot> <sev> then PAC is also plain data
[21:06] <grogbot> <sev> and only then we have compression of SPR
[21:07] <grogbot> <sev> then TMX file position we get from SPR, and decompress it by "SPR" compression method
[21:07] <grogbot> <sev> because in the end it will be just offset and length into your CVS file, right?
[21:08] <grogbot> <sev> consider CVS, PAC, SPR and mere directories
[21:08] <grogbot> <sev> scan them and put into SearchSet
[21:08] <grogbot> <sev> though, at this moment, perhaps you will not benefit from Archive class at all
[21:08] <grogbot> <sev> just put all those things into a HashMap
[21:09] <grogbot> <monyarm> ISO isn't really plain data, its basically a filesystem, while it's uncompressed, it's split into sectors, and has redundancy
[21:09] <grogbot> <sev> do you care about sectors?
[21:09] <grogbot> <sev> or you still refer to things by their name?
[21:09] <grogbot> <madmoose> I would ignore Common::Archive and make a CVMArchive, a PACArchive, an SPRArchive, etc, and just stack them.
[21:09] <grogbot> <sev> right
[21:10] <grogbot> <sev> CVMArchive would return a SeekableReadStream
[21:10] <grogbot> <sev> which will skip all the redundant bits
[21:10] <grogbot> <monyarm> By name, but iso's have control sector, error correction sectors, etcetera, so just seeking the data in t he cvm, i don't think would be quite that simple
[21:10] <grogbot> <madmoose> Just have them read from a ReadStream and produce a ReadStream for a member.
[21:10] <grogbot> <sev> then PACArchive will read it and build its index
[21:10] <grogbot> <sev> yes, read what @madmoose says
[21:10] <-- ajax16384 left irc: Quit: Leaving
[21:12] <grogbot> <monyarm> But once i implement iso, i can basically have it like this: create hashmap for CVM, for each element of that hashmap that's a PAC/SPR, remove that element, read the PAC/SPR, and add it's entries to the hashmap, so when i add my CVM to SearchMan, i can just refer to the internal tmx by it's path in the CVM
[21:12] <grogbot> <IlDucci> SPR's header is actually the atlas pieces
[21:12] <grogbot> <madmoose> Specifically, consume a SeekableReadStream, produce a SeekableSubReadStream, I guess.
[21:13] <grogbot> <sev> @monyarm from what you explained, PAC is not a continuous set of bytes within CVM, right?
[21:14] <grogbot> <IlDucci> SPR's are textures for the UI/GUI, so they are layered in an Atlas
[21:14] <grogbot> <monyarm> they're relatively small files, so most of them will be in a single sector, but it is entirely possible for them to end up not being contigrous
[21:14] <grogbot> <sev> @IlDucci we are not yet there, we need to read them from the disk 😄
[21:14] <grogbot> <IlDucci> Excuse me
[21:14] <grogbot> <IlDucci> Why the hell are you guys dealing with Persona 3?
[21:14] <grogbot> <IlDucci> Sorry I got a bit late to this party
[21:15] <grogbot> <sev> @monyarm has his exercise
[21:15] <grogbot> <monyarm> I'm working on a fork of ScummVM focused on Visual Novels, i'm currently working on 2 titles, Persona 3, and another which i can't mention cause of the kind of visual novel it is
[21:16] <grogbot> <IlDucci> I find this funny, with the exception of Persona 3 Portable, all P3 versions are in 3D
[21:16] <grogbot> <IlDucci> Which is out of ScummVM's scope, right?
[21:16] <grogbot> <sev> @IlDucci yes, he works on a fork
[21:16] <grogbot> <IlDucci> Oh, sorry about that
[21:16] <grogbot> <madmoose> https://stdio.ru/index.php?n=Main.MT32 http://svn.stdio.ru/svn/trunk/mt-32/
[21:17] <grogbot> <IlDucci> Sorry, I guess I got a bit nervous because the team I'm in already broke most of the formats
[21:17] <grogbot> <monyarm> Ya, and i'm planning on rebasing my fork to be based on ResidualVM when i finally get to the non-VN parts of P3
[21:17] <grogbot> <IlDucci> But it's not the same breaking formats for editing than for emulating, I guess
[21:17] <grogbot> <sev> @madmoose what about that?
[21:18] <grogbot> <madmoose> @sev Just thought it was interesting.
[21:18] <grogbot> <SupSuper> i agree with @madmoose re: filestreams, i usually find wrapping streams easier than extending them. so i can take any File stream, pass it to my own archive classes, and extend the api as i see fit
[21:18] <grogbot> <monyarm> Does anyone have any examples of an engine doing that, i find it easiest to look at examples of what i'm trying to do
[21:18] <grogbot> <madmoose> @sev In case somebody here wants to build their own MT-32 😛
[21:19] <grogbot> <sev> @madmoose yes, looking how deep they went
[21:19] <grogbot> <sev> @monyarm we come back to SCUMM engine
[21:19] <grogbot> <sev> @monyarm with its ScummFile as subclass of File
[21:20] <grogbot> <madmoose> @sev I need to figure out how to repair my RA-50 (which contains a CM-32L).
[21:21] <grogbot> <sev> @mad-des I see that it is just the HW description of the thing, not an emulator
[21:21] <grogbot> <Mataniko> isn't P3 a jrpg, not a visual novel?
[21:21] <grogbot> <IlDucci> It's a mix of both things
[21:21] <grogbot> <monyarm> It's a mix
[21:21] <grogbot> <IlDucci> The Portable version I mention goes into VN territory simply because they removed most 3D elements
[21:21] <grogbot> <IlDucci> And turned it into 2D (except combat)
[21:22] <grogbot> <madmoose> @sev Yes, it appears to have schematics for everything except the important bits... the LA32, the memory mapping gate array and the reverb chip.
[21:23] <grogbot> <madmoose> @sev We do have MUNT as an emulator, although it's a bit high level.
[21:24] <grogbot> <madmoose> Anyway, I just thought it looked interesting.
[21:28] <grogbot> <monyarm> My custom archive class isn't working, could someone please take alook? it's telling me it can't find the file if (!pakFile.open(_pakFilename)) { warning("PAKArchive::PAKArchive(): Could not find the archive file"); return; } I get this warning
[21:28] <grogbot> <monyarm> https://github.com/monyarm/novelvm if anyone would be willing to lend a hand
[21:31] <grogbot> <sev> @madmoose it is indeed interesting. I hope that LordNightmare will finish his reversing effort some day
[21:35] <grogbot> <madmoose> @sev OGalibert has done a bit of work in Mame too, it can execute the rom at least.
[21:36] <grogbot> <madmoose> Considering that MUNT is apparently bit-accurate (I believe?) it should be possible to RE the rest...
[21:37] <Scummette> [scummvm] sev- closed pull request #2147: ALL: Pause Token (master...pauseToken) https://git.io/JviH0
[21:37] <Scummette> [scummvm] sev- pushed 27 new commits to master: https://git.io/JfW7t
[21:37] <Scummette> scummvm/master ea7db12 henke37: ENGINES: Base PauseToken support
[21:37] <Scummette> scummvm/master 59702fa henke37: PEGASUS: Use PauseToken
[21:37] <Scummette> scummvm/master ce4cfdf henke37: BACKENDS: Use PauseToken
[21:38] <grogbot> <madmoose> Anyway, that's a project for when I'm not drowning in work...
[21:41] --> omgpizzaguy joined #scummvm.
[21:43] <Scummette> [scummvm] sev- pushed 1 new commits to master: https://git.io/JfW74
[21:43] <Scummette> scummvm/master 7a152e9 sev-: JANITORIAL: #include "engine.h" -> "engines/engine.h"
[21:44] <grogbot> <monyarm> Anyone have any ideas what i might be doing wrong? Cause i tell it to open an archive called "STREAM.PAK" and there's a "STREAM.PAK" in the folder
[21:46] <-- omgpizzaguy left irc: Ping timeout: 260 seconds
[21:49] <grogbot> <Henke37> Visual studio does not like the .clang-format file anymore
[21:49] <grogbot> <Henke37> https://cdn.discordapp.com/attachments/581224061091446795/709160810533879828/Anteckning_2020-05-10_235052.png
[21:53] <Scummette> [scummvm] antoniou79 pushed 1 new commits to master: https://git.io/JfW7D
[21:53] <Scummette> scummvm/master 22ee236 antoniou79: BLADERUNNER: Ignore first event in gameTick() when launching game
[22:00] <-- criezy left irc: Quit: criezy
[22:00] <-- ny00123 left irc: Quit: Leaving
[22:04] <grogbot> <sev> I'll remove that one
[22:04] <grogbot> <sev> MSVC is behind
[22:05] <Scummette> [scummvm] sev- pushed 1 new commits to master: https://git.io/JfW53
[22:05] <Scummette> scummvm/master 8c5ee36 sev-: ALL: Remove formatting which MSVC is not happy about from .clang-format
[22:07] --> omgpizzaguy joined #scummvm.
[22:08] <-- Deledrius left irc: Read error: Connection reset by peer
[22:09] --> Deledrius joined #scummvm.
[22:10] <-- omgpizzaguy left irc: Remote host closed the connection
[22:10] --> omgpizzaguy joined #scummvm.
[22:20] <grogbot> <Henke37> Looks like we are doing this one entry at a time...
[22:20] <grogbot> <Henke37> https://cdn.discordapp.com/attachments/581224061091446795/709168501683650580/Anteckning_2020-05-11_002200.png
[22:20] <grogbot> <aryanrawlani28> Are you guys working on improving msvc support? Seen many commits regarding that recently
[22:26] <grogbot> <Henke37> i just report the issues i run into
[22:27] <ScummBot> Port build status changed with 1b4ce909: Failure: master-n64, master-android_x86, master-3ds, master-psp2full, master-android_x86_64, master-wii, master-ps3, master-android_arm_v7a
[22:37] <Scummette> [scummvm] henke37 opened pull request #2239: Ports: Pause token mk2 (master...pauseTokenMk2) https://git.io/JfWdY
[22:37] <-- cd left irc: Ping timeout: 272 seconds
[22:51] --> ldevulder joined #scummvm.
[22:51] <Scummette> [scummvm] Mataniko opened pull request #2240: JANITORIAL: Rename EVENT_RTL (master...master) https://git.io/JfWda
[22:52] <-- ldevulder_ left irc: Ping timeout: 272 seconds
[22:59] <ScummBot> Port build status changed with 1b4ce909: Failure: master-psp2, master-caanoo, master-dingux, master-gamecube, master-pspfull, master-gp2xwiz
[23:04] <grogbot> <Henke37> one stupid missed spot and i bring down half the ports.
[23:08] <Scummette> [scummvm] sev- pushed 4 new commits to master: https://git.io/JfWFJ
[23:08] <Scummette> scummvm/master eaa1bc5 sev-: DIRECTOR: LINGO: Support 'the FBLTIN OF <value>' syntax
[23:08] <Scummette> scummvm/master 5865959 sev-: DIRECTOR: LINGO: Added test for the new 'the' syntax
[23:08] <Scummette> scummvm/master 2761d3e sev-: DIRECTOR: LINGO: Removed special treatment of 'the sqrt of <value>'
[23:09] <grogbot> <Mataniko> @sev you're on fire lately
[23:09] <grogbot> <sev> yes, I am
[23:13] <grogbot> <sev> just look
[23:13] <grogbot> <sev> https://cdn.discordapp.com/attachments/581224061091446795/709181943841030144/Screenshot_2020-05-11_at_01.15.33.png
[23:15] <grogbot> <SupSuper> for reference msvc2019 currently ships with clang-format 9.0, different tools might ship with different versions. so it might be simpler to make sure everyone's on the same version than trying to find all the differences
[23:24] <-- omgpizzaguy left irc: Read error: Connection reset by peer
[23:24] --> omgpizzaguy joined #scummvm.
[23:31] <ScummBot> Port build status changed with 1b4ce909: Failure: master-gcw0, master-android_arm64
[23:32] <grogbot> <Henke37> only two more ports and the dust settles.
[23:33] <Scummette> [scummvm] sev- closed pull request #2239: Ports: Pause token mk2 (master...pauseTokenMk2) https://git.io/JfWdY
[23:33] <Scummette> [scummvm] sev- pushed 5 new commits to master: https://git.io/JfWFA
[23:33] <Scummette> scummvm/master e73fd6b henke37: 3DS: Use PauseToken
[23:33] <Scummette> scummvm/master ecd23a7 henke37: Android: Use PauseToken
[23:33] <Scummette> scummvm/master 7676efd henke37: Backends: Use PauseToken for showing the vkeyboard
[23:37] <ScummBot> Port build status changed with 1b4ce909: Failure: master-switch, master-psp
[23:43] <grogbot> <sev> @Henke37 yay, includes!
[23:50] <Scummette> [scummvm] sev- pushed 2 new commits to master: https://git.io/JfWb4
[23:50] <Scummette> scummvm/master 4f30f26 sev-: 3DS: Fix compilation
[23:50] <Scummette> scummvm/master 1a64d19 sev-: ANDROID: Fix compilation
[23:51] <grogbot> <Henke37> Boo, missing includes.
[23:55] <grogbot> <Henke37> thanks for the help, but the 3ds one is a bit more than a missing header
[23:56] <ScummBot> Port build status changed with 8ff38d74: Success: master-n64
[23:59] <grogbot> <Henke37> i'm clocking out for the day, lets hope that most fixes are easy.
[00:00] --- Mon May 11 2020