TorbenC
Trainer
Hello, I couldn't really think of a better way to get this to Nilllzz other than posting it on the forums and sending him a message with a link to this thread. Reason being, I have very limited internet access (whenever I feel like making the trek up to the store to use free wifi) for now.
I've been playing the new version of Pokemon 3D (indev version 0.38.3), I've been following the game since the earlyish days of 0.14 roughly and finally decided to play the game as far as I can before needing to wait for a new version (which is surprisingly far I must say). This is a great nostalgic voyage for me and I thank Nilllzz deeply for offering the opportunity to experience this piece of my childhood all over again in a brand new way, a tear nearly came to my eye when I got to see Goldenrod from the top of the market there.
Enough back story, I've come across numerous bugs with the scripts ingame and, having looked through the scripts to get an idea of the syntax, I've fixed all of the bugs I have found so far. I am uploading a simple archive containing all of the bugs I've fixed for the above version of the game, I hope Nillzz can include these bug fixes in the next release as they have been pretty game breaking at times.
The bugfixes range from simply replacing the script with the script used in version 0.34 (old, but it worked, and only one script does this), syntax error corrections, rewriting the script, and one of them uses a round-about fix because the scripting language does not support the feature necessary (namely stopping background music) as far as I can tell.
I organized the scripts in folders as they are laid out in Pokemon 3D's root folder for simple extraction for anyone wishing to simply use the bug fixes now instead of waiting for them to be implemented/improved upon in future versions. Sadly, due to lack of internet, I am unsure as to whether or not these bugs have already been fixed for the new version and being on a low capacity battery with my father's laptop, I don't have time to find out.
I'll try to reply to any posts as soon as I can, but expect at minimum a day from my most recent post, if you have any requests that I may not have come across than please let me know.
I am a C++ programmer, so I try to be thorough when it comes to code of any kind but I may have made a few mistakes being unable to acquire a documentation of the Pokemon 3D scripting language, so if you notice any flaws in something I've done with one of these scripts please alert me (especially if you know a more efficient way of going about the fix itself)
Thank you for reading, and I hope this helps the development of Pokemon 3D in some way. And please note this is just what I've experienced in my playthrough with only minor bug testing, this is just the result of 23 hours of normal game play.
The bug fixes are as follows (start in Scripts directory):
Bugfix #1) route30\rattatabattle0.dat:
Fixed crashing upon this NPC checking the player position due to old script instruction being used ("@turn" as opposed to "@npc.Turn()"). I also added handling for the player being on the right side of the NPC (I'm unsure if that is how it is in the original or not but it seemed like it should be added). I don't know if it is intended so I left the "@npc.turn(1,0)" alone on line 3 but I personally feel this should be removed.
Bugfix #2) route31\sleepy_guy.dat:
I mostly re-wrote this script. Previously the script did not work unless you had "Kenya" in the first position of your team, the quest is now completable no matter which position it is in. I tried to keep the script as clean as possible, at the expense of double-checking a register event.
Bugfix #3) GateKeeper0.dat:
Reverted to script used in version 0.34 due to crashing upon talking to this NPC. Believed cause is an improper return value of "environment.regionweatherid" in the if statements. I worked with this one for a while before reverting, but I couldn't fix it.
Bugfix #4) center_script.dat:
Fixed a problem regarding the background music not stopping when Nurse Joy would turn to place the pokeballs on the healing machine. This created very irritating cutting in of music in-between playing the pokeball_set sound effect. It now behaves like the original. There is one problem though, the fix uses a round-about solution. Because of my limited knowledge of the scripting language, and lack of internet, I was unable to locate a function to stop background music. This is what would be preferred as opposed to the error logging (though stable) line 24 "@Music.play(nomusic)". This does create one problem though, when at the Pokemon League (Indigo Plateu) it will play the Pokemon Center music after healing, I don't know the instructions to create an if statement that would play the correct music if you are in that map file, if someone can direct me to a solution that would be fantastic.
Bugfix #5) trainer\violet_gym\003:
Fixed the game getting stuck after completing the dialogue after defeating the Violet Gym Leader. This was caused by a syntax error ("@NPC:register" instead of "@NPC.register") on line 11.
Bugfix #6) rival\rival_azalea\startscript.dat:
Fixed a problem regarding the rival selection, the rival with Quilava was always being selected due to a syntax error (":if" as opposed to ":if:" on lines 11, 15, and 19).
Bugfix #7) rival\rival_azalea\walk_script.dat:
Fixed a problem where the player would get stuck in a never ending loop of battling the rival due to an incorrect boolean registered return value check (rival_encounter_azalea = "False" as opposed to "True").
Bugfix #8) goldenrod\flowershop0.dat:
Fixed a problem where the shopkeeper was giving the player two Squirbottles instead of one, this also fixes the problem of not being able to use the Squirtbottle on the weird tree on route 36 due to those scripts checking for only one instance of the item. This replaced the second "@item.give(175,1)" instruction on line 5 with the presumably desired instruction of "@item.messagegive(175,1)" based on other scripts.
Bugfix #9) goldenrod\machop_trade.dat:
Fixed a crash upon the options for Yes/No being brought up due to the old syntax being used for the Options.show() script instruction on line 6. Also removed a ':' at the start of the option "No" dialogue on line 10, presumably leftover from transitioning to the new scripting syntax from the old text.show() script instruction.
Bugfix #10) ecruteak\bill_encounter.dat:
Fixed a problem that caused Bill to just look at you and not say or do anything when activated, this was caused by an incorrect script instruction being used in the if statement ("register.register" as opposed to "register.registered") on line 2.
Bugfix #11) ecruteak\surf_man.dat:
Fixed a problem causing this NPC to not say anything unless you had defeated all the dancers or he had already given you Surf. This was caused by ":end" being before ":endif", endinf the script before the default dialogue. This was fixed by switching lines 13 and 14. I also did some minor clean-up and removed unnecessary code.
Bugfix #12) rival\rival_ecruteak\walk_script.dat:
Fixed a problem regarding the rival selection, the rival with Quilava was always being selected due to a syntax error (":if" as opposed to ":if:" on lines 9, 13, and 17).
Bugfix #13) ecruteak\suicune_encounter.dat:
Fixed the entire encounter, previously the camera wasn't working at all or anything. This was caused by multiple miss naming of script instructions ("Camera.position" as opposed to "Camera.SetPosition" for instance) and quite a few syntax errors. The encounter does work now, with two minor problems which seem to be unavoidable as they appear to be engine problems and sadly the engine is closed source so I cannot fix them. One, the player takes an extra step forward after the sequence has completed, two, the camera looks like it is in first person but DeactivateThirdPerson doesn't really deactivate third person so turning around will show you inside your skin (to fix this simply switch to first person mode), and three, the music seems to start back up even though it shouldn't (having a script instruction like that which I mentioned earlier to stop background music would fix this problem though). Hopefully these issues will be resolved with time. If anyone has insight or knows if these are or aren't engine limitations, please let me know.
Bugfix #14) eusine\burnt2.dat:
Fixed a problem with it restarting this NPC's dialogue every time you walk through the area, even if he had already left. One problem I still notice is that it lags for about half a second or more every time you step on one of the tiles directly to the left or right of the bottom of the staircase he was in front of. Again I believe this is an engine problem, I'm not sure of course, but I believe it may be reading through the script and doing some minor processing even when it shouldn't be (ie: conditions aren't met but it is still going through the "
elect:" tags just to see what it would have had to do). I'm doubtful that is the exact case, but something similar may be going on... Or it could of course be a further problem with the script I am not aware of. Please hit me back on this one.
Bugfix #15) olivine\voltorb_trade.dat:
Fixed a missing '@' in from of "@Text.show()" on line 5 which was preventing the correct text from being shown.
Bugfix #16a) rival\rival_olivine\olivine0.dat:
Fixed a missing ':' after ":if:" which was preventing the if statement from being properly examined, which made the event always occur. Also added an ":end" at the end of the script.
Bugfix #16b) rival\rival_olivine\olivine1.dat:
Fixed a missing ':' after ":if:" which was preventing the if statement from being properly examined, which made the event always occur. Also added an ":end" at the end of the script. This is the exact same script as olivine0.dat, is there a reason for this?
Bugfix #17) lighthouse\lighthousetop.dat:
Fixed a problem with "jasmine_meet" not being registered due to incorrect script instruction ("@Register.registered" as opposed to "@Register.register()"). This also fixes the problem in Cianwood with not being able to receive the medicine.
Bugfix #18) cianwood\Shuckle.dat:
Fixed this quest, previously it wasn't working due to incorrect if statements (":if" as opposed to ":if:"). Also fixed a problem when receiving Shuckle, the rename menu for the first pokemon in your party would appear instead of for Shuckle itself.
Bugfix #19) goldenrod\bill_eevee.dat:
Fixed a bug that allowed the player to receive infinite Eevees from Bill because it was not registering the gift properly. Also fixed a problem when receiving Eevee, the rename menu for the first pokemon in your party would appear instead of for Eevee itself.
Bugfix #20a) mahogany\Shop.dat:
Fixed a problem with the player getting stuck upon selecting the "Buy" option due to an incorrect script instruction call ("@Action.trade" as opposed to "@Screen.trade").
Bugfix #20b) mahogany\Shop2.dat:
Fixed a problem with the player getting stuck upon selecting the "Buy" option due to an incorrect script instruction call ("@Action.trade" as opposed to "@Screen.trade").
Bugfix #21) lakeofrage\lance.dat:
Fixed a problem with the player getting stuck upon opting to help Lance investigate. This was caused by using an improper script instruction ("@Unregister.show()" as opposed to "@Register.unregister()"). Also added a check to see if "No_help" was actually registered before unregistering it, as a precaution. Another point the player was getting stuck was after dialogue due to incorrect syntax on the "@level.wait()" script instruction on line 20, this has been fixed as well.
Bugfix #22) mahogany\shop\findstairs.dat:
Fixed player getting stuck after Lance shouts "Dragonite Hyper Beam" due to a miss-spelling of the word level as "levle" in a script instruction. Fixed the issue with the staircase not being visible after Lance finds it, the problem was that an incorrect script instruction was being used ("@Entity.Visible()" as opposed to "@Entity.SetVisible()"). Minor cleanup was also done.
Bugfix #23) trainer\rocketbase\009.dat:
Fixed what seems to be a completely accidental copy/paste of a script from one of the trainers in the Olivine Lighthouse, now this Rocket Grunt battles you like normal and doesn't blabber on about the "sick pokemon upstairs" anymore.
Bugfix #24) rocketbase\trap3.dat:
Fixed a bug that left an ugly warning in the log.dat regarding an incorrect script function ("npc.@warp" as opposed to "@npc.warp"). It would have been really nice had the log told me which script to look in for the error...
Bugfix #25) rocketbase\gate2.dat:
Fixed a crash that occured due to invalid variable retrieval ("<playername>" as opposed to "<player.name>"). Also removed an extra ":endif" statement.
Bugfix #26) trainer\rocketbase\Ariana.dat:
Fixed a crash after Ariana finishes her defeat dialogue due to incorrect script instructions ("@npc.warp(player,x,x,x)" as opposed to "@player.warp(x,x,x)") on lines 49 and 45. Also fixed two more crashes during Lance's dialogue due to using invalid variable retrieval methods ("<playername>" as opposed to "<player.name>").
Bugfix #27) mahogany\Candy.dat:
Fixed a crash when the player is turned away from the road, this was caused by incorrectly calling "@npc.move()" as opposed to "@player.move()" on line 16.
Bugfix #28) league\enter.dat:
Fixed a bug where the guards would repeat themselves if you walked in front of them. The guards will still stop you with the exclamation point, but then you can keep moving... this is a bug I don't know how to fix as I do not believe it has anything to do with scripting, but with the map file's Action[] argument for NPCs.
I've been playing the new version of Pokemon 3D (indev version 0.38.3), I've been following the game since the earlyish days of 0.14 roughly and finally decided to play the game as far as I can before needing to wait for a new version (which is surprisingly far I must say). This is a great nostalgic voyage for me and I thank Nilllzz deeply for offering the opportunity to experience this piece of my childhood all over again in a brand new way, a tear nearly came to my eye when I got to see Goldenrod from the top of the market there.
Enough back story, I've come across numerous bugs with the scripts ingame and, having looked through the scripts to get an idea of the syntax, I've fixed all of the bugs I have found so far. I am uploading a simple archive containing all of the bugs I've fixed for the above version of the game, I hope Nillzz can include these bug fixes in the next release as they have been pretty game breaking at times.
The bugfixes range from simply replacing the script with the script used in version 0.34 (old, but it worked, and only one script does this), syntax error corrections, rewriting the script, and one of them uses a round-about fix because the scripting language does not support the feature necessary (namely stopping background music) as far as I can tell.
I organized the scripts in folders as they are laid out in Pokemon 3D's root folder for simple extraction for anyone wishing to simply use the bug fixes now instead of waiting for them to be implemented/improved upon in future versions. Sadly, due to lack of internet, I am unsure as to whether or not these bugs have already been fixed for the new version and being on a low capacity battery with my father's laptop, I don't have time to find out.
I'll try to reply to any posts as soon as I can, but expect at minimum a day from my most recent post, if you have any requests that I may not have come across than please let me know.
I am a C++ programmer, so I try to be thorough when it comes to code of any kind but I may have made a few mistakes being unable to acquire a documentation of the Pokemon 3D scripting language, so if you notice any flaws in something I've done with one of these scripts please alert me (especially if you know a more efficient way of going about the fix itself)
Thank you for reading, and I hope this helps the development of Pokemon 3D in some way. And please note this is just what I've experienced in my playthrough with only minor bug testing, this is just the result of 23 hours of normal game play.
The bug fixes are as follows (start in Scripts directory):
Bugfix #1) route30\rattatabattle0.dat:
Fixed crashing upon this NPC checking the player position due to old script instruction being used ("@turn" as opposed to "@npc.Turn()"). I also added handling for the player being on the right side of the NPC (I'm unsure if that is how it is in the original or not but it seemed like it should be added). I don't know if it is intended so I left the "@npc.turn(1,0)" alone on line 3 but I personally feel this should be removed.
Bugfix #2) route31\sleepy_guy.dat:
I mostly re-wrote this script. Previously the script did not work unless you had "Kenya" in the first position of your team, the quest is now completable no matter which position it is in. I tried to keep the script as clean as possible, at the expense of double-checking a register event.
Bugfix #3) GateKeeper0.dat:
Reverted to script used in version 0.34 due to crashing upon talking to this NPC. Believed cause is an improper return value of "environment.regionweatherid" in the if statements. I worked with this one for a while before reverting, but I couldn't fix it.
Bugfix #4) center_script.dat:
Fixed a problem regarding the background music not stopping when Nurse Joy would turn to place the pokeballs on the healing machine. This created very irritating cutting in of music in-between playing the pokeball_set sound effect. It now behaves like the original. There is one problem though, the fix uses a round-about solution. Because of my limited knowledge of the scripting language, and lack of internet, I was unable to locate a function to stop background music. This is what would be preferred as opposed to the error logging (though stable) line 24 "@Music.play(nomusic)". This does create one problem though, when at the Pokemon League (Indigo Plateu) it will play the Pokemon Center music after healing, I don't know the instructions to create an if statement that would play the correct music if you are in that map file, if someone can direct me to a solution that would be fantastic.
Bugfix #5) trainer\violet_gym\003:
Fixed the game getting stuck after completing the dialogue after defeating the Violet Gym Leader. This was caused by a syntax error ("@NPC:register" instead of "@NPC.register") on line 11.
Bugfix #6) rival\rival_azalea\startscript.dat:
Fixed a problem regarding the rival selection, the rival with Quilava was always being selected due to a syntax error (":if" as opposed to ":if:" on lines 11, 15, and 19).
Bugfix #7) rival\rival_azalea\walk_script.dat:
Fixed a problem where the player would get stuck in a never ending loop of battling the rival due to an incorrect boolean registered return value check (rival_encounter_azalea = "False" as opposed to "True").
Bugfix #8) goldenrod\flowershop0.dat:
Fixed a problem where the shopkeeper was giving the player two Squirbottles instead of one, this also fixes the problem of not being able to use the Squirtbottle on the weird tree on route 36 due to those scripts checking for only one instance of the item. This replaced the second "@item.give(175,1)" instruction on line 5 with the presumably desired instruction of "@item.messagegive(175,1)" based on other scripts.
Bugfix #9) goldenrod\machop_trade.dat:
Fixed a crash upon the options for Yes/No being brought up due to the old syntax being used for the Options.show() script instruction on line 6. Also removed a ':' at the start of the option "No" dialogue on line 10, presumably leftover from transitioning to the new scripting syntax from the old text.show() script instruction.
Bugfix #10) ecruteak\bill_encounter.dat:
Fixed a problem that caused Bill to just look at you and not say or do anything when activated, this was caused by an incorrect script instruction being used in the if statement ("register.register" as opposed to "register.registered") on line 2.
Bugfix #11) ecruteak\surf_man.dat:
Fixed a problem causing this NPC to not say anything unless you had defeated all the dancers or he had already given you Surf. This was caused by ":end" being before ":endif", endinf the script before the default dialogue. This was fixed by switching lines 13 and 14. I also did some minor clean-up and removed unnecessary code.
Bugfix #12) rival\rival_ecruteak\walk_script.dat:
Fixed a problem regarding the rival selection, the rival with Quilava was always being selected due to a syntax error (":if" as opposed to ":if:" on lines 9, 13, and 17).
Bugfix #13) ecruteak\suicune_encounter.dat:
Fixed the entire encounter, previously the camera wasn't working at all or anything. This was caused by multiple miss naming of script instructions ("Camera.position" as opposed to "Camera.SetPosition" for instance) and quite a few syntax errors. The encounter does work now, with two minor problems which seem to be unavoidable as they appear to be engine problems and sadly the engine is closed source so I cannot fix them. One, the player takes an extra step forward after the sequence has completed, two, the camera looks like it is in first person but DeactivateThirdPerson doesn't really deactivate third person so turning around will show you inside your skin (to fix this simply switch to first person mode), and three, the music seems to start back up even though it shouldn't (having a script instruction like that which I mentioned earlier to stop background music would fix this problem though). Hopefully these issues will be resolved with time. If anyone has insight or knows if these are or aren't engine limitations, please let me know.
Bugfix #14) eusine\burnt2.dat:
Fixed a problem with it restarting this NPC's dialogue every time you walk through the area, even if he had already left. One problem I still notice is that it lags for about half a second or more every time you step on one of the tiles directly to the left or right of the bottom of the staircase he was in front of. Again I believe this is an engine problem, I'm not sure of course, but I believe it may be reading through the script and doing some minor processing even when it shouldn't be (ie: conditions aren't met but it is still going through the "
Bugfix #15) olivine\voltorb_trade.dat:
Fixed a missing '@' in from of "@Text.show()" on line 5 which was preventing the correct text from being shown.
Bugfix #16a) rival\rival_olivine\olivine0.dat:
Fixed a missing ':' after ":if:" which was preventing the if statement from being properly examined, which made the event always occur. Also added an ":end" at the end of the script.
Bugfix #16b) rival\rival_olivine\olivine1.dat:
Fixed a missing ':' after ":if:" which was preventing the if statement from being properly examined, which made the event always occur. Also added an ":end" at the end of the script. This is the exact same script as olivine0.dat, is there a reason for this?
Bugfix #17) lighthouse\lighthousetop.dat:
Fixed a problem with "jasmine_meet" not being registered due to incorrect script instruction ("@Register.registered" as opposed to "@Register.register()"). This also fixes the problem in Cianwood with not being able to receive the medicine.
Bugfix #18) cianwood\Shuckle.dat:
Fixed this quest, previously it wasn't working due to incorrect if statements (":if" as opposed to ":if:"). Also fixed a problem when receiving Shuckle, the rename menu for the first pokemon in your party would appear instead of for Shuckle itself.
Bugfix #19) goldenrod\bill_eevee.dat:
Fixed a bug that allowed the player to receive infinite Eevees from Bill because it was not registering the gift properly. Also fixed a problem when receiving Eevee, the rename menu for the first pokemon in your party would appear instead of for Eevee itself.
Bugfix #20a) mahogany\Shop.dat:
Fixed a problem with the player getting stuck upon selecting the "Buy" option due to an incorrect script instruction call ("@Action.trade" as opposed to "@Screen.trade").
Bugfix #20b) mahogany\Shop2.dat:
Fixed a problem with the player getting stuck upon selecting the "Buy" option due to an incorrect script instruction call ("@Action.trade" as opposed to "@Screen.trade").
Bugfix #21) lakeofrage\lance.dat:
Fixed a problem with the player getting stuck upon opting to help Lance investigate. This was caused by using an improper script instruction ("@Unregister.show()" as opposed to "@Register.unregister()"). Also added a check to see if "No_help" was actually registered before unregistering it, as a precaution. Another point the player was getting stuck was after dialogue due to incorrect syntax on the "@level.wait()" script instruction on line 20, this has been fixed as well.
Bugfix #22) mahogany\shop\findstairs.dat:
Fixed player getting stuck after Lance shouts "Dragonite Hyper Beam" due to a miss-spelling of the word level as "levle" in a script instruction. Fixed the issue with the staircase not being visible after Lance finds it, the problem was that an incorrect script instruction was being used ("@Entity.Visible()" as opposed to "@Entity.SetVisible()"). Minor cleanup was also done.
Bugfix #23) trainer\rocketbase\009.dat:
Fixed what seems to be a completely accidental copy/paste of a script from one of the trainers in the Olivine Lighthouse, now this Rocket Grunt battles you like normal and doesn't blabber on about the "sick pokemon upstairs" anymore.
Bugfix #24) rocketbase\trap3.dat:
Fixed a bug that left an ugly warning in the log.dat regarding an incorrect script function ("npc.@warp" as opposed to "@npc.warp"). It would have been really nice had the log told me which script to look in for the error...
Bugfix #25) rocketbase\gate2.dat:
Fixed a crash that occured due to invalid variable retrieval ("<playername>" as opposed to "<player.name>"). Also removed an extra ":endif" statement.
Bugfix #26) trainer\rocketbase\Ariana.dat:
Fixed a crash after Ariana finishes her defeat dialogue due to incorrect script instructions ("@npc.warp(player,x,x,x)" as opposed to "@player.warp(x,x,x)") on lines 49 and 45. Also fixed two more crashes during Lance's dialogue due to using invalid variable retrieval methods ("<playername>" as opposed to "<player.name>").
Bugfix #27) mahogany\Candy.dat:
Fixed a crash when the player is turned away from the road, this was caused by incorrectly calling "@npc.move()" as opposed to "@player.move()" on line 16.
Bugfix #28) league\enter.dat:
Fixed a bug where the guards would repeat themselves if you walked in front of them. The guards will still stop you with the exclamation point, but then you can keep moving... this is a bug I don't know how to fix as I do not believe it has anything to do with scripting, but with the map file's Action[] argument for NPCs.
Attachments
-
22.5 KB Views: 324