BUGS and Fixes

Viewing 588 reply threads
  • Author
    Posts
    • #168
      modernknight1
      Keymaster

      THIS IS NOW THE OLD BUG AND FIXES FORUM ARCHIVE: FOR NEW BUG REPORTS PLEASE GO HERE: https://buccaneersreef.com/forums/topic/new-bugs-and-fixes-2019-2020-current/

      WARNING: DO NOT PUT YOUR DOWNLOAD ON TOP OF ANY OTHER GAME VERSION. IT IS STAND ALONE AND ONCE DL’d AND PUT INTO A NEWLY CREATED EMPTY GAME FOLDER OF YOUR CHOICE THAT YOU HAVE NAMED YOURSELF ON YOUR DESKTOP – ALL THAT IS REQUIRED IS TO OPEN THE FOLDER AND PRESS START If you put your download on top of another game or mod, it will mess everything up and you will have to delete everything and start again. MK

      Please read the “read me” file in GOF ERAs to get an idea of the bugs that are already there.

      Read Me file for GOF ERAs 2

      This is a place to post new bugs, problems, or if you have the fix for something to share.

      The first bug I am trying to fix is the promotion code that I wrote that adds all of the new titles. Almost have it working right and will post a patch when I do.

      I almost have the character index and faces/portraits bug fixed as well. I would say another month or two on this one.

      I think fixing that one will automatically fix the occasional crashing on the treasure quests when encountering Spanish ships as its character/officer related. That’s why if you reload a couple of times the officers are randomly generated and you will get a clean load without the unindexed character confusing the game.

      MK

    • #279
      Devoidbrah
      Participant

      Heya There Mk, heres Darthtuvok, I gonna report in some “buggs” i encountered; I will also try to make a promotional video and catch some buggs on tape. 😉

      Also if youre still interested in the german stuff, hit me up ^^

      Current encountered buggs:
      -Boarding doesnt work on some occasions, seems like some matches you can board and on other matches the boarding script doesnt function for the player, you can still be boarded though. At mid speed of the game it gets a little bit annoying, but once you have a tier 4 ship you just bomb em to death if the match is “unboardable”, and it doesnt have anything to do with using a ship that one cant handle. I tried it with 6-3rd rates and it seems quite random and i dont know what triggers it.
      But on hindsight of the awesomeness of the mod this is just a little bitter drop one swallows.
      Haha, i said “swallow”. xD

      Cheers and i gonna hit yu up on the media stuff soon. 😀

    • #281
      modernknight1
      Keymaster

      Hey DT,

      Thanks for the report! OK so I have some questions and some ideas. I have had boarding problems in my game as well. However, if I keep fighting a bunch and get real close at the proper angle (even if it means I bump up to the ship 6 or 7 times) the boarding icon finally appears.

      Regardless, I did do a little rewriting on some of the boarding code. So I need to ask….

      – What character are you playing?
      – What nationality are you playing?
      – What level are you?
      – What is your boarding skill?
      – Do you have any of my items or books that enhance boarding skill on your character?
      – What is your Bosun’s boarding skill and does he have any special items?
      – Was this happening earlier in your game or did you notice it start happening at a certain point?

      Its important I know these things because I want to tweak the code again and I have two new items for the next patch that effect boarding. SPOILER: One item isn’t totally authentic but I found some historical experiments. Its a blunderbuss that shoots a grappling hook. It will give +30 to boarding ability score.

      I want to do a series of static experiments with modified ability stats and distance factors. I want to release the new stuff that’s almost ready so a patch will be coming out in March.

      The website is only half open right now so I know some people have had a hard time signing up and I don’t have the PM function fully enabled yet. All this to say that I will PM you on MODDB instead of here and yes I am very interested.

      I estimate I will have all functions for the website up and running by next week and the Forums completely open and readable in two weeks. Regardless, I am getting alerts from WordPress that the site is doing really well and getting thousands of looks. I am really surprised. I thought there would be only two or three dozen people coming here everyday – but its hundreds.

      This makes me really happy and I plan to do a really good job to keep up the momentum and get fresh content up here. The mod has already been loaded hundreds of times and its only been available a few days. I can’t hardly believe it!

      I would love to see more bug reports though and I believe I have the member sign-up problems fixed now.

      Thanks again DT!

      MK

    • #282
      Devoidbrah
      Participant

      Gimme a sec im upploading the pics 😀

    • #283
      Devoidbrah
      Participant

      Picture number 1

      Picture number 2

      This ship was modified from the pirate port, so thats why the crazy stats^^ At that date is i I think Dec 12th 1665

    • #284
      Devoidbrah
      Participant

      About the bug, I noticed it once i switched to a 20 gun frigate, apparently the enemy was mostly boarding me and I thought in the beginnings that the boarding didnt work because my skillset was too low.

      But at some point when youre standing 20 meters away from the enemy ship, perfectly aligned, everyones ready to baord, but youre not able to do it, you scratch your head a bit^^

      I noticed that boarding probability is higher when your sails are not hoisted, also, theres some ships, that for some reason cannot be boarded at all.
      There was 2 hours ago a battle, where 2 frigates from a dutch military convoy were chasing after me so, i started to fight them and one couldnt be boarded, while the one i have now, it was the one i couldnt board, charged at me and i took it, a pretty fine ship she is now 😉

      *Offtopic: Seems like edit post, seems to work now. Sorry for clogging up the bugfix thread^^

      • This reply was modified 9 years, 9 months ago by Devoidbrah.
      • This reply was modified 9 years, 9 months ago by Devoidbrah.
    • #295
      modernknight1
      Keymaster

      test post

    • #296
      Devoidbrah
      Participant

      ok since everything works now, heres the update:
      marchant lugger and ketch of the english, caused a ctd after the transition when you finished boarding the ship and after allocating whether to sink it or take it, no matter what option you choose, it will ctd.
      The only option i found that worked was to not board these ships and just destroy em. Im in year 1667 now and boardings are as rare as someone coming to you to ask you for help when youre a shark reputation XD

      But somehow this makes the money income pretty stagnant so you really dont end up with trillions of coins.
      On other terms, the treasure rewards are way over the top, if you ask me. You will literally spent hours dragging the loot from the cave to the ship, my ship is full of gold and silver and all that stuff. But if you take the gold you trade at the trader and the gold you trade on the streets, it really isnt realistic, and the prices should be lowered, since one just has to run one treasure hunt now and he can feed his man o war for a year and a half. Or am I missing something?

      Also i saw now an increase in ctds lately, I dunno whats the reason for it but Im starting to get corrupt saves and ctds when saving, ctds when switching from sea to mapview (though this only happened 2 times overall), but its more of a feeling that ctds are increasing, in the beginning its almost ctd free in comparison.

      • This reply was modified 9 years, 9 months ago by Devoidbrah.
    • #298
      Devoidbrah
      Participant

      Sadly i dont have the save anymore, darn me for overwriting them all the time. But the next time it happens i gonna upload it to you, and test it myself the 10x times you wanted, instead of just 5 times 😉

    • #299
      modernknight1
      Keymaster

      OK a couple more questions….I have played this version to level34 year1667 with no problems like you describe. The fact that you can board and kill the captain tells me this is something other than the character index problem I thought.

      – So what character are you?
      – What nation are you?
      – What ship are you using?
      – What nationality are these ships that are producing the CTD?
      – Have you run the debugger and can you get me an error log file to look at?
      – Are any of your ships dismasted?
      – How many ships do you have in your current fleet/squadron?

      I have one thing I want you to try the next time this happens. DO NOT EXCHANGE ANY CARGO with the captured ship and see if it still CTDs. If it doesn’t then I know what the problem is.

      The virtual function call is an old problem and usually associated with a violation of boundaries like the ships weight increase from looted cargo causing it to sit too low…even under the water which will cause CTD – or a mast missing causing a loopback that confuses the game.

      I have received the criticism on treasures already. I need to tweak the probability factors to make them more rare. However I have so many new things that I want everyone to see them so I don’t want them so rare that you never find them either.

      ERAs is still a work in progress. Keep sending me the input DT its very valuable to me. Also data received. Thanks very much. You’re awesome!

      MK

      • This reply was modified 9 years, 9 months ago by modernknight1.
    • #301
      Devoidbrah
      Participant

      Its still the same character as above, and he uses the same ship.
      Now i think im lvl 25 or so, I bought my character a clean slate and switched from the english to the dutch, and started working for the governor general.

      I will most likely to have to switch to a stronger ship, but then the upkeep cost will be so high that i need first to aquire huge sums of money first and foremost. my frigate already feed each month for 50k and i tried it with a crew of 700 men and had to pay 100k, maybe i find a good speedy ship in the next lvls, but i doubt it will reach the speed my dutch frigate has atm, which is 20 max speed.

    • #521
      Kuroi
      Participant

      I got my first crash after quite a few hours of gameplay. Someone in the tavern in Willemstad told me about the “Jesus Maria” hauling Mahogany from Willemstad to Port Marigot.
      It’s one spanish merchant and the game crashes every time I’m trying to attack it (tried it 6 times). It doesn’t crash when I’m attacking another fleet in the area, I have realistic encounters enabled and my fleet consists of 4 ships.

      • #522
        modernknight1
        Keymaster

        Welcome to the Reef Kuroi!

        I am sorry about the crash. However from my perspective I am so glad you are telling me about it – ELATED actually. What you’re telling me is really important. For sometime I have been trying to isolate a crash that happens on treasure quests with Spanish convoys when you take a treasure quest mission to attack the convoys.

        I first assumed it was a specific ships causing the crash. So I carefully tested every ship looked at where its names might be corrupted throughout the code. Then I turned to the NPCs aboard. I have always assumed the problem was in the character index and naming as I changed this drastically from vanilla and without documenting everything as I went.

        I thought it was with the officers because I made so many changes. However, what you are telling me is that it is a merchant ship you’re going after so there would be no Spanish military officers aboard. This is logical to me because I thought I finally had the Spanish officers correct so that you should be able to encounter and board the Spanish minor-quest ships. SO I need to rename the Spanish civilian NPCs back to vanilla values and this crash problem is solved.

        It should have been right in front of me all along. I was looking in the wrong place. I have been trying to fix this problem for months. I don’t know why I didn’t think of it being the civilian NPCs. Thats the solution! THANK YOU.

        I will be producing the new patch very soon, because with this information I will finally be able to fix this problem. THANKS!!!

        Oh one other thing I need to ask. You didn’t actually ever see the ship right? Its when you tried to go from strategic world-view to sail mode that the crash occurs during the loading screen – right?

        MK

        • This reply was modified 9 years, 8 months ago by modernknight1.
        • #524
          Kuroi
          Participant

          Yes the crash occured during the loading screen.I’m glad my information helped you fixing the only real problem I experienced in this mod so far. Keep up the good work!

    • #548
      sgmret
      Participant

      MK, I’m having the same kind of problem as Kuroi. My crashes happen when I come off the strategic map during named-pirate ship-battle quests. Have used two different characters, Phips and England, and the same problem happens. Quests with shore-battles work fine. I’m using latest download. When I was using the older version I didn’t have this problem.

      • #549
        modernknight1
        Keymaster

        Thanks very much for the report SGMRET. Welcome!

        OK, the fact that it was not happening in the older download is helpful in isolation – and actually partially makes sense. There are two identical utils files that are used in different places. One was updated and one was not.

        I do have one other question though.

        Does it happen all the time with all nations on these type of missions – OR only against Spanish?

        I fixed the Spanish officers and am updating the Spanish civilians. I did rename the English civilians as well so am taking them back to their vanilla naming convention too.

        If any of the quests were against French or Dutch and having the same issue, then I am going to have to expand my search to kill the bug. I think I may issue a separate bug fix just for this one bug rather than wait to put it in the patch because I want folks to test it.

        Is this the only problem you’ve been having. Have you had any boarding issues?

        MK

    • #551
      sgmret
      Participant

      The crashes happened with England against the French at Cayman and with
      Phips against the Spanish at Fort de France and Charlestown.

      Those are the only ones I’ve tried since I downloaded the new version.
      Getting Pirate England to a point where I could get these quests took me
      about 7 hours. I will blow his quest and see if any others pop up.

      I am a real fan of COAS and the work you guys have done with GoF and Era’s.

      Thanks for the quick response.

      • #552
        modernknight1
        Keymaster

        Thanks for the compliments. Always great to have fans here. Of course I am completely devoted to this game and obsessed with taking it to the next level where we will far surpass the Build mods. I think we already have in most ways. Once the new locations and quests are in we will outshine them in every way.

        OK so the French ay???? Well that narrows it down to one file. I know what’s wrong because if its the French its ALL civilians in the treasure quests. Anyway that’s great because I know what I have to do.

        A simple underscore symbol “_” is causing all our problems here. I need to change Citizen_01 etc to just Citezen01 and rename the models without underscores and all will be fixed.

        Thanks for the additional input. It really helps.

        MK

    • #553
      Devoidbrah
      Participant

      Ok since Im kinda addicted to the game nonetheless, I took one of the stock dutch characters and started a shipless playthrough. My aim is to only start using a ship once my personal skillz are pretty good. So basicly i gonna fight in the 3 months in tavern kill, amass as much gold as possible and get rich without sailing for some time. 😉

    • #556
      sgmret
      Participant

      Sounds like a pretty simple fix. Glad I could help.

      What’s the file name? Can I do this myself? I did follow the instructions to recode the Dutch National Quest. Remember the problem with the different kinds of Battleships?

    • #575
      modernknight1
      Keymaster

      Its not just in one file but several. Also I have to rename a bunch of models to get it to work right as well.

      On the Battleships I suppose we could do that here if everyone agrees. Make any 1st rate the equivalent of the Manowars you need to complete quest requirements.

      I will put it on the “To DO” list. Its down a little ways though….

      MK

    • #576
      modernknight1
      Keymaster

      double post.

      Still figuring out all the web master tools….

      • This reply was modified 9 years, 8 months ago by modernknight1.
    • #583
      sgmret
      Participant

      Sorry, you made it sound simple enough that any dummy (me) could do it if pointed in the right direction.
      As far as the Battleship/Manowar quest goes, I was talking about a problem that existed in GoF 1. As far as I know the Dutch Quest line works fine in ERAS.

    • #584
      Kuroi
      Participant

      http://i.want.tf/to/that/OtAxiG7.jpg I got this message a view times in seabattles. I’m not sure what it means and if it’s important in any way since I didn’t notice any other problems so I’ll just post it here.

    • #586
      modernknight1
      Keymaster

      Sorry folks if I made the character index problem seem like something easy to fix.

      It has been an ongoing headache that I almost have done. Your clues and input have helped me very much.

      Kuroi that error message is another manifestation of the character index problem. Once I have the pirates, officers and citizens renamed to a consistent standard in all the right files, you will never see that message again.

      My goal is to have this bug squashed when I post the first patch of the new version in the next month or so.

      Thanks for the great input! I love you guys.

      MK

    • #590
      belzeburg
      Participant

      I have played this mod before. And it`s much better, but still get fail in the logbook about sinking Bluebird. Even if I sunk it. Really want to play Eras

      Belzeburg
      Don`t want to post dobbel, but not sure if I wrote on the right Place the first time

    • #591
      Craig Brown
      Participant

      OK, so maybe I’m an idiot but for some reason the game wont run. I was playing GOF 1.2 so I cut all the files and pasted them to a temp folder then unzipped the Eras mod and put them in my AOP 2 folder and then ran the configuration program to my desired settings and then ran the start program. I get a runtime error??? Please help

      • #609
        modernknight1
        Keymaster

        Hi Craig,

        Did you get my e-mail? Did you try what I suggested?

        MK

        • #612
          Craig Brown
          Participant

          I’m trying to re-download it but it is going really slow.

        • #614
          Craig Brown
          Participant

          You where right…It worked. Thank you so much!

          • #615
            modernknight1
            Keymaster

            AWESOME! Enjoy my friend. I really want to hear your opinion! I need your help on a project I’m working on. Also we can talk more – but I would like you to lead up the effort on MOD3 when I have it ready. I have not reskinned a lot of the later Era ships and they could use the famous Craigo touch.

            Aaron

    • #620
      Craig Brown
      Participant

      The English 96 gun first rater has men climbing up in thin air instead of on the shrouds. Looks like the walk file is messed up, I could fix that if you want?

    • #622
      Blas de Lezo
      Participant

      I dont know if i post this in right place.

      -When I leave the colony Le francoise with a squadron with 5 or more ships(when I arrived no problem) the ship listed 5(i suppose 6,7,8 in squadron will have the same problem) automatically appers in the other side of island,in middle of martinique french fort.
      I know this because when i tried to leave to the worldmap a message appears about that ship is fighting and if you leave the ship left your squadron.
      I dont see where is the ship but I know the ship appears near the fort french because the ship is quickly sink.So cant enter in Le francois with 5 ships or more because they’ll never leave the colony.
      -English 64 gunner has ilimited cannons,every time i click “remove all or fix all” give me thousands of cannons.

      Minor bugs and fixes.
      -Please replace “annoying drum sound” in worldmap encounters if you want,i think the drum sounds too loud and disturbing, broke the game atmosfera.
      -Mostly Spanish captains have “fake and irreal” names.The hero Blas De Lezo is wrong,you put “BlaZ”

      Thanks for your work.

    • #626
      Craig Brown
      Participant

      Has anyone else had problems with sound going away in first person sailing mode when you cannon sight is not on screen?

    • #637
      modernknight1
      Keymaster

      @Craiggo: The fmodex sound file that I ended up using is not even from an Akella game. I ripped it open and added to it. It works better than any other fmodex file I have tried. Is this with the no hud mod that its doing this? Usually I only lose sound for a few seconds with the new file.


      @nnika
      (Blas de Lezo) WELCOME to the Reef! Love the name. Did you see he’s a character in the game? Some would say he’s the Spanish Nelson, but I prefer to say that Nelson was the English Blaz de Lezo.

      Yes I know about that problem and there is not much you can do about it. I will tell you that one thing that works well for me going in and out of here is to make all my ships furl sails except my own – before I enter the port. When I go to sail mode, I will do the same. Also if you immediately go to world view as soon as you get to sea from the dock that can keep your ships from being damaged when this happens.

      Glad you like the mod and thanks for all the great compliments. It makes doing this worthwhile!

      I will answer more questions but I need sleep now….

      MK

    • #650
      modernknight1
      Keymaster

      @nnika (Blas de Lezo)

      I read the post again. Thanks for the correction from Blaz to Blas. Some English sources have it spelled with the “Z” and that’s why I made the mistake. I will have that fixed for the patch. Still I think I have a good variety of Spaniard NPCs in the mod.

      That cannon bug is easy to fix. I got most of the ships with the problem but there are still a few out there. Thanks I will fix that one.

      There are several ports that are not good when you have a large number of ships. One thing that will sometimes work for me also…..

      If I stop all my ships at La Francois, and then cheat by transferring myself to the ship under attack at the same time relieving the ship of heavy cargo transferred the the ship I am on and giving the embattled ship as many men and wood/sail as I can, I can sometimes save her by getting her out of danger myself. It often depends on the wind at the time. I don’t know what I can do about this problem. Its obviously a spawning issue and La Francois and French fort on Martinique are not that far apart. I will put it on the list in case there is something we can do about spawn locators in the future.

      Thanks again for the input.

      MK

      • This reply was modified 9 years, 8 months ago by modernknight1.
    • #653
      sgmret
      Participant

      MK, I’m not sure that Le Francois problem is fixable. I’ve had that happen as far back as the original COAS. It also happens at Havana and Puerto Principie and it’s occurred sometimes at Capster or Bat Beaches.

      • #657
        modernknight1
        Keymaster

        @sgmret

        I think you’re right. If I could find the program file that governs ship spawning and give it some additional instructions with locator and distance parameters, it might be possible to fix this. However as things stand, I have no idea where that might be in the executables OR source code files.

        I would like to fix it though. I will often avoid those areas if I have more than five ships in my squadron. The only way I will go in with eight ships is if I am allied or at least at peace with the local towns where my ships will be scattered to before I go into world sail mode.

        MK

    • #661
      Devoidbrah
      Participant

      Hooraa!!!
      I started a game with one of COAS stock characters (The dutch guy in blue and red)
      I am lvl 20 almost, no boarding problems to be had, everything working as it should, Im totally puzzled why the boarding didnt work in my 2 previous playthroughs….

    • #828
      Streifer
      Participant

      hello, im having some visual bug when i use a the king’s man o war, at times a big flash of white light from the top of the sail then at times white water lines when my ship moves, i remember this bug back in vanilla also. but i havent played this game for so long i dont remember if there was a fix for it i tried googling it but i cant find any answer

    • #829
      modernknight1
      Keymaster

      Thanks Streifer,

      I will have a look and let you know what I find out.

      MK

    • #831
      Tartiflette
      Participant

      Hello 🙂

      First, i want t osay this mod is wonderful, everything i wanted in this game. Really good job

      I only have two problems,

      First one: i got sound bug when i’m on first person on ships. Ships sound effect (canon, sails, woods, etc..) dont work in first person mode except when i use scope, or when crosshair is visible. When crosshair disapear ships sound related disapear, only sea sounds play. Same with scope. Any idea on how to fix that ? its only do this with the mod.

      Second one: I play with John Strong, im at Port Royal and want to go to “fort de france” with smuggler travel as i sold my ship. Everything work fine, except when im entering to the shore where i must take the boat (after payment) the game crash.

      Thanks for your answer 🙂

      • This reply was modified 9 years, 7 months ago by Tartiflette.
      • #836
        modernknight1
        Keymaster

        Welcome Tartiflette and thank you for the compliments.

        On the first question read this post: https://buccaneersreef.com/forums/topic/what-i-am-currently-working-on/#post-732

        On the second question. That’s an old bug no one has been able to figure out. It also happens sometimes when you’ve taken a mission to act with another pirate to take treasure from a wrecked convoy.

        There is a workaround that usually works 99 percent of the time.

        Go back to the save where you are smuggling. Instead of going to the boat and back to your ship when you are done swapping goods, go into the jungle. Then turn around and from the jungle go back to that beach and board your boat. It should not crash now.

        MK

    • #838
      Tartiflette
      Participant

      Thanks, hope you will cant get something on the sound bug!

      About my second problem, i mispelled, i didnt talk about smuggling goods but the option to sails with smuggler , go to another island with them, its that who crash my game while loading to the shore for take the smuggler boat.

      • #842
        modernknight1
        Keymaster

        OK let me make certain that I understand you….

        Do you mean when you ask the smuggler to take you somewhere because you don’t have a ship yourself anymore?

        If that is the case I did not realize there was a bug. I will look into it. Its on my list to try. Been a long time since I’ve done that.

        Thanks for bringing it to my attention.

        MK

    • #863
      Tartiflette
      Participant

      Yes its that, my game crash when entering the shore with the smuggler’s ship. 🙂 i was in Port Royal and was going to “Fort de france” with them, then on “shore of portland” it crash.

    • #899
      Craig Brown
      Participant

      Did you get it sorted out?

      • #907
        modernknight1
        Keymaster

        Not yet. Just started a new game with all the latest patch content. I’m French. I’m going to do the smuggler thing shortly.

        MK

    • #1120
      sgmret
      Participant

      Hey MK, I don’t know if this qualifies as a bug, but some of my higher level NPC’s don’t use the best armor. For example: uses French Fencing Gloves vice Spanish Breastplate. Also sometimes don’t use the best pistol (uses single-shot instead of Brace of Pistols) when qualified with Cleaver Shot skill. Again don’t know if this is bug or something written into the code to give them more choices based on weight and accuracy. Still playing and loving it. sgmret

    • #1370
      LordOfWar
      Participant

      I think what I am experiencing is a bug. my ship can hold 379 crew member but when I board a ship and I am sure I don’t get any causalities I discover my crew has decreased to 233. my ship is (Marchand rapide), but this bug happens to most of the ship I used not sure it happens to all of them but I noticed that my crew are decreasing lately when I board a ship. sometimes when a ship surrenders and I board it my crew decrease. I made sure to check my crew number before and after boarding and checked if my crew died by musket volley or not.

    • #1385
      modernknight1
      Keymaster

      @SGMRET Glad you’re enjoying the mod. Yeah I know about that bug. I actually put something about it in the original read me file. I am still investigating this. I don’t know why it favors the lighter weight item like the fencing gloves. I think in the vanilla game the lighter it was the more protective as well. I need to rewrite some logic somewhere.

      @Waleed I am aware of this bug as well. I am looking into it. Thanks. I think I may know the solution.

      BTW there is a new patch I just posted so be sure to get it.

      MK

    • #1397
      0range
      Participant

      Hey, that is me again. I noticed that the logbook gives an error omitting the location’s destination in store merchant’s quests (Merchant winds I guess). I mean “asked to deliver to Port Orange in .”. And after the “in” it is empty.

      So it is essential to remember where to when you receive the merchant’s quest, if you are not familiar with the region map, as in my case. The Logbook won’t help you much since it gives name of the port, not the name of the island.

      MK, when you will be fixing that issue, I suggest you might please add the nation’s name of the port of the destination to the merchant’s speech when he gives the job, ex: “british Port Royal”? Please? Because it used to happen that I come to the destination port to deliver the goods and get killed by the ships in the bay because it happened to be a port of an enemy nation 😀

      • #3274
        Edward Teach
        Participant

        Having the same log book destination issue. I simply get “Deliver 100 pounds of silk from Port Royale in . to St. Martin in .” With periods replacing destination names. Pretty sure I have latest version as well.

    • #1597
      Samir
      Participant

      Hello, I’m not sure if I have encountered a bug, but I’m getting CDT’s when approaching an enemy ship. I’m playing as Edward Teach. The CDT is happening near Port-au-Prince, after I met a pirate in the tavern who proposed me to join forces. Then at his ship deck (I think his ship is called Letin), he told me about a shipwreck of a French treasure ship, and that we have 10 days to get there and collect the silver. Then I went to sea and I got a message that I was recognized by French ships. One of their ships was approaching me, so I went to meet him. He fires a few shots at me with front cannons, but after I come closer to him, a CDT occurs. It happens every time I load the save game and approach that ship. I tried it 6-7 times, every time the same… Any idea how to fix this, because I cannot sail to the opposite side, since there is French fort and 3-4 French ships. I can provide a save game if needed.

    • #1605
      modernknight1
      Keymaster

      @Orange, I am sorry I didn’t see your post about the log book issue. I will look into it. I know sometimes it doesn’t post everything. Between Jeffrey’s fixes and my own I am hoping that a whole lot of issues will be resolved with the release of the upcoming MEGA patch.

      @Samir, Yes could you send me your savegame? Also if you activate logging as I describe in the Patches thread that would be helpful too. There are a few ships left with some entry issues and just a few badly indexed characters still running around as well. I almost have all of these fixed but suspect that is what’s happening to you. To keep your game going you may have to run away and blow off this quest.

      MK

    • #1607
      truth serum
      Participant

      BUG Report Follows:

      1. Who: Captain Peter Jennings
      2. What: game crash during treasure quest against French convoy. My ship: English 38 gun 4th rater. Companion: Pierre le Picard in a Pequena Caravella. My level: 27. Enemy convoy ships: 2 barques, 1 petite barque, 1 pinaza, 1 20 gun Dutch fregatte, 1 French ordere seconde.
      3. Where: Turks
      4. When: 24 October 1667 2350 hrs
      5. Why: unknown

      Addl info: reloaded numerous times. Battle goes for about 5 minutes then crashes before I can board.

    • #1609
      modernknight1
      Keymaster

      Thanks for the SITREP (repleat with 5 “W’s”) John,

      No mistaking your background LOL!

      If you look carefully at the Patches thread I give instructions for how to enable loggers. It would be helpful to me if you would do that and reload and play again and then send me the files.

      I suspect that this is a character problem with a captain or lieutenant on one of the enemy ships OR its a time problem. I noticed that you said it was 2350 hours. Sometimes there is a glitch that happens at midnight during battles when the time changes to the next day that will crash the game. Haven’t been able to figure out why. Here’s my advice to see if this is the case. At 5 minutes before midnight, go below to your cabin. (don’t worry the battle will still be there when you go back out) Wait for the time to go to 0005 hours and then go back out on deck. This workaround has helped me many times in this situation. See if it works for you.

      MK

    • #1610
      truth serum
      Participant

      MK, Your recommendation worked. Went into the cabin as you suggested and waited till 0005hrs and returned to the fight. No crash. You obviously know this game well. Who woulda thunk that was the issue?
      Thank you Sir.

    • #1619
      Samir
      Participant

      Is this a repeating bug from the old GoF? Cause I just got a CDT after this man spoke to me… I had same issue with GoF 2.1.4…

      • This reply was modified 8 years, 9 months ago by Samir.
    • #1621
      modernknight1
      Keymaster

      That has never been a bug so I don’t think so. Can you send an error log? There was only one character import I ever had that problem with and he crashed the game talking to anyone. I couldn’t modify his animation to work correctly and that was the issue. Obviously I didn’t use him in the game.

      You are playing as Edward England and I played an entire game as England a short time ago and had no issues. I just started a game as England on Pirate colony and went to talk to Atila and had no issues.

      The only reasons I could think of that could be causing this is if you have other quests that are not yet resolved. Have you started/or are you in the middle of any other quests involving characters on Pirate Colony? OR you have been tinkering and implemented some of the edits from the patch page that aren’t yet complete in a comprehensive patch yet.

      MK

    • #1645
      Samir
      Participant

      It’s ok now. Happened only once. I don’t know where is the error log located in the game directory.

    • #1647
      Samir
      Participant

      Not sure if this is a bug. It came up when the battle started. I didn’t notice any problems in gameplay though, there was just this text up.

    • #1657
      modernknight1
      Keymaster

      Samir,

      Yes that is a bug. The highest priority bug on my list. It has to do with the Character index and faces. I have been working on it for months. It has got better and better. It used to be that it would come down in an entire string. Now usually you only see a few entries or only one. The game doesn’t like the enemy captain you are going against from the index and/or his face doesn’t match the character or doesn’t exist yet.

      MK

    • #1677
      truth serum
      Participant

      BUG Report Follows:

      1. Who: Captain Peter Jennings (Pirate nation)
      2. What: game crash during boarding of English Second Rater. My ship: English 58 gun 3rd rater. Fleet: 3 additional 58 gun 3rd raters and 1 38 gun Fourth rater. My level: 29. Enemy squadron ships: 2 96 gun 1st raters, 1 second rater and 1 6th rater.
      3. Where: South of Bridgetown.
      4. When: 16 April 1668 1920 hrs
      5. Why: unknown

      Addl info: reloaded numerous times. Every time I try to board the 2nd rater the game crashes during the transition screen.

    • #1684
      modernknight1
      Keymaster

      John, Thanks for the report.

      I PM’d you about exactly what to do to get the error loggers on. Please send me the files I asked for. Sometimes with enough reloads it will eventually work if it is a character problem because sometimes it will change out the bad character I think??? This game sometimes requires some patience. This is one reason I always save a lot and especially before battles so that a different group of ships/characters is generated.

      MK

    • #1689
      Jeffrey
      Keymaster

      I will reiterate about enabling logging and sending system.log, compile.log, error.log files upon crashes, as it is very difficult to figure the problems without them because it might be a case we can’t replicate all the variables ourselves.

      I would also be willing to review any error files and perhaps even try running from a boarding save file if I can get them.

      I will say that it’s been quite a long time I’ve been comfortable playing COAS of any style without a crash. As it stands, in my particular version of ERAS, with my employed alterations, I play with abandon now and can only recall one crash I couldn’t figure out within the last couple weeks, and none for the recent many hours I’ve spent. I attack, fight, board many ships and pretty much cause as much mayhem as possible and I’ve been very stable, so it’s quite possible I’ve already employed some changes that already resolve truth serum’s issue if I can get a peek at it.

    • #1691
      modernknight1
      Keymaster

      Jeffrey,

      Thanks!

      I haven’t yet uploaded the sourcecode. Gonna try tonight. I got really sick the last couple days and have mostly been in bed sleeping. Would you mind if I gave you higher site status – moderator or keymaster? I would love for you to get all of the error reports I have been getting and would like to share them with you easier. I really don’t have the time to look through them while I am trying to get all of these improvements and your fixes put together into one package for everyone.

      MK

      • #1692
        Jeffrey
        Keymaster

        Sure, I don’t mind…well, as long as it carries no further responsibility on my part to vanquish spammers or keep law-and-order…I’m lazy by nature (my running joke as I’m usually banging code, both work and ‘fun’, to all hours of the night) 😉

        But I figure it might be more efficient if you focus on the planned improvements and I can certainly review what I can about reported errors. Undoubtedly many might be due to issues I’ve already discovered, such as those pesky divide-by-zero moments.

    • #1694
      modernknight1
      Keymaster

      Great! No other responsibilities required. I take care of the spammers. There are a lot of them too. I have had a lot of outsiders want me to open up the site to adds as well but I really wanted to stay away from that. I don’t feel it would attract more people and would probably annoy some that are here already.

      That’s awesome that your game is so stable. It will be so nice to have everyone on the same page. I believe that word of mouth alone will get out there about this once the new patch is out more people will come. Even with my absence sick in bed the last day the site has had some really high traffic days. We had over 260 viewers yesterday and we are at 274 today and the day is not yet over.

      I am not a coder by trade. I was always management or senior management regardless of my credentials. I knew enough to know what I was looking at when people wanted me to come look over their shoulder and explain what I wanted done. Plus most of my knowledge was in old FORTRAN. I am a dinosaur. I am pretty good with XML still. I will reiterate that it is so awesome to have you here!

      MK

    • #1737
      Jeffrey
      Keymaster

      There is a camera location problem on Le Vaisseau Amiral du Roi. I believe this was a similar issue in the GOF SoleyRu, that was corrected by changing the model camera locator; I seem to recall downloading corrected files for that similar issue that fixed that particular ship.

      The Aftermath

      Not entirely relevant, but heck, let’s go storytime 🙂

      I was sailing the seas, minding my own business, when a 2-ship Dutch patrol gets pesky. Fine, let’s do this…

      Another Day, Another Boarding

      Another Day, Another Boarding Party

      Their partner takes flight…good luck outrunning the Dog of War

      The Prey

      After eventually dispatching that ship, go back to sea, merely trying to mind my own business, when I get accosted by a 4-ship French patrol. Take a look, and holy smokes! But, in a lapse of good judgment and arrogance, “What the heck, let’s do this.”

      Tragic lunacy.

      Because what I was dealing with, though I knew better and should have just fled, was Le Vaisseau du Roi 1st rater, Almirante Galeon 2nd rater and two French Capitol Warships 3rd raters…with my Corvette Dog of War, Brig Queen, French Cinquente Tireur, VOC Escort Frigate.

      For pirating, I must say I like those VOC Escorts. They have good speed, nice holds, decent crew complement, and good armament, yet remain class 5, so I can usually take a couple into enemy ports with my stealth rating. Though they have no bow chasers, I usually do the chasing and simply swap cargo to them, or have them board ships in the midst of battles. I used to have two of them in my squadron, but unfortunately, that Cinquente tried to board one of my companion ships, lost, and of course my companion opted for the higher rated ship and took command. Sigh. Makes going to enemy port a little rougher with the additional 4th rater and we’ve had a few fort scrapes because of this.

      Don’t mess with my companions. The first perks I give them are God of Death, Musket Volley, Quick Reloading and Foresight; they also all have Grappling bonus items, giving 90-100 grappling scores. We pepper with cannon fire from distance, as it closes, switch to chains, then when the enemy ships are near, I switch everyone to grapes and toggle Foresight on, while they go to town. By the time the ships draw near, I command them to board when it’s a lower or equal rating, the opponents are quickly dispatched and sunk…except in those cases like the Cinquente, where the enemy foolishly try to board and now I wind up with a nice ship, but unwanted nonetheless, LOL.

      Anyway, employed those tactics as these ships were NOT going to be sunk quickly for sure, even with bombs…though we did employ them at first this time. We got rid of the Almirante, but not before my VOC was sunk. I thankfully was fairly near this, so picked up my companion captain in the lifeboat…phew, back on board! I’m dealing with my own mayhem, lost about half my workable cannons on the Dog of War, rapidly circling and firing grapes everywhere.

      I think Corvette is the wrong term…that thing is really a Porsche. It is so fast, I usually circle a ship at either the bow/stern in the same direction the enemy is trying to turn broadside on me. Using the wind direction as my guide, I can usually stay perpendicular to them for half a dozen grape shots with my broadsides before their broadside finally reaches me for one shot; I board them right before they do so 🙂 But in this case, the ships carry too large a crew, and they were all over the place, so no boarding just yet.

      So, in the thick of it…bad news. My Cinquente is gone. Frickin’ French Warship boarded the already decimated crew from when the Almirante tried to grapple and lost. But even worse, if I’m to get my companion back, I have to head over there and it’s upwind, and the 1st rater and 2 remaining Warships are pummeling me…Brig Queen is nearly decimated and I instruct to flee. F**** it…let’s go get her…we’ll pick up Morgan in the lifeboat and see if we make it out alive. I make a beeline, straight at the Warship that sunk Morgan’s ship, because they are still situated right where the lifeboat sits. I’m getting broadsided repeatedly by the Vaisseau and a Warship, the other off in the distance, chasing Queen I think.

      I reach Morgan, she steps on board and I just keep going…right to board the Warship as I’ve got no chance unless I fight this thing out hand-to-hand. We on the Dog of War are severely outnumbered, but we’ve got the skills! My crew are Seadogs, I perk my fighters with everything I find, they get the bonuses, best weapons, armor, and yeah, it’s a cheat, but I always go for the Tenochtitlan ‘pistol’ and carry that baby. Also, in cases like these, where the enemy vastly outnumbers, the Berserk perk! I get my bearings and run toward the biggest horde of enemy I see, while running, just getting close, I’ve already got the <Enter> key displaying my icons, hovering over Berserk. Run up, click <Enter> to fire up Berserk and <Shift> attack. Sweeping blade that hits everyone near…3 fall immediately :). Step back and boom, boom, boom, boom…4 shots from my ‘pistol’, two more drop and I quickly lunge/pierce the remaining two where they stand, then just start hacking at anyone else.

      We win, all my fighters intact, but quite a large hit to my crew. Hilariously, after my skimpy crew slaughtered the Warship’s, the captain just cowered and surrendered upon my cabin entry. Wuss! LOL I swap ships, I need the larger quantity guns because almost none are working on the Dog. They are slow to reload, but the hull of this ship is in very good shape, so I can take some hits from the Vaisseau. I tell the Dog, in which I left only a handful to operate, to get the heck out of here! Head toward the 1st rater and fire grapes when finally ready. I only get about one more swipe at them, but I have noticed a markedly increase in the amount of time it takes for them to fire, so I’m guessing over the course of this, our grape attacks have put a sizable dent in their crew…I’m about to find out.

      We board.

      Frickin’ mayhem. I’ve already lost crew, and so have they, but this ship carries over 1,000. Same tactics as before, and when all is said and done, my fighters remain standing and 10 of my crew. I transfer command of the 1st rater and continue on with my crew of 10 on the Warship to pursue our last nemesis, the other Warship. This one has now given up chase of the Queen, which is now out of battle range and has turned toward me. I fires at me a couple times, but I’ve gone on the suicide mission of ‘one more time!’ I keep heading toward them, fire once with grapes and know that reload is going to be impossible by the time this ship reaches us. No matter. The other Warship quickly asks to pay in lieu of further attack. I can see why, when such a meager force has taken your entire force down, LOL. But, since I was already sweating this out, I quickly agree. But you know, casually, “Sure, why not?” 😉

      Phew.

      That first photo of the camera problem shows the aftermath. Yikes. Lost all my lovely Seadog crew. I still have my entire set of officers; was able to pick up my two when we lost our VOC and Cinquente. Now we have a French Warship and Le Vaiseau du Roi…what the heck am I gonna do with those?! They’re not exactly low-profile, LOL

    • #1741
      modernknight1
      Keymaster

      Jeffrey,

      Wow, Just Wow!!!

      I love stories like that! This is one of the reasons I love this game so much. I am going to leave your narrative here, but I am also going to cut and paste it into the “How is your game going” topic. I have meant to write over there myself but have been so busy and so ill.

      I have never played with the Vasseau Amiral du Roi myself so I didn’t know it had that bug. Is it everywhere on the ship, or just in certain parts? I was not aware of the fix for the Soleyru either but I have never played with that ship as well. What is the fix? I’d like it in here as part of the patch.

      I am a purist on the historical authenticity front but have been criticized for not doing more with the ships speeds and turning rates and as a result our game is too “ARCADEY”. I agree but there is also fun factor to consider and as realistic and authentic as this game is, when you get special ships they should have very SPECIAL attributes so the fact that she moves like a “PORSCHE” to me is just part of the fun. At least its not like other games where everything in the game moves like that.

      Speaking of that I saw a conversation over at PA (sorry for mentioning it in advance) where some guy says that some edits you gave him regarding turning slower, cause everything to turn into luggers. I was like WTF! I am wondering if he didn’t start a new game with the edits. Also, if he got the right answer somewhere else why isn’t he sharing it with everyone else there?

      I know I’ve said I don’t like folks posting over there, but will someone please ask that knucklehead why he won’t post the correct solution for everyone if he is going to mention it. That really bothers me. Obviously I CAN’T post over there or ask.

      Really enjoyed the narrative Jeffrey!

      EDIT: I also enjoy the VOC Escort Frigatte as well for the same reasons. There is a reason why I added some very capable class 5 ships to the mix. My thoughts were that a lot of these mass produced ships would be easy to handle by more inexperienced captains. I think they bring a lot of game play balance.

      MK

      • This reply was modified 8 years, 9 months ago by modernknight1.
      • #1745
        Jeffrey
        Keymaster

        Heh, just noticed that post you mentioned. I know why…or can at least surmise, that he caused a syntax error in the function, so it’s a run-time fail and all generated ships are now a default because it can’t execute the proper property settings for other ship types.

        I posted a reply.

      • #1747
        Jeffrey
        Keymaster

        In the 3rd person, the camera is super high up, and you can’t see anything near you, or the hull of your ship. The Soleil in GOF suffered similarly and people complained about it. The model files were changed for that ship, with different masts or camera locators…or something as I’m not versed on that sort of thing. Most links are dead, but I still have it in my FireFox download history and it keeps the link I got it from (thanks, Firefox 🙂 )

        I got that ship’s fix here: http://www.mediafire.com/download/n2xswazcejh35de/SoleilRoyal1.7z

        Don’t ask me how I found that, because today’s googling didn’t help me at all…maybe my google kung fu was better those months ago and I’m weak now? LOL

        It’s different, but not knowing the specifics of these things, maybe with the proper software tools to open/view, it will become evident what they did to perhaps change Le Vaisseau? I don’t know.

      • #1750
        Jeffrey
        Keymaster

        “There is a reason why I added some very capable class 5 ships to the mix. My thoughts were that a lot of these mass produced ships would be easy to handle by more inexperienced captains. I think they bring a lot of game play balance.”

        When I first captured a VOC Escort, I saw the crew capability, hold, hull numbers, cannons and 5th rate and thought, “What the?” But that’s as far as I took it…jumped on it. Perfect for my endeavors! Who am I to question such good fortune?! 🙂 I love them for now…not as much as I do that Dog of War, but it’s a bit small for hold and being class 3 is a bit burdensome for porting, but that’s a tough one to put away; that thing is special for sure. Too bad that Mechanic couldn’t make me two 😉

      • #1777
        Jeffrey
        Keymaster

        I had to do it…and it was both a fault of mine and what I suspected.

        The .35 for the 35% the PA! member was looking for indeed caused a run-time error. This was probably also why I was having trouble with those GUN_ constants I was using that forced me to muck with the order of the calc in order to circumvent the errors I got using those; the number has to be preceded by a zero: 0.35

        I posted my finding.

    • #1746
      modernknight1
      Keymaster

      Thanks Jeffrey!

      MK

    • #1757
      Jeffrey
      Keymaster

      Bear with me…I’m gonna whine some.

      I am so tired of whatever means this game uses to parse/compile the C code. It constantly complains about missing ) parentheses. There are other quirks that aggravate. But I know what I’m doing when it comes to coding, I know when the syntax and () match. Yet, perfectly good code ‘breaks’ inside this game. Ugh! For example, I get error.log files for this.

      This broke:
      nMin = GUN_MIN_WT * stf(refItm.dmg_min);

      Yet, this is fine:
      nMin = stf(refItm.dmg_min) * GUN_MIN_WT;

      WTF?

      These broke due to bad parens:
      bGunCheck = (n < 2) || bShootistCheck || bClever;
      bShootistCheck = (n < 4) && bShootist;
      bCirassCheck = (refItm.id == “cirass6”) || (refItm.id == “cirass12”) || (refItm.id == “cirass13”);

      Tell me those parentheses don’t ‘match’ as the error log told me.

      Yet take them out, and it’s fine:

      bGunCheck = n < 2 || bShootistCheck || bClever;
      bShootistCheck = n < 4 && bShootist;
      bCirassCheck = refItm.id == “cirass6” || refItm.id == “cirass12” || refItm.id == “cirass13”;

      Sure, in these cases the logic works the same, but I like adding them for clarity of ‘what goes together’, which is a good thing to do in code.

      I had a formula that absolutely required a parenthetical group to calc correctly, but I couldn’t do it…no way to get around it with one simple line, which was all that normally would suffice.

      Instead, after much launch, run, error, quit, review error, rework calc by ‘guessing’ what the parser doesn’t like, repeat over and over through trial/error, I finally arrive at a version that doesn’t error, yet SHOULD have worked all along. Tedious, time-consuming and frustrating. So now, my simple, one-line formula requires several variables and chopped into multiple lines to remove all parenthesis and weird complaints about the ‘order’ of where a constant had to go…before/after some arbitrary who-knows-what like in the case of that GUN_MIN_WT. So I end up with 3 extra vars and this:

      curGunValue = sti(refItm.chargeQ) * GUN_SPEED_BASE / sti(refItm.chargespeed);
      curGunValue = curGunValue * sti(refItm.accuracy) / 100.0;
      nMin = stf(refItm.dmg_min) * GUN_MIN_WT;
      nMax = stf(refItm.dmg_max) * GUN_MAX_WT;
      nTemp = nMax – nMin;
      nTemp = nTemp / 2;
      nTemp = nMin + nTemp;
      curGunValue = curGunValue * nTemp;

      I should have been able to do this without the nMin, nMax and nTemp at all, but it wouldn’t let me…presumably because it doesn’t like parens in some spots and the aforementioned weirdness of having certain ‘stuff’ after the preprocessor constants GUN_MIN_WT and GUN_MAX_WT.

      Yet, sometimes, it has no problem at all with parentheses, as I’ve seen plenty of code that contains a parenthetical group that don’t cause problem. What gives?

    • #1771
      modernknight1
      Keymaster

      Whining is perfectly OK concerning the STORM engine Jeffrey. I have heard a LOT of really capable people bash the crap out of it in the past. The one guy we were hoping would help port POTC over to COAS/GOF over at PA! gave up on it after a few months for very similar reasons to what you are complaining about. As a mid level coder flunky who learned from awesome guys that worked for me and would take the time out to show me stuff, I have given up on things I was trying to do many times. Often I would simply blame it on myself, but I think sometimes it was the engine at fault and I don’t have the skills you do to come up with alternative ways of doing things. More often than not I would copy phrases and statements from other games that I thought might work. This is why you will sometimes find garbage code laying around. However, sometimes it worked!

      So looking at what you are doing…..Are you trying to modify the super fast machine gun fire problem that we have with small size guns? It would be awesome if you could fix that. People have been complaining about that forever. What I have come to realize (because I could never fire them that fast as a beginning RPC) is that mainly when that occurs the enemy captain is a much higher level and has good cannon skills. So I started looking at ways I could limit enemy NPC captain gunnery skills. Never had any luck with that.

      MK

    • #1772
      Jeffrey
      Keymaster

      What you see is the decision value for each considered pistol we were talking about.

      I could certainly poke around and look for cannon fire stuff. See what I think about it.

    • #1773
      Jeffrey
      Keymaster

      LOL, but I will say, yesterday I was ready to wring necks. I literally had to relaunch 20 times only to receive log errors, to eventually creatively rework and wind up with 8 new lines of code and 3 new variables to get something workable, that should have only taken one line and one variable, but just couldn’t because spurious reasons given about syntax that any other C compiler finds acceptable.

      So far, most of what I’ve done in this game has involved one or two simple line changes, so no big problem with it. I can imagine that writing something more involved, from scratch could potentially be a nightmare. You could put all this code into something like Eclipse, then make a simple do-nothing stub for those external functions like GetAttributeN, that are not defined in this code, but needed for reference within Eclipse for compiling. Write something up, syntactically perfect according to Eclipse syntax checker, port the files in the game directory and have the actual game blow up at you about all the problems, that really should not be. That’s harsh because everything else would tell you that your C syntax is perfect.

      I only find ways around it by experimentation and crossed fingers…I never say die and never relinquish 🙂

    • #1774
      modernknight1
      Keymaster

      OK duhh… I just glanced at it a little better now and saw the “shootist” bits in there. I initially just saw GUN_SPEED_BASE and got excited. Yeah that would be great if you could take a look at that.

      MK

      • #1781
        Jeffrey
        Keymaster

        I think it’s a combination of reload rate and NPC skill levels. Before going into the skill levels assigned (CalculateAppropriateSkills in GeneratorUtilite.c I believe), try this in CANNONS\Cannons_init.c first:

        Scroll to end and just before the last brace }, after the property setting for the last cannon, insert this:

        //Testing
        for(int jj=0;jj<CANNON_TYPES_QUANTITY;jj++){
        Cannon[jj].ReloadTime = stf(Cannon[jj].ReloadTime) * 2.0;
        }

        Then either a new game, or go to mod options and reinit. This will put the lowest caliber cannons very near the reload time of the original game, yet the largest caliber will be roughly what 16-20 pounders were in the original. Tell me what you think.

    • #1775
      modernknight1
      Keymaster

      I like that never say die and never relinquish attitude. AWESOME! Most of the time I am the same way. I am obsessive about this game also and there is not a better one out there presently that does everything this one does in the way it does it. Even though there is a lot of spaghetti code in there, the game design itself is pretty darn good.

      MK

    • #1778
      Jeffrey
      Keymaster

      Oh my goodness! You know that zero before a fraction? My GUN_MIN_WT and GUN_MAX_WT were exactly that; numbers like .75 and .5. I just changed them to be 0.75 and 0.5 and put everything back into one long formula, without the extra lines and variables, but also with the parentheses it would need. Worked without error. That was the problem with that situation all along, but had nothing to do with parens. But of course it worked the way I showed, by splitting it all up WITHOUT the preceding zero too. Bizarre, but hey, lesson learned.

    • #1783
      Jeffrey
      Keymaster

      Another error cropped up in my sailing of the sea…

      RUNTIME ERROR – file: sea_ai\AIShip.c; line: 662
      missed attribute: speed
      RUNTIME ERROR – file: sea_ai\AIShip.c; line: 662
      no rAP data
      RUNTIME ERROR – file: sea_ai\AIShip.c; line: 662
      missed attribute: speed
      RUNTIME ERROR – file: sea_ai\AIShip.c; line: 662
      no rAP data

      The line in particular is attempting to access Track2.Speed.

      Found two ships without Track2.Speed in Ships_init.c, a property every other ship has value for.

      ShipsTypes[SHIP_SOLEILROYAL]
      ShipsTypes[SHIP_SOLEYRU]

      //Next 3 lines only serve as typical ship def example
      refShip.Track2.ZStart = -0.15;
      refShip.Track2.LifeTime = 10.5;
      refShip.Track2.Width = “16.0, 18.0”;
      //Missing Track2.Speed here. All other ships have this property, and all but a scant few have this exact: refShip.Track2.Speed = “0.15, 0.25”;

    • #1784
      Jeffrey
      Keymaster

      …I’m tellin’ ya, after my recent episode, the French are after me!

    • #1788
      Galleon
      Participant

      HA! The Frenchies are always after me. I play Spaniard always, but I prefer hunting and killing Englishmen and sending their dear ships to the bottom.

      • #1790
        Blas de Lezo
        Participant

        Yes,these “gabachos” want me dead too. Bounty Hunters are coming for my head.

        I usually play as pirate but this new game as Spanish.
        And I love hunting and killing English and Pirates(they are the same thing) this must be national sport in Golden Era. 🙂

    • #1795
      Jeffrey
      Keymaster

      3 mb worth of weather errors, these were the most repeated in the file:

      RUNTIME ERROR – file: weather\WhrWeather.c; line: 899
      invalid index -1 [size:35]
      RUNTIME ERROR – file: weather\WhrWeather.c; line: 899
      function ‘Whr_UpdateWeatherHour’ stack error
      RUNTIME ERROR – file: weather\WhrWeather.c; line: 107
      invalid index -1 [size:35]
      RUNTIME ERROR – file: weather\WhrWeather.c; line: 107
      invalid array index
      RUNTIME ERROR – file: weather\WhrWeather.c; line: 107
      function ‘GetCurrentWeather’ stack error
      RUNTIME ERROR – file: weather\WhrWeather.c; line: 622
      uninitialized aref
      RUNTIME ERROR – file: weather\WhrWeather.c; line: 622
      RUNTIME ERROR – file: weather\WhrUtils.c; line: 3
      uninitialized aref
      RUNTIME ERROR – file: weather\WhrUtils.c; line: 3

      Program\Weather\WhrWeather.c

      aref GetCurrentWeather()
      {
      //Fix for when iCurWeatherNum = -1…borrowed from function Whr_LoadNextWeather(int nPlus)
      if (iCurWeatherNum < 0)
      iCurWeatherNum = iTotalNumWeathers – 1;
      //End fix
      aref arWeather;
      makearef(arWeather,Weathers[iCurWeatherNum]);
      return arWeather;
      }

    • #1799
      modernknight1
      Keymaster

      Love hearing about you Spanish Imperial Pirate hunters! You should have a crack at a narrative in How’s Your Game Going?

      AWESOME find on the weather problem Jeffrey! Thanks again. Every little problem I can update for the patch as I close it up makes it all the better!

      MK

      • #1803
        Jeffrey
        Keymaster

        I found the weather problem very strange as I’d never seen it before. But after a session, I like to look for an error.log file. Lately, I don’t see one, or it’s very small with only a bad reference within Seadogs.c about the interface, which I suspect is from the game ending anyway and am not too concerned about it.

        It was very surprising to see a 3 mb file the other day; it was full of that bad weather index, though I never noticed anything strange in-game. I can’t really debug the how/why a -1 index was being passed around, but that other function I refer to simply changes it to the last index if less than zero, so I did the same within GetCurrenWeather.

        How do you want to go about taking a look at the cirass and gun changes I worked out? If you have a game going, pass an officer currently wearing a cuirass, a pair of Fencing Gloves or Cavalier Boots…I think once you witness that, it will make you want to make that change 🙂

    • #1805
      modernknight1
      Keymaster

      Oh I fully intend to implement your changes regardless Jeffrey. I will still do as we discussed personally and only give items I want to give to officers. The fact that they no longer favor the light armor items over better protection is a huge improvement IMHO!

      I am still doing too much editing to get a good game going yet. I am just doing these little test games that go 10 to 15 minutes to test stuff.

      SOON I will actually be able to play….WHICH IS MY PRIME MOVING FACTOR in doing all of this work!!!

      MK

    • #1845
      Orazio
      Moderator

      I have encountered a ship with wrong sailorpoints: the DutchFrigate1 (you can start the game as Cornelis Evertsen to test it).
      I don’t know if Modernknight has already fixed it in the upcoming patch, but here is the right sailorpoints file:
      DutchFrigate1.ini

    • #1861
      modernknight1
      Keymaster

      Nice! Thanks for this. Will include in the patch and credit you. Where did you get it? Did you make it yourself (I haven’t had the time)? Or did you find it in one of the GIC downloads, because I could never find it in any of their stuff for that ships the Leardi is the original name for the ship.

      MK

    • #1866
      Orazio
      Moderator

      No, I just made it from scratch. I couldn’t stand the sailors flying and going through walls 😀

      I’ve also found a ship with a wrong path for the first person camera, so you can actually “walk” outside of the ship.
      I’m trying to create a new correct path and import it in game, I will post it here if I will be successful.

    • #1867
      Orazio
      Moderator

      Ok, here it is. It’s the Galeon_h211, to test it start a new game with Laurens de Graaf.
      The correct path file: Galen_h211_path.gm

    • #1871
      modernknight1
      Keymaster

      Wow another one fixed! Thanks!!! Another one that needs a good sailorpoints file is the English 64 gunner, (Kris Wood’s Centurion), I have built my own for it but there is some kind of corruption in my converter and it causes the game to run extremely slow and glitchy if you run into one of those ships or are using one. So I simply found one that was not too bad to get by with for now.

      MK

    • #1873
      Orazio
      Moderator

      I guess you are referring to the Centurion1 ship. Here is the sailorpoints file I made: Centurion1.ini
      I haven’t noticed any glitch or performance issue with this file… check if it works for you.

    • #1874
      Orazio
      Moderator

      I post this here because I don’t know where else to post it…

      I wonder if it is possible to have better flags on the ships: I’ve noticed that some of the flags are really indiscernible, the texture looks so stretched that it’s impossible to discern the drawing in it.

      This screenshot explains what I mean:

      Is there something that can be done? Like higher resolution textures?

    • #1879
      Jeffrey
      Keymaster

      OK, it took awhile, but I was finally able to improve my rep enough to get the store owner in Puerto Principe to talk to me about the Blue Bird; I had to be delicate about things with my officer loyalty, so it took much longer to arrange this. Anyway, after returning to Bermudes, I found the Blue Bird quest is indeed broken and will not recognize you boarding/capturing/sinking the Blue Bird, but rather claims it got away no matter what, as a previous poster mentioned.

      I found the problem and resolved it, but you have to play from a save before going to sea and engaging in battle with the Blue Bird. Find the following lines and change the reaction_functions.c code like so:

      pchar.quest.BlueBird_DieHard1.win_condition.l1 = “ExitFromLocation”;
      pchar.quest.BlueBird_DieHard1.win_condition.l1.location = “Bermudes”;
      pchar.quest.BlueBird_DieHard1.win_condition.l2 = “NotBording”; //Insert this line as it is missing
      pchar.quest.BlueBird_DieHard1.function = “BlueBird_DieHard”;
      Pchar.quest.BlueBird_DieHard2.win_condition.l1 = “MapEnter”;
      pchar.quest.BlueBird_DieHard2.function = “BlueBird_DieHard”;

    • #1896
      Jeffrey
      Keymaster

      I encountered a bug when retrieving a ship from the port controller, past the original 3 allotted. Add this to Common_Portman.c, after the case “ShipStockManBack_3”:

      //Fix add
      case “ShipStockManBack_4”:
      NPChar.ShipToStoreIdx = sti(NPChar.Temp.ShipToStoreId4);
      dialog.text = DLG_TEXT_BASE[175];
      Link.l1 = DLG_TEXT_BASE[176];
      Link.l1.go = “ShipStockManBack”;
      Link.l2 = DLG_TEXT_BASE[177];
      Link.l2.go = “exit”;
      break;

      case “ShipStockManBack_5”:
      NPChar.ShipToStoreIdx = sti(NPChar.Temp.ShipToStoreId5);
      dialog.text = DLG_TEXT_BASE[178];
      Link.l1 = DLG_TEXT_BASE[179];
      Link.l1.go = “ShipStockManBack”;
      Link.l2 = DLG_TEXT_BASE[180];
      Link.l2.go = “exit”;
      break;

      case “ShipStockManBack_6”:
      NPChar.ShipToStoreIdx = sti(NPChar.Temp.ShipToStoreId6);
      dialog.text = DLG_TEXT_BASE[181];
      Link.l1 = DLG_TEXT_BASE[182];
      Link.l1.go = “ShipStockManBack”;
      Link.l2 = DLG_TEXT_BASE[183];
      Link.l2.go = “exit”;
      break;

      case “ShipStockManBack_7”:
      NPChar.ShipToStoreIdx = sti(NPChar.Temp.ShipToStoreId7);
      dialog.text = DLG_TEXT_BASE[175];
      Link.l1 = DLG_TEXT_BASE[176];
      Link.l1.go = “ShipStockManBack”;
      Link.l2 = DLG_TEXT_BASE[177];
      Link.l2.go = “exit”;
      break;
      //End add

    • #1904
      Jeffrey
      Keymaster

      During the Ascold quest, when you encounter Leif, the model was changed and you are switched to pose as Leif, instead of the Native American, but there is a bug; you can shoot, but can’t sword attack…not much a problem as the skeleton ‘friends’ do the job. The ‘good news’ is that when you eventually go back to fight him, he still can’t attack you either! The system log shows the problem as animation errors and I’m not familiar with correcting these:

      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fast attack action: “attack_fast_3”
      Character animation: not set force attack action: “attack_force_3”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set fight attack hit action: “hit_attack_3”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight fire hit action: “hit_fire”
      Character animation: not set force attack action: “attack_force_3”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set block(parry) action: “parry_4”
      Character animation: not set fight blockbreak action: “block_break”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fight blockbreak action: “block_break”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set feint action: “attack_feint_1”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set feint action: “attack_feint_4”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fast attack action: “attack_fast_3”
      Character animation: not set feint action: “attack_feint_2”
      Character animation: not set fight attack hit action: “hit_attack_3”
      Character animation: not set force attack action: “attack_force_3”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fight blockbreak action: “block_break”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fast attack action: “attack_fast_2”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fast attack action: “attack_fast_2”
      Character animation: not set fast attack action: “attack_fast_3”
      Character animation: not set fast attack action: “attack_fast_3”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fast attack action: “attack_fast_2”
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set fast attack action: “attack_fast_3”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fast attack action: “attack_fast_1”
      Character animation: not set force attack action: “attack_force_3”
      Character animation: not set break attack action: “attack_break_1”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_2”
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_3”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_3”
      Character animation: not set fight idle “fight stand_8” action
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set force attack action: “attack_force_4”
      Character animation: not set force attack action: “attack_force_1”
      Character animation: not set idle action: “idle_11”

    • #1907
      Jeffrey
      Keymaster

      It just now caught my eye, but the waitress in the Curacao tavern shows a blank for her name in any dialog with her. The Program\characters\init\Curacao.c shows that the .name and .lastname are run through the xiDStr function:

      ch.name = xiDStr(“Anneke”);
      ch.lastname = xiDStr(“Van Tassel”);

      These values were changed from GOF and from what I can tell, that xiDStr function draws from values in the RESOURCE\INI\texts\russion\dialogsource.txt, so those new values need to be added. They were originally:

      Tanneken {Tanneken}
      Clemence {Clemence}

      So either need to replace or add:

      Anneke {Anneke}
      Van Tassel {Van Tassel}

      Not a big deal…everything works, but a blank shows above any text dialog. This appears to be needed from the very start of the game as adding them subsequent does not alter things without doing a full character reinit, which I did not do.

    • #1911
      Jeffrey
      Keymaster

      Bug fix.

      Errors:

      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 921
      invalid index 19 [size:19]
      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 921
      invalid array index
      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 921
      Unknown data type
      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 923
      invalid index 19 [size:19]
      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 923
      invalid array index
      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 943
      invalid index 19 [size:19]
      RUNTIME ERROR – file: Loc_ai\LAi_utilites.c; line: 943

      Loc_ai\LAi_utilites.c; line: 921

      Change
      num = rand(19);
      to
      num = rand(18);

      That will select a random number index between 0 and 18, which will properly fit the array size of 19.

    • #1917
      Jeffrey
      Keymaster

      Couple text fixes:

      RESOURCE\INI\texts\russian\questbook\quests_texts.txt

      Change:

      #QUEST Hol_Line_2_TakeFoodCuraçao
      to
      #QUEST Hol_Line_2_TakeFoodCuracao

      #QUEST Hol_Line_10_SpaAttackCuraçao
      to
      #QUEST Hol_Line_10_SpaAttackCuracao

    • #1918
      Jeffrey
      Keymaster

      During the Dutch questline, when encountering the English squadron at Orange, there is a faceid/model problem that breaks the game. Change Program\Quests\quests_reaction.c:

      From
      case “DefenceOrange_FightNearJamaica”:

      case 1:
      ShipType = SHIP_MORDAUNT;
      Model = “off_Bcapeng_1”;
      Rank = 23;
      Blade = “blade33”;
      break;

      To

      case “DefenceOrange_FightNearJamaica”:

      case 1:
      ShipType = SHIP_MORDAUNT;
      Model = “off_eng_1”;
      Rank = 23;
      Blade = “blade33”;
      break;

      The problem arises if one attempts to board the ship with the erroneous officer. Once in the captain’s cabin, there is no captain to fight and you can’t exit; the above change will rectify the problem.

    • #1921
      Jeffrey
      Keymaster

      Again with the Dutch questline. Ever since the AoP, there is some ambiguity in the log entry, so change RESOURCE\INI\texts\russian\questbook\quests_texts.txt:

      From
      #QUEST Hol_Line_9_TakeThreeShips
      Four Ships-of the-Line
      #TEXT 1
      My new mission is an odd one. As is well known, Holland has a problem launching big vessels, so now I am to capture four first-class ships-of-the-line, bring them to the port of Curaçao, and hand them over to the Dutch Navy. This should take some doing.
      #TEXT 2
      Stuyvesant has received @<QtyTook> vessels.
      That makes @<QtyElse> ships, so far.
      #TEXT 3
      That does it for Stuyvesant’s mission. The required ships-of-the-line are all presented to the Dutch Republic.

      To

      #QUEST Hol_Line_9_TakeThreeShips
      Four Man-o-war
      #TEXT 1
      My new mission is an odd one. As is well known, Holland has a problem launching big vessels, so now I am to capture four first-class man-o-war, bring them to the port of Curaçao, and hand them over to the Dutch Navy. This should take some doing.
      #TEXT 2
      Stuyvesant has received @<QtyTook> vessels.
      That makes @<QtyElse> ships, so far.
      #TEXT 3
      That does it for Stuyvesant’s mission. The required man-o-war are all presented to the Dutch Republic.

      The governor logic specifies SHIP_MANOWAR, so this way the log makes it clear that the ship is not a LINESHIP, but must be a man-o-war.

      Also, in AoP, there is only one man-o-war ship so the SHIP_MANOWAR works, but in GOF and ERAS, there are several that are comparable, so to be fair to the player, the Program\DIALOGS\russian\Governor\hol_Governor.c should also be changed to allow for comparable ships to satisfy the requirement. Change:

      case “TakeThreeShips_toAbordage”:
      dialog.text = DLG_TEXT_GUB[89];
      tempQty = 0;
      for (i=1; i<=COMPANION_MAX; i++)
      {
      chComp = GetCompanionIndex(pchar,i);
      if(chComp != -1)
      {
      sld = GetCharacter(chComp);
      iShip = sti(sld.ship.type);
      iBaseType = sti(RealShips[iShip].basetype);
      if (iBaseType == SHIP_MANOWAR
      || iBaseType == SHIP_ZEVENPROVINCIEN
      || iBaseType == SHIP_MANOWAR_FAST
      || iBaseType == SHIP_TRINITY
      || iBaseType == SHIP_SOLEILROYAL
      || iBaseType == SHIP_SANFELIPE
      || iBaseType == SHIP_SOLEYRU) //Changed this line to include all comparable man-o-war ships

      Though this forum is specifically targeted to ERAS, if anyone is interested in changing their GOF, the above line should also change, but with the following types, in a similar fashion to above: SHIP_MANOWAR, SHIP_INTREPIDE, SHIP_ENDEAVOUR, SHIP_MANOWAR_FAST, SHIP_BATTLEMANOWAR, SHIP_MANOW50_GUB, SHIP_VICTORY, SHIP_SOLEYRU, SHIP_SANFELIPE, SHIP_SOLEILROYAL

      As an aside, while defending de Graf in the fight at Cartagena, I boarded one of the enemy ships just fine, fought/defeated the captain, but when closing out the screen with the ship transfer, no matter if I sink it or retain it, the game crashes. However, there is no error in any log file, so I’m unsure what the problem is at the moment. I kept a save and can continue to look, but to proceed for the moment, I simply reloaded from the boarding save and opted to simply send them all to the bottom via cannon-fire…that worked without problem.

    • #1923
      Jeffrey
      Keymaster

      Interesting. Taking the suggestion to another poster about the ship/transfer crashes, I went to that save from defending de Graf in the Dutch questline task. I boarded the ship and did not transfer any goods. The game does not crash. I experimented by reloading again, but this time appoint an officer to the ship, again transfer no goods or crew (appointment and transfer of any goods already determined to crash), and again no crash. However, since the ships are so close, if I appoint a captain, then immediately select ship-transfer and transfer, then remove officer to sink, there is also no crash. Since I can’t see any relevant error in the logs, I don’t know exactly what’s wrong, but this method allows a workaround in the event of a crash; keeping boarding save option on allows one to redo and employ the workaround for problem ship board/transfers.

      My ship is a French Deux Pont and the enemy ship is an Export Warship.

    • #1928
      Jeffrey
      Keymaster

      I found some further Ascold/Azzy replacements I had missed (these appear from the original AoP game).

      Program\Text\Dialogs\Userer\Charles_Userer.h

      Change Ozzie to Azzy (just to maintain consistency with my other changes…if Ozzie is preferred then one needs to seek out the Azzy references and change those…the original game dialogs jump around between the two). These are not in any order of the file, but serve to identify:

      “Ozzie sent me. He said you should have something ready for me?”,
      “Listen, I need to find Ozzie.”,
      “No, nothing… Listen, what kind of business is it you got with Ozzie? Just curious…”,
      “You’re lookin’ for Ozzie? Bad idea. I already done told you it’ll complicate that breathing habit of yours.”,
      “Sir, curiosity is not a becoming trait around here. Unless you plan on becoming a corpse, that is. Especially if the man you’re prodding is Ozzie. Now, if that’s all you need, I do have work to do…”,

      Change Ozzie to Azzy

      “Azzy sent me. He said you should have something ready for me?”,
      “Listen, I need to find Azzy.”,
      “You’re lookin’ for Azzy? Bad idea. I already done told you it’ll complicate that breathing habit of yours.”,
      “No, nothing… Listen, what kind of business is it you got with Azzy? Just curious…”,
      “Sir, curiosity is not a becoming trait around here. Unless you plan on becoming a corpse, that is. Especially if the man you’re prodding is Azzy. Now, if that’s all you need, I do have work to do…”,

      Program\Quests\quests_reaction.c contains the following logic to create officers for the Curacao (and the later Marigo) attack:

      case “SpaAttackCuracao_Battle”:

      Model = “off_spa_1”;
      Model = “off_spa_2”;
      Model = “off_spa_3”;
      Model = “off_spa_4”;
      Model = “off_spa_5”;
      Model = “off_spa_6”;

      However these same models need a faceid to avoid some spyglass and other errors during any ship transfer in the log files. So add them in Programs\characters\characters_face.c:


      case “off_spa_1”: rCharacter.FaceId = 73; break;
      case “off_spa_2”: rCharacter.FaceId = 74; break;
      //Added following
      case “off_spa_3”: rCharacter.FaceId = 73; break;
      case “off_spa_4”: rCharacter.FaceId = 74; break;
      case “off_spa_5”: rCharacter.FaceId = 73; break;
      case “off_spa_6”: rCharacter.FaceId = 74; break;
      //End add

      Note that I wasn’t sure what exact face to use, so I just replicated off_spa_1 and off_spa_2 for the missing officers for now.

    • #1934
      Jeffrey
      Keymaster

      Here’s a nice fix…

      Ever since GOF introduced the skill books, they never show up with the traders/store. I found out why. The functions rely on the item.id, but for the books, the TakeNItems function was being passed the item.name. Change the relevant portion of the file Program\scripts\utils.c, by removing all instances of itmname_book so it looks like the following (e.g. TakeNItems(ch,”itmname_bookleader_1″, 1) becomes TakeNItems(ch,”bookleader_1″, 1)):

      //books

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookleader_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookBible_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booklight_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookfencing_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookheavy_1″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookleader_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booklight_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookfencing_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookheavy_2″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookleader_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booklight_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookfencing_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookheavy_3″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookpistols_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookluck_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookstealth_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booknavigation_1″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookpistols_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookluck_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookstealth_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booknavigation_2″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookpistols_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookluck_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookstealth_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booknavigation_3″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookaccurate_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookcannon_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookgrapple_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookdefend_1″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookaccurate_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookcannon_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookgrapple_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookdefend_2″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookaccurate_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookcannon_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookgrapple_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookdefend_3″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookrepairs_1″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookmoney_1″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookrepairs_2″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookmoney_2″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookrepairs_3″, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookmoney_3″, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookwrestling”, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”booklgtweapman”, 1);}

      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookmedweapman”, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookheavweapman”, 1);}
      irand = rand(19);
      if (irand == 2) {TakeNItems(ch,”bookcrunch_3″, 1);}

      The same can be done for GOF, but don’t use the above code as it contains an extra…just do a manual replace of all itmname_book prefixes.

    • #1935
      modernknight1
      Keymaster

      Very fine work Jeffrey! Having the books at the traders is something I have wanted forever. Good catches on the questline improvements. I had already fixed the bad officer for the Fort Orange part of the Dutch questline aboard the Mordaunts for the upcoming patch. The Van Tassel deal is some left over stuff I was working on for a new questline involving Jessica Jayontz and the Curacao bar maid. I am also working on a new questline for another character who is the governor of curacao’s daughter which is almost identical to the Isabella quest with different characters. So imagine being able to get married twice or marry the Dutch girl instead of the Spanish one. Long way from being done but the basics are in place.

      I have been very busy. I became very ill and burnt out. I have been modding some for Mount and Blade stuff and doing some actual real world work. I am on my way to Aruba and Curacao tomorrow FOR REAL – not in the game – for real! Hoping to get some inspiration from walking the beaches and exploring all the historic sites. I will be gone for the next two weeks. The cruise ends in Turks. I will take pictures. When I get back I will start the final work on finishing up the patch.

      I will tell you that some recent discoveries have really got me down and rethinking everything with my continuing work on ERAS. I have been wondering if it might pay just to wait a little longer to see where some of these other things go and if they might share with us or collaborate or we could promote their efforts in English as PA! really doesn’t care about assisting with any flavor of COAS or Sea Dogs: TEHO modding. I was hoping some members here might contact these people to see if they might like to share some stuff with us. I have no way to contact them at the present. Some new ships and stuff would really go a long way into recharging my batteries and my interest in working hard again on this and getting a truly amazing new version of ERAS finished. I have done a couple of new ships myself and one is pretty darned good and I think will be popular – but its nothing compared with the other stuff others are doing. Some REALLY AMAZING new things here. Should I even continue with my work on the new islands now considering??? Here’s some links:

      http://www.piratesahoy.net/threads/problem-with-model-in-maya.26695/

      http://forums.corsairs-harbour.ru/showthread.php?t=5295

      MK

    • #1978
      Galleon
      Participant

      Have a wonderful time MK. Looking forward to the new patch. Just played through the kapp kronstad 1.2.4 mod again. We should try to import the fort. It is not near as good as eras but has some good things. You should try it a little. Your Spanish is not as bad as you think. I believe you could play it. You should look at what the idiot people at pirates ahoy are posting the last day. But maybe not until you return eh? I will try to contact these other people as you ask. I have memberships. Good journeys to you my friend.

    • #1982
      Steve
      Participant

      MK,
      New here. But I downloaded the mod and played it as Flint. When walking on his starting ship, the Walrus, I start in the cabin rather than the poopdeck and when I exit the cabin instead of going on the weatherdeck, I end up below decks in the water. It seems as though the walk path is one level lower than it should be. The steps are in the same place as I walk up/down into/out of the cabin from he same spot as the steps.
      Pez

      • #1987
        Orazio
        Moderator

        You are right. The current path file seems somehow corrupted, I only see one polygon.
        I will make a new one soon.

    • #1983
      Jeffrey
      Keymaster

      I hope this is OK to post…

      I zipped up my current adjustments to the ERAS download I have and posted to the ‘net for download here: https://mega.nz/#!7wcHXAyS!ikcAqmHgxF65FaO246BibrdP5tUQ_NJb_RD_tDlOYYw

      These are merely the fixed files I have mentioned (dialog problems, errors, quest breaks, etc.) and don’t alter the original ERAS except for a few things that ModernKnight seemed to agree to in the forum discussion:

      Orazio’s two new walk files are there.
      Orazio’s Galleon model fix.
      Orazio’s cool new image for equipment screen.
      My loyalty tweak that allows for a more devoted officer becoming more likely to ignore things they don’t like and not have it affect their loyalty. For instance, a Hero officer that is devoted will be more likely to not have a loyalty decrease when you throw a captain overboard. However, they still have a chance to not like this act and will still sometimes suffer a loyalty decrease and next time will be a little less likely to ignore, until eventually their loyalty becomes bad enough they will almost never ignore acts they don’t like…and vice versa with a Shark when doing good things.
      My cuirass tweaks for giving the ability to equip a girdle, fencing gloves, cavalier boots without a cuirass perk (same goes for officers who will automatically equip them if they don’t have the perk).
      My cuirass/gun tweaks for officers using better logic to always select the better cuirass or better gun based on equipment specs.
      A pirate nation character can get the Blue Bird quest if able to sneak into another nation’s port and talk to the store owner of the town.
      A vertical scroll bar added to the F10 other-hero status screen.
      Resurrected officers (using Jade Skull) from that other hero list no longer show as dead on the status screen.
      Skill books become available in store and from traders.
      Added the hot-key options from GOF 1.2 to have officers follow, charge, hold using G for follow, H for hold, C for charge.
      Added the hot-key options from GOF 1.2 for fleet loading balls using 5, grape shot using 6, knipples using 7 and bombs using 8.

      Unzip and copy/overwrite existing files. If worried, make a copy of the entire ERAS fileset on your computer before copying.

      Also, given that there were a couple ship/item and array-size problems I resolved , you will probably have to reinitialize the item/ship arrays to avoid a crash upon save (I think the mod options screen has a reinit feature, but I note it is not really functional in ERAS). Enable debugger in the engine.ini file by turning on the debugger. Open engine.ini in the root of the ERAS directory with a text editor like notepad.exe and change the following if set to = 0:

      debugwindow = 1
      debuginfo = 1
      Find _mod_on_off.h in the Program folder and with a text editor change the following if set as “Off”
      #define MOD_BETTATESTMODE “On”

      Launch and load a saved game and hit F11. You should see the debug window and I added the ship/item inits to the F1 option…click that F1 button (the first button in the list and you should see it also added some Gold to your main character), then click the top right X in the corner (NOT the OK button up there!). Resave your game.

      With the new hot key command additions, you will probably find after you load a save that no key/mouse commands work on your character and you will have to hit the ESC key to bring up the menu, select Options, the Restore Defaults for the commands. They should then work and just resave your game.

      That should do it. Hope you are able to keep playing your existing games (I believe I was able to during my debugging/fixing efforts), but if not, you may have to start a new game because of the array-sizing issues I encountered/fixed…but I don’t think you will have to if you go through that F1 exercise in the debugger.

      • #1994
        Jeffrey
        Keymaster

        Ugh…I removed the .zip file from their server before now discovering two things:

        The link to the new file, even with the same name, is now different.
        I can no longer edit my previous post here to replace the old link with the new link.

        I added Orazio’s latest file and the new link is: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

        This will work better for future because it’s now a link to the folder the file resides and will not have to change if the file is updated.

    • #1989
      Orazio
      Moderator

      Thanks for this patch, Jeffrey! I see it as a “preview” of the mega patch MK is working on.

      About his words, I have never tried other mods except for GoF, so sometimes I don’t fully understand what he means when he talks about other people doing better and similar.
      What do other mods have more than ERAS? New gameplay features? New ships (but we have hundreds!)? New locations?
      Help me understand, since I think ERAS is really good, so I am quite surprised when MK says such things.

    • #1992
      Orazio
      Moderator

      This is the new correct path file for Flint’s ship, the Walrus: Download
      It has to be copied in RESOURCE\MODELS\Ships\TheBlackPearl1\ overwriting the existing one.
      It may be necessary to moor and then go back to the ship to have the path file correctly update.

    • #1996
      Jeffrey
      Keymaster

      Some enemy ships in my spyglass did not show a type, so I boarded them. The description allowed me to determine they were a FR_SuperiorWarship1 and 30GunFrigate missing in common.ini. For lack of a better name-type, I simply added the following:

      string = 30GunFrigate,”30 Gun Fregate”
      string = 30GunFrigateGen,”30 Gun Frigate”
      string = 30GunFrigateAcc,”30 Gun Frigate”
      string = 30GunFrigateDat,”30 Gun Frigate”

      string = FR_SuperiorWarship1,”French Superior Warship”
      string = FR_SuperiorWarship1Gen,”French Superior Warship”
      string = FR_SuperiorWarship1Acc,”French Superior Warship”
      string = FR_SuperiorWarship1Dat,”French Superior Warship”

      We can change this if they should be something better, but for now, I replaced the .zip in my latest link to the download folder with the new common.ini inside.

    • #2007
      Jeffrey
      Keymaster

      Another missing ship in common.ini

      string = Sophie,”Sophie”
      string = SophieGen,”Sophie”
      string = SophieAcc,”Sophie”
      string = SophieDat,”Sophie”

      Updated .zip file in my download link.

    • #2008
      Jeffrey
      Keymaster

      A few more fixes.

      From system.log
      Can’t load texture resource\textures\WEATHER\SKIES\BLUE3\SKY_FR.TGA.tx
      Can’t load texture resource\textures\WEATHER\SKIES\BLUE3\SKY_LF.TGA.tx
      Can’t load texture resource\textures\WEATHER\SKIES\BLUE3\SKY_BK.TGA.tx
      Can’t load texture resource\textures\WEATHER\SKIES\BLUE3\SKY_RT.TGA.tx
      Can’t load texture resource\textures\WEATHER\SKIES\BLUE3\SKY_UP.TGA.tx

      Program\Weather\init\Day.c

      Change
      Weathers[n].Sky.Dir = “weather\skies\Blue3\”;

      To

      Weathers[n].Sky.Dir = “weather\skies\14\”;

      Change
      Weathers[n].Sky.Dir = “weather\skies\Clouds1\”;

      To

      Weathers[n].Sky.Dir = “weather\skies\16\”;

      Change
      Weathers[n].Sky.Dir = “weather\skies\Overcast3\”;

      To

      Weathers[n].Sky.Dir = “weather\skies\17\”;

      Change
      Weathers[n].Sky.Dir = “weather\skies\Overcast3\”;

      To

      Weathers[n].Sky.Dir = “weather\skies\18\”;

      There are no Blue3, Clouds1, Overcast3 folders with textures in RESOURCE\Textures\WEATHER\SKIES.

      Also since AoP there is a similar problem in Program\Weather\init\Special.c

      Change
      Weathers[n].Sky.Dir = “weather\skies\Twilight1\”;

      To
      Weathers[n].Sky.Dir = “weather\skies\07\”;

      Later found this in system.log:

      resource\models\characters\girl_23.gm: can’t open geometry file
      Character model ‘characters\girl_23’ not loaded

      Problem is here: Program\scripts\utils.c

      if(iSex == MAN)
      {
      sBody = “citiz”;
      iNumber = rand(40)+1;
      }
      else
      {
      sBody = “girl”;
      iNumber = rand(22)+1;
      }

      In RESOURCE\MODELS\Characters, the highest is Girl_22.gm, so change to:

      if(iSex == MAN)
      {
      sBody = “citiz”;
      iNumber = rand(40)+1;
      }
      else
      {
      sBody = “girl”;
      iNumber = rand(21)+1;
      }

      I suspect this last one will resolve the occasional empty trader kiosk as the nonexistent model might probably be assigned as a trader and that is why there is sometimes an empty one.

      Files updated in the .zip at my download link.

    • #2010
      Jeffrey
      Keymaster

      Though I’ve done the Enchanted City quest several times, I just now noticed in the quest log texts that the second entry intended to be written for the player in this quest, is never coded anywhere and has been missing ever since the original AoP COAS. I put it where it belongs, in Program\DIALOGS\russian\Tavern\Maracaibo_Tavern.c:

      case “MCTavernMar_2”:
      dialog.text = DLG_TEXT_TV[15];
      link.l1 = DLG_TEXT_TV[16];
      link.l1.go = “exit”;
      pchar.questTemp.MC = “toDesMoines”;
      AddQuestRecord(“MagicCity”, “2”); //Fix add
      break;

      Download .zip at https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg includes updated fix.

    • #2011
      Jeffrey
      Keymaster

      OK, since I tried a few things on Impossible difficulty (as seen here: https://buccaneersreef.com/forums/topic/eras-2-gameplay-on-impossible-difficulty/), I then tried Captain, and there are a few things that are completely unbalanced and I’m having a hard time understanding the logic/thinking that went into the approach. A sort of bug in COAS if you ask me.

      For instance, when meeting the tavern waitress and the player is confronted by a robber — the player doesn’t stand a chance. Even at Captain difficulty (MOD_SKILL_ENEMY_RATE = 5), the player is dead within seconds. The NPC, can kill you with one overhead, which is OK…need to be alert, parry/dodge, or quickly interrupt that swing with a thrust/swing. But, pistol shots are uninterruptible, and the NPC is many levels ahead of the Hero, so have many more hit points and many perks, and inflicts far more damage. As such, the NPC often just pulls a pistol, which you can’t stop and can’t kill them fast enough to mitigate, and they fire multiple shots at you. Dead. Against that one guy, at Captain difficulty, after many many reloads, I have not been able to defeat this robber…ever…it’s always the pistol shots which I can’t stop.

      I looked at the code and I see now that even at a modest difficulty, why this is so.

      The robber is created with this code, in function void WaitressFack_Enter:

      iTemp = sti(pchar.rank) + rand(MOD_SKILL_ENEMY_RATE);
      FantomMakeCoolFighter(sld, iTemp, 80, 80, “topor2”, “pistol6”, 50);

      That second parameter, iTemp is the rank the NPC will get and in a worst case scenario, it will be the player’s rank plus 5 in the case of Captain difficulty. Assuming I am level 5, the NPC will be a level 10 in worst case.

      The 3rd and 4th parameters are the NPC’s fencing and pistol abilities = 80.

      So in a case of my level 5 character, with my couple +10 bonus items that boost my fencing/pistol score to roughly 30 and my meager 70 or so hit points, I can be fighting a level 10 character, with 80 skill in fencing/pistols, the NPC will have some multiple of my max HP, and has .SuperShooter perk, along with Energaiser, SwordplayProfessional, AdvancedDefense, CriticalHit and Sliding, with 6 potions. The topor2 does min. 35.0 and 120.0…which is fine. Some good player skill and potions can keep you alive. But the NPC pistol6 makes this fight impossible. The NPC gets 2 shots, with the SuperShooter perk and the min. 35, max. 110, and once they draw, you can’t interrupt and if the first shot doesn’t kill you outright, they will immediately finish you off with a second shot.

      So be it…you just don’t engage in this fight until you reach level 20+. Then maybe you can survive.

      Which brings me to the Emerald City shore fight. That one is likely impossible at Captain, and even more crazy at difficulty levels beyond that. The Emerald City shore fight uses MOD_SKILL_ENEMY_RATE to determine how many of these same fighters are against you. I have been able to fend off similar fights against 3 NPCs in the ‘defeat smuggler’ quests given by mayors, but only with my own fighters to help me (which usually have similar abilities as the NPC, so they can occupy the NPCs while I hack away at one). I can also survive multiple attackers in a boarding action, but those fighters, while still getting a difficulty bump, are not created from the ‘coolfighter’ function, but more aligned with a normal/random skill/perk selection and my fighters can help me. But in the Emerald City shore fight, the game eliminates your fighters from helping you and they are the ‘coolfighters’. So in the case of Captain level MOD_SKILL_ENEMY_RATE = 5, I have to solo against 5 of them…while surrounded on all sides with no choke point. Even running to that opening in the wrecked ship, the opening is large enough that they can still surround me. I die within seconds because as fast as I draw a weapon and attack, at minimum, 2 or 3 of them immediately draw pistols and shoot me dead. At difficulty level 5, they are as high as level 10 against my level 5 and there are 5 of them with skills and HP way beyond my own, at difficulty level 7, there would be 7 NPCs at level 12 against my level 5 solo self, and at difficulty level 10, there would be 10 against 1, with the NPCs at level 15.

      There is no way you can avoid 3-5 of them immediately taking a pistol out, doing at minimum 35 * (difficulty level) damage to you with that pistol. Presuming difficulty 5, that would be 3 of them doing instantaneous 3 * 35 = 105 HP damage to me and I have a max of roughly 70. If I were level 15, I might have more than 105 HP, but then they would all just take a second shot…so I would have to be maybe level 30? Probably even higher than that is required. But even then, after taking the first volley of shots, if I survived, I’m near dead, haven’t killed any of them because all 5 of them have way more HP than me and they will reload in less than 20 seconds (remember their SuperShooter perk also allows faster reload), and several of them will shoot me again before I can regenerate via potion and/or kill them due to their massive HP scores.

      I don’t see how that Emerald City shore fight is possible. And for what? Wait until level 40, donned with the best cuirass and all the fighting perks, take them all on, then eventually you might end up with a class 4 brig? What’s the point?

    • #2012
      Jeffrey
      Keymaster

      Speaking of difficulty level, while poking around looking at things, I found that the current game’s level is supposed to display on the Statistic tab, but doesn’t because ever since AoP COAS, that line is passing a font name that doesn’t exist.

      In Questbook.c, change:

      CreateString(true, “LevelComplexity”, XI_ConvertString(“m_Complexity”) + ” : ” + GetLevelComplexity(MOD_SKILL_ENEMY_RATE), “INTERFACE_SMALL”, COLOR_NORMAL, 440, 334, SCRIPT_ALIGN_CENTER, 1);

      To

      CreateString(true, “LevelComplexity”, XI_ConvertString(“m_Complexity”) + ” : ” + GetLevelComplexity(MOD_SKILL_ENEMY_RATE), “interface_ultrasmall”, COLOR_NORMAL, 440, 334, SCRIPT_ALIGN_CENTER, 1.0);

      Updated at: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #2014
      Jeffrey
      Keymaster

      This difficulty thing got my curiosity going…since I’d never thought to try it out, I did some experimenting, with dismal results considering the two places I tried it: Tavern robber and Emerald City shore. I concocted some code to replicate both the tavern and the Emerald shore scenarios by copying the code, but placing it in a loop that first modifies the difficulty levels, then calls the proper NPC functions.

      Code to produce trace output:

      Trace(“My.rank = ” + pchar.rank + ” My.hp = ” + sti(pchar.chr_ai.hp) + ” My.Skill.Fencing = ” + pchar.Skill.FencingLight + ” My.Skill.Pistol = ” + pchar.Skill.Pistol);
      for(int j=1; j<11; j++){
      MOD_SKILL_ENEMY_RATE = j;
      int iTemp = sti(pchar.rank) + rand(MOD_SKILL_ENEMY_RATE);
      sld = GetCharacter(NPC_GenerateCharacter(“BerglarWairessQuest”, “officer_”+(rand(19)+1), “man”, “man”, iTemp, PIRATE, -1, true));
      FantomMakeCoolFighter(sld, iTemp, 80, 80, “topor2”, “pistol6”, 50);
      Trace(“Difficulty Level = ” + j);
      Trace(“Tavern robber sld.rank = ” + sld.rank + ” sld.hp = ” + sti(sld.chr_ai.hp) + ” sld.Skill.Fencing = ” + sld.Skill.Fencing + ” sld.Skill.Pistol = ” + sld.Skill.Pistol);
      for (i=1; i<=MOD_SKILL_ENEMY_RATE; i++) {
      sld = GetCharacter(NPC_GenerateCharacter(“ShoreGuard”+i, “officer_”+(i+10), “man”, “man”, 20, PIRATE, 0, true));
      FantomMakeCoolFighter(sld, 20, 70, 70, “topor2”, “pistol3”, 50);

      Trace(“Emerald City shore fighter #” + (i) + ” sld.rank = ” + sld.rank + ” sld.hp = ” + sti(sld.chr_ai.hp) + ” sld.Skill.Fencing = ” + sld.Skill.Fencing + ” sld.Skill.Pistol = ” + sld.Skill.Pistol);
      }
      }

      Here are the results:
      My.rank = 7 My.hp = 98 My.Skill.Fencing = 37 My.Skill.Pistol = 29
      Difficulty Level = 1
      Tavern robber sld.rank = 5 sld.hp = 115 sld.Skill.Fencing = 48 sld.Skill.Pistol = 48
      Emerald City shore fighter #1 sld.rank = 12 sld.hp = 198 sld.Skill.Fencing = 42 sld.Skill.Pistol = 42
      Difficulty Level = 2
      Tavern robber sld.rank = 6 sld.hp = 114 sld.Skill.Fencing = 60 sld.Skill.Pistol = 60
      Emerald City shore fighter #1 sld.rank = 15 sld.hp = 205 sld.Skill.Fencing = 53 sld.Skill.Pistol = 53
      Emerald City shore fighter #2 sld.rank = 15 sld.hp = 178 sld.Skill.Fencing = 53 sld.Skill.Pistol = 53
      Difficulty Level = 3
      Tavern robber sld.rank = 8 sld.hp = 123 sld.Skill.Fencing = 68 sld.Skill.Pistol = 68
      Emerald City shore fighter #1 sld.rank = 17 sld.hp = 239 sld.Skill.Fencing = 60 sld.Skill.Pistol = 60
      Emerald City shore fighter #2 sld.rank = 17 sld.hp = 179 sld.Skill.Fencing = 60 sld.Skill.Pistol = 60
      Emerald City shore fighter #3 sld.rank = 17 sld.hp = 175 sld.Skill.Fencing = 60 sld.Skill.Pistol = 60
      Difficulty Level = 4
      Tavern robber sld.rank = 6 sld.hp = 109 sld.Skill.Fencing = 72 sld.Skill.Pistol = 72
      Emerald City shore fighter #1 sld.rank = 18 sld.hp = 235 sld.Skill.Fencing = 63 sld.Skill.Pistol = 63
      Emerald City shore fighter #2 sld.rank = 18 sld.hp = 201 sld.Skill.Fencing = 63 sld.Skill.Pistol = 63
      Emerald City shore fighter #3 sld.rank = 18 sld.hp = 162 sld.Skill.Fencing = 63 sld.Skill.Pistol = 63
      Emerald City shore fighter #4 sld.rank = 18 sld.hp = 197 sld.Skill.Fencing = 63 sld.Skill.Pistol = 63
      Difficulty Level = 5
      Tavern robber sld.rank = 7 sld.hp = 118 sld.Skill.Fencing = 76 sld.Skill.Pistol = 76
      Emerald City shore fighter #1 sld.rank = 19 sld.hp = 245 sld.Skill.Fencing = 67 sld.Skill.Pistol = 67
      Emerald City shore fighter #2 sld.rank = 19 sld.hp = 169 sld.Skill.Fencing = 67 sld.Skill.Pistol = 67
      Emerald City shore fighter #3 sld.rank = 19 sld.hp = 208 sld.Skill.Fencing = 67 sld.Skill.Pistol = 67
      Emerald City shore fighter #4 sld.rank = 19 sld.hp = 160 sld.Skill.Fencing = 67 sld.Skill.Pistol = 67
      Emerald City shore fighter #5 sld.rank = 19 sld.hp = 218 sld.Skill.Fencing = 67 sld.Skill.Pistol = 67
      Difficulty Level = 6
      Tavern robber sld.rank = 10 sld.hp = 147 sld.Skill.Fencing = 80 sld.Skill.Pistol = 80
      Emerald City shore fighter #1 sld.rank = 20 sld.hp = 158 sld.Skill.Fencing = 70 sld.Skill.Pistol = 70
      Emerald City shore fighter #2 sld.rank = 20 sld.hp = 170 sld.Skill.Fencing = 70 sld.Skill.Pistol = 70
      Emerald City shore fighter #3 sld.rank = 20 sld.hp = 226 sld.Skill.Fencing = 70 sld.Skill.Pistol = 70
      Emerald City shore fighter #4 sld.rank = 20 sld.hp = 244 sld.Skill.Fencing = 70 sld.Skill.Pistol = 70
      Emerald City shore fighter #5 sld.rank = 20 sld.hp = 168 sld.Skill.Fencing = 70 sld.Skill.Pistol = 70
      Emerald City shore fighter #6 sld.rank = 20 sld.hp = 194 sld.Skill.Fencing = 70 sld.Skill.Pistol = 70
      Difficulty Level = 7
      Tavern robber sld.rank = 8 sld.hp = 115 sld.Skill.Fencing = 88 sld.Skill.Pistol = 88
      Emerald City shore fighter #1 sld.rank = 22 sld.hp = 179 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Emerald City shore fighter #2 sld.rank = 22 sld.hp = 205 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Emerald City shore fighter #3 sld.rank = 22 sld.hp = 202 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Emerald City shore fighter #4 sld.rank = 22 sld.hp = 171 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Emerald City shore fighter #5 sld.rank = 22 sld.hp = 274 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Emerald City shore fighter #6 sld.rank = 22 sld.hp = 295 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Emerald City shore fighter #7 sld.rank = 22 sld.hp = 161 sld.Skill.Fencing = 77 sld.Skill.Pistol = 77
      Difficulty Level = 8
      Tavern robber sld.rank = 13 sld.hp = 138 sld.Skill.Fencing = 96 sld.Skill.Pistol = 96
      Emerald City shore fighter #1 sld.rank = 24 sld.hp = 240 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #2 sld.rank = 24 sld.hp = 182 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #3 sld.rank = 24 sld.hp = 184 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #4 sld.rank = 24 sld.hp = 200 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #5 sld.rank = 24 sld.hp = 182 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #6 sld.rank = 24 sld.hp = 161 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #7 sld.rank = 24 sld.hp = 166 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Emerald City shore fighter #8 sld.rank = 24 sld.hp = 214 sld.Skill.Fencing = 84 sld.Skill.Pistol = 84
      Difficulty Level = 9
      Tavern robber sld.rank = 9 sld.hp = 157 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #1 sld.rank = 26 sld.hp = 177 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #2 sld.rank = 26 sld.hp = 172 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #3 sld.rank = 26 sld.hp = 250 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #4 sld.rank = 26 sld.hp = 246 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #5 sld.rank = 26 sld.hp = 193 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #6 sld.rank = 26 sld.hp = 209 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #7 sld.rank = 26 sld.hp = 192 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #8 sld.rank = 26 sld.hp = 235 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Emerald City shore fighter #9 sld.rank = 26 sld.hp = 232 sld.Skill.Fencing = 91 sld.Skill.Pistol = 91
      Difficulty Level = 10
      Tavern robber sld.rank = 14 sld.hp = 178 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #1 sld.rank = 30 sld.hp = 283 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #2 sld.rank = 30 sld.hp = 269 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #3 sld.rank = 30 sld.hp = 275 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #4 sld.rank = 30 sld.hp = 200 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #5 sld.rank = 30 sld.hp = 208 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #6 sld.rank = 30 sld.hp = 253 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #7 sld.rank = 30 sld.hp = 183 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #8 sld.rank = 30 sld.hp = 247 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #9 sld.rank = 30 sld.hp = 187 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100
      Emerald City shore fighter #10 sld.rank = 30 sld.hp = 229 sld.Skill.Fencing = 100 sld.Skill.Pistol = 100

      Note that in the robber scenario, even at level 5, where the skills are not too dissimilar, that NPC gets the SuperShooter with a powerful double-shot pistol and usually shoots me dead within the first few seconds because I have meager ability, don’t yet have enough perk points at level 7, and can’t kill him fast enough.

      However, in the Emerald shore, there are multiple attackers that surround you (one NPC for each difficulty level setting), with no place to choke them single-file, so there is absolutely no way to survive above level 4 or so…at level 3, I was able to run/dodge, turn/shoot as my pistol reloaded. I got shot a time or two, sometimes dead, but a couple times only near death and I could potion revive, but they sometimes missed and once they ran out of their own health potions and their health got low, I’d also take a swing or two, then dodge again…it’s impossible to parry against 3 opponents surrounding you because they often swing at different times and only one overhead hit is needed to kill you. Eventually whittled them down, then could stand and fight. The time or two I survived at setting 3, I ran out of potions, nearly died myself, but succeeded a couple times. But died often, with many reloads/reattempts. Level 5 is impossible for a level 7 solo character. They shoot you dead within 2 seconds, or all take swings and you can’t block them all as you’re surrounded and they time/execute their attacks differently so you can’t both parry/block and they only need one or two hits to kill you. Whereas my overhead on a single, isolated attacker takes more than 4 hits to kill them.

      But as you can see, at difficulty 5, 6, 7, 8, 9, 10, you would be solo against 5-10 level 10+ opponents, all with SuperShooter and 200 HP…and no cover. They surround you and shoot you dead within seconds. If you try to run either for cover that doesn’t exist, or to bide time, with any more than 3 or so, they will shoot you dead…I tried anything I could think of to survive and failed many times.

      At least in the Ascold Spanish Temple Raid, Panama Raid, Narwhal fight you have help against superior forces. In the Spanish Temple raid, you can also jump in/out (which I have done) to escape/recover and then try again…any you have killed remain dead. Also, in the Tenochtitlan, you do the fights piecemeal against 3 at a time, with some cover opportunity. The Casper fight is insane, but there is a way to first whittle a few down with no fight at all and there are also a couple choke points where pistol fire is blocked by the NPC in front of you, not able to hit you.

      I don’t think for this part of the very beginning of a quest, that offers very little reward, it is worth so much adversity at the very start in any other setting other than the first couple difficulty settings. I’m thinking of halving the number of opponents:

      Setting:#Opponents
      1:1
      2:1
      3:2
      4:2
      5:3
      6:3…etc.

      And also if the difficulty setting is above 3, adding your officers to the fight. I’ve already coded this and experimented and at difficulty 5, against 3 opponents that still have the rank/skills shown, is still very hard at level 5. My fighters are quickly killed by pistols and usually so am I, but I’ve been able to succeed a time or two. Again, that’s at setting 5. At my level 7, Impossible difficulty is still such even against just 5 level 30 opponents. I’m also sure that even with capable fighters, with a change to 5 opponents for the Impossible setting, where they will be level 30, skills at 100, and many hit points, it will be just as ‘impossible’ as the setting implies.

      My reasoning for this particular Emerald City quest is that it’s fairly mediocre and my thinking is that a low-level character should be able to pass this beginning part of it, even at mid-range difficulty settings. I think adding your officer help above difficulty 3, although still very likely to die, offers at least some chance of passing…at average to very difficult setting, it will still be very difficult to pass even if the player is high rank and skilled, with good officers. Unless someone can show me/convince me a level 8-10 character can survive this fight. I’m pretty good at fighting in this game and I couldn’t do it at level 7, difficulty 5.

      The Tavern robber can stay the same. It’s impossible to win for a low-level character…so either pay the money, or just stop messing around with the waitresses! LOL

    • #2015
      Jeffrey
      Keymaster

      Ascold fix. There has been a longstanding bug since AoP, where the body-switch in the Ascold quest makes your fighter officers disappear forever. I have been meaning to fix this and just got around to it. I don’t have an old save for that part, but the code snippet was tested in the debugger and works to simply remove the officer from the position, rather than vanish.

      LeifEricson.c fix

      This was the original AoP/GOF/ERAS code (same in all):

      for (i=1; i<=3; i++)
      {
       	string officers = "Fellows.Passengers.Officers."+"id"+i;
       	if(CheckAttribute(pchar, officers))
       	{
      		RemoveOfficersIndex(pchar, sti(pchar.(officers)));
              }
      }

      The intent, I’m sure, is so that your fighters don’t join the skeleton siege on the town with you, not to remove them forever. However, simply removing the index vaporizes characters that are only fighters, (if they multitask/jack-of-all-trades and hold another position, you still see them in that other position); they are gone forever. I looked at the screen code to remove an officer from a particular position and there is more that is needed:

      for (i=1; i<=3; i++)
                  {
                      string officers = "Fellows.Passengers.Officers."+"id"+i;
                      if(CheckAttribute(pchar, officers))
                      {
      		     //Fix for officers that are only fighters are gone forever, rather than just removed from position appointment
      		     int iOfficer = sti(pchar.(officers));
      	   	     if(iOfficer > -1){
      			characters[iOfficer].isfree = sti(characters[iOfficer].isfree) - 1;
      			if (sti(characters[iOfficer].isfree) <= 0)
      			{
      				DeleteAttribute(&characters[iOfficer], "isfree");
      			}
      			RemoveOfficersIndex(pchar, iOfficer);
      			DeleteAttribute(&characters[iOfficer], "fighter");
      		     }
                      }
                  }

      .zip updated: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

      • This reply was modified 8 years, 7 months ago by Jeffrey.
    • #2017
      Jeffrey
      Keymaster

      BTW, I’ve not submitted/included the Emerald City change per difficulty level, as there might be some discussion/disagreement with my reasoning: What follows is my proposal that I have tried at various difficulty settings by simply uncommenting/changing the line at the beginning to change MOD_SKILL_ENEMY_RATE 1-10 and relaunching/retrying my save sitting in the harbor and docking at this particular shore:

      void MC_DesMoinesInShore(string qName)
      {
      //MOD_SKILL_ENEMY_RATE = 5;
      	chrDisableReloadToLocation = true;
      	LAi_LocationFightDisable(loadedLocation, true);
      	LAi_group_Delete("EnemyFight");
      
          //Mod...halve number of enemies.  Their rank/skills will already outrank Hero and fight is VERY difficult...you will likely die.
          for (i=1; i<=round((MOD_SKILL_ENEMY_RATE + 0.2) / 2); i++)
          {
              sld = GetCharacter(NPC_GenerateCharacter("ShoreGuard"+i, "officer_"+(i+10), "man", "man", 20, PIRATE, 0, true));
              FantomMakeCoolFighter(sld, 20, 70, 70, "topor2", "pistol3", 50);
      		sld.dialog.filename = "Quest\MagicCity.c";
      		sld.dialog.currentnode = "ShoreGuard";
      		sld.BreakTmplAndFightGroup = true; 
      		sld.reactionOnFightModeOn = true; 
              LAi_SetActorType(sld);			
              LAi_group_MoveCharacter(sld, "EnemyFight");				
      		PlaceCharacter(sld, "goto", "random_free");
      		LAi_ActorDialog(sld, pchar, "", -1.0, 0);
          }
      
          //Mod
          if(MOD_SKILL_ENEMY_RATE > 3){ //Go ahead and allow Hero's fighter officers for difficulty setting > 3...they will be needed and everyone will likely be killed anyway if not high enough level
          for (i=1; i<=3; i++) {
      	string officers = "Fellows.Passengers.Officers."+"id"+i;
              if(CheckAttribute(pchar, officers))
              {
        	   int iOfficer = sti(pchar.(officers));	   
      	   if(iOfficer > -1){
                 sld = GetCharacter(iOfficer);
      	   PlaceCharacter(sld, "goto", "random_must_be_near");
      	   }
              }		
          }}			
      }
    • #2021
      Orazio
      Moderator

      Thank you, Jeffrey, you are doing an outstanding job fixing all these bugs!

    • #2025
      Jeffrey
      Keymaster

      Thanks Orazio.

      In those ‘other captain’ quests/requests to find some ships, attack/loot and the player immediately teleports to the nearest shore, sometimes the screen goes black and stays that way. If you hit the ESC key, the menu to Resume game pops up and then everything looks fine. This bothered me.

      I had a thought that maybe if I could insert code that emulates mooring in that location, that would fix it. I found Sea_LandLoad() in sea.c and tried its method calls before teleportation. I fortunately have a boarding save just at the last ship of one of these quests, and I inserted some of this code in strategic spots and eventually got it to work! I’ve only tested this one particular save, but without it, screen goes black and with my additions, it displays as it should. I will try to test more, but several attempts both ways shows this to work so far…but unknown if anything else might be affected. There also may be a more elegant and simpler way, but so far this resolves what I aimed to fix.

      In DoReloadCharacterToLocation of quests.c I added:

      //Fix for black screen after immediately teleporting from sea to land at end of other Captain quests.
      	//Derived from sea.c:  Sea_LandLoad()
      	PauseAllSounds();
      	ResetSound();
      	LayerFreeze("realize", false);
      	LayerFreeze("execute", false);
      	if(bSeaActive){
      		ReleaseMapEncounters();
      		EmptyAllFantomShips();
      	}
      	//End fix
      	return TeleportCharacterFromCurLocationToLocation("fakeReload",idGroup,idLocator);

      And in scripts/PSHero.c, I added a line to PGG_Q1LocationLoaded:

      //Fix...battle interface stills showing after teleport fix in quests.c:  DoReloadCharacterToLocation
      DeleteBattleInterface();
      //End fix

      Files updated at: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #2028
      Jeffrey
      Keymaster

      To continue on with the difficulty settings…it seems broken. From setting = 4 and above, the NPC fight action/damage is insane and near impossible to endure. I am now level 17, with a Flemish cuirass, nice fast-loading pistol and above-average light weapon. With bonus items, 73 fencing score, 43 pistol score. Against the 3 opponents, solo, in the Isabella arrest, the fight starts with you surrounded, and at my difficulty setting of 5, I’m dead within a few seconds at my character level, usually from multiple pistol shots from at least 2 of the opponents at the same time…yet having good skills and lots of practice in this game, it’s fairly easy for me at difficulty level 1; never even the slightest problem defeating them.

      I now see why…looking LAi_fightparams.c, at difficulty level 5, all enemy damage is 100%, but reduced to 50% at setting = 1. From the ‘coolfighter’ function we’ve talked about, their level is very high at setting 5 and their stats are pegged at max 100. They never miss, do terrible damage, and their speed of attacks is very fast…too fast, as if fast-motion. I’ve decided to smooth out the difficulty transition so that each level of difficulty becomes a gradual increase throughout the 10 settings, rather than jump to near-impossible around level 6 for any low-level character against multiple opponents. Don’t worry, level 10 will be exactly the same (well, except for a minor detail in this particular fight where I actually give a small, gradually increasing time-delay to the fight-start to get to the stairs if you’re thinking strategically…you’ll never win at sub-20 character level if surrounded at setting = 7 🙂 ), but level 5 should be doable for an above average player, and level 7 should be doable for a good player if they make no mistakes. I consider myself pretty good, and I can never beat the Isabella arrest crew at difficulty 7.

      I made a smoother gradation of the damage throughout the difficulty values, a reduction and gradation of animation/attack speeds for the difficulty setting, and tailored the levels/stats for these particular Isabella fight NPCs to better match the difficulty level, where 1=easy is the same as the original, and difficulty 10 is also the same as it always was, but everything between is more evenly ramped up. So far, I am quite satisfied. At difficulty 5, I die about 50% of the time, but can win. At difficulty 7, I have beaten them two or three times, but died many more than that. At level 8, I’ve come close to beating them a couple times, but have died each time. I find this experience between levels more aligned with how it should be.

      It only took a few lines from both LAi_fightparams.c and quests_reaction.c. Some examples of what I did:

      //Mod:  Solo fight...slightly reduce enemy rank as they are still higher, but 3 against one
      				Rank = sti(pchar.rank)+ round((MOD_SKILL_ENEMY_RATE + 1.1) / 4) + 1;
      				sld = GetCharacter(NPC_GenerateCharacter("Soldier_"+i, Model, "man", "man", Rank, sti(colonies[iTemp].nation), 0, true));
      				//FantomMakeCoolFighter(sld, Rank, 100, 90, Blade, "pistol5", 200);
      				//Mod
      				FantomMakeCoolFighter(sld, Rank, (80 + round(4 * MOD_SKILL_ENEMY_RATE / 2)), (70 + round(4 * MOD_SKILL_ENEMY_RATE / 2)), Blade, "pistol5", (140 + round(10 * MOD_SKILL_ENEMY_RATE / 2)));
      				sld.City = colonies[iTemp].id;
      				sld.CityType = "soldier";
      				sld.Dialog.Filename = "Quest\Isabella\BrigCaptain.c";
      				sld.dialog.currentnode = "ArrestInHome_2";
      				LAi_SetWarriorType(sld);
      				if (i != 1) LAi_warrior_DialogEnable(sld, false);
      				LAi_group_MoveCharacter(sld, GetNationNameByType(sti(colonies[iTemp].nation)) + "_citizens");
      				ChangeCharacterAddressGroup(sld, "SanJuan_houseSp6", "reload", "reload1");
      			}
      			sld = characterFromID("Soldier_1");
      			LAi_SetActorTypeNoGroup(sld);
      			//LAi_ActorDialog(sld, pchar, "", 1.5, 0);
      			//Mod...give slightly more time...to find cover maybe?
      			float nTimeAdd = MOD_SKILL_ENEMY_RATE * 0.13;
      			LAi_ActorDialog(sld, pchar, "", (1.5 + nTimeAdd), 0);

      From LAi_fightparams.c:

      //Mod in both gun/blade damage functions
      		//if (MOD_SKILL_ENEMY_RATE < 5 && sti(enemy.index) == GetMainCharacterIndex())
      		if (MOD_SKILL_ENEMY_RATE < 10 && sti(enemy.index) == GetMainCharacterIndex())	
      		{
      			//dmg = dmg * (4.0 + MOD_SKILL_ENEMY_RATE) / 10.0;
      			dmg = dmg * (0.45 + MOD_SKILL_ENEMY_RATE * 0.05);
      		}

      Mod in LAi_NPC_GetAttackWeightFast, LAi_NPC_GetAttackWeightForce, LAi_NPC_GetAttackWeightRound:

      //npc_return_tmp = npc_return_tmp * (0.8 + (0.1 * MOD_SKILL_ENEMY_RATE));
      	//Boyer mod
      	npc_return_tmp = npc_return_tmp * (0.8 + (0.05 * MOD_SKILL_ENEMY_RATE + 0.05));

      By putting MOD_SKILL_ENEMY_RATE = 7; and other 1-10 settings into the function before all the NPCs are made in quests_reaction, I have quit the game and reloaded my save to every setting, many times, and think it is much better. If anyone wants to try this particular fight, I could upload these two files, and my save for this game to try yourself…rename your versions of the two files, and change the MOD_SKILL_ENEMY_RATE value in case “Romantic_ArrestInHouse block for any setting you want to try. Exit, save .c file, and relaunch/load game. It’s kind of fun to try the different settings and see the difference. You could also rename my two files, set your files back after trying say level 5, and play the same setting to see the difference between original version, too.

    • #2031
      Jeffrey
      Keymaster

      I had almost forgotten that in the beginning, Pearl Village was broken and model[10] = “pirate_11”; through model[27] = “pirate_28”; were stricken out of LAi_utilites.c. Since the models exist in RESOURCE\MODELS\Characters, I took a look and fixed it so that the newer models will show as ModernKnight intended.

      The initial model array was not resized from 10 to 28 to accommodate the new entries. Also, the random function was also adjusted. This was tested by going to Pearl Village. Fix is now part of the .zip download.

      //Array size fix
      //string model[10];
      string model[28];
      
      //Added commented section back as model array size now fixed
      model[10] = "pirate_11";
      model[11] = "pirate_12";
      model[12] = "pirate_13";
      model[13] = "pirate_14";
      model[14] = "pirate_15";
      model[15] = "pirate_16";
      model[16] = "pirate_17";
      model[17] = "pirate_18";
      model[18] = "pirate_19";
      model[19] = "pirate_20";
      model[20] = "pirate_21";
      model[21] = "pirate_22";
      model[22] = "pirate_23";
      model[23] = "pirate_24";
      model[24] = "pirate_25";
      model[25] = "pirate_26";
      model[26] = "pirate_27";
      model[27] = "pirate_28";
      
      //iMassive = rand(9);
      //Fix so that new models can be reached and new introduced model names can be used
      iMassive = rand(27);
    • #2032
      modernknight1
      Keymaster

      I have returned from the Dutch West Indies! WOW! Jeffrey you have been busy. Great work! I will simply modify the patch to encompass your additional work. I have no issues with changing the difficulty/level/stats of opponents as you suggest. The ships that you added names for were intentionally left blank because they are not supposed to appear. I did everything possible to make them not appear except take them out completely. I thought their rare appearance in Gentlemen of Luck or smuggler encounters was acceptable. They would be rare unique ships(even if from the wrong timeframe). I plan to change the names you chose slightly. I admit there should be something there rather than just leaving them blank.

      As for me, my batteries are recharged! I REALLY needed to get away. I am already halfway done with an illustrated article detailing the history of Curacao and the city of Willemstad – and showcasing Fort Amsterdam, the Fort Kerk(church) and the Maritime Museum there. Lots of pictures and historical discussion! The skies down that way are simply breathtaking! Look for it on the front page shortly. MK

      DSC01427

    • #2035
      Jeffrey
      Keymaster

      Hey, welcome back. Sounds like you had a marvelous time!

      Those ships were indeed encountered during a couple smuggler/Gentlemen of Fortune encounters.

      I’ve not uploaded my fighting changes for difficulty level just yet. I’m still gauging things. I’m more satisfied with the Emerald Shore and Isabella Arrest. I’m just about to give Tenochtitlan a try at various difficulties. My gauge being 1 is the same as it always was, 5 I can do most of the time if I don’t screw up, 7 I can do some of the time without any mistakes on my part; practicing the same battle after battle, my fighting skills are becoming quite honed! As it was/is, there was a serious leap around setting 5 in the original game where certain fights, like the Emerald Shore were guaranteed death for a low to mid-level character; setting 5 is supposed to be ‘average/normal’. I just figure in that particular fight being the very beginning, should not be guaranteed death at setting 5 if player is prepared with fighters and such, whereas Panama Raid, Spanish at Temple and such, can still be set up for certain death for low-level. Part of the problem is that in the specific fight (e.g. Emerald, or Isabella arrest) logic itself, there are adjustments to increase the fighter stats parameters, that are then passed to the MakeCoolFighter, which itself again adjusts the stats up for the difficulty level…and the thing is you’re already outnumbered, and they not only make the fighters vastly outranking the player, far more deadly, far more hardy HP, with their own revival potions, more skill perks, then they also increase the number of them; all of this at each setting level above 1, with 5 becoming just as deadly, NPC damage-wise as setting 10 (per the damage code).

      As it stands, I am getting killed a couple times here and there at setting 5, which is better than how easy setting 1 can get as the player progresses.

      However, I was wrong about adjusting the animation speeds of the NPC (pistol pulls and blade swings appear to be WAY faster than your own); I didn’t actually change that as I first thought now that I’ve reviewed closely; I haven’t been able to ascertain how, or if there is a way to slightly tweak that. The NPCs get insanely fast at higher settings and I’d like to tweak that a little bit and experiment, but I’ve not figured if/how to do that just yet…still looking.

    • #2036
      Jeffrey
      Keymaster

      I had an idea…how about changing the perk application to an officer to readjust equipped items based on the new skills? Right now, for instance, giving an officer the Shootist or Clever Shot perk will not have that character seek their held items and equip a different gun if they have a gun better suited to their new capabilities within their item inventory; they will only do so if you trade them something after applying the perk. This could apply to pistol-specific perks, cuirass, even blades if their new energy levels warrant a slightly heavier blade that does more damage.

      I have already looked at the code and this would be relatively simple to do.

    • #2037
      Jeffrey
      Keymaster

      BTW, in the meantime, I already tried the perk-to-equip feature and it works. However, I discovered a minor flaw in the gun selection portion of my previous equip fix mod; it would work nearly 100% of the time, but I got ‘lucky’ in my perk test and found that a problem could present in the right circumstance, which I was. I had to strike out a return line I had meant to previously, but didn’t. I updated my .zip file for that piece, but have not uploaded this perk-to-equip thing until I hear back.

    • #2038
      modernknight1
      Keymaster

      Please do it Jeffrey. Its a great improvement I think. One can always continue doing as we used to in carefully arming our officers with only what we wanted them to have at a given time.

      MK

    • #2039
      Jeffrey
      Keymaster

      Done. I created a function and call it from SetCharacterPerk. It will apply to ANY officer (not just fighters). Upon grant of any new perk, an officer/companion will scour their item inventory and equip items they hold that fit their capabilities.

      I tend to have officers hold items that I will want them to equip later on anyway, to free up my own carried load, so this is nice to eliminate the need to always approach and trade after new perks to get them to equip the items they already hold.

      File changed is now in my .zip link and I just added a function to perks.c, and some very slight change to SetCharacterPerk:

      //Mod for applying item equip logic after an officer receives new perk
      void ApplyItemEquipAfterPerk(ref refCharacter) {
      
      	if(!CheckAttribute(refCharacter, "id")) return;
      	//The following is derived from itemstrade.c and itemsbox.c
      	//Calls functions in CharacterUtilite.c to apply logic to equip item from refCharacter's inventory
      	if (CheckAttribute(refCharacter, "skill.Fencing")) {
      		EquipCharacterByItem(refCharacter, FindCharacterItemByGroup(refCharacter,BLADE_ITEM_TYPE));
      		EquipCharacterByItem(refCharacter, FindCharacterItemByGroup(refCharacter,CIRASS_ITEM_TYPE));
      	}
      	if (CheckAttribute(refCharacter, "skill.Pistol") && GetCharacterSkill(refCharacter,"Pistol") > 0.1 )
      	{
      		EquipCharacterByItem(refCharacter, FindCharacterItemByGroup(refCharacter,GUN_ITEM_TYPE));
      	}	
      
      	return;
      } 
    • #2041
      Jeffrey
      Keymaster

      I found that the Mao Kun map is not giving +15 navigation bonus. Added the following to RPGUtilite.c

      // Maokun
      skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_SAILING, "Maokun", iLev15Bonus);
    • #2043
      modernknight1
      Keymaster

      I didn’t put that map in. It was Officerpuppy’s work. He probably didn’t get it integrated into all the right places and I never bothered checking. Easy to fix though.

      MK

      EDIT: BTW I saw what Thagarr wrote on PA. Thanks for the excellent post over there. I plugged their web address into that google tool that you provided and it shows PA! as a website that puts malware on your PC. Yet he criticizes us??? WOW! Just wow! Those people just continue to amaze me. Maybe you should ask him what his “Very good reason” is. Because I haven’t got a clue. As I’ve said before, I have never attacked them and wouldn’t even have the ability to do that over this GoDaddy hosted wordpress plug in site. Also I am not and have never data mined. I have no reason to do that so I have no idea what he’s talking about. I am quite comfortable with my 100 percent colonel’s retirement pension and VA disability coming in every month and my part time consulting jobs. I don’t need to take time out to piddle around with their sad asses. He’s either a psycho or just very desperate to smear me and our site at this point. They seem almost dead over there now. Wonder why? With a few more comments like that I will have enough to slap a libel suit on them for defamation and if they continue to give me the ammunition boy will I ever do it to them – LEGALLY!

      MK

      • This reply was modified 8 years, 7 months ago by modernknight1.
      • #2047
        Jeffrey
        Keymaster

        LOL, the irony and hypocrisy of it all when viewing PA! from google safe browsing report, eh?

        I don’t know any of you personally, but just entered both sites intent on maybe trying to help rectify problems, firm up some lacking areas that I found, things I thought could benefit from problems I found and could fix in AoP COAS, GOF 1.2 and ERAS 2. You were receptive. Some of that crowd has been vaguely hostile toward me from the start. Hylie Pistoff, in the Black Knight ERAS 2 Mod thread, accused me of lying and that my claims of remedy ‘are suspect,’ then immediately locked that open thread to cease further response. They at PA! are mostly unreceptive and unwelcoming to me as a new contributor…and it’s starting to grate on me because I’ve done nothing to warrant that treatment — just thought I was offering something helpful.

        Your prompt to ask about those ‘really good reasons’ and google’s malware warning about PA! were already on my mind and I’ve been debating about a retort, but am conflicted about churning up even more animosity…just not sure. But trust me, you having no clue what Thagarr is talking about is not surprising, as it is he that has no idea what he’s talking about in this case; he doesn’t even appear to know what data-mining is. It’s not even necessarily a malicious thing, though I’m sure his use of the the term itself is probably meant as a scare tactic to preclude people visiting that evil, ‘other site’ a few of them seem so intent on childishly trashing.

        Facebook data mines. Verizon tracks and data mines. Google data mines…especially google. They have the wherewithal to inject IDs/headers and in the case of Verizon, inject IDs into the network traffic of both your request/response; they capture/store everything in huge databases and mine it with sophisticated algorithms for marketing/decision making.

        You uploading code to a remote, hosted GoDaddy site are likely not privy to much nefarious activity unless you were providing URL links to off-site malware as download; the claim to be hijacking browsers is ridiculous. I see no such thing here and your ISP host would never allow such code to reside on their servers; their internal virus-scanners would eliminate them.

        Anyway, I’ve been mulling a retort, but unsure about the wisdom and frankly, I’m sure it would be a waste of my time…would just turn into a flame war.

    • #2049
      modernknight1
      Keymaster

      Agree Jeffrey. I don’t really even let it bother me any more. Better to be the adults here I think. After all we have the high ground here.

      MK

    • #2050
      Jeffrey
      Keymaster

      This investigation was prompted by two items: Armillary and Spectacles. According to the descriptions, one is supposed to add to Insight and the other Talent of the PIRATE skills:

      itmname_Mineral18_1 {Spectacles} (+10 Insight=Perception SPECIAL_P – Exp rate of: Light Fencing, Accuracy, Sailing, Repair, Stealth)
      itmname_Mineral10_1 {Armillary} (+10 Intellect=Talent SPECIAL_I – Exp rate of: Rank rate, Leadership, Commerce, Cannons, Sailing, Grappling)

      However, nothing in In RPGUtilite.c is set to do this. Also, I notice that the function for adjusting PIRATE values is slightly wrong.

      int GetCharacterSPECIALSimple(ref _refCharacter, string skillName)
      {
      	if (!CheckAttribute(_refCharacter,"SPECIAL."+skillName) )
          {
              return 3;
          }
      	int skillN = sti(_refCharacter.SPECIAL.(skillName));
          // Health
          if (sti(_refCharacter.index) == GetMainCharacterIndex() && MOD_SKILL_ENEMY_RATE > 1) // íå õàëÿâà
          {
              skillN = skillN + GetHealthNum(_refCharacter) - 6; // max -5
          }
          // boal ó÷åò âåùåé -->
          /*if (IsCompanion(_refCharacter) || IsOfficer(_refCharacter))
          {
              // áðîíçîâûé êðåñò +1 óäà÷à
          	//skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_SNEAK, "jewelry9", 1);
      	
      	skillN = skillN + SetCharacterSkillBySculArtefact(_refCharacter, skillName);
          	//  itmname_Coins		{Ìîíåòà àöòåêîâ} (-5 óäà÷à)
          	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_FORTUNE, "Coins", -50);
      
      	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName);
          	//  itmname_Opium		{Ìîíåòà àöòåêîâ} (-1 óäà÷à)
          	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_FORTUNE, "itmname_Opium", -10);
      
      	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName);
          	//  itmname_Mineral3_1		{Ìîíåòà àöòåêîâ} (-1 óäà÷à)
          	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_DEFENCE, "itmname_Mineral3_1", -10);
      
      	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName);
          	//  itmname_blade86		{Ìîíåòà àöòåêîâ} (-1 óäà÷à)
          	skillN = skillN + SetCharacterSkillByItem(_refCharacter, skillName, SKILL_FORTUNE, "itmname_blade86", -30);
      
          	// íåëüçÿ :(  Èíà÷å ðåêóðñèÿ áåç âûõîäà
          	if (GetItemsWeight(_refCharacter) > GetMaxItemsWeight(_refCharacter))
          	{
        	        skillN -=2;
          	}
          	// boal ó÷åò ïåðåãðóçà 19.01.2004 <--
      	} */
      	// boal <--
      	if (skillN <= 1) skillN = 1;
      	if( skillN > SPECIAL_MAX ) skillN = SPECIAL_MAX;
      
      	return skillN;
      }

      In the function SetCharacterSkillByItem, it does nothing if skillName parameter does not match the very next parameter. Since GetCharacterSPECIALSimple is always called with a constant like SPECIAL_I or SPECIAL_P, that parameter will never match SKILL_SNEAK or SKILL_FORTUNE. That is why the cursed black pearls don’t affect Luck (this is evident in GOF 1.2 as well), the newer addition of Opium doesn’t affect luck in ERAS either, etc. These should be moved to GetCharacterSkillSimple (and in the case of Opium, etc. the .name changed to the .id) so that they work as intended.

      Also, if the spectacles and armillary are supposed to boost Talent and Insight, those scores are 1-10, so should probably not +10, but maybe +1? The description and their bonus should then be changed, then added to the function GetCharacterSPECIALSimple. Should I make these changes?

    • #2051
      modernknight1
      Keymaster

      Yes please do. I was putting this stuff in at breakneck speed and often in the late hours of the night. I’m surprised you haven’t found more mistakes.

      Thanks Jeffrey

      MK

    • #2052
      Jeffrey
      Keymaster

      Done. Change to RPGUtilite.c and ItemsDescribe.txt to indicate +1 for the two, instead of +10. Files at my link.

      I have the spectacles
      Bonus Display

    • #2054
      Jeffrey
      Keymaster

      Well this is unfortunate. I attempted to board an English 5th rater and the game created a boarding save, but hung up during the loading screen…just froze. Since they had struck their colors and were just sitting there, I reloaded and tried boarding with 3 different ships from my squadron and the same thing each time.

      I notice the virtual memory of start.exe just continues to climb and after several minutes, the game will just crash. An error.log is NOT created, just some output in both compile.log and system.log. Since I tried different ships, I figure it must be something with the English 5th rater? I don’t recall ever boarding one before, but I would think I had by now? Can’t say for certain. I still have the save, but nothing to tell me what might be going wrong. I had actually boarded a 4th rater just prior, during the same battle, with no issues and really haven’t had this sort of problem.

      Not sure what to start investigating.

    • #2056
      modernknight1
      Keymaster

      I’m stumped. The English 5th rater is the Unicorn model and I’ve taken it many times and used it as my own ship even, so I don’t know what could be going on?

      MK

    • #2057
      Jeffrey
      Keymaster

      Yeah, that’s the thing…I don’t think it’s necessarily English 5th raters, but some other variables have converged in this instance. I can almost swear I’ve also boarded them in the past. I just wish I knew how I could somehow glean more information as to what’s happening, give a clue so we can see if there’s a way to somehow fix the situation. That virtual memory just starts spiraling out of control consumption right when I submit a board action.

    • #2058
      Jeffrey
      Keymaster

      If you’re curious, and you have a copy of your original ERAS 2 I got from your download link, putting my files over that set, I have just uploaded my save file along with the updates I’ve been playing with and you can try it. Maybe with your experience with this game you can see if the logs tell you anything.

      As for me, I just left them adrift and went on my way after a few unsuccessful tries 🙂

      https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #2198
      modernknight1
      Keymaster

      Yes I always keep back up copies of each version on a 1.5 terabyte external drive. I will have a look Jeffrey.

      As you’ve said before there are some unexplainable things about how this game works. I am primarily a master of workarounds. Just sailing away is a workaround I’ve used a few times myself.

      MK

    • #2204
      Jeffrey
      Keymaster

      Employing the ‘sail away’ workaround is not all that bad, considering.

      Remember the dreaded ‘Bad Save’ one used to encounter every once in awhile in vanilla and GOF, and even in ERAS, since it derived from them? It used to happen sometimes during F6 Quick Save. It used to happen during the standard save action. It also used to happen sometimes during the boarding save, where the game would act just like this — boarding load screen, wait and wait, then the game crashes, relaunch only to find that the save didn’t ‘take’ and the slot showed that despicable ‘Bad Save’ image. Ugh!

      I always held my breath when the game was saving. I also used to employ an anticipatory workaround for this glitch, by selecting save, then clicking at least 3 slots back from where I was (or an empty slot). After that succeeded (or not), the immediately follow-up with an F6 quick save. Now I’ve two for exactly the same game state. If one crashed/bad, then I’m still OK and my most recent is intact, because if it crashed during save, that slot you selected (or the sole quick-save slot) was now corrupted and all was lost.

      I’ve not had one in literally two months now. I am so confident now, that I don’t even do my 3 slots over rule anymore (except in cases where I specifically want to preserve a scenario for repeated testing)…or hold my breath during save :). I think it had something to do with some of those erroneous array size vs. max index problems and a few divide-by-zero equations that were found and resolved. That fact alone is one of the most encouraging improvements. One can live with an occasional crash if saving frequently and one can simply resume where left off, but when the save itself crashes and corrupts your latest state and you have to go further back, THAT is aggravating and risks players giving up on the thing entirely!

    • #2209
      modernknight1
      Keymaster

      No you have most certainly done some really amazing work here Jeffrey. You’ve enhanced the stability and quality of gameplay markedly. Thank you again.

      Working hard to get the rest of the new patch done. Gotta travel again in another week and would like to have it finished by then. After finding that picture of the awesome little English snow in that old Dutch print of Curacao (SEE MY FRONT PAGE STORY ON THE DUTCH WEST INDIES), I wanted to do one more skin for one of the new ships coming out with the patch. There are several more very cool weapons coming with the patch as well.

      You might actually be able to help me with something. I have been able to successfully add the additional fighters, but I can’t get their icons on the interface to show up below the already existing three on the upper left of the GUI. I thought the clue would be in how Saint Ashley did it in the 8 ship max mod, but I can’t find the relevant piece of code. I am probably trying too hard and just need to step away from it for a few hours.

      MK

      • #2210
        Jeffrey
        Keymaster

        Timely…I recently reread some of your goals for this and upon reading the inclusion of additional fighters, since I was recently reviewing that Ascold mistake, and borrowed from it to add fighters back onto the shore (for high difficulty settings to deal with possibly from 5 to 10 enemies solo), I slightly cringed at added fighters feature upon realization that there are many spots where the code to retrieve and handle the fighter officers, ‘they’ simply do a for loop 1-3; apparently due to fighters apparently residing in the first 3 index spots of your officer/companion array.

        Example:

        for (i=1; i<=3; i++)
        {
                        string officers = "Fellows.Passengers.Officers."+"id"+i;
                        if(CheckAttribute(pchar, officers))
        ...

        This will be problematic as in order to include further fighters, we’d have to find all those spots and change things up. We should probably add a constant too, for MAX_FIGHTERS or something.

        I can look at the screen code, but it would be helpful to see what has been done so far, as I’m wondering if fighters will still reside in the first index entries of the officers? If not, it will no longer work to simply loop instead of 1-3, but 1-6, as positions 4, 5 and 6 will have non-fighters and we’d need a different way to loop through all officers and add a way to query about position held in code like shown above. If the added fighters will be in the beginning, 4-6 next to 1-3, current games will definitely be broken because 4, 5, and 6 spots are already taken by Navigator, Gunner, etc.

    • #2235
      Jeffrey
      Keymaster

      I did a little bit of poking around RE fighters. Also, I’m not sure if/how the current Passengers.Officers object will support additional properties: Passengers.Officers.id4, Passengers.Officers.id5 Passengers.Officers.id6?

      character_all.h

      void FillCharactersScroll()
      .
      .
      .
      for(int k=1; k<4; k++) //This handles fighters appearing in the scroll.  Notice k only goest to 3
      .
      .
      .

      character_all.c

      void AcceptAddOfficer()
      
      switch (nCurScrollNum)
      		{
      			case 1:
      				pchar.Fellows.Passengers.navigator = iChar;
      			break;
      
      			case 2:
      				pchar.Fellows.Passengers.boatswain = iChar;
      			break;
      
      			case 3:
      				pchar.Fellows.Passengers.cannoner = iChar;
      			break;
      
      			case 4:
      				pchar.Fellows.Passengers.doctor = iChar;
      			break;
      
      			case 5:
      				pchar.Fellows.Passengers.treasurer = iChar;
      			break;
      
      			case 6:
      				pchar.Fellows.Passengers.carpenter = iChar;
      			break;
      			
      			//Cases 7 through 9 are for fighters in the scroll
      			case 7:
      				SetOfficersIndex(pchar, 1, iChar);
      				bNeedFollow = true;
      			break;
      
      			case 8:
      				SetOfficersIndex(pchar, 2, iChar);
      				bNeedFollow = true;
      			break;
      
      			case 9:
      				SetOfficersIndex(pchar, 3, iChar);
      				bNeedFollow = true;
      			break;
      
      			//This will need to be extended to handle additional fighters
      		}

      Character Utilite.c

      The following are all for fighters…and will need to be extended to offer more than 3. Then also search all code that calls these functions and see if they do a loop of 1-3 (like Leif dialog does) and change them. Offhand, I suspect itemsbox, store/trade code, etc.

      int GetOfficersQuantity(ref _refCharacter)
      {
      	int idx=0;
      	for(int i=1; i<4; i++)
      	{
      		if( GetOfficersIndex(_refCharacter,i)!=-1 ) idx++;
      	}
      	return idx;
      }
      int GetOfficersIndex(ref _refCharacter,int _OfficerNum)
      {
      	if(_OfficerNum<0) return -1;
      	if(_OfficerNum>3) return -1;
      	if(_OfficerNum==0)
          {
              if(!CheckAttribute(_refCharacter,"index")) return -1; // boal fix
              return MakeInt(_refCharacter.index);
          }
      
      	string compName = "id"+_OfficerNum;
      	if(!CheckAttribute(_refCharacter,"Fellows.Passengers.Officers."+compName)) return -1;
      	if(sti(_refCharacter.Fellows.Passengers.Officers.(compName)) < 1)
      	{
      		return - 1;
      	}
      	return sti(_refCharacter.Fellows.Passengers.Officers.(compName));
      }
      
      int SetOfficersIndex(ref _refCharacter,int _OfficerNum, int _OfficerIdx)
      {
      	int i;
          if(_OfficerNum == -1)
      	{
      		for(i=1; i<4; i++)	
      		{
      			if(GetOfficersIndex(_refCharacter, i) == -1)
      			{
      				_OfficerNum = i;
      				break;
      			}
      		}
              // fix
              if (_OfficerNum == -1)
              {
                  _OfficerNum = 3; // íåò ìåñòà?? äà ïîôèã
              }
      	}
      	if(_OfficerNum<1) return _OfficerIdx;
      	if(_OfficerNum>3) return _OfficerIdx;
      
      	if(_OfficerIdx!=-1)
      	{
      		for(i=1;i<4;i++)
      		{
      			if(GetOfficersIndex(_refCharacter,i)==_OfficerIdx) return -1;
      		}
      		AddPassenger(_refCharacter,GetCharacter(_OfficerIdx),false);
      	}
      
      	string compName = "id"+_OfficerNum;
      	int retVal = GetOfficersIndex(_refCharacter,_OfficerNum);
      	_refCharacter.Fellows.Passengers.Officers.(compName) = _OfficerIdx;
      	if(_OfficerIdx>=0)
      	{
      		LAi_SetOfficerType(GetCharacter(_OfficerIdx));
      		Characters[_OfficerIdx].location = _refCharacter.location;
      	}
      	if(retVal>=0)
      	{
      		LAi_SetCitizenTypeNoGroup(GetCharacter(retVal));
      		Characters[retVal].location = "none";
      	}
      	Event(EVENT_CHANGE_OFFICERS,"");
      
      	return retVal;
      }
      bool RemoveOfficersIndex(ref _refCharacter, int _OfficerIdx)
      {
      	if(_OfficerIdx==-1) return false;
      	for(int i=1; i<4; i++)
      	{
      		if(GetOfficersIndex(_refCharacter,i) == _OfficerIdx)
      		{
      			SetOfficersIndex(_refCharacter,i,-1);
      			return true;
      		}
      	}
      	return false;
      }
      • #2238
        Jeffrey
        Keymaster

        Ha! Never mind about questioning whether the support for additional ids is there. Looks like they are malleable. Just tried this:

        pchar.Fellows.Passengers.Officers.id5 = -5;
        Trace(pchar.Fellows.Passengers.Officers.id5);

        Totally works without error. So it’s just a matter of changing those things I’ve mentioned and looking for all other related code that might limit to a loop of 1-3. Looks like the save/load screen does some with it too, so it can display the officer set for each game-save slot…things like that.

    • #2239
      modernknight1
      Keymaster

      Jeffrey, VERY COOL!

      Here’s what I’m working with. I think the solution for getting the icons to show up is in the appropriate interface files for the 8 ship max mod (regarding the GUI location of the icons) That’s the piece I haven’t had time to sort out.

      Maybe you can do something with all of this and get it working because I am working on other stuff at the moment and was going to get back to this in a couple of days….

      Files List
      Playlogic\Age of Pirates 2\Program\INTERFACE\

      character_all.c
      character_all.h
      interface.c
      interface.c.bak
      interface_utils.c
      utilite.c
      Vorius_utils.c

      1. character_all.c
      There are three places I made changes:

      First look for:
      Code:

      case 9:
      sHeader = XI_ConvertString(“fighter”);
      sText1 = XI_ConvertString(“Officer_Descr”);
      sText2 = XI_ConvertString(“Officer_Up”);
      break;

      Copy and add 4 more similar code after that but change the case’s integer…
      Code:

      // Increase to maximum fighters
      case 10:
      sHeader = XI_ConvertString(“fighter”);
      sText1 = XI_ConvertString(“Officer_Descr”);
      sText2 = XI_ConvertString(“Officer_Up”);
      break;

      case 11:
      sHeader = XI_ConvertString(“fighter”);
      sText1 = XI_ConvertString(“Officer_Descr”);
      sText2 = XI_ConvertString(“Officer_Up”);
      break;

      case 12:
      sHeader = XI_ConvertString(“fighter”);
      sText1 = XI_ConvertString(“Officer_Descr”);
      sText2 = XI_ConvertString(“Officer_Up”);
      break;

      case 13:
      sHeader = XI_ConvertString(“fighter”);
      sText1 = XI_ConvertString(“Officer_Descr”);
      sText2 = XI_ConvertString(“Officer_Up”);
      break;
      // END, Increase to maximum fighters

      Second,
      Code:

      case 9:
      SetOfficersIndex(pchar, 3, iChar);
      bNeedFollow = true;
      break;

      Copy and add 4 more similar code after that but change the case and OfficersIndex’s integers…
      Code:

      // Increase to maximum fighters
      case 10:
      SetOfficersIndex(pchar, 4, iChar);
      bNeedFollow = true;
      break;

      case 11:
      SetOfficersIndex(pchar, 5, iChar);
      bNeedFollow = true;
      break;

      case 12:
      SetOfficersIndex(pchar, 6, iChar);
      bNeedFollow = true;
      break;

      case 13:
      SetOfficersIndex(pchar, 7, iChar);
      bNeedFollow = true;
      break;
      // END, Increase to maximum fighters

      Third,
      Code:

      case 9:
      RemoveOfficersIndex(pchar, GetOfficersIndex(pchar, 3));
      break;

      Again, copy and add 4 more similar code after that but change the case and OfficersIndex’s integers…
      Code:

      // Increase to maximum fighters
      case 10:
      RemoveOfficersIndex(pchar, GetOfficersIndex(pchar, 4));
      break;

      case 11:
      RemoveOfficersIndex(pchar, GetOfficersIndex(pchar, 5));
      break;

      case 12:
      RemoveOfficersIndex(pchar, GetOfficersIndex(pchar, 6));
      break;

      case 13:
      RemoveOfficersIndex(pchar, GetOfficersIndex(pchar, 7));
      break;
      // END, Increase to maximum fighters


      2. character_all.h
      Go to line 108 (mine GoF’s is here),
      Code:

      for(int k=1; k<4; k++)

      Change the integer 4 to 8,
      Code:

      for(int k=1; k<8; k++) // Increase to maximum fighters

      --
      3. interface.c
      See strings at line 2177,
      Code:

      string fighter1, fighter2, fighter3, fighter4, navigator, boatswain, cannoner, doctor, treasurer, carpenter;

      Add fighter5, fighter6, fighter7 and fighter8 in the string,
      Code:

      string fighter1, fighter2, fighter3, fighter4, fighter5, fighter6, fighter7, fighter8, navigator, boatswain, cannoner, doctor, treasurer, carpenter;

      Then look //officers pictures below strings above
      Code:

      // officers pictures
      if( GetOfficersIndex(pchar,0) < 0 ) { fighter1 = "*"; } else { fighter1 = GetFaceGroupName( GetOfficersIndex(pchar,0) ); } if( GetOfficersIndex(pchar,1) < 0 ) { fighter2 = "*"; } else { fighter2 = GetFaceGroupName( GetOfficersIndex(pchar,1) ); } if( GetOfficersIndex(pchar,2) < 0 ) { fighter3 = "*"; } else { fighter3 = GetFaceGroupName( GetOfficersIndex(pchar,2) ); } if( GetOfficersIndex(pchar,3) < 0 ) { fighter4 = "*"; } else { fighter4 = GetFaceGroupName( GetOfficersIndex(pchar,3) ); } Copy all codes above, and paste them below fighter4. Make changes to all Index's, fighter's integer like these, Code: // Increase to maximum fighters if( GetOfficersIndex(pchar,4) < 0 ) { fighter5 = "*"; } else { fighter5 = GetFaceGroupName( GetOfficersIndex(pchar,4) ); } if( GetOfficersIndex(pchar,5) < 0 ) { fighter6 = "*"; } else { fighter6 = GetFaceGroupName( GetOfficersIndex(pchar,5) ); } if( GetOfficersIndex(pchar,6) < 0 ) { fighter7 = "*"; } else { fighter7 = GetFaceGroupName( GetOfficersIndex(pchar,6) ); } if( GetOfficersIndex(pchar,7) < 0 ) { fighter8 = "*"; } else { fighter8 = GetFaceGroupName( GetOfficersIndex(pchar,7) ); } Next look for //GetCurLocationName(), Code: //GetCurLocationName() string savedata = label + "@" + fighter1 + "," + fighter2 + "," + fighter3 + "," + fighter4 + "," + Add fighter5, fighter6, fighter7 and fighter8 Code: //GetCurLocationName() string savedata = label + "@" + fighter1 + "," + fighter2 + "," + fighter3 + "," + fighter4 + "," + fighter5 + "," fighter6 + "," fighter7 + "," fighter8 + "," + -- 4. interface.c.bak The changes I made here exactly same as above - file interface.c -- 5. interface.utils.c Look for, Code: case 9: ret = "fighter"; break; Copy and add 4 more similar code after that and change the case's integer... Code: // Increase to maximum fighters case 10: ret = "fighter"; break; case 11: ret = "fighter"; break; case 12: ret = "fighter"; break; case 13: ret = "fighter"; break; // End, Increase to maximum fighters -- 6. utilite.c Find //fighters, Code: //fighters for(n=1; n<4; n++) Change integer 4 to 8, Code: //fighters for(n=1; n<8; n++) // Increase to maximum fighters -- 7. Vorius.utils.c See, Code: for(int i=1; i<4; i++) Also change integer 4 to 8, Code: for(int i=1; i<8; i++) // Increase to maximum fighters,default i<4 -- Note: Every i<8, n<8 and k<8 the default value is 4 EDIT: FOR SOME REASON THE LAST HALF OF THIS POST WONT ALLOW ME TO INSERT SPACES??? MK

    • #2244
      Jeffrey
      Keymaster

      I got everything working but one last bit. They show on the character scroll and you can assign/remove them. They show in trading at store/trading. As it stands, roughly two dozen files were changed:

      LandInterface.c
      LogInterface.c
      CharacterUtilite.c
      LSC_Q2Utilite.c
      QuestsUtilite.c
      RPGUtilite.c
      character_all.c
      character_all.h
      interface_utils.c
      itemstrade.c
      papermap.c
      utilite.c
      LAi_boarding.c
      LAi_groups.c
      LAi_init.c
      quests.c
      quests_reaction.c
      reaction_functions.c
      crew.c
      duel.c
      Cabin.c
      Vorius_utils.c
      LeifEricson.c

      For ease of changing, I added int MAX_NUM_FIGHTERS = 6; to CharacterUtilite.c and now all references that need that number for loops and such now use MAX_NUM_FIGHTERS.

      The one part I can’t quite find is to get them actually with you walking around and showing on the land interface icons. There are only 3 with me, though I increased everything else to 6. I’ve looked and looked, but can’t figure out where upon location load, it gets all my fighters; right now it only loads the first 3.

    • #2245
      modernknight1
      Keymaster

      I can’t believe how fast you are Jeffrey. It would have taken a day and half for me to get all of that done.

      You’re awesome! We are going to figure this out!

      MK

    • #2248
      Jeffrey
      Keymaster

      I think I got it figured out. In LAi_init.c:

      Characters[idx].location = pchar.location;
      Characters[idx].location.group = “officers”;
      Characters[idx].location.locator = pchar.location.locator + “_” + locIndex;

      Makes all the fighters part of the “officers” address group, then assigns them all a reload1_x locator id. I’m betting only reload1_1, reload1_2 and reload1_3 are the only valid locators in every location model. Hence, only the first 3 are loaded.

    • #2249
      modernknight1
      Keymaster

      Is there a way we could make up new character reload locators do you think?

      Have you see any kind of a directory that assigns X/Y coords by distance from the RPC? I sure haven’t – but haven’t been looking either.

      I have noticed in many places when you load or reload it takes a minute for your officers to find you. They will come running from around some corner.

      MK

    • #2253
      Jeffrey
      Keymaster

      No need. Just did an experiment, where I reuse the same locator ids and it works. I fast-traveled to the dock and they are all just standing near me:

      //Mod…in LAi_init.c

      int k = locIndex % 3;
      if(k==0) k=3;
      Characters[idx].location = pchar.location;
      Characters[idx].location.group = “officers”;
      //Characters[idx].location.locator = pchar.location.locator + “_” + locIndex;
      Characters[idx].location.locator = pchar.location.locator + “_” + k;

      Now the only thing left is the land interface still doesn’t show beyond 3. Not sure why as I’ve already adjusted that in LandInterface.c:

      void BLI_UpdateObjectData()
      
      for(i=0; i<=MAX_NUM_FIGHTERS; i++)
      
      void BLI_UpdateOfficers()
      {
      	SetOfficerTexture(0);
      	SetOfficerTexture(1);
      	SetOfficerTexture(2);
      	SetOfficerTexture(3);
      	//Mod for add'l fighters
      	SetOfficerTexture(4);
      	SetOfficerTexture(5);
      	SetOfficerTexture(6);
      	//End mod
      
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 0, objLandInterface.Parameters.iconTexture0);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 1, objLandInterface.Parameters.iconTexture1);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 2, objLandInterface.Parameters.iconTexture2);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 3, objLandInterface.Parameters.iconTexture3);
      	//Mod for add'l fighters
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 4, objLandInterface.Parameters.iconTexture4);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 5, objLandInterface.Parameters.iconTexture5);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 6, objLandInterface.Parameters.iconTexture6);
    • #2254
      Jeffrey
      Keymaster

      Posse! LOL

      Six?!

    • #2255
      modernknight1
      Keymaster

      AWESOME AWESOME AWESOME AWESOME AWESOME AWESOME AWESOME!!!!!!!!!!!!!!!!!!!

      AWESOME AWESOME AWESOME AWESOME AWESOME AWESOME AWESOME!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      AWESOME!!! YOU ARE INDEED DA SUPER CODER MAN EXTRAORDINAIRE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

      MK

    • #2256
      modernknight1
      Keymaster

      Man that’s like the super hot killer chic posse from HELL!!!!!!!!!!!!!!!!!!

      Not sure if I would wanna run into them or not in a dark alley? I think yes. That would be a good death and maybe they might like me. LOL

      If you’ve been watching Black Sails, I knew Anne Bonney was going to totally pone that messenger. She is BRUTAL!!!

      MK

    • #2257
      Jeffrey
      Keymaster

      LOL.

      It’s a quirk of mine…there are just enough females in this game to eventually have my entire officer/companion complement to almost be solely chics. So, every game I tend to strive for that. Suppose I’m a creepy weirdo 😉

      I will also say, the hat for Bonney is a great touch 🙂

    • #2258
      Jeffrey
      Keymaster

      Hmmm. Might be a constraint in the .dll source, rather than the Program codeset.

      Looking at the possibility of the message handler for this:

      SendMessage(&objLandInterface, “lls”, MSG_BATTLE_LAND_SET_ICONTEX, 6, objLandInterface.Parameters.iconTexture6);

      I found the constant MSG_BATTLE_LAND_SET_ICONTEX in battle_land.cpp:

      case MSG_BATTLE_LAND_SET_ICONTEX:
      		{
      			int texIdx = message.Long();
      			char param[256];
      			message.String(sizeof(param)-1,param);
      			if(texIdx>=0 && texIdx<4)
      			{
      				int newTexID = -1;
      				if(param[0]) newTexID = rs->TextureCreate(param);
      				TEXTURE_RELEASE(rs,m_idIconTexture[texIdx]);
      				m_idIconTexture[texIdx] = newTexID;
      			}
      		}
      	break;

      Note the if(texIdx>=0 && texIdx<4) line. Does not register any message containing a parameter beyond 3. Might be why the interface does not display further…

    • #2259
      modernknight1
      Keymaster

      I expected that. This is why I wanted to use the 8 ship max mod as a guide for how they got 8 ships icons to appear in the interface over the vanilla 5 ship icons.

      I believe the answer is there.

      MK

    • #2260
      Jeffrey
      Keymaster

      Though slightly different, the approach for both is similar, but apparently the battle interface for ships does not have a constraint.

      From BattleInterface.c (for ships)

      void AddShipToInterface(int charIndex)
      .
      .
      .
      for(int i=0; i<COMPANION_MAX; i++)
      	{
      		if(GetCompanionIndex(pchar,i) == charIndex)
      		{
      			myShip = true;
      		}
      	}
      .
      .
      .
      SendMessage(&BattleInterface,"llaall",BI_IN_CREATE_SHIP,charIndex,chRef,shipRef,myShip,shipRelation);

      From LandInterface.c

      void BLI_UpdateOfficers()
      {
      	SetOfficerTexture(0);
      	SetOfficerTexture(1);
      	SetOfficerTexture(2);
      	SetOfficerTexture(3);
      	//Mod for add'l fighters
      	SetOfficerTexture(4);
      	SetOfficerTexture(5);
      	SetOfficerTexture(6);
      	//End mod
      
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 0, objLandInterface.Parameters.iconTexture0);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 1, objLandInterface.Parameters.iconTexture1);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 2, objLandInterface.Parameters.iconTexture2);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 3, objLandInterface.Parameters.iconTexture3);
      	//Mod for add'l fighters
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 4, objLandInterface.Parameters.iconTexture4);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 5, objLandInterface.Parameters.iconTexture5);
      	SendMessage(&objLandInterface, "lls", MSG_BATTLE_LAND_SET_ICONTEX, 6, objLandInterface.Parameters.iconTexture6);

      I am downloading Visual C++ (I deal with C# for my job), and will try compiling a new .dll and see what happens if I change that .cpp code.

    • #2262
      modernknight1
      Keymaster

      Crossing my fingers. Thank you Jeffrey!

      MK

      • #2263
        Jeffrey
        Keymaster

        Ugh! Might be bit…

        Apparently, after installing C++, I have to reapply SP1 to VS, instead of just applying to my new product, it insists on downloading and applying it to ALL of my VS components (C#, VB .NET, Web Dev, Command Prompt, etc.). Taking forever…

    • #2264
      Jeffrey
      Keymaster

      A bit of a problem. There are missing files (just a sample, there are more):

      1> fatal error C1083: Cannot open include file: ‘..\..\START\program\battle_interface\log_msg.h’: No such file or directory
      1> battle_mansign.cpp
      1> fatal error C1083: Cannot open include file: ‘..\START\PROGRAM\NET\net_defines.h’: No such file or directory

      There is also some confusion on my part. Battle_interface folder contains a battle_land.cpp file that is 19 kb. Though that is the one that contains the code with a message case for MSG_BATTLE_LAND_SET_ICONTEX, it is not the one included in the project. The one in the actual project is only 4kb, located in a subfolder \land, and it also does not contain a message case for MSG_BATTLE_LAND_SET_ICONTEX.

      I’m not able to proceed until I understand what to do about the dupe files (there are many, they are just located in the root, rather than some subfolders, yet they contain defs/methods that look to be for the same class), which ones I should use?

    • #2265
      modernknight1
      Keymaster

      I am aware there are lots of duplicate files. Some are probably my fault even because of all my non documented experimentation with different games files from various sources over time. Sorry.

      I don’t know what to recommend. Maybe compare them to a version of vanilla files if you have a pure vanilla version of the game?

      MK

    • #2266
      Jeffrey
      Keymaster

      No, these are the source for the .dll and such you gave me. I think I’m getting that perhaps there were the originals, then some modifications were made by someone in 2010, and they just moved the originals to the root, so the older files should probably not be used. In any case, I’m still missing the complete set as there are some .h includes that are simply missing. But it’s looking to definitely be a limitation within the battle_interface.dll…from the battle_mansign.cpp:

      #define MAX_MAN_QUANTITY	4
      
      for( n=0; n<MAX_MAN_QUANTITY; n++ )
      	{
      		m_Man[n].pntPos.x = 20.f;
      		m_Man[n].pntPos.y = 20.f + (m_pntBackIconSize.y + 10.f) * n;
      	}

      If you look in LandInterface.c, ‘mansign’ is definitely the object for the fighters:

      objLandInterface.ManSign.manstatetexturename	= "battle_interface\ShipState.tga";
      	objLandInterface.ManSign.manstatecolor			= argb(255,128,128,128);
      	objLandInterface.ManSign.manhpuv				= "0.0,0.109,0.5,0.6875";
      	objLandInterface.ManSign.manhpoffset			= "-32,-13";
      	objLandInterface.ManSign.manhpiconsize			= "64,74";
      	objLandInterface.ManSign.manenegryuv			= "0.5,0.109,1.0,0.6875";
      	objLandInterface.ManSign.manenegryoffset		= "32,-13";
      	objLandInterface.ManSign.manenergyiconsize		= "64,74";
      
      	objLandInterface.ManSign.gunchargetexturename	= "battle_interface\ShipClass.tga";
      	objLandInterface.ManSign.gunchargecolor			= argb(255,168,168,48);
      	objLandInterface.ManSign.gunchargebackcolor		= argb(255,188,48,48);
      	objLandInterface.ManSign.gunchargeuv			= "0.0,0.0,1.0,1.0";
      	objLandInterface.ManSign.gunchargeoffset		= "-14,-50";
      	objLandInterface.ManSign.gunchargeiconsize		= "64,16";
      	objLandInterface.ManSign.gunchargeprogress		= "0.0625, 0.219, 0.359, 0.5, 0.641, 0.781, 0.983";

      If I could get the missing files for the .dll stuff and compile this, we could change it. Until then, the add’l fighter icons will not show.

    • #2267
      Jeffrey
      Keymaster

      Ha! Never mind…I see what you’re saying…the code for the .dll stuff actually does share some .h with the Program source that was provided with the game. I looked and sure enough, there is a net folder, with Net_Defines.h in it under Program\net. It wasn’t with the .dll source, but I can obviously just copy that to my project folder too.

    • #2268
      Jeffrey
      Keymaster

      Now all that’s missing is DirectX files such as d3dx8math.inl. The SDK is available from Microsoft, so I’m downloading that now. I think I’m getting closer.

    • #2273
      Jeffrey
      Keymaster

      OK, it looks like someone worked to better modularize some of the code. I successfully compiled battle_interface.dll, but it crashes the game, probably because it needs hooks into the EngineCommon someone wrote into this. The runtime error is “Can`t create render service”. Since this was all the newer .cpp files (those duplicates I mentioned), I moved the older ones into the project, which in turn dissociated the EngineCommon reference, and rebuilt with the older files and now I am only missing one piece.

      Can you find a file anywhere in your source: common_h\dx8render.h

      It is not part of DirectX SDK and I suspect it was written by the game developers to specifically implement/invoke DirectX, so it looks particular to this game source and not actually a common DirectX include. That appears all I’m missing as you’ll note that the error is suspiciously tied to the name of that file.

    • #2274
      modernknight1
      Keymaster

      I took a look. I gave you everything I had. I looked at other Storm series offerings like GIC, SOFS and the German MOTCS. Nothing.

      If you go into the Common_h\DirectX8 file there is a render.h file at the bottom
      Maybe try taking that render.h file and duplicate it and rename the copy dx8render and plopping it into common_h or even leaving another copy in the DirectX8 file.

      This wouldn’t be the first time I have found files in the wrong place(s) or misnamed.

      One other thing I should mention is that in the module folder there is a DX8render dll file. It is possible that I put a non original dll file there since I used to be so bad at documenting my changes. The COAS one should be dated 2008 and the TEHO one 2012. Just can’t remember if I did that or not.

      MK

      • #2275
        Jeffrey
        Keymaster

        LOL, you are on the right track. I did exactly that with render.h. Copied it, but had to rename the implemented class name too. After that, those errors disappeared, so it was really just a clone class. However, we are at another impasse.

        In the ‘old’ battle_land.cpp, there are some method calls:

        m_pCommandMenu->SetMode(0,-1,-1,-1);
        m_pCommandMenu->ResetStoredCommand();

        However, SetMode and ResetStoredCommand do not appear in any other source file. They aren’t implemented by any class and no other reference. Without the source that defines/implements them, I can’t compile this.

        The ‘new’ battle-land.cpp is totally different and doesn’t even process messages for MSG_BATTLE_LAND_SET_ICONTEX, as sent by LandInterface.c in BLI_UpdateOfficers. Also, if I were to dive in and just try compiling the whole solution with what looks like a newer/revised codeset, I would be copiling all the dlls, and have to replace everything in the modules folder in order to even try it…and it’s highly unlikely, as it seems what I have is a mismatch of old/new code that doesn’t all compile together. As if it was being worked on and not the actual functional release.

        They have changed class names, removed/added methods that old files can’t compile…include files are not in the same location as specified in the #define statements and I’ve had to revise. Given that in this particular battle_interface, the new code doesn’t seem to even address the MSG_BATTLE_LAND_SET_ICONTEX messages, I don’t think it’s complete and I can’t even compile the old version as I’m missing methods in the MESSAGE_ICONS class, that apparently used to be there, but I don’t have that code.

    • #2276
      Jeffrey
      Keymaster

      But the battle_land.cpp is definitely the limit of the icon display. Bummer as if I had the right code to compile, I’m confident it would work. You can see the limit to display here in the for(int i=0; i<4; i++):

      rs->TextureSet(0,m_idShadowTexture);
      			rs->DrawBuffer(m_idVBufCommandos, sizeof(BI_COLOR_VERTEX), m_idIBufCommandos, m_nMaxCommandos*4,m_nCommandos*4, 0,m_nCommandos*2, "battle_shadow_Rectangle");
      			int iconNum=0;
      			for(int i=0; i<4; i++)
      			{
      				if(iconNum>=m_nCommandos) break;
      				if(m_idIconTexture[i]<0) continue;
      				rs->TextureSet(0,m_idIconTexture[i]);
      				rs->DrawBuffer(m_idVBufCommandos, sizeof(BI_COLOR_VERTEX), m_idIBufCommandos, iconNum*4,4, 0,2, "battle_tex_col_Rectangle");
      				iconNum++;
      			}
    • #2277
      Jeffrey
      Keymaster

      Here is another instance where GetComState is not defined:

      CONTROL_STATE cs;
      if(m_pCommandMenu->GetComState()>0)

      Compiler error: \battle_interface\land\battle_land.cpp(95): error C2039: ‘GetComState’ : is not a member of ‘BICommandList’

      GetComState is found in no other file search of the entire codeset, except for the call in battle_land.cpp. Also, m_pCommandMenu was originally defined as a BATTLE_COMMAND object, but that no longer exists in any files either. It appeared to be replaced by BICommandList, as it had some similar methods…but of course GetComState was removed. But since I don’t have the BATTLE_COMMAND source, and only the newer BICommandList, this doesn’t work to compile.

      There are other problems just like this…that mismatch and missing stuff.

    • #2278
      modernknight1
      Keymaster

      OK damn.

      The only person who might have the original files is Pirate KK and he hasn’t been on the PA! forums in forever. I have no way of asking anyone over there to contact him because I am banned over there because I am such bad person for calling a dickhead a “Hitler nutjob” for deleting long posts that I’d spent an hour writing.

      I have one other thing I might try. My youngest son has an account on Corsairs Harbor and he knows Russian (went to college for languages and Russian was his primary). I think he has made some friends over there. I can try contacting Joruba and Blackmark studios for help and my son could put a message on C.H. asking if any of the old coders working on the original COAS still have those old code files. (That forum is way more active than PA so maybe we might get something)

      Its worth a try.

      In the meantime I think we should leave the new fighters in place without the icons. Just because its so cool and people will love it and want it. I am a glass half full person and I believe the solution will present itself sooner than later.

      HOOAAAH!!!

      Thanks for all you work on it Jeffrey. Once again….YOU ARE AWESOME!

      MK

    • #2279
      Jeffrey
      Keymaster

      Yeah, it’s so close…I know exactly where the limit lies and if we only had the source for the actual functional release, it would be an easy and quick change. I’ll cross my fingers we can somehow obtain it.

      In the meantime, I was actually thinking the same thing. The fighters are there, and you can interact/trade/purchase things for them. The only thing the icons let you know is their health and when it disappears, they are dead 🙂 I don’t think a few missing is entirely a deal-breaker. I will package this up separately, so you can review the individual files/changes, and put it in my folder link.

      Also, I had my limit set at 6, but after seeing you were thinking 8, I made a couple slight modification in the case/message statements so that it can be changed by merely changing just one line at the top of CharacterUtilite.c: int MAX_NUM_FIGHTERS = 6;

    • #2280
      Jeffrey
      Keymaster

      Oh, one thing I did not do is try to add them to the load game file screen. Since there are only 10 spots (you, 3 fighters, 6 other officers) and no scroll, I opted to skip that because they would not currently fit across the bottom.

      That is the code you saw for creating the officer’s pictures in interface.c.

    • #2281
      Jeffrey
      Keymaster
    • #2288
      Jeffrey
      Keymaster

      Ah, I did not test boarding. There was a bug, but that is now fixed. But if downloaded prior to this message, get the newer one.

    • #2311
      Jeffrey
      Keymaster

      Well, well…

      Just for grins, I created a C++ project folder and copied over the fresh, unadulterated source for the game I have. It didn’t compile. But the errors were relatively simple (though a bit time consuming 🙂 ) to rectify, without modifying the source code. I was missing some static libraries for FMOD, some references to static libraries to DirectX, and some Microsoft Foundation Class (MFC) includes.

      I had recently downloaded the SDK for DirectX, so pointed a reference to its needed libraries: d3d8.lib, d3dx8.lib, ddraw.lib, dxguid.lib. My personal version of VS is Express, which doesn’t include MFC, but I have resources and just copied the include/implementation source from a VS Pro instance I have access to, and pointed a reference to them. The FMOD static library, fmodex_vc.lib, was easy enough to find and download.

      Just a couple slight problems left. There was a call to GetCPUUsage in FMOD, that my .dll doesn’t support, but looking at the call, they don’t really do anything with the information retrieved after the call, so I commented that one line out. Also, the ‘net’ class instantiation contains several source files that I don’t have in the original source at all:

      #include “Script\NetFile.inl”
      #include “Script\NetMessage.inl”
      #include “Script\NetSocket.inl”
      #include “Script\NetInet.inl”

      But, all the function calls for these includes are in the class initialization and I don’t really need the internet/online gaming part anyway, so commented out the missing includes and the calls to its online features in the class init. That’s it…two very small, insignificant, and irrelevant changes. After that:

      ========== Rebuild All: 53 succeeded, 0 failed, 0 skipped ==========

      That’s right. Everything compiled. Makes a new start.exe and all new .dlls. Let’s run it…

      Crash.

      Remember I suspected the game has it’s own compile parser? It does, and it’s been broken. Running in debug mode, the game makes it to this line in Core.cpp:

      if(!Compiler.CreateProgram(String)) _THROW(fail to create program);

      String contains “seadogs.c”. The first program it tries to run, as expected.

      error.log file is created and states:

      COMPILE ERROR – file: seadogs.c; line: 308
      function SetGlowParams(args:0) doesnt accept 3 arguments

      seadogs.c tries to call it like this (which is unchanged from working game): SetGlowParams(1.0, 50, 2);

      The error is a lie. The native function SetGlowParams is not defined with zero parameters. It is defined in sdevice.h as this: virtual void SetGLOWParams (float _fBlurBrushSize, long _GlowIntensity, long _GlowPasses);

      But OK, just for grins, make it no parms in seadogs.c, save and try again…crash, and again…crash. A sample of things the compiler feature doesn’t like anymore:

      COMPILE ERROR – file: Net\Server\Utils.c; line: 7
      Duplicate variable name: wOurCharacterID

      First lines of Utils.c:

      bool NetServer_IsTeam(int wOurCharacterID, int wOtherCharacterID)
      {
      	return false;
      }
      
      bool NetServer_IsCLient(int wOurCharacterID)  //This is line 7 \...so we cant have two functions with the same name parameter?????
      {
      	if (wOurCharacterID == DST_INVALID) { return false; }
      	if (GetAttributesNum(NSClients[wOurCharacterID])) { return true; }
      	return false;
      }

      From further experimentation, the compiler also complains about a duplicate variable i in cases like This:

      void function1(){
      	int i;
      }
      
      void function2(){
      	int i;
      }

      Having similar variable names, scoped to separate functions and procedures is both common and in my mind, necessary, as it would be ridiculous in a large set of code, with many sub routines, to have to keep supplying unique variable names for loops and such. It is also very valid syntax and should not pose errors.

      More of the erroneous zero arguments claims with further functions. NMAddByte would what? Add mystery bytes together, or use ESP to just ‘know’ what bytes need to be added…or in the case of _SendMessage…a random thought??? Doesn’t need parameters? LOL

      COMPILE ERROR – file: net.c; line: 28
      function NMAddByte(args:0) doesnt accept 2 arguments

      COMPILE ERROR – file: net\net.c; line: 139
      function NetClient_SendMessage(args:0) doesnt accept 2 arguments

      So the compile feature to go through the Program source for run-time, is broken. I suspect if that were fixed, there is much more to this source that will be broken as well as it looks like much has been changed/moved. It looks a work-in-progress to me.

    • #2312
      Jeffrey
      Keymaster

      Ah, what the heck…curiosity got the best of me, so I’m debugging the parser.

      Truncated seadogs.c to this:

      native int SetGlowParams(float fBlurBrushSize, int Intensivity, int BlurPasses);
      
      void Main()
      {
      	SetGlowParams(1.0, 50, 2);
      }

      Got the same error.log, but with only 6 lines, quick/easy to step through.

      In compiler.cpp, get to this line: if(fi.offset == INVALID_FUNC_OFFSET)

      This kicks us into the error.

      In s_functab.h
      #define INVALID_FUNC_OFFSET 0xffffffff

      That hex number equals 4294967295

      Looking at watchlist:

      fi.offset 4294967295 unsigned long

      if(fi.offset == INVALID_FUNC_OFFSET)
      {
      	// external function declared but not compiled yet
      	fi.arguments = fi.ext_args;
      }
      
      if(fi.arguments != func_args)...goes to error

      And see that func_args is 3. This is the number of arguments seadogs.c is trying to use in SetGlowParams. fi.arguments WAS 3, but because fi.offset was equal to INVALID_FUNC_OFFSET, it got set to fi.ext_args, which was zero. So now, fi.arguments = 0 and no longer matches func_args, which is 3, and we get the error.

      I need to go to FuncTab.GetFuncX(fi,func_code) as that was a preceding line that populated fi.arguments and fi.ext_args during my debugging steps.

    • #2315
      Jeffrey
      Keymaster

      Compiles successfully and runs from source:
      Source compiles and runs

      Stepping through debug mode, figured out that zero parameter thing was that they are extern now, rather native. Change that in the run-time files in the Program folder and that went away, along with the erroneous duplicate variable thing (probably confused by the other problem and just erroneous parsing after that…). Hit another snag with a bunch of these, throughout many programs:

      COMPILE ERROR - file: net\net.c; line: 23
      missing ')'

      That turned out to be a flaw in the expression.cpp code, which I fixed with a minor, one-line fix.

      It runs, but with other issues for now. No sound (doesn’t like my FMOD version), and some function calls are now broken, per system.log and error.log obtained after merely reaching the menu screen (I have not attempted beyond that yet):

      System.log

      Loading modules (folder: modules\)...
       44 loaded.
      Reset...
      Initializing CORE...
      Creating atoms space: 128
       done
      initializing complete
      Starting DirectX 8
      ERROR: Techniques: Find duplicate technique name: rain
      ERROR: in compile shader seaps_atireflect
      error:
      (1) : (Assembly Error) syntax error
      
      Techniques: 22 shaders compiled.
      Techniques: 230 techniques compiled.
      Techniques: compiled by 180035618 ticks.
      Error : You are using old FMOD version 00040805 !
      
      Total logical: 4, Total cores: 2, Total physical: 1
      Intel CPU: Yes, SSE: On, HyperThreading: On
      RESOURCE\models\mainmenu\AOPBoard.gm: can't open geometry file
      Warning! Interface Back Scene: invalid menu model mainmenu\AOPBoard or transform matrix
      RESOURCE\models\mainmenu\AOPBoard.gm: can't open geometry file
      Warning! Interface Back Scene: invalid menu model mainmenu\AOPBoard or transform matrix
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\CARGO.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      Can't load texture RESOURCE\textures\BORTOUTCORVETTE1.TGA.tx
      FMOD_SOUND:createStream error! (74) This subsound is already being used by another sound, you cannot have more than one parent to a sound.  Null out the other parent's entry first. 
      fmod_system->createStream(RESOURCE\sounds\music_MainMenu, FMOD_HARDWARE | FMOD_2D | dwMode, 0, &sound)
      FMOD:update error! (74) This subsound is already being used by another sound, you cannot have more than one parent to a sound.  Null out the other parent's entry first. 
      FMOD:update error! (74) This subsound is already being used by another sound, you cannot have more than one parent to a sound.  Null out the other parent's entry first. 
      FMOD:update error! (74) This subsound is already being used by another sound, you cannot have more than one parent to a sound.  Null out the other parent's entry first. 

      Error.log

      RUNTIME ERROR - file: seadogs.c; line: 307
      Invalid function call
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 4132
      Invalid function call
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 4132
      function 'SetTextureForShip' stack error
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 634
      Invalid function call
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 634
      process event stack error

      Compile.log looks fine

      Init encounters complete.
      How islands = 26
      Init weathers complete. 35 weathers found.
      How islands = 26
      Çàïîëíåíèå òðóïîâ ñ ïðåäìåòà 243
      Antigua: 12
      Barbados: 22
      Jamaica: 37
      Curacao: 46
      Guadeloupe: 55
      Santiago: 64
      PuertoPrincipe: 68
      Martinique: 82
      Havana: 91
      Nevis: 101
      PuertoRico: 110
      SentMartin: 120
      Bermudes: 125
      Trinidad: 134
      PortPax: 143
      SantoDomingo: 153
      LaVega: 157
      Tortuga: 167
      Panama: 175
      PortoBello: 184
      Cartahena: 193
      Caracas: 202
      Cumana: 211
      SantaCatalina: 220
      Beliz: 229
      Maracaibo: 238
      Story: 247
      ÂÑÅÃÎ ÍÏÑ Â ÈÃÐÅ (ñòàòèêîâ) = 247
      Version =  mod#2 ver 1. 5. 7  The Golden Age   DEV

      Think it’ll run?

    • #2316
      Jeffrey
      Keymaster

      A few problems to work through…but a saved game loaded:
      Saved Game Loaded

      Still a bunch of invalid function calls needs resolving…

      RUNTIME ERROR - file: seadogs.c; line: 307
      Invalid function call
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 4132
      Invalid function call
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 4132
      function 'SetTextureForShip' stack error
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 634
      Invalid function call
      RUNTIME ERROR - file: sea_ai\AIShip.c; line: 634
      process event stack error
      RUNTIME ERROR - file: sea_ai\sea.c; line: 1368
      Invalid function call
      RUNTIME ERROR - file: sea_ai\sea.c; line: 1368
      function 'Sea_LoadIsland' stack error
    • #2317
      Jeffrey
      Keymaster

      Told ya it was the battle_interface.dll. Increased the MAX_MAN_QUANTITY, recompiled the .dll.
      BI is constraint

      Not sure why they don’t all line up…but my job of proving it was the .dll, is done.

    • #2318
      Jeffrey
      Keymaster

      Ha! Downloaded the archived version of 4.44 FMOD Ex API, fixed up the SoundService.cpp a little bit to deal with the inc/lib/dll that came with it, and my sound is back.

    • #2321
      Jeffrey
      Keymaster

      There was an issue with no loader screens displaying pictures, as the code had deprecated use of the FADER_PICTURE message, and replaced it with FADER_DATA. But that also uses an object property setting for the image name/path. I liked the idea as it obviates the need for long “lssffllss” type parameters with the corresponding parm list; you would just send “la” and an object with properties, like so:

      object aMessage;
      aMessage.Value1 = “val1”;
      aMessage.Value2 = 2.0;
      aMessage.Value3 = 1;
      aMessage.Value$ = “val4”;

      SendMessage(&reload_fader, “la”,FADER_DATA, aMessage);

      No more long strings for 2nd parm, and a bunch of other trailing parms…nice idea. But removing the old method breaks existing FADER_PICTURE messages, so I kept the new method, but also put back the old FADER_PICTURE handling.

      Now, back to the fighter icon display…got that resolved too.

      Icons Aligned

    • #2322
      Orazio
      Moderator

      Nice one Jeffrey!

      Since you’re dealing with the dlls, I was wondering: is there any chance to get the interface widescreen? I mean the interface you get access to when you click F2, and the options screen, not what you see when you play.

      I don’t know if this is understandable, but take a look at this screenshot from SDTEHO, where they solved this “problem” (or better, a heritage from the past): you can clearly see the interface is no longer stretched over the screen, there is like a square that contains all the elements, keeping the ratio to 1:1. On the sides, when it’s not possible to extend this square anymore without stretching, there is simply nothing, just the background.

      I once tried to see if I could do anything, but I think (I’m not a programmer, so I’m just guessing) this resides in the dlls, probably XINTERFACE.dll, as I found this line in BaseInterface.c:
      CreateEntity(&GameInterface,"xinterface");

      • #2325
        Jeffrey
        Keymaster

        I don’t think programming is needed. It looks like that is all done in the character INI file. For demonstration, I changed a few values in RESOURCE\INI\interfaces\character_all.ini to shift some things over:

        Changed Character Screen

        You can move, resize, change font size, etc. It’s involved, but everything on the screen can be modified in that file. Don’t change names, just the position values: position = 588,78,792,326

        Formatted as such: horizontalXstart, verticalYstart, horizontalXend, verticalYstart

        To get current screen element sizes, for your own reference while doing so, you would subtract Xend – Xstart and Yend – Ystart.

    • #2326
      Orazio
      Moderator

      Yes, I arrived to that too during my experiments, and realized it’s probably not the way it has been done.

      Comparing the ini interface files between ERAS and SDTEHO reveals they are basically the same, just minor changes that don’t involve the position of the major elements in the screen.

      And using this method would mean to change ALL the interface files, which are like 40, and I think the changes would be relative to my screen size only, so another one using a different screen resolution might have his interface completely messed up.

      That’s why I asked if there was something in the dlls that can fix all “instances” of the interface, from the options to the load/save screen to what appears pressing F2 and so on, in just a single block of code.

      • #2328
        Jeffrey
        Keymaster

        Thinking about this more, I realized I was probably wrong in how it was done. I don’t have the benefit of a wider screen to review, but it makes sense it would have to stretch those screens in wide aspect ratios, else the screen would left-align, then a bunch of empty space on the right. I’m guessing you don’t see that in stock AoP, right?

        So it must stretch to fit and I’m sure there is a way to find the code that parses the interface .ini screen files, stretch just background element [MAIN_BACK], but then adjust all other x coordinates, whether right/left of center and adjust for different aspect ratios, based on the monitor’s resolution settings, which are available to find, as the config.exe does so.

      • #2329
        Jeffrey
        Keymaster

        I think I found it in XInterface. I put a note for myself to investigate:

                memcpy(&m_screenSize,&ScreenSize,sizeof(ScreenSize));
                memcpy(&m_hostRect,&hostRect,sizeof(hostRect));
        
        //TO DO:  Trace this logic to see about keeping background stretched for position = 0,0,800,600, but adjusting
        //	  x pos for all other rectangles to NOT stretch other elements.
        
        	// get position
        	m_rect = GetIniLongRect(ini1,name1, ini2,name2, "position", m_hostRect);
        	int nAbsoluteRectVal = GetIniLong(ini1,name1, ini2,name2, "bAbsoluteRectangle",0);
                GetAbsoluteRect(m_rect,nAbsoluteRectVal);

        GetIniLongRect probably gets the coordinates from the “position” values of the INI file, based on a base resolution of 800×600. If you note, all MAIN_BACK are position = 0,0,800,600. I can probably let that GetIniLongRect adjust all positions to expand screen consumption as they normally would for 0,0,800,600, but for all others not matching 0,0,800,600, adjust the x coordinates proportionally based on the screen resolution vs. 800×600.

    • #2330
      modernknight1
      Keymaster

      Jeffrey you are the MAN!!!!

      YOU DID IT!!!!!!!!!!!!!

      This really makes my whole week! Thank you!

      This is an AMAZING additional capability that players are really going to enjoy. It completely changes the usual mechanics. I can’t wait to go into some of the quest battles where you usually end up alone or maybe with one really good fighter left.

      I can see so many new techniques using this. I may keep a core of favored strong fighters but recruit some fodder as well that I don’t care about losing. Caves may just be way too easy now.

      Question? When you use your G and H keys for follow and hold, do all of the fighters still follow or hold?

      So now after reading your explanations of how you did things it occurred to me that you might be able to assist me in another area that I am having problems with.

      As it is now I have to use one set of models (that are all modeled together) for the world map. The only way to modify the world map view is to integrate new island models into the existing islands model. This is what I have been working on.

      However it just occurred to me – what if I could somehow tell the game to recognize another set of models next to the existing set of models. OR (like in the case of Pirates of the Caribbean), tell the game to recognize each individual model added in addition to the big island model.

      So what I am suggesting is somehow expanding the boundary of the current map playbox and getting the game to see another additional playbox – say to the east with the AOP1/SOFS/POTC archipelago. If this could be done, instead of me having to integrate all of the new colonies into the existing map, we could extend the Leeward antilles so that they are more geographically correct and historically correct.

      I already know how to add the colonies with all of the new names, locations and characters. My problem has been when I sail to/from a new island I always end up at another island when I go to world view because the models aren’t integrated, so the only way to get back to the locations again is to go to the first person sea view and then the sail to button to the new location on the interface.

      I will eventually be able to integrate these models into the existing island model, but it would just be so much easier if I could get the game to recognize additional map sheets/area with new islands.

      I haven’t any clue where to look for that kind of function though as I just barely came up with the idea and need to think about it some more.

      MK

    • #2340
      Orazio
      Moderator

      Interesting finding in XINTERFACE. It would be cool if the interface weren’t stretched anymore. It really annoys me!

      • #2343
        Jeffrey
        Keymaster

        I am close on this…

        It is all within XInterface. Most of it is in a set of code inode.cpp. I made adjustments for any aspect ratio with higher width to length measurements than 800×600. I am using 1360×768, which is just slightly higher, so the shifting is a little slight, but gives me the chance to review the results to make sure they line up. Right now, some of them don’t, but it turns out not everything is run through inode.

        Turns out some elements don’t…TABLE is an example, and they were still messed up, so that required running table column widths in xi_table.cpp through my recalculation formula. When I inserted that, most of them turned out OK too, but some don’t, so I need to trace that. Probably a TABLE subset is going through another code routine that needs similar treatment. Pictures and picture borders, slider bars are also not right at the moment, but I will track that down.

        But here’s what it looks like now. Granted my shifting is slight, but after I get them lined up, I think it will work for other resolutions as the math will be the same.

        Original
        Original
        Adjusted
        Adjusted

      • #2344
        Jeffrey
        Keymaster

        …and closer.

        Added just 2 lines in xi_table.cpp to call my screen adjusting function in inode. They are now correct. Looks like lines, titles and scroll bars are next. This is definitely doable now.

        Adjusted

    • #2346
      Orazio
      Moderator

      Very nice! The difference is subtle since in your screen the stretching effect is little, but I can see now the circle with the flag, on the top left corner of the portrait, looks like a real circle, not an ellipse anymore.

      • #2347
        Jeffrey
        Keymaster

        Rock and roll!
        Character
        Ships
        Items

        Took awhile for the last piece as I found that the red background for the formatted text above things like the character picture was a bit obscure where it was handled…but I found it.

        Tomorrow, I will load to one of my kids’ computers as I notice they have widescreen and see how that looks.

    • #2349
      Jeffrey
      Keymaster

      Looks like the world map is fairly easily extended. I traced the code in debug mode and found out how. Here is a pic from stock AoP/GOF (the worldmap code is broken in the dev…run-time crash after a short while).

      East

      I opened the WorldMap\islands\islands.gm in TOOL, found two labels: Min and Max. Change the X Positions from -1024,1024 to -2048,2048. Apply changes, save. Rename your old file, put the saved version in its place. Voila.

      The code looks for those two labels in the locators group name and uses them to constrain the map boundary.

    • #2350
      modernknight1
      Keymaster

      Very interesting Jeffrey.

      This is indeed the first step to accomplish what I need!

      The next step is find out if —- in the extended area could I get the game to recognize a new model? Such as the SOFS islands, AOP1 Caribbean Tales islands or original POTC islands?

      If I can find out how to do this I can rapidly import the work I have already done in prepping now colonies into the game with a new Locations\locations_init and other applicable files. (there are actually quite a number of files that have to be modified for new colony inclusion – I have a list)

      My real desire is to get the game to recognize other models besides the primary island model.

      There is one other issue that could be a problem as well. The map models are all on in one model, but the 1st person view has models broken up into pieces. Some of the pieces have only one model, but others have groups of island models. This is so that when you are sailing that you see the other islands in the distance around you.

      This is why in direct sail mode when you cross a boundary and the screen goes black for a moment and you find yourself somewhere else, the view suddenly becomes different (often with no visible island models to be seen). I suppose it doesn’t really matter with the new islands I want to import if you see other islands in the distance or not as long as you see the new island you want to get to.

      Thanks for the detective work. It will make my life so much easier if we can import secondary models on the main mapsheet to the base island model. If this can be done I will not have to change the base island model as I have already been attempting. I will still continue my work and eventually change the primary islands model however because I want to fix the floating island problem. The way I got St Kitts to appear on the mapsheet before was with a shoddy coordinate trick that crashes the game as soon as you go out of map view, and the actual island location did not match the map. This is why I would like to put the new models outside of the existing map a little to the east.

      Someday I will learn how to incorporate new island models in the main existing model. When that occurs then we will actually be able to have the Dutch ABC islands(Aruba Curacao and Bonaire). I would also like a whole slew of little islands in the Bahamas west of Bermuda all the way to Turks. Some with nothing on them but others with additional pirate colonies. This is my final goal.

      MK

      • #2354
        Jeffrey
        Keymaster

        Realizing your goal/wish is to have other world maps appended, that will be read and incorporated into the game, I’m going to suggest the opposite, the route you are trying to avoid. Namely, put what you want in the single world map, but an expanded one as mentioned in the Min/Max adjustments that would be needed.

        Right now, the game is set up/coded to read from the world map, and scan related island maps in a particular way. As you traverse the map, the game is coded to respond by reading the information from the one. Sure, an attempt can be made to read from several, I’m sure that’s doable, but with that change, there could be many further unforeseen implications that then need to be addressed in other source code to figure things correctly. Also, by making these types of changes, you will invariably introduce your own bugs, that then also need to be addressed. If you stick with, presumably, ‘what already works,’ that is all eliminated; just do it the way it was already designed to do and you don’t introduce further problems.

        I think if you follow the naming/design conventions, expand Min/Max, it could work. I suspect that coordinate trick is actually on the right track, but might not have been fully correct. It looks like not only the newisland.gm and newisland_area.gm would need to be crafted, but all surrounding xxx_area.gm that abut the new area would also need their coordinates to be trimmed in order to butt against the new place; I think it can be done and is the better approach.

        The good news is that once one is done, and the model files of the new place, along with an adjusted WorldMap\islands\islands.gm file, if it crashes, giving I have source and can run in dev debug mode, we can find out exactly what the game doesn’t like about it…anything missing, things that are wrong, such as overlapping coordinates, or whatever ??? it can’t handle and causes a crash. Make the adjustments in the models to fit the existing code and try again.

        With this way, even if this new source compilation doesn’t work out due to performance issues, or other, at least the new maps/models will likely work with the existing, stock compilation if they are crafted to fit what the game expects.

        Of course if we have to stick with the stock compilations, we lose the additional fighter display and the screen resolution adjustments 🙁

        I still want/hope for the actual source of the released version…that would be a real boon.

    • #2353
      Jeffrey
      Keymaster

      Apologize for the delayed response, but I spent considerable time trying to debug a crash during the worldmap tours. ‘Fortunately,’ and I put that in quotes as it’s not really for the company I work for, but there was a power outage for hours…until early this morning, at our central datacenter, that put all work out of commission, so I had nothing else to do but test/debug the game all yesterday, LOL.

      Anyway, the problem was within internal_functions.cpp, that processes a constant stream of messages. During worldmap movement, it crashed. Since I’m running debugger, I know exactly what line, and it only occurred during one particular message, with a type VAR_AREFERENCE and a particular class name during a call from an ATTRIBUTES object to its member function, FindAClass. I never did find the ‘right’ way to fix the problem, as it has to do with the insidious nature of C++ pointers. Remember, I don’t know what the original code looks like, or what was changed…the stock program doesn’t have this problem; I have both versions running the same /Programs and /RESOURCES.

      In internal_functions.cpp, there is a DATA object that contains a member that is a *pointer to an ATTRIBUTES object: ATTRIBUTES * AttributesClass. In most cases, this member receives the actual pointer, but I suspect that in at least one case, it is getting set to a pointer that merely references the same address. What’s supposed to happen is like this:

      dataobject.Attributes = actualPointer

      Now actualPointer can dereference the ATTRIBUTES properties/functions in their actual memory:

      actualPointer->FindAClass, where FindAClass is the actual memory allocation to do what it’s supposed to. When the ATTRIBUTES object that actualPointer represents destroyed, it becomes zero, and dataobject.Attributes in turn now shows zero, so before dereferencing actualPointer->FindAClass, you can look first:

      if (dataobject.Attributes) actualPointer is non-zero and will get actualPointer->FindAClass

      If object is gone, ->FindAClass is skipped and all is well.

      However, somewhere I suspect dataobject.Attributes is not getting actualPointer, but rather getting assigned another reference, not the actual object pointer that points to the same place…more like:

      dataobject.Attributes = refToActualPointer

      Now where the ATTRIBUTES object refToActualPointer points to is destroyed, actualPointer is zero, but refToActualPointer stays as it always was…it’s not the actual pointer the ATTRIBUTES class created for it’s own object, but rather another pointer that was created to point to the same thing.

      So now, in our crash case, though actualPointer is zero because it was destroyed, refToActualPointer is not, though what it points to no longer exists in memory. So we get:

      if (dataobject.Attributes) refToActualPointer is non-zerio, but actualPointer is zero and gone, so you think things are OK, will try to run refToActualPointer->FindAClass and game crashes due to trying to reference invalid memory.

      Spent much time, conditional breakpoints (thank Odin for conditional breakpoints, so the hundreds of irrelevant messages can just be skipped and only stop on the one I’m looking for to trace through!) , but so many calls are made, many per second, even with conditional breaks, it was difficult to spot where the problem lies because everywhere I could find that assigns the references looks to be OK, using * references, but obviously, somewhere, in this one case (and it was always the same case, of both type and class name being looked for), it is being assigned wrong. Anyway, not the ‘best’ way, as finding the underlying culprit is the better solution, but for now, a slight hack…since I know exactly what the problem is, and where it always occurs in this particular scenario, I just do an additional test of the dataobject.Attributes memory spot to ensure it’s still valid. I can sail world map freely now, no crashes or unexpected errors in log. I can sail first person fine, engage in battle. Only brief tests so far.

      I will also add, overall, not particularly pleased with the performance. With whatever has changed, certain things seemed to have slowed down. For instance, from world map, selecting to engage takes about twice as long to actually load and display sea mode. Cannon fire is gone too. Error: FMOD_SOUND:setPaused error! (11) The specified channel has been reused to play another sound. Still need to figure that out.

      I will respond about the world map stuff in the next post.

      • #2358
        Jeffrey
        Keymaster

        I think I finally figured out the ‘why’ this bad pointer is happening. The DATA objects are serialized into a variable that is placed in an array to be used as a stack to push/pop off as needed. When that is ‘popped’ by a recent request, it is deserialized into an object that fits the type…in this case a DATA object with a type VAR_REFERENCE, and a member AttributesClass with a pointer to that ATTRIBUTES object. When it is decided, by a message instructing to DeleteAttribute, that this needs to be deallocated, everything works fine, objects are destroyed properly and pointers to the AttributesClass set to zero.

        However, when something further down that stack, is later ‘popped’ off, and deserialized, if it’s another DATA object, that had its own, same reference to AttributesClass pointer, it had no way of knowing that the pointer value it stored in that member is now invalid, and neither did the former ATTRIBUTES object that got destroyed know there were other references to be zeroed as they were all in some other DATA array, and serialized into information it would have no way to interpret. So this AttributesClass value is deserialized into a pointer value that is no longer valid as it was destroyed by something earlier.

        I feel better now at least having a decent idea why this happened…and it’s probably a slight design oversight. But, this situation is now handled.

    • #2357
      Jeffrey
      Keymaster

      Some bad news…to give my tweaks of the character screen a review on widescreen, as I promised Orazio, I copied to one of my kids’ computers that already has stock AoP and GOF and ERAS; all of the stock exe./.dll versions work on their, running Windows 8. Mine is ‘old’…Windows XP Pro. Though this new compilation is fully working on my WinXP machine, shortly after it scans the modules, still in the splash screen showing startup progress, crashes on Windows 8 with a memory ACCESS VIOLATION.

      Faulting module name: Rigging.dll, version: 0.0.0.0, time stamp: 0x56fde31f
      Exception code: 0xc0000005
      Fault offset: 0x00001e86
      Faulting process id: 0x2068
      Faulting application start time: 0x01d18bc9bbc57899
      Faulting application path: C:\Program Files (x86)\Playlogic\ERAS2Test\START.exe
      Faulting module path: C:\Program Files (x86)\Playlogic\ERAS2Test\modules\Rigging.dll

      I can get a memory .dmp file, and with the .pdb files formed in Visual Studio build, theoretically I should be able to run the .dmp through the debugger and hopefully find the culprit. So a slight pause on my cannon sound issue (pun intended) and I’ll give that a go.

    • #2360
      Jeffrey
      Keymaster

      Good news is that it works in Win8. Finally figured out it’s a permission deal with the Program Folders and doesn’t read the things it needs, creates all kinds of faults within the program as it wasn’t designed to gracefully handle it. Rather than build in all that is required to work as designed with the type of restrictions some of those later Windows system’s, it will work if set to Run as Administrator, or in a subdir of the C: directory; I tried both.

      Oddly, in a funny contradiction, the cannon fire sound works under Win8, as opposed to my XP Pro…I’m still going to resolve that.

      And Orazio, I’m not going to post a pic of the character screen as I said…turns out that I didn’t pay much attention, and yes their screens are wider, but they are also taller, so the ratio is exactly the same as mine and an example does no good, LOL Somebody else will have to try that when I get this better ready.

    • #2361
      Jeffrey
      Keymaster

      OK, a search on the ‘net for some FMOD help and a few tweaks to the sound code and the cannon fire is back for WinXP (music and dialog always worked)…but it was horrible. On a whim, I changed start.ini from useMM = 0 to UseMM = 1 that is MUCH better. So that is fixed.

    • #2364
      Orazio
      Moderator

      I don’t know the code for the interface, but I suppose the standard resolution for the interface with no stretching is 800×600 right? So that is a ratio of 1,33333…

      Would it be possible to have the block with the elements have its height equal to the vertical resolution of the screen, and then adjust the width automatically with something like this: width = height * 1,3333

      Or it doesn’t work like this?

      • #2365
        Jeffrey
        Keymaster

        That’s pretty close to what I do. It’s slightly different in that the game looks at two X coordinates for the left and right, so if an element does not span the entire screen width (like a background image), I adjust each of them from what would be the center, based on a new width calculation. But the trick is that what is sent to the display/rendering functions assumes that 800 width and that is the max it will deal with…what I did is actually fool it by sending a narrower width for resolutions beyond 1.33 and then it will expand it out when it displays it. So, it figure out the ratio and then using the ratio difference, figure a new width, then X left is center – 1/2 and X right is center + 1/2. I’m fairly confident what I’ve got will work, just have no way to demonstrate it myself because all our screens here are roughly 1.37, so it’s very slight change; someone with a different screen with a much higher ratio will have to try it to find out.

        I found an issue with boarding a ship that has struck it’s colors…game crashed, so I’ve got to debug that. I’m starting to wonder if this effort is worth the time…since the code I started with had been modified from original, how many more ‘gotchas’ are now present?

    • #2367
      Jeffrey
      Keymaster

      Turns out it was just a coincidence about that stricken colors ship boarding. There was a serious flaw in the save feature, where with certain bits of state data, in certain circumstances, the memory location was deleted, but the pointer was returned, causing a memory violation error…but the deletion was a mistake. Nice to find root causes, as it makes for a solid fix. Also, it depended on current state conditions, so was seemingly random when it would happen, as some auto-saves worked fine.

      But found another Win 8 anomaly when having more than 5 extra fighters, using the .dmp method of debugging from another machine crash, it’s when writing out the vertical buffer (WriteSquareToVBuf) for the ‘mansigns’ that show fighter status. If there are only 6 (you + 5 fighters), it’s fine, but add one more and crash when reloading the next location where it would display; but only on the Win 8, as the XP works fine. Odd that testing extra ships does not do this (I tried after discovering the problem) and in fact, your command prompts can still invisibly iterate down and issue a command to the hidden ships beyond the bottom. So, I will compare the two approaches between ships/mansigns and change that to a method that clearly works with the ship icons.

      After the save issue, I thought this would at least be ready for someone to test, but not just yet…

    • #2368
      Jeffrey
      Keymaster

      Kickin’ A on the wild side…found the difference between mansigns and shipicons. In ship icons they are sending the square size to CreateVertexBuffer with a calc of each icon element size. In the case of mansigns, they do the same calc and same call, but when they do the call, they did not use the calced size, but a hardcoded number??? I’m sure an oversight, but sending the calced size that added each element size, it works just like the shipicons now.

      So I’m presuming the crash result it was not really a difference in OS, one being more ‘forgiving,’ but rather my screen resolution and allowed that hardcoded version to make enough V buffer space, but the other machine didn’t.

      Fixed. Pretty close to letting others give this a try.

    • #2369
      modernknight1
      Keymaster

      Thanks for all of your hard work Jeffrey! I myself run Windows 7 so I hope it will be OK on my system once its ready to test.

      I hope you will stick around until my part of the mega patch is done. I am about three quarters finished now. Two new ships (although if we go by PA! definitions that’s six new ships because of number of skins. I am almost ready to show them off in screenshots. We are up to 10 new weapons now. Some of these are some just really awesome weapons and I’m giving a couple of them killer stats.

      With regards to your observations on the island map. I have been wondering about substituting New Horizons entire map in place of the COAS map. The one thing that would be essential to making this happen is to substitute a place on their map for the City of Abandoned ships to occupy. You see they already took the entire land mass of COAS and added it to their own island model already. The modder Armada was able to merge the models together. So they have already merged all of the COAS locations into New Horizons.

      It will take several days of experiments to see if this is possible, but I think it may be worth it and I think I will at least learn from the experiment as well. I’m not sure how happy players will be with a completely new map however? Their map has more locations and very unique locations which is what I want.

      When I do a comparison of GOF ERAS to New Horizons, this is what I look at.

      – Animations and sword fighting: GOF has NH beat hands down – no contest.
      – Fighters: With Jeffrey’s new work we can now control more fighters. This was something that until recently NH had better than us.
      – Graphics: GOF has NH clearly beat and with the Germans and Russians integrating/implementing DX9, I believe we will be able to incorporate their work in the future as well.
      – Ships: we have hundreds more ships than they do – no contest. We can also control eight ships per RPC, compared to their control of only four.
      – Characters: We have more and better historic characters than they do. Plus their character textures are just abysmal.

      Locations: New Horizons has more locations and more unique interesting locations.
      Quests: COAS has better vanilla quests but NH has more quests over all. If we could get their locations I think we could also import their quests.
      Flags: New Horizons has the ability to have personal flags. This is something I have been trying to get for us for sometime.

      If we could just get the last three we could have the better mod hands down no contest. I feel like getting the new islands integrated and importing new locations, is the first step to taking GOF ERAS to an entirely new level of game play.

      I am considering hiring someone to do this for me. I am going to start asking around to my contacts to see if there is a modeler willing to work for me that could do the trick. It could take me six more months to learn this by myself and I am just too impatient. By hiring a modeler, we can get what we want and I will be able to learn everything I need to directly for myself, making me much more dangerous in the future. I will be able to do so much more for our little community and build and finish some of these ship I have on the drawing board.

      Last, Galleon PM’d me that he had made contact with the other modelers and people to get the things I wanted, but has had no contact back yet. My son is contacting his friends as well. I have not contacted Joruba about source code from the Black Mark team yet, but will do that today while I am thinking about it. I wanted to play TEHO more before I contacted him so I could tell him what I think. Maybe I will stop working on stuff today and just play TEHO instead.

      I have new stuff ready to go up today and will write up an April message to the community telling all that is happening. Some cool new stuff coming our way soon.

      MK

      • #2371
        Jeffrey
        Keymaster

        I don’t think it was the different OS; that was my first observation, but probably irrelevant. The real issue looks to be that they run the icon sizes through a function that probably takes into account screen res to figure the buffer size needed. But, then they passed a hardcoded number 25 to a function to size the appropriate buffer size to write them to. They did it correctly in the ship version of the same feature and passed the addition calc, but not the person icons for land. That is why ships worked and people didn’t and it didn’t affect me because the hardcoded number was apparently sufficient for my screen res, but not on the other machine I tried. I changed the person icon to match the ship approach and it’s not a problem now.

    • #2373
      Galleon
      Participant

      Jeffrey I have a bug with the new fighter mod.

      I have only put in the extra fighters mod and not your other work. When I go to the ship of another captain who wishes me to go on a mission with him as soon as you are transported to his deck, you are stuck in the middle of the air above the ship looking at the water. You cannot move or look around.

      I did not have my loggers enabled and will enable them now. I thought you might want to know.

      For the new fighters mod to work, must it be put on top of your earlier work or can it work with any GOF mod?

      • #2374
        Jeffrey
        Keymaster

        Indeed. I actually had that same problem in battle boarding when I first did this and fixed it for that, but missed the same fix for friendly boarding. I found it in sea_ai\cabin.c and that is now fixed; it was the same issue, but a different file that I overlooked that snippet of code in Cabin.c.

        You can either download and overwrite them all again, or just extract and find sea_ai\cabin.c and put that new one in its place. The only change exists in that one file. If you want the same thing in GOF 1.2 or AoP vanilla, those other .zip with the corresponding names have my fixes for those games, along with this mod. I only tweaked vanilla a little to add some of the useful screen info about rum/food on ship and that sort of thing, but everything else remains the same…well except for the fighters, but if you don’t want more than 3, it’s simple to open \characters\CharacterUtilite.c and change int MAX_NUM_FIGHTERS = 6; to equal 3 and it will act as it always has. GOF has the fixed Soleil ship and book-in-store/trader fixes too. They also have the Ascold fixes about losing fighters in the Leif cave encounter and the smoothing of difficulty levels from 5 to 10…but 10 is still the same difficulty it always was, but anything above 5 was actually pretty close to the same as 10 in the original approach; I just tried to even out the ramp-up.

        But if you only want the fighter changes, you would have to get the GOF1.2 patch file (or AoP COAS), compare the file names in just the AdditionalFighter .zip and copy those files manually from the right patch to your game folders one-by-one. I don’t believe they rely on other changes, but can’t say for 100% certainty. I would not take the AdditionalFighters.zip and copy to GOF or AoP COAS vanilla as sometimes the same filenames actually have other different code embedded. I took the time to find the appropriate spots and made the changes that don’t rely on other mod-specific items that might also be included.

    • #2375
      Jeffrey
      Keymaster

      OK, give a try…if you dare 😉

      mega:///#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

      ERAS2Test.zip

      ReadMe.txt has some instructions.

      There are a couple personalizations…not really within the gameplay…we’ll see if anyone is observant to catch them.

    • #2376
      Jeffrey
      Keymaster

      Ugh! The link didn’t edit properly and my ‘edit’ option is now gone: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #2380
      Jeffrey
      Keymaster

      Vanilla COAS is now available at the link as AoPTest.zip, running in the new .exe/.dll version. You can load existing save games and try them out. GOF 1.2 to follow soon…

    • #2381
      modernknight1
      Keymaster

      Congratulations on getting this to work Jeffrey! This is quite an achievement. It is really too bad you weren’t around a couple of years ago before everything went sour. If this had existed then we probably could have got enough of a team together to actually begin porting New Horizons over to GOF. One of Boelen’s excuses for not moving that direction was that KK had run into a snag in getting the source code compiled. And now here you have done it!

      I saw your announcement on PA! I truly hope some people comment or acknowledge what you’ve done over there. Because of the admin lack of COAS knowledge or support over there, they have generally been pretty cold towards anything done with COAS the last couple years which is a main reason no one is doing anything with it anymore but independent efforts like we are with ERAs, the Spaniards with the Kap Kronstad 1.2.4 effort which is dead now. The French ACKMOD, and the German MOTCS. All of us used to be on the same team. It would be wonderful if everyone could collaborate again, but I think the game is getting too old now and too many people have lost interest.

      It would be wonderful if your hard work here could lead to something greater. If some synergy could be created again and there was a chance of a team being created to port Build 14 atop your newly compiled COAS source, I would completely swallow my pride, apologize for anything people think I have done wrong and move forward as part of a team effort once again – provided bans were removed.

      Here’s hoping someone even acknowledges what you’ve done or makes a positive comment about it. If I were to bet on it though I would have to bet against that happening.

      MK

      • This reply was modified 8 years, 6 months ago by modernknight1.
      • #2384
        Jeffrey
        Keymaster

        Here’s hoping someone even acknowledges what you’ve done or makes a positive comment about it. If I were to bet on it though I would have to bet against that happening.

        I debated that post for awhile today…then decided it would be a test.

        Based on my recent treatment from both Thagarr and Hylie, I’m also skeptical.

        As Jan noted in a prior post of that thread, KK did some good work and I totally understand other things become priorities and also, you alone staring for hours at a snippet of code that doesn’t work, you sometimes just lose sight of the obvious fault; I’ve done it many times. Then you hand it to a fresh set of eyes and boom! They point it out…that was probably the issue with the savegame problem. One small delete, then passing that same pointer back to a function that tries to use it.

        Anyway, like I said, a test. If I get the same treatment as before, they can suck it. If I get either of those two to inquire about getting the code, I told them explicitly what the problems are, and they can go back to a copy of the code and figure it out themselves, LOL. However, if the reception is warmer, some attempt to backpedal on their accusations of me, maybe as you say, something can grow.

        And man, have you gotten a look at Jan’s team and their result? Rewritten in C# and DirectX 9…holy smokes, that’s an accomplishment!

        P.S. Have you tried it yet?

    • #2385
      modernknight1
      Keymaster

      Well I hope the test has a positive outcome! My thoughts are that your announcement will simply be ignored.

      I tried to download the newest German edition (MOTCS) the other night(I speak German – lived there for 5 years). I played the previous version which was very good.

      Jan has it broken up into 6 parts I believe. After I got them all downloaded it said the archives were corrupt. I aim to try again at some point. I would very much like to give it a try. I noticed they had figured out multiple flags. I can’t help but think that this was because they looked at my work and figured it out LOL.

      I think Jan and I could get along fine again if I could just get him to accept that 17th century ships were painted or that I would simply say that they were not painted (except with linseed oil) LOL. What a dumb argument really. I wish I had not been so historically adamant or passionate. Its just who I am. My main pet peeve with Jan was that he didn’t like to share what he had done. So even if he starts a dialogue with you, I doubt that he will share his source with you.

      As I’ve said before, anyone that wants to take anything from ERAS is totally free to as long as its not for profit. Half of the mod or more is taken from other mods anyway. I think stealing in this case is one of the finest forms of flattery and a complement as well.

      As closed hold as I have been on ERAS3, after we contributors play with it a while, I will likely open it up for everyone to download as well. I would bet it will be more popular because it seems that the majority of people like that Napoleonic time-frame and sleek clean ships better. Not me of course, but I still enjoy that period as well.

      MK

      • #2386
        Jeffrey
        Keymaster

        I meant tried ours yet, silly, LOL

    • #2387
      modernknight1
      Keymaster

      Yes I have been playing it. No issues yet. I want to build the next full release off of that version. I also want to still offer the large download, but also a broken up download in 6 pieces like the Germans have done.

      MK

    • #2388
      Jeffrey
      Keymaster

      Sweet! I have hammered on the \Program .c stuff for awhile, but after compiling the .exe and .dll, I have only tested rudimentary scenarios, like a couple battles, ship boarding, and such…but just a few to make sure it works. I will shortly carve out some time and really engage in some quests again, like I did with the earlier test/debugging I did before, but just haven’t yet.

      Definitely looking for feedback about this initial try with the new compilations. I know for certain that red highlight bar on some of the character screens is out there, but that’s a low priority for me right now as I want to make sure the key stuff works.

    • #2389
      Jeffrey
      Keymaster

      And GOF1.2Test.zip now available…try loading an existing savegame if anyone’s got GOF 1.2. They work for me.

      Hey MK, you notice anything about the START.exe/config.exe version tab of the file properties? Or the upper right of the loading splash screen on launch?

    • #2390
      modernknight1
      Keymaster

      Yeah I noticed the cool picture of the Galleon on the Splash screen. That’s cool, because the Germans have Batavia as theirs.

      OK so I spoke too soon. I ran your patch files and the fighter added files fine. However when I put in the test patch files, the game won’t start.

      Here’s the error file and system file errors:

      COMPILE ERROR – file: seadogs.c; line: 75
      native function ‘FileExists’ not declared
      COMPILE ERROR – file: seadogs.c; line: 75
      native function ‘CreateFolder’ not declared
      COMPILE ERROR – file: seadogs.c; line: 75
      native function ‘CheckFolder’ not declared
      COMPILE ERROR – file: seadogs.c; line: 75
      native function ‘DeleteFolder’ not declared
      COMPILE ERROR – file: seadogs.c; line: 75
      native function ‘FindFolders’ not declared
      COMPILE ERROR – file: interface\utilite.c; line: 33
      native function ‘LanguageGetDefaultLanguage’ not declared

      Loading modules (folder: modules\)…
      Module [ fmodex.dll ] skipped
      interface function not found
      58 loaded.
      Reset…
      Initializing CORE…
      Creating atoms space: 128
      done
      Initializing complete
      Starting DirectX 8
      Techniques: 0 shaders compiled.
      Techniques: 0 techniques compiled.
      Techniques: compiled by 178146 ticks.
      Can’t init font INTERFACE_NORMAL
      can not init start font: INTERFACE_NORMAL
      Can’t load texture C:\Program Files\Playlogic\ERAS\RESOURCE\textures\LOADING\PROGRESS.TGA.tx
      Progress error!
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\barbados\barbados_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Jamaica\jamaica_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\PuertoRico\PuertoRico_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Cuba1\Cuba1_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Cuba2\Cuba2_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Curacao\Curacao_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Tortuga\Tortuga_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\SentMartin\SentMartin_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Trinidad\Trinidad_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Nevis\Nevis_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Antigua\antigua_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Guadeloupe\Guadeloupe_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Martinique\Martinique_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Hispaniola1\Hispaniola1_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Hispaniola2\Hispaniola2_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Bermudes\Bermudes_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Dominica\Dominica_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Terks\Terks_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Caiman\Caiman_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\PortoBello\PortoBello_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Cartahena\Cartahena_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Maracaibo\Maracaibo_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Caracas\Caracas_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Cumana\Cumana_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\SantaCatalina\SantaCatalina_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\Beliz\Beliz_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      C:\Program Files\Playlogic\ERAS\RESOURCE\models\islands\LostShipsCity\LostShipsCity_locators.gm: can’t open geometry file
      ?void LOCATOR::LocateForI(VDATA * pData)
      Error: Language ini file not found!
      User Rised Exception
      xinterface.cpp line 1124

      • #2391
        Jeffrey
        Keymaster

        Can’t overwrite either the Fighter or Patch files into the new compilation test. However a couple things:

        The ERAS2Test already has everything the Patch has; it’s basically the game as I run it, with everything I’ve done, but with the changes needed to run under new compilation. It also contains EVERY program file, so is complete.

        Patch already has the add’l fighters, plus all the other work done, but it only works with existing game, not new compilation.

        AdditionalFighters is just for anyone interested in just that piece, but made for existing .exe/.dll only.

        Oh, and the detail I was driving at is that the ERAS mod is specifically mentioned at the top of the splash and is also embedded in the versioning information of the .exe itself 🙂 Thought it was a nice touch.

      • #2392
        Jeffrey
        Keymaster

        Also, looking at the .gm errors, make sure to review the ReadMe.txt and adjust the paths to point a full path at an existing ERAS RESOURCE folder, INI folders, etc. or copy the whole directory in and use a relative path. I did not supply those on the presumption that people already have them. I only supplied the stuff that was changed in \Programs that will work with a couple of the new declarations that had to change. In fact, those FileExists, CreateFolder, DeleteFolder, etc. are part of those and are in seadogs.c now.

    • #2399
      Orazio
      Moderator

      Jeffrey, I downloaded the ERAS2Test, which I understood is the right choice (?), changed the paths to point to my ERAS2 installation location, and started the game.

      However, everytime I try to start a new game the program crashes, with nothing useful in the log files, it only tells me it’s something in dx8.dll.
      I think this line appears in the system.log only when it crashes, but I’m not 100% sure:
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method's parameter may have an invalid value

      I tried to load one of the savegames, and it worked, but when going to the ship’s cabin it crashed again… is it happening only to me?

      And one note, you ship the new files with “texture_degradation = 1” in start.ini. That option renders the textures really blurry and in low resolution. I think it should be 0 at default, then a player may turn it on if he/she has problems with performance.

      • #2401
        Jeffrey
        Keymaster

        That texture degradation setting is copied from my original ERAS2 settings and was due to my system’s performance problem when trying to open chests. If your system doesn’t need that, you can certainly change it.

        As for the problem, enable crash dumps for your OS.

        If newer: https://msdn.microsoft.com/en-us/library/windows/desktop/bb787181%28v=vs.85%29.aspx

        If something like XP that comes with drwtsn32: http://www.makemkv.com/onlinehelp/dump.html Be sure to check symbols and uncheck append file.

        If your OS is newer, you can also just keep the game open after the crash, switch to task manager (I just alt-tab to another open window, and right-click lower right corner of Windows task bar for Task Manager), find the START.exe process, right-click and select to create a dump file. After complete, then close the game.

        The nice thing about configuring them for auto is that you can change the path to something simple. Though you have to create the folder first, it will not create one if doesn’t exist. Like C:\CrashDumps.

        Anyway, get a .dmp file for when the crash occurs, upload it and give me a link. I will see what I can figure out.

      • #2416
        Jeffrey
        Keymaster

        I did try both a new game and entering ship cabin on another computer, running Win 8, but could not produce the problem.

        I’m betting your graphics card and/or machine is probably better and smarter than the dumb, mediocre machines we have, but our dumb ones work fine, LOL.

        If you can get that .dmp file, it might help me figure it out.

    • #2404
      modernknight1
      Keymaster

      Sorry Jeffrey,

      Here I am pontificating to others to read my “Read me” files before playing ERAS2 and I didn’t read the one you included.

      Because of this I cost myself a great deal of time and pain. I ruined the version of ERAS2.1.5.8 that I have been working with. No worries because I back everything up daily. Didn’t lose anything because I have been working on new ships anyway.

      However, I had to pull in a fresh back-up from my external last night which took a lot of time. I now have everything in place to try again with 2.1.5.7 with your changes implemented CORRECTLY following the “Read me”.

      I was also playing TEHO last night so I can give Joruba and Blackmark a good review. Its easier than I was lead to believe.

      I will let you know how it goes in a few hours.

      MK

      • #2406
        Jeffrey
        Keymaster

        My goal was to make testing it relatively simple, and negate the need for someone to duplicate the large set of RESOURCE files/models/etc. One just needs to extract preserving the file structure into a new folder, and all the \module, \Program and INI stuff it needs resides in its own dir, but then just point a few of those start.ini paths to the other stuff it will need.

        One could also make an entire copy of existing ERAS, but then delete the contents of both module and program folders, then copy in the .zip files too. Then edit start.ini to use all shortened, relative paths.

        The key is to make sure the modules and programs are the new ones, along with the new start.exe.

    • #2407
      Jeffrey
      Keymaster

      Oh, and while you’re at it…you should also enable DUMP files on your machine, or keep it open on a crash and use task manager to create one. If you have a crash, upload and link the .dmp file so I can try to track down the problems. I compiled with debug info, so I can at least get the function symbols and know what function within the .dll is having the problem.

    • #2411
      modernknight1
      Keymaster

      OK will do. When we are ready to package this for the new version, we will want to get rid of the pointers and have everything native to that version/download. So I see the current implementation as useful for testing and the patch but eventually when we are satisfied that everything works right, we will transition to the more permanent settings.

      MK

    • #2424
      modernknight1
      Keymaster

      OK Jeffrey,

      I got it sorted out. It was my failure to properly copy a . that kept it from running. (2.1.5.7 vice 2 1.5.7) Anyway I got it running with my latest work and its been working fine for the last hour or more. I did tweak the camera settings back to my liking in AI/Cameras and I also copied an additional path for sound as it was silent when I started.

      I love that books are showing up at the vendor stands! That’s awesome. My first crash occurred when I tried to access my current mission in the log. I can’t see a related error in the logs though unless I’m missing something. I don’t see anything INI or GUI related. The following are a list of errors besides the standard bad rope data we are always going to see. I’ve seen most of these before, but I’ve never noticed that fire place error before. Any ideas? MK

      From system:
      Loading modules (folder: modules\)…
      44 loaded.
      Reset…
      Initializing CORE…
      Creating atoms space: 128
      done
      Initializing complete
      Starting DirectX 8
      ERROR: Techniques: Found duplicate technique name: rain
      ERROR: in compile shader seaps_atireflect
      error:
      (1) : (Assembly Error) syntax error

      Techniques: 22 shaders compiled.
      Techniques: 230 techniques compiled.
      Techniques: compiled by 410180339 ticks.
      Using FMOD 00044461
      Sound initialized ok !!!
      FMOD: Speaker mode STEREO
      Intel CPU: No, SSE: Off, HyperThreading: Off
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\AMMO\NOTEXTURE.TGA.tx
      Warning: NPCharacter -> trace node not found
      Character Teleport Error: Can’t find free place near locator: reload, gate
      Warning: NPCharacter -> trace node not found
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\mainmenu\AOPBoard.gm: can’t open geometry file
      Warning! Interface Back Scene: invalid menu model mainmenu\AOPBoard or transform matrix
      BLADE::Realize -> no find locator “start”, model “Ammo\topor3”
      Character animation: not set idle action: “Sit_Dialog2”
      Begin pointer = 250237492? end pointer = 0
      Ship Boat doesn’t have fire places
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Can’t sound resume -2 !!!! Sound is not playing !!!!
      Character animation: not set idle action: “Poklon”

      From error:

      RUNTIME ERROR – file: locations\locations_loader.c; line: 1007
      incorrect argument index

      From Compile:

      Version = mod#2 ver 1. 5. 7 The Golden Age DEV
      Mistake island id into store: id=Panama
      Mistake Colony id into store: id=none
      No speed rChar.Ship 28GunFrigate1
      Init weathers complete. 35 weathers found.
      Template 111 -> path not found chr.id = Carrier_459
      Main_InitGame
      Init encounters complete.
      How islands = 26
      Init weathers complete. 35 weathers found.
      No speed rChar.Ship Frigate_l1
      Init weathers complete. 35 weathers found.
      LocLoadShips: need (ships_other): 5, but max_num_ships_other: 5
      Template dialog: can’t start dialog_1, DialogMain return false!
      ItemLogic: showing item at 2.74417, 1.36252, 2.97812
      No speed rChar.Ship Galeon_h211
      Init weathers complete. 35 weathers found.
      LocLoadShips: need (ships_other): 5, but max_num_ships_other: 5
      Template 111
      -> path not found chr.id = Carrier_463
      Template 111
      -> path not found chr.id = Carrier_466
      Template
      -> failure for chr.id = GenChar_460
      Template dialog: can’t start dialog_1, DialogMain return false!
      LocLoadShips: need (ships_other): 5, but max_num_ships_other: 5
      LocLoadShips: need (ships_other): 5, but max_num_ships_other: 5
      Template 111
      -> path not found chr.id = Carrier_463
      Template 111
      -> path not found chr.id = Carrier_464
      Template 111
      -> path not found chr.id = Carrier_465
      Group_DeleteGroup sGroupID = Sea_Follower01, can’t find group
      LocLoadShips: need (ships_other): 5, but max_num_ships_other: 5
      Template 111
      -> path not found chr.id = Carrier_464
      Template 111
      -> path not found chr.id = Carrier_465

      • #2425
        Jeffrey
        Keymaster

        Go ahead with the camera…fisheye was becoming a bit grating for me, LOL.

        Unfortunately, what I’ve noticed with some crashes is that they are often in unexpected and unhandled situations, so you don’t see them in a log because the code wasn’t implementing a check/output to log in case of bad info. This is where the .dmp files will come in handy, because I can load them in the debugger against the .lib/symbols for this release and find the function and .dll where the crash occurs…usually it’s an access memory violation. Hopefully that .dmp file method will help me track it down.

        Odd it came when going to char log…not seen that in my test. Though I also have not experienced Orazio’s ship cabin/new game problem either on two different machines I tried.

    • #2426
      Orazio
      Moderator

      The dump file I have is 450 MB and my upload speed is ridiculously low. I managed to compress it to 113 MB, but it’s still a bit big.

      I read the content with WinDbg, but I understood you need the file to use with symbols (?), so posting here the content would be of no help, right?

      Anyway if you need the file, I’ll try to upload it and will send you a link privately: I don’t know what info on my machine are in there, and don’t like the idea that everybody on the internet can download it.

      • #2430
        Jeffrey
        Keymaster

        Yes, I need the file so I can load it in the debug feature within Visual Studio, along with the symbol .lib files used to create the .exe/.dll. Then it will identify the functions where the crash happened.

        It’s fine to PM a link, but my understanding is that .dmp files will only contain sensitive information if the app itself contains features where you would input something like a password, or opens/saves documents that might have personal user info. Since this app does no such thing, I don’t think it’s a worry, but better safe than sorry.

    • #2440
      Jeffrey
      Keymaster

      Uh oh, Orazio. Turns out there’s a slight issue. That .dmp file is 64 bit, and I guess you have to run a 32 bit task manager to dump the file from a 32 bit process/program for me to get one that is debuggable.

      I found this:

      32-bit task manager under C:\Windows\SysWOW64\taskmgr.exe. We can use this and select “Create Dump File” for 32-bit process. To confirm we are using 32-bit task manager, check the process name of it. It should be taskmgr.exe *32.

      Sorry about that. Open a file explorer, launch START.exe and when it stops, keep AoP running, find C:\Windows\SysWOW64\taskmgr.exe and launch, right-click the START.exe process in the manager and dump from there.

    • #2441
      modernknight1
      Keymaster

      OK I have some more errors to report.

      The game ran fine for several hours with no more crashes from looking at the log book. I tried to crash it by going in and out numerous times.

      So after numerous battles, loot and cargo missions I finally had my next problem when I went into the shipyard at Curacao. The screen turned black. I suspect this is a locations\loader problem with a renamed or missing scene file because I’ve seen this before a lot in the past. Those files are very finicky.

      Gonna play some TEHO now a little before bed. There are some errors I’ve never seen before. Also the game is laggy now and it isn’t with my regular version. It took a really long time to load and get out of a storm. I wonder if this could have to do with the new long additional paths to where the files are because I always run my game files right on the desktop? Here are the logs:

      error:

      RUNTIME ERROR – file: characters\QuestsUtilite.c; line: 1492
      missed attribute: validity
      RUNTIME ERROR – file: characters\QuestsUtilite.c; line: 1492
      null ap
      RUNTIME ERROR – file: characters\QuestsUtilite.c; line: 1492
      no rAP data
      RUNTIME ERROR – file: locations\locations_loader.c; line: 1007
      incorrect argument index
      RUNTIME ERROR – file: locations\locations_loader.c; line: 1007
      Invalid conversation
      RUNTIME ERROR – file: locations\locations_loader.c; line: 1007
      incorrect argument index

      system:

      Loading modules (folder: modules\)…
      44 loaded.
      Reset…
      Initializing CORE…
      Creating atoms space: 128
      done
      Initializing complete
      Starting DirectX 8
      ERROR: Techniques: Found duplicate technique name: rain
      ERROR: in compile shader seaps_atireflect
      error:
      (1) : (Assembly Error) syntax error

      Techniques: 22 shaders compiled.
      Techniques: 230 techniques compiled.
      Techniques: compiled by 577465936 ticks.
      Using FMOD 00044461
      Sound initialized ok !!!
      FMOD: Speaker mode STEREO
      Intel CPU: No, SSE: Off, HyperThreading: Off
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\mainmenu\AOPBoard.gm: can’t open geometry file
      Warning! Interface Back Scene: invalid menu model mainmenu\AOPBoard or transform matrix
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\mainmenu\AOPBoard.gm: can’t open geometry file
      Warning! Interface Back Scene: invalid menu model mainmenu\AOPBoard or transform matrix
      Bad rope data for rope: (model=ships\Brig_20_Gun1_181\Brig_20_Gun1_181) (rope num = 1018) (begin group=-1, end group=0)
      Begin pointer = 213097084? end pointer = 0
      ERROR: SetCurrentBlock: unknown technique <> first character is <(null)>

      – skipped bad rope stuff –

      Begin pointer = 171540596? end pointer = 0
      Ship Boat doesn’t have fire places
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\AMMO\NOTEXTURE.TGA.tx
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\AMMO\NOTEXTURE.TGA.tx
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\AMMO\NOTEXTURE.TGA.tx
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Can’t sound resume -2 !!!! Sound is not playing !!!!
      Character animation: not set idle action: “Poklon”

      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\AMMO\NOTEXTURE.TGA.tx
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Warning: NPCharacter -> trace node not found
      Can’t sound resume -2 !!!! Sound is not playing !!!!
      Warning: NPCharacter -> trace node not found
      BLADE::Realize -> no find locator “start”, model “Ammo\topor3”

      Island Set
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Antigua_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Bermudes_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Barbados_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Beliz_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Cuba1_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Cuba2_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Caiman_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Cumana_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Caracas_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Curacao_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Cartahena_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Dominica_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Guadeloupe_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Hispaniola1_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Hispaniola2_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Jamaica_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Martinique_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Maracaibo_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\SentMartin_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Nevis_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\PuertoRico_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\PortoBello_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Pearl_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Panama_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\SantaCatalina_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Terks_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Tortuga_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Trinidad_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\Tenotchitlan_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\mein_area.gm: can’t open geometry file
      World map: can’t load model of island’s area: islands\mein_area
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\mein_palms.gm: can’t open geometry file
      C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\WorldMap\islands\LostShipsCity_palms.gm: can’t open geometry file
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\WORLDMAP\INTERFACES\EVENTBKG.TGA.tx
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\WORLDMAP\INTERFACES\BUTTON.TGA.tx
      Fader::Init() -> Fader already created, fade out phase
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      Fader::Init() -> Fader already created, fade out phase
      Intel CPU: No, SSE: Off, HyperThreading: Off

      – More bad rope data –

      method’s parameter may have an invalid value
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      ERROR: SetCurrentBlock: unknown technique <> first character is <(null)>
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      CreateIndexBuffer::CreateIndexBuffer: The method call is invalid For example, a method’s parameter may have an invalid value
      ERROR: SetCurrentBlock: unknown technique <> first character is <(null)>
      Intel CPU: No, SSE: Off, HyperThreading: Off
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\TORNADO\ITEMS.TGA.tx
      Can’t load texture C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\textures\WOODRE1.TGA.tx
      Bad rope data for rope: (model=ships\DutchFrigate1\DutchFrigate1) (rope num = 3) (begin group=0, end group=-1)
      Begin pointer = 0? end pointer = 419710724
      Bad rope data for rope: (model=ships\DutchFrigate1\DutchFrigate1) (rope num = 4) (begin group=0, end group=-1)
      ERROR: SetCurrentBlock: unknown technique <> first character is <(null)>
      Ptc(“C:\Users\challenger\Desktop\ERAS2.1.5.8\Age of Pirates 2\RESOURCE\models\locations\inside\Shipyard03\Shipyard03.ptc”) -> file not found
      Can’t loaded patch data file Shipyard03.ptc for npc.
      Leak: ‘eras2\xinterface\questfilereader\..\..\common_h\templates\string.h’ line 38, size 16

    • #2446
      Jeffrey
      Keymaster

      Don’t know…though I did notice that the worldmap routines look for _palm models and won’t find any. Though not finding any doesn’t affect the game, as it just passes them by, but logs it anyway. As for ‘fireplace’, I’ve seen that before in the stock game and I think it’s really just ‘a place where fire might be’…like in battle boarding. I don’t think a missing fireplace is cause for concern…probably similar to palms where it logs it, but it’s a non-issue. Like I said, I’ve seen it in my working games that don’t crash.

      You know what would be really helpful? You have Visual Studio, right? If you have at least version 10, I should make you a debug version. If you don’t have 10, and don’t mind downloading/installing the free VS C++ Express 10, then you will have the debug runtime that comes with it. If I make you a debug version, upon a crash, all the debug info will come back to me in that .dmp file and it will actually take me directly to the source line of the problem.

      I chose to upload a ‘release’ with debug info because nobody else will have the debug runtime and they can’t run the game without it. The .dmp files will still tell me the .dll and the actual function within, and you can somewhat determine where the problem might be, but it’s still kind of a guessing game as the debug steps are actually within the assembly code. But with a full debug version, I can get down to the line of source with a .dmp file (I think).

      I have been delayed responding because I was very near getting a full compile with Dx9. I have that now…doesn’t work, but I really wasn’t holding my breath on that one, LOL. I followed instructions for migrating as close as I could, but full info on that is a bit scarce and I really don’t know anything about DirectX programming. I came close enough to compile the whole thing, but now it’s back to stepping through and figuring out where it’s going wrong.

      Get me those .dmp files! And let me know if you want a full debug version as that would speed things along. As for now, I need to download Orazio’s and see what I can figure out. Sorry for the delay, but Dx9 was intriguing me and I wanted to see if my attempt would be perfect and miraculous enough to just work…first time…LOL

      Nope 😉

    • #2451
      Jeffrey
      Keymaster

      Game loads now. Mangled though. Not sure why, but some Dx9 function calls fail in places where supposedly no code change was needed. There are some programs that didn’t require change at all according to migration notes. Oh well. Getting closer.

      Notice the dx9 references in ProcExplorer 🙂

      Game Launches in Dx9

    • #2464
      modernknight1
      Keymaster

      Simply FANTASTIC Jeffrey! I have FULL confidence that you will figure it out! I announced a little about it on the front page news for the April update.

      Keep up the GREAT WORK!!!

      I am making some great progress myself so this is exciting. I just wish I didn’t have to travel now. Not gonna let it set me back…

      MK

    • #2469
      Jeffrey
      Keymaster

      I think I already know the major problem; the asm part of of the .sha files can no longer be assembled. In Dx8, the declarations were apparently not fully implemented yet, but in Dx9, they are and some declarations are required in the asm portion of the code read in to assemble. But those .sha files do not declare the registers and the ‘assemble shaders’ call fails. There was no change made to that piece of the code on my part, so it’s not something I erroneously converted. I think all that’s required to fix that part is update the .sha files to meet the spec. I will see if simply adding the register declarations fixes it.

      But, I need to stop and divert to debugging from that .dmp Orazio provided, LOL Gonna go try for a steelhead (or two) in a short while and be back later…

    • #2476
      modernknight1
      Keymaster

      I will run whatever you need me to Jeffrey. I wanted to run performance tonight so I turned off all loggers. It still sometimes lags on transitions. Also textures disappear when the game becomes bogged down. I noticed item textures disappearing from lists. I think this is why the interior of the shipyard disappeared the other day. I’ve never seen it behave this way before.

      whatever you did enabled some additional commands during sailing. I can now tell my whole fleet to load the same ammunition from the 5,6,7,8 keys. My screen shot software is keyed using 8 so it was a big surprise. I have had to change my screenshot hot key. LOL

      Ran into a Spanish treasure fleet with NOT ONE ERROR tonight!!! EXCELLENT! No crashes even when going ashore!

      I am going to put a seperate version together using your files embedded in my version so that I don’t have the long pointer paths. I just think this may be one of the reasons for the long transitions. I’ve noticed with the log that you shouldn’t access it when you start the game because it will crash. However, transition to a couple of scenes or take on or complete a mission updating the log and it is fine. Each transition only seems to be long the FIRST time. Then the same events after are almost normal.

      I also wondered if the bodies(ragdolls) not disappearing now, is contributing to lag during battle scenes. Certainly it is much more convenient for looting.

      I hope you caught something! Steelhead eh…native steelhead??? If so you are from my neck of the woods. Nothing tastes better than fresh rainbow trout when you’re camping/backpacking in the mountains of Idaho. Gonna get me some in a month or so myself!

      Thanks again for all of the hard work!

      MK

      • #2479
        Jeffrey
        Keymaster

        First, yeah, I borrowed the hotkey commands for the fleet from GOF and that is actually in my “patch” files for running under the original compilation, too. Thought I had mentioned that, but perhaps not. It also means that upon adopting the new patch files, then loading a game, sometimes the character can’t move at all, and all one has to do is launch the game menu, choose Options, remap to default, then they work again. After that, you should also be able to remap any special mappings you prefer; you only have to do that once and after saving the options ‘stick’. The 5,6,7,8 tell fleet to load balls, grapes, knippels, bombs…in that order. Also, fleet sail away is O, fleet follow is P and fleet lower sails is L. I especially like L when the last ship or two strike their colors and sometimes while I’m sailing to board them, the rest of the fleet tends to wander and sometimes bump into each other, wrecking their own masts and such. P to follow is also nice in cases where I’ve instructed one ship to board an enemy and after success, sometimes the ordered ship just starts to sail away. When I’m busy ‘dealing with stuff’ like ships bombarding me, it’s quick to hotkey, rather than navigate the icon menu for the one ship.

        Anyway, performance…yeah, I noticed it grinds in some places, but that’s nothing I did, but inherited in the code we got. The only changes I made were a very small fix in the logic that parses the Program .c files of the game where it didn’t recognize the parameters for extern/native functions in some cases, rewrote the config interface as all the resource files were gone (the logic remained with us), put back the message number for fader transition screens that was taken away (just put the message number back in the handler and call the same function as the new number KK added) and the gamesave fix. That’s about it, so the rest is what we got. It will take some investigation, maybe add some logging, to find out what/why it’s doing what it’s doing in those situations. I can’t imagine the paths contribute to that as they are all still local on the machine, from the resident drive just like always…it’s not like they’re retrieving from a remote machine across a network or something. But it’s worth a try to experiment since it’s easy to do. I just don’t have the available disk space to make the 8+ copies I’ve got going for the stock AoP, GOF, ERAS, the patch versions, and now debug, release new compilations, and now a couple Dx9 experiments going, LOL

        Did not notice the ragdolls no longer disappear. I think in my /Program code, I doubled the time from 1 minute to 2? But if they are not disappearing at all, that may be a change in the new compilation…perhaps the message was deprecated (like that fader transition screen message number was replaced, but I put it back and just call the same feature as the new number KK added).

        Steelhead is a bit of an obsession…they are crafty. Hence not a single story of success from yesterday; typical day of steelheading, LOL If you are Idaho, then we are neighbors…Oregon here.

    • #2486
      modernknight1
      Keymaster

      Love Oregon. When I was stationed at Fort Lewis early in my career I used to drive through all the time going back and forth from home to my unit on leave or four day passes. I broke down on the way home one time in those high desert mountains early in the morning (my wife was getting ready to have a child). It had been raining and those steep hills looked like velvet. I had had two blow outs and only one spare and it was a Sunday. Walked for miles until I got picked up by an old guy in a flatbed truck. He gave me a ride down to the next town which was still around 10 miles more. Then he opened up the only little tire store in town that he owned and fixed my two blowouts – and then he ran me back to my car. I have never forgotten that act of kindness and I have helped so many stranded people out myself over the years because of that kind old Oregon man.

      Steelhead can most certainly be elusive. I have run into places in the higher country where they stocked the lakes with Rainbow that run up the surrounding streams and creeks that are smaller than your average steelhead and dummer too. I’ve caught my limit before in an hour. The steelhead off the Columbia and Snake rivers are indeed some slippery fellows. I remember I was with my grandpa in a boat on the Snake and we were lure fishing while the kids fished with bait. We swore the same fish was hiding under our own boat and carefully eating the bait off of the kid’s hooks. Never could get him even when we moved. Smart damn fish and big too. Love fish stories.

      Interestingly I think the lag problem is not in your new code but in the new fighters patch. I played my test version 8 with only the fighters added and even in small battles with ships that have no bad data – bad lag. When I went back to version 7 without the new fighter patch and many more ships and much more action happening in the saves – no lag at all. Now that I know where to investigate gonna start the loggers when I get to my destination (traveling) and try unraveling this mystery.

      MK

      • #2495
        Jeffrey
        Keymaster

        Nice. I don’t think much has changed…sure, there are more people these days than ‘back in the day’, but here’s a story from only a few months ago:

        A buddy and I scheduled a trip to a river near the coast, to of course, target some winter steelhead. I drove to his house, parked my rig, and we headed out there in the early morning (still dark) in his pickup truck. We were traversing the fairly low coastal mountain range, when we hit a patch of black ice. The tail end started to swing around, he spun the wheel into the skid, but overcorrected, the tail spun around the other way, then we started to pirouette. We slid off the road, into an embankment that we struck while sideways, which then pitched the truck into a rollover. Odd sensation of ‘time slows down’ as we tick over, stuff flying everywhere, hurling our body weight against the tension of seatbelts as we spin upside down…we came to rest sideways, driver door facing the ground. We had to stand on the ground, through the driver window and crawl out the window on the passenger side. Good times, LOL.

        So, we’re now stuck on the relatively unused highway over the coastal mountains. Fortunately, we hadn’t gone far enough to get out of cell range, but while standing there assessing the situation, damage, etc (it was totaled, BTW). A very large, newer, extended cab pickup truck passes, slows down, U turns, and parks on the other side of the road. An older couple (husband/wife), probably in their early 60s, gets out and walks across to us. In a short conversation, they insist that we don’t pay for towing, that we use their AAA. But in order to do that, they call, and then will have to wait with us for the tow driver to arrive as a member has to be present (and also at least a passenger, so she lied about traveling with us) and provide info; it’s going to be at least an hour wait.

        So even though they were traveling that morning to scout some hunting areas and do some fishing themselves, they will sit with us. They invited us to sit in the back seat of the extended cab, where it’s warmer. They shared their coffee with us and we chatted about all things steelhead when they found out where we were headed. He had some great stories about a particular area when he found out I actually knew some of the more ‘secret’ spots along the river were were headed to (I’ve done much exploring to find unpressured water 🙂 ). Might be a little odd for some people to picture us strangers, sitting together sharing coffee while the ‘hosts’ are sitting up front with their two long rifles propped up in their lap (they had to make room in the back for us), but this IS Oregon after all…nothing strange about that 🙂 So they blew a good portion of their morning, forgoing their own plans, just to help us out.

    • #2488
      Orazio
      Moderator

      Ehy Jeffrey, did you find anything useful in my dump file?

    • #2496
      Jeffrey
      Keymaster

      Well, I ran the file in debug mode and found the function in the render .dll where the mishap occurs. It’s FontLoad, and a subsequent waitforobject call that crashed. Unfortunately, since I can’t replicate the problem, I don’t exactly know why this would occur, so I’m a bit stuck in figuring a resolution for it at the moment.

    • #2505
      modernknight1
      Keymaster

      That is a great story! Yeah my story occurred in the late 80s before cell phones existed. Nowadays I can simply call my insurance hotline and I get free towing. I should also add that the old guy didn’t charge me thing. When I said “what do I owe you?” He replied, “Not a damn thing son – you just get home safe now.”

      The northwest is just so awesome. I have been back to Ft Lewis a lot over the years and the area around Seattle and Tacoma have changed a lot and have had a lot of outsiders coming in. Fortunately Idaho still only has just over a million people in the whole state and has the largest tracts of contiguous primitive areas, parks, wilderness areas and mountains in the entire United States with the exception of Alaska. It just snowed again yesterday! The local ski resorts could stay open later into May this year, but they aren’t allowed to.

      My plans changed so I am going to be going on several trips in the next few weeks. So I flew on this first one without the desktop. So I am away from my working area for a week. I do have my laptops and my 2 terrabyte external so I have a lot to work on in the evenings still. Haven’t had any breakthroughs yet but working.

      MK

    • #2507
      Orazio
      Moderator

      I think I found an unpleasant bug, which is not game-breaking, rather immersion-breaking.

      It seems that inside ships (cabins and decks) the lighting files are not read/loaded from approximately 12:00 to 19:00. This means that light during those hours is very unnatural, far too bright without any relation with the corresponding time of the day.

      I tried to understand if this is true for other locations like taverns and shops, but that wasn’t very clear. I need to check better.

      I don’t have a GoF (without ERAS) version installed to see if it’s a problem of ERAS only or it was inherited from GoF.
      One thing I discovered is that GoF broke part of the loclighter tool, which is used to generate the different light conditions for locations, so I think this bug may be related to that…

      Can somebody confirm this trying to enter a ship cabin from 12 to 19 and see how the light is? Does it look natural or is it very very bright and not convincing? (Try to look first at 18 – no proper lighting – then at 19 – proper lighting- to see the difference)

      • This reply was modified 8 years, 6 months ago by Orazio.
    • #2509
      Orazio
      Moderator

      Ok I think I fixed the no light bug.

      Light information is in the .col files, which are numbered after the time of the day (6, 7, 8, 9, 10 and so on). For hours from 12 to 19, the game – instead of looking for col files ‘day12’ to ‘day19’ – was looking for col files ‘day1’, ‘day2’, ‘day3’ and ‘day4’, that do not exist (1 a.m. is ‘night1’ and so on), hence the unnatural lighting.

      The issue was in ‘Weather\init\Day.c’, with wrong entries for those hours. I don’t know if MK or others edited those values for some specific reason, but putting them back to default fixed the bug. I’ll run some more test to be sure, then I’ll post here the correct Day.c file.

      • #2510
        Jeffrey
        Keymaster

        I may have edited those wrong, I’d have to check. But I remember I found that there were entries that didn’t exist (like you did) and may have inadvertently adjusted them to what they ‘should be’ and messed it up the same way it was already messed up, LOL.

        Also, I think the fontload crash was misleading. I’ve taken further look and I think (but not yet sure as I’m unable to reproduce the problem myself just yet) that some spawned process thread gets started with a null pointer and the WaitForMultipleObject fails with a crash because of it…that has nothing to do with the fontload function but that just happened to be the current thing running when the WaitFor failed. I have found that WaitForMultipleObject can often work for a 32 bit machine, but fail/crash in a 64 bit machine because 64 bit is more stringent in its data requirements/what it considers valid, whereas a 32 bit machine will sometimes ignore. I actually have a 64 bit machine here in the house, so hopefully I can recreate and narrow things down further.

    • #2518
      Orazio
      Moderator

      I post the correct Day.c file.
      I found out that in mine there were other wrong entries for the sky textures to use in certain hours, causing the white sky bug. I fixed them.
      However, looking at the Day.c file in Jeffrey’s recompiled version (ERAS2Test), the wrong entries for the sky were already fixed.

      Anyway, this Day.c makes use of the correct col files (for the lighting) for hours from 12 to 18.
      To be copied in ‘ERAS_installation_directory\Program\Weather\init’.

      Day.c

      • #2520
        Jeffrey
        Keymaster

        Ah, good. If it’s correct in the ERAS2Test files, I most likely included the same corrections in ERAS2.Patch as well. ERAS2.Patch being strictly files to be used for fixing various issues with the standard game compilation.

    • #2523
      modernknight1
      Keymaster

      Thanks for the sky work Orazio. This was something created as a defect by myself because I had imported weather and sky box files from other mods and a couple of sky boxes were hand made by yours truly. This is something I was working on in the patch. I planned to import some new skyboxes in place of the missing skies. I had assumed the problem was with empty folders not defective c. file. I was leaving this as the last thing to do on my list, but now I will simply add some substitutions or some additional code to randomize the hourly skies. Nice work! You’re AWESOME!

      MK

    • #2530
      Orazio
      Moderator

      I was taking a look at the files in Models\Locations\decks\deckLowVSMedium and deckLowVSBig (the boarding scenes) and noticed something really strange: many of the .col files have their name truncated, even missing the ‘col’ extension.

      Obviously the game doesn’t know what to do with such files, as they’re useless without the proper name and extension: I think this is the cause of some of the weird lighting during boarding. I’m renaming them the correct way to see if things get fixed…

    • #2531
      Orazio
      Moderator

      Yes, those .col files were clearly messed up! In each one of the boarding scenes: deckLowVSBig, deckLowVSMedium and deckMediumVSBig.

      I renamed them, and also deleted some that weren’t necessary; tested some boarding, and the lighting was ok, I didn’t see anything weird, so I think this is a problem less.

      Later I’ll upload the right files and post a link here.

      • #2532
        Orazio
        Moderator

        As I said, the right .col files for the three boarding scenes: DOWNLOAD

    • #2533
      Orazio
      Moderator

      I was testing boardings using Jeffrey’s patch (ERAS.Patch.zip), and I noticed light is still strange in some occasions, even though I renamed the col files.

      When I reloaded the save using the “default” Program folder (the one downloaded with the entire mod, plus MK’s 1.5.7 patch), the light seemed normal again.

      Looking at .col files in GM Viewer reveals that the light is indeed right, yet I don’t understand why sometimes the model is not lit properly…

      • #2534
        Orazio
        Moderator

        mmm I’m not sure it’s Jeffrey’s patch… I keep seeing light anomalies also without his patch.
        The strange thing is that the .col files are ok if I look at the them in GM Viewer.
        I’m pretty confused right now…

    • #2580
      Jeffrey
      Keymaster

      I had a work project obligation that sucked much of my time, but I was able to complete and ready for beta testing one day before deadline. As such, I should be able to resume carving out a bit of personal time for this. Apologize for the unforeseen hiatus, but duty called 🙂

      I want to try recreating Orazio’s error on one of my kids’ 64 bit machines. I think I will install VS and run debug mode, hoping for similar error to isolate to the actual code line.

      Am also sending a PM to MK about DX9…that endeavor may need to be indefinitely postponed as I have no real knowledge of DirectX and its interfaces, so while I know some of what needs to change (because the code compiles, but the display result is bad/not working), I don’t know how/where to do it as it requires experience/knowledge of actual DirectX techniques and I am blind to those.

      • #2591
        Jeffrey
        Keymaster

        “I want to try recreating Orazio’s error on one of my kids’ 64 bit machines. I think I will install VS and run debug mode, hoping for similar error to isolate to the actual code line.”

        Orazio, got VS installed, along with the full source, on one of them yesterday. I will proceed to play around and try to recreate your issue while in debug mode to isolate the exact code-line causing the problem as your dump file only grants me a general idea of the problematic function and I could not easily identify the exact problem within the function code.

    • #2593
      Jeffrey
      Keymaster

      Orazio, since this error in your .dmp file occurs in the load font function, what do you show in start.ini for this value?

      startFontIniFile = fonts.ini

    • #2594
      Orazio
      Moderator

      I have exactly that same line… so is it an issue regarding fonts?

    • #2595
      Orazio
      Moderator

      Ok, problem solved… I was using the RESOURCE\INI folder from my original installation of ERAS, not the one provided with ERAS2Test.

      Apparently the files in the two folders are somehow different, causing the crash when starting a new game…

      Thinking about it, it was something I should’ve tested much earlier. Sorry Jeffrey if I caused you any trouble installing VS in other computers etc.

      • This reply was modified 8 years, 5 months ago by Orazio.
      • #2599
        Jeffrey
        Keymaster

        No worries. This is good news.

        I will compare the two and try to find what is likely a missing file so that the download will work on its own. But for now, a good workaround in a problem like this is to do as you did and copy/replace Resource from the original fileset.

        Thanks.

        • #2602
          Jeffrey
          Keymaster

          LOL, wait a minute. I read that backwards the first time. You were using the original INI versions, then copied over the download version, which worked for you. So I am good and don’t need to look for differences. I thought it was the other way around for a moment.

    • #2597
      0range
      Participant

      Hey, MK! I logged in just to salute you and cheer you up! By the way, I am playing rarely for the reason I have not mastered the blade fight. I know, it is a total shame, but it is true. My play style in modern days is ironman style, I mean, I try to avoid save-load tampering… Are you planning any updates for the manual fighting mechanism?

    • #2603
      Jeffrey
      Keymaster

      Orazio’s lighting/Day.c fixes are now in ERAS.Patch.zip: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #2693
      Samir
      Participant

      I have found a bug in Eras 2 MOD in a random quest from Tavern (a random pirate approaches you and gives you a proposition to visit his ship). I visited his ship, he told me about his offer (about a caravan who has moored near Saint John’s, at Cape Boon). I sail there with the pirate captain, but when I land on Cape Boon, the battle doesn’t start. I have done this quest many, many times on the original GOF 1.2 and it rarely happened that the soldiers are missing on the island. I think there is a bug in Eras 2 MOD, because I have met more than 7 pirates in the tavern so far, and every time I missed the bounty because the soldiers were missing…
      In GOF 1.2 the bug used to happen when in the quest log it was written: “has moored some-close to X location (for instance Havana). When the correct location of the island was given, for instance: “A caravan carrying gold has moored at the Trinidad and Tobago Lighthouse…” then I always encountered soldiers after landing to certain location. So far, I’ve met about 7 pirates and I had to fail all of them because there was no one on the island when I landed…

      • #2698
        Jeffrey
        Keymaster

        The only time there is a battle on shore is when they are ‘stranded’ awaiting pickup. If they are ‘moored somewhere nearby’ they are on their ships, somewhere in the vicinity and you have to find them. And they are not always within eyesight of the specified location.

        If you get on deck, in first person, and very slowly scan the horizon in all directions with a spyglass, even if you can’t see them, their ship icons will display and you can start heading that direction.

        • #2699
          Samir
          Participant

          Sorry, my bad. I haven’t checked for ships really… So it means: if the pirate offers me to attack the caravan belonging to England, and I’m playing as English, they will turn hostile on me? Because when you do a land fight, you don’t lose reputation with certain nation on this quest…

        • #2700
          Jeffrey
          Keymaster

          Hehe, yes they will turn hostile. I believe that your relation takes a slight hit if you actually kill an English guard (in the case you present), but not quite as badly as when you fire upon their ship. Also, if you stand back and let everyone else kill them, nothing happens to your relation 🙂

          Actually, if you have other ships in your fleet, if you never fire, and your companions sink/board them, nothing happens to your relation either.

          When presented with an offer in the tavern, I often ‘cheat’ and save right there. Go to the ship, and if it’s a nation I don’t want to tangle with, I revert because of the problem you mention…you never know when it’s going to be a friendly nation. Or you can turn it down and fight out the disagreement with the pirate when he gets angry…you know, just for fun.

          • #2702
            Samir
            Participant

            Thanks! You know, it is an important quest for me because it brings you a lot of gold… 😀

          • #2704
            Jeffrey
            Keymaster

            Yes, gold, silver or slaves, usually.

            In fact, that was one of the things I fixed in the game. Turns out there was an error in the AI for NPC captains traveling around on their own ‘quests’. They are assigned their own travels, and that’s why you encounter them in various spots. The problem was that you soon stop running into them…ever. At first, I thought it was because of level discrepancy.

            While they have to be within a few levels of your own character for them to approach you, the actual code error would sometimes cause them to ‘miss’ their quest deadline/stop date, and when that happens, they are doomed to never complete it because it was set to = date, instead of >= date to check completion. And if they never complete their mission, they are not eligible to approach you and you would never see them in taverns again if that happened for them. Eventually, it happens to just about all of them.

            So with the fix, you will have many more opportunities…plus, there are more NPC characters in ERAS anyway. LOL, but another side-effect I found is that now you get many more declines in the store, because the shopkeep is busy with another customer.

            Win some, lose some 😉

    • #2714
      Samir
      Participant

      I noticed this little bug in the Pirate quest in tavern (the one that asks you to visit him onboard). Every dialog with the pirate has this bug, where you, instead of asking him: “And your name is?” or “And you might be?” or “And your name, sir?” or something like that, we have a wrong question saying: “My name is.” After that, the pirate captain presents himself. Jeffrey, can you have a look into this?

      • #2715
        Jeffrey
        Keymaster

        You know, I think I may have noticed this as well in the past and in what must have been sheer laziness, never bothered to correct…LOL Yes, that should be easy enough to find/fix. I’ll look into it.

        • #2716
          Samir
          Participant

          Thanks, Jeffrey! 🙂

          Also, I noticed a small performance drop when I was at Basse-Terre in 3D sailing mode. When I turned the camera towards the sky, I noticed that fps would run low and camera spinning wasn’t smooth. Could Orazio maybe have a look at that? I think the cloud textures need to be optimized, the same way as the goods icons in the shops. I think they aren’t resized properly.

          • #2738
            Orazio
            Moderator

            Yes, the sky textures are not compressed, and maybe they can also be scaled down. However I don’t remember any lag looking at the sky.
            Should I compress them?

          • #2741
            Jeffrey
            Keymaster

            I would be curious to see if compressing, without any reduction in image quality/resolution, would fare.

            While counter-intuitive, it might actually be faster. While the game would certainly have to decompress them itself, which takes time, it might be that the loading from disk to memory would be quicker due to reduced size, but the cycles needed for decompression, once in memory would be much faster than the time time it would have taken to load-from-disk the uncompressed file. I/O from disk is much slower than what the CPU/GPU would need to decompress once it has the needed bytes from the disk.

            My bet is this might gain some speed.

        • #2717
          Jeffrey
          Keymaster

          That dialog is corrected now. It affects all versions since the original, as far as I can tell. I’ve uploaded the fix in all 3 of my patch .zips.

          • #2718
            Samir
            Participant

            Does it require a new game?

          • #2719
            Jeffrey
            Keymaster

            No new game. If the Program\DIALOGS\russian\PGG_dialog.c is copied over, the next time you have this conversation, it should not have that trailing “. . my name is <blank>”. Your name is already stated earlier in the prior sentence, and that last part was both duplicate and did not actually add your name to the end anyway, so I removed it.

    • #2747
      Samir
      Participant

      Possible bug… After boarding a ship, this is where I’m taken when I kill all enemies’ crew at the deck. Instead of taking me to the Captain’s quarters, I get this sea animation and the game is stuck there. I can only open Main menu. I can provide Save game if needed.

      This is the ship that I boarded.

      • This reply was modified 8 years, 4 months ago by Samir.
    • #2749
      Orazio
      Moderator

      I know what that is. You are using Jeffrey’s patch/files with a previous save game, right?

      If I recall correctly, he included my new cabin for caravels. When using an old save, you must reinit the boarding locations or else you will get this bug. Can you post the content of this file: Program\console.c? I don’t know if he included the necessary code to reinit the boarding locations.

    • #2750
      Samir
      Participant

      That’s right. But I also uninstalled the game and reinstalled just with the MK’s 1.5.7 patch (that’s the original game I started, I added the Jeffrey’s patch later), and I still got that bug without Jeffrey’s patch.
      Here’s the link for my console.c file:
      https://www.dropbox.com/s/ca9nll30dq4vyfe/console.c?dl=0

    • #2751
      Orazio
      Moderator

      Mmmm this may have mixed things up! Anyway, reinstall Jeffrey’s patch and then do the following.

      The console.c is correct. I guess you didn’t add new locations on your own, so all you have to do is press F4 after loading your save. You should read ‘operation successful’.

      Also, to be sure, check that ‘#define MAX_LOCATIONS’ in Program\globals.c is equal to or greater than 703.

    • #2752
      Samir
      Participant

      I didn’t edit anything in console.c
      I didn’t edit anything except applying the Patch.
      I tried pressing F4 and I got the message “operations successfull”.
      I changed the #define MAX_LOCATIONS to 703. It was 702.

      Now, when I board the same ship, instantly after pressing the “Board” icon, I get a CTD saying: AOP2 has stopped working…

    • #2753
      Orazio
      Moderator

      Strange, never happened to me during testing. Usually I just had the empty scene with only water. Do you have logging enabled? You should post the logs here.

      • #2754
        Samir
        Participant

        Yep, it now happens to every ship I board… CTD…

        How do I enable logging?

    • #2755
      Orazio
      Moderator

      engini.ini, in the directory were the game executable is, find these lines and make sure they are like this:
      tracefilesoff = 0
      debuginfo = 1

      Then, after the game crashes, you should see 3 files in the game directory: compile, error and system. Post them here.

    • #2756
      Samir
      Participant

      Ok, I enabled it. Here are the .log files:

      https://www.dropbox.com/sh/rt2d1jdve1cddz9/AAAvfZSFrjmpIbpKpSqT594Ta?dl=0

      • This reply was modified 8 years, 4 months ago by Samir.
    • #2758
      Jeffrey
      Keymaster

      Error log shows an item array problem, which is something my patch resizes to be correct. Try changing your console.c to this:

      #include "ITEMS\initItems.c"
      
      void ExecuteConsole()
      {
      	#include "Ships\Ships_init.c"
      	#include "Locations\init\boarding.c"
      	
      	InitItems();
      	InitShips(); // Updates ships to have the new cabins - is it really needed?
      	
      	// This number is needed to reinit only boarding locations, avoiding unnecessary reinit of all locations
      	int n = 631; // If you have "vanilla" ERAS2 v1.5.7 don't change this number, if you added new locations on your own put the number you find in compile.log (see README)
      	
      	n = LocationInitBoarding(n); // Updates locations to include the new cabins models
      	
      	// Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
      	//pchar.Ship.Type = GenerateShip(name_of_your_ship, true);
      
      	Log_SetStringToLog("Operation successful!");
      }

      Load a game. Run the console, then save the game to a slot. Then try to play it. If further problems, post a new set of log files.

    • #2759
      Orazio
      Moderator

      Mmmm try to put the number in #define MAX_LOCATIONS back to 702.
      I tried to replicate your problem, and when I changed that number to 703 the CTDs started.

      And putting back 702, the boarding didn’t crash anymore. Actually 702 is right, it was my mistake to make you change it.

      • This reply was modified 8 years, 4 months ago by Orazio.
    • #2761
      Orazio
      Moderator

      It seems that changing the MAX_LOCATIONS in an existing game causes crashes when boarding a ship…

      I never experienced this when I tested the new cabins, but probably I always started the test games with the updated MAX_LOCATIONS number, so I didn’t need to change it after the start.

      But at this point I wonder why boardings didn’t crash when Samir applied Jeffrey’s patch, that takes the MAX_LOCATIONS from 700 (patch 1.5.7) to 702…

    • #2762
      Jeffrey
      Keymaster

      Not entirely sure, but it might be beneficial to reinit both the boarding locations and the remaining locations too. Also, that size should definitely be 702. But if playing a game from where it was defined as 700, I think they all need to be reinitialized.

      If the prior fixes don’t rectify. Load game, run this console.c, then save, reload that same save game, then try playing:

      #include "ITEMS\initItems.c"
      #include "Locations\locations_init.c"
      
      void ExecuteConsole()
      {
      	#include "Ships\Ships_init.c"
      	#include "Locations\init\boarding.c"
      	
      	InitItems();
              InitLocations();
      	InitShips(); // Updates ships to have the new cabins - is it really needed?
      	
      	// This number is needed to reinit only boarding locations, avoiding unnecessary reinit of all locations
      	int n = 631; // If you have "vanilla" ERAS2 v1.5.7 don't change this number, if you added new locations on your own put the number you find in compile.log (see README)
      	
      	n = LocationInitBoarding(n); // Updates locations to include the new cabins models
      	
      	// Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
      	//pchar.Ship.Type = GenerateShip(name_of_your_ship, true);
      
      	Log_SetStringToLog("Operation successful!");
      }
    • #2763
      Orazio
      Moderator

      If you reinit all the locations, I see that LocationInitBoarding(n) is called at the end of InitLocations(); so there is no need to call it again, and also to have that 631. And “Locations\init\boarding.c” is included in InitLocations().

      The console.c should be like the following I think, right? Just to avoid unnecessary things.

      #include "ITEMS\initItems.c"
      #include "Locations\locations_init.c"
      
      void ExecuteConsole()
      {
      	#include "Ships\Ships_init.c"
      	
      	InitItems();
              InitLocations();
      	InitShips(); // Updates ships to have the new cabins - is it really needed?
      	
      	// Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
      	//pchar.Ship.Type = GenerateShip(name_of_your_ship, true);
      
      	Log_SetStringToLog("Operation successful!");
      }
      • #2766
        Jeffrey
        Keymaster

        LOL, yes getting coached by Orazio now. You are correct.

        Run Orazio’s version as the call to boarding set is redundant in my post. Of course it won’t hurt either way as it will just do the same thing twice.

        Maybe I need more of my morning coffee… 😉

    • #2764
      Jeffrey
      Keymaster

      Now, with all that said, it is sometimes not always possible for a previous save-game to work with new code. Particularly if there is a new setting/variable inserted into _mod_on_off.h (I have found any new setting placed there is impossible to get a prior game to work…only new games).

      I have tried to make sure most of my work doesn’t require any new game, but I’ve done quite a bit and don’t always remember if I’m working with an ‘old’ save-game or a new one, because at this point, all my save-games work with my stuff and don’t have a problem, so I could just be working with always compatible formats at this point and not know it.

      Anyway, if the problem persists, I do have some debugging/coding skill and worst case, post a link to a save game (I will need the name of the profile name too, as the folder name has to match that exactly), and I can load/save myself and see if I can get it to work. After that, if it works, I can repost the newly saved game and you can have it back, but in a condition that should work for you. My game files match exactly the ERAS + ERAS.Patch.zip, so any game I can play should work with that setup.

    • #2765
      Orazio
      Moderator

      No, even after a reinit of all the locations, the boarding crashed with MAX_LOCATIONS = 703.
      This is not really a problem now, but it means that if new locations will be added, a new game is required, even after a reinit…

      • #2774
        Jeffrey
        Keymaster

        OK, with these 4 arrays, I can’t find a way to resize them and play a previous save game: Locations, Characters, Islands, Colonies. A new game must be started to avoid problems. Items, Ships, etc. are OK if a reinit is called and it’s because of where they are defined/stored…in .c code not of global scope.

        The Locations, Characters, etc. are defined in globals.c and they can’t be resized.

        However, given we have the source code of the game, there is something that might work. I can create a resize function that is accessible from a call in the Program .c code (like console.c). It would serve to resize an array, but after the call, the array would be empty of data and a reinit would have to be called. For instance, in console.c, it would look something like this:

        int NewSize = MAX_LOCATIONS;
        ResizeArray(Locations, NewSize);
        InitLocations();

    • #2767
      Jeffrey
      Keymaster

      That’s interesting and I may have to see if there’s a way around that. I don’t see why the array can’t be resized, as I was able to do it with both ships and items because they were wrong and I thought a reinit allowed me to use a previous game, as long as it was resaved after a new init call for both.

      But if Samir started with 700, then resizing to 702 would be the same problem you describe with your test of 702 to 703. And thus may never work with a prior game.

    • #2768
      Orazio
      Moderator

      If I understood correctly, he started with the patch 1.5.7, that has a max locations of 700.

      Then he applied your patch, that includes my modified globals.c with two more locations (one cabin for “peace” and one cabin for boarding), taking the max locations to 702. And his game didn’t crash! He only had the empty scene with only water.

      So why going from 702 to 703 (just for testing) now is crashing the game when a boarding happens? I can’t understand! Unless maybe his globals.c was somehow already modified when he started his game?

      • #2769
        Jeffrey
        Keymaster

        OK, if it didn’t crash, but he gets that empty water scene, we can probably figure that out and it might be fixable given enough error logs (the first already showed an items problem).

        But yeah, I’m not sure about the next thing you mention about again increasing location array and might spend some time trying myself. Like you say, it isn’t a problem now, but seems like it should not happen after reinitializing the locations.

    • #2770
      Orazio
      Moderator

      I started another game with max_locations = 705. Tested a boarding and everything was ok.

      Changed the max_locations to 707, reloaded the save and the boarding crashed.

      In the error.log there is this:

      RUNTIME ERROR - file: seadogs.c; line: 867
      invalid index 705 [size:705]
      RUNTIME ERROR - file: seadogs.c; line: 867
      invalid index 706 [size:705]
      RUNTIME ERROR - file: seadogs.c; line: 867
      invalid index 705 [size:705]

      where 705 is clearly the previous value of max_locations (in Samir’s log was 702) and on line 867 I see the end of the OnSave() function… it may be a clue?

      • #2772
        Jeffrey
        Keymaster

        Hey, this is great…you’re already doing the work for me! LOL

        Did you reinit locations after you loaded the save game? Do that, then resave, load that save, then try?

        That OnSave is exactly where I would expect the problem, because I’ve seen it before. The game is saved with 705, but the game also stores an identical array somewhere in the .exe/.dll memory for the loaded-from-save info, and one for the loaded-from-init and when it tries to iterate both, one has space for 705 and the other has space for 707, but when it loops through to do its work, it will try to get the array index all the way to 707, but it can’t do that with the one that only has 705 slots. But, if you reinit, resave, reload, theoretically they will now be identical and not have that problem.

      • #2773
        Jeffrey
        Keymaster

        Not really important, but just in case to clear things up, when I say to 707, it’s really MAX_LOCATIONS minus 1, as the arrays are indexed with a zero-based first element. That’s why the error is invalid index 705 for [size:705]. A 705 slot array can only be referenced with indices 0 to 704. In this case, because you set a new one for 707, it’s trying to get to 705 and 706, but in the array it set aside from the save-data, with 705 slots, while trying to do some sort of work against the newly initialized array that is size 707.

    • #2771
      Jeffrey
      Keymaster

      Also, that boarding to an empty water scene is familiar to me and happened during my work on the additional fighter mod. So it’s possible the patch files are not fully copied over. That same problem during that fighter work was due to some things that needed to be changed in loc_ai\LAi_boarding.c, if I remember correctly. All the corrected files are part of the patch.zip, so it may be a case of ensuring everything was copied to the right place.

      To be sure, we need to get rid of that item error I saw in the error.log about the items, by calling the items init and trying again and see what happens.

    • #2775
      Jeffrey
      Keymaster

      Also, for making sure the items, ships and locations array is correct (try to ignore Orazio’s and my back/forth about increasing MAX_LOCATIONS…it’s hypothetical and future-related), I unfortunately missed an extern reference for items for the example reinit I was trying to post for that item error.log first posted today. Use this in console.c:

      #include "Ships\Ships_init.c"
      #include "ITEMS\initItems.c"
      #include "Locations\locations_init.c"
      
      extern int InitItems();
      
      void ExecuteConsole()
      {
      	InitItems();
              InitLocations();
      	InitShips(); // Updates ships to have the new cabins - is it really needed?
      	
      	// This number is needed to reinit only boarding locations, avoiding unnecessary reinit of all locations
      	//int n = 631; // If you have "vanilla" ERAS2 v1.5.7 don't change this number, if you added new locations on your own put the number you find in compile.log (see README)
      	
      	//n = LocationInitBoarding(n); // Updates locations to include the new cabins models
      	
      	// Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
      	//pchar.Ship.Type = GenerateShip(name_of_your_ship, true);
      
      	Log_SetStringToLog("Operation successful!");
      }
    • #2776
      Samir
      Participant

      Sorry, my friends… I was away whole day…
      When I downloaded Eras 2 MOD, I got the main .zip file of the MOD, which is about 9GB heavy, then I applied the 1.5.7 patch also provided by MK. But after a while of playing, I saw that Jeffrey has made his tweaks in a file called ErasPatch.zip. I applied Jeffrey’s patch, and continued to play the game. I didn’t experience any issue and I didn’t press F4 to reinit because I didn’t know that it’s possible. I also applied Orazio’s alternative Main Menu, alternative items menu and vanilla resolution mod, because I was having fisheye effect with the original engine.ini. I also applied the optimized items textures by Orazio, and Jeffrey’s Loading backgrounds that he made for me, so there aren’t any of those real backgrounds taken by camera, which I hate so much 😀

      In my opinion, all these Mods should be put into the original Eras. Orazio’s items menu is amazing! And the optimized items should be also in the Mod…

      Now let’s get back to what happened with the boarding. I can’t recall if I boarded any other ships after I applied Jeffrey’s patch. Maybe I have. Can’t remember. The sea animation appears when I click to go to the enemy captain’s cabin. I didn’t edit anything in the console.c and in globals.c. How did the game work with the max locations changed to 702 from 700 (which I didn’t know), I have no idea…

    • #2777
      Samir
      Participant

      Ok, so I have tested it. I changed these lines into console.c as Orazio suggested:

      Participant
      If you reinit all the locations, I see that LocationInitBoarding(n) is called at the end of InitLocations(); so there is no need to call it again, and also to have that 631. And “Locations\init\boarding.c” is included in InitLocations().

      The console.c should be like the following I think, right? Just to avoid unnecessary things.

      #include “ITEMS\initItems.c”
      #include “Locations\locations_init.c”

      void ExecuteConsole()
      {
      #include “Ships\Ships_init.c”

      InitItems();
      InitLocations();
      InitShips(); // Updates ships to have the new cabins – is it really needed?

      // Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
      //pchar.Ship.Type = GenerateShip(name_of_your_ship, true);

      Log_SetStringToLog(“Operation successful!”);
      }

      I reverted max locations to 702. Then I pressed F4 to reinit. It fixed the CTD, but didn’t fix the boarding issue with the Caravel. Again, sea animation… Maybe I need to start a new game?

    • #2778
      Jeffrey
      Keymaster

      Put that code from the post right above your last one (my latest one), into console.c, load the game, press F4, then resave to a new slot. Then exit and load that last saved game. If that doesn’t work and you still see the sea, I think we’ll be able to fix it. Look at the error.log and post what it says.

      Last error log you posted mentioned an item problem and I think the item init fails without the extern reference, so we may still not have reinitialized them.

    • #2779
      Samir
      Participant

      Ok, this is what fixed the issue:

      #include “Ships\Ships_init.c”
      #include “ITEMS\initItems.c”
      #include “Locations\locations_init.c”

      extern int InitItems();

      void ExecuteConsole()
      {
      InitItems();
      InitLocations();
      InitShips(); // Updates ships to have the new cabins – is it really needed?

      // This number is needed to reinit only boarding locations, avoiding unnecessary reinit of all locations
      //int n = 631; // If you have “vanilla” ERAS2 v1.5.7 don’t change this number, if you added new locations on your own put the number you find in compile.log (see README)

      //n = LocationInitBoarding(n); // Updates locations to include the new cabins models

      // Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
      //pchar.Ship.Type = GenerateShip(name_of_your_ship, true);

      Log_SetStringToLog(“Operation successful!”);
      }

      You were right, max locations wasn’t the problem. After I executed this in console, I was able to board the Caravel, and I was moved to captain’s cabin to fight him without problems. Thanks for helping me, I’m glad I won’t need to start a new game… 😀

    • #2780
      Jeffrey
      Keymaster

      Great. Sorry for the trouble…a little too quick posting the code and when I tried it myself, that’s when I noticed the missing extern. So I caused a little of the confusion and trouble by being a bit complacent and sloppy. I blame it on the fact it was morning for me then, in Pacific Time and I had not chugged enough coffee. LOL

      • #2781
        Samir
        Participant

        Lol, don’t blame yourself! You and Orazio are keeping this forum alive… :/ Too bad, I can now see the potential of the Storm engine 2.8. I was told a while ago by a guy from PA! that PoTC engine (I think it’s 2.0) is better for modding. I don’t see any obstacle with 2.8 engine. Console works the same way as the one on New Horizons…

    • #2783
      Samir
      Participant

      Interesting, I’ve lost all the items from my ship’s chest after doing the reinit. I guess that was the items issue from the error.log?

      • #2784
        Jeffrey
        Keymaster

        Possibly, but if you can remember what most of them were, we can find their IDs add them to your character and then you can just put them back. Make a list.

    • #2786
      Orazio
      Moderator

      Jeffrey:
      OK, with these 4 arrays, I can’t find a way to resize them and play a previous save game: Locations, Characters, Islands, Colonies. A new game must be started to avoid problems. Items, Ships, etc. are OK if a reinit is called and it’s because of where they are defined/stored…in .c code not of global scope.

      The Locations, Characters, etc. are defined in globals.c and they can’t be resized.

      However, given we have the source code of the game, there is something that might work. I can create a resize function that is accessible from a call in the Program .c code (like console.c). It would serve to resize an array, but after the call, the array would be empty of data and a reinit would have to be called. For instance, in console.c, it would look something like this:

      int NewSize = MAX_LOCATIONS;
      ResizeArray(Locations, NewSize);
      InitLocations();

      So this means the game will always crash when MAX_LOCATIONS, MAX_ISLANDS, MAX_COLONIES and MAX_CHARACTERS in globals.c are changed and an old save is used?

      In this case I think it’s worth to try that other solution you proposed: it will make the mod more future-proof. We don’t know if new locations will be added, but if they will, at least a new game won’t be required, which is something I’m sure many players will appreciate.

      To Samir: glad everything is working now!

      • This reply was modified 8 years, 4 months ago by Orazio.
      • #2798
        Jeffrey
        Keymaster

        So I was looking into how to get those 4 arrays resized. The problem is that the .c code you see is actually just a small subset of c-like language. They only support some basic things and it’s made to look like C code, but really isn’t. Those ‘object’ arrays are a class type they call ENTITY and they don’t really store it as an array, but in this thing called a DATA class they made, with a chain of pointers to each element and attribute hashed up into a table-like structure.

        Anyway, while looking for ways to do this, in their subset of function commands they support, what do I find? SetArraySize. It’s not used anywhere in the Program code and is undocumented, not showing in _doc_script\syntax.txt. And it works! Set your MAX_LOCATIONS to 705 in globals.c and load a game. Run this in a console:

        void ExecuteConsole()
        {
        int x = GetArraySize(&Locations);
        Log_SetStringToLog(“Num Locations = ” + x);
        SetArraySize(&Locations, MAX_LOCATIONS);
        x = GetArraySize(&Locations);
        //InitLocations();
        Log_SetStringToLog(“New Locations = ” + x);
        }

        It will first show 702, because even though you set MAX_LOCATIONS to 705, when the save-game loads, it counts what that game had and sets that as the array quantity instead. But then it will add 3 more, and that is the second output you will see. The other nice thing is that unlike real-life resizing arrays, it doesn’t reset the entire array to blanks. I looked at how it does this and all it does is chain 3 more element pointers and preserves what already existed in the Locations ENTITY.

        However, there is a glitch, if you try to save, it will crash with a bad save. I will commence finding out why. But, the good news is that I don’t have to figure out that function part because it’s already built in.

      • #2807
        Jeffrey
        Keymaster

        The resize now works in the new compilations. It was one small issue with object attribute read that failed. I fixed this and you can now change MAX_LOCATIONS, load an old game, then run something like this:

        #include "locations\locations_init.c"
        
        void ExecuteConsole()
        {
        	int x = GetArraySize(&Locations);
        	Log_SetStringToLog("Num Locations = " + x);
        	SetArraySize(&Locations, MAX_LOCATIONS);
        	x = GetArraySize(&Locations);
        	InitLocations();
        	Log_SetStringToLog("Operation successful! " + x);
        }

        You will see the original Num Locations = 702, then Operation successful! 705. Save that game, reload it and run again and you will see it was saved as 705:

        Num Locations = 705
        Operation successful! 705

        I’ve not continued playing or further testing, but no more crash and the init for all the locations can run without error.

      • #2809
        Orazio
        Moderator

        I tested the resize in the newest DX8 and DX9 versions.

        In the DX9 game it worked, and no crash when boarding. In the DX8 game I couldn’t really test it, because when speeding time to quickly get to boarding the game kept crashing, usually when pressing R to reset the time speed to 1x.

        I got this in the error.log:

        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Missed array index
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Missed array index
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Invalid function argument
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1217
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        integer function return UNKNOWN value
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 716
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Invalid function argument
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1217
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        integer function return UNKNOWN value
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 716
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Invalid function argument
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1217
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        integer function return UNKNOWN value
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 716
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Invalid function argument
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1217
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        integer function return UNKNOWN value
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 716
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1215
        Invalid function argument
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1217
        Using reference variable without initializing
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        Unknown data type
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 1250
        integer function return UNKNOWN value
        RUNTIME ERROR - file: weather\WhrWeather.c; line: 716
        Unknown data type

        Another thing. In both the DX8 (ERAS2Test) and DX9 (ERAS2TestDX9) versions sometimes I still seem to have performance issues… It doesn’t always happen, in some occasions it’s just 4/5 fps less, which is acceptable, in other occasions much more, around 50% less.
        I haven’t really been playing recently, so my tests are very quick and maybe not accurate, but today I noticed this.

        And in the DX9 version I saw that the loading image when you die is missing, there is just a black screen.

        • #2810
          Jeffrey
          Keymaster

          In both versions, I did not crash. However, I did try running the console to resize, stayed in-game and continued playing and I would get a crash if I tried changing time elapse faster/slower. But if I run the resize, save the game, exit to menu and reload that same game, I do not crash.

          I still get those weather errors in the log, but that is because for whatever reason, the location init appears to blank the loadedLocation, but does not reset it and the saved-state is missing that because of the resize/init. Since that’s what gets loaded from the save-game data…a ‘nothing’ for that piece of data, it causes those weather errors when it tries to reference loadedLocation. Doesn’t seem to cause much issue, I could still board a ship. And, as soon as you do something like that, or anything else that resets your loadedLocation, those errors stop producing in the log.

          I will look into the death image on DX9. I would think it’s the same as the transition screens, but there must be something different about them that is causing trouble in 9.

    • #2791
      Samir
      Participant

      I had a bunch of items in my ship’s chest., one armor that gives 25% defense, and another one that gives 12% defense. The most important for me are the ones that you get when you start the game with Edward Teach:

      Brace of flintlock dags
      Brace of English captain’s dags
      Hurricane (got it through a nautical quiz)

      Other ones were not too important for me. I moved the pistols to the chest because I can’t equipt them right now, I don’t have that skill yet.

      • #2796
        Jeffrey
        Keymaster

        Make a new console.c (maybe rename the other one to keep it around). Put this in it:

        void ExecuteConsole()
        {
        	GiveItem2Character(pchar, "cirass3");
        	GiveItem2Character(pchar, "cirass8");
        	GiveItem2Character(pchar, "blade24");
        	GiveItem2Character(pchar, "pistol26");
        	GiveItem2Character(pchar, "pistol24");
        	Log_SetStringToLog("Operation successful!");
        }

        Perhaps go to your ship’s cabin before executing this, in case you become overloaded and slow to a crawl 🙂 That way you can just dump them into the chest.

    • #2792
      Samir
      Participant

      Another bug. I killed a bunch of bandits in the jungles near Panama. After that, I got +1 for personal abilities. I used that point on advanced defense, and after I closed the Character menu, camera changed to first person. I was unable to move. I was only able to rotate the camera 360 degrees. I cannot switch the camera to 3rd person. I can open the F2 menu and the Main menu, but cannot move at all. I needed that point on advanced defense because I’m currently doing the Austin quest, and I need as much defense as possible for the last killer. I haven’t tried using the point on other abilities, will try it now. I don’t know if the bug is related to me applying the Jeffrey’s patch, without starting a new game…

      Screenshots:

      • This reply was modified 8 years, 4 months ago by Samir.
      • #2795
        Jeffrey
        Keymaster

        Do you still have error logs enabled? In problems like that, there is almost always something written. I personally have not had issue assigning a skill point, but the problem may be particular to what you were doing at that moment.

    • #2799
      Samir
      Participant
      • #2802
        Jeffrey
        Keymaster

        This is terrible. I ask to reinit items, and find with your error that I missed putting an important file into the Patch…since the very beginning; it is missing items\items.h, which is the most important part for that reinit because it specifies the item and randitems size. Sorry.

        Get the new patch, that now contains items/items.h. Run that console to reinit items after loading your game, save that game to a new, empty slot, then try reloading it. I apologize for my oversight and you just got bad luck when the randitems came back with item 248 as the ‘random item’, which is one too big for the array size and is a bug I found quite awhile ago, fixed back in December, but like I said, forgot to add it to my .zip.

    • #2803
      Samir
      Participant

      I re-applied the patch, but now I got another problem: I get a CTD whenever I try to save the game. Also, I got a Bad Save on that spot. So, basically, I’m unable to save the game now. Maybe I should restart the game? This is becoming too buggy, and I don’t want to waste your time :/

    • #2804
      Jeffrey
      Keymaster

      I’m starting to suspect that none of the object arrays can be resized without just starting a new game. Not just Locations, Islands, but maybe even ships and items. I almost swear I was able to get away with it by a reinit for ships and items, but maybe I didn’t and all my games were started after I fixed them.

      So unfortunately, you may just have to start another one. The only good news is that with the patch and the corrected sizes, that problem you encountered would not happen again. Also, now that I’ve found that a resize is a direct function already built into the game, but still causes a save-crash, I’m going to step through that and find why. It may very well be something that can be avoided, but it will only be accomplished in the self-compiled versions if it becomes possible. Just for fun, and in anticipation of that, maybe keep this game around and that can be an experiment if I figure it out.

    • #2805
      Samir
      Participant

      Ok, I will keep the savegames. Anytime you need them, I can upload them for you. Thanks for being very helpful! And sorry for the trouble… Now that I have installed your patch over the 1.5.7 patch by MK, do I need to change anything or I can just start a new game? Do I need to press F4, or the reinit is done by only starting a new game?

      • #2806
        Jeffrey
        Keymaster

        No need to do anything other than start.

    • #2814
      Jeffrey
      Keymaster

      Death image for DX9 version is fixed and uploaded.

    • #2820
      Jeffrey
      Keymaster

      Ha! I may have just made this game smarter. That resize thing…would be nice for the user to not have to know how to reinit. Would be nice if a change could be made to locations, ships, stores, islands and old save games still work, eh? Maybe they can!

      After the OnLoad event, that is when the save-game info is read in and the arrays are actually reverted back to what they were during that specific game. So when the program tries to iterate to those array-size constants (e.g. MAX_LOCATIONS), it fails because the old game didn’t have that many. So I wrote OnLoadReinit.c, containing onLoadReInit(), that compares all the array sizes in the data, to the constant that it ‘should’ be. If they are different, the data is resized and reinitialized. I then #included it in the main program, seadogs.c. Then in the OnLoad()method in seadogs.c, put a call to onLoadReInit() at the very beginning. I then opened globals.c and changed MAX_LOCATIONS, MAX_ISLANDS, and MAX_COLONIES. Loaded an old game, takes a slight bit longer to load as it resized and reinited the arrays I changed, but it loaded, then I tried saving and all was fine. No crashes, no critical errors in the log. Now the game is saved with the array data of the correct size and the next time you load it, it doesn’t run the resizing and reinit of those changed arrays because the saved-state sizes match the new constants.

      Here is my function:

      void onLoadReInit()
      {
      	bool reinit;
      	reinit = false;
      	int nCannonSize = GetArraySize(&Cannon);
      	int nGoodsSize = GetArraySize(&Goods);
      	int nEncounterSize = GetArraySize(&EncountersTypes);
      	int nSailSize = GetArraySize(&SailsColors);
      	int nItemSize = GetArraySize(&Items);
      	int nStoreSize = GetArraySize(&Stores);
      	int nShipSize = GetArraySize(&ShipsTypes);
      	int nWeatherSize = GetArraySize(&Weathers);
      	int nLocationsSize = GetArraySize(&Locations);
      	int nIslandsSize = GetArraySize(&Islands);
      	int nColonySize = GetArraySize(&Colonies);
      
      	Trace("Reinitializing");
      
      	if(nCannonSize != CANNON_TYPES_QUANTITY){
      		SetArraySize(&Cannon,CANNON_TYPES_QUANTITY)
      		CannonsInit();
      	}
      	if(nGoodsSize != GOODS_QUANTITY){
      		SetArraySize(&Goods,GOODS_QUANTITY);
      		if(LoadSegment("store\initGoods.c"))
      		{
      			InitGoods();
      			UnloadSegment("store\initGoods.c");
      		}
      	}
      	if(nEncounterSize != MAX_ENCOUNTER_TYPES){
      		reinit = true;
      		SetArraySize(&EncountersTypes,MAX_ENCOUNTER_TYPES);
      		EncountersInit();
      	}
      	if(nSailSize != SAILS_COLOR_QUANTITY){
      		SetArraySize(&SailsColors,SAILS_COLOR_QUANTITY);
      		if(LoadSegment("Ships\Sails_Init.c"))
      		{
      			InitSailsColors();
      			UnloadSegment("Ships\Sails_Init.c");
      		}
      	}
      	if (nItemSize != ITEMS_QUANTITY){
      		SetArraySize(&Items,ITEMS_QUANTITY);
      		if(LoadSegment("items\initItems.c"))
      		{
      			InitItems();
      			UnloadSegment("items\initItems.c");
      		}
      	}		
      	if(nShipSize  != SHIP_TYPES_QUANTITY_WITH_FORT){
      		reinit = true;	
      		SetArraySize(&ShipsTypes, SHIP_TYPES_QUANTITY_WITH_FORT);
      		ShipsInit();
      	}
      	if(nWeatherSize != MAX_WEATHERS){
      		SetArraySize(&Weathers,MAX_WEATHERS);
      		WeatherInit();
      	}
      	if(nIslandsSize != MAX_ISLANDS){
      		reinit = true;
      		SetArraySize(&Islands,MAX_ISLANDS);
      		IslandsInit();
      		if(LoadSegment("WorldMap\worldmap_init.c"))
      		{
      			wdmInitWorldMap();
      			UnloadSegment("WorldMap\worldmap_init.c");
      		}
      	}
      	if(nLocationsSize != MAX_LOCATIONS){
      		reinit = true;
      		SetArraySize(&Locations,MAX_LOCATIONS);
      		LocationInit();
      	}	
      	if(nColonySize != MAX_COLONIES){
      		reinit = true;
      		SetArraySize(&Colonies,MAX_COLONIES);
      		ColoniesInit();
      		CreateColonyCommanders();
      		SetGovenourToCity(ENGLAND, "PortRoyal");
      		SetGovenourToCity(SPAIN, "Havana");
      		SetGovenourToCity(FRANCE, "Tortuga");
      		SetGovenourToCity(HOLLAND, "Villemstad");
      	}
      	if(nStoreSize != STORE_QUANTITY){
      		SetArraySize(&stores,STORE_QUANTITY);
      		if(LoadSegment("store\initStore.c"))
      		{
      			InitStores();
      			UnloadSegment("store\initStore.c");
      		}
      	}
      	if(reinit){
      		if(LoadSegment("characters\Characters_tables.c"))
      		{
      			InitCharactersTables();
      			UnloadSegment("characters\Characters_tables.c");
      		}
      		ClearAllFantomShips();		
      		if(LoadSegment("nations\nations_init.c"))
      		{
      			InitNations();
      			UnloadSegment("nations\nation_init.c");
      		}
      		if(LoadSegment("INTERFACE\perks\perks_init.c"))
      		{
      			extrnInitPerks();
      			UnloadSegment("INTERFACE\perks\perks_init.c");
      		}
      	}
      	return;
      }
      
      void ClearAllFantomShips()
      {
      	int  i;
      	ref  chr;
      	for (i = 0; i < REAL_SHIPS_QUANTITY; i++)
      	{
              DeleteAttribute(&RealShips[i], "lock");
      	}
      	RealShips[sti(Characters[BOAT_CHARACTER].ship.type)].lock = true;
      	for (i = 0; i < MAX_CHARACTERS; i++)
      	{
              chr = &Characters[i];
              if (CheckAttribute(chr, "ship.type") && chr.ship.type != SHIP_NOTUSED)
              {
                  RealShips[sti(chr.ship.type)].lock = true;
              }
      		if (CheckAttribute(chr, "shipyard"))
      		{
      		    RemoveShipFromShipyard(chr);
      		}
      	}
      	for (i = FANTOM_CHARACTERS; i < TOTAL_CHARACTERS; i++)
      	{
              chr = &Characters[i];
              if (CheckAttribute(chr, "ship.type") && chr.ship.type != SHIP_NOTUSED)
              {
                  RealShips[sti(chr.ship.type)].lock = true;
              }
      	}
      	for (i = 0; i < REAL_SHIPS_QUANTITY; i++)
      	{
              if (!CheckAttribute(&RealShips[i], "lock") && !CheckAttribute(&RealShips[i], "StoreShip"))
              {
      			DeleteAttribute(&RealShips[i], "");
      		}
      	}
      }
      
      void RemoveShipFromShipyard(ref NPChar)
      {
              aref   arDest, arImt;
      		string sAttr;
      		int    iNum, i, iShip;
      		makearef(arDest, NPChar.shipyard);
      		iNum = GetAttributesNum(arDest);
      		for (i = 0; i < iNum; i++)
      		{
      	    	arImt = GetAttributeN(arDest, i);
      	    	iShip = sti(arImt.Type);
      	    	DeleteAttribute(&RealShips[iShip], "StoreShip");
      	    }
              DeleteAttribute(NPChar, "shipyard");
      }
      • #2901
        Orazio
        Moderator

        Nice one! If I finish the cabin I’m making, I’ll try this method instead of manually executing the console.

    • #2823
      Samir
      Participant

      These are awesome news, Jeffrey! Keep up the good work!

    • #2824
      Jeffrey
      Keymaster

      You should try this with that Ed Teach game you were having trouble with, that probably had the wrong number of Locations. Download ResizeTest.zip and put the seadogs.c and OnReloadReinit.c in the Programs folder. Load that game, then immediately save it in an empty file slot and see if it saves without error. If no problem, then reload the game and resume playing.

      The nice thing about this change is that any game that already matches the correct sizes, nothing happens, because it will skip all the resizing/reinit if it already matches. The difference here being that by placing this reinit right after the save data loads, but before some other stuff happens and the rest of the interface logic comes into play, it seems to work out better.

    • #2883
      Samir
      Participant

      Jeffrey, I have noticed, after applying your patch, when I press numbers 1,2,3, or 4 in naval combat, the icon of the ammunition doesn’t change, only I hear the sound telling “load the cannonballs” for instance, and the cannons start recharging, but the icon stays the same. For example, if I had cannonballs installed, and I press number 3 for chain shots, the icon doesn’t change… But when I press enter and change it via icons, then it works…

      I have tested it twice to see if that’s the problem with MK’s 1.5.7 patch, but there it works correctly…

      P.S. This is completely irrelevant bug, it doesn’t affect my gameplay, but just wanted to let you know about it.

      • This reply was modified 8 years, 4 months ago by Samir.
      • #2885
        Jeffrey
        Keymaster

        I have noticed after switching to a game with those new controls, an older save doesn’t always work quite right. But after resetting options, it works and will stay with that game if you save it. Try this:

        Esc to menu, click options and ‘Restore Default Settings’ for controls, back to the game. See if they work. If they do, after you save that game, you should not have to do this again if you load that save.

        Let me know if that works.

        • #2887
          Samir
          Participant

          I tried what you suggested. It didn’t work…

      • #2890
        Jeffrey
        Keymaster

        I just verified it works properly in my version, so I suspect you are missing a file or something somewhere. I made this mistake similarly with that .h file and I think I need to make a change in how I deal with giving this out.

        I tried to make the patch .zips as small as possible and when I code something, try to remember to copy just those same changed files from my working directory to a patch folder that I zip and upload. But if I miss a file I changed, because sometimes a change is required in several to get something working the way we want, well, stuff won’t work for you.

        So new plan. I know it works in my working folder, so now I am copying ALL FILES from that Program directory into the patch. Probably should have done that to begin with. So download the new one and it should have every Program file I use in my game.

        See if that fixes it.

        • #2893
          Samir
          Participant

          Again, not working, even though I applied your newly uploaded Patch… This is weird. I mean, it works when you change it using ENTER, and selecting the proper icon for the ammunition, but when I press numbers, it doesn’t work… this is weird. I don’t think I’m missing any of your files, maybe some other file is missing…

          • #2894
            Jeffrey
            Keymaster

            Well this is no good. I remember having the same problem a long time ago, but I can’t remember what was wrong or how I finally fixed it. If it’s not in a program file (you now have everything I use and mine doesn’t do that anymore), I don’t remember what it was.

            I will keep thinking and hopefully I will remember what it was.

    • #2886
      Jeffrey
      Keymaster

      I recently discovered that our compiled source does not play most of the music in AoP COAS. This doesn’t affect GOF 1.2 or ERAS because the music files being used were almost all changed in those mods to something different than what stock played (though I notice the files still exist in the directory, they weren’t used). Weird, because many of the GOF and ERAS music files still use the .ogg format and the error in AoP is that FMOD claims the file or audio format is unsupported.

      I am using a different version of FMOD (slightly newer) than the original, so I looked at streamSound method causing the error…nothing wrong. Also, like I stated earlier, weird that some .ogg files work in GOF and ERAS, and even the main theme for the AoP menu worked and it is also .ogg, but every other tune that’s supposed to play while you’re sailing, in town, etc. didn’t play.

      Just for grins, I took all the AoP .ogg file and using VLC media, converted them all from .ogg, to .ogg. Yep, you read that right, converted to the exact same format. I notice the resultant files are very slightly different sizes in bytes. But then like magic, they all now work in our AoP test versions. Probably something in the .ogg meta info that has changed since the ‘old days’ and the newer FMOD doesn’t recognize it (though VLC and other media players are able to figure it out and play them…I tried and they played in several) So I have changed the AoP test .zips to now include the sound files (the .zip are unfortunately much larger). You can no longer point them at the same RESOURCE/Sounds folder of your original game in start.ini. While it was just music song files that were affected (shorter sounds use playSound, which didn’t seem to have this same problem), we can’t just point to one place for the music and another for the rest of the sounds, so to ease testing, I bundled them all up and now you unzip, get the RESOURCE/Sounds folder in the same directory as the other test files and change start.ini to point ‘locally’ if you weren’t already using a whole exact copy of everything in your ‘test’ directory:

      sound path = RESOURCE\sounds

    • #2911
      modernknight1
      Keymaster

      The sounds have always been screwy in the AOP games. The 2.1.5.7 uses an FMOD file that isn’t even from AOP. I took it from VCO and modified some of its parameters with a special tool. It worked better than the others and that’s why I used it.

      Question for you guys and I apologize if I missed this and you talked about it in the last few months….

      I am playing with several different versions, however, the baseline version I am building the MEGAPATCH off of has only had a few of Jeffrey’s changes integrated native (no pointers). In my test game I just found the Brig Queen. I didn’t realize how messed up Danielle Shepherd’s eyes were. I thought I had already fixed her animation as I had the others Danielle variants. I also realized that she is a really old model with a really crappy texture and has no portrait picture.

      Did one of you already fix this? Because if not, I want to add a fix to my patch tonight in the way of a new and improved character with proper portrait.

      MK

    • #2919
      Jeffrey
      Keymaster

      Did one of you already fix this? Because if not, I want to add a fix to my patch tonight in the way of a new and improved character with proper portrait.

      Um, no…modeling is outside my scope of knowledge 🙂

      So when I catch her and recruit her, I just keep her as captain of her own ship (she’s got the stats for it) so I don’t have to look at her crazy eyes 😉

    • #2920
      Jeffrey
      Keymaster

      Oh, hey, while you’re at it…the Danielle Shepherd face is the same as one of the Pirate women crew (the one with the fancy garb), so even if you’re doing a whole new Danielle, want to go ahead and fix that face? Of course I usually see them lying dead on the deck, so maybe the screwy eyes works in that situation… 😉

      • #2921
        modernknight1
        Keymaster

        “so I don’t have to look at her crazy eyes” LMAO!!!

        OK, sure will. Too easy. Its just an incorrect animation file. I can’t believe I allowed such an old model to slip through the cracks. Her texture is horrible. The new one will be HOT.

        MK

    • #2926
      Samir
      Participant

      Any idea how to fix this camera? With this ship, it looks awkward, even when I zoom in, it’s not right… The screenshot is with the max zoom out. I use the vanilla cameras mod. My screen resolution is 1600×900. I tried various values in AiCameras.c, but I just can’t find the right one…

      • This reply was modified 8 years, 4 months ago by Samir.
      • This reply was modified 8 years, 4 months ago by Samir.
      • #2929
        modernknight1
        Keymaster

        That’s one of the reasons I made my camera modifications. It doesn’t look like that when I play with it because I can zoom out further and have a larger view playbox. With vanilla camera settings the only way to fix that is to modify the ship model itself which has what is called the high camera bug. I think it can be fixed with tool rather than in Maya. You simply have to change the center point of the camera center view coordinate. Based on where that coordinate is and what model part its attached to sometimes ships have to be modified in Maya. Usually their tafferel flagpole and mast models have to be broken up into smaller bits and then reimported.

        If we only had more modelers around here. SIGH

        MK

        • This reply was modified 8 years, 4 months ago by modernknight1.
      • #2933
        Orazio
        Moderator

        That ship should be the Felipe1. I looked at it, and the flagpole attached to the hull is what is causing that camera behavior, as MK said.

        I think the only way to fix it is to modify the model and re-export it. There is a ‘camera’ locator, that can be edited using TOOL, but that is for the first person view on deck.

        Anyway, I wanted to see if I could fix it, and I managed to do it. The process was very tedious though!
        Download the new models and copy them in RESOURCE\MODELS\Ships\Felipe1 and tell me if everything works correctly. Make a backup of Felipe1.gm first.

        DOWNLOAD

        • #2937
          Samir
          Participant

          Working perfectly! You are genious! I was about to change that ship just because of bad camera. You made my day! Thank you very much!

        • #2939
          Galleon
          Participant

          Wonderful work Orazio! Thank you! The galleons are my favorite and Apostel Felipe is one of the best ones. I play with my own camera settings that combine MK’s with closer normal zoom. The game is different on every monitor one uses, so I have changed it several times. This is a most welcome addition because I sail with flotas of the Felipe somewhat often.

          MK I like the new Miss Daniella Sheppard!

        • #2940
          Jeffrey
          Keymaster

          Nice fix.

          That looks to be from GOF 1.2…I see the same ship files for the Felipe1. I have now added Orazio’s to my GOF and ERAS .zip files. Also, Samir, unrelated, but that dialog fix for PGG_dialog.c I had made about the ‘my name is .’…I found a mistake I made in that and corrected it. I ran into an error for that in a recent game log, so wanted to let you know that it was slightly wrong. The corrected Program\DIALOGS\russian\PGG_dialog.c has also been included.

          • #2944
            Samir
            Participant

            I will apply the patch now.

        • #2945
          Samir
          Participant

          Orazio, friend. Could you have a look at this ship also? Its called VOC Escort Frigate. It also has bad camera angle… Sorry for bothering you :/ I captured that ship and took it for myself because it has 36 guns. I gave Felipe1 to my officer.

          • #2946
            Orazio
            Moderator

            Ok VOC Escort done. Copy the fixed models in RESOURCE\MODELS\Ships\VOCEscort1.
            DOWNLOAD

            That ship would also need a new sailorpoints file, but I can’t do it right now…

          • #2947
            Samir
            Participant

            Amazing! Thank you very much! 🙂

    • #2931
      modernknight1
      Keymaster

      Introducing the new and improved Captain Danielle Shepard. What do you think of her? MK

      start_160614_0615187

      start_160614_0656375

      start_160614_0653400

      start_160614_0654545

      • This reply was modified 8 years, 4 months ago by modernknight1.
    • #2941
      Jeffrey
      Keymaster

      Looks nice. Will take some getting used to not having googly eyes around any more 😉

    • #2958
      Jeffrey
      Keymaster

      Found a bug in the ERAS2 source compilations. If anyone is trying/testing this and the .zip doesn’t have today’s 6/15/2016 date (or later as the case may be), download it again. I discovered a bug and was just able to fix it about an hour ago.

      I had just boarded a ship,and instructed one of my companions to board a different ship. After about a minute, the game crashed. Since I have autosave on for boarding, I went back, did the same thing and it crashed again. This is a good thing, because now I could run the game in debug mode from source, from that same save and when it crashed, the debugger points me to the exact line of code causing the crash.

      I spent some time and found that what is called an ENTITY, for one of the AI ships, was sometimes a NULL and caused the crash. I don’t know why it was sometimes a NULL, but I experimented by causing the game to skip over the game-crash line and just return from the AI function, without doing the AI decision logic for that ship. Then it crashed on a different line, for a similar reason. I kept telling the game to skip over the parts it had trouble with that missing ENTITY, skipping the decision for that ship…over and over until it didn’t crash. The good news is that in this experiment, the next time the decision loops, which are very fast loops, the next time that ENTITY was OK, but then another time it wasn’t…it was intermittent. What happened is that visually, you can’t tell there is a problem and things go as you would expect while skipping the sometimes-missing ENTITY. I considered this OK and a success, so that’s now the new compile.

      Finding the root reason why the ENTITY was sometimes missing was proving near impossible, because it could actually be in the Program .c code we can change in the game, or somewhere an error in the thousands of lines of source code in the .exe or .dlls. I couldn’t find it for the time being, and this skipping method was a reasonable way around it considering it didn’t affect the outcome because the ships ultimately did what they were supposed to do because sometimes during those very fast decision loops, the ENTITY and decision were made as expected. I just want this to become stable before trying to redesign some of this game decision making logic in a faster and more solid way.

      • #2959
        modernknight1
        Keymaster

        EXCELLENT Jeffrey!

        I believe this NULL Entity problem is part of the same issue I have been running down forever. The LOGS would never tell me exactly why the character captain faults were happening in boarding or why sometimes you couldn’t auto engage cannon and would have to go to 1st person view and manually aim and shoot. When this happens the error message always comes up

        “ERROR: Incorrect Index for a character! Wrong index is -1”

        I would be willing to bet money that you’ve finally tracked down the root cause of this elusive bugaboo that has hidden from me for years now. I have scrubbed and fixed the character index until I am numb – fixing naming, fixing numbers, fixing faces/portraits. NOTHING would work. It seems better but I have continued to suspect it has something to do with the numbers of NPCs available for selection going against some hard coded value somewhere that I cannot find.

        Can’t wait to try this. Almost ready to start a new game with a bunch of new changes I’ve made in the mega patch.

        THANKS!!! You’re awesome!

        MK

        • #2961
          Jeffrey
          Keymaster

          Well, I wouldn’t get too excited because those problems will probably still exist. That’s also why it was so difficult to track down, and I eventually compromised; I think the problem is in an error of the Program/.c definitions/creations of the ship.

          What I found in this actual crash, is that when a ‘situation update’ goes a certain way, as the cycles for situational updates go through a very fast loop, is that ENTITY is invalid, which causes things like ->GetPos would be pointed to an invalid ENTITY memory object, causing a memory violation and crash. But a loop or two later, it’s a valid object again, but then invalid a loop or two later. Since the loops are very fast, I just use a try/test and if it fails, ignore a situational update for that one loop, skipping a potential crash. Since the loops are so fast for the updates, another will come along very soon and so to the eye and experience watching the AI ship still sail, still fire, you can’t tell.

          So the root cause is not really fixed, but we avoid an all-out crash. I’ve not had this happen for a very long time and feel fortunate I had a save so near this type of problem I could repeat until I got enough coded to get past it without a crash. It’s a stopgap solution to a deeper problem, but that root cause will be difficult to track down given it’s probably a definition problem that might lie outside the source .dll, but in the Program .c source? I can’t say for certain just yet, but at least the game plays ‘normally’ during this issue now.

    • #2960
      modernknight1
      Keymaster

      Is it in the ERAS2Test Zip Jeffrey? The ERAS2 Patch is still dated 6/14/2016

      MK

      • #2967
        Jeffrey
        Keymaster

        Noticed I didn’t quite answer the question. Yes, it’s the ERAS2Test (and GOF/AoP), both 8 and 9. The problem was in the source. This is also why I don’t think it will help the INDEX -1 issue, because that is a problem in the Program .c code. I just prevent a game-crash that I encountered during a particular situation.

        The Patch is now also dated 6/15, but that’s just because I added the VOCEscort camera fix Orazio provided.

    • #2962
      Jeffrey
      Keymaster

      Ha! I think you just missed by a few minutes. It looks like it was still uploading (it got caught behind the much larger AoP (they now contain all the recources, because I had to redo the .ogg). But it’s there now…the 6/15 ERAS2Test looks to be there.

    • #2965
      Samir
      Participant

      Has anyone had this problem? It happens when you turn the camera at certain angle. Never happened to me before. It’s daytime btw.

      • #2969
        modernknight1
        Keymaster

        Yes I am aware of this. It is fairly rare and only happens at sea. I think it may have something to do with the sun texture. It only happens at certain times of day when the light begins to dim into evening. Also as Samir said it only happens on one side of the ship at a certain angle. The reason I think its the sun is that usually that’s the direction the blackout comes from. Its not at all game breaking and all you have to do is rotate your mouse out of it – or your view out of it. When you go to world view and come back to sailing mode again its always gone.

        I’ve noted it but haven’t had the time to really experiment with it yet. Much more important dragons to slay as far as this mod is concerned than that little one.

        Keep pointing out the gliches/problems though. Its always helpful and appreciated!!!

        MK

    • #2968
      Jeffrey
      Keymaster

      I don’t believe I’ve ever seen the camera go black during day at a certain angle before.

      I have seen a case where at a certain night time hour, everything goes black and it’s impossible to see in town. I think it was back when I was mostly playing GOF 1.2. I had only seen it a couple times, and it was before I started looking into code to fix things, and I haven’t seen it since, so I wonder if what you’re seeing is the same issue? Strange yours is in day, because I remember it was night when I had the problem of not being able to see, so at least it made a little bit of sense at the time…night=dark. Would be nice to pinpoint what it might be, but I don’t know what it is.

    • #2972
      Samir
      Participant

      I also agree with MK. It’s not a big deal. The chances to get this glitch are extremely low. I was surprised when it happened because I’ve played Eras Mod a lot, and this was the first time it happened.

    • #2973
      Jeffrey
      Keymaster

      <sigh>

      Yet again, the DX8 and DX9 compilations will need to be re-downloaded if you are using them. I found a save-game crash! Been a long time for me. But I fixed it and it’s available.

      I also found a glitch in the sea-speak that is very minor, but an error was logged for outside array boundary of ‘rumors’. It was an error from the GOF 1 code that became the base for ERAS as well. That fix is both in the DX8/9, as well as the patch.zips.

    • #2978
      Jeffrey
      Keymaster

      Frustration! But finally resolved.

      I thought the save-game was solved, but turns out that it was because I was running a debug compile. Every time I compiled for release to upload, apparently the fix wasn’t working the same. I mostly test the debug builds because a crash .dmp directs to the exact source line of the problem. Just yesterday, I was playing a Release build and discovered that the release compiles were not reacting the same as the debug build and I just found out why. It’s a complex subject, but if interested, this post has a good overview: http://members.gamedev.net/sicrane/articles/exception.html

      In short, the article sums up the reason here:

      catch (…) handles SEH exceptions, a SEH exception will cause stack unwind, but will not trigger a rethrow clean up catch block. In the following example, if f() raises a SEH exception, the_object will be destroyed, but the catch (…) block won’t execute.

      So my method to ‘catch’ the problem looked like this:

      try {
          A the_object;
          f();
        } catch (...) {
          // clean up stuff
        }

      And as the article explains, when a certain type of error in f(); that cannot be captured by C++, like an access violation (similar to how I deal with it), the ‘catch’ doesn’t execute as it should if the exception is an access violation, because that is considered a ‘hardware’ exception, vs. a software exception and C++ catch blocks are not supposed to handle them, so my fix would not occur. In a debug compile, the compiler inserts code to make it work for debugging purposes, but a Release build strips that out.

      What was needed is to explicitly insert a Structured Exception Handler, that is not removed by a Release build:

      SEH Example:

      __try {
          // stuff
        }
      __except (eps = GetExceptionInformation(), EXCEPTION_EXECUTE_HANDLER) {
          // handler
        }

      So finally, the Release versions should really, this time, eliminate the save-game problem. New DX8 and DX9 builds have been uploaded.

    • #2980
      Samir
      Participant

      Jeffrey, I beg you, put your Mega link in your signature, so every time you write a post, we can access your Mega links. Sometimes it is bigger frustration for me finding a post where you have put the links, then overwritting the files 😀

    • #2981
      Jeffrey
      Keymaster

      Sure thing. I found no sig feature for my account, but will just copy/paste one in every post.

      I feel pretty stupid not realizing the Release version was not executing the same as the Debug version. They are both compiled from the same source and I would play the Debug, thinking the Release would execute similarly. All along the save feature has been perfect in debug and I was shocked to finally find that there were still occasional crashes in the Release version. After playing it for an hour the other day, it crashed at least 2 times…yikes! I had a save from just moments before the crash, and if I reloaded, I could get it to crash within a short time, so perfect for testing. But, now that I’m aware, found out why the difference from that most excellent article, and have now gotten the Release to execute like Debug. With that save game I could always crash, and the article, I was able to work out the issue and test the Release save-games thoroughly. I have played the Release version everyone else gets for many hours these last two days and it’s as stable as I have been experiencing with my Debug…not a single crash.

      ERAS, GOF & AoP COAS Files: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #3012
      Samir
      Participant

      I stopped receiving the Treasure quest from radnom captains in tavern. I have been playing a new game for 3 days now, and I have been receiving this quest regularly. For some reason, the captains now aren’t appearing in tavern when I enter… What it might be?

    • #3016
      Jeffrey
      Keymaster

      There was a problem, since vanilla COAS, where the NPC captains would eventually disappear from the game. That should be fixed, but there are still some legitimate reasons why they don’t approach.

      1. There may be no captains in your current town. You can check this with F10. Though with ERAS, it is far more likely they WILL be in your town, because there are many more than vanilla.

      2. There are some random elements and some scores that determine whether they approach. I’ve not tracked how it gets incremented/decremented, but there is a ‘PGG relation’ score that you must pass. That also has a random element, and even if your relation to them is high/good, you might not pass the random check. There is also a random element (I think it’s 1 out of 3), that they might not be in the tavern, even if they are in town, so you can’t meet them. But, you can keep entering/exiting the tavern and they usually appear if they are in town. Then, even if in the tavern, there is also a random element that they won’t approach you. But, if they are sitting there, you can approach them and ask about some sort of deal/conversation. Then there is a random element that they might have something for you to join, or they’ll brush you off…”Hey, we’re drinking with friends here…” That sort of thing.

      Since the fix for them all eventually disappearing, I’ve not found any further problems with this facet of the game, and captains persist, are encountered, and still either approach, or at least show up in the tavern. So I think you may just be hitting an ‘unlucky’ streak in them not approaching. But again, if you see one, you can approach them instead.

      ERAS, GOF & AoP COAS Files: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #3020
      Devoidbrah
      Participant

      I got a problem with the resolution. It was fine before i used the config file and previously it had been in full screen. But now regardless what i do I have 2 fat squares to the left and right and that not what i would call full screen. Any fix? or could someone upload the working resolution files? Cuz i cant seem to find which files are resposnible for that irk.

      • #3021
        Jeffrey
        Keymaster

        This should do it:

        In engine.ini (or start.ini), change screen_x to your computers width setting and screen_y to your height. Make sure the values you change do not have a semicolon ; in front of them. Save file.

        screen_x = 1366
        screen_y = 768

    • #3022
      Samir
      Participant

      Orazio, could you please fix this ship’s camera? It’s a English 38 gun 4th rater. I don’t know how it’s called in MODELS folder…

    • #3025
      Orazio
      Moderator

      From what I could tell, that ship should be the Mordaunt38nb1. There are at least other two which are very similar, so I hope I picked the right one.

      Besides the flagpole, I also had to separate the small boat on the deck from the rest of the model, because exporting everything in a single GM file made the model impossible to open in TOOL (though still working in game), and I wanted the keep the possibility of editing the model in TOOL, if for whatever reason it will be needed in future.

      — DOWNLOAD —

    • #3026
      Samir
      Participant

      That’s the one. Thank you!

    • #3027
      Jeffrey
      Keymaster

      OK, so those ‘random’ crashes of the game. They are not so random.

      The first major culprit was in battle_interface and that had to do with a particular vertex buffer that the memory was directly manipulated beyond its allocated space, then when a pointer to that memory dereferenced, crash. That was identified (even an old PA! thread had someone actually disassemble and identify the exact memory release call causing the crash) and fixed; they hacked around it by skipping the memory release and now causing a memory leak, we just allocate the proper space and the memory release can execute without fail.

      The most common, major crash culprit is how object attributes are handled. Attributes are things seen in the /Program/.c code like pchar.tempQuest — tempQuest would be an attribute. They can be added, removed at will and can actually be anything desired by the person writing the .c part of the game. How they are handled on the ‘back end’ is just a bad design in the game, but they are the cause for most crashes: save-game crashes, ‘random’ crashes on Worldmap, ‘random’ crashes changing map-to-sea mode changes, pre-boarding crashes, and many others. The bad design stems from the fact that the ‘object’ is stored in memory, but it is a pointer to that memory that is placed on an array stack that when that ‘object’ is needed again, it’s looked up in the array, then that pointer retrieved and used to access pointers to each of its attributes, then those pointers are used to dereference the values. However, the problem is that the execution stack from the .c code of the game can do things like this:

      Function A can create an attribute X and assign it.
      Function A does a few more things, then calls Function B.
      Function B does some stuff, but then removes attribute X from the object.
      Function B returns control back to Function A
      Function A then tries to refer to attribute X, but it is gone (which is fine…if it’s gone/NULL, then that attribute no longer applies and means to do/not do something).

      However, the problem lies in the back end that when that Attribute was removed, the memory space for the attribute was deallocated, but any other reference somewhere on the program call stack (in this case, Function A’s statement, after the call to Function B, that refers to X, is still waiting on the stack, still contains that pointer to X’s memory, that is now deallocated by Function B. The actual attribute is gone, deallocated, but any program calls in the .c are in a different array than attributes, and just have pointers to them, but they are now bad. Which is OK, but the problem is that in C++, you can’t test that very well for things like memory access violations. In some cases, if that memory is not being re-used by something else, a C++ try/catch would work and pass it by. However, once something else requests some memory, and the OS gives it the memory space an attribute once had, an attribute that by chance still has a pointer reference to it stored on the call stack, when that stack step occurs, that pointer is used to try accessing memory that belongs to something else, and that is when you will crash with an access violation. Bad design to store pointers to something that might go away when you’re technically expecting them all to be valid, but you provide a normal/accepted way to remove them at will in the .c portion of the game. This approach to their Attributes/call stack is too complicated/time-intensive to sit down and rewrite at the moment, but with the SEH method (outside the C++ exception handling that can’t deal with access violations), we can get around and actually test for the violation and skip that attribute because we know it’s been removed earlier in the call stack.

      So there is at least one more common crash…post-boarding. This is a boarding crash where autosave works, saves the game, but then the game crashes right after. However, you can then load the autosave and everything is fine again. It doesn’t happen often, but often enough I’m familiar with the type of crash and I’ve been making notes of the crash.dmp and what do you know….over the last few weeks, I’ve encountered this bug 3 times and all 3 occur in the same geometry function. This is good news. I think it’s similar to the battle_interface in that an array of vertex buffers might be directly manipulated from a memory pointer and as a result, sometimes gets manipulated past its allocated space. Since I know for certain that type of crash is consistent, and always in this same spot, I will probably be able to fix this.

      Once done, I think that will take care of the most common ‘random’ crashes I’ve seen in the original game. Cross your fingers this is the last of them and we can get it fixed 🙂

    • #3028
      Devoidbrah
      Participant

      Thanks for the info on the resizing! Really helped me out there 😀
      I started logging my adventures, like a captains log. I will make a thread about em as soon as I have completed one whole year 😀

      Keep up the great work Jeff! Your a godsent to ERAS! 😀

    • #3031
      Samir
      Participant

      Jeffrey, I also noticed that all Storm engines have problem with memory. It sometimes causes the game to crash, in large battles especially. I was wondering, since I accidentally came up on this thread, have you tried this Large Adress Aware patch? Read the last post from this thread:
      http://www.piratesahoy.net/threads/are-there-any-mods-that-can-improve-game-performance.25086/

      Maybe you are already using it. Maybe it’s already implemented in Eras 2 MOD. If it isn’t, I would like to give it a try…

    • #3049
      Jeffrey
      Keymaster

      Samir, I’ve also come across that large address post, but my machine doesn’t have more than 2gb memory, so it’s a moot point since I believe it only applies to 2+ gb. I’ve not been able to try it…in fact, I think I may have even downloaded it but seem to remember it telling me the app doesn’t support my meager memory.

      Anyway, quick update. I’ve been desperately trying to replicate my rare boarding error mentioned in my last post, but after encountering the problem twice in one day, adding some additional log messages in the source code program, I’ve been unable to replicate it since. But…while trying my darndest to break things, I have had some other crashes and issues that I rarely see and was able to both recreate them and fix them in the process.

      My approach is a bit different than Jan’s; he wants to approach the source and the Programs/.c files as a whole, study and eliminate problems in the .c files that often cause the back-end source to hiccup. While that is an ideal goal, with some problems, it takes a very long time to track down root causes in the .c and the problems I’ve found along my way, are either very minor, or irrelevant within context of either the moment or scheme of the game. I would also rather the .exe was more resilient and able to cope with some problems introduced in the .c code without crashing. Notably, the one I recently fixed involved an AI character trying to determine a runaway route, at the very instant of being boarded the NPC wishes to flee, but can’t flee anyway because the game has simultaneously initiated a boarding action. The problem is that in the midst of the messages/decision tree, the character index vanishes for a short time (due to somewhere in the .c temporarily losing the scope of that character object) while some of the decision messages are still being passed around and a game-crash occurs. But the boarding action is happening no matter what, so in that case, I just skip the now-bad pointers for the character making that ‘getaway route’ decision because it doesn’t matter anymore. It would be best to ensure that the character index sticks around until it’s appropriate, but that’s a difficult endeavor to find the .c code problem because there is no step-by-step debug for that part of the code and sometimes the functions being called are sometimes ‘invisible’ because they are not direct calls, but ‘event messages’ and handlers, while in the interim, we can keep playing since the ultimate ‘getaway path’ decision is meaningless since the ship is to be boarded within a split second and I found exactly where that problem occurs in the step-by-step of the back end source. So my thinking is just skip that problem, log it in a file so we know it’s happening and track down the root of the problem later if we wish.

      Similarly, in the last few days, I found a problem with a certain flag motion, and upon DoMove, it can crash the game in certain instances. I skip that problem, but since the DoMoves happen many times per second, I can’t notice while watching a flag in the wind. I found the same thing with waterrings, so I skip the bad data for those. Same thing with ropes and sails during sink_effect, so I skip them.

      And tangentially related, in the Program/.c code, I had implemented a fix for when the player is transported to shore after sinking/keeping the last quest ship on a Pirate NPC quest to loot some moored ships. I found that if your squadron is greater than the vanilla 5, if you are near enemy territory and there is not enough room to enable fast-travel to the shore you are to be transported to, the game freezes black at the teleport to shore. I found a better way to resolve both that and the prior issue I had attempted before.

      In all, in the last few days, I slightly tweaked about 30 of the .exe/.dll source files to gain more resilience in things that make little difference if they go wrong, so that they stop hard crashing the game (I had a couple great saves that with enough time and proper pounding, I could repeat some of these problems over and over until I couldn’t make them happen any more 🙂 ). One thing of note…there is a more troublesome flag too. Now that I prevented the game crash for that one, I do notice that sometimes the texture gets spanned across the display in either a strange flicker, or a long flat plane into the distance. It’s pretty rare, and disconcerting, but I’m not yet sure why that particular flag is a problem, or whether it’s a model, texture, definition problem. It’s when the MSG_FLAG_TO_NEWHOST message happens, the flags get changed over and if it’s a problem one, it can go wonky. Used to crash, now it just looks bad. Should definitely fix the source of that one, but I haven’t identified it.

      Also found some missing fort fire/smoke .xps files (I made copies from similarly named ones that are already there), a couple text fixes, a couple other Program/.c code fixes. I’ve not yet uploaded any of this, as I want to do more testing to ensure things are OK. I’ll let you all know.

    • #3051
      Jeffrey
      Keymaster

      Ha! Solved the strange flag issue…I introduced the problem when fixing the DoMove thing. In my change, during the case of MSG_FLAG_TO_NEWHOST message, I accidentally popped the same message twice, which then disrupts the order for all other processed messages, as each message type has a very specific number of parameters. When you pop them off, the message stack lessens, and when I popped the same message of twice, then all other subsequent message ‘pops’ get the wrong information.

      oldModelID = message.EntityID();
      oldModelID = message.EntityID();
      newModelID = message.EntityID();

      Notice I get the oldModelID twice. That’s wrong. I was moving the code to handle an error better and inadvertently duplicated that line. Fixed that and everything is very solid now. I want to do some more testing, but should be able to upload both new source compilations and some Patch.zips as well, for things that were applicable to the original .exe/.dll set.

      • #3056
        Samir
        Participant

        Awesome! Did you upload these fixes on your Mega account?

    • #3068
      Jeffrey
      Keymaster

      Not yet uploaded. I finally encountered the boarding bug I was looking for. Funny stuff…

      I know I got it because I found the same errors I have been waiting for. They are ugly:

      User Rised Exception
      memory_service.cpp line 137
      _X_NO_MEM
      Invalid model: C:\Program Files\Playlogic\ERAS\RESOURCE\models\Ammo\blade24.gm
      CreateVertexBuffer::CreateVertexBuffer: The method call is invalid For example, a method's parameter may have an invalid value
      User Rised Exception
      memory_service.cpp line 137
      _X_NO_MEM
      Invalid model: C:\Program Files\Playlogic\ERAS\RESOURCE\models\Ammo\topor1.gm
      User Rised Exception
      memory_service.cpp line 137
      _X_NO_MEM
      Invalid model: C:\Program Files\Playlogic\ERAS\RESOURCE\models\Ammo\topor1.gm
      CreateVertexBuffer::CreateVertexBuffer: The method call is invalid For example, a method's parameter may have an invalid value
      ...etc.

      Then I see some of my logs for my attempt to circumvent the problem:

      MODELR::Realize: GeometyService->GetAnimationVBDesc
      MODELR::Realize: GeometyService->GetAnimationVBDesc
      MODELR::Realize: GeometyService->GetAnimationVBDesc
      TIVBufferManager.cpp line 76
      "TIVBufferManager::LockBuffers error"

      No crash…great. But wait, there’s more! I get on board and I’m fighting ghosts…literally. The entire crew I’m fighting is invisible. I can see the health bars, but the characters are completely invisible. You can even strike them and kill them. As do your crew…which are also invisible. LOL Hilarious!

      I know why they’re invisible, because if the LockBuffers, fails, and I skip it, it will not draw. But the real problem is this:

      memory_service.cpp line 137
      _X_NO_MEM

      That precedes every “Invalid model” error and I already know the model files for those objects are fine. The _X_NO_MEM error is because a memory allocation for a malloc statement fails. malloc is a funny thing. It requests memory, but that memory being asked for has to be contiguous blocks. What happens during runtime is that if memory is allocated, then another space is allocated, and a few more, but then one of them is freed, the space it consumed is surrounded by memory that is not available and if another malloc request comes in, but is too large to fit that spot, another must be found. But, as time goes on, the memory spaces can become deeply fragmented…especially if you also have a ‘memory leak’ where a memory pointer was nulled, but the memory itself was neglected to be freed; that memory can never be used because you ‘lost track’ of it in your program, but that spot effectively shoots a hole in what could have been a large contiguous block if it had been freed properly. As leaks propagate, that further fragments available memory space.

      That above malloc fail is due to heavily fragmented memory, because I had plenty of free memory on the heap, but I couldn’t use it for the space I needed because it was undoubtedly too fragmented to find a spot big enough for those particular requests, which were probably 1-2 mb large. This also explains why it takes me so long in a single game session to replicate this problem…you need a lot of time, and some ‘luck’ that your memory becomes fragmented with small enough free spots to kick off the error.

      So, this is too big a thing to strike the root. That malloc is used everywhere memory is requested. To write a whole slew of memory management techniques and fully incorporate into this legacy code is a huge ordeal. But, I did some research and I think we can mitigate some of the problem. A guy named David Lea rewrote the malloc and related functions in C that apparently do a much better job of finding memory spots and tucking everything into a tighter packed set, and also has a nice side effect of a better/faster algorithm for it than the stock malloc issued with MS Visual C. It’s been time-tested, people have used it with ‘shipped’ code, and I believe it is also a part of the touted glib. http://g.oswego.edu/dl/html/malloc.html

      So, I downloaded his free source and with the nice preprocessor feature of having the compiler essentially ‘rename’ any of the related malloc calls to dlmalloc, free to dlfree, realloc to dlrealloc, etc., it’s now part of my compile. It runs fine and I’d like to do some good testing to see if it lengthens my time play without error.

      I’ll keep you posted.

      ERAS, GOF & AoP COAS Files: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

    • #3124
      Orazio
      Moderator

      I’ve recently noticed that, when in a land location near the sea, like a city or a shore, the ships in the water don’t move at all: they are not influenced by the motion of the waves, as if they were attached to the seabed with pillars.

      In the vanilla game this doesn’t happen. So I compared some files, and found out what is causing this. In ERAS there are some values regarding the sea that were probably added/modified as an experiment, since they seem to do nothing, but as a side effect they cause the ships in cities/shores to stand completely still.

      The sea in these locations however is so calm that the ship movement is barely noticeable; it’s a bit more evident looking at the little boat on the pier used to go ashore. I was trying to get bigger waves to have ships move a little bit more, but I wasn’t very succesfull and was already spending too much time for this..

      So, to fix this little bug open Program\Locations\locations_loader.c, find these lines:

      Sea.MaxSeaHeight = -0.1;
      NSWeather.WindSpeed = 7.5;
      Sea.fMaxSpeedZ = 3.9;
      Sea.MinSeaHeight = -4.0;
      Sea.MaxWaveHeigh = 50.5;
      Sea.MinWaveHeigh = -2.5;
      

      and change them to this:

      Sea.MaxSeaHeight = 0.6;
      //NSWeather.WindSpeed = 7.5;
      //Sea.fMaxSpeedZ = 3.9;
      //Sea.MinSeaHeight = -4.0;
      //Sea.MaxWaveHeigh = 50.5;
      //Sea.MinWaveHeigh = -2.5;

      What this does is raise the sea level a bit (I suppose with -0.1 the sea level was below the ships locators, thus preventing them to move). In the vanilla game is 0.5; I didn’t check every city/shore, so if the sea level turns out to be too high, replace that with 0.5. The other lines seem to do nothing, I put extreme values and nothing happened; in the vanilla game they aren’t even present.

    • #3206
      Jeffrey
      Keymaster

      Good catch Orazio. I incorporated that location change into my files and yes the boat sways now, as do the ships in the harbor if you watch them closely, relative to a town building (being further out in the harbor makes the movement very slight, but it is there).

      I still want to test my new compiles a bit more, but they so far appear to be behaving as well as expected.

    • #3282
      Schiavonna
      Participant

      posts: #626 & #831

      “Has anyone else had problems with sound going away in first person sailing mode when you cannon sight is not on screen?”

      Has this ever been rooted out and fixed? It really disrupts my game to the point of switching off sometimes. Would love if it could get finally resolved. I have tried various fmodex files from the COAS mods, more-recent external ones that work with the game but dont fix this. I’ve tried putting the fmodex in windows/system32 (and SysWOW64 that has been suggested for 64bit users). I’ve scowered around sound_alias.ini and sound.c and stopped short of opening the SOUND.dll and SoundService.dll’s. WHAT IS CAUSING THIS? Is it only a 64bit issue or is it universal to all ERAS players? Is fmodex the culprit? And why is it related to the crosshair and direction it is pointing?

      Fixing this would make my Month!

      • #3287
        Jeffrey
        Keymaster

        First, have you tried our compiled source? It is the source code from Akella, fixed up and recompiled. Memory leaks have been eliminated. Some former crash scenarios are now sidestepped. It also uses a newer FMODEX, and I recently figured out many of the issues concerning disappearing sounds.

        Try either ERAS2Test.zip for the DirectX 8 version, or ERAS2TestDX9.zip for the DirectX 9 version.

        ERAS, GOF & AoP COAS Files: https://mega.nz/#F!WtMDgRxK!hbeUg86kGLlQAqvWRNwTqg

        Short of trying our version of the source, if you want to continue using the original game, one thing I found that contributes to sounds going silent, is the priority. That is specified in RESOURCE\INI\aliases\sound_alias.ini. Do a search/replace for ‘prior = 10’ (no quotes) and replace with prior = 65. All the sail sounds were prior = 10, with lower numbers meaning higher priority to FMOD, yet all guns and such were prior = 60. So when FMOD ran out of ability to mix a large number of sound channels (each cannon would get it’s own channel), they go ‘virtual’ which means silent, because they were considered a low priority to even the lower volume sails.

        But seriously, I’ve played many hours on our source and continue to work on it…as recent as today. Download them and try them. Read the instructions…you will put them into their own directory and point at the RESOURCE directory of the original game. So you will still have both.

      • #3295
        Jeffrey
        Keymaster

        Second…for the save games. Find Programs/console.c and make sure it looks like below. Copy over those old save games into the DX9 SAVE folder, load one, hit F4, then save to a new blank spot, then see if you can load it.

        Let’s see if that works.

        #include "Ships\Ships_init.c"
        #include "Locations\init\boarding.c"
        #include "ITEMS\initItems.c"
        
        void ExecuteConsole()
        {
        	SetArraySize(&Items,ITEMS_QUANTITY);
        	SetArraySize(&ShipsTypes,SHIP_TYPES_QUANTITY_WITH_FORT);
        	InitItems();
        	InitShips(); // Updates ships to have the new cabins - is it really needed?
        	
        	// This number is needed to reinit only boarding locations, avoiding unnecessary reinit of all locations
        	int n = 631; // If you have "vanilla" ERAS2 v1.5.7 don't change this number, if you added new locations on your own put the number you find in compile.log (see README)
        	
        	n = LocationInitBoarding(n); // Updates locations to include the new cabins models
        	
        	// Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
        	//pchar.Ship.Type = GenerateShip(name_of_your_ship, true);
        
        	Log_SetStringToLog("Operation successful!");
        }
    • #3291
      Schiavonna
      Participant

      Okay – first I tried again with the sound_alias.ini but to no avail. I’ve screws around with it before months ago trying to figure this out, changing all the variables – priorities, distance, etc and nothing changes the bug. ALL SOUND CUTS (- bar the ambient sea ogg/wav file) incl. cannons, sails up and the ship_water_lugger/frigate/corvette, etc. I’ve given up here because it’s not this .ini thats causing this. The problem is tied directly with the first-person crosshair/reticule. As soon as that is not visable – i.e. not in the cannons arc….silence. While testing to see if any changes were happening, I used the John Berry character who starts with a sail boat. It has zero cannons…and therefore there is no sound at all: no waves lapping, no sails unfurling… -? I do not understand how COAS vanilla and the GOF mods do not have this problem, but ERAS does…-??

      Part two: I tried your source compile. I copied my ERAS 2 game over from an external HD (so, got a backup of my original- no worries). Then installed the dx9 version in separate folder and followed the start.ini instructions to the letter, triple checked its pointing to correct places, and alls fine. Then I extracted the ERAS.Patch over my original ERAS install (which was fully working apart from the sailing sound problem). I did the dx9 components update included with the patch. All fine so far…brace yourself!

      I started a game using your Jacquotte char and….the water is completely transparent (!) as in in NO textures. Jumped to the world map and noticed the clouds have gone purple (!) – it’s very cool but not sure that was the intended effect? Reloaded, Same again – textureless water and purple clouds on the world map. Picked a fight in a harbour to test cannons/sounds in first-person: Cannons work great – no cut-out whether crosshair is visable or not. Noticed there was still no “boat ploughing through the waves” sound (ship_water_lugger, etc)… – ?

      And I tried the debug F11 then F1 reinit as suggested in the Patch notes to get save games working. I didnt get the usual “…was successful” text when usually executing F11 commands…then CTD. Tried other saves from my original ERAS install, same result and now have a cluster of bad saves. LOL!

      Any enlightenment?

      system.log

      • This reply was modified 8 years ago by Schiavonna.
      • #3294
        Jeffrey
        Keymaster

        I did not change most of the shaders (because I don’t know much about them), but did change a couple of them for errors about .Fog that I researched because of similar errors after moving from DX8 to DX9. But you’ll note that almost all of the files are the same as before…dated 2006.

        First, let’s make sure of a few things.

        start.ini still has
        techniques_directory = modules\techniques

        The modules/techniques folder is from the ERAS2TestDX9.zip. I’m thinking the one you’re pointed to might not be because I note your log contains “ERROR: Techniques: Found duplicate technique name: rain” I removed the duplicate and it does not exist in the .zip. In fact, to double-check, I overwrote my DX9 with the .zip and just tried it to make sure and I don’t get that message in my .log.

        If that doesn’t fix the shader errors, we could compare what version of DX9 your computer is running vs. what works on my machines. Download Process Explorer: https://technet.microsoft.com/en-us/sysinternals/processexplorer

        Launch both the Process Explorer and the game, select near the top menu bar under Process is a small icon/button for either View handles/View dlls (when you hover over it a tooltip shows). Choose DLL. There should be a list in the lower pane of all loaded .dll. Find START.exe, which is usually a sub under explorer.exe and click on it. Scroll the .dlls of the START.exe process until you see d3d9.dll and d3dx9_43.dll. Right click both of them and select Properties and note the version number for each one. I’m wondering if perhaps the version is different?

        As a last resort, you can try ERAS2Test.zip, which is the DirectX 8 version. It still contains any fixes I’ve made, and uses the newer FMOD…identical to the DX9 one in every way except where needed to conform to DX8.

    • #3293
      Schiavonna
      Participant

      system.log

      Sorry – forgot to put decrption key in previous link

    • #3296
      Schiavonna
      Participant

      My start.ini has:
      <cue drumroll>

      techniques_directory = C:\Games\ERAs2 1.5.7\Age of Pirates 2\modules\techniques

      :- which is my original ERAS game, not the Compiled Source separate folder (which is “C:\Games\Compiled Source ERAS” – which you’ll spot in log files).

      I’ll amend that line back to “techniques_directory = modules\techniques” and give it a go and get back to you.

      BTW – it’s a little ambiguous in your readme for the ERAS2TestDX9.zip – it suggests changing that line to point at original folder, but I notice there is an “if necessary” bracketed in the prefacing paragraph. I changed all the listed lines without thinking. You might wont to amend that readme for morons such as myself 😉

      Anyway, cheers again and I’ll let you now how this develops:)

      • #3297
        Jeffrey
        Keymaster

        Well, looking closer at my changed files vs. your errors, I am optimistic that will solve the problem because I now see that the shader names with your errors, match the .sha files I changed to eliminate similar compile errors when I converted to DX9.

        I agree that I should change the readme. I figured out I mentioned the (if needed) part because I don’t include the techniques in the DX8 download and one would have to point at the original folder. That is too complicated. I should just include the techniques folder in the DX8 version and do away with that part so a person only has to point at RESOURCE and SOUNDS. The technique files for DX8 will be redundant, but they don’t consume much space anyway.

        Thanks for both your patience and suggestion to make this simpler.

      • #3298
        Jeffrey
        Keymaster

        Also, I have another thing for you to try for reclaiming your old saves. I accidentally replied to the wrong post for that one, so just mentioning it is somewhere a little further up toward your first post in this thread. Don’t want you to miss it.

        Give that console.c change a try with the SetArraySize additions to see if that renders your old saves usable again.

    • #3299
      Schiavonna
      Participant

      Houston – we have lift off! Reverting back to “techniques_directory = modules\techniques” fixed the graphical errors. Yay! (I’ll miss those psychedelic purple clouds though)

      Did the process explorer just for the hell of it (and maybe your peace of mind):

      d3d9.dll version: 6.1.7601.17514

      d3dx9_43.dll version: 9.24.952.3111

      Still can’t get the F11/F1 command to work on my old saves, but no big deal. Getting this error message after attempting saving if you are interested:

      Problem signature:
      Problem Event Name: APPCRASH
      Application Name: START.exe_Akella ENGINE
      Application Version: 3.1.0.0
      Application Timestamp: 57d9ea85
      Fault Module Name: START.exe
      Fault Module Version: 3.1.0.0
      Fault Module Timestamp: 57d9ea85
      Exception Code: c0000005
      Exception Offset: 000497b2
      OS Version: 6.1.7601.2.1.0.768.3
      Locale ID: 2057
      Additional Information 1: 0a9e
      Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
      Additional Information 3: 0a9e
      Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

      • #3301
        Jeffrey
        Keymaster

        Whoah, post too quick as I just had a thought.

        Are you copying the same named folder into SAVE for those old games? I remember that it is essential that an old save is still inside a folder of the same name it was in…that is the profile name. If it’s different, that causes problems. So if you have SAVE\OldProfile\game1 – save, you have to copy or create the OldProfile subdirectory into the new place and put game1 – save inside that.

        Also, that console.c change for the new try is not F11/click F1….this is different, copy that code above to Programs/console.c, launch, load the game, hit F4 and save.

    • #3300
      Jeffrey
      Keymaster

      Hey, those are the exact same versions mine shows 🙂

      So you get a crash when trying the array resize? Wow. Unfortunately, I have never seen that. Also, I might have actually fixed those arrays in my own ERAS source before any of my own game-saves, so I can’t trace what the problem might be. Every time I do it, it just shows success and I can save/load at will, but that might be because it’s resizing to the exact same size every time because my codeset was always correct. I no longer have the ‘original’ ERAS and haven’t in a long time. Really reluctant to download the whole thing and try to figure it out…but I might. Gonna have to mull on whether I want to take that plunge…it’s a huge download!

    • #3302
      Schiavonna
      Participant

      Okay – found your “old save” post and tried it: first it didnt work – realised I had missed a “}” at the end. So rectified that: still not working. Get the f4 “success” message, but it CTDs seconds after attempting saving, whether fresh save on blank spot or quicksave…

      BTW – in system.log, this error:
      “C:\Games\ERAs2 1.5.7\Age of Pirates 2\RESOURCE\models\mainmenu\AOPBoard.gm: can’t open geometry file
      Warning! Interface Back Scene: invalid menu model mainmenu\AOPBoard or transform matrix”

      Remedied that by copying “AOPBoard.gm” from a GOF install. Maybe bundle it in with the patch? Just trying to do something for you since your helping me so much!

      • This reply was modified 8 years ago by Schiavonna.
    • #3304
      Schiavonna
      Participant

      Whoah, post too quick as I just had a thought.

      Are you copying the same named folder into SAVE for those old games? I remember that it is essential that an old save is still inside a folder of the same name it was in…that is the profile name. If it’s different, that causes problems. So if you have SAVE\OldProfile\game1 – save, you have to copy or create the OldProfile subdirectory into the new place and put game1 – save inside that.

      Also, that console.c change for the new try is not F11/click F1….this is different, copy that code above to Programs/console.c, launch, load the game, hit F4 and save.

      I think i might know what it is – I’m just lump copying my Profiles over with the saves inside: including the OPTIONS-! Would that be whats screwing it up?

      EDIT: removing ‘options’ from the profile didnt work either 🙁

      Plus: I’m only using the F4 command now and the original Profile names with the saves inside have been copied over since you suggested it.

      If tonight I go through and compare what I had changed in the original ERAS install and compare it with the patch and try and work out if something got overwritten…maybe this is whats causing the incompatibility?

      • This reply was modified 8 years ago by Schiavonna.
      • #3306
        Jeffrey
        Keymaster

        It’s possible if the Patch is not the last copy of files to overwrite the existing ERAS. That is definitely important.

        But, I also know that the Patch itself will introduce an incompatibility with old save. I thought I was able to remedy that in my own games. But, I also don’t remember all the arrays I resized. A good method to track this down might be to .zip up a couple of your old saves and give me a link. I can then try to debug and track down the culprit and come up with the definitive way to correct it. I would then make sure to put the resolution into my code package.

        I just don’t have the original codeset any longer, and this is something I did before participating and posting my code fixes up, so can’t recall all the details.

        Also, don’t worry about that AOPBoard.gm missing. It doesn’t hurt anything and I assume ModernKnight did that on purpose as it prevents that GOF billboard from plastering over the ship on the main menu. Cleaner look.

      • #3308
        Jeffrey
        Keymaster

        You know, in the meantime…I seem to remember someone mentioning that the number of locations has changed from the beginning and that might be it. No harm in trying to resize a bunch of them. Try this in console.c:

        #include "Ships\Ships_init.c"
        #include "Locations\init\boarding.c"
        #include "ITEMS\initItems.c"
        #include "Locations\locations_init.c"
        #include "STORE\initGoods.c"
        
        void ExecuteConsole()
        {
        	SetArraySize(&Items,ITEMS_QUANTITY);
        	SetArraySize(&ShipsTypes,SHIP_TYPES_QUANTITY_WITH_FORT);
        	SetArraySize(&Locations,MAX_LOCATIONS);
                SetArraySize(&Goods,GOODS_QUANTITY);
        	InitGoods();
        	InitLocations();
        	InitItems();
        	InitShips(); // Updates ships to have the new cabins - is it really needed?
        	
        	// This number is needed to reinit only boarding locations, avoiding unnecessary reinit of all locations
        	int n = 631; // If you have "vanilla" ERAS2 v1.5.7 don't change this number, if you added new locations on your own put the number you find in compile.log (see README)
        	
        	n = LocationInitBoarding(n); // Updates locations to include the new cabins models
        	
        	// Uncomment the next line only if your current ship got the new cabins; you must use the name the ship has in the code (for example SHIP_BRIG3)
        	//pchar.Ship.Type = GenerateShip(name_of_your_ship, true);
        
        	Log_SetStringToLog("Operation successful!");
        }
    • #3307
      Schiavonna
      Participant

      Gonna have to mull on whether I want to take that plunge…it’s a huge download

      Tell me about it ! My harddrives is about 35GM smaller after today! But dont sweat it. Let me mull over it and try and find all the differences between my lightly-modded ERAS original install and your patch and we’ll see whats what. For example: Would a modded Resource/HeroDescribe.txt throw a spanner in the works?

      Dont do anything drastic – like install 400+ 2048×2048.tga.tx files (!) to get access to original files for the sake of me. Your harddrive will never forgive you…lol!

    • #3309
      Schiavonna
      Participant

      old savesOkay, here’s 3 saves (zipped) with their original profile folders for you to examine.

      Just to clarify. Your patch was the last thing I overwrote the org ERAS install with. I have modded ONE thing since: pictures.ini – to include 2 officers I had introduced previously – that uses models and textures from ERAS already, and that change consisted of adding FACE_169 and FACE_186 to the ini. Haven’t touched anything else.

      • This reply was modified 8 years ago by Schiavonna.
      • #3311
        Jeffrey
        Keymaster

        Guess what? I got it! It was the random items. This will work in Programs/console.c, hit F4, wait and confirm the message upper right of screen, then save. Worked for me.

        #include "Ships\Ships_init.c"
        #include "Locations\init\boarding.c"
        #include "ITEMS\initItems.c"
        #include "Locations\locations_init.c"
        #include "STORE\initGoods.c"
        
        void ExecuteConsole()
        {
        
        	SetArraySize(&Items,ITEMS_QUANTITY);
        	SetArraySize(&ShipsTypes,SHIP_TYPES_QUANTITY_WITH_FORT);
        	SetArraySize(&Locations,MAX_LOCATIONS);
        	SetArraySize(&RandItems,