#tooldev-general
1 messages Β· Page 117 of 1
file says this: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=74b55f453c53ab70e942dbc0b0c2df236b80bdea, with debug_info, not stripped
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=4737d3f27d75a9a8bc821a854b079ad11429b712, with debug_info, not stripped
oh
How would you write something simple like this in Go
public readonly struct Point
{
public Point(int x, int y)
{
X = x;
Y = y;
}
public int X { get; }
public int Y { get; }
public Point Move(Point dest) =>
new Point(X + dest.X, Y + dest.Y);
}
On Rust, I'm a bit torn if I should port my PoE viewer codebase to C++ or try to interface with the Rust code I have.
theres this: https://pkg.go.dev/image#Point - but let me rearrange that code
Ran into a brick wall with GUI and 3D libraries where upstreams were lagging behind or changing their interfaces every other version.
In glorious C++ now.
@frank kayak I just made a simple case of a struct with a couple of properties and a method, and it just happened to be a Point π
It's also immutable
@simple ravine
type Point struct {
x, y int
}
func MakePoint(x, y int) {
return Point{x, y}
}
func (p Point) X() int { return p.x }
func (p Point) Y() int { return p.y }
func (p Point) Move(dest Point) Point {
return Point{p.x + dest.x, p.y + dest.y}
}
type Point struct {
X int
X int
}
func (p *Point) Move (dest Point) Point {
return Point{
X: p.X + dest.X,
Y: p.Y + dest.Y,
}
}
Or that if you were willing to give up immutability, yeah
i wouldnt make simple ints private
It's about immutability yeah, but yeah good enough for an example
yeah then what he barks
MakePoint() would probably be called NewPoint() in most projects though
@simple ravine https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=495b50bfdb2d2f3fdbb87119c94591c1
A browser interface to the Rust compiler to experiment with the language
ah if someone wonders - in go public functions, types, ... start with an uppercase letter - if its lowercase its private
Like in Go, there's no dedicated constructors, just functions like new, from, parse, etc.
@frank kayak yeah, fair, naming bleedover from NSMakePoint π
whats that?
what does the impl keyword do?
@frank kayak macos/ios method that does something similar https://developer.apple.com/documentation/foundation/1391309-nsmakepoint
I mean, apparently short for implement, but..
Rust separates the data of the struct from the methods.
I don't think I like either Rust or Go
@simple ravine The general form is impl SomeTrait for Point where you specify the functions of some trait you wish to implement for that struct.
An impl block without a trait are just a loose bunch of associated methods.
Note how some are static functions (new) and some are member functions (moved).
A lot of the genericity in the language is from traits you may implement for your own types and either use statically or with dynamic polymorphism.
@rapid pagoda any tips how to make a macos vm run? i think i ended up with graphical glitches after booting
Think partial classes but different.
Like ruby mixins or whatever they call it?
I had decent results with VirtualBox but that was a version or two ago of macOS. Got some remnants of a KVM installation but no idea if it ever worked.
like you can mix orange juice and pineapple juice together
Performance was horrible, of course π
You can't leverage some CI somewhere?
and CI will be crappy too
@frank kayak last version of macos I ran in a VM was roughly 20 years old π
i think i found 2 free macos ci soultions
thats slightly too outdated for my causes
thanks though
C# 9 has some nice new additions for those data record types, records:
public record Point(int X, int Y);
if it's go, it runs under linux, and it doesn't do anything particularly OS-specific it'll almost certainly run fine on macos
pretty nice, adds IEqualityComparer etc automagically
no not that filthy cookie scraping im doing in firefox/chrome squlite dbs...
@simple ravine #[derive(Eq, PartialEq, Ord, PartialOrd)] π
i get my poesessid automated π
I hopped back and forth between macos/linux a bunch while developing pogo, no issues. Only cross-platform issue I ran into was Windows path names
@worthy cape is that AOT magic?
One thing that put me off Go was that Windows was considered a bit second-class.
the gui might also use a different backend with cgo ...
@simple ravine Rust compiler directives.
@worthy cape I always thought you are bsd through and through
windows is less than seconda class for me - just look at this ugly conhost window...
im getting nightmares when i here the login sound from windows
@frank kayak
@dull laurel Still a warm place in my heart for FreeBSD, but it's not overly usable for desktop or out in reality. Web server still runs it for the lulz.
look at my fancy
@simple ravine did you really enable the retro flag? π
@dull laurel systemd kind of ran a stake through the heart of the ports tree
left icon is last exit code?
ya, u can get those in oh-my-posh etc as well
its on my todo list to setup oh-my-posh
export PS1="
\e[0m\n
`[ $? = 0 ] &&
{ [ -z "$LC_ALL" ] && [ "${LANG/%.UTF-8/#}" = '#' ] || [ "${LC_ALL/%.UTF-8/#}" = '#' ] && printf '\\e[1;34m\\u2714' || printf '\\e[1;34m:)'; } ||
{ [ -z "$LC_ALL" ] && [ "${LANG/%.UTF-8/#}" = '#' ] || [ "${LC_ALL/%.UTF-8/#}" = '#' ] && printf '\\e[1;31m\\u2718' || printf '\\e[1;31m:('; }`
[\e[1;34m][\D{%T; %Y.%m.%d}]
[\e[1;31m][\u[\e[0;34m]@[
\e[1;[ "$SSH_CLIENT" ] || [ "$SSH_TTY" ] && printf 33 || printf 31m
]\h]
[\e[1;34m][\w]
[\e[1;31m]\$[\e[0m]\n\n"
default powershell?
@frank kayak use markdown syntax to format code. ```
ah
pimped powershell
@frank kayak Migrated off FreeNAS/nas4free for some reason, I forget if it was hardware support or some tuning that I just couldn't get right.
export PS1="\
\e[0m\n \
\`[ \$? = 0 ] && \
{ [ -z \"\$LC_ALL\" ] && [ \"\${LANG/%*.UTF-8/#}\" = '#' ] || [ \"\${LC_ALL/%*.UTF-8/#}\" = '#' ] && printf '\\\e[1;34m\\\u2714' || printf '\\\e[1;34m:)'; } || \
{ [ -z \"\$LC_ALL\" ] && [ \"\${LANG/%*.UTF-8/#}\" = '#' ] || [ \"\${LC_ALL/%*.UTF-8/#}\" = '#' ] && printf '\\\e[1;31m\\\u2718' || printf '\\\e[1;31m:('; }\` \
\[\e[1;34m\][\D{%T; %Y.%m.%d}] \
\[\e[1;31m\][\u\[\e[0;34m\]@\[\
\e[1;`[ "$SSH_CLIENT" ] || [ "$SSH_TTY" ] && printf 33 || printf 31`m\
\]\h] \
\[\e[1;34m\][\w] \
\[\e[1;31m\]\\$\[\e[0m\]\n\n"
Probably was the 10gbit Mellanox NICs I bought or the LSI HBAs.
Oh right, Zen 1 are still horribly broken on FreeBSD.
that reminds me one hdd did croak
Had a repro that hard froze the machine with ZFS send in around 14h.
its some xeon with 6 6tb western
a digital graveyard
dump without order mostly....
I've got around two terabytes of space left before I need to worry about deduplicating my PoE downloads.
i did a copy of the last 3.11 pre-noodle state
I had a nice delta-compression system for all GGPKs ever, but bundles ruined that.
Kept the last full GGPK in each league, and delta-compressed toward the .0 version.
i tried delta compression on binary patches for my tool - didnt do anything...
oh nice
800 gigs for references+deltas, estimated around 10 TiB actual data.
Never had it all present at once, had to work league-wise to build the hash-dedup database.
144 GiB for every distinct file content in PoE history up to the tech patch.
also the exe or only ggpk?
I've got all EXEs separately too, for figuring out what rough version it is.
cool
Those are just like 10 gigs.
does anyone have a bash around in a pseudo-terminal (no conhost crap)?
just found something nice again:
alias t='((i)) && { i=0; a=i; } || { i=1; a=o; }; echo "p${a}ng"; bind "\"\\e[0n\": \"t\\n\""; printf "\\e[5n"'
t
anyone brave enough to test it?
printf "\e[5n" queries the terminal
the response is bound to repeating the command and printing ping pong
3.12.3 patch note preview, dang that's a lot of stuff changed.
@worthy cape i found a way to deal with those ggpks
No problemo
is the tooldev-breakout just for oodle stuff?
@frank kayak For any focused collaborative work.
ah
During the week of panic, valuable information was lost in scrollback here, so we set up a separate room for collaborative work.
makes sense
there probably is a cheap OVH server with 1TB of data for less
160,000 IOPS and 2000 MBps tho
Hetzner has some pretty cheap/good stuff too, if you just want a physical machine with a bunch of local storage
I'm fairly over on-premise normal datacenter stuff
u can get 1 TB of storage for $21 per month too, backed up triple up, scalable and all that jazz
I have a VM with 7 TB of HDD with a Xeon processor and 8 GB of RAM for β¬62 / mo
wow that is very cheap
yeah, 8 cores
i dont do enough with it
it pretty much holds and acquires eh... media files
Was gonna say, that's a lot of Linux ISOs.
Yep, all MIT and CC0 licensed data
I kinda want to dockerize stuff on this thing though, but I know I'm just gonna blow everything up
Plex, sonarr, radarr, jackett, deluged
would be nice to have them in small containers
any idea why I can't run pypoe_ui after pulling the latest pypoe?
any other ggpk browsers working for the new format. can't recall if the C# one was updated
Wild guess is missing the ozz DLL.
I have ooz on math path
(the UI doesn't show bundle contents yet, unless Omega has gotten around fixing that)
where is that dll for oodle in poe? what is it called? cant find it
Ah yes, explodes for me too: ImportError: cannot import name 'extract_dds' from 'PyPoE.poe.file.ggpk' (c:\code\poe\pypoe\PyPoE\poe\file\ggpk.py)
yep
@frank kayak PoE static-links it π
nice...
If you want to obtain it from a game, there's Warframe (40 gigs)
i love static linking
Or Doom Eternal IIRC.
except in this case....
tane gets ctrl-clicking
he was already positioned in my stash since a while
@inland kestrel If all you want is exploding, I've got a command line tool bun_extract_file that can list bundled contents and expand from a file list.
I'd like to browse the tabular data within
opposed to just export the bin files within
You could technically explode and repack with some GGPK making tool π
But no, my thing is probably not what you want then.
I checked libggpk and it's browser also isn't up to date
oh I should market my command line tool as well
totkeks, do you have something for browser the bin's within?
I've blown a week on the silly guild stash API, still haven't packed up my API.
you can extract that from the command line. but nothing with a gui
Note that mine gets into the bins, but doesn't do any .DAT shenanigans.
π’ what language
If that's what you're looking for.
yep, looking for .dat browsing
if you want to see the ggpk content use pogo-ui
oriath-net ?
yeah
speaking of .dat ... is this the most up to date guide on those files?
https://github.com/MuxaJIbI4/libggpk/blob/beta/LibDat/LibDat.readme.txt
because i have looked at PyPoEs files, esp. the spec, it lists all dat files contents, but doesn't explain how the file format works
cant remember if i tried with old or new ggpk
@dull laurel I've gone mostly off the file comment in PyPoE.
and i dont think you can export yet, youd have to save the file manually by changing the code a bit i guess
I wish I had documented it when writing my dat parser
I think mine's equally non-documented
ah let me make my repo publico
but his/her decompressiion cgo binding works so i guess the ui prob has that feature or gets it soon
i switched this week to vscodium from scite and i cant make the linter shut up...
bugging me to add comments to each exported function when im not even sure about the interface of my library yet
I'm trying to document it like this https://github.com/totkeks/PoeTools/blob/main/docs/Index.md
Makes it easier to understand I hope.
You should see Rust's clippy... keeps complaining about the complexity of my PoE format parsers.
"too many variables with single letter names" π
the 90's have called. they want their limited memory back.
@dull laurel Don't forget that all the integers are little-endian.
in the dat files?
@frank kayak the UI is kind of an afterthought tbh, I may have to break that to add full bundle/datadir support
There and in the bundle spec you linked.
guess I need a better tool to draw those structures (that includes endianess and flexible structures)
I technically have a DAT browers in my exploratory tooling too: https://i.imgur.com/YvO7PNS.png
(I would not recommend anyone using it :D)
nice, even using the PoE font!
Next up for me is splitting out the Bun library/tool and working on my actual tool codebase.
Any decade now.
@inland kestrel Not sure how up-to-date RePoE is now, might be an alternative if you're fine with more baked data.
what does your tool focus on?
@simple ravine do you have at least some documentation in your parser?
Sorry, it's total garbo in terms of documentation
@frank kayak Ultimate goal is rendering/editing hideouts, reversing all the relevant formats along the way.
cool
Also implementing the worlds shoddiest approximation of the PoE render pipeline π
as you can see I haven't touched it in a while, I am moving it to the new branch and touching it up as we speak
It's likely that I end up figuring out the animation bits and render it all in a generic lit graybox style.
i just need the documentation for the format π
(but it works)
those span extensions are interesting.
Leading u32 with row count, rows of fixed unknown width, delimiter (8x BBh) separating fixed data from varying data, columns are fixed size and may reference locations/counts into varying data, some light nesting of types is allowed.
NULL fields are encoded by 0xFE repeating, some references are into the delimiter landing pad, some references are to the one-past-end byte of varying data.
@rapid pagoda did you know about https://github.com/Patrolavia/ggpk when you started your lib?
Nope!
its not the fastest
@worthy cape that is a very sparse explanation, but thanks. π
references are four bytes indicating where in varying data to look, lists are 4 + 4 count & reference, strings are 4 bytes offset to UTF-16LE text, zero terminated.
(not sure on the order of ref|list if the count or reference comes first)
The header of the file contains the number of rows and the size of the rows, so we can determine with certainty how large it would be. Together this is fixed size data section.
so the data until 0xbbbbbbbb is just the fixed row data?
yeah
how to separate total elemental resistances to individual ones?
I hate combined resistances
wrong channel
so where?
ok
what was the difference between dat, dat64, datl and datl64 again? One was the pointer size and the other was?
64 has wider words for references (internal and keys into other files?), while L has UTF-32LE text, IIRC.
okay, thanks. writing it down like this. PRs welcome π
As far as I'm aware, there hasn't been a lot of work done with anything beyond the "classic" 32-bit dats. They all seem to contain the same information, so there's been no pressing need to look at the rest
ah, so they all contain the same information? good to know. thought there are differences
Biggest gain with the alternate formats would be if you're looking to derive field definitions from knowing that the data should be the same.
i guess they keep the old ones for legacy code
Similarly with the localized ones.
datl appeared with the tech patch and the mac GGPK has UTF-32 filenames, so might be related to whatever stuff one does with the filesystem/strings on that platform.
GGG could rip out the variations some day, which would make it fun.
i would assume they keep them until all code using them is gone and then they can be removed
I believe they will stop support x32 systems in poe2
please no, I don't have the patience to start messing with dat64 files right now
Makes me wonder why the datl files exist. The Mac client is 64-bit only
someone's generation script just spit out all four variations?
@worthy cape is the magic 0xBB times 8 part of the variable section, as in, are all offsets increased by 8 or is it actually the end of the fixed section?
It's the start of the variable section.
Thanks
It's a literal sequence of eight 0xBB in the file, the start of which is the start of the variable data.
Was just trying to make sure I document it properly. As in: does it count towards the offset of fields or not, and the answer seems to be it does.
@civic crane x32 (https://en.wikipedia.org/wiki/X32_ABI) is different from the x86 you probably meant
4.6s for the building of my 30MB static wasm embedded webpage. compiling the build script, then the actual code and packaging it into the html
using syscall/js in go feels weird: ```go
value = js.Global().Get("document").Call("getElementById", i.id).Get(value).String()
finally fixed the input fields in my webui backend
@simple ravine Dammit, you people are tricking me into thinking about DAT specs again.
hehe
i will continue work on that tomorrow. let me know if there is anything wrong already.
yeah the pypoe ui won't work right now, it has needed a rework for a while anyway, seems like a good time since I don't see much of a point in it being just a ggpk browser anymore given that most of the stuff is contained in the bundles
I think I can say that the parsing component works for now, and its speedy on my rig, though experience with it may vary. 570ms serially, 290ms /w rayon
oh you are code-generating based on spec?
yea, the proc macros I wrote for it are under poe-type-gen
it's ultra cluttered, but in general it's a two-step process:
1- generate structs and a catch-all function that dispatches parsing based on the provided file name
2 - generate the function implementations to actually parse the file "rows"
I had a semi-working solution for that in C# a few years ago, but I felt it was becoming a pain
Maybe you have inspired me to do a second attempt at it
the proc macro step takes almost 2 minutes to run in compilation, so I might create something that generates at least part of that step that I can drop in separately
let me know how it goes, I'm like partially hopeful this compiles for wasm and I can use it wherever
Ah, that is a neat idea
Right now, my dat parser takes a spec.json, and maps it to Dictionaries (maps), and also does recursive lookups when there are references to other dat files
@wintry surge How's IDE completion of the macro output? Was a bit hit-and-miss last I tried both codegen in build.rs and proc-macros.
the right call there is to probably just made a crate that just contains the generated spec so that recompiling the library portion doesn't redo that every time
A separate crate helps a lot indeed.
oh it's still not amazing, I'm using rust-analyzer in vscode and I don't get symbols inside quote!{} blocks and it sees the function instead of the macro in suggestions, but otherwise it was fine. I mostly did a lot of debugging through hunches and printing out the token trees to figure out where I missed a parenthesis or a type or something
I originally tried to make the overall function dispatch based on a provided type, but rust didn't like that so I had to create the enum
Yeah, more wondering about the resulting specs, do you get decent completion if you try accessing a field?
oh, I haven't tried that
nope lol
oh I'm dumb all the struct fields are private
going to give it a few minutes for rust-analyzer to rebuild it and then check if it figured out what fields the struct has
yea even when I tell it the type it seems that rust-analyzer doesn't know about it. :/
has anyone looked into Languages.dat? It looks like there's no spec for it in PyPoE, it has no variabledata block, the table len says 0 and there's definitely a bunch of data in it
It almost looks like inline utf-16 strings and other data
it defined language enabled and flag
that would make sense
it's not like other dat and different format
yea, I think you're right. There's a utf-16 string followed by the expected 0x00000000, a flag and a key
sequence int32
id string
name string
locale string
str4 string
val5 int32
IsEnabled int32
Ok, that makes more sense that the first entry includes the initial 0x00000000
@digital parrot TradeMacro works for me with poe in "proper" fullscreen, but if you click on any of the tooltips the screenmode will change. Do you have GDI+ enabled? (It's in the ItemInfo tab.) I have that disabled.
Can someone tell me what ref|generic means - particularly the generic part. I thought the refs would always use a specific type they point to, so you know the size of the referenced value.
I don't think I've ever seen ref|generic when dealing with the dat specifications.
It must be something "new".
as far as I understood it is always used when a different file is referenced
It's a self ref link id
It must be something "new".
@simple ravine Not very new
https://github.com/OmegaK2/PyPoE/commit/a7bbcf88d988ee68a42fefaa62a97d67075afade#diff-668d41c2ce64883bc4bb62da3ee12b86
hence the quotation marks π it's "new" to me, who haven't touched DAT files in a couple of years.
@velvet fog what does self ref link id means? to another file, right? or inside the same file?
zero based row number in this dat file
the same or a different?
same ofc
oh ah
ref|generic, wouldn't it be shorter to just put the row number in there as an int instead of a pointer to the int?
Anyone else tried @vagrant plank 's poe-controller?
I think I got it all now for the .dat files. The vote is still open for the naming, I'd either suggest Data Table or Dataset, because just "dat" sounds odd, should at least be "data".
https://rentry.org/wqgcf does this sound correct?
".dat file format"?
Local key is not uint but size_t, Foreign key is not ulong but size_t+size_t. array length is not uint, but size_t. https://github.com/OmegaK2/PyPoE/issues/134
if I understand your table correctly, it is cpu architecture independent?
ah wait no
@civic crane why does a foreign key has a size and a pointer?
good question that I asked too, perhaps it's reserved memory that are written at runtime to make lookups faster?
ah, so it never was a long
it always was an int plus the pointer.
yeah, I assumed the same, that for their in memory database those will contain the actual references to the other table
This used to work nicely. I am not sure if it's still the case, though.
I am currently reworking it to be more optimized and nicer, but at least there's some logic that works
documentation cough π
@civic crane the length of a list also changes to size_t?
yes
nice analysis!
would change one thing: char16_t* to wchar_t*
ah eh, no.
that was the L in the file extension
@dull laurel wchar_t is an abomination which should go to hell.
https://rentry.org/wqgcf updated it with your input SnosMe.
Almost always the wrong choice unless you want to express the complete arbitrariness it happens to encode.
can't use size_t in python struct, that will be based on whether 64 or 32 bit python interpreter is running, so effectively it's still a 32 or 64 bit integer depending on dat or dat64
reimplemented my input fields in an immediate mode GUI - abusing the filter function for callbacks and downgrading multiline fields to singleline just so that i can get an event on Return... - but it works now with less triggering
resolves from twitch channel to poe account and current character
Hrm, I missed out on dialogue from a rogue in the game after a quest contract. Does anyone know off-hand where that's stored?
sound?
text lines should be in the Client.txt
didnt mess yet with the contents of the ggpk
I mean the UI dialogue from the exclamation mark in the Harbour, not the in-map greentext.
no clue
i somehow made my webui hog a ton of memory each time i enter something - too lazy to track that now though
do you open the client.txt again every time maybe? π
in the browser
and my client.txt parsing seems to be ok
600mb file
prob some pointer i stored in some struct along the way. but its quite a few layers
i did put a very ugly overlay over the UI libraries i use (gui (nucular), webui (vecty), tui (termui - prob will switch to tview), mobile was planned but nucular seems to work for that too)
and the control of those uis is quite different
ended up with something horrifying
Solved my problem by just listening through the Audio/NPC files ^_^
When you hand in a mission there's a whole bunch of dialogue with text, if you dismiss it or don't pay attention you never get a chance to hear it again.
I assume it's stored in a DAT somewhere in plain text with a reference to the ogg it plays.
My tooling can't get at post-techpatch DATs yet.
ah
oriath.net doesn't seem to have it yet.
i dont enjoy the dialogues that much anymore after doing "All Ears"
Been there, done that π
I'm so damaged from that achievement that I still go through every single dialogue option of every NPC whenever I hit the town.
i did that on league start with a weird CoC build that didnt want to work
im past that
i did that on a lot of chars
It's tradition now.
i really hope i have my tool soon in a state where i can publish it (and forget about it)
when i have a bit time to work on it again i have forgotten the state of the code again...
@worthy cape you said you want to recreate hideouts with your tool? how far are the 3d libraries in rust?
I ripped a lot of support code from my libpoe code to bun to support the bundle loading.
Not sure how I'm going to get it back in again.
It varies a lot. My asset viewer skipped all the fancy safe libraries and used plain boring OpenGL.
ah
You've got decent platform windowing, you've got some different graphics abstractions like the one that's like WebGPU, the assorted Vulkan wrappers, plain bindings-type ones.
what is the problem in having your code not in libpoe anymore? is bun the tool importing libpoe?
There's friendly bindings for Dear Imgui, but they're a bit behind upstream and changes abstractions at times.
prob still has more doc than my GUI π
https://pkg.go.dev/github.com/aarzilli/nucular so many functions without any comment on how to use them
i found out that initiation of the text editors erases my settings...
libpoe has low level functionality for parsing GGPK files and a VFS built on top of that, as well as parsers for other formats. It also has utility functions for Unicode string manipulation, SHA256 code, etc.
I ripped the GGPK format code and some of the util code into libbun to be able to support bundles in GGPKs for the Bun EXE.
have you published libpoe yet?
Nope, private WIP with my hideout tool.
ok hope we can see it soon
hideout tool?
@vapid pulsar My ultimate endgame is an editor for hideout decorating that doesn't suck.
With features like laying out decorations along splines, grouping and layers, prefabs, etc.
Ah cool, yeah i had envisioned something like that too. Got as far as decoding most of the 3d formats
My current project is timeless jewels though
Restarted in C++ as the friction in Rust was too much to be comfortable.
Yeah Rust can be painful at times
When you spend more time wrangling the code you know is good to fit the ownership model and keep running into bindings that are not quite like upstream, you finally figure out that it's not meant to be.
do we have data sets for timeless jewels? or anything we can work with?
In particular, I wanted to use the docking and tables branches of Dear Imgui, which were completely out of scope of the bindings.
@frank kayak Right now all i know is that they use the passive jewel distance file pjd and the number on the mod as a seed for Mersenne Twister PRNG to get an index in the additional mods dat
or replacement mods dat
oh
im like 90% sure they use this library in the client https://github.com/MersenneTwister-Lab/TinyMT
Do you have any datasets to work with, and would any help?
Like if someone went into Standard with a bajillion divines and a character with a tree full of sockets?
All i really need is one or two sets of jewels and indexes in the dat file/mods that get selection per node
if its included does poe include a notice?
Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
ie a jewel with x seed will produce these mods in y socket of the tree.
then i can build and test the algo
i could check my jewel in a few positions and tell the mods for a few passives
I remember there was some project where a guy automated the process using akh to collect data on the jewels.
let me check i mightve noted something down
Btw @worthy cape if you want another format in your docs repo this is how the pjd file works.
using https://kaitai.io/
Kaitai Struct is a formal language for binary format specification that can be compiled into parser code
some random notes
https://redd.it/cfg1ay
https://github.com/klayveR/python-poe-timeless-jewel
https://www.pathofexile.com/account/view-profile/Kisaryn/characters?characterName=Paws_Appraisal
https://github.com/johanahlqvist/poe-timeless-jewel-multitool
https://discord.gg/yWfZNHA
https://cdn.discordapp.com/attachments/599612568247730199/600257831656095784/Jewel__Template.xlsx Jewel__Template.xlsx
https://cdn.discordapp.com/attachments/599612568247730199/600486520436293665/Brutal_Template.xlsx Brutal_Template.xlsx
https://cdn.discordapp.com/attachments/599612568247730199/600713531909734439/Elegant_Template.xlsm Elegant_Template.xlsm
https://cdn.discordapp.com/attachments/599612568247730199/600713560741380106/Lethal_Template.xlsm Lethal_Template.xlsm
Captures Timeless Jewels from the passive skill tree and converts them into JSON - klayveR/python-poe-timeless-jewel
Path of Exile is a free online-only action RPG under development by Grinding Gear Games in New Zealand.
Ah nice find @frank kayak
Kaitai, nice. I tried using it but found it lacking for the more complicated file types.
Yeah it can be a bit weird at times. Hard to read/understand when you start using substreams
mh, that sounds interesting, this Kaitai
I find the ide useful for playing around with binary files
i wonder if you can describe the dat format with that
i prefer the go way without additional tooling for docs
is there some easy way to reduce the output to only the set values? https://github.com/andreandersen/PoeSharp/blob/master/data/update-spec.py
with go you could create a struct with json2go and "omitempty" all fields leaving you with set stuff
or try piping through jq?
stackoverflow to the rescue π https://stackoverflow.com/questions/4255400/exclude-empty-null-values-from-json-serialization
yeah was going to say sounds like jq
@mortal bone is there any way to write this magic without unsafe? So far I think it only works by writing out all the types used
https://github.com/EmmittJ/GgpkParser/blob/6ffaceec5818796095897855d3a3260571b06259/GgpkParser/Extensions/StreamExtensions.cs#L30-L54
TIL tinygonehtmlselldrugFREEnodenick is a valid english word...
@vapid pulsar Why do you think that PoE uses TinyMT? I can't find any obvious references in the .exe
I'd guess at Boost.Random or the one in the standard library if it's a MT.
Pocking around the function that does the tree replacement stuff i have seen the constant values and ASM that looks like these two functions
https://github.com/MersenneTwister-Lab/TinyMT/blob/master/tinymt/tinymt32.c#L26
https://github.com/MersenneTwister-Lab/TinyMT/blob/master/tinymt/tinymt32.c#L36
thx for the link
and are are using in asm that has 4 loops and identical bit shifting to the tinymt32_init_by_array function that uses those two other functions.
@dull laurel the Read(this Stream stream, Type type) I am not sure if I can fix that. The Read<T>(this Stream stream) should work with all types
I am not sure how you could remove the T : unmanaged constraint since you need to do the pointer magic
It's nice of the devs to leave debug strings too haha
@mortal bone can't I read the things without pointer magic if I define it for the 8 types?
what table does the alternate quality info live in?
I was looking in repoe's gems.json and it's not jumping out to me
Nevermind, I see it now... static->quality_stats array
https://docs.microsoft.com/en-us/dotnet/api/system.buffers.binary.binaryprimitives?view=net-5.0
this should work around the binary magic
the values I see was not the same as what I see on poedb. @velvet fog do you update your data after each patch? I'm wondering if repoe is out of date or not
or perhaps the weight is actually defined elsewhere
Detonate Dead as an example,
{
"id": "base_cast_speed_+%",
"set": 0,
"value": 500
},
{
"id": "skill_fire_damage_%_to_convert_to_chaos",
"set": 1,
"value": 3000
},
{
"id": "detonate_dead_damage_+%_if_corpse_ignited",
"set": 2,
"value": 4000
}```
is "value" not the weight?
https://i.imgur.com/hYiGqGi.png
300 != 10
400 != 20
@dull laurel the Read<T> and Read(type) functions aren't really linked. I don't think I am sure what you mean. If you are trying to use reflection Read(type) then you might have to figure out a better solution. if you know the type Read<type>() then you don't need to do anything
@mortal bone i'm trying to implement the dat parsing, so the type is defined in the spec
(500/1000)*20, divide 1000 and quality 20
i will try something out
@dull laurel Ah, I have already done that haha those 8 types are all you need
I really hope this works :-D
public dynamic Read<T>() where T : struct {
return (default(T)) switch
{
bool => Convert.ToBoolean(Read(1)[0]),
byte => Read(1)[0],
short => BinaryPrimitives.ReadInt16LittleEndian(Read(2)),
int => BinaryPrimitives.ReadInt32LittleEndian(Read(4)),
uint => BinaryPrimitives.ReadUInt32LittleEndian(Read(4)),
long => BinaryPrimitives.ReadInt64LittleEndian(Read(8)),
ulong => BinaryPrimitives.ReadUInt64LittleEndian(Read(8)),
float => BinaryPrimitives.ReadSingleLittleEndian(Read(4)),
_ => throw new NotImplementedException("Type not implemented")
};
}
@velvet fog I'm sorry, I'm not quite following. Can we use detonate_dead_damage_+%_if_corpse_ignited as an example? You should 20 as weight. The "value" from Gems.dat is 4000.
the value 4000 is not correct, should be 4 per quality
ah, so that 4000 (or 4 per quality) is not actually the weight
right
'GrantedEffectQualityStats.dat': File(
fields=(
Field(
name='GrantedEffectsKey',
type='ulong',
key='GrantedEffects.dat',
),
Field(
name='SetId',
type='int',
),
Field(
name='StatsKeys',
type='ref|list|ulong',
key='Stats.dat'
),
Field(
name='StatsValuesPermille',
type='ref|list|int',
),
Field(
name='Weight',
type='int',
),
),
),
chuan, you don't happen to have a json.php/Gems/Gen that exposes that do you? π₯Ί
nope, do we need that?
What would be the most efficient way to scrape the entire ladder for a single item slot?
I can dl http://api.pathofexile.com/ladders/heist?limit=200&offset=0 to grab ladder characters
Then I tried getting http://www.pathofexile.com/character-window/get-items?character=CHARACTER
But when doing this for characters that aren't mine I get {'error': {'code': 6, 'message': 'Forbidden'}} and also doing it this way would require me to make a separate request for every single character. Is there a good way to get the information I want?
https://www.pathofexile.com/character-window/get-items works as long as the profile is public, there's no easier way to do this as far asi know, just manual parsing
When I try with someone who's profile I know to be public I get {"error":{"code":1,"message":"Resource not found"}}
Oh okay, adding the account name is what I was missing, thanks.

you can get the account name of a character with this endpoint btw: ```go
url := https://www.pathofexile.com/character-window/get-account-name-by-character?character= + character
it has problems with certain chars, might be all non-ASCII ones.
Tried backporting Bun to libpoe last night, my VFS is weird.
@fickle yew Ran into someone that used https://chrome.google.com/webstore/detail/opendyslexic-font-for-chr/cdnapgfjopgaggbmfgbiinmmbdcglnam and ended up with tiny scrollbars everywhere where the font had become replaced. I could repro it with Edge and that extension, but not in Firefox with a similar one that also mangled the icon fonts.
Not sure if it's worth handling such external mangling of fonts, but thought I'd let you know π
@worthy cape Thanks. That's got to break a lot of websites I think though?
Probably.
non-regular line height?
I guess it's a decent price to pay for an overall improvement in readability if you're a bit dyslexic.
Yeah for sure. I'll put it on my evergrowing todo list.
to see if there's an easy fix
put it in the github issue tracker and let some hacktober people help you π
Ninja is not open source so unfortunately I don't get the joy of hacktober.
"oh no"
Mostly just because it's my own playground and I don't need more pull requests and issues in my life. I do that all day at work.
hehe
Mm @simple ravine still no updates to master? π
Working on it as we speak π
having some issues with the new schema format
or something else
it's not being nice to me
Oh. What's breaking?
Reading .dat files
ordered duck though, so I can both eat and talk to it about my coding problems.
it will help
im sure
pretty fun how u can follow the delivery car in real time
Haha yeah we use Wolt once in a while
Their delivery fee is a bit steep
yeah
But being able to see the delivery car is nice. Our sushi was delayed the other day and my 2 year old was really hungry. Would have been nice to know when they would be here.
finally added automated android sdk installation to my build tool...
that sdkmanager pulls a lot of unneeded crap
now one make command sets the android dependencies up, creates the apk, and runs it on my phone π
What does the apk do? π
android app format
Like, what's the app for?
my tool can be compiled for desktop, web or mobile
general mess all stuff related poe i tried stuff out
Oriathan Army Knife
currently it now display the GUI correctly on the phone, clicking doesnt work and the keyboard wont vanish but im getting there
just compile all into a really fat go binary
i use it sometimes on the cli to get some infos for an account
Ah I haven't seen many android apps in go. That explains the need to set that infrastructure up yourself
Rust, rust, rust! π
the tool does stuff like this:
Android apps in rust still sound painful π
Never stopped the evangelists.
I would like to touch rust. I just need more of that time thing.
i dont think twitch likes the scraping for the JWT stuff... π
You know to wait for the compilation
tbh, android apps in anything that doesn't interop with the Android runtime is pretty painful
dart/flutter gets around it by, uh, reimplementing the world π’
Xamarin is okay for c#
all i need now: make poem.apk install-android run-android
i can use my go gui library for android
it uses the stuff the ndk offers
i didnt have a clue how to build the apk so that it actually displays
theres gomobile (old) and gogio tools for building both need to start the GUI on the main thread with some call - took a while till i noticed i should leave the call out (its in my gui library already) and till i found the necessary build tag
When starting a new project I usually decide whether this is a project with the intent of learning something fancy or a project where I want to accomplish something. Both are valuable outcomes but it's hard (for me at least) to accomplish both. I guess this is the first?
its my hellow world program to learn go β₯οΈ started in 2018
theres a lot of really bad code in there - i improve it in little steps
@fickle yew that's a pretty cool approach. I like it
I've got a lot of porting to go to get from my Rust learner to C++.
i cant stand those macros in c and c++
i did create a pure macro header for debugging with multiple compilers and that was black magic...
@dull laurel it took many many projects for me to stop trying for both π
would someone be interested in looking through my code before i make the repo public? before that i still have some cleaning to do, there might be some poesessids in test files....
mostly pure go
the make and sed stuff was rewritten
What is your concern with making it public? Like what would you like people to look for?
I've been considering streaming my dev at times, but there's too many secrets floating around in plain text and in logs.
currently im not totally sure if not some sensitive stuff (creds) is in the history, and legally im not too sure about the scraping im doing
Scraping should be okay afaik.
scraping shouldnt be an issue in my country, but im not sure i want the anger from website owners directed at my identity
You can create a clean repo just from the current commit and remove the history if you want.
thats the plan
Okay then the secrets should a non issue I guess
but i do want to clean it up before opening it
so i would like to give some access to the project via gitlab
is anyone here using gitlab btw?
I haven't done anything serious in Go unfortunately, so I probably can't help much on cleaning up.
more like sifting through and giving some ideas. the cleanup is sth i have to do
@frank kayak Yup, even managed to snag @zao there \o/
gz π
i like it a lot more than github
most go stuff is on there though :/
gitlab is annoying if you have to maintain the server yourself
I wouldn't recommend running your own Gitlab for anything smaller than a medium-size company
Migrated my projects I wanted to have private there from bitbucket and github, as I'm too cheap to pay for GitHub π
Bitbucket is on the shitlist after the Mercurial removal.
Gitea / Gogs are probably a better choice for a personal instance.
I did learn that already...
We run Gitea at work, it's fine enough but the web UI is a bit bare-bones when it comes to finding your way around a repo.
the updates are pretty frequent
github vs gitlab ey
i like the ci a lot though
I run azure devops, but all of them are pretty good now imo
anyone tried aws devops story?
i do abuse github as a data grave for the downloads of the gitlab repo π
i heard it hasn't really gotten up to the standards of azure devops / github yet
?
that's probably quite telling in its own
...
not about you, but about aws of course
my ci pipeline -hope its fixed with the last correction
@rapid pagoda do you have experience with darwin builds with go? - i somehow end up with some cgo crap at some point
Limited experience... the cgo bits in gooz were completely uneventful π
I need to sort out Windows CI some day, would be nice to have releases built off my computer.
My eyes glaze over as soon as I look at Actions tho.
On C++ horribleness, C++20/latest is nice.
You get std::optional and all.
Almost usable now.
i did run in the difference of .bat and .cmd at work - %ERRORLEVEL% gets handled differently
how many thousand pages does the spec have by now?
Here is the text of the talk I gave at the Go SF meeting in June, 2012. This is a personal talk. I do not speak for anyone else on the Go...
No idea, haven't read the standard since C++14 or so.
Final draft for C++20 - 1841 pages.
Ooh nice, there's an a translation table in the back mapping clause and subclause references from C++17 to the corresponding C++20 ones.
they add stuff far too fast and all that old baggage
I'm happy that it's moving slightly toward usability.
If you've got to use it, it might as well become better.
not yet π¦
i did try to implement an xpath parser as my first project in c++ 8 years ago
wanted an ultimate scraper thingie (prob like scrapy - but easily usable in the shell) - this is prob so much easier in go now
rapidxml & firedns as deps
No idea about Batsch, found it many years ago.
might try it if im forced to write batch again
i did write a hybrid batch/powershell script once (polyglot?) - batch to enable powershell execution
i did create a fresh repo and some clean up - could someone please check it out on gitlab? @worthy cape @rapid pagoda - its private, i would add you as guests for now
@worthy cape i sent an invite
^_^
if it is not used?
i guess
this is new, I think. before it was just set to 0
because im getting it for ref|list too on both elements and offset
could someone please check my prealpha tool out and give me some feedback? go knowledge would be good and a gitlab account so that i can send an invite.
@frank kayak I seem to be in a project but can't see any repos.
let me check
oh
you should now have access
guest permissions arent enough on private repos...
thanks a lot for checking it out
worksies
I'll check that out later, my Go installation is on dualboot for my PoE machine.
Download button in CI view works, got myself some Windows EXE.
Idk system interoperability is a pretty shit in go right now so it's not a surprise nobody does ui and stuff
i do...
its for linux/windows (macos untested) with CLI, TUI, GUI (desktop, mobile, web) and stuff...
:O
but UI stuff isnt that far yet with go
i use termui for TUI - want to switch to tview, and nucular for GUI + mobile, and vecty for wasm web
but it needs work
Is the UI like opengl based or what?
ah the mobile backend does use gl i think
the desktop variant uses pure x11, windows what is available
Anyone know where I left the old MBP?
I've got an 2011-era Macbook Pro here somewhere.
no clue - didnt see it
Stuck on macOS 10.13 π
the default build is pure go - so that cross compilation is as easy as possible - that was important for me
macos is untested
i prob have to use a build take to disable the cgo dep for macos
@pseudo ocean would you check the code out too?
It's 10.15 now, with Big Sur beta claiming to be 11.0
so its slightly old? 2 years?
10.13 was late 2017 it seems
10.14 started requiring too fancy graphics capabilities and this one was doomed.
ah
noticed that with windows 10 upgrade on a laptop
28k lines now wow
1.3k goes to the build script
wow
i did have a pretty complicated makefile
wanted to get a bit nearer to the chance of being able to use it on windows, so i redid all the build logic in pure go too instead of posix
Fairly sure I've got Xcode set up on this machine... hmm - https://gist.github.com/zao/0ec381b22c64e8b44f80fcf670f0d39a
thats my build script
a lot is unfinished
i assume that i prob need xcode for macos - the test might be missing because i dont have a vm for testing
its in internal/tools/build/build.go
You've screwed up the test, if requiresXcode && hasXcode {
aah
i meant if the build requires xcode and xcode is installed in this case
if runtime.GOOS == `darwin` && exec.Command(`xcode-select`, `-p`).Run() == nil {
hasXcode = true
}
The test branches into log.Fatal down in buildDeps
Slowly building something now and making the machine lift from the table π
you prob have to edit line 241f ```go
requiresCgo = true
requiresXcode = true
I changed the test in builddeps to requiresXcode && !hasXcode, which should be the intended logic.
ok
ah
it does require cgo because of the gui :/
i think there arent any go gui libraries for mac without cgo
if youre adventureous take a look into internal/ui/ and its mess - i dont understand the flow i build up...
but it works somehow... sometimes...
its not pretty
Seems to be something about internal vs. external linking here.
what is that ?
there are quite often issues with macos in go - and its apples fault very often
the creator of the issue is the maintainer of gio the GUI backend im using
linkmode internal is prob the linker of the go compiler. external the one of the CC
Had to change it to external and also drop -static
ok
Flickers when moving the cursor around and the profile picture for my account is very stretched.
Beachballs when hitting an X
yeah
i think its a mutex lockup
new bug π
cli works?
cli is a bit of an issue on windows
./poem-tmp help
* frame #0: 0x00007fff5bf2aa16 libsystem_kernel.dylib`__psynch_cvwait + 10
frame #1: 0x00007fff5c0f3589 libsystem_pthread.dylib`_pthread_cond_wait + 732
The hung GUI on tab close press.
The CUI can do things like resolving my account name and stuff. No Sixel support in iTerm2 tho for pst
i do have some tricks for iterm2 somewhere...
not in that code though iirc
man pages are included btw
and shell completion (bricked atm)
Not in xterm either, bleh
xterm can sixel
Not the one on this system, your tool claims.
it requires a certain parameter
It resizes the window to cover the screen and then bails.
would be rare encountering an xterm that is compiled without sixel
if it starts resizing it prob thinks the terminal is sixel capable
crash or nothing?
Blank line and then terminal doesn't support sixel
oh
what does a printf "\033[0c" say? is a 4 included?
if yes your terminal says that it can handle sixel
64;1;2;6;9;15;18;21;22c
A SIXEL encoder/decoder implementation derived from kmiya's sixel (https://github.com/saitoha/sixel). - saitoha/libsixel
iTerm2 goes 62;4c
No change with -ti 340 or vt340.
None of the terminals work.
xterm is from XQuartz, so heaven knows how they build theirs.
ok have to rework that
thanks for all the testing!
how do you like the tabs btw? theyre created completeley anew...
Very cramped in that glorious 1152xWhatever resolution π
ah :/ - only full hd here
on the gui version the tab buttons are drawn, in the webui the tabbutton consists of 2 buttons, 1 for close x.
around 110 open issues on my old repo left...
sleeping a bit - prob continue tommorow with this little project
gn π
What version are u guys running in your driver? since i switched to 20.9.2 my game feels like utter bullshit
Heaven knows, PoE on the dev machine is only for jiggling the alternate guild stash.
Probably something mid-July.
(this channel is also not for game troubleshooting, you may want to honk a mail to techsupport@)
zao, Parsec remoting works pretty good, I do that with my laptop
remoting into my dekstop
Gonna install 20.9.2 for science, just a bit of a bother as I have to remember the password for the alternate administrator account.
(AMD driver installer still insists that you don't have redirected folders)
@compact isle noticing what I think is a weird bug. The item Putembo's Mountain doesn't appear to show up on live searches
I bought one to test, i set the price at 50c and it doesn't show up on my live search, but if I stop it and search manually it does show up
shows up fine using the proper item name:
https://www.pathofexile.com/trade/search/Heist/2m780oUk/live
oh that's weird
I clicked the link from poe.ninja
actually I just typed it in I think
didn't think you could do that ebfore
explains why I haven't gotten any live search results for the last week π¦
feels bad
I stopped it and did a manual search and saw that there were a bunch of rings less than the 70c I had it set at. Was like, what? why didn't it ding at me?
I think we can remove this workaround now
(nvm i must have imagined it lol)
Did someone document the layout of GGPK somewhere, or was that for DAT files?
i would suggestt skimming these here: "https://github.com/Patrolavia/ggpk" "https://github.com/oriath-net/pogo/tree/main/ggpk"
no, i mean I have a ggpk parser myself
but i wanted to see if there were already something documented
no clue :/
i wrote down something for the dat file, but not for ggpk
@simple ravine Just the good old https://zao.github.io/poe-doc/ggpk.html
zao to the rescue as always, the rock of my poe dev experience
that stuff should be added to the general wiki
There's markdown in the corresponding repo that can be lifted, but the text may need some love.
that looks nice
Would be nice if they separated the ggpk data and the tree toc
Simply use Steam π
@worthy cape I found poe beta 0.95 data files in my 2012 drive
ooh
that's amazing π
i tried something funny with json schema (not the PyPoe Json spec) https://pastebin.com/LsSG38PZ
funky
Hi @fickle yew, has Rogue's Marker ever been tracked on the currency listing? Got another user report of weird prices https://user-images.githubusercontent.com/10261718/95016183-9d883880-0651-11eb-986f-dc27ffbc30f1.png
But I've checked just now and it's not there
@broken cloud added it today. But I expect it has some issues because it's so low value (1/600 chaos).. Perandus coins occasionally freak out as well and I haven't had time to find the root cause
Will try and take a look at it tomorrow
Turning off my lazy loading of reference loading in dat files heh... recursively looking up references in other dat files. Fun way of consuming RAM.
i can do that too - my webui locks all the ram up after only a few keystrokes in the right/wrong input field
ref|generic is that a pointer to a row, or to an offset in the data section?
because I am getting some strange errors
in this case, in "UniqueStashLayout.dat"
if (idx != fefe....) rows[idx]
well, thats why my things are breaking. thanks
2020/09/27 11:51:51 159943910 243 [INFO Client 8] Web root: http://patchcdn.pathofexile.com/3.12.2.3.2/
2020/09/27 11:51:51 159943910 244 [INFO Client 8] Backup Web root: http://patchcdn.pathofexile.com/3.12.2.3.2/
2020/09/27 11:51:51 159943913 24f [INFO Client 8] Requesting root contents 1``` did anyone check out patching connections?
Only briefly a couple of years ago, Omega figured some stuff and added it to PyPoE
@civic crane I think added some to the web dat viewer thing?
2016/09/02 was the start of patching prot v5 and 2020/09/11 for v6
ill check pypoe out a bit
my thing depends on paths in index.bin. all sound files are not in bundles, so to get index of them you need operate on this patching level protocol
http://patchcdn.pathofexile.com/3.12.2.3.2/ is the current webroot
@civic crane What are you doing with audio? π
nothing) just saying that you cannot watch all files from my web viewer)
Ah, okay
@obtuse citrus
When you have ref|string and also set key and key_id what is the intention here?
such as:
"ComponentArmour.dat": {
"fields": {
"BaseItemTypesKey": {
"type": "ref|string",
"key": "BaseItemTypes.dat",
"key_id": "Id",
"key_offset": 0,
"enum": null,
"unique": true,
"file_path": true,
"file_ext": null,
"display": null,
"display_type": "{0}",
"description": null
},
value is a reference to baseitemtypes's Id field in the spec
Probably not really but good enough
Ok, but I should still read the data portion of said dat file, and not the index row, right?
"Mainhand_AnimationKey": {
"type": "ref|string",
"key": "Animation.dat",
"key_id": "Id",
"key_offset": 0,
"enum": null,
"unique": false,
"file_path": false,
"file_ext": null,
"display": null,
"display_type": "{0}",
"description": null
}
same with this in Animation.dat
yeah you need to read the data
looking at libggpk dat reader, they omit the key_id and key from there, and still works.
ah ok
my code was reading it as "this is a reference, and there's a key present, so should read the index, however this does not look like an index" and throws
makes sense, so when ref|string, just read data no matter what
when key_id is used it means it references the value rather then the row index in the foreign table at the specified column
ok, so the field key_id kind of either has multiple purposes, or that the purpose is slightly different to what I thought it was
hence my logic is flawed π
I tried really hard to interpret your library, but it's a bit difficult to follow, especially for a python-noob.
first pass physical reading according to "type", second pass reading all "virtual" fields, key_id, etc....
well, if ref|string and key is present, I should read from the referenced dat file, and not its own, i presume
yeah
I think it's probably internally done difference otherwise it would a reference
I think they just have some sort of object cache or whatever they read that kind of data into
but either way for just messing with the data it does work that way
yeah, i need to rethink the separation of concerns a little here
a number of things just exist for the ease of working with the files. Like unique properties or so
yeah, i was going to ask you about that one
so a field can be indexed without being concered for multiple values
what are you using display and display_text for by the way?
for the UI
alright
String to show instead of the field id when displaying this
display_type
Python formatter syntax for outputting the value```
so if there's a ref|string and key I assume, I read an uint and then take that as offset to the data portion of the referenced dat file, correct?
no. ref|string is still a size_t reference to the file itself
the value from the data (ie whatever is returned by the pointer to the data section) is what is used as reference key
what do you mean with reference key in this case?
ComponentArmour.dat for example
the ref|string will resolve to something like Metadata/Items/Armours/BodyArmours/BodyInt6
the same string can be found in the BaseItemTypes.dat Id field
ah, ok. so when ref|string always read its own data
yes
then one can use that string value to further look up what it references by leveraging key and key_id.
got it
thank you
yep
I want to note that it can sometimes be invalid
ComponentArmour.dat specifically contains some items that no longer exist in baseitemtypes
(some test items)
that's good to know!
so they have chosen to reference other rows in two different ways.
my naive assumption would be that the string id way is an older method?
maybe
I don't think it's nescessarily a reference
but might get serialized into some objects at runtime
makes sense
ookay, so reading the entire thing with references and all takes 7 seconds and consumes around 2 GB of RAM.
heh nice
Hrm. I'm kind of considering whether I should wait to release Heist audio transcriptions until the patch drops and people encounter the new content. There's a few spoilers in there.
Are you able to download the next patch's data?
No, the text/audio was all present from the start, just inaccessible in game.
I don't have anything published, but I've been quiet about the things I've found even if they're very meme:y.
That's strange. Are you saying that they will release new Heist content later in the league?
@simple ravine The plan has been all along to drip-feed the boss encounters out.
Ah
There's two encounters next patch and one upcoming after that.
We've known from the start that there would be some boss encounters that aren't in game yet. The challenges mention the "Vox Twins", for example
I like that there was Heist textures and models in the tech patch already π
Well, I would consider what kind of consequences that would have for GGG, and for the competiveness sake
It's one of the concerns I have about my model viewer and hideout thing. For example, I don't want people to find out more about hideouts than what you can see on poedb before GGG actually gets to market them.
hehe zao, so they kind of banked on it taking a while for us to figure out the new bundle stuff, or they just figured there wasn't too spoily
Especially as my rendering of anything will not be true.
@worthy cape Ironically, GGG spoiled a bunch of hideouts themselves with the hideout music thingy. Just the names, but the names make the nature of the hideouts pretty obvious
I mean, it could be an "intentional leak"
i.e.
If people find it, it can create some added hype
yet they're in control on how much they show. i guess it all comes down to if you feel it's intentional or not
Maybe. They've been in there a while though; if it's for hype it's very slow hype
hehe yeah that's a proable scenario too
map stash tab file has been worked on for like 2-3 years before it saw the light of the day
I think it's give and take, right? show some good faith, get some good faith back
In recent memory, the Blight/Metamorph/Delirium tabs were spoiled before GGG got any chance to say anything about it and they'd rather have control over that conversation I reckon.
(the shop asset and UI sheets were in the pack)
(For example, the music player mentions the "All at Sea Hideout", "Boundless Skies Hideout", "Endless Sands Hideout", and "Infinite Abyss Hideout"β¦ sure sounds to me like those are all reskins of Celestial Nebula with different backgrounds.)
@rapid pagoda It could be different tho, but unless someone has easy access to tgt/arm/etc. it's still open for imagination.
My first encounter with an unreleased hideout was the Corrupted one, with its three distinct rooms.
if I renember correctly either the hideout file or world areas had various new hideout areas for a long time too
It had been in there for heaven knows how long, seems to be a habit of taking boss arenas and hideouting them just in case.
Anyways. I've left out expansion boss content from audio dumps in the past, but Heist is tough because quite a bit of it is intertwined with non-spoilery content
If there were a SPOC for these kind of things, we could always ask in these kind of scenarios
@rapid pagoda I had to dig into the audio files to find quest completion dialogue that I missed out on, went to oriath.net first in hope that it was tabulated.
But yes, I'd be livid if I accidentally got spoilers on boss content.
I'm a bit vary of having my tools open-source if they can be misused in that regard.
I'd be embarrassed to publish the tools I'm using to build the oriath.net audio index. It's a mess
ggg is responsible what they publish - if its out its out
I am kind of embarrassed with my PoeSharp atm lol.
then i invite you to look at my code π - youll feel much better after that
zao can you rate my code on a scale from 0 great to 10 horrible? 11?
ah and asking again if someone with a gitlab account could check a bit through my go code if possible? @rapid pagoda do you have perhaps a bit time?
Go is kinda greek to me.
my ui middle layer and rate limiter are a headache
@simple ravine after going through the go tour or on the first look?
after reading some random go snippets
ok
also, different languages/ecosystems have different 'best-practices' and paradigms they use
C# and Java, for an example like to talk about SOLID, DDD, and certain patterns to help with stuff
SOLID =
Single Responsibility Principle
Open/Closed Principle
Liskov Substitution Principle
Interface separation Principle
Dependency Inversion Principle
C# and Java confuse me, so much code littered around, each part doing nothing but somehow magically doing something.
It's mainly for object oriented languages
Impossible to browse on the web or without a sufficiently krangled IDE.
krangled ide...
Bonus points if you're into the XML dependency bean injection shenanigans.
I agree C# developers like to separate a bit too much per file
F# people are more sane that way
i hate xml with a passion
Where none of the code does anything until sufficiently caressed by runtime configuration.
Well, Java is 10x worse imo
There is a certain kind of developer that gets excited by attaching suffixes like "AbstractFactoryFactory" to their class names
I had to work with a a million line Java codebase at work, it was a deep mystery.
All the message buses and all the exotic techniques.
does a value end up in a node or in an attr? pretty ambiguous - and as unreadable for humans as for machines
hope it dies out... at some point
when java dies
yaml:
- no
I guess csproj files are also XML based, but they look 100x more sane nowadays
jsons mostly fine - though we did run into the weird utf-16 encoded chars as a problem with a commercial enterprise software we were using...
yaml is also a bit too much
@worthy cape Funny you should mention that. The site generator for oriath.net uses YAML for configuration
toml like those crusties use is prob ok - but never used it
ever used anchors/references in yaml?
# Beach Guy
Audio/Dialogue/NPC/BeachGuy/BeachGuy.ogg:
text: "Bastards dumped near two dozen of us off their ship. You and me were all that survived the swim. If there was much difference between exile and a death sentence...\n\nOh, once I catch my breath here, we'll take a look around, see what Wraeclast has on offer. Saw some smoke from those ruins up the beach. It could be worth checking if there's--"
Audio/Dialogue/NPC/BeachGuy/BeachGuyScreams.dialogue.ogg:
text: "[screaming]"
the first gem guy
It plays every time! But doesn't have text in NPCTextAudio, so I have to inject that during site generation
then im deaf...
Oh. Actually I think that's the pre-3.0 line⦠nowadays it uses a shorter version https://oriath.net/Acts/Act_1/Beach_Guy/
wonder if it's worth interning all the strings when reading the dat files.
there's a drawback in consideration, which is all strings interned aren't released until process ends.
How many nontrivial strings are repeated? I suspect you'll end up losing more memory to large strings you can't get rid of