Jump to content

Recommended Posts

Posted
23 minutes ago, eressea said:

Sorry for doublepost, one more question, I keep getting av_quest0 instead of myself.av_quest0, any idea what can be wrong?


Was bug in NASC generator. Fix in master.

 

46 minutes ago, eressea said:

I'm using tree structure with UTF-8 files and when I build the AI, I go through the directory structure (so I know which is the correct class order) and join all the files into one big UTF-16LE file, then I let it compile and then I split it again to directory structure

 

Sounds convenient. I'll make it default behaviour.

Posted (edited)
14 minutes ago, eressea said:

Thanks a lot :)

 

I've found another problem, in some cases, I get results like this:


if (5 == 100 || Rand(100) < 5) {
	if (35003 == 35001) {
		select (11) {
...

Class + data: http://download.l2shrine.com/decompiler-problem1.zip

 

 

Seems like code generated correctly, but looks suspicious.

	...
	push_const 5			//unary->INTEGER_CONST
	push_const 100			//unary->INTEGER_CONST
	equal
	...
	push_const 35002			//unary->INTEGER_CONST
	push_const 35001			//unary->INTEGER_CONST
	equal
	...

Stack machine in my head generates same code as decompiler :)

 

BTW: Can I push your h5 data folder to my repository? Also the '@' prefixes in enums.json now not needed (because of generators to another languages), & type P_STATE renamed to PSTATE.

Edited by verbrannt
Posted

Oh, I didn't notice that, well, that's really strange... Also my compiler complains somewhere there: "Stack underflow may be occurred by unary constant" - maybe the select (11)?

Posted
2 minutes ago, eressea said:

Oh, I didn't notice that, well, that's really strange... Also my compiler complains somewhere there: "Stack underflow may be occurred by unary constant" - maybe the select (11)?

Yeah, this warning because of constants in statements like select/if/while.
I think NCSoft uses some sort of preprocessor for AI scripts, that generates such strange code.

Posted
12 minutes ago, verbrannt said:

Yeah, this warning because of constants in statements like select/if/while.
I think NCSoft uses some sort of preprocessor for AI scripts, that generates such strange code.

 

For me it seems the ai.obj I'm trying to decompile has already been decompiled (but wrong) and recompiled... So I'll probably have to fix these manually...

 

Great job, the decompiler works nice :)

Posted (edited)

Updated h5 definitions http://download.l2shrine.com/h5.zip

 

EDIT: Found one more new problem, if I have 'star_buster_rsk.focus' in precompiled headers, it generates @star_buster_rsk.focus which fails to compile (needs to be quoted like this @"star_buster_rsk.focus")

Edited by eressea
Posted (edited)
50 minutes ago, eressea said:

Updated h5 definitions http://download.l2shrine.com/h5.zip

 

EDIT: Found one more new problem, if I have 'star_buster_rsk.focus' in precompiled headers, it generates @star_buster_rsk.focus which fails to compile (needs to be quoted like this @"star_buster_rsk.focus")

Thx for h5 defs!

As for precompiled headers issue, I didn't knew such syntax is possible (dots in these constants). I've added simple check for dot, and if dot exists, constant will be quoted. Checkout the master branch.

 

Quote

For me it seems the ai.obj I'm trying to decompile has already been decompiled (but wrong) and recompiled... So I'll probably have to fix these manually...

 

Idk. Found similar code in the leaked GF AI. Class ssq_npc_priest for example:
 

if (2 == 2) {
    ShowSystemMessage(talker, 1273);
} else if (2 == 1) {
    ShowSystemMessage(talker, 1274);
}

select (1) {
case 1:
    ShowSystemMessage(talker, 1275);
    break;
case 2:
    ShowSystemMessage(talker, 1276);
    break;
case 3:
    ShowSystemMessage(talker, 1277);
    break;
}

 

Edited by verbrannt
Posted

Great, now it works fine :)

 

Another problem, I get this:

Say("판정식 : " + myself.i_ai6 + " - " + FloatToInt(myself.sm.hp) + " = " + myself.i_ai6 - FloatToInt(myself.sm.hp));

which is wrong (won't compile) because there's no minus operation for strings. It should be parenthesised:

Say("판정식 : " + myself.i_ai6 + " - " + FloatToInt(myself.sm.hp) + " = " + (myself.i_ai6 - FloatToInt(myself.sm.hp)));

It's a minor bug (it's just once in whole ai) but it's bit annoying to have to fix it manually ;)

Posted
25 minutes ago, eressea said:

Great, now it works fine :)

 

Another problem, I get this:


Say("판정식 : " + myself.i_ai6 + " - " + FloatToInt(myself.sm.hp) + " = " + myself.i_ai6 - FloatToInt(myself.sm.hp));

which is wrong (won't compile) because there's no minus operation for strings. It should be parenthesised:


Say("판정식 : " + myself.i_ai6 + " - " + FloatToInt(myself.sm.hp) + " = " + (myself.i_ai6 - FloatToInt(myself.sm.hp)));

It's a minor bug (it's just once in whole ai) but it's bit annoying to have to fix it manually ;)

 

Fixed.

Posted (edited)

Thanks :)

 

Found another problem that needs to be handled in order to work with H5+ AI correctly. NCsoft apparently moved FString stuff to client side, so now there's

		{1120131; -111092; 232173; -3448; 0; 0 }

instead of

		{"Discarded Guardian (lv20)"; -111092; 232173; -3448; 0; 0 }

in the ai.obj. It should decompile to

		{1120131; -111092; 232173; -3448; 0; 0};

and not to

		{"1120131"; -111092; 232173; -3448; 0; 0};

when NASCVersion is 60+

 

EDIT: Already fixed in my h5 compiler branch

 

EDIT2: Also I've removed fstring lookup on 3 different places so it probably won't be just TelPosList but maybe another 1-2 things...

 

Edited by eressea
Posted
21 minutes ago, eressea said:

Thanks :)

 

Found another problem that needs to be handled in order to work with H5+ AI correctly. NCsoft apparently moved FString stuff to client side, so now there's


		{1120131; -111092; 232173; -3448; 0; 0 }

instead of


		{"Discarded Guardian (lv20)"; -111092; 232173; -3448; 0; 0 }

in the ai.obj. It should decompile to


		{1120131; -111092; 232173; -3448; 0; 0};

and not to


		{"1120131"; -111092; 232173; -3448; 0; 0};

when NASCVersion is 60+

 

EDIT: Already fixed in my h5 compiler branch

 

EDIT2: Also I've removed fstring lookup on 3 different places so it probably won't be just TelPosList but maybe another 1-2 things...

 

 

Can you make a PR or patch?

Posted
Just now, verbrannt said:

 

Can you make a PR or patch?

 

I'm not sure how propagate NASC version to parser.php, if it was there, the fix would be easy:

 

        if (is_numeric($row[0])) {
            $row[0] = '"' . $this->data->getString($row[0]) . '"';
        }

should be called only if $nascVersion >= 60

Posted

Also, when speaking about NASC versions, the right data directory could be chosen automatically according to the version:
gf = 2, freya = 56, h5 = 60, gd = 73

Posted
5 minutes ago, eressea said:

 

I'm not sure how propagate NASC version to parser.php, if it was there, the fix would be easy:

 


        if (is_numeric($row[0])) {
            $row[0] = '"' . $this->data->getString($row[0]) . '"';
        }

should be called only if $nascVersion >= 60

 

So FString lookup should be removed from all places, no need to check NASC version. Anyway getString method not working now.

 

3 minutes ago, eressea said:

Also, when speaking about NASC versions, the right data directory could be chosen automatically according to the version:
gf = 2, freya = 56, h5 = 60, gd = 73

 

Yeah, I thought about it.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • I didn't use AI for this, I used untitledui, they have ready templates and blocks. And no, it's not shadcn, untitledui has their own design system.   For example, for the hero I used an iteration of this https://www.untitledui.com/react/marketing/hero-header-sections/hero-abstract-angles-04
    • A misaligned badge or a heavy shadow is not evidence of AI. If anything, small inconsistencies are usually proof of years of manual modifications layered over an old codebase. AI-generated UIs tend to be overly clean, symmetrical, and generic because models optimize for visual patterns, not long-term product evolution. What you’re calling “AI design” is actually a very common style in older gaming communities: strong gradients, metallic buttons, glow effects, dense information blocks, and high visual emphasis on rankings/votes/sponsors.    Also, good UI is contextual. A toplist platform for MMORPG servers is optimized differently than a modern SaaS dashboard or a portfolio site. Here, visibility, CTR, sponsor highlighting, fast scanning, and information density matter more than minimalist whitespace trends from Dribbble. And honestly, if the UI was actually generated by AI, it probably would’ve looked more modern and generic — not like a platform that clearly evolved piece by piece over many years 😄   The funny thing is that a lot of these new “AI web designers” can’t even write 20 lines of CSS by hand without ChatGPT holding their hand 😄    They see a shadow, a gradient, or a rounded border and instantly scream “AI-generated” because their entire understanding of design now comes from prompting tools instead of actually building interfaces from scratch. And honestly, @Elfo was right — your own website looks far more AI-generated you built it with Tailwind/shadcn-style aesthetics and probably Next.js ,m i right friend? you built it with Tailwind/shadcn-style aesthetics...  You literally scanned the entire site just to find a tiny shadow behind a button as “proof” 😂 Real developers know the difference between a handcrafted project that evolved over many years, and a generic AI-generated template pumped out in 30 seconds.       Anyway, no hard feelings. Different tastes, different opinions 🙂
    • If it is AI-generated, you used a really shit model. Even AI wouldn't be able to generate obvious errors like the badge misalignment.   I do find it funny, however, that out of everyone to accuse you, Splicho, who used AI to fully generate this https://nimeracp.com/, is the one to talk.
    • You’re free to dislike the design, that’s subjective and totally fine. But calling everything you personally don’t like “AI generated” is not really an argument 😄 The funny part is that the layout constraints you’re criticizing are actually intentional design decisions for toplist platforms — ads, rankings, visibility blocks, sponsor placements, and high information density. This isn’t a portfolio landing page or a SaaS dashboard where you can leave half the screen empty for aesthetics. Also, AI-generated UIs usually look generic, over-animated, inconsistent, and impractical for real long-term usage. Our platform has been evolving for years based on actual user behavior, server owner needs, CTR optimization, and functionality requirements. You may not like the visual style, and that’s okay. But confusing “I don’t like this design” with “this was made by AI” just shows you’re judging emotionally instead of technically. Anyway, appreciate the feedback. Good luck to you too 🙂
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..