00:00 <@carlarc> sadly it didn't work and he just teleported to the upstairs 00:00 yeah 00:00 [hdf-us] [slshm] Disruptor (Ice Vam Mal Cha), 693 points, T:1239, killed by a water moccasin 00:00 still, neat that you managed to do all that excavation without alerting them 00:03 -!- stenno has quit [Ping timeout: 258 seconds] 00:07 <@carlarc> was pretty annoying since it kept stopping because he was right next to me, so i had to do like 6 keytaps each pit 00:10 <@shadowsapex> That's still pretty cheesy 00:48 -!- stenno has joined #hardfought 00:53 -!- stenno has quit [Ping timeout: 250 seconds] 00:55 -!- tacco\unfoog has quit [Ping timeout: 250 seconds] 00:55 -!- tacco\unfoog has joined #hardfought 01:10 -!- raisse has joined #hardfought 01:39 -!- stenno has joined #hardfought 01:43 -!- stenno has quit [Ping timeout: 258 seconds] 01:59 -!- LarienTelrunya has joined #hardfought 01:59 -!- mode/#hardfought [+v LarienTelrunya] by ChanServ 02:14 -!- raisse has quit [Remote host closed the connection] 02:14 -!- raisse has joined #hardfought 03:00 -!- tacco\unfoog has quit [] 03:34 -!- stenno has joined #hardfought 03:39 -!- stenno has quit [Ping timeout: 258 seconds] 03:57 <@carlarc> i think.... i just ate black light meat 03:57 https://cdn.discordapp.com/attachments/400474774440247317/531758302560911370/unknown.png 04:00 hah 04:04 Oh wow! Great stuff! 04:04 You sure it was black light? 04:04 Is it giving you an internal tan? 04:04 <@carlarc> yeah i hallucinated inmediately afterwards 04:04 Ah 04:07 -!- stenno has joined #hardfought 04:08 -!- attie has quit [Remote host closed the connection] 04:12 -!- stenno has quit [Ping timeout: 258 seconds] 04:12 -!- attie has joined #hardfought 04:17 one would think if the food smells like light you might already be hallucinating 04:36 Welcome to experience level 3. What a mess! 05:07 -!- rebatela has joined #hardfought 05:37 -!- stenno has joined #hardfought 05:41 -!- stenno has quit [Ping timeout: 250 seconds] 05:45 -!- stenno has joined #hardfought 05:46 -!- stenno is now known as Guest32953 06:20 <@carlarc> bit stumped here, cant' find the vault that i know is here from anbience 06:20 https://cdn.discordapp.com/attachments/400474774440247317/531794293640265747/unknown.png 06:22 <@carlarc> oh nvm, it was at the soutthwest corner 06:22 <@carlarc> very sneaky 06:49 -!- Guest32953 has quit [Ping timeout: 272 seconds] 06:52 -!- kritixilithos has joined #hardfought 07:06 -!- ProzacElf has quit [Ping timeout: 250 seconds] 07:22 -!- noty has quit [Quit: WeeChat 2.2] 08:08 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) entered Gehennom for the first time, on T:35544 08:29 -!- LarienTelrunya has quit [Quit: Page closed] 08:39 Asmodeus casts a spell! Asmodeus blasts the ceiling with fire and curses! 08:40 hmm 08:40 Klutz 08:40 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) entered Gehennom, on T:30587 08:41 hothraxxa: Such a bad aim. 08:42 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) killed Asmodeus, on T:36252 08:43 -!- raisse has quit [Ping timeout: 246 seconds] 08:43 you must have been displaced maybe 08:43 i am pretty sure the demon lord types can see invis 08:45 -!- Guest32953 has joined #hardfought 08:46 -!- raisse has joined #hardfought 08:50 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) hit with a wielded weapon for the first time, on T:31124 08:50 -!- Guest32953 has quit [Ping timeout: 268 seconds] 08:51 i wasn't even in the same room 08:51 spork gehennom sure has lots of lava 08:51 -!- raisse has quit [Ping timeout: 268 seconds] 08:52 tempted to go with my fireproof jesus sandals and to hell with speed 08:53 k2: did you see that i found the eota in bones? 08:53 yes. thats awesome 08:54 and the MKoT but you cant use it 08:54 right 08:54 i could never have wished for it. thanks to all the bones, i'm up to about a dozen artifacts 08:55 i mean, i could never have gotten it from a wish 08:55 jt also had a castle wand at 0:1 08:55 mine was at 0:2 and i haven't needed to use either of them yet 08:58 nice 08:58 an extra magic marker wouldnt hurt 08:59 only way to get those in sporkhack is to wish for them 08:59 i have three because of bones 08:59 one from a magic lamp 09:00 well damn 09:00 you're in a pretty good spot then 09:00 the bones have been helpful 09:00 maybe make some cursed scrolls of genocide now while you can 09:00 be ready 09:00 operation purple rain 09:01 jt had done the castle, mightyquinn had done the quest 09:01 yeah the plan is purple rain 09:01 just be warned, its hit or miss if you're surrounded by angels when you get there 09:01 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) had Vorpal Blade bestowed upon him by Chih Sung-tzu, on T:31815 09:01 your angel minion is worthless, so have conflict ready to go 09:01 can't i break a wand of teleport? 09:01 that works too 09:01 how many do you have? 09:02 i dunno, about 8 or 10 right now and i've just started gehennom 09:02 rofl 09:02 what madness is this 09:02 10 09:02 having all this gear and you just entered hell 09:02 i know, bones 09:02 K2: Did you replace SSH host key on hardfought.org? 09:03 Mandevil yes for hdf-us when the migration occurred 09:03 OK. 09:04 !help 09:04 K2: https://www.hardfought.org/nethack 09:04 ^ go there to see new keys and verify if that's a concern 09:04 It's fine, just wanted to be sure. 09:04 ok 09:04 -!- kritixilithos has quit [Ping timeout: 250 seconds] 09:05 k2: eota doesn't help with pw regen if not worn, am i right? 09:05 correct 09:05 sad 09:05 sporkhack, eota is now an amulet of power, have to wear it to get power regen 09:05 and if you're not a wizard, its nerfed 09:06 still confers esp and MR when carried so there's that 09:06 all i want is the half spell damage 09:07 so i discovered that ad_magm attacks dont get the half spell damage benefit 09:08 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) wished for "blessed spellbook of polymorph", on T:32244 09:08 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) wished for "blessed fixed greased +3 helm of brilliance", on T:32245 09:08 someone is at the castle 09:09 what does that mean exactly, not knowing the code too well 09:09 so in regards to angels attacking you with shower of missiles, it'll still just be half damage and not 1/4 09:09 ah 09:10 now, reflection without MR is also supposed to make it half damage (from any ray/breath attack) 09:10 not sure if that stacks 09:10 i dont think so 09:11 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) had Stormbringer bestowed upon him by Kos, on T:5543 09:13 :( 09:14 -!- nooodle has quit [Ping timeout: 264 seconds] 09:21 -!- Tangles has quit [Ping timeout: 240 seconds] 09:22 ok i'm seeing two of juiblex 09:22 yup 09:22 A jubilee of Juiblex? 09:22 it splits in two like a pudding if you attack with wielded weapon 09:22 damn 09:22 range attack it if you can 09:22 Does the wand of digging still work? 09:22 think so 09:26 -!- mode/#hardfought [+v jonadab] by ChanServ 09:27 so i hot one with a wand of cold and now there's three 09:28 hit 09:30 four, but they're all dead now 09:32 a wand split it? huh 09:37 twice 09:37 i just started whacking with the staff 09:37 hmm 09:37 -!- Guest32953 has joined #hardfought 09:37 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed Croesus, on T:33412 09:42 -!- Guest32953 has quit [Ping timeout: 252 seconds] 09:49 [hdf-us] [nh362] satori (Ran Gno Mal Neu), 283 points, T:906, killed by a poisonous corpse 09:51 -!- nooodle has joined #hardfought 09:52 [hdf-us] [nh362] satori (Tou Hum Fem Neu), 164 points, T:314, killed by a gnome zombie 10:01 -!- raisse has joined #hardfought 10:01 -!- Tangles has joined #hardfought 10:01 -!- mode/#hardfought [+o Tangles] by ChanServ 10:01 -!- nooodle has quit [Ping timeout: 246 seconds] 10:03 -!- LarienTelrunya has joined #hardfought 10:03 -!- mode/#hardfought [+v LarienTelrunya] by ChanServ 10:08 -!- nooodle has joined #hardfought 10:25 <@kritixilithos> sad https://news.ycombinator.com/item?id=18843584 has only 4 upvotes, I imagine something more clickbaity like "Nethack speedrun under 8 minutes using RNG exploitation" would capture more attention 10:29 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 6801 points, T:6024, offed by a dwarf 10:30 WTF is that? 10:30 How do you do TAS on NAO? 10:31 Also, why is this not on NAO? 10:31 I mean on reddit 10:31 it is i thought 10:32 https://www.reddit.com/r/nethack/comments/adbgzd/yaap_swagginzzz_a_tool_assisted_speedrun_on_nao/ 10:32 Man, it's the fastest ascension in both gametime and realtime. 10:33 not surprisingly, it could use the knowledge of the future to guide the character through the dungeon 10:34 But how does it learn the future? Is there a way to find the RNG seed or what? 10:34 hmm, they had to search 6 minutes for a fountain? don't they know wizard mode? although wizard mode might not be exactly the same at startup, but that could easily be fixed 10:35 Mandevil: read the pellsson.github.io writeup 10:35 they found the seed based on starting attributes and inventory 10:35 TL;DR look at the inventory of a tourist at turn 1, look the seed up in a precalculated db, then go to fountain and do RNG exploitation by walking in walls. 10:35 they automated the last part including the ascension run 10:36 aosdict: Ah, I will, but I am leaving in few minutes. 10:36 bhaak: If you walk into a wall, where exactly does a rn2 call happen? 10:36 But yeah, I get it. 10:36 nethack's seed is weak. 10:36 Mandevil: they know the future because their local copy forks and if the client dies, they fork again and again 10:36 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) bribed Asmodeus with 182 zorkmids for safe passage, on T:38432 10:37 It does the roll for eroding an engraving on the ground, regardless of whether one is there or not. 10:37 aosdict: u_wipe_engr in hack.c IIRC 10:37 Epic work at any rate. 10:37 Mm 10:38 Weird. I am running a 362dev game in gdb with a breakpoint on rn2, and walking into a wall isn't triggering it. 10:39 It might be a different random function 10:39 Like `d` 10:39 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed Juiblex, on T:38825 10:39 or `rnd` 10:39 rnd is just a macro around rn2 10:39 right 10:39 let me break on rand() instead... 10:40 no, still getting no trigger 10:41 <[Demo]6> can you touch the floor? 10:42 <[Demo]6> breat on u_wipe_engr maybe and if that never happens figure out what calls it and break on it? 10:43 hm 10:43 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) bribed Baalzebub with 1 zorkmid for safe passage, on T:39183 10:45 weird... u_wipe_engr breaks. 10:45 and it's definitely called with an argument of rnd(5). 10:45 Seems like that should only be called after the game figures out you're actually moving. 10:46 Though this wouldn't really prevent advancing the RNG state in zero turns; you can still do that with hallucination. 10:47 hah that speedbot post on reddit got the platnium award 10:48 aosdict: rnd != RND 10:48 aosdict: rn2 uses RND and rnd uses RND. but they don't use each other 10:49 rn2 is also just return RND(x);, it's possible the compiler optimized that call away? 10:53 -!- pellsson has joined #hardfought 10:54 pellsson: you were lucky that 3.6 got released as on the NAO version of 3.4.3 it wouldn't have been possible :-) 10:54 <[Demo]6> another example of how 3.6.x is actually a regression :P 10:55 i think i concluded it would have 10:55 using two databases 10:55 need to have a look at the logic again, but basically it was reseed every N'th turn right? 10:55 yes 10:56 but you wouldn't have been able to get the initial seed 10:56 how so? 10:56 3.4.3-nao reads the seed from /dev/urandom 10:56 where the seed comes from is irrelevatant if you have all of them? 10:57 and the reseeding can be subverted, it is more work, but still possible 10:57 shit, you're right 10:57 I'm still thinking in the older exploits 10:58 so the only way to prevent this would be to go to a larger seed space. 10:58 <[Demo]6> its really cool to see the rng rebroken 10:58 but we already knew that 32 bit is not enough today, not only in rngs but lots of other stuff, too 10:58 there are many ways, a 64-bit seed would definately make it harder :) 10:59 you could share a common random state across all games too 10:59 would make it very hard to predict 11:00 <[Demo]6> reseed based on bones? :P 11:00 paxed tried this in 2009 by using /dev/urandom for every rnd call. but it was to slow back then. although I don't know what he tried exactly, if he openend and closed /dev/urandom for every call, I would expect it to be slow 11:00 [Demo]6: yeah, using bones and highscore in the random would be very effective 11:00 not for reseeding though 11:01 heya pellsson 11:01 <[Demo]6> you might have enough data to recreate the highscore database though? 11:01 you've created quite a stir ;) 11:01 <[Demo]6> through dumplogs and stuff? 11:01 urandom is static though isnt it? /dev/random is the on with user entropy 11:02 hello K2 11:02 sorry :( 11:02 you don't want a block source of randomness. the rng has to be good enough without added entropy 11:02 <[Demo]6> no its a good stir 11:02 /dev/random on linux blocks if it runs out of entropy 11:02 oh :) 11:02 yeah no need to apologize 11:02 yeah bhaak 11:02 it does 11:03 although the implementation changed in 4.8. they're using chacha20 now, too 11:05 is it time to port NH4's "a separate RNG for everything"? 11:05 aosdict: Not for this reason; I don't think it would actually solve the current issue. 11:06 reading the microseconds at game start and mixing it in with each random call would solve the issue too 11:06 Although, I think the initial seed in NH4 might be more than 32 bits. 11:06 not sure how it would affect randomness... but can probably be solved 11:06 Which would make some difference. 11:06 64-bit seed also solves it 11:07 well, solves it for now. 11:07 the reseed logic in 3.4.3 does not solve it 11:08 generating the same database would take 2^32 weeks on a home computer if the seed was 64-bit :) 11:08 and the db would be 2^32 times larger 11:08 Hopefully by then the next version would be out and you'd have to start over. 11:08 <[Demo]6> moore's law is dead so that would probably ultimately work out 11:09 is nethack 3.6 RNG still the srandom()/random() LCG? 11:09 Adeon: yeah 11:09 you could probably figure out the maths to figure out that state without seed 11:10 yeah thats true i guess 11:12 int rnd() { if(nth_call()) { us = getmicroormilli(); } return random() ^ us; } would be a nightmare to work around 11:12 ^ us might compromise the distribution, but i am sure there are plenty of good algorithms to achieve the same concept 11:12 pellsson: I don't know if you think this way but IMO the most impressive part of your thing is everything that happens at the fountain once the bot takes over 11:12 that ascension logic is crazy 11:13 it's constant time travelling 11:13 and lots of deaths 11:13 yeah I love it 11:13 pellsson = celeb status in nethack community 11:13 on a couple different fronts 11:13 <[Demo]6> does nao record ttyrecs? 11:13 well, you and your team 11:14 <[Demo]6> there there anywhere i can watch the SWAG ascension? 11:14 lol yeah the fork()-concept is pretty cool 11:14 https://alt.org/nethack/userdata/S/SWAGGINZZZ/ttyrec/2019-01-05.23:56:16.ttyrec 11:14 <[Demo]6> thanks 11:14 pellsson: the NH4 RNG basically just keeps a large-number-of-bits integer as internal state, and each time the RNG is called, it increments this number and then performs a cryptographic hash on it (I forget if it's SHA or what) to produce the output. 11:14 [Demo]6: nah but we really should make a desktop recording of when it runs, looks pretty crazy as it is trying to solve it 11:14 wait, really 11:14 -!- raisse has quit [Ping timeout: 268 seconds] 11:15 the hardened RNG was mostly the stuff of patches IIRC 11:15 like the NAO reseeding or /dev/null yarrow RNG thing 11:15 Right, by the end of the 3.4.3 era the servers were all RNG-patched, but then 3.6 came along. 11:16 And the patch NAO had been using was Linux-specific, so of course that didn't go into 3.6 11:16 jonadab: we actually started looking at 3.4.3 (by accident, downloaded the wrong source :)) and it can be subverted equally easy 11:17 you build one database to find the start seed 11:17 Someone should put this on the notable ascensions wiki page, btw. 11:17 Frankly, RNG weaknesses only matter on public-server host platforms, which is really only Linux and BSD. So a version that's #ifdeffed to only those platforms *should* solve everything, I *think*. 11:17 and you know when it will reseed 11:17 jonadab: Who is running a public server on BSD? 11:17 pellsson: Right, vanilla 3.4.3 was known vulnerable long ago. 11:17 kerio? 11:17 aosdict: Yes. 11:17 -!- rebatela has quit [Quit: Konversation terminated!] 11:17 with NAO patches too 11:17 FreeBSD last I heard.\ 11:17 -!- j has joined #hardfought 11:17 pellsson: Oh? 11:17 Hmm. 11:17 yeah 11:17 so 11:17 -!- j has quit [Client Quit] 11:18 found a very cool exploit (when we were looking at the wrong code by accident) 11:18 same db concept from start 11:18 when you know that it is about to reseed 11:18 you have a second database or sequences from pressing $ when hallu 11:18 do that like 10 times or however many youd need to make it unique 11:18 -> new lookup 11:18 resume 11:19 <[Demo]6> ah geez 11:19 s/or/of 11:19 ($ hallu will show random currency name, zero time) 11:19 so 1/8-ish per $ 11:20 you can also just ^R, that cycles the hallu glyphs. 11:20 would have to know the position of all glyphs though to know the state 11:20 oh but i guess you would 11:20 oh but you cant precompute 11:21 slow, but possible 11:21 $ would be instant 11:24 artifact naming trick I guess wouldn't work on 3.6 11:24 but you could probably engrave on floor and walk into a wall 11:25 and observe the degradation 11:25 doesn't consume turns 11:25 engraving... 11:25 we considered this 11:25 ubirthday i think? 11:25 if you are thinking about decay 11:26 yeah its ubirthday 11:28 Adeon: you are partly to be blamed for all this btw. someone started playing one of your speedruns while we were sat drinking beers, its how the discussion was born ;) 11:28 -!- Guthix__ has joined #hardfought 11:29 whaaaat 11:29 Like, playing the ttyrec, or the conference video? 11:29 first ttyrec on youtube i think, then conference by suggestion 11:29 <@luxidream> told you you were famous Adeon 😛 11:30 that live ascension is absolutly insane. inconciveable 11:33 Oh, I forgot dtype put the NAO ttyrecs on YouTube now. 11:38 -!- Guest32953 has joined #hardfought 11:39 what's everyone's favourite console font? I personally like consolas 11:39 Exo 2 11:40 https://fonts.google.com/specimen/Exo+2 11:41 It's not monospace per se, but my terminal renders the characters with the same spacing 11:42 interesting, your terminal makes it into monospace? 11:43 -!- Guest32953 has quit [Ping timeout: 246 seconds] 11:47 -!- tacco\unfoog has joined #hardfought 11:49 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law), 680 points, T:1332, killed by a giant ant 11:54 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) made his first wish - "blessed greased fixed +3 gray dragon scale mail", on T:7438 12:01 [hdf-us] [spl] Noah (Rog Inf Fem Cha) had The Marauder's Map bestowed upon her by Kos, on T:5095 12:11 -!- Guest32953 has joined #hardfought 12:14 [hdf-us] [spl] Noah (Rog Inf Fem Cha) changed form for the first time, becoming a walking willow, on T:6125 12:16 -!- Guest32953 has quit [Ping timeout: 272 seconds] 12:28 -!- j has joined #hardfought 12:28 -!- j is now known as Guest68492 12:28 -!- Guest68492 is now known as rebatela 12:37 lol 12:37 rip 12:37 s/Guthix/Dudley/ 12:37 that was a hard-hitting newt XD 12:39 -!- kritixilithos has joined #hardfought 12:40 -!- raisse has joined #hardfought 12:45 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 18016 points, T:8784, taken down by an energy vortex 12:45 -!- nooodle has quit [Ping timeout: 240 seconds] 12:53 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) had Excalibur thrown at her by some watery tart, on T:2967 12:53 tyyyyyypooooooos 12:53 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law), 2107 points, T:3230, killed by a snake 12:53 happens only when i'm specifically trying not to do it XD 12:55 -!- raisse has quit [Ping timeout: 258 seconds] 13:01 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law), 544 points, T:1063, killed by a gnome lord 13:02 -!- Guest32953 has joined #hardfought 13:03 -!- Guest32953 is now known as stenno 13:03 friendly reminder that mob psycho 100 season 2 has started *HYPE* 13:03 anyway, has somehow thought about how to fix the swagginz bruteforce thing? 13:03 i thought about it but didn't find a good solution yet 13:04 mob psycho 2's out!!!!?!?!?!? :O 13:04 hype hype hypeee 13:04 yes, first episode today 13:04 stenno: Thank you for the reminder I need to get off my ass and watch season one 13:04 :D 13:04 it's so good 13:04 good good! 13:04 its great 13:04 it's just as great as OPM 13:04 i loved s1 13:04 ONE is the god of storytelling 13:04 anyone here ever watch 'travelers' on netflix? 13:05 i finished binge watching all three seasons recently 13:05 really liked it 13:05 tbf i think mob works better as a story than opm 13:05 too many things to watch/read/do 13:05 Picked up the mistborn trilogy yesterday 13:05 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law), 1114 points, T:1800, killed by a fire ant 13:06 this is enough nethacking for one day i think 13:06 i should go make food and get on with my uni work ;-; 13:07 ooh, mistborn. I read the first one and then forgot to get the second one at my library. 13:08 stenno: the obvious way seems to be to increase the seed space to 64 bits 13:09 PavelB: I also happened to catch when tor.com was releasing the way of kings as a free ebook... but I never actually read that either. 13:09 right, that would make it impossible to break just because it would take muuuuuch more time 13:10 aosdict: If it doesn't have DRM you could send me a copy :3 13:10 stenno: I think this particular exploit isn't really preventable as long as the whole seed space can be explored. 13:11 i thought about something silly like re-rolling the seed every random number of actions 13:11 stenno: ever watch Mr. Robot? 13:11 where that randomness is externally acquired 13:12 K2: no 13:12 you should 13:13 oooh with the guy who played freddie mercury in bohemian rapsody 13:13 (which i should watch too) 13:13 oh and he played in oldboy 13:13 <[Demo]6> the egyptian guy and batman 13:14 [hdf-us] [spl] Noah (Rog Inf Fem Cha) had Doomblade bestowed upon her by Kos, on T:2153 13:15 pellsson: can you now repeat your exploit in nethack4 where everything has its own rng? 13:16 everything has its own rng? how do you mean? 13:17 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) had Excalibur thrown at her by some watery tart, on T:2971 13:20 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) became literate by reading a scroll, on T:3807 13:20 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 610 points, T:3412, killed by a wererat, while fainted from lack of food 13:22 -!- nooodle has joined #hardfought 13:23 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) performed her first genocide (class L), on T:4461 13:23 initial look at newrng.c looks exceedingly more complicated 13:24 like, there are separate rngs for everything. scanning fiqhack, I see: one for horns of plenty, one for altar conversions, one for getting touch of deathed, one for getting loot from a throne, one for dropping dragon scales, and on and on... 13:24 it shouldn't be possible in nh4, right 13:25 oh, and there are 5 different ones for fountain wishes 13:25 aosdict: i think your approach is both straightforward and sufficient 13:25 (I'm not really serious about attempting this in nh4) 13:26 Separate RNGs sounds like a slightly crazy alternative to just using proper randomness. 13:26 ... speaking of which, I have another crazy alternative; generate incidental details by looking at the current corpus of bones files. 13:26 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) changed form for the first time, becoming a master mind flayer, on T:5486 13:26 proper randomness? i.e. fetching a number from /dev/urandom at each call? 13:26 how much extra overhead does that add to running a nh4 process? 13:27 stenno: fetching a number from hotbits.org at each call :) 13:27 i always assumed the version of curses it uses was responsible for how much cpu it used 13:27 lol 13:27 but if its adding a separate seed for *everything* 13:27 istr that in my ancient C code i wrote at some point in my youth, i had to call srand() at the beginning of the code 13:27 huh 13:27 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) killed Medusa, on T:5613 13:28 aosdict: got a code reference to the 4x fountain wish thing in nh4? 13:28 is srand used to initialize the seed in nethack? 13:28 er 13:28 to seed the rng * 13:29 pellsson: well, I have a copy of fiqhack, not nh4, but in there, fountain.c line 45, wish_available() 13:30 oh yeah srand is used in src/hacklib.c 13:30 stenno: ... as the last fallback option if nothing better is available 13:31 they all eventually end up in the same random state so that shouldnt matter (unless of course i am missing something) 13:31 pellsson: people wanna know - what brand of beer were you all drinking when you did this little project? 13:31 what would something better be? (not sealioning, it's ignorance) 13:32 stenno: Well, look up a bit in hacklib.c 13:32 oh yeah, what about that "quick dirty band-aid to prevent PRNG prediction"? How'd that work out? 13:32 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) made her first wish - "blessed fixed greased +2 cloak of magic resistance", on T:6704 13:32 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) wished for "2 blessed greased scrolls of charging", on T:6708 13:32 K2: cant recall. whatever it was it was too much of it :) 13:32 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) wished for "blessed greased ring of conflict", on T:6710 13:32 acceptable answer 13:33 ;) 13:33 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 423 points, T:1269, killed by a gnome lord 13:33 i'm partial to rum myself when playing/messing up code 13:33 Pinkbeast: i assumed that srandom works similar to srand 13:33 nh4 rng is alot more complex though effectively a 64-bit seed if i understand it correctly 13:33 based on time, guess that might be a weakness 13:34 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) entered Gehennom, on T:8653 13:34 oh and urandom 13:34 Pinkbeast: also keep in mind that it doesn't really matter how the seed is generated 13:35 stenno: correct 13:35 i mean, assuming it is 32-bit 13:35 yes 13:35 64bit as aosdict suggested OTOH... 13:36 need exponentially more clusters :P 13:36 One important distinction between the functions called in hacklib.c is that one takes a long as argument, and one an int. 13:36 32^2 to be precise :) 13:36 2^32? 13:36 eh, other way around 13:36 mm 13:36 stenno: I have no idea what you mean by that since it is extremely important whether or not the seed is generated in a way that lets the attacker trivially determine it. 13:37 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law), 100611 points, T:9330, killed by a blue dragon 13:37 Pinkbeast: if you have all seeds, doesnt matter 13:37 it* 13:37 Pinkbeast: the generation itself wasn't attacked here. they deduced the seed by checking the starting inventory and first level layout 13:37 stenno: I know. 13:37 <[Demo]6> i think the most efficient solution is to just use 64 bit seeds and assume moores law is dead enough it wont matter for long enough that it becomes someone else's problem 13:37 pellsson: It doesn't matter for your specific attack; it matters in general. 13:37 agreed 13:38 yes, it matters in general, of course 13:38 i was just talking about swaggerz attack 13:38 Pinkbeast: oh yeah. sorry. in gereral, absolutely 13:38 for example, adeons initial attack wouldn't work on hardfought 13:38 <@luxidream> !lastgame 13:38 @luxidream: [hdf-us] https://www.hardfought.org/userdata/L/Luxidream/nh361/dumplog/1546884628.nh361.txt | [hdf-eu] https://eu.hardfought.org/userdata/G/Guthix/nh361/dumplog/1546883638.nh361.txt | [hdf-au] https://au.hardfought.org/userdata/T/Tangles/splicehack/dumplog/1546866140.splice.txt 13:39 ... which on systems where int is strictly smaller than long, would certainly prefer the seed to be an int not a long 13:39 but swaggerz attack would work on hardfought 13:39 swagginz* 13:39 or w/e 13:39 ...that name <.< 13:40 well but we can consider nethack borked for now i guess 13:40 stenno: Going back a bit, the other reason hacklib.c prefers not to use srand() is traditionally srand/rand() might be any old algorithm but srand/rand48() were mandated by POSIX to be something specific which is a pretty good PRNG except against an intentional attacker. 13:41 <[Demo]6> i wonder if anyone else has done this before to get really long streaks 13:41 aah i see 13:41 [Demo]6: i was thinking about that too - it would be impossible to prove 13:41 <[Demo]6> how long does seed lookup take? 13:41 <[Demo]6> isnt it so fast that it isnt noticable? 13:41 32 lookups in the worst case 13:41 <[Demo]6> goddamn ok 13:41 <[Demo]6> so yeah 13:41 These days, especially on Linux, rand() is probably just random() in a funny hat 13:41 0 time 13:41 it's O(1) isn't it :P 13:42 hooray for log(n) algorithms 13:42 <[Demo]6> you'd have to start a game, find the seed, then figure out how to play it on another machine 13:42 oh log(n) 13:42 <[Demo]6> so there would be a lot of time between starting the game and ending it 13:42 <[Demo]6> err, starting the game and coming back to it 13:42 I feel like, looking at setrandom(), that you don't even really need to explore all 2^32 seeds, if you're targeting a certain starting second. You only need to explore all combinations of that second with the 2^16 possible pids. 13:43 [Demo]6: also keep in mind the session must be active while doing that 13:43 <[Demo]6> oh 13:43 restart and you reset the seed 13:43 or saving 13:43 <[Demo]6> that would be noticable yeah 13:43 at least in vanilla 13:43 (and if you wanted to give yourself a buffer of, say, 5 seconds, you would then have 5 * 2^16 to explore) 13:43 whats more insane is that calculating the whole run took 45 seconds 13:44 <[Demo]6> im not sure how to abuse this to make it look real 13:44 [Demo]6: well you can make it look like you got one lucky fountain wish, maybe two 13:44 <[Demo]6> cause all the questionable in nature runs i can think of arent actually questionable in play 13:44 stenno: yeah so sad we couldnt find a fountain quicker :( 13:45 so reading from /dev/urandom would prevent shrinking the possible seed space in the way I described 13:46 could write a bot that finds a fountain 13:46 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) had Mjollnir bestowed upon her by Tyr, on T:2365 13:46 <[Demo]6> none of the runs i am curious about are sketchy at all in their luck though 13:46 fully botted -> sub-1m ascension 13:46 <[Demo]6> there arent a whole lot of wishes 13:46 <[Demo]6> just a whole lot of not dying 13:46 you don't need many wishes if you can control the rest of the game 13:47 <[Demo]6> rng abuse would be noticable to watchers 13:47 for example, trap generation and deadly-ness of poison? 13:47 true, wishes are more for hedging or having nice things 13:47 finding the fountain on xlvl1, with all that involves is probably more code than the entire bot though 13:47 you can just rng manipulate a wand of death into generating or something 13:47 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) made her first wish - "blessed fixed greased +2 gray dragon scale mail", on T:3626 13:48 Suppose you're already pretty good. As you play, all your moves are recorded. When you get to a hairy situation, you quickly experiment with your local copy which started with the same seed. Now you know what moves to play next to not die. 13:48 i guess xlvl1 doesnt really matter once you enter dlvl2 and control level generation though... 13:48 Pinkbeast: exactly 13:48 <[Demo]6> yes pinkbeast, thats the only way i can see it working 13:48 And this doesn't look suspicious at all because it looks like when you get to a hairy situation you stop and have a cup of tea and a think. 13:48 <[Demo]6> but that would require having the connection open to the server game the whole time 13:48 Pinkbeast: yeah that would work extremely well 13:48 actually a really cool concept 13:48 <[Demo]6> so there would be a HUGE wait 13:49 [Demo]6: I'm not sure why there's a huge wait. 13:49 <[Demo]6> there would be several hours where you just sit there not moving while you start recording 13:49 <[Demo]6> because you have to keep the game open 13:49 <[Demo]6> or the seed resets 13:49 I still don't follow. 13:49 <[Demo]6> and all your work is meaningless 13:49 <[Demo]6> Ok so say i start a game on nao and find the seed 13:49 <[Demo]6> i then plug that into a local game and record the inputs for me to win it 13:49 well if you have pellsson's 100GB lookup database of seeds that you can find any seed in in logn time... 13:49 [Demo]6: I'm not suggesting that. 13:49 <[Demo]6> its not about finding the fucking seed 13:49 <[Demo]6> oh 13:50 <[Demo]6> I see 13:50 [Demo]6: you just did what we did pre-fountain 13:50 and if you feel unsafe 13:50 [Demo]6: I'm suggesting, as an aid to an already-good player, that I play normally, except when things look bad I can peek ahead to see how to survive. 13:50 just ask the bot 13:50 <[Demo]6> you are mirroring input to nao to a local copy 13:50 I don't even have to per se RNG abuse here, just try out several strategies. 13:50 <[Demo]6> and when shit looks bad on nao then you start bothering the local copy, asking for tips and tricks 13:50 and add in forking and stuff so that one copy stays at that moment 13:50 <[Demo]6> yeah that would work 13:51 would work so well :) 13:51 and would look 100% legit 13:51 <[Demo]6> would it require not saving? 13:51 lucky at times perhaps :) 13:51 nah 13:51 bot and NAO are always at the same state 13:51 if you need to know something, bot just branches out for a few seconds 13:51 you know the best move 13:51 and continue 13:51 [Demo]6: I think so, but it just looks like I stopped to have a bit of a think when things got bad. 13:51 you can just ^R every 30 minutes if you needed to stay online. 13:52 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law) had Excalibur thrown at her by some watery tart, on T:5055 13:52 <[Demo]6> right but im trying to examine previous runs here that i cant understand 13:52 isn't visible to anyone that you're just keeping the connection alive 13:52 oh saving is an issue 13:52 unless of course you use the dual-database strategy 13:52 I left the session open because I want to look at my game while I have a think. I don't have a bot at all, other than automation to reproduce my moves; I just play locally for a bit and see what works. 13:52 with hallu $ for intsance :) 13:52 <[Demo]6> and try to figure out if they could possibly have abused the rng similarly 13:53 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 439 points, T:1364, overpowered by a giant fly 13:53 <[Demo]6> i think keeping local one or two turns ahead of nao would make sense so if you get stealth killed you have time to prevent it 13:53 [Demo]6: Oh, excellent idea. 13:53 ah lol yeah 13:54 <[Demo]6> i think you could streak very well this way 13:54 <[Demo]6> so well that it would even look legitimate 13:55 Maybe more, a few hundred turns ahead. It just has to be short enough that if I die locally and try a few other approaches, it just looks on NAO/hdf like I went to the loo or something. 13:56 yeah if you offset it by like a few realtime minutes, you wouldnt even need a bot 13:56 what we now have to discuss is if every game of nethack is inherently winnable 13:57 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 153 points, T:463, mowed down by a fox 13:57 i mean if you know the seed it should be. cant think of any unwinnable scenarios 13:57 I definitely think you want to do it without a bot, what better way to look like natural play by a human? 13:57 that cant be prevented 13:58 <[Demo]6> yeah unwinnable isn't a thing cause wishes 13:58 <[Demo]6> err it is 13:58 <[Demo]6> but there probably aren't any seeds for it 13:59 it's a thing if you fuck up the quest but you can just not do that 13:59 isha: That's not the question - you can also render the game unwinnable by pressing < on turn 1, in that sense 13:59 what about falling rock traps on turn 1? 13:59 i don't think i'd call that 'unwinnable' so much as 'already lost' which isn't quite the same 13:59 or did they change that 13:59 kritixilithos: you have to step off the stairs to trigger it, just go in a different direction 13:59 kritixilithos: Don't walk into the trap (this is all with supernatural powers from RNG abuse) 14:00 hmm actually, yeah. turn 1. door not next to wall. no hallu puts, surrounded by falling boulders. RNG fixed to do more than starting HP, and not possible to manipulate.... 14:00 pellsson: And no coinflip :-) 14:01 <[Demo]6> is it possible to find seed after saving and reloading? 14:01 i dont think so 14:01 yeah we thought of a way 14:01 get hallu, press $ 14:01 say 20 times 14:01 [Demo]6: Only by examining some... oh, what pellsson said 14:01 build a new database that indexes the order of what gold-names you get 14:02 <[Demo]6> you'd need to be halluing 14:02 <[Demo]6> and that would be noticeable 14:02 if you are not you dont call random() though 14:02 [Demo]6: Are you working towards a thesis that a streak where the player saves and loads and doesn't do anything funny after loading is probably legit? 14:03 <[Demo]6> I just want to know if it's a possibility 14:03 -!- rebatela has quit [Ping timeout: 246 seconds] 14:03 hmm... code the game so it forces a save at key milestones in the game. tout it as a safety feature so you dont lose too much progress in case of a segfault 14:03 problem solved 14:04 there is checkpoint 14:04 idk how it relates to reseeding though 14:04 probably not at all 14:04 -!- kritixilithos has quit [Quit: :q] 14:05 [hdf-us] [spl] Noah (Rog Inf Fem Cha), 289 points, T:1354, defeated by a giant fly 14:05 [Demo]6: You'd have to wait a long time between save and next move to build a new corpus of data, so if the player saves and reloads soon after they can't be doing pellsson's attack on the loaded game. I think? 14:05 urandom powered by bistromatics 14:06 Pinkbeast: you could just prebuild the $-database though? 14:07 <[Demo]6> are there any things that usually take a turn but you can abort that still use random before you abort without needing to halu? 14:07 pellsson: Sorry, to be more clear, I was thinking of the case where the player doesn't do anything obviously odd after loading, so they have to determine the state by what monsters turn up etc. 14:07 <[Demo]6> like menus 14:07 <[Demo]6> there are other ways to determine the state possibly? 14:07 Pinkbeast: ah yeah, then it would take a long time yes 14:07 <[Demo]6> i just cant see there not being 14:08 nethack system requirements: 1kb ram, 1MB hard drive, strontium-90 + geiger counter (for true RNG) 14:08 however, if we want to go full paranoid, 3.6.1 does allow message blocking. you could just change your conf to block all $ messages, find the seed, restore conf 14:08 almost hidden from ttyrec 14:08 unless you look at input sent 14:08 Carrying a few fortune cookies and scoffing them after a load wouldn't look odd to someone not aware of this attack 14:08 [hdf-us] [nh362] Luxidream (Val Dwa Fem Law), 76792 points, T:9021, killed by a bolt of lightning 14:08 no true 14:08 <[Demo]6> hell i bet it would be even easier to determine rng state after saving and reloading slex than other variants 14:09 SLEX's angry fruit salad levels probably can tell you in no time 14:09 <[Demo]6> isnt the idea that you want to find it with 0 turns used? 14:10 <[Demo]6> youd need to eat a few cookies i think 14:10 <[Demo]6> and that would mean you couldnt save until you found cookies 14:10 <[Demo]6> but yeah 14:10 <@kritixilithos> what about spamming the oracle 14:10 <[Demo]6> that eats turns 14:10 too slow 14:10 <[Demo]6> and costs money 14:10 <[Demo]6> and requires sitting next to the oracle 14:10 read credicard 14:11 Or repeatedly examining a coyote :-) 14:11 probably 1 turn solve 14:11 <[Demo]6> a coyote would work 14:11 or is creditcard ubirthday too? could be 14:11 same as engrave-decay with otherwise is a pretty good idea 14:12 <[Demo]6> it would be interesting to look at the beginning and ends of ttyrec segments of games from the longest streak on nao 14:13 <[Demo]6> and see if theres a pattern in that a lot of random number usage is being displayed right as the save is restored 14:13 ...man my streaks are about to get invalidated by default <.< 14:13 heh 14:18 <[Demo]6> whats the longest streak on nao anyways? 14:18 hmmm actually 14:18 tariru? 14:18 60-something 14:18 <[Demo]6> i swear he got over 100 on something? 14:19 he got 100% streak on slex over 4 games 14:19 Tariru 61, according to scoreboard.xd.cm 14:19 doesnt what ever lookup method you use pretty much have to be 0 turns...? 14:19 <[Demo]6> I'm happy Tariru's streak ended with a prime number of games 14:19 unless you see every random-causing element on the map, including monsters, pets, eating a bunch of fortune cookies wont do you any good 14:20 you could get a legitimate turn 1 ascension without wrapping the turn counter in slex, by finding a RNG seed that has you start with a certain pair of boots and RNG-manipulate its "only advance turn counter 50% of the time" effect throughout the entire game ;) 14:20 because an arbitrary amount ifn randoms() are lost 14:20 pellsson: Oh damn, point 14:20 I had a prime number streak once. (It was also an even number. :-/ ) 14:21 yay the even prime number 14:21 best of all the primes 14:21 hehe 14:21 Errr also on reflection it was in another roguelike, sorry 14:22 <[Demo]6> ok maybe im super paranoid 14:23 <[Demo]6> but some of these tariru save reloads have strangeish? starts 14:23 <[Demo]6> ok maybe not 14:24 i feel confidently that he just ascended by normal means 14:24 guy ascended slashem extended 14:24 tariru is probably a legitimate god 14:24 <[Demo]6> i think its legit too 14:24 <[Demo]6> but i cant understand how it is 14:24 <[Demo]6> like he streaked slex 14:25 <[Demo]6> you dont just streak slex 14:25 67 ascensions on vanilla... 14:25 he has (had?) actually 100% win ratio 14:25 you just don't win slex 14:25 <[Demo]6> i have no reason to believe it is anything but legitimate 14:25 in selx 14:25 <[Demo]6> other than the fact it is an absurd feat 14:26 i'm telling you, Tariru is data from star trek TNG come back in time to play nethack 14:26 the kind of mistakes he does is usually down to luck 14:26 -!- ais523 has joined #hardfought 14:26 -!- mode/#hardfought [+v ais523] by ChanServ 14:26 if you watch some tariru ttyrecs you will quickly conclude that he's human and not using an exploit 14:26 RNG abuse, by far the most common and easy way to exploit something, would not make you lose games to luck 14:26 unless you hide it well 14:26 but by that point you might just play normally 14:27 lotg 14:27 I've seen Tariru play 14:27 <[Demo]6> i have too and it looks normal 14:27 he plays exceedingly carefully 14:27 sort of normal 14:27 when he really wants to win 14:27 yeah 14:27 btw, if anyone has good platform-independent ideas for preventing RNG prediction/manipulation, it may be a good idea to let the devteam know 14:27 <[Demo]6> ive not seen him in a sticky spot 14:27 you wouldn't do that if you have RNG manipulation on your side 14:28 we're trying to come up with fixes ourselves at the moment, and some of the suggestions scare me 14:28 ais523: you missed the discussion :P 14:28 we have logs :-) 14:28 ais523: aosdict suggested just increasing the seed to 64bit 14:28 yes, clearly 32 bits is not enough 14:28 NH4 uses 96 bits, IIRC 14:28 <[Demo]6> FIQ you would if you didnt want to have to reset your local state and you were playing with our prospoed setup 14:28 or why not 512 bit or w/e 14:29 i mean 14:29 or 2048 14:29 symmetric vs. asymmetric key lengths 14:29 NH4 of old had a 2KB RNG state 14:29 taken from a seed of 32 bytes 14:29 FIQ: and yet it was still predictable 14:29 IIRC 14:29 the Mersenne Twister is not a CSPRNG and becomes predictable after a few hundred outputs 14:30 that was NitroHack's RNG, I changed it as soon as I realised a) it had the wrong cryptosecurity properties, b) it was bloating save files, and most importantly c) it was a license violation to ship binaries compiled using it 14:30 ais523: my suggestion: this is probably one of the cases where ifdefs might genuinely be a good idea 14:30 oh wait, I'm curious about c) in there 14:30 does MT come with some weird license? 14:30 mersenne twister is what adeon used in the patch, right? 14:30 i mean, you could also say its a public-server-only issue too. if you are playing locally you can do whatever always. 14:31 no I used yarrow kind of thing 14:31 it was an overkill 14:31 Adeon: the specific mersenne twister impl used was LGPL 14:31 (NetHack uses ifdefs excessively, but this is the kind of case where it's legitimately useful) 14:31 ah 14:31 things like valley of the dead having corpsenames from the record file, causing an arbitrary amount of randoms being called 14:31 I think there are more permissively licensed versions but this was not one of them 14:31 basically, have a CSPRNG for common, "simple" platforms 14:31 and have a "good enough" fallback for more exotic ones 14:31 we could move the rng to sys/ 14:31 b) I guess it's because MT's state is pretty large? 14:31 anyway, the CSPRNG is not the problem, it's easy to write a platform-independent CSPRNG 14:32 the problem is the seeding 14:32 Adeon: yes, and also it changes a lot when you take random numbers from it 14:32 yes 14:32 NH4 stores a diff of the entire gamestate every turn 14:32 I am aware 14:32 and RNG states don't diff well 14:32 but I don't think there is a way you can get good seeds for non-common platforms 14:32 ones who lack existing libraries/whatnot for it 14:33 something like "take a CSPRNG, and on every user input, generate a new random number then XOR the current time with the RNG seed" 14:33 if feel its being overcomplicated a bit. just do a local patch in the public servers 14:33 for(int i = 0; i < plname[4]; ++i) { random(); } 14:33 that will automatically improve the seed quality 14:33 done 14:33 ais523: isn't CPU instruction timing a decent input that works basically everywhere? 14:33 (not the *only* input, mind you, but it should help) 14:33 FIQ: sort-of, the problem is that some exotic platforms don't let you measure it 14:34 you can do a small tight loop and measure how long it took in realtime, but the realtime measurement may be nearest-second on some platforms, which means a good seeding mechanism using that would take too long realtime 14:35 also, it only works on multi-process operating systems or those with nondeterministic peripherals 14:35 try it on DOS on a single-core processor and you'll find the instruction timings are consistent 14:36 right 14:36 again, isnt it better to just solve this on the public servers? 14:36 you have to rely on not being the only process in town for it to be usable 14:36 if you want to do it for a 486 running ms-dos, you cant really do anything to compicated regardless 14:37 since the cpu is extremely slow 14:37 pellsson: that was basically my suggestion: an ifdef that enables secure seeding on common systems 14:37 where doing that is "easy" 14:37 and fall back to something that isn't perfect, but good enough, on others 14:37 it's easy on POSIX-alikes 14:37 yeah just do whatever on nao 14:37 it is annoyingly difficult on Windows 14:37 and dont release the patch 14:38 forth character of player name, random() ^ 0x123819123 and dont release the patch 14:38 job done 14:38 no one will ever know 14:38 or find out 14:38 nothing wrong with releasing the patch if it generates random seeds 14:38 you have to configure the crypto subsystem to get at the system's cryptographic seeding source, and it takes a lot of mandatory parameters to configure parts of the crypto subsystem you aren't planning to use 14:38 waste N randoms() on somehting arbitrary 14:38 (secret) 14:38 that you can't determine with the code alone 14:38 pellsson: if N is less than a few million it'll be trivial to resynchronize 14:38 even if you don't know on what basis it was generated 14:38 but it would be a nightmare to find out how it was mutated 14:38 dwangoAC and I resynchronize the TAS all the time 14:39 if i do plname[4]-count random() waste 14:39 and xor random() (not srandom()) with 0x1231231 14:39 pellsson: before or after starting inventory is generated? 14:39 whenever really 14:39 -!- ProzacElf has joined #hardfought 14:39 the XOR step would help, that effectively makes the seed space 64-bit 14:39 if the key is unknown to the public 14:39 although if the 0x1231231 is a fixed number it could potentially be reverse-engineered 14:39 but 14:40 if you know it is random() 14:40 for every 2^32 seeds 14:40 you need to try 2^32 keys 14:40 so yah, making it 64-bit, sorry :) im slow 14:40 silly idea: use part of a player's hashed password as input to RNG 14:40 FIQ: then you could potentially figure out people's passwords by watching their games 14:40 also sprinkle in some wasted random() calls at arbitrary spots 14:40 it was not a serious suggestion 14:41 so long as the patch is private, its is completely unsolve'able 14:41 pellsson: suppose you have a zero-time method of sampling one RNG element (possibly with a fixed number of wasted RNG calls either side); for example, refreshing the screen while hallucinating 14:41 you can repeat that a long time to get a series of results 14:42 now, suppose you continue that until, say, you get 16 odd numbers in a row 14:42 you can have a rainbow table of positions in the base random() sequence where you get 16 evenly spaced odd numbers as return values 14:43 (due to the way LCRNGs work, you might not even need brute force to calculate this, it may be possible to figure it out from a subset of the seed space) 14:43 you could then, say, do it a second time until you get another 16 odd numbers in a row, the rainbow table would then have a good guess at the underlying random() seed 14:43 and the trick is, this a) isn't fooled by additional random() calls and b) isn't fooled by your XOR 14:45 but i would need that table for every seed 14:45 and that would require most of the worlds computers to store 14:45 [hdf-us] [nh362] eraserhead97 (Wiz Elf Fem Cha), 125 points, T:624, killed by a gnome lord, while sleeping 14:45 and, i would have to do this introspection against now 14:46 which adds a network latency 14:46 no, the trick is, a sequence of 16 odd numbers is rare, only 1 out of 65536 seeds have it 14:46 so your rainbow table is much smaller 14:46 ok so half of the seeds, all sequences 14:46 for a 32-bit underlying random(), it's likely a few tens of kilobytes × the number of possible spacings you want 14:46 and then serarching for this sequence looking at tiles shifting over the work 14:46 i mean, it is possible 14:47 but i highly doubt it will be a problem 14:47 i sure wont attempt it :) 14:47 I used to play Pokémon competitively, people RNG-manipulated their preparations all the time, it made them orders of magnitude faster 14:47 if you are dedicated, it isn't that hard, is ais523's point 14:47 I could train up a fully competitive team in a week or so, compared to the years it would take if you were doing it manually 14:47 maybe i dont follow 14:48 how do i even know if the values are odd or even when the key is unknown to me? 14:48 and, again, how do i extract all this data over the network against NAO 14:48 pellsson: pokémon uses a LCRNG with 32 bits in size in 3-4gen IIRC 14:48 which ais523 is referring to 14:48 FIQ: in gen 4 there are two RNGs, one's a 32-bit LCRNG, the other is the Mersenne Twister 14:48 and it was entirely possible to reverse-engineer the seed 14:49 they're both seeded from the same 32-bit seed, which actually makes things easier rather than harder (you can break the seed on one, and reverse-engineer to figure out the seed on the other) 14:49 pellsson: for odd/even with hallu, just press ctrl-R, look at a particular tile onscreen, see if it's an odd-numbered or even-numbered tile 14:49 older 3gen games were ironically harder to RNG manipulate I think, due to it using CPU timing 14:49 how? 14:49 with vt_tiledata it's even easier as you can just look at the tile number over the network protocol 14:49 random() ^ KEY 14:49 without key 14:50 how do i know if it is odd or even? 14:50 pellsson: the XOR either changes odd to even and vice versa, or does nothing 14:50 so there are only two p ssibilties 14:50 *possibilities 14:50 so effectively all 14:50 [hdf-us] [nh362] eraserhead97 (Wiz Elf Fem Cha), 266 points, T:575, killed by a gnome lord 14:50 you could have a separate rainbow table for the two cases 14:51 but again, i have no idea if the original number was odd or even? 14:51 if the key is 1 odds will be even 14:51 if the key is 0 odds will be odds 14:51 hmm 14:51 how do i know which one is which? 14:51 this is just how Pokémon reverse-engineering works, e.g. one way we find our RNG location in HeartGold/SoulSilver is by talking to an NPC who has multiple randomized messages 14:52 at the start, we don't necessarily know which message corresponds to which number from the RNG, but it doesn't matter, it just makes things a factor of n! slower where n is the possible number of messages 14:52 if pokemon uses lcrng, and xors with a key 14:53 the key is known 14:53 RBYGSC didn't have an RNG at all, it had 2 lag counters that it used as input for its "RNG", prism changed it to xorshift, polished ported prism's implementation 14:53 and at that point, it is pointless 14:53 I suppose it's good enough 14:53 if the key is not know 14:53 known* 14:53 it is litterarly perfect encryption 14:53 pellsson: the key hardly matters 14:53 keylen == plaintext 14:53 it is a 1-bit key when you're doing odd/even 14:53 because rn2(2) throws away all but the bottom bit of the RND() result! 14:54 (and with rn2(n) for any even n, the user who observes the result can throw away all but the bottom bit) 14:55 ok so say i do x & 1 == x+1 & 1, 16 times 14:55 i (might) have this sequence right 14:55 now what 14:55 i cant extrapolate the random() value 14:56 i hvae 65k possibilities 14:56 i guess i can look att all of them 14:56 you have a rainbow table of all the possible seeds and spacings that could give that result 14:56 then you do it again 14:56 and now the number of possible seed/spacings that explain /both/ observations is much smaller 14:57 it might pin down the seed by itself, if it doesn't you do it a third time, and so on 14:57 if the RNG is unbiased you eliminate well over 99% of the possibilities each time 14:57 so you pin down the actual possibility very quickly 14:57 return ror(random() ^ key, 1) 14:58 i mean, i am not saying that ^ key is the ultimate solution, i am saying that any unknown transform will be way more troublesome to solve that anyone will ever do 14:58 there are likely encipherment functions that would work; however neither of the ones you've suggested solve the problem of trying to find individual bits within the RNG state, which is normally the easiet point to attack 14:58 *easiest 14:59 what if the bits are scrambled before output, using the same RNG as input for the scramble 14:59 and no encipherment function can solve the approach of just connecting to NAO and refreshing 4 billion times to get the entire sequence of the new RNG (although dtype would probably notice the CPU load and kill the process) 14:59 I suppose if the scramble function is completely unknown, it makes it OK 14:59 FIQ: using an RNG to scramble its own output doesn't increase the seed space, just changes the sequence 14:59 indeed 14:59 it also runs the risk of leaving the RNG in a biased state 15:00 or there's a script in place to kill any unusually high cpu loads over X period of time 15:00 and of reducing the seed space 15:00 K2: at least one player has overflowed the turn counter on NAO 15:00 ahh 15:00 ais523 do you know how long that took? 15:00 although the game kept getting killed for CPU usage and continued from the hangup save 15:00 ah 15:00 I don't know for certain 15:00 ais523: so far not planning to address any "fixes" unless it becomes an actual practical problem 15:00 so just try to hangup the game 15:01 and if the process is still around after, say, 30s 15:01 kill it completly 15:01 completely 15:01 well, hangup in NetHack reseeds the RNG when you reload the save 15:01 I think I give you ~1 hour of cpu time on NAO 15:01 to prevent crashes if the process is genuinely not stuck 15:01 hdf has an automatic process in place to kill any nethack/variant process that consumes a high amount of cpu for too long of a time 15:02 on nethack4.org I can actually kill a game engine process without a user playing the game noticing (apart from, in most cases, a loading bar as the new engine process resynchronizes) 15:02 ^ 15 min tops 15:02 so I guess in the data gathering phase, you have to pace yourself 15:02 i feel like we are forgetting that the patch is serverside only 15:03 like to extrapolate what is suggested from looking at tiles flipping is soooo complex 15:03 ais523: where did this discussion come from anyway? 15:03 did someone RNG abuse? 15:03 FIQ: yes, pellsson did 15:03 hiya dtype, happy new year :P first message i've seen from you since last year 15:03 ah 15:03 if pellsson himself did RNG abuse, surely he knows the problems behind what he is suggesting? 15:04 well i mean ais523 does raise a valid point although it took me a while to get it, if i even do at this point 15:04 not sure if I understand the solutions when taking in mind that pellsson has already broken the existing server RNG 15:04 which, to my knowledge, *already has fixes against it* 15:04 FIQ: it found the seed via a rainbow table 15:04 but yea, if you do return random() + 13 on nao and dont tell anyone 15:05 ill eat my hat if it is ever solved 15:05 also NAO is running unmodified vanilla atm, so the RNG algorithm is known 15:05 1) player wants to manipulate rng 15:05 2) he reads code 15:05 FIQ: you are late to the party :P https://www.reddit.com/r/nethack/comments/adbgzd/yaap_swagginzzz_a_tool_assisted_speedrun_on_nao/ 15:05 ah 15:05 3) he tries it on nao 15:05 4) it doesnt correspond 15:05 5) he gives up 15:05 ...or she. 15:05 did they change algorithm? 15:05 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) acquired the luckstone from Mines' End, on T:9648 15:05 did they transform it? 15:05 like... the exploration space is infinate 15:05 literarly infinite 15:05 how do you approach that? 15:06 in US military parlance, 'he' automatically refers to he or she or they. same applies here ;) 15:06 all you see are flashing tiles. 15:06 K2: sez you 15:06 the simple but slow approach is to see if you can loop the RNG state back round to the start, then you know the sequence 15:06 there's a regulation that states as such 15:06 and can try to work out how the different sorts of RNG calls relate to each otehr 15:06 pellsson: I think having a secret server patch is inelegant 15:06 K2: I'm willing to believe the US military is kind of sexist but I don't think we have "regulations" here 15:07 Pinkbeast: its atrociously ugly but it solves the issue :) 15:07 i;) 15:07 -i 15:07 pellsson: Using /dev/random would solve the issue and not be ugly 15:07 a secret server patch is equivalent to having a known patch for which some of the details are randomly determined, though, except that it runs the risk of someone guessing or reverse-engineering the details of the patch 15:08 ais523: looping random() would be 2^32*4 bytes download from NAO 15:08 i thought that's how they protected the president: the secret server 15:09 (making alot of assumption about underlaying implementation of random() here, but lots of data to download) 15:09 and if it's good enough for donald trump, well 15:09 pellsson: 16 GiB, with modern computers and network connections that'd show up on metrics but not be ridiculous 15:10 in general, "billions" is approximately the scale that is reasonable/plausible on modern consumer computers 15:10 16GB of data transfer is trivial 15:10 you'll pull more down watching one HD movie on netflix 15:10 it's out of the ordinary for a NetHack public server, I would imagine, but you'd expect the server to be capable of handling it 15:10 how fast can a no-salt md5 be bruteforced nowdays? 15:10 milliseconds 15:10 nanoseconds? 15:10 FIQ: I think it depends on how complex the input is 15:11 MD5 isn't collison-resistant at all nowadays but I'm not sure it has working preimage attacks 15:11 ais523 if the ttyrecs live on the same server as the binary, not so much 15:11 although dtype did start moving all the ttyrecs over to an s3 bucket 15:11 from NAO 15:11 ais523: true, but how fast can you get the "intended" input 15:12 FIQ: you can't distinguish the intended input from unintended inputs 15:12 except by it being unusually short or English-looking or whatever 15:12 if the input is small enough 15:12 to the point where the input space is much smaller than the md5 size 15:12 you can reasonably deduct the intended input 15:13 [hdf-us] [nh362] Menche (Ran Elf Mal Cha), 470 points, T:1667, killed by a guard 15:13 I once, back in 2008, had a 8 character password on a site which was breached, with password space A-Za-z0-9 15:13 I was unable to bruteforce it back then 15:13 could I do that now? 15:13 and how long would it take 15:13 online :P 15:13 I looked it up, MD5 preimage breaks are only theoretical (2**123 rather than 2**128) 15:13 you want the cleartext PW or rather a colliding hash? 15:13 the former 15:13 so you'd have to bruteforce the old fashioned way (and/or just google the md5 hash, that works surprisingly often) 15:14 https://hashkiller.co.uk/md5-decrypter.aspx 15:14 if anyone put a rainbow table with that specific hash online, a search engine can find it 15:14 Google indexes the world's rainbow tables in addition to everything else :-) 15:15 -!- nhmall has joined #hardfought 15:15 -!- mode/#hardfought [+v nhmall] by ChanServ 15:15 ais523: heh, naturally 15:15 hey nhmall 15:15 wassup 15:15 I hear the action is over hear today 15:15 over here 15:15 seems that way ;) 15:15 always over here 15:16 * K2 grabs some more popcorn 15:16 stenno: it failed to find any hashes 15:16 mm 15:16 unfortunately, I don't think Bitcoin uses MD5, so people probably haven't made ASICs for bruteforcing the hashes yet 15:16 fastest would likely be a GPU implementation 15:16 nhmall: But for all we know you peeked at the RNG state and just knew where the action was going to be :-) 15:16 if you mean as opposed to #NetHack , that channel has been dying for some time 15:16 if anyone needs to play catch up --> https://www.hardfought.org/irclog/%23hardfought-2019-01-07.log 15:17 hmm, now I'm thinking about using a GPU to bruteforce the seed of a NetHack game and/or the RNG algorithm 15:17 FIQ: it basically turned into #NAO due to being too close-minded about servers and not a natural discussion place for variants 15:17 yeah 15:17 SWAGGINZZZ discussion, I presume? 15:17 yes 15:18 it started there, yes 15:19 I still think the correct fix is a) increase the RNG seed space, b) use an RNG algorithm from which the seed can't be predicted from the output via a method faster than the fastest generic RNG-breaking method, c) use the best techniques available on the platform for seeding and/or seed-mixing the RNG state 15:19 when this discussion came up in #nethack4, ages ago, there was some belief that generic square-root-complexity attacks might exist 15:20 that's why NH4 has a 96-bit RNG (32 is not out of reach, 48 probably is; double that to 96 to allow for a square-root-complexity attack) 15:20 and I have seeding mechanisms requesting true-random numbers from the OS for Linux, Mac OS X, BSD, and Windows 15:21 wouldn't those kind of attacks be rather limited in availability atm 15:21 which is not a complete platform set but covers most of the platforms that are frequently used in practice 15:21 from a compute perspective, this has been very interesting. Well done pellsson. 15:21 I think there's a NetHack server somewhere running some less common OS (maybe VMS?) 15:21 it was VMS 15:21 so having a platform-independent seed-mixer would be a good idea 15:21 not sure if it's still running 15:24 that's one of the more system-dependent parts of NetHack already anyway, more conditional code or platform-specific code isn't going to hurt anything. But why rule out something portable right from the get-go? 15:24 where did the spam problems go 15:24 how did freenode solve it 15:24 there is no good reason to be using the OS-provided rand() anyway 15:24 it was around for almost 2 months 15:24 FIQ: I think the spambot operator probably just ran out of money? hiring that large a botnet can't be cheap 15:24 which is atypical 15:24 FIQ, i still see them on ircnet from time to time 15:24 a CSPRNG is easy to write with platform-independent code 15:25 the only hard part (and thus platform-specific part) is the seeding 15:25 i've not seen spam on freenode, how bad was it? 15:25 [hdf-us] [nh362] Menche (Tou Hum Mal Neu), 32 points, T:629, killed by a sewer rat 15:25 at its peak, very bad 15:25 not bad, but persistent 15:25 i only joined fairly recently :P 15:25 it didn't make channels unusable, so to speak 15:25 but it was... persistent 15:25 spam message once an hour on average 15:25 for several weeks 15:25 what kind of spam was it? like virus links or something? 15:26 right, you'd have a new spambot spamming inane comments every few minutes to start with, then it calmed down more or more over time 15:26 we've had a range of different spambots, the most recent aimed insults and/or lies at Freenode staff 15:26 Guthix__: Libel of freenode admins 15:26 Oh :( 15:26 someone went so far as to make a fake blog, which they claimed was by a freenode staff 15:26 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) killed the invisible Baalzebub, on T:37559 15:26 several actually 15:26 many years ago, a troll organization figured out how to trick browsers into sending information that would appear on IRC channels 15:27 "Would you be interested in admin Fred Bloggs' blog http://example.com/ about how they prefer number_pad" 15:27 and wrote a website which spammed links to itself 15:27 whenever anyone visited it 15:27 ais523: interesting exploit 15:27 I'm pretty sure it was about looking at little girls 15:27 cleaning /that/ up was a pain (I think freenode's ircd now rejects communications that contain HTTP headers) 15:27 jeez 15:27 classic troll, "you're a pedo!" "he's a pedo!" 15:27 PavelB: yeeees, perhaps there's a reason I used an obviously ridiculous example to avoid bringing that up, but you do you 15:28 of all the things to attack though... why a great free IRC service ;-; 15:28 rofl 15:28 maybe Musk was banned from freenode? 15:28 actually I don't think it was CP 15:28 then there was the allah is doing bit, which was I think my favorite spam of the lot 15:28 but embezzlement 15:28 that they were blamed for 15:28 lol I still see the allah is doing stuff occasionally 15:28 PavelB, it was great.. but surely a different bunch 15:28 pellsson: btw i think drum of earthquake makes rodders wake up guaranteed on first try 15:28 Guthix__: many anti-spamming / anti-exploit projects are coordinated on Freenode, it's a natural place for it, spammers thus tend to have a natural dislike of Freenode 15:28 if it was CP, it might have gone away faster 15:29 due to authorities being involved then 15:29 stenno: aah ty :) 15:29 OFTC was also hit 15:29 after a few days the spammers stopped the libel because Freenode threatened to take them to court over it 15:29 and just started spamming insults 15:29 which is weird, spammers normally don't seem to care about laws 15:29 also i constantly forget if branchport skip is possible in 3.6.1, but i think it isn't 15:29 FIQ: There wasn't actually CP it was just a blog about the guy looking at little girls at pools and whatnot 15:29 ah, so people on freenode make it harder for ppl to be malicious > people attack freenode so fewer people use it to stop them? 15:29 ais523: unless they want to stay around 15:29 I actually read some of it out of curiosity 15:29 I suppose 15:30 and keep their spam going for as long as possible 15:30 Guthix__: either that, or just revenge 15:30 Guthix__: I'm not sure the actual motivation is definitely known. 15:30 damn, humans suck sometimes 15:30 ais523: [backscroll] I expect that if nao started hosting some variants, #nethack would start seeing discussion of those variants. #nethack also gets some conversation from people playing locally, but of course everyone just tells them to play on NAO anyway. 15:31 I don't 15:31 I tell them to play on hdf :P 15:31 i've never played NAO since a friend of mine recommended hardfought and said it was way better 15:31 auto-muting unregistered users and encouraging use of caller-id umodes mitigated most of the spam 15:31 what are the pros of NAO? 15:31 I encourage it, but try to not be mean about it like I've seen some people do 15:31 ("online is the only real way to play" etc) 15:31 Guthix__: In some years it exists and hdf doesn't 15:31 NAO has a more stable build I guess 15:31 More bones, too 15:32 it's the only server with vanilla 3.6.1 15:32 pellsson: How long were you at your project (if you don't mind my asking)? 15:32 Guthix__: online play allows you to share bones with others, watch others and let yourself be watched 15:32 that's about it when it comes to reasons people play online 15:32 hardfought only has a dev edition (which I actually prefer a little) 15:32 FIQ: I think Guthix__ meant "as opposed to hdf"? 15:32 NAO is the cornerstone for online nethack play imo 15:32 yeah :P offline is great if you're on a train or something 15:32 there's also the community, but technically you don't have to play online to be part of it 15:32 ascension.run has an admin with a NH4 fetish who refuses to install the latest nethack 15:32 servers have network effects, if lots of other people are using a server, it makes the server better (more competition, bones, watchers etc.) 15:32 Menche: it's more a matter of them being easier to maintain 15:32 <@carlarc> i prefer offline because of the terminal view 15:33 The dev edition has some actual gameplay changes like an Elb tweak 15:33 and he wants as little work as possible for him 15:33 so because NAO was for years the most popular (and may still be), it was the server everyone flocked to 15:33 Also curses 15:33 Menche: it's because vanilla is a pain to install 15:33 <@carlarc> yeah i dont really know the name 15:33 <@carlarc> is it curses? 15:33 @carlarc: isn't the terminal view just the same between off/online? 15:33 Nao has no curses 15:33 and playing online keeps you honest (cant savescum) 15:33 it can be, but different installs will have different defaults 15:33 nhmall: i mean all four of the people involved either live/work within geographical proximity, so it was kinda fun just to get to gether and hack on it. the project itself was by no means a time attack. say it took... meeting up over 3 weeks when possible? something like that. 15:33 NAO *will* have curses, when 3.6.2 is released. 15:34 <@carlarc> nice! 15:34 Except the curses still aren't as good 15:34 <@carlarc> less nice 15:34 No MSGTYPE:alert 15:34 http://home.fiq.se/nethack_tty.png 15:34 http://home.fiq.se/nethack_curses3.png 15:34 http://home.fiq.se/nethack_curses4.png 15:34 for comparision 15:34 @carlarc 15:34 does the normal tty interface not use ncurses? 15:35 first is TTY windowport, 2nd is the Curses interface, 3rd is NH4's curses interface 15:35 Menche: it's a bad name 15:35 <@carlarc> ehhh that's not what i mean 15:35 Menche: It does. The expression "curses" for the "curses interface" is a misnomer we are now stuck with. 15:35 pellsson: I noticed an nhbot fork around Dec 9 or 12 or so and thought "hmm, I wonder what that's all about?" Now I know. 15:35 lol 15:35 <@carlarc> i meant this 15:35 https://cdn.discordapp.com/attachments/400474774440247317/531933965716553728/unknown.png 15:35 Menche: it uses curses for precisely one thing, working out whether the color channels are ordered red/green/blue or blue/green/red, it doesn't use it for rendering 15:35 nhmall: lol 15:35 that's the tty interface 15:36 this is particularly ironic as every terminal uses the same color channel ordering nowadays anyway 15:36 <@carlarc> ahh 15:36 lol 15:36 -!- LarienTelrunya has quit [Ping timeout: 256 seconds] 15:36 with bad antialiasing 15:36 ais523: What about drawing everything on the screen? Doesn't that use curses windows, attrs, ....? 15:36 aosdict: no 15:36 <@carlarc> but yeah i haven't been able to find a way to use the tty interface in public servers so i play offline 15:36 it's raw termcap 15:36 @carlarc eh? 15:37 most of them default to the tty interface 15:37 carlarc> Errr that is readily available. Perhaps you mean DECgraphics? 15:37 K2: he was asking what windowport he used 15:37 ais523: maybe in the unix windowport. In linux it links against lncurses instead of ltermcap 15:37 <@carlarc> blegh 15:37 DECgraphics are nice ^_^ 15:37 everything looks so smooth 15:37 so are IBMgraphics 15:37 ... which is also readily available, mind you 15:37 My terminal doesn't support either :( 15:37 public servers have decgraphics and ibmgraphics 15:37 but no utf8graphics 15:37 fix pls 15:38 :( 15:38 aosdict: that's basically because lncurses contains ltinfo (as in, all the terminfo functions are in curses too) 15:38 you can almost always use one of DECgraphics or IBMgraphics 15:38 utf8 is the future 15:38 unnethack allows utf8 15:38 they both ultimately serve the same purpose 15:38 so if you're being lazy and just want a working NetHack, specifying -lncurses will give you the dependencies you need 15:38 IBMgraphics is superior but generally less compatible 15:38 IMO 15:38 when I play tty NH3, I use DECgraphics 15:38 @carlarc your screenshot looks like win32 version in command prompt (windows) 15:38 setting up IBMgraphics to work was such a PITA that I'm never doing it again 15:38 hmm, i use DEC cause IBM doesn't work on my terminal 15:39 isn't there some translation layer for IBMgraphics 15:39 * pellsson cant afford the dual-sli required for DEC :( 15:39 CP437 15:39 would be cool to find one that works for IBM so i could soo it tho 15:39 DECgraphics and IBMgraphics are such confusing terms, because they're entirely different rendering techniques, which happen to produce slightly different results because DECgraphics can't render all the characters IBMgraphics can, and yet players generally think of them as the particular characters that are rendered when using them 15:39 see* 15:39 the wiki tells you how to do it if your terminal is unicode-enabled 15:39 but it didn't work for me anyway 15:39 <@carlarc> i'm not a smart brain computer man so what i mean is that i havent been able to find a way to replicate that look in public servers 15:39 [hdf-us] [nh362] IceBox (Rog Orc Mal Cha), 6816 points, T:5160, killed by a soldier ant 15:39 I don't really remember how I solved it, but it was lots of trial and error 15:39 <@carlarc> @ k2 15:39 carlarc> Turn on the option "DECgraphics" and when it doesn't work tell us what terminal client you use. 15:39 we can help @carlarc 15:39 NH4 will attempt to automatically configure a terminal to IBMgraphics if it appears not to support Unicode 15:39 Menche: agree RE: utf8, but probably post-3.6.2 release. Do you code? 15:39 its not difficult 15:40 Guthix__: NH4's charset is IBMgraphics 15:40 and simulate IBMgraphics with Unicode if it does support Unicode 15:40 <@carlarc> hmm 15:40 it uses the unicode representation of "IBMgraphics" on unicode-enabled terminals 15:40 NH4 does not use DECgraphics because there are two different incompatible ways to do it, neither of which work with all terminals 15:40 but the glyphs remain the same 15:40 I can do a little C but… not at a NetHack level :P 15:41 @carlarc how do you connect to a server? 15:41 do you use putty? 15:41 <@carlarc> yeah 15:41 make sure unicode is *disabled* 15:41 thats half the battle right there 15:41 you're already almostthere 15:41 oh right, IIRC you have to set PuTTY /out/ of Unicode mode for DECgraphics to work 15:41 putty has some weird bug 15:42 internationalization, including Unicode support, requires heavy community involvement to get right, I think. I'd love to see it done in a public way with feedback among everyone involved 15:42 with unicode 15:42 ideally you should set it to codepage 437 mode (it might be called something like IBM437) so that you can use IBMgraphics too 15:42 then you should be able to set symset to DECgraphics 15:42 imma fish around, see if i can get IBMgraphics working on my terminal 15:42 wasn't there an actual RFC regarding unicode from the devteam before 3.6 got released? 15:42 https://nethackwiki.com/wiki/PuTTY 15:42 or possibly even IBMgraphics 15:42 i remember it being quite a big thing because it was the first time we heard of them in a really long time 15:42 yes IBMgraphics works great using putty 15:42 its what i use 15:42 stenno: there was 15:43 nhmall: sorry, I've really been slacking on that, it was meant to be my first big NetHack project but I got so sidetracked with other things 15:43 https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/utf8-plus-vt100.html it's not so much a weird bug as that it would be odd to support both Unicode and line-drawing characters at once 15:43 I'm not sure if they actually did anything with it 15:43 ais523: does 3.6 have any unicode support at all? 15:43 * Menche pkg_add's putty 15:43 also I'm considering rewriting it in Rust – which I could likely implement it in much faster – at which point it likely wouldn't actually be usable for NetHack due to being in the wrong language 15:43 FIQ: I don't know, I don't follow 3.6.0 that closely 15:43 clearly 15:43 since you're still calling it 3.6.0 15:44 :P 15:44 I don't believe anything changed in that respect between 3.6.0 and 3.6.2 15:44 3.6.x 15:44 sorry, with 3.6 I meant 3.6.x 15:44 other than the curses windowport, if that ends up in 3.6.2, which will be relevant in any given change 15:44 I know someone made a patch adding UTF8 support to 3.4.3 15:44 but it was messy? 15:44 FIQ: right, I'm saying "3.6.0 might have introduced some, if it didn't then no" 15:44 it is in 3.6.2 ais523 15:44 how is curses windowport relevant to unicode? 15:44 FIQ: rendering APIs 15:45 well we had utf8graphics on NAO and in unnethack 15:45 one of the big challenges behind unicode is rendering it, so the render backend is hugely relevant there 15:45 technically our version of 3.4.3 has ut8 support 15:45 * nhmall has caught up via the log now. Wonders if it was one of my suggestions that scared ais523? :) 15:45 I know libuncursed does some magic there, but curses interface uses ncurses, which I don't think does any character magic? 15:45 together with SYMBOLS patch i remember letting my character be a PILE_OF_POO 15:45 FIQ: there are two variants of ncurses, ncurses and ncursesw 15:45 stenno: the historical origins of clan pile of poo? 15:45 ncursesw has some Unicode-specific APIs 15:45 hehe 15:46 the problem with PILE_OF_POO is it is multiple cells wide 15:46 but they don't work quite the same way as the ASCII/8-bit APIs 15:46 yeah. i'm not getting ANY work done atm 15:46 actually it came from the now-defunct #nethack.de 15:46 are graphics options gone with curses enabled? i can't find it... 15:46 Guthix__: probably, because curses uses its own rendering for line-drawing characters 15:46 were we had a bot which would display unicode codepoints by their description 15:46 (which is normally actually just DECgraphics behind the scenes) 15:46 IIRC when I ported curses interface to libuncursed, I didn't actually change a lot of the API calls 15:46 doesn't mean it didn't use unicode internally 15:46 hmm oki 15:46 there ar e a few other funny ones like LOVE_HOTEL 15:46 wouldn't ncursesw be the same? 15:46 or CAT_WITH_HEART_SHAPED_EYES 15:47 except it doesn't do any unicode magic at all 15:47 man in business suit levitating? 15:47 meaning if you refrain from unicode functions 15:47 you wont be using unicode 15:47 ncursesw or not 15:47 ncursesw is a superset of ncurses, I think 15:47 I thought ncursesw just used wchar_t 15:47 which has no guaranteed size or implementation 15:47 but is typically 16-bit 15:48 😻 Smiling Cat Face With Heart-Shaped Eyes was the name 15:48 what does the _t part in wchar_t mean? 15:48 type 15:48 Menche: it's typically UTF-16 on Windows and UCS-4 on Linux 15:48 32-bit on most linux systems 15:48 mm 15:48 ah 15:48 FIQ: POSIX says "don't use names ending in _t, so that if we need to add new types to the POSIX standards we can use names ending _t for them" 15:48 I figured types suffixed with _t was supposed to be standardized or something 15:49 some partial hack-usc2 on windows 15:49 so when standards add new types they tend to put _t at the end of them 15:49 wchar_t kinda throws that out of the window 15:49 omg a +4 ring of gain strength 15:49 on dlvl1 15:49 also, wchar_t /is/ standardised, i.e. it's in the standard and the standard defines functions for working with it 15:49 AND a ring of levitation 15:49 it's just that the standard doesn't specify which character set it represents or how it's encoded 15:49 lol 15:49 i am truly going to die from yasd 15:49 just how to translate it to and from other things and work with it directly 15:49 ah 15:49 so depending on your libc, wchar_t and the corresponding functions might be UTF-8? 15:50 on Windows it's Unicode's Basic Multilingual Plane (sometimes + additional hacks for the Astral Planes), on Linux it's Unicode encoded as UCS-4 15:50 ais523: do you think DT will listen if I complain that conflict shouldn't work on Elbereth 15:50 they generally listen as long as the change is a disadvantage to the player in my experience 15:50 Menche: it can't be UTF-8 because that's a multibyte encoding 15:50 lol 15:50 ok 15:50 ouch 15:50 there are functions in the standard with names like mbstowcs which do encoding from bytes to characters 15:51 on Linux, mbstowcs will normally take UTF-8 as input and output UCS-4 as output 15:51 could you be really space inefficient and store a UTF-8 character in a uint32_t 15:51 but it's configurable, the specific multibyte encoding is based on environment variables 15:51 it is IMO a good change 15:51 but I'm not sure if you agree 15:51 hence why I ask 15:51 if you do "echo $LANG" in a shell, you'll probably see a language form followed by ".UTF-8" 15:51 before I effectively implement it by complaining 15:52 that's how the multibyte string functions know how the string is encoded 15:52 FIQ: I have never intentionally disadvantaged a player. That wouldn't be a goal of mine 15:52 FIQ: it's also IMO a good change, but it would likely be massively unpopular 15:52 and it probably isn't a commonly used exploit atm? 15:52 I know there were some rgrn posters who were very upset that the game punished them for murdering monsters from an Elbereth 15:52 nhmall: I am mocking DT's habit of, when a suggested change is to a player's strict advantage gameplay-wise, change it to be the opposite 15:53 oh yeah, how did all that green slime stuff shake out? 15:53 I forgot to send a followup email after getting people's opinions 15:53 hrm, openbsd's build of putty doesn't include the gooey ssh/telnet client 15:53 do I have to do that now? 15:53 meh 15:53 sorry, it's my fault it died 15:53 I think the problem is a flavour disconnect 15:53 wasn't the main problem inconsistencies 15:53 Menche: "pterm" maybe? 15:54 in D&D a green slime is a monster that eats adventurers and uses the energy to reproduce, creating more green slime 15:54 FIQ: is this the slime thing again? 15:54 I think there are devteam membes who see green slimes as polymorphing other things into green slimes, which would leed to an entirely different intuition 15:54 nhmall: it is just one example 15:54 the worst case was WoY quest arti stealing 15:54 nhmall: there are two examples, this is one, the more famous one is "WoY shouldn't steal your quest artifact" -> "OK, now WoY steals ALL quest artifacts" 15:54 oh, ninjad 15:55 FWIW I think the WoY stealing ALL quartifacts was a great improvement 15:55 * FIQ zaps Pinkbeast with a wand of striking! 15:55 the quest artifact change is a complex one because a) IMO the flavour improved, b) the gameplay considerations are pretty complex and lead to legitimate disagreements 15:55 the response to it would probably have been different if the DT had decided to do it on their own. 15:55 * K2 gives Pinkbeast a cloak of magic resistance 15:56 * stenno combo-zaps Pinkbeast with a wand of resist magic resistance striking 15:56 oh I see, it's a multipackage 15:56 there's putty and putty-gui 15:56 There's that old expression: you can please some of the people all of the time, and all of the people some of the time... 15:56 aosdict: if that was the case, I'd have lumped it together with "assorted 3.6 nerfs" 15:56 rather than singling it out 15:56 I think everyone agrees that it has a noticeable effect on ascension kit composition, the debate is as to whether it's one that makes the game better or worse 15:56 nhmall: it seems that Pinkbeast is the only one pleased by it :P 15:56 But to have PatR specifically mention, in a commit message, multiple feature requests, and then say "yeah I decided to go the opposite direction" instead... that came across as maddening 15:57 i love it how some of you are losing your minds on the green slime changes. how often does any scenario where those changes come into effect even take place? 15:57 answer: not enough to get your panties in a wad about it 15:57 ais523: my personal problem with it is that it doesn't solve the problem that was the reason I sent the report in first place 15:57 most of the arguments I've seen are arguments for "Rodney can steal other roles' quest artifacts, but not your own", which is not something that anyone suggested or implemented 15:57 the problem of quest artifacts being stashed lategame and unused 15:57 rather than acting as a source of role uniqueness by being usable 15:57 aosdict: I would have gone the other way on my commit message 15:57 K2: Again, it's not that this is a giant change, it's that this is now a trend of the devteam (or maybe just patr) taking a request and doing the opposite of the request 15:57 FIQ: OK, I haven't seen that mentioned before 15:57 also I'm not sure I agree that people actually do that 15:58 hmm 15:58 a magic resistant WoY is much more annoying to deal with than one who isn't 15:58 put it this way: I'm probably the biggest clean-inventory advocate on #hardfought, and yet I carry my own quest artifact around 15:58 each attack has 1/20 quest artifact steal 15:58 why would you *not* stash it 15:58 I don't have an opportunity to join in here all that often, but everytime I do green slimes comes up :) 15:58 because it's useful? 15:58 nhmall lol 15:58 i see a meme being made... 15:58 ais523: but does it outweight a magic resistant Rodney 15:59 if you can't kill Rodney in a couple of turns without the help of death effects, you're doing something wrong :-D 15:59 This trend is causing a chilling effect: people are saying in here that they would report something, but aren't going to because they think the devteam would take it and make it worse 15:59 discouraging reports is a Bad Thing 15:59 nhmall: that's coincidence more than anything 15:59 ™ 16:00 green slimes are hardly ever discussed in here 16:00 <[Demo]6> green slimes are to nh as zruties are to xnh 16:00 [Demo]6: nethack didn't remove green slimes... 16:00 <[Demo]6> just dont talk about them and everyone is happier 16:00 my 6 yrold daughter and I made green slime a few weeks ago. it was awesome 16:00 it ate the dog 16:00 rip dog 16:00 :/ 16:01 <[Demo]6> they are both sensitive topics to developers 16:01 aosdict: they have a much more efficient method of doing that 16:01 not replying 16:01 but they stopped that practice a while back 16:01 hah 16:01 I think 16:01 due to an email server issue right? 16:01 -!- kerio has joined #hardfought 16:01 messages werent reaching them 16:02 not because they were being ignored 16:02 actually I never got a response to my last few reports I think 16:02 K2: it's partly that, and partly that we don't have any rules for who's supposed to reply to an email 16:02 is this where we laugh at dtype's rng 16:02 it's a bit hard to know if it's read 16:02 when there isn't a response 16:02 FIQ: you're probably on ignore 16:02 :P 16:02 K2: I know for a fact that one of the messages *was* dropped 16:02 courtesy of ais523 16:02 (for telling me, not for dropping it) 16:02 ah 16:03 well then 16:03 FIQ: I dunno if you read PatR's email about the green slime thing, but his take on the discouraging future reports problem was "we have enough bugs already". Like, what? 16:03 and kerio yes 16:03 sort of 16:03 well.. no 16:03 aosdict: what 16:03 FIQ: assuming it arrives at the lists in the first place, I'll read it, but often I don't have any response myself immediately; so I can wait to see if someone else replies, but if they don't, who should reply to you? 16:03 link 16:03 ais523: I don't want to be needy 16:03 just that it's hard to know that you're being heard when there isn't a response 16:03 this mostly isn't a problem with you specifically as I can just chat with you over IRC 16:03 FIQ: availability was an issue for a number of people between Dec 15 and yesterday. People may only be getting to email from that period now 16:04 it is a problem with other people, though, often 16:04 set up an autoanswer 16:04 autoanswer doesn't mean that your message is read 16:04 so we file away the email, then sometimes ten years later we notice nobody replied to it 16:04 it just means that it was delivered 16:04 hah thats even worse, a canned auto response 16:04 I suppose it helps against spam false positive issues 16:04 "the devteam has received your question and will answer soon" 16:04 ... file away under a pile of suggestions from Boudewijn? ;-) 16:05 aosdict: we love bug reports, seriously. We'd much rather be made aware now than the day after a release. That's the honest truth 16:05 nhmall: apparently not all in DT agree? 16:05 cant fix what you dont know about 16:05 I think all mine ever got a response 16:05 FIQ/aosdict, I wouldnt stop sending bug reports 16:05 Pinkbeast: more than mine got 16:06 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) killed Orcus, on T:38177 16:06 i got personal replies from patr when i repoorted bugs 16:06 the extent to which devteam members like bug reports seems to be inversely proportional to the proportion of bugs they end up fixing ;-) 16:06 I used to maintain a list on wiki of my reports 16:06 like 20% of them got replies 16:06 if that 16:06 I like bug reports too, and hardly fix any of them personally 16:06 stenno: bhaak invited me to his place in germany once when all i did was send a msg through the bugtracker that said 'hi wassup' 16:06 epic party 16:06 but isn't he in switzerland 16:07 he has a party pad in germany 16:07 must've been some party 16:07 lol 16:07 like who doesn't though 16:07 illegal some of the stuff in switzerland 16:07 aosdict: in the end I just watched the repo instead 16:07 it was a far more reliable way to figure out if your message was read or not 16:07 but I digress 16:07 FIQ: seems like ais's original link to the response died, let me go put it up somewhere else... 16:08 maybe patr was having a bad day 16:08 argh I think I sliced parts of it out 16:08 I recall him giving a really grumpy response to nitrohack too 16:08 K2: You should get a party place. Maybe in Inner Mongolia. 16:08 And invite people to it. 16:08 rofl 16:09 why Mongolia? 16:09 lower tax rate? 16:09 more goats? 16:09 Inner Mongolia is on the short list of Chinese provinces I can spell off the top of my head. 16:09 Also Tibet. 16:09 FIQ: If somebody led you to believe "they have enough bug reports", I wouldn't read that as a feeling held by the majority at all 16:09 ais523: can you make that 16.txt email response available again, because I think parts of my copy are deleted and I don't want to show out of context bits of it 16:10 nhmall: I agree 16:10 but I still want to see exactly what patr said 16:10 just to figure out his view 16:10 aosdict: I thought it was worth sharing publicly and I got permission to do so, but I also think it's probably not worth leaving something that inflammatory up long-term 16:10 after all, he's the most common contributor 16:10 ais523: well just for fiq's sake 16:10 you can email it to fiq for all I care 16:10 I don't need it *that* much 16:10 I'll survive 16:10 -!- rebatela has joined #hardfought 16:11 FIQ probably should see it, I'm not entirely sure where it's got to nowadays though 16:11 it's buried in my email history so it'll take a while to find 16:12 okay, relevant part: people might stop submitting bug reports if they think that the fix will be different from what they want Not very likely, but there are more than enough bugs waiting to be fixed that "so what?" is applicable here too. 16:12 I see 16:12 how come one person's email is the hot topic? We're here too and in real time? 16:12 so it isn't "please shut up" as much as "you don't want to report in case I do the opposite? who cares, I'll just fix something else" 16:13 not nearly as bad as it sounded, but still dubious IMO 16:13 that's not the inflammatory part, the inflammatory part was disregarding the opinions of the whole variant community 16:13 that's just patr being patr 16:13 he doesn't seem to like variants at all 16:14 lets go back at looking at swagginzzz rng stuff ^_^" 16:14 I think Pat may have felt a bit put upon, there isn't generally an expectation that reporting something lets one dictate the fix 16:14 nhmall: We could talk about more hallucinatory traps :) 16:14 honestly, I can see patr seeing the whole slime thing as being blew out of porportion completely 16:15 nethack4.org is being slow for me; is itt being slow for other people too? 16:15 FIQ: this was one commit message and one email? If I had a dollar for every critique, put-down,complaint of devteam I've seen I would be very rich - just for some perspective. 16:15 but I don't think he realizes that the green slime change alone wasn't the point then 16:15 nhmall: here is what i wonder, why is minesflayer/purle L not considered a bug? 16:15 purple L at castle* 16:15 OK, must be my end, my network can hardly keep up with IRC 16:16 Wait, purple L at castle isn't specifically specified in the .des file? 16:16 I always assumed it was. 16:16 no 16:16 random L 16:16 jonadab: no, it's mkclass bug 16:16 Huh. 16:16 same bug as minesflayer 16:16 except it isn't a bug apparently 16:17 I mean, at this point players are so aware that the castle typically has purple L, they treat it as a standard hazard of the level. 16:17 the obvious solution is to redesign the function and make it a feature 16:17 rather than keeping current behaviour which is clearly buggy 16:17 Unlike minesflayer, which is rare enough to catch people off guard. 16:17 dunno how many runs i have literally lost through purple L at castle 16:17 FIQ: I PMed you the message in question 16:17 thanks ais523 16:17 jonadab: notice that purple L is gehennom only normally 16:17 stenno: Huh. I hadn't realized that. 16:18 and if i undetstood the recent mkclass changes correctly, it makes minesflayer even more likely 16:18 the bug isn't necessarily in mkclass, it might be in the regular monster generation function 16:18 patr is incorrect 16:18 or in the existence of polytraps, or whatever 16:18 genocide while unchanging does *not* kill 16:18 you 16:18 stenno: That happened *accidentally* in NH4 at one point. 16:18 i had a purple L in my spork castle 16:18 FIQ: if you geno your current polyform? 16:19 (rather than your base form) 16:19 fiqhack addresses this, but I'm considering reverting it due to mon geno 16:19 ais523: yes, that 16:19 also, I need to add the disclaimer that the message I sent you is the opinion of one (anonymous) dev, not the devteam as a whole 16:19 ais523: mkclass is _def_ responsible for minesflayer and purple L at castle 16:19 is there a funny message for ascending whilst polymorphed with @ genocided? 16:19 ais523: that was implied 16:19 stenno: yes, it's not obviously a /bug/ though 16:19 charons boat? 16:19 I'm not stupid 16:20 ik you get charons boat for quitting 16:20 meanwhile, the charon's boat message /is/ actually a bug; quit while genocided is not an intended way to get it 16:20 i guess it's the same for ascending then? 16:20 oh oki lol 16:20 it was intended to catch situations in which people quit via ctrl-c after already having died 16:20 really? wow lol 16:20 but the message fits so well for quit-while-genocided that it will probably be kept in 16:21 ais523: imo out of depth polymorph / shapechanging is different to mkclass, but the result is the same 16:21 it's so good it definitely looked intentional 16:21 stenno: I don't think out-of-depth monsters generating is /obviously/ a bug; it may be undesirable, and it may be unintentional, but neither is obviously true 16:21 Yes, the Charon's boat message should be kept, it's completely appropriate for its circumstances. 16:22 ais523: agreed 16:22 but.. 16:22 ais523: bugs that turn out into useful features should not remain the way they are, but be designed intentionally 16:23 the alternative is bad for maintainability 16:23 and in the days before commit messages, there weren't any logs of which features were or were not intendedd 16:23 FIQ: but spaghetti is tasty ;-; 16:23 FIQ: the "adjust an item to itself to merge it with all matching items" thing was a bug and has been promoted into an intended feature, with code to match 16:23 so that's an example of the sort oft hing you want 16:23 didn't DT undo that once they noticed it? 16:24 I don't think so 16:24 it was changed so that the old intended behaviour, of #adjust an item onto another merges them if possible, was changed so that #adjust unconditionally swaps apart from a self-#adjust 16:24 oh right, I'm confusing it with #adjust 1 a a 16:24 for splitting 16:24 which *was* undone (but later I think it was changed again to behave as you expect) 16:25 splitting is an unrelated feature 16:25 so, the issue is that the DES file specifies random L, and the concern is that the mindflayer is in appropriate - is that a correct description in a nut shell? 16:25 inappropriate* 16:25 correct 16:25 it's out of depth 16:25 nhmall: the issue is that monsters can generate out of depth 16:25 and in the case of purple L, it's even out of dungeon (as they generate in gehennom only normally) 16:25 it might be a feature, but the code as it is right now is nonsensical to the point where it likely arose unintentionally 16:26 castle .DES file just has L as one of the random monsters generated 16:26 for the record, I have no issues with minesflayers or castle purple L 16:26 i have a huge issue with it, but also generally an issue with out-of-depth monster generation via polymorph/shapeshifting as mentioned earlier 16:26 FIQ: I was going to suggest that we put a mindflayer on every level :) 16:27 (Joking, of course) 16:27 heh 16:27 TRIGGERED 16:27 i've had a mindflayer in mines, just means i have to do mines a bit later 16:27 stenno: I don't think DT view on that is consistent 16:27 nhmall: the basic issue is that NetHack is normally very picky about which monsters go where (to the extent that green slimes basically don't generate full stop), but there are some notable exceptions and those exceptions tend to stand out 16:27 arch lich in castle too lol 16:27 because there is code for monster polymorph being forced to be in depth 16:27 but not everything uses it 16:28 my first encounter with a monster's summon nasties spell o_O 16:28 so many players are of the opinion that the number of exceptions should be reduced; some but not all would also be happy with an increase 16:28 nhmall: No, no, put a _chameleon_ on every level. 16:28 Chameleons are fun :D 16:28 That way they're never unexpected. 16:28 ais523 said it well 16:28 castle barracks filled with blood puddings, go 16:28 there is good rng and bad rng 16:28 bad as in bad game design 16:28 hm 16:29 and imo aforementioned things are bad rng 16:29 Guthix__: You never got the Titan version of Medusa? 16:29 my own opinion is that out of depth monsters are frequently interesting and a good challenge, but having two specific out-of-depth monsters be more common than others makes things more repetitive, especially as they're in some of the most annoying monster classes 16:29 K2: now I'm curious what a "worst feature as chosen by conseus" for each variant would look like 16:29 oh right, titan medusa :-( 16:29 jonadab:Titan medusa? 16:29 *consensus 16:29 that's fun the first time, less fun the second time 16:29 wait 16:29 Titan medusa is clearly deliberate. 16:29 FIQ hah 16:29 titan medusa is hardcoded 16:29 what would we call that variant 16:29 it's not an issue 16:29 eeehhh?? 16:29 <[Demo]6> titan caveman quest? 16:30 what's this titan medusa? :P 16:30 jonadab: yes 16:30 <[Demo]6> nazgul wizard quest? 16:30 Guthix__: have you never come across a titan on Medusa's level? 16:30 my only problem with titan medusa 16:30 the odds are 1 in 2 in 3.4.3 and 1 in 4 in 3.6.x 16:30 is the ridiculous difference in difficulty 16:30 ais523: i think i've killed stone titans on a medusa level before 16:30 i don't remember it being too hard though 16:31 stone giant is a different monster entirely 16:31 [hdf-us] [spl] zor (Bar Wer Mal Cha), 604 points, T:861, killed by a dagger, while frozen by a monster's gaze 16:31 ohh lol 16:31 @v?titan 16:31 titan (H) | Lvl: 16 | Diff: 20 | Spd: 18 | Res: none | Confers: nothing | MR: 70 | Generates: gehennom dungeons | AC: -3 | Attacks: 2d8 weapon physical, 0d0 cast spell | Alignment: 9 | Flags: omnivore, flies, infravisible 16:31 FIQ: now I'm wondering how orctown ended up less popular than titan medusa, they are very similar situations 16:31 FIQ: Fourk adds a couple of Medusa variants that are intermediate in difficulty between Titan and the other 343 one. 16:31 Storm titans are tough but i don't normally meet them till gehennom 16:31 ais523: titan medusa already existed, and is also far later in the dungeon 16:31 the titan on medusa is sometimes peaceful (for lawful characters iirc) so you might not notice it so much in those cases 16:31 ais523: Titan medusa doesn't deprive you of anything. 16:31 ais523 because players expect to go to minetown to get and sell loot 16:31 and what jonadab said 16:31 orctown basically kills that expectation 16:31 medusa level had no expectation like that 16:32 Ohh where there's a titan in the first room? 16:32 I've come expect there might be purple L at the castle. Ive only read on here a couple times that's it a bug, but I dunno. It doesn't seem to be going away? 16:32 The extra challenge isn't the main problem with orctown. 16:32 I've seen that, was lawful tho 16:32 Guthix__: right 16:32 <@luxidream> FIQ: xnh monster generation, FIQHack monster AI, fourk damage reduction, spork spellcasting, grunt hell, un wow, slex monsters, NH4 covetous behavior 16:32 nhmall: anyway i have to sleep now, but i would very much like to hear an 'official' opinion from the devteam or a personal one from you about this 16:32 I personally wouldn't mind orctown nearly as much if the reward was bigger, or at the very least, aligned with other minetowns 16:32 so i can stop raging about it 16:32 stenno: you will never get an official opinion from the devteam about anything 16:32 rebatela: I agree. Seems normal to me. 16:32 we don't have any way to create one 16:32 the orctown revamp in xnethack is nice imo 16:32 what is wrong with monster generation in xnh? 16:32 aosdict take on it is good 16:32 then a personal one 16:32 blame the horde of orcs 16:32 i always see orctown as a free altar 16:32 <@luxidream> they generate all at once and never generate again, good luck getting an artifact weapon ever 16:33 i keep getting non-coaligned altars in minetown lol 16:33 <@luxidream> hyperbole but still 16:33 @luxidream oh, interesting 16:33 that should lead to quite a different experience 16:33 while in theory being a tiny change 16:33 stenno: I will open an internal bug on it 16:33 I know one dungeon redesign plan I had fixed the Minetown altar as neutral 16:33 I should try xnh 16:33 <@luxidream> this was to prevent camping forever surviving on corpses 16:33 nhmall: will teh result of the discussion be transparent? 16:34 in any case, thanks for that 16:34 FIQ: xnethack has some really nice thought out changes 16:34 which would add variety to the alignments 16:34 it's greatly apprechiated 16:34 i dont agree with all of it, but its a fun variant 16:34 <@luxidream> aosdict plans on another food change however, which I'm happy with 16:34 it would make me happy 16:34 since I almost always play neutral 16:34 stenno: if there is internal discussion about it (and there may not be), I'll try to keep you posted if I remember to do so (or if you prompt me) 16:34 <@Tone> The thing about purple L at the castle that is a potential balance issue in my eyes is that there are only a few ways for a player to deal with it at that point, so you essentially have to find one of those methods if you want to safely enter the floor. 16:34 noted, thanks a lot 16:34 this is bugging me so much 16:35 heh... thanks all for a pretty much unproductive work day! o/ 16:35 my only problem with purple L in vanilla 16:35 note that purple L on the castle wouldn't be a problem if monsters weren't allowed to teleport on no-tele levels :P 16:35 is that it is the only spellcaster that is any threat whatsoever until endgame 16:35 and it can be genocided 16:35 FIQ: titan? 16:35 there should be more spellcasters 16:35 that are relevant in Gehennom 16:35 also some quest nemeses 16:35 that can't be genocided 16:35 <[Demo]6> nalf 16:35 <@luxidream> dyna makes titans spawn in gehennom 16:35 nalf is like level 12 16:35 *XL12 16:35 <@luxidream> but yeah spellcasters just flood levels with monsters 16:36 can't even summon nasties most of the time 16:36 <@luxidream> not very interesting tbh 16:36 <@Tone> Mines flayers on the other hand are somewhat easily detectable, don't teleport to you, and you have more ways to safely deal with them 16:36 <[Demo]6> yeah sumon swarms suck 16:36 just implement monster player spellcasting :P 16:36 it's more interesting IMO 16:36 so is pellsson consulting on how to prevent rng exploitation the way they did? 16:36 -!- noty has joined #hardfought 16:37 there is no straightforward way to fix it i think apart from aosdict's suggestion 16:37 I've always just thought that unless you're playing a role with a MR quest artifact, you need to either get an early wish or find cloak of MR/kill gray dragon. It does seem unfair in that some roles get MR in the quest 16:37 ais523: I argued for deep ettins in fourk being ungenocideable along with arch-liches because I like the idea of there being a high level monster of each alignment that you can't genocide 16:38 nhmall: no am not. there are people way more qualified to fix that than me already in here :) 16:38 <@luxidream> rebatela: there are other ways to deal with the lich, but it's hard to tell if it's there or not 16:38 hmm 16:38 rebatela: Or make MR not quite so mandatory 16:38 <@Tone> You have to take the stairs down and engrave E or drop scare monster, then wait a bit 16:38 well, there was vector of getting the seed and predicting the values; but also the matter (and this is 100 % the fault of developers) of providing free ways of manipulating it 16:38 <@Tone> And also hope it doesn't summon the wrong nasties 16:38 in fiqhack, mind flayers and floating eyes can be sensed from up to 8 tiles away *always* 16:39 FIQ: I assume Fourk's lich AI is less annoying than vanilla's? 16:39 ais523: It's NH4's, whatever that is. 16:39 I wonder if doing something like this for floating eyes would deal with the problem that is floating eye typos 16:39 as a general change 16:39 hehe 16:39 (not specific to fh as a variant) 16:39 <[Demo]6> dnh changed covetous AI to make certain covetous monsters warp /near/ you, not to you, its weird 16:39 Though eventually I plan to rebase on FIQHack. 16:39 pellsson: without 2, 1 isn't nearly as much use. 16:39 nhmall: I still don't believe the existence of free manipulation is required for the run, the same technique would work using time-consuming manipulation like walking around at random 16:39 jonadab: OK, so not really working but less annoying 16:40 fiqhack covetous AI needs work 16:40 atm all I did was add a 500-turn restriction and make it symmetric 16:40 <@luxidream> FIQ: then spellcasters should be more interesting in combat in other variants than "HAHA you can't get me" and then fill the entire level with monsters. They're genocided often not because they're a threat to the player but because of their annoyance. Notably, arch-liches would be defeated easily if they weren't invincible off of the upstairs. 16:40 (allowing players to covetous-warp as well) 16:40 Does any variant have actually *good* covetous AI? 16:41 grunthack from what I've heard 16:41 ... interesting 16:41 no wait, not grunt 16:41 And you haven't ripped it off yet? 16:41 sporkhack 16:41 Oh. 16:41 <@luxidream> what does spork do differently? 16:41 Right, you've taken way less code from Spork than Grunt. 16:41 increasing the effort required can be a viable deterrent, not necessarily a prevention 16:41 ais523: has it been considered using an addition buildtarget to serve as a random number provider for publicservers? i.e all games consuming of the same random number queue 16:41 grunthack covetous AI is better than NH4 16:41 but it isn't *good* IMO 16:42 basically, it makes the AI behave somewhat more intelligently 16:42 removes covetous-warping 16:42 but it's still limited to regular pathfinding 16:42 <@luxidream> NH4 covetous makes demon lords not killable without paralysis or a ranged weapon 16:42 <@luxidream> since they back off from the stairs at critical HP 16:42 and by the point you meet them 16:42 pellsson: changing the build system of NetHack is a huge amount of work as different platforms tend to need different build systems, so any build system change has to be done in a large number of different places; it's not impossible but it's something of a last resort 16:42 your own movement far outstrips the covetous monsters you fight 16:43 @luxidream: unless you can outrun them 16:43 that sort-of makes sense though 16:43 @luxidream at one point, fiqhack monsters retained full covetous-warping ability but used it intelligently 16:43 it made them impossible to fight without stuff like trice or paralysis 16:43 in sporkhack, covetous types dont just go for the upstairs 16:43 <@luxidream> was I playing the game at this point? lmao 16:43 they'll teleport all over the place 16:44 <[Demo]6> in dyna they crash if its the planes which is a good feature 16:44 you sit on the upstairs, they'll still take off 16:44 ais523: why can't code be added to read an admin-placed additional key/cert from sysconf and provide additional obfuscation that way? 16:44 <[Demo]6> really makes it more high stakes 16:44 K2: God, it took me forever to kill Baalzebub in Spork 16:44 ais523: compromise: config.h, #ifdef EXTERNAL_RANDOM #define "path" #endif 16:44 once I removed it, monsters still had one rather curious behaviour while peaceful 16:44 the code remains open and consistent, but the value doesn't have to be 16:44 basically, warping all over the place constantly 16:44 yeah it can be a royal pain in the ass 16:44 nhmall: oh, sysconf, that might actually work 16:44 that change alone makes the dark one a more worthy foe in spork 16:44 that is probably what you saw @luxidream 16:44 we could definitely put some seed material there 16:44 who is usually a pushover 16:45 so you saw the fallout, but not how it was while in action 16:45 you would have complained a lot more if you did 16:45 we'd need an RNG with enough internal state that you couldn't reverse-engineer what the sysconf material was (whether it's used in the mixing function, output encoding, or seeding) 16:45 warp to player if not having the item 16:45 ais523: And use a larger-than-32-bit seed? 16:45 if 50%HP or less, warp away 16:46 yes, needs to be larger than 32 bit seed and CSPRNG, apart from that though I don't see why this wouldn't work 16:46 if having the item, keep it by staying away 16:46 it must use a larger seed or else swagginz attack will just work normally 16:46 this is how it used to behave 16:46 even using the current time as the other part of the seed would prevent replay attacks as long as you don't have two games starting in the same second 16:46 it was not very reasonable 16:46 something like time concatenated with PID should be secure 16:46 isn't that what 3.6.2 does anyway? 16:46 sure, it made sense in a "this is how something intelligent would exploit the covetous-warp ability" way 16:46 the sysconf key/value would be the "secret" pellsson mentioned in the log of this that I read 16:46 but it was not playable 16:47 <@luxidream> not sure how spork makes it playable, just sounds like it would be impossible to kill covetous monsters 16:47 @luxidream no, this is how it used to work in *fiqhack* at one point, briefly 16:47 spork is completely different 16:47 stenno: 3.6.2 multiplies, so it could theoretically have repeats (although actually finding them would be painful) 16:47 monsters jump around 16:47 Right, you could concatenate the sysconf secret, start date/time, pid, and a value you get from urandom at startup, hash it all, and there's your seed. 16:48 and orbit around you 16:48 <@luxidream> I meant what K2 described 16:48 ah 16:48 @luxidream potions of paralysis are your friend 16:48 the point here is that we're basically using the sysconf secret as a stream cipher key to generate a one-time-pad, it's only used one time because start time concat PID is unique 16:48 urandom only if it's available, of course. 16:48 But on public servers it will be. 16:48 (assuming that people don't start sufficiently many games in a second to overflow the PID /and/ gain useful information about the RNG in that time) 16:48 K2: hmm, this isn't how I've heard it described 16:48 the way I heard it, monsters can't warp 16:48 <@luxidream> so if you run out of death wands against the wizard, you lose the game 16:48 but they can blink 16:48 theoretically you wouldn't even need to mix in urandom, although it couldn't hurt 16:48 i see 16:48 so they can blink away/to you 16:49 not warp to a random location 16:49 why not just urandom? 16:49 kerio: according to paxed it's too slow; it also isn't system-independent 16:49 urandom is typically only avaiable on recent Unix systems. 16:49 urandom isn't slow, that's random 16:49 So other systems need a fallback. 16:49 also, OSes recommend that you don't use the cryptographic seed material supplier as an RNG directly, but I don't know why 16:49 "random" is not slow 16:49 there are OSes on which /dev/random can blockk 16:50 ais523: Uses up too much entropy. 16:50 "random" is what happens when people don't understand cryptography do cryptography 16:50 isn't random the one that blocks 16:50 warp/blink/whatever you want to call it 16:50 jonadab: entropy isn't actually "used up", it's a bit more complex than that 16:50 and urandom isn't 16:50 *doesn't 16:50 <[Demo]6> does aws support geiger counter passthrough to ec2 instances? 16:51 urandom doesn't block, random does block, don't use random 16:51 what's utterly wrong in linux is that urandom will never block 16:51 /dev/random blocks at the point at which, in theory, there might start to be correlations between different RNGs that are seeded from it; however, a) the estimate of when that happens isn't actually very good, b) just because the correlation exists that doesn't mean anyone can find it, and in particular, it's believed to be impossible on concurrent cryptographical knowledge 16:51 so arguably you shouldn't use /dev/urandom in linux 16:52 you should use the syscall 16:52 getrandom? 16:52 this auto-buc ability of the priest is amazing omg 16:53 and yes, use getrandom 16:54 -!- raisse has joined #hardfought 16:54 consistent rng code across platforms and system-specific seed determination with sysconf secret is likely the ideal way to go and there's already system-specific stuff in rnd.c anyway 16:55 no promises, but I might implement this tonight 16:55 -!- rebatela has quit [Read error: No route to host] 16:55 ais523: was paxed referring to seeding a csprng from system randomness for every game? 16:55 because it doesn't seem *that* bad 16:55 -!- j has joined #hardfought 16:56 -!- j is now known as rebatela 16:56 guthix_: auto-buc is great for trying on armor in the mines! 16:57 I used to ALWAYS play priests (the way i always play monks now) and it was so hard for me to get used to keeping a pet along when i tried other roles 16:57 kerio: "too slow" might've referred to just using urandom _as_ the RNG. 16:57 Rather than to seed it. 16:57 yea that makes more sense 16:57 i still feel the problem is two sided. nethack as a local game is good they way it is and does not need fixing. the randomness is good enough that i as a human cant predict (or notice) repeat patterns, and if i want the seed locally i can always get it. for public servers, it is a different issue with RNG manip. but as such, i feel like it is kinda on the public server to solve the issue, nethack 16:57 i wonder if an aes-accelerated csprng would be fast enough for NAO's purposes actually 16:58 being a local game. I dont know :) i could be completely wrong here. If vanilla nethack provided me (a pretend public server host) a way to set a define, and have the rng read from that file descriptor, i would be happy as can be. I can add all the entropy i deem required, and share randomstate across all games 16:58 rebatela: should i try wearing everything that isn't cursed just incase i get something +4 or some other stupid number? 16:58 kerio: no, paxed was referring to reading from urandom with every rn2() call 16:58 oh yeah that would be atrocious 16:58 Guthix__: Theoretically yes 16:58 That would at minimum be unnecessary. 16:59 indeed 17:00 IIRC paxed said back in 2009, it took 3-4 seconds to change a level, CPU >50% and starting up was quite slow with reading only from urandom. 17:01 Right, NetHack uses a lot of random numbers. 17:01 but that seems way too slow. 17:01 maybe if you read slices of 4k or something like that it would be much fasteR? 17:01 bhaak: read one byte, disregard 7 bits? 17:01 pellsson: having all games draw from the same rng sequence make me wonder about something - if the game spawned a thread periodically that consumed random numbers (an indefinite number), wouldn't that have kept your efforts out-of-sync? 17:01 oh god please no concurrency 17:02 But it's completely unnecessary to call urandom() for every random number. Calling it to reseed once per game turn would already be overkill. 17:02 i'd argue that there's no need to reseed ever 17:02 just seed a csprng with enough random material 17:02 nhmall: absolutely but NAO does not share random state across games 17:02 and use that 17:02 kerio: there wouldn't be any need to resync or communicate, just consume random numbers and die 17:02 kerio: Yes, if your seed and RNG state have enough bits, that should be adequate. 17:03 nhmall: other than a mutex on the rng itself 17:03 But if the seed had enough bits the pellsson attack wouldn't be possible anyway 17:03 It would certainly be much more difficult. 17:03 you mean the sartak attack >:C 17:04 jonadab: "much more" 17:04 kerio: Well, _how_ much more depends on how many bits :-) 17:04 given the timescales in play here, understatement of the billennium 17:04 kerio: no, the sartak attack was starting two games at the same time. 17:04 the Adeon attack then 17:05 it's unrelated to adeons attack 17:05 I'm a nice person 17:05 I don't attack 17:05 it would work on 3.4.3-NAO 17:05 Pinkbeast: I was under the impression that pellsson's crew had every possible seed and the possible results for a female tourist in a database in front of them. 17:05 Adeon: Do you also not protec? 17:05 I want friends with everyone 17:05 yes 17:05 no 17:05 next question 17:05 the Adeon accidental wish fest 17:05 but more importantly he got wishes bac 17:06 nhmall: Yes, me too - hence just having 2^64 seeds would render it de facto impossible, although I don't think your idea is a bad one 17:07 kerio: the Adeon accidental wish fest was using rainbow tables to determine the RNG state. that's slightly different 17:07 <[Demo]6> the more complicated you make it the more chance you have of introducing something that can be used to determine seeds 17:07 <[Demo]6> just make the seed BIG 17:07 indeed 17:07 512 bits of seed, chacha20 17:08 <[Demo]6> and then big bad people cant have a table of all possible ones 17:08 Adeon: tell me how much rainbox tables would shave the data requirement off 2^64 seeds? 17:08 rainbow* 17:09 a random kerio appears :o 17:09 pseudorandom 17:09 as usual, it's bhaak's fault 17:09 I have a wish as a priest 17:09 Do I just go GDSM as usual? 17:10 Am minetown 17:10 Guthix__: I would 17:10 Kool kool 17:10 Mind you I don't think I have really internalised these newfangled SDSMs 17:10 gdsm is significantly more appealing as chaotic 17:10 down to -6 AC and counting >:) 17:10 but still, reflection helps against so much more than MR early on :< 17:11 has kerio broken swagginzzz yet 17:11 <[Demo]6> is that the new asc.run domain? 17:11 <[Demo]6> swaggi.nz 17:12 Menche: yes, kerio doesn't have 3.6 on ASC 17:12 [Demo]6: I was delighted to discover recently montres.org.uk was untaken 17:12 bhaak: I heard a rumor that the thing would work in 343-nao as well. 17:13 pellsson: How long did it take to assemble the corpus of seeds, anyway? 17:13 jonadab: that's only a rumor until somebody proves it. probably next june. 17:13 it's nice still being able to wear the robe as priest (with gdsm) and have MR 17:14 i thought adeons patch would only regard the creation of the seed 17:14 based on that assumption i spread the rumor 17:14 uhm, hade we gone all out with AWS instance, i thiink ~24hrs? but i got way to expensive way too quick. so we distributed it over... 3? normal computers took about a week iirc 17:14 Although, for neutrals being able to wear eye is nice too (and sdsm) if you're not opposed to arti-wishing 17:14 12hrs? 17:14 stenno: yes. but if you can deduce the RNG state within the game, you can still do the second part of swagginzzz. 17:15 pellsson: Thanks. 17:15 pellsson: Congrats on your achievment! I just read, and tried to comprehend, that reddit post lol. Pretty crazy! 17:15 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) killed the Oracle, on T:16028 17:15 thank you rebatela :) 17:15 bhaak: indeed 17:16 feel horrible for all the poor devs having to solve crazy complicated RNG-problems now :( 17:16 actually, the bigger problem is I'm not sure the US's ban on exporting crypto algorithms has been repealed yet 17:16 <[Demo]6> this is very fun and exciting 17:17 and any RNG is a crypto algorithm by definition 17:17 pellsson: this one is interesting, and solving problems like that is what everyone does 17:17 that means may be we need a 64-bit seed? 17:17 bhaak: as long as the seed is still 32bit, and it doesn't get re-seeded or anything during the game, it's still possible 17:17 ais523: I thought that ended years ago? 17:17 they got relaxed over time 17:17 but aren't down to zero 17:17 Ah. 17:18 didn't djb sue them or something 17:18 true chaotic is pulling a gnome out of a pit only to bonk him to death 17:18 Guthix__: Only foocubi get to bonk people to death 17:19 ais523: Neither you nor I are in the U.S. so if we have access to the code, it's been exported 17:19 <[Demo]6> theres a difference between bonk and boink 17:19 pull the gnome out of the pit, displace him back into the pit, repeat until he dies 17:19 nhmall: right, the problem would be distributing NetHack from within the US 17:19 nhmall: surely the DoD will just leave you alone then :^) 17:19 bonk vs bork surely? 17:19 in theory any implementation of an RNG requires a review, also a license if it has more than 56 bit security 17:19 as any RNG can be used as a stream cipher 17:20 <[Demo]6> a license what 17:20 land of the free 17:20 <[Demo]6> illegal cryptography is a thing in non dictatorships? 17:20 ais523: add an optional dependency to libsodium then 17:20 it'd be cool to be able to put "licensed arms exporter" in one's resume 17:20 [Demo]6: no 17:20 ais523: that sounds old to me, but I am not a lawyer 17:21 stenno: there are also RNGs that allow to deduce the RNG state after a fixed number of outputs. like get 10 bytes and you know it. then you are good until the next reseeding 17:21 how's that question related to the US? 17:21 ais523: cant use the native crypto apis? (where available) 17:21 pellsson: there's no such thing 17:21 not anywhere enough for the devteam, at least 17:21 nhmall: it was old, and used to be onerous, it's not nearly as bad since 2000 or so 17:21 [Demo]6: In the eighties and nineties, it was illegal to *export* strong (by the standards of when the law was written) crypto from the US to most of the world. This is no longer true, but ais thinks there are still some partial restrictions. 17:21 linux kernel and windows both export support for crypto 17:22 Domestic use of crypto was never illegal. 17:22 they used to export PGP by writing it in a book 17:22 it seems that the EU rules are that there are restrictions, but don't apply if your code is public domain 17:22 So create a PD crypto library you can link against? 17:22 pellsson: i don't think any OS has a userland csprng in libc 17:23 is openbsd's arc4random() CS? 17:23 kerio: openbsd 17:23 bhaak: i understand it now 17:23 oh theo <3 17:23 wait i thought arc4random() just syscalled 17:23 and you can export cryptos from canadia :3 17:23 kerio: ah no, would have to pull all kinds of native libs. nvm. 17:23 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed Orcus, on T:39739 17:23 kerio: oh, "userland" 17:23 stenno: of course such RNGs are not good for a game like nethack but have other uses (e.g. simulations) 17:24 userland versus kernelspace is normally hard to tell from inside a program anyway though 17:24 ais523: libsodium tho 17:24 randombytes_set_implementation(&randombytes_salsa20_implementation); sodium_init(); 17:24 xoshiro256** is sold as a "rock-solid, general-purpose" PRNG but apparently you can predict all past and future outputs based on a few consecutive outputs so 17:24 scratch general-purpose 17:24 :/ 17:25 and then you have randombytes_random() and randombytes_uniform(upper_bound) 17:25 Menche: bhaak ruled that out this morning 17:25 if you are linking against libsodium you might as well use native apis? always available 17:26 what about WELL 17:26 pellsson: give us an example of that 17:27 ais523: what rng did you end up using in nh4? 17:27 reference implementation of a scheme RNG library uses something called MRG32k3a 17:28 kerio: it runs consecutive integers through a standard hash function, I forget which one but probably SHA-256 17:28 that's not CS tho :< 17:28 this is good for seeded runs but missing out on perfect forward secrecy 17:28 yea 17:28 CS has two requirements, NetHack cares only about one of them, NH4's RNG doesn't implement the otehr 17:29 but perfect forward secrecy is pointless when all the past RNG states are recorded in the save file anyway 17:29 so may as well make them easy to diff 17:29 heh 17:30 chicken scheme's PRNG library uses WELL 17:30 waaaaaaaaaaaaaaaaait a minute 17:30 arc4random *is* userland 17:31 -!- stenno_ has joined #hardfought 17:32 -!- stenno is now known as Guest26723 17:32 -!- Guest26723 has quit [Killed (watson.freenode.net (Nickname regained by services))] 17:32 -!- stenno_ is now known as stenno 17:32 -!- Guest26723 has joined #hardfought 17:33 -!- raisse has quit [Ping timeout: 268 seconds] 17:33 so you have a nice permissively licensed canadian CSPRNG there? 17:33 :3 17:34 Menche: only 60MB/s on my lappy tho 17:37 ok nvm it's about 1GB/s 17:37 feels good man 17:37 it also has arc4random_uniform() which is nice 17:37 I don't have to feel guilty about using modulo 17:39 a book paralysed me, imma die now 17:39 it wasn't even cursed >:( 17:40 kerio says I should only ever play dwarven valkyries 17:40 i thought only cursed books would do that? 17:41 Guthix__: No, just ones that are too difficult. 17:41 aw rip :( 17:41 ... and unblessed. 17:41 note to self: burn elbereth 17:41 oh wait, they can teleport me too 17:41 hmmmmhm 17:41 Guthix__: http://www.steelypips.org/nethack/spellreading.html 17:42 Actual note to self; probably don't read a spellbook unless you know it's safe by being blessed or (price-)IDed 17:42 note to self: illiterate conduct 17:42 x 17:43 Menche: *until you ascend 17:43 -!- ais523 has quit [Quit: sorry for my connection] 17:43 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) destroyed Vlad the Impaler, on T:41984 17:43 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) acquired the Candelabrum of Invocation, on T:41988 17:44 -!- ais523 has joined #hardfought 17:44 -!- mode/#hardfought [+v ais523] by ChanServ 17:45 Menche: 2.75GiB 17:45 -!- Guest26723 has quit [Ping timeout: 268 seconds] 17:45 that's a lot of pr0n 17:45 -!- Guthix__ is now known as Guthix 17:45 on fruit os 17:45 no, random data 17:45 well there might be porn, it's just very unlikely 17:45 oh arc4random per second 17:46 frankly the sort of system where RNG is an issue (public servers) will probably have that 17:46 so theo's RNG is fast enough? :o 17:46 oh god, libbsd in linux uses the actual RC4 cipher 17:47 booo 17:47 i last heard rc4 in combination with WEP 17:47 Menche: nvm we gucci: ChaCha based random number generator for OpenBSD 17:47 I mean that's probably sufficient for nethack 17:48 so basically just put arc4random_uniform in rn2? 17:48 how bad is modulo bias 17:49 not noticeable in most cases 17:49 unless you have something like an 8-bit RNG seed space 17:49 still, something that's solved for you 17:49 it's one of those things you fix just because you can, and don't expect any noticeable effect on actual gameplay 17:49 (it's not like you typically need a uniform distribution anyway) 17:50 still, you only need to reroll N-1 in 2**32 values if you want values modulo N 17:51 ais523: i vote for #define rn2 arc4random_uniform 17:51 can you safely get an even distribution over a power of two by bit masking 17:52 Menche: assuming that the RNG seedspace is a power of 2, yes 17:53 although some RNG impls do terrible things like return odd and even numbers alternately, so if you have no guarantee the RNG isn't terrible, you should shift rather than mask 17:53 <@carlarc> taking suggestions on what to name my purple worm 17:54 <@IceBox> purple nurple 17:54 i should update my dgamelaunch to use arc4random 17:55 what does dgl use randomness for 17:55 my dgamelaunch? 17:55 PASSWORD SALTS 17:55 ah 17:55 ok 17:56 * Menche laughs at dtype's password management 17:56 I use password cayenne pepper 17:56 it changes the passwords to be more difficult to remember 17:56 and turns them red 17:56 red passwords are stronger 17:56 i heard red passwords are saf- 17:56 that 17:57 Adeon: yea it's because if someone tries to sniff the password they'll sneeze 17:57 because of the pepper 17:57 get it 17:57 yes 17:57 <[Demo]6> very secure 17:57 i had really hot curry soup in hong kong 17:58 maybe that would also be useful for passwords 18:01 dwarves can hit for 11 :D 18:02 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) destroyed Vlad the Impaler, on T:38963 18:02 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) picked up the Candelabrum of Invocation, on T:38964 18:04 -!- phinxy has quit [Read error: No route to host] 18:07 Menche: only 381MB/s on beastie 18:09 ;_; 18:10 which is kinda consistent with the worse single core performance and the usage of chacha20 instead of accelerated aes 18:11 oh arc4random on other systems uses aes? 18:11 on fruit os, yea 18:12 what about demon os and penguin os 18:13 chacha20 and chacha20 (in libbsd) 18:14 man. the chacha was old when i were a wee lad, and i'm 71 18:16 -!- greqrg has joined #hardfought 18:17 cha cha cha 18:18 so only fruit os has super fast hardware accelerated randomness ;_; 18:20 -!- Guest26723 has joined #hardfought 18:23 -!- phinxy has joined #hardfought 18:23 @luxidream [backscroll] if the worst thing about xnethack is the monster generation change, then I'm doing stuff right :-) 18:23 <[Demo]6> its the part where the mmfs look like bugbears 18:23 <[Demo]6> not bugbears, quantum mechanics 18:23 <[Demo]6> uhh something idk 18:23 but, the eventual goal is to break the necessity of sacrificing tons of stuff -> artifacts. 18:23 Menche: compare 2.7GB/s of a csprng against 60MB/s of /dev/urandom tho 18:24 -!- Guest26723 has quit [Ping timeout: 250 seconds] 18:24 /dev/urandom is /dev/random 18:25 open beastie just has a symlink 18:25 weirdly enough, freebsd's urandom is faster, at 160ish MB/s 18:25 although, "Never use /dev/random. On OpenBSD, it does the same as /dev/urandom, but on many other systems, it misbehaves." 18:25 [hdf-us] [nh362] bouquet (Cav Hum Fem Law), 2515 points, T:2974, killed by a pony 18:25 manpage warns you to use urandom because other OSes screw it up 18:25 indeed 18:26 however you're not supposed to use /dev/urandom either, on linux 18:26 kerio: the difference only matters during early boot 18:26 who runs NetHack then? 18:26 y 18:26 because like some systemd python init script used to hang 18:27 you mean that unblocking random blocks in linux 18:27 :o 18:27 ais523: init=/usr/bin/nethack 18:28 Menche: no, urandom SHOULD block before the system random is initialized 18:28 in linux, it doesn't 18:28 the openbsd manpage specifically states otherwise 18:28 "The urandom device produces high quality pseudo-random output data without ever blocking, even immediately after booting." 18:28 which is one of the many many reasons why linux is bad 18:29 Menche: yeah but openbsd is special 18:29 special :3 18:30 why is it *supposed* to block 18:30 because before enough entropy is accumulated you can't output high quality pseudorandom data 18:31 doesn't it save a bunch in a file for next boot 18:31 so it's ready to go 18:31 unless you're using a ramdisk image 18:38 linux machines should be more often cold booted than warm. if at all 18:39 linux machines should not be booted 18:39 we should just accept the joke and move on 18:40 OK, so after reviewing the relevant US law, as of 2011 it is legal to export any open-source crypto code, as long as a) you don't intentionally send it to a "terrorist nation" (just putting it on a server and letting anyone download it is OK, though); b) you email the URL of the source code to crypt@bis.doc.gov and enc@nsa.gov. Disclaimer: I'm not a lawyer and might easily have misread the relevant legislation, so please do not rely on this for 18:40 legal advice 18:41 ais523: Is there a rule against causing it to exist at all URLs http://www.example.com/[a-z0-9]{16} and emailing them one an hour until they get bored? Asking for a friend. 18:41 Pinkbeast: who knows, there are a huge number of laws in the US 18:42 spamming a government agency may well violate at least one of them 18:42 but you don't have to tell them every URL at which it exists, rather at least one URL at which it exists 18:43 ais523: Hm. But I daresay one could derive a change to it automagically for each URL. 18:43 this legislation probably wasn't written by people who understand technology? 18:43 <[Demo]6> what qualifies as a terrorist nation? 18:44 <[Demo]6> if im mad at the uk today can i call it a terrorist nation? 18:44 heh, my pet mind flayer just mental-blasted this mimic before I could get to it 18:45 Pinkbeast: just fire an email on every push 18:45 [Demo]6: there's an explicit list 18:45 is Switzerland on it? 18:45 <[Demo]6> ah ok 18:45 bhaak: no 18:46 (sorry to disappoint you) 18:46 I'm gonna cry myself to sleep tonight 18:46 what else should we do? 18:47 commit acts of terror? 18:48 so posting your pic online? 18:48 <[Demo]6> start sending new really weak crypto standards to the us and try to get them to adopt them 18:48 :P 18:48 [Demo]6: they've got NIST already 18:48 [Demo]6: don't joke about that. with Tramp in office, anything might happen 18:49 <[Demo]6> goddamn 18:49 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) wished for "blessed greased wand of death", on T:47066 18:49 bleh 18:50 it's our job to not let the world forget about dual_EC 18:51 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) completed Sokoban, on T:18782 18:51 -!- ais523 has quit [Quit: quit] 18:52 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed the Wizard of Yendor, on T:47211 18:53 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) acquired the Book of the Dead, on T:47216 18:53 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) performed the invocation, on T:47223 18:55 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed the high priest of Moloch, on T:47323 18:56 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) acquired the Amulet of Yendor, on T:47327 19:07 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) wished for "blessed greased wand of death", on T:48392 19:09 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) entered the Planes, on T:48414 19:15 i'm king now 19:15 i can go upstairs and claim my birthright 19:16 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) genocided class ;, on T:48722 19:16 I think King Arthur back at home might have something to say about that... 19:16 now look here 19:16 strange women lying in ponds distributing swords is no basis for a system of government! 19:17 fountains 19:17 fountains are like... miniature ponds, right? :P 19:18 noooooooo! my horse died ;-; 19:18 herbivorous pets always die 19:18 yup lol 19:18 ohhhh well 19:18 <@luxidream> clarent for nethack when? 19:19 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) wished for "blessed potion of monster detection", on T:48841 19:19 <@luxidream> it sucks in dnh so that doesn't count 19:19 jonadab: in fourk do you get your feet wet by stepping on a fountain? 19:19 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) wished for "blessed greased partly eaten chickatrice corpse", on T:48842 19:19 like a puddle? 19:20 aosdict: No, but shallow water does get your boots wet. 19:20 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed Death, on T:48850 19:20 Fountains are considered to be a dungeon feature, like sinks. 19:20 You can be on the same tile with them without being *in* them necessarily. 19:20 [hdf-us] [nh362] Menche (Mon Hum Mal Neu), 217 points, T:1275, killed by a newt 19:20 Same as stepping onto down-stairs doesn't immediately drop you to the level below, you have to actually > 19:22 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed Famine, on T:48918 19:23 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu) killed Pestilence, on T:48962 19:24 [hdf-us] [nh362] rebatela (Mon Hum Mal Neu), 1827130 points, T:48983, ascended https://www.hardfought.org/userdata/r/rebatela/nh361/dumplog/1546726863.nh361.txt 19:24 gzzzzzzz 19:25 woo grats rebatela 19:25 \o/ 19:25 thanks 19:27 what will you do with your newfound fame? 19:27 <@Tone> 'grats rebatela 😄 19:27 * K2 votes for booze 19:29 ey he's a demigod now, he can get us free booze 19:29 no prob. i'm sort of on the wagon these days but i'll steal y'all some from the bar 19:30 * aosdict wonders if dnh has teetotal conduct since drinking booze there has good effects 19:30 <@luxidream> free beer per ascension? :0 19:30 -!- Guest26723 has joined #hardfought 19:31 * hothraxxa finds his fourth spellbook of detect foot 19:31 Soo useful. 19:31 lol 19:31 <@luxidream> is it literally uncastable, or does it not do anything 19:31 it produces useless cosmetic messages 19:31 Oh, I wouldn't call it uncastable. I've known several people with foot casts. 19:31 good for poly fodder 19:32 * aosdict groans 19:32 <@luxidream> so a deadly novel, okay 19:32 I've even known people with walking casts. 19:32 well i get 100% fail when wielding a staff of divination, but i'm a healer with no skill in that school 19:32 i'm currently xl22 19:34 -!- Guest26723 has quit [Ping timeout: 240 seconds] 19:35 what is the staff of divination supposed to do? 19:35 Probably improves failure rates on divination spells. 19:36 hmmm 19:36 yes that's it 19:36 hothraxxa: isn't detect foot level 7 though 19:36 well, a vanilla healer pretty much can't cast level 7 spells at unskilled, even with a robe 19:36 aosdict: yes it is 19:37 then I'm not really surprised it's 100% 19:37 detect foot is a joke spell 19:37 obviously 19:37 actually 19:38 i hadn't checked for a while. now wielding the staff gives me only 53% fail 19:38 * K2 detects his feet and is concerned 19:38 pee-yew 19:39 ok three tries no success and i'm not wasting more power on this 19:42 yooo i got the mines flayer again 19:43 hug it and pet it and name it George 19:43 in my hurry, i gave that thing a huuuge amount of attempts to eat my brain 19:43 ty helmet 19:43 i don't seem to have any amnesia which is nice 19:52 yeah that's the worst part (unless you know identify) 19:53 well that was a tricky bones level 19:53 no sign of anything until I checked telepathy and found the ghost 19:53 got stuck on a vault and got into an argument with a guard apparently 19:54 in* 20:00 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) had Dragonbane bestowed upon him by Kos, on T:20836 20:01 Just noticed nobody on hdf-eu is called kroisos, creosote or croesus 20:08 [hdf-us] [sp] hothraxxa (Hea Dwa Mal Neu) wished for "uncursed historic lit magic marker named bill mauldin", on T:39961 20:17 -!- nhmall has left #hardfought 20:17 -!- phinxy has quit [Quit: Lost terminal] 20:56 -!- Guthix has quit [Quit: WeeChat 0.4.2] 21:14 -!- rebatela has quit [Ping timeout: 272 seconds] 21:17 -!- phinxy has joined #hardfought 21:18 [hdf-us] [sp] k2 (Wiz Dwa Mal Neu), 7190 points, T:4707, killed by an ettin mummy 21:31 -!- Guest26723 has joined #hardfought 21:34 [hdf-us] [slshm] Disruptor (Ice Vam Mal Cha), 69305 points, T:21413, poisoned by a soldier ant 21:36 -!- Guest26723 has quit [Ping timeout: 250 seconds] 22:18 <@riker> aosdict: yeah should probably be fixed 22:19 <@riker> @Demo meh I've fought dagon without wards, it's just a slog that's all 22:19 <@riker> he doesn't have enough HP to make it bad 22:19 <@riker> !tell Chris_ANG <@aosdict> @riker dnh question: if the spell in a spellbook is flavored as being held in by wards, how does it work if the hero writes some spell in a blank spellbook without knowing any wards? 22:19 I'm on it, @riker. 22:20 -!- stenno has quit [Ping timeout: 258 seconds] 22:22 @riker demo seemed to sourcedive and get a reasonable answer 22:24 @riker also, could you check the pentagram ward page on the wiki for correctness? it doesn't agree with the dnh wards chart at https://nethackwiki.com/mediawiki/images/d/d2/Wards_dNethack.pdf 22:28 [hdf-us] [nh362] bouquet (Cav Hum Fem Law), 1735 points, T:3136, poisoned by a killer bee 22:42 -!- greqrg has quit [Quit: Leaving] 23:18 [hdf-us] [nh362] gunnervi (Val Dwa Fem Law) had Excalibur thrown at her by some watery tart, on T:4571 23:32 -!- Guest26723 has joined #hardfought 23:36 -!- stenno has joined #hardfought 23:37 -!- Guest26723 has quit [Ping timeout: 244 seconds] 23:49 [hdf-us] [nh362] gunnervi (Val Dwa Fem Law) had Mjollnir bestowed upon her by Tyr, on T:7298 23:59 [hdf-us] [nh362] oh6 (Rog Orc Mal Cha) wished for "blessed fixed greased bag of holding", on T:27807