Masamune753 38 Posted January 26, 2022 Coming off of my first major project, K1 Companion Sidequest Rewards, my focus is still on gameplay/design enhancements for the first Kotor. Something that struck me during my most recent playthrough is how unimportant/tacked on skills feel. This next project's goal will be to further imbed skills into K1's gameplay, validating INT/Sent/Skill focused builds as a more meaningful choice for players. The outline for this project builds on the awesome work by @jc2 and their Improved Grenades mod. For the other skills, I have the following ideas (ascending rank in terms of perceived difficulty): Computer Use → "Unlocking" T3-M4's ability to act as an upgrade bench (ala my Sidequest Reward mod) Treat Injury → Swapping Canderous Implants (ala TSL) Repair → Custom skill challenge with T3-M4 to create unique items: Dual Wieldable Stun Batons Lightsaber variants (Reg/Short/Double) Unique Droid Items for T3-M4/HK-47 Recreate Revan's "Original" lightsaber Persuade → Make all* merchants adjust their prices based on persuade skill Awareness → Swap out all Sith assassin encounters ("Malak was most displeased...") with: Create some kind of trigger that initiates a cutscene/dialog Spawn in Sith assassins during scene, framed as though they came out of stealth If Awareness (per current party member) is less than X, they lose half their health Regular dialog/Regular combat (Potential; Spawn in more assassins based on player level/difficulty) I have a sense on how to approach all of these ideas except the last one...creating custom encounters is totally out of my current understanding. As always, if anyone has any tips/comments/warnings on any of the above, I am eager to hear them. 4 Quote Share this post Link to post Share on other sites
AmanoJyaku 184 Posted January 26, 2022 5 hours ago, Masamune753 said: Awareness → Swap out all Sith assassin encounters ("Malak was most displeased...") with: Create some kind of trigger that initiates a cutscene/dialog Spawn in Sith assassins during scene, framed as though they came out of stealth If Awareness (per current party member) is less than X, they lose half their health Regular dialog/Regular combat (Potential; Spawn in more assassins based on player level/difficulty) AFAIK, a trigger is just a defined area where a script can fire upon entry and another can fire upon exit. The trigger areas are already defined in the GIT files (unless you plan to move them), so you only need to modify or replace the scripts to be fired upon entry and/or exit. The rest I think can be done completely in the scripts, you may not even need new global variables. As an example: TSL's Nar Shaddaa airspeeder sidequest is to help avoid the trigger that sends you to Goto. 1 1 Quote Share this post Link to post Share on other sites
Masamune753 38 Posted January 28, 2022 Does anyone have advice on a scripting issue I am experiencing? I grabbed the following and made some edits based suggested script by @DarthParametric(Thank you again!) The following works: Spoiler void main(){ object oPC = GetFirstPC(); object oStore = GetObjectByTag("kas_czerkastore", 0); int nPersuade = GetSkillRank(SKILL_PERSUADE, oPC); int nBonusMarkUp; AssignCommand(GetFirstPC(), ClearAllEffects()); nBonusMarkUp = -nPersuade; DelayCommand(0.1, OpenStore(oStore, oPC, nBonusMarkUp, 0)); } but this does not (is treated as 0): Spoiler void main(){ object oPC = GetFirstPC(); object oStore = GetObjectByTag("kas_czerkastore", 0); int nPersuade = GetSkillRank(SKILL_PERSUADE, oPC); int nBonusMarkUp; int nPersuadeAdj; AssignCommand(GetFirstPC(), ClearAllEffects()); if (nPersuade = 0) { nPersuadeAdj = -10; } else if (nPersuade > 0 && nPersuade <= 17) { nPersuadeAdj = ((-10) + (1 * nPersuade)); } else if (nPersuade > 17 && nPersuade <= 30) { nPersuadeAdj = ((-10) + (1 * nPersuade) + (nPersuade - 17)); } else if (nPersuade > 30) { nPersuadeAdj = 33; } nBonusMarkUp = -nPersuadeAdj; DelayCommand(0.1, OpenStore(oStore, oPC, nBonusMarkUp, 0)); } I am trying to create a very particular sliding scale of discounts to persuade skill rank. I have been able to code a little bit so far, but I don't come from a coding background, so if I have some kind of syntax error somewhere I am not able to recognize it. Quote Share this post Link to post Share on other sites
DarthParametric 3,785 Posted January 28, 2022 1 * nPersuade is just nPersuade, so I'd drop the superfluous 1 *. As to nBonusMarkUp = -nPersuadeAdj, I'd try nBonusMarkUp = (nPersuadeAdj * -1) instead. void main(){ object oPC = GetFirstPC(); object oStore = GetObjectByTag("kas_czerkastore", 0); int nPersuade = GetSkillRank(SKILL_PERSUADE, oPC); int nBonusMarkUp; int nPersuadeAdj; AssignCommand(GetFirstPC(), ClearAllEffects()); if (nPersuade = 0) { nPersuadeAdj = -10; } else if (nPersuade > 0 && nPersuade <= 17) { nPersuadeAdj = nPersuade - 10; } else if (nPersuade > 17 && nPersuade <= 30) { nPersuadeAdj = (2 * nPersuade) - 27; } else if (nPersuade > 30) { nPersuadeAdj = 33; } nBonusMarkUp = nPersuadeAdj * -1; DelayCommand(0.1, OpenStore(oStore, oPC, nBonusMarkUp, 0)); } Have you tried using the nBonusMarkDown term in OpenStore by the way? Seems like that's what it should be for, rather than using a negative value for nBonusMarkUp (even though I see vanilla scripts do that). Quote Share this post Link to post Share on other sites
Masamune753 38 Posted January 28, 2022 Quote 1 * nPersuade is just nPersuade, so I'd drop the superfluous 1 *. As to nBonusMarkUp = -nPersuadeAdj, I'd try nBonusMarkUp = (nPersuadeAdj * -1) instead. Oof, thanks for catching that. Thats what happens when you fiddle with something in excel for too long. 1 hour ago, DarthParametric said: Have you tried using the nBonusMarkDown term in OpenStore by the way? Seems like that's what it should be for, rather than using a negative value for nBonusMarkUp (even though I see vanilla scripts do that). I gave the above script a try (thank you), it also did not work. Either as nBonusMarkUp or MarkDown. Is there something about the if/ else if statements that is particular? Or an issue with running a formula through the script? Quote Share this post Link to post Share on other sites
DarthParametric 3,785 Posted January 28, 2022 This version works. Tested it with Eli's store. I've added some debug elements to it to post info to the Feedback screen via SendMessageToPC, which you'll want to remove in the final version. void StoreOpen(object oMerch, object oNPC, int nMarkUp, int nMarkDown, int nSkill) { SendMessageToPC(oNPC, "PC's Persuade = " + IntToString(nSkill)); SendMessageToPC(oNPC, "nBonusMarkUp = " + IntToString(nMarkUp)); OpenStore(oMerch, oNPC, nMarkUp, nMarkDown); } void main(){ object oPC = GetFirstPC(); int nPersuade; int nPersuadeAdj; AssignCommand(GetFirstPC(), ClearAllEffects()); nPersuade = GetSkillRank(SKILL_PERSUADE, oPC); if (nPersuade > 0 && nPersuade <= 17) { nPersuadeAdj = nPersuade - 10; } else if (nPersuade > 17 && nPersuade <= 30) { nPersuadeAdj = (2 * nPersuade) - 27; } else if (nPersuade > 30) { nPersuadeAdj = 33; } else { nPersuadeAdj = -10; } DelayCommand(0.1, StoreOpen(GetObjectByTag("kas_czerkastore", 0), oPC, (nPersuadeAdj * -1), 0, nPersuade)); } Declaring the skill has been moved to after the ClearAllEffects, since I presume you are trying to remove buffs first. 1 1 Quote Share this post Link to post Share on other sites
Masamune753 38 Posted January 29, 2022 12 hours ago, DarthParametric said: This version works. Tested it with Eli's store. I've added some debug elements to it to post info to the Feedback screen via SendMessageToPC, which you'll want to remove in the final version. Confirmed on my side. Thank you! Adding the feedback was also genius. 12 hours ago, DarthParametric said: Declaring the skill has been moved to after the ClearAllEffects, since I presume you are trying to remove buffs first. Perfect, yes that was my intent. Thank you! Quote Share this post Link to post Share on other sites
DarthParametric 3,785 Posted January 29, 2022 Btw, I just realised what the problem with your original script was. if (nPersuade = 0) should have been if (nPersuade == 0) Not sure how I missed that. 1 Quote Share this post Link to post Share on other sites
Masamune753 38 Posted February 5, 2022 Progress update! Computer Use → "Unlocking" T3-M4's ability to act as an upgrade bench ✓ Already done Treat Injury → Swapping Canderous Implants (ala TSL) Not started. Repair → Custom skill challenge with T3-M4 to create unique items: ✓ Created new dialog entry with script that bumps to new .dlg file (styled as computer interface) ✓ Ported over TOR version of Revan's lightsaber from TSL with permission, and some guidance, from @Kaidon Jorn (Thank you!!!) ✓ Adapted .uti files for the new lightsaber: ✓ upcrystals.2da change and multiple .uti files created to make saber fully upgradeable (including Guardian & Mantle) ✓ Matching all file names/models references to ported over models/textures ✓ Added unique bonuses to the lightsaber that will stack on top of upgrades/customizations Persuade → Make all* merchants adjust their prices based on persuade skill 26% of appropriate merchant call scripts adjusted (thank you @DarthParametric!) Awareness → Swap out all Sith assassin encounters ("Malak was most displeased...") with stealth challenge: Not started. 1 Quote Share this post Link to post Share on other sites
AmanoJyaku 184 Posted February 6, 2022 On 1/28/2022 at 11:03 PM, DarthParametric said: Btw, I just realised what the problem with your original script was. if (nPersuade = 0) should have been if (nPersuade == 0) Not sure how I missed that. As a general rule, tests of equality should place the constant first as assignment will prevent compilation. So: //Incorrect, and compiles if (nPersuade = 0){} //Incorrect, but won't compile if (0 = nPersuade){} //Correct, and always compiles if (0 == nPersuade){} Get in the habit of placing constants on the left, regardless of the operation. Also, thinking about it some more Jolee should have skill bonuses. His revelation of what makes him a grey Jedi is important, perhaps the most important backstory in the game. It helps us understand Revan, Exile, and Kreia. Quote Share this post Link to post Share on other sites
Masamune753 38 Posted February 6, 2022 1 hour ago, AmanoJyaku said: As a general rule, tests of equality should place the constant first as assignment will prevent compilation. Thanks for the coding wisdom! I am in the copy-and-adjust phase of learning to write script, so any advice is always appreciated. 1 hour ago, AmanoJyaku said: Also, thinking about it some more Jolee should have skill bonuses. His revelation of what makes him a grey Jedi is important, perhaps the most important backstory in the game. It helps us understand Revan, Exile, and Kreia Right now, the idea would be that Jolee would have the easiest time with the stealth/awareness aspect of this project. Besides that, I am not sure what else to go with. I struggled with this in my Sidequest Reward mod as well, Jolee is already OP as a Jedi vs. other party members. None of the other skills feel like they would make sense. He directly states he is not tech savvy. Persuade could work, but his personality feels incongruent with that. Plus it's just too easy and a little tedious to dump points in persuade and always switch in Jolee for merchants. Definitely open to any ideas I haven't thought of though! 1 Quote Share this post Link to post Share on other sites
Guest Qui-Gon Glenn Posted February 10, 2022 On 2/6/2022 at 10:50 AM, AmanoJyaku said: As a general rule, tests of equality should place the constant first as assignment will prevent compilation. So: //Incorrect, and compiles if (nPersuade = 0){} //Incorrect, but won't compile if (0 = nPersuade){} //Correct, and always compiles if (0 == nPersuade){} Get in the habit of placing constants on the left, regardless of the operation. This.... is one of those things. The pain and suffering that could have been avoided in a former life. Quote Share this post Link to post Share on other sites
Jango32 23 Posted February 10, 2022 This is a great mod idea, primarily because there are only 2, potentially 3 skills that have are worthwhile in KotOR 1: persuade, treat injury and repair if you want to hear out HK's stories. Quote Share this post Link to post Share on other sites
Masamune753 38 Posted May 14, 2022 Progress update...none as of yet, but I still have this project on my mind. Just very busy as of late. My bandwidth is pretty limited, so I put out some requests to some other great mods to be a part of the T3-M4 repair component of this project. I assumed it would take some time, but I haven't heard back since February so I am just going to figure out something on my own. Quote Share this post Link to post Share on other sites
TamerBill 135 Posted July 29, 2022 23 minutes ago, yazanabbass112 said: Skill challenges are generally presented as a blank slate where the players are in a scenario, and they have to come up with the solution to it. That can mean escaping a collapsing dungeon, chasing a thief, or even solo/fight pit battles. What you're describing sounds like it would be more oriented towards a set roll to complete the challenge (a balancing pole challenge would be an acrobatics check, for example). I assure you people were using the term 'skill challenge' long before 5e stamped a claim on it. Quote Share this post Link to post Share on other sites