verbrannt Posted July 14, 2018 Author Posted July 14, 2018 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. Quote
eressea Posted July 14, 2018 Posted July 14, 2018 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 Quote
verbrannt Posted July 14, 2018 Author Posted July 14, 2018 (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 July 14, 2018 by verbrannt Quote
eressea Posted July 14, 2018 Posted July 14, 2018 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)? Quote
verbrannt Posted July 14, 2018 Author Posted July 14, 2018 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. Quote
eressea Posted July 14, 2018 Posted July 14, 2018 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 :) Quote
eressea Posted July 15, 2018 Posted July 15, 2018 (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 July 15, 2018 by eressea Quote
verbrannt Posted July 15, 2018 Author Posted July 15, 2018 (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 July 15, 2018 by verbrannt Quote
eressea Posted July 15, 2018 Posted July 15, 2018 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 ;) Quote
verbrannt Posted July 15, 2018 Author Posted July 15, 2018 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. Quote
eressea Posted July 15, 2018 Posted July 15, 2018 (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 July 15, 2018 by eressea Quote
verbrannt Posted July 15, 2018 Author Posted July 15, 2018 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? Quote
eressea Posted July 15, 2018 Posted July 15, 2018 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 Quote
eressea Posted July 15, 2018 Posted July 15, 2018 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 Quote
verbrannt Posted July 15, 2018 Author Posted July 15, 2018 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. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.