code logs -> 2019 -> Mon, 28 Oct 2019< code.20191027.log - code.20191029.log >
--- Log opened Mon Oct 28 00:00:08 2019
00:51 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Connection closed]
01:32 Derakon[AFK] is now known as Derakon
02:40 Vorntastic [uid293981@Nightstar-6br85t.irccloud.com] has quit [[NS] Quit: Connection closed for inactivity]
03:01 Degi [Degi@Nightstar-u87g98.dyn.telefonica.de] has quit [Ping timeout: 121 seconds]
03:10 Degi [Degi@Nightstar-nipc2c.dyn.telefonica.de] has joined #code
04:05 Pinkhair [user1@Nightstar-g7hdo5.dyn.optonline.net] has joined #code
04:07 Pink [user1@Nightstar-g7hdo5.dyn.optonline.net] has quit [Ping timeout: 121 seconds]
04:09 Vorntastic [uid293981@Nightstar-2dc.p8m.184.192.IP] has joined #code
04:10 mode/#code [+qo Vorntastic Vorntastic] by ChanServ
04:12 Derakon is now known as Derakon[AFK]
05:25 celticminstrel [celticminst@Nightstar-ocfc15.dsl.bell.ca] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
06:27 himi [sjjf@Nightstar-1drtbs.anu.edu.au] has quit [Ping timeout: 121 seconds]
06:52 Kindamoody[zZz] is now known as Kindamoody
09:08 himi [sjjf@Nightstar-v37cpe.internode.on.net] has joined #code
09:08 mode/#code [+o himi] by ChanServ
10:17
<@ErikMesoy>
What's the suggested Java collection type/data structure to use, when tracking which nodes in a graph are connected to which other nodes?
10:52
<~Vorntastic>
In other languages I'd use a list<set<int>>, or if there's additional data, list<pair<node, set<int>>
10:53
<~Vorntastic>
Or dict<keytype, set<keytype>>
10:54
<~Vorntastic>
For very dense graphs (say, average degree higher than half the order of the graph) you might be better off with an adjacency matrix
10:55
<~Vorntastic>
I don't know the precise details of java types
11:12
<@ErikMesoy>
There's a three-digit number of nodes and each is connected to a one-digit number of other nodes, for what that's worth
11:17
<~Vorntastic>
Ok.
11:44 Kindamoody is now known as Kindamoody|afk
12:18 celticminstrel [celticminst@Nightstar-ocfc15.dsl.bell.ca] has joined #code
12:18 mode/#code [+o celticminstrel] by ChanServ
12:53 celticminstrel is now known as celmin|away
13:26
<@sshine>
ErikMesoy, Map<Node, Node>?
13:32
<&ToxicFrog>
sshine: it would have to be a multimap. Map<Node, Set<Node>>.
13:39
<@sshine>
oh, right.
13:45
<&ToxicFrog>
Which is probably what I would use, given the stated graph size.
13:48
<~Vorntastic>
Beware
13:50
<~Vorntastic>
Doing it by reference will make the connection map highly circular. You will leak large objects each time you drop a graph until gc catches it
13:53
<~Vorntastic>
I blew up vornonoi -- though I grant that was lua -- with regularity until I switched to indexes
13:54
<&ToxicFrog>
The JVM uses mark-and-sweep and AFAIK has no refcounting aspect.
13:54
<&ToxicFrog>
Same deal with lua, although IIRC it lacks some of the optimizations JVM has like generational collection.
13:58
<~Vorntastic>
Refcounting is pre-"gc" in both of these, from what I am aware
14:00
<~Vorntastic>
I know that love2d would literally run out of memory if I didn't police my brass.
14:01
<~Vorntastic>
(but once I did - with either a manual finalizer or by simply not generating references - my memory usage was near-constant for the 60fps sector generator)
14:23
<&ToxicFrog>
That's weird and interesting.
14:26
<&ToxicFrog>
Lua doesn't refcount at all; it's incremental pure mark and sweep with some tuning parameters to control how often the gc ticks and how much work it does per tick. What did the "manual finalizer" do?
14:27 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code
14:27 mode/#code [+qo Vornicus Vornicus] by ChanServ
14:28 * TheWatcher notes that "manual finalizer" sounds like a euphemism for a hitman.
14:36
<~Vornicus>
the manual finalizer emptied all the tables; each table had references to other tables: each edge table has a reference to the vertex at its start, the face at its left, the next edge forward around the face, the previous edge backward around the face, and the twin edge that is "the same edge" but in the opposite direction and attached to the other face.
14:38
<~Vornicus>
(and then face tables and vertex tables each refer to one of the edges; face tables also had a reference to the matching hierarchical face and vice versa, and each hierarchical face had references to child hierarchical faces and also its three vertices)
14:39
<~Vornicus>
And then when I was also generating the dual I also had edge <-> dual edge, face <-> dual vertex, vertex <-> dual face, and the dual had everything above except the hierarchy
14:41
<&ToxicFrog>
What this sounds like is that a reference to at least one of those tables (and thus by implication the whole thing) was left dangling somewhere
14:42
<~Vornicus>
There wasn't. Each vornonoi object was referenced exactly once outside its own object; that reference was deleted every 1/5 second
15:06 * TheWatcher feels vaguely bad linking this, but finds it pretty neat anyway: https://observablehq.com/@mbostock/hover-voronoi
15:15 Pink [user1@Nightstar-g7hdo5.dyn.optonline.net] has joined #code
15:17 Pinkhair [user1@Nightstar-g7hdo5.dyn.optonline.net] has quit [Ping timeout: 121 seconds]
15:20
<~Vornicus>
*examines code* oh, okay, so it's doing it the easy way
15:21
<~Vornicus>
(it replaces the voronoi diagram with a new one each frame, so it doesn't have to know how to remove points)
15:22
<~Vornicus>
(I don't know how to do that)
16:04 Pinkhair [user1@Nightstar-g7hdo5.dyn.optonline.net] has joined #code
16:06 Pink [user1@Nightstar-g7hdo5.dyn.optonline.net] has quit [Ping timeout: 121 seconds]
16:09 Vorntastic [uid293981@Nightstar-2dc.p8m.184.192.IP] has quit [[NS] Quit: Connection closed for inactivity]
16:21 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has quit [Connection closed]
16:59 Pink` [user1@Nightstar-g7hdo5.dyn.optonline.net] has joined #code
17:02 Pinkhair [user1@Nightstar-g7hdo5.dyn.optonline.net] has quit [Ping timeout: 121 seconds]
17:05 Pink [user1@Nightstar-g7hdo5.dyn.optonline.net] has joined #code
17:05 Emmy [Emmy@Nightstar-9p7hb1.direct-adsl.nl] has joined #code
17:07 Pink` [user1@Nightstar-g7hdo5.dyn.optonline.net] has quit [Ping timeout: 121 seconds]
17:38 Derakon[AFK] is now known as Derakon
20:14 VirusJTG_ [VirusJTG@Nightstar-42s.jso.104.208.IP] has joined #code
20:14 KiMo|autorejoin [Kindamoody@Nightstar-eubaqc.tbcn.telia.com] has joined #code
20:14 mode/#code [+o KiMo|autorejoin] by ChanServ
20:15 mac [macdjord@Nightstar-rslo4b.mc.videotron.ca] has joined #code
20:15 mode/#code [+o mac] by ChanServ
20:17 macdjord [macdjord@Nightstar-rslo4b.mc.videotron.ca] has quit [Ping timeout: 121 seconds]
20:17 Kindamoody|afk [Kindamoody@Nightstar-eubaqc.tbcn.telia.com] has quit [Ping timeout: 121 seconds]
20:17 VirusJTG [VirusJTG@Nightstar-42s.jso.104.208.IP] has quit [Ping timeout: 121 seconds]
20:40 KiMo|autorejoin is now known as Kindamoody
21:07 Vornicus [Vorn@ServerAdministrator.Nightstar.Net] has joined #code
21:07 mode/#code [+qo Vornicus Vornicus] by ChanServ
21:58 himi [sjjf@Nightstar-v37cpe.internode.on.net] has quit [Ping timeout: 121 seconds]
22:31
< Mahal>
https://pulsesecurity.co.nz/advisories/untitled-goose-game-deserialization
22:32
<&McMartin>
HONK
23:03
< Yossarian>
"Untitled Goose Game used the dotnet BinaryFormatter to read and deserialize save game files."
23:04 * McMartin steals all the stack frames, throws them on the heap
23:04
<&McMartin>
Yossarian: Yes, it's written in Unity, that means it uses .NET libraries
23:05
< Yossarian>
It's a feature (TM)!
23:05
<&McMartin>
The bug isn't in BinaryFormatter, it's in telling to to trust the data implicitly
23:05
<&McMartin>
This looks like more or less the same attack you use to root your Wii with Twilight Princess
23:06 Emmy [Emmy@Nightstar-9p7hb1.direct-adsl.nl] has quit [Ping timeout: 121 seconds]
23:08
< Yossarian>
That's funny, I was just thinking about rooting consoles with load function not sanitizing or treating the savegame data in a special way.
23:10
< Yossarian>
Are these methods in the dynamic libraries .NET specific or Unity specific?
23:11
<&McMartin>
I don't know offhand.
23:11
< Yossarian>
Maybe I'm getting rusty but the idea of such a high-level function to serialize game data that's already made, I dunno.
23:11
<&McMartin>
This sounds not entirely unlike the stuff in java.io,Reader, though.
23:12
< Yossarian>
Explains why lotsa software is pretty crappy these days.
23:12
<&McMartin>
Not sure what you think the alternative is
23:12
< Yossarian>
I'm a sadist so I'd probably try to roll my own serialization and de-serialization methods.
23:12
<&McMartin>
This case is a binary parser routine
23:12
<&McMartin>
Yeah, that's a good way to make bugs that don't show up in standard tools~
23:12
< Yossarian>
yeah the issue is that it treats de-serialization as binary data, ya?
23:13
<&McMartin>
And then serializing memory directly just stops working whenever you rebuild~
23:13
< Yossarian>
or reading again, the use of BinaryFormatter
23:13
< Yossarian>
Looks like a bad call, in terms of design/writing.
23:14
<&McMartin>
That's something you can argue about for basically forever
23:14
<&McMartin>
Remember, you're feeding it bad data
23:14
<&McMartin>
If your XML format allows you to mismatch attributes with contents the deserializer might still overrun.
23:14
<&McMartin>
That kind of thing is the bug
23:15
<&McMartin>
Here, it's mentioning "TypeConfuseDelegate", which I suspect means that the attack does something like give a parent node the wrong children.
23:17
<&McMartin>
The attack appears to be on the Mono runtime here.
23:17
<&McMartin>
It is not clear to me how divergent Mono and stock .NET are now, since both are open-source at this point and controlled by the same company.
23:17
< Yossarian>
Hmm, maybe this is the rusty me talking again but seems like the serialization process is more advanced than just state data, serializing somewhat complex objects it seems as well.
23:18
< Yossarian>
well, state data might be wrong choice of words
23:18
<&McMartin>
I'm extrapolating based on my experience with Java and Objective-C here...
23:18
<&McMartin>
... but I think this is the kind of serializer that can correctly serialize and recreate object graphs that have cycles in them
23:20
< Yossarian>
In my past experience, it has always served me well to create the simplest code first and get it working and then focus on more detail. I'm not familiar with this particular game or Unity but it seems like what is serialized might be overkill for a save game, but I dunno.
23:21
< Yossarian>
That's the thing with high-level languages like Java, Objective-C, et cetera...
23:22
<&McMartin>
Obj-C is less 'high-level' and more 'has libraries'
23:22
< Yossarian>
With high-level stuff and in my experiences with Java, it is very easy to create quite a mess because of the high-level and how OOP is approached by the language.
23:23
<&McMartin>
For the kind of binary deserialization you're describing yourself as wanting to do, python's "struct" module pretty much does all of that and you would be heavily criticized for rolling your own.
23:25
< Yossarian>
On the other hand, being able to serialize that much data in high detail and even recreate the stack, object graphs, etc makes me think that I haven't seen a game outside of an emulator where a save is actually the state of the game, well, furthermore, in an emulator that shoots for architectual accuracy and also tries to capture the idiosyncracies of the hardware
23:25
< Yossarian>
being able to do that is pretty cool
23:25
<&McMartin>
Um
23:25
<&McMartin>
Pretty sure you have!
23:25
<&McMartin>
That's how quicksaves work in almost every FPS since Quake
23:26
<&McMartin>
Now, sometimes they don't quite hit all the points, but those are acknowledged as glitches and the bug was that it didn't capture enough of it
23:27
<@Alek>
not just FPS. I've seen quicksaves in sidescrollers, I'm pretty sure...
23:27
< Yossarian>
Ah, I suppose you're right. Although some games do take shortcuts with quicksaves, I can't remember but there are some titles where quicksave and loading has unintended side-effects.
23:27
<&McMartin>
(We may be talking past each other here; they aren't full memory dumps because such a save would not be transportable across architectures. But they are usually "have the entire game state in one structure and the current stats and locations of every object in the world graph in another, then write those all out" is quite common)
23:28
<&McMartin>
Alek: Earliest example I can think of is Commander Keen IV.
23:28
<@Alek>
haven't played that series...
23:28
<&McMartin>
I *think* Keen 1 just stored which levels were beaten and where you were on the map
23:28
<&McMartin>
IV is the only one that actually holds up to modern eyes, IMO.
23:28
<@Alek>
I do have the Complete Pack on Steam...
23:28
< Yossarian>
I can't think of the title but there was one where quicksave and load would unintentionally remove your effect statuses (RPG)
23:28
<&McMartin>
The Keen series as a whole had the flaw common to Shareware where the free demo episode has all the cool stuff to entice buyers and the followup episodes, well, they already have your money.
23:29
< Yossarian>
and such things like that
23:29
<&McMartin>
Yossarian: Oh, the Elder Scroll engines are infamous for this as well
23:29
< Yossarian>
Morrowind, maybe?
23:29
<&McMartin>
Certain kinds of save/load setups where you end up suddenly rocketing around at a thousand miles an hour
23:29
< Yossarian>
I was thinking of Elder Scrolls games when I'd said that :)
23:29
<&McMartin>
Any% Skyrim speedruns involve ramming a horse into the ground and thus moving at warp speed
23:29
<@Alek>
I seem to remember at least one game where quicksaving didn't store your health state so you always restored with full health, but that's more common with checkpoint games.
23:30
<&McMartin>
Yeah, and there were some other cases where some progress was lost but others was not and it was always infuriating.
23:30
<&McMartin>
The last game I played that I got mad at for this was Bio Menace, but it's very old also not good
23:30
<&McMartin>
I eventually hex edited my saves to beat it because screw you too, buddy
23:32
<@Alek>
checkpointing can actually be annoying too, I just finished replaying a game where there's one checkpoint that saves you before you step through a one-way door but restores you AFTER that door... And there's a missable secret in the room leading to the one-way door, too.
23:32
< Yossarian>
I like playing games and finding interesting quirks in the code, even before I started writing code. Morrowind was the first Elders Scrolls game where you could abuse the intelligence stat for potion making by driking potions of intelligence and stack it, I discovered this independently although it was probably already known and probably on GameFAQs. At the time, on a hunch, I wondered since
23:32
< Yossarian>
intelligence directly effected crafted potion efficacy and soon I was making potions of agility so high I'd jump past the skybox and crash the game.
23:33
<@Alek>
ha
23:33
<&McMartin>
Yup, the Intelligence Ramp is a classic Morrowind strat.
23:33
<&McMartin>
It's, like, 4 hours long
23:33
< Yossarian>
Toned it down a bit and jumping through several zones is pretty funny. This was before speedrunning was a thing, I believe, so...
23:33
<@Alek>
the related Cross-Skill Ramp in Oblivion is also a thing.
23:33
<&McMartin>
But GamesDoneQuick Express 2019 has a heavily yet comprehensively glitched run of Paper Mario: The Thousand Year Door that you may enjoy.
23:34
<&McMartin>
It even involves some glitches that carry across "load a different game"!
23:34
<@Alek>
hwut
23:34
<&McMartin>
Which seems to be very rare for console games
23:34
< Yossarian>
Oh and I ended that experiment by, forget who the big bad in Morrowind is but stacking int to get strength and one-hitting him.
23:34
<&McMartin>
Yossarian: Yep!
23:34
<&McMartin>
I think any% runs of Morrowind are like five minutes
23:34
<&McMartin>
Also fun: because of the way it wants motion to look roughly the same regardless of where the camera is
23:34
< Yossarian>
The weird sneak/steal mechanic in Morrowind and that potion or scroll of jumping you find on that wizard who falls to his death I believe gave me the idea.
23:35
<&McMartin>
Taller characters move faster, so speedruns always pick the tallest race so that you get to the broken parts faster.
23:35
<~Vornicus>
i find myself wondering: is there a game and situation where you can jump high enough on flat ground that you get fall damage when you land
23:35
<@Alek>
now I'm reminded of reading of some cheats for Genesis that abused "load a cartridge, while the game is loading pull the cartridge out and insert a different one"...
23:35
<&McMartin>
https://www.youtube.com/watch?v=i4dc4fyqGVc
23:35
<&McMartin>
Vornicus: Pretty sure that was a gag in either Morrowind or Oblivion
23:36
<&McMartin>
You leave the noobtown and some dude comes flying screaming out of the sky and falls dead at your feet.
23:36
<&McMartin>
You of course then loot the body, and find he was wearing seven league boots.
23:36
<&McMartin>
Which you can put on, and jump incredibly high!
23:36
<&McMartin>
It does not grant immunity from falling damage.
23:36
<~Vornicus>
nice
23:36
< Yossarian>
There is a game you guys probably haven't played that had a very obvious problem, it was a jet fighter sim, cannot remember the title name, had F-22 in it but if you rolled the aircraft in a certain way you'd increase your speed and you'd get up to IRL Mach levels that were ridiculous, around Mach 4-5 game tended to crash, heh.
23:37
< Yossarian>
<&McMartin> You leave the noobtown and some dude comes flying screaming out of the sky and falls dead at your feet.
23:37
< Yossarian>
That's the guy, it was a funny joke and even without cheesing the game, it was a neat thing. I mean, Arena or Daggerfall never had anything like that. Daggerfall spooked me as a child.
23:39
< Yossarian>
Talk about a buggy engine, that Daggerfall... falling through the floors of the dungeons at random. Saving was imperative. Also, have there been Elder Scrolls games since where you could choose between vampirism and lycanthrope...ism?
23:39
<~Vornicus>
opy
23:39
<@Alek>
Oblivion had vampires, don't recall lycans.
23:39
<@Alek>
ESO has both, you can get either, both, or get cured.
23:40
< Yossarian>
I saw someone at GDQ I think do a Elders Scrolls back-to-back speedrun, I think Arena might have been skipped and Daggerfall was the starting title.
23:40
<@Alek>
players who have either can, once a week, infect someone else of their choice. or you can just buy your own on the Crown Store if you're impatient.
23:41
<@Alek>
the vampire thing gives you a pale look that some RPers prize.
23:41
< Yossarian>
Is ESO an MMO like Everquest or Guild Wars or neither? I've lost my joy of games as I've gotten older and more stressed out, I guess.
23:42
<@Alek>
I've not played Everquest. not like GW, though, more like GW2, in that it's open-world.
23:42
< Yossarian>
Everquest / WoW / typical MMO fare I suppose.
23:43 Kindamoody is now known as Kindamoody[zZz]
23:43
< Yossarian>
You're making me nostalgic, the first MMOs I've played were Merridian 59 and The Realm (Sierra Online)
23:43
<@Alek>
however, any given part of the open world can have secret instances, people who have not done a given story quest will see and be in one version while people who have, will see and be in a different version.
23:43
< Yossarian>
Realm still has servers up, I think?
23:44
<@Alek>
NPCs being instanced based on quest completion was done before, I'm pretty sure, but map section instancing was new to me.
23:44
< Yossarian>
They might both be the first MMOs that were MMOs and not MUDs, but I'm not quite sure. I remember being young and seeing people get married in The Realm was trippy as hell.
23:45
<@Alek>
in an open world, anyway.
23:46
<~Vornicus>
whyats the difference anyway
23:46
<@Alek>
?
23:46
<~Vornicus>
between mud and mmo
23:46
<@Alek>
Multi-User Dungeon, Massively Multiplayer Online... hmm. good question, actually.
23:47
< Yossarian>
The coolest thing about The Realm was PVP and how player houses were handled. You could go to anyone's house if you typed their nameand since the game's graphics worked on sprites on a 2d plane you could go hide behind the tree in someone's house and do invisibility, if they were online and decided to visit their house, you run in the door behind them. On dialup you had good chances. They
23:47
< Yossarian>
eventually had to add a button that banished all players from their property that appeared when home. Lots were too lazy to just use it right away just in case
23:47
< Yossarian>
and every house graphically had the same set/2d scene, however it was custom to decorate your outside with flowers or wolf pelts or something
23:48
<&McMartin>
Vornicus: MUDs came first, basically
23:48
<@Alek>
hm. quick google says MUDs were text-only but MMOs have at least some graphical elements, even text-based one MMOs.
23:48
< Yossarian>
getting into someone's chest while invisible or ganking their fancy pelts added an aspect of criminality to the game that gave one something to do other than grind I guess what we now call instances and particular zones
23:48
<@Alek>
I'm dubious but too lazy to keep looking.
23:50
<@Alek>
while we're on the topic of classic gaming, Diablo+Hellfire is on sale at GoG, 8.49
23:50
<~Vornicus>
yep. that's a cow all right
23:50
<~Vornicus>
Hellfire made duping vastly easier. I can't pretend it's not intentional
23:50
< Yossarian>
I quit MMOs after WoW beta and then release, I had all the time in the world to play because I was having ah, I guess social problems or mental health, social anxiety disorder; around the time I quit freshman year WoW came out. I did have teachers come to my house and then I did go back and finish school but WoW not allowing Paladins to smite undead players in PVP zones in battle like the beta
23:51
< Yossarian>
was ugh
23:52
< Yossarian>
But after my third max level character (60 at the time) and battlegrounds came out, I was pretty jaded. Go wait in a queue and PVP in a safe space to gain rank to wear items you can only use... in PVP? I bounced after that, never looked back. If there were MMOs that were "dangerous" again and less grindy, I'd be down. Ultima Online had pretty big consequences for death, didn't it?
23:53
< Yossarian>
I think I remember my uncle's fiance at the time dying by making some mistake in UO and she was pissed
23:53
<&McMartin>
Well
23:53
<&McMartin>
It basically turned the game into an organized crime simulator where you were most likely not one of the gangsters
23:53
<&McMartin>
This is a bad experience!
23:54
<~Vornicus>
non-consensual pvp is a surefire way to make a game suck for people who aren't shithead
23:55
< Yossarian>
Well in UO you could cut down trees and craft a house? Honestly I liked Star wars Galaxies (before the expansions and before people found out the mundane secret to unlocking Jedi), I thought it was a good MMO with its similiar system to UO of skills and free-form economy
23:56
< Yossarian>
I heard strange things about Eve Online, like, in the same vein of SW:G or UO in terms of large swaths of human factions and economies emulating real life and having like, the largest battle in an online MMO or game of any type, ever.
23:56 himi [sjjf@Nightstar-1drtbs.anu.edu.au] has joined #code
23:56 mode/#code [+o himi] by ChanServ
23:58
<&McMartin>
Yes, EVE was a game that was notable for widespread corruption and skullduggery
23:58
< Yossarian>
Vornicus: I understand that viewpoint but I like how The Realm did PVP. You could have PVP on in non-PVP areas and fight those who did the same, another option was to challenge duels I think in a safe area/non-PVP area and then there were areas that PVP was available for everyone, despite your set status. There were quite a few areas, lucrative for grinding, that were PVP enabled, soooo, you want
23:58
< Yossarian>
good loot, you have to take a chance.
23:58
<&McMartin>
"You want good loot, you don't get to keep it"
23:58
< Yossarian>
and death meant you dropped an item at random
23:59
<&McMartin>
UO in particular had the delightful property that logging out left all your items out in the world unguarded
23:59
< Yossarian>
that was it, I don't think you lost experience or skill or anything
23:59
<&McMartin>
So screw up guard shifts of actual real human beings and log in to find everything you own gone
23:59
<&McMartin>
Hope it didn't take you any time to get all that
--- Log closed Tue Oct 29 00:00:10 2019
code logs -> 2019 -> Mon, 28 Oct 2019< code.20191027.log - code.20191029.log >

[ Latest log file ]