Salk

Members
  • Content Count

    1,281
  • Joined

  • Last visited

  • Days Won

    36

Everything posted by Salk

  1. Hello! Does it matter whether I install the Community Patch or TSLRCM first?
  2. Hello, PapaZinos! Great mod! I was wondering if you may be game to do the same for JC's port here? Cheers!
  3. Hello, Quanon! Thanks for your answer and for adding the normal maps. May I direct you to another feedback I provided a few days ago about another one of your graphical enhancements? It is here, just in case it escaped your notice. Thanks again!
  4. Hello, Qui-Gon Glenn! I thought about it too and it may be worth a try but I think there might be an issue when saving/loading the game. void main() { int nEvent = GetUserDefinedEventNumber(); if (nEvent == 2002) { object oTarget = GetLastPerceived(); if ((GetLastPerceptionSeen()) && GetIsPC(oTarget)) { // Bonus off } if ((GetLastPerceptionVanished()) && GetIsPC(oTarget)) { // Bonus on } } } Let's say I save the game after a party member was perceived. If I am not mistaken, the OnPerception event won't run when loading it again.
  5. Hello, Quanon! In the description it is mentioned normal maps being included and not just upscaled but rerendered. I checked the archive and, if I am not mistaken, there is not a single normal map in it. There are a few .txi files for the normal maps which are the very same the original game uses. Is this correct or am I missing something?
  6. Hello! While testing some of the latest (and great) improvement made by @PapaZinos to the Ebon Hawk I happened to notice how some textures and models needed deeper intervention. Unfortunately I do not have the skills required to do what @Sith Holocroncalled "frames". These two great modders would lend their talent when it comes to working with models and with texture but with doing frames we hit a snag. I am opening this topic just to check if we could find some kind (and talented) soul who could help us finalize this small project. All I can do is to try and explain in better detail what it is about here. In short, despite the geometry and texture improvements, there are still some ugliness left in our beloved spaceship. Since images are worth more than words I attach two here which are taken from K1's Ebon Hawk cockpit: As PapaZinos put it "Yes, unfortunately it really just comes down to the original textures not being made with the actual models in mind. A lot of those dark areas are the edges of a texture that were not made to be in the middle of a panel. The best solution would be new textures made for those specific models that replicate the original look but are properly organized for the size and dimensions of those panels. The model could then be altered to use those textures. I am not sure if anyone is interested in that work, perhaps you could ask Sith Holocron about it." Sith Holocron could not unfortunately tackle the task after checking what needed to be done. So... what needs to be done? I will quote again our resident Ebon Hawk architect PapaZinos, answering SH's questions "Can you make it so they are newly mapped for differently named textures? And if so, what sizes would they need to be?" : "Yes, I can swap out the old texture for a newly-named done, as well as remap them. They could be any size, it would just be a matter of the portion of a texture intended for that panel being the shape of said panel. If it is not already the same shape, it will be warped to the same shape so as to fit the model, which is when you get messed-up textures that are squeezed, stretched, or otherwise misshapen-looking. The large rectangular panel on the left side wall behind the co-pilot's chair, for instance, is about 1.8m tall and 2.033m across. The large rectangular panel to the right of the galaxy map is about 1.71m tall and 1.915 across. The panel above it is fairly unique so I just drew up the measurements for it. A texture made for those panels would ideally contain a relevant section for that panel of roughly those proportions so as to match the model shape and avoid getting warped." Example: And here's PapaZinos' instructions about how to do things right, providing a template as well (attachment below): "Assuming one texture per each of the three main panels, I would recommend naming new textures as in the included screenshot: LEH_cp01 for the large rectangular panel behind the co-pilot's chair, LEH_cp02 for the more uniquely-shaped panel to the right of the galaxy map, and LEH_cp03 for the large rectangular panel below. I have included below a 7z containing the cockpit model (a version with the animation fix, and a version without, use whichever you prefer for testing) with those panels set to use textures by those names, which may be used as a template for testing purposes. The LEH_cp01 panel is mapped at the same size to the top left corner of the texture, LEH_cp02 to the bottom left, and the LEH_cp03 panel has been resized and mapped to the top left of its texture. I will also include a .tpc of the original LEH_scre02 texture as well, though it is up to whomever is willing to take this on to decide what version of that texture to use as the basis for the new ones. The original could be used, or Salk's upscaled version, or Dark Hope's take as well, as long as permission is given. The final version needed here can be as simple as a reorganization of computer panel elements from some version of LEH_scre02 designed to fit that model. This would involve taking the disparate elements of LEH_scre02 used, for instance, on the LEH_cp01 panel and creating a new texture which places them all together in the texture such that there are no awkward cutoffs either in the middle of nor at the edges of the model. Those cutoffs and strange spacing issues are the main issue here, and using elements from some version of LEH_scre02 will make it much easier to fit to the model dimensions." This was a very long post. Thanks for patiently reading all the way through here. If any of you who did that can also help creating the necessary assets, please just reply to this topic and either myself, PapaZinos or Sith Holocron will try to coordinate efforts. What is particularly beneficial is the fact that this would benefit both KotOR and TSL equally much since both games use the same resources in this case. Cheers! EDIT: Forgot to attach the file... m12aa_01p_template.7z
  7. It was exactly as you said, JC. I shouldn't have trusted WinAmp... 😄
  8. Hello! Perhaps someone can correct me if I am wrong but it seems to me that the dead sound for Mission is not producing any sound? I used Sith Codec to be able to listen to few .WAV files found in the Streamsounds folder of the game and when I played P_MISSION_DEAD I heard nothing.
  9. Hello, Quanon! I have a question. I noticed that you added upscaled normal maps as well and I would like to ask you what happens if the game find an upscaled texture in the override folder but not its corresponding normal map. I am asking specifically because some other person that did texture upscaling told me that he suspects that there is no point in upscaling the normal maps. Would the engine be able to use the game's original normal map which is not upscaled? And an additional question: some of your upscaled textures are in .tpc format but they also come with a .txi file. Isn't the .txi file already included in the .tpc file? Thanks! EDIT: While going through the files I noticed a possible faulty .txi file: LMA_VSub01.txi The content is: envmaptexture CM_Manaan0 Shouldn't it be this instead? bumpyshinytexture CM_UPMAN bumpmaptexture LMA_VSubBMP I'm just asking. I know nothing about graphics and upscaling...
  10. Nice mod! I have long used Darth_Sapiens' texture after properly renaming the file and was very happy with it but now I will check out SH's recolored version as well. Thanks!
  11. Hello! I am happy to confirm it was just a user error. I really like this modification and the work you have done with it, WildKarrde! Just a final question about the EH reskin files you instructed to rename: the original files are then no longer necessary (LSF_EHawk01.tga and LSF_EHawk01.txi), I assume?
  12. I think I have found the problem. It is all on me as I have altered the spawning points for the party members disembarking the Ebon Hawk. I will test this later but I am quite sure it was a false alarm on my part.
  13. Finally I got the chance to install this modification on top of my heavily customized game. I did follow the installation instructions accurately but something went wrong. The main install.log did not report any error and the only warning was about finding the liv_m99aa.mod file in the modules folder of my game. Most files were added and some were instead replaced. I have a total of 79 new or modified files in my override directory after installation. Unfortunately I cannot provide the log of the main install because it seems TSL Patcher overwrites (pretty stupidly, in my opinion) the current one with the one coming from the additional component (Visible Forcefield), which I installed just afterwards. I attached that log here for scrutiny but it reports a successful installation. I describe what the problem is. When I disembark the EH, the party is spawned at the standard location used in the original game (the corridor) and I have no way to even go back (there is no "exit"). I noticed some changes in the corridor which confirmed that the main installation should have been successful, just like the install.log reported and the pictures I am attaching here showing the RIM and the modified MOD of the area are further confirmation about it. Yavin before: Yavin AFTER: I can provide screenshots of the party spawning, if needed. I have also installed the High Quality Cockpit Skyboxes files and the EH reskin but I doubt that is relevant. Thanks! installlog.rtf
  14. I seem to recall having also not succeeded with it in the past. What alternatives do I have (if any)?
  15. Hello! I was wondering if anyone has ever used the GetObjectSeen() function successfully in the KotOR game. I am trying to use it as trigger in the following code: while (GetIsObjectValid(oCreature)) { if (((GetStandardFaction(oCreature) == STANDARD_FACTION_HOSTILE_1) || (GetStandardFaction(oCreature) == STANDARD_FACTION_HOSTILE_2) || (GetStandardFaction(oCreature) == STANDARD_FACTION_INSANE)) && ((GetDistanceBetween(oCreature, oLeader) < 17.5) || (GetDistanceBetween(oCreature, oNPC2) < 17.5) || (GetDistanceBetween(oCreature, oNPC1) < 17.5))) { nCombatZone = 1; } oCreature = GetNextObjectInArea(GetArea(oSelf), OBJECT_TYPE_CREATURE); } if (IsNPCPartyMember(NPC_MISSION)) { int nUndisturbed = 0; if ((oNPC2 == OBJECT_INVALID) || (!GetObjectSeen(oNPC2, oMission))) { if ((oNPC1 == OBJECT_INVALID) || (!GetObjectSeen(oNPC1, oMission))) { nUndisturbed = 1; } } if ((GetGlobalBoolean("SURVIVAL_INSTINCT")) && ((nUndisturbed == 0) || (nCombatZone == 1) || ((!GetSoloMode()) && (GetPartyMemberCount() > 1)))) { AssignCommand(oMission, ClearAllEffects()); SetGlobalBoolean("SURVIVAL_INSTINCT", FALSE); } if ((!GetGlobalBoolean("SURVIVAL_INSTINCT")) && (nCombatZone == 0) && (nUndisturbed == 1) && (GetSoloMode() || GetPartyMemberCount() == 1)) { AssignCommand(oMission, SurvivalInstinct()); } } The goal is to verify Mission does not detect the presence of other party members so I thought of GetObjectSeen() for the purpose. There is GetLastPerceived() but it is said to be used in OnPerception scripts and that is not my case. Cheers!
  16. This is quite a find. Good job reporting it.
  17. Thanks to advice from both TamerBill and DarthParametric, I finalized Mission's unique feat (tested and working): Survival Instinct Unique Ability: Mission Mission grew up on the streets of Taris where she learned self-preservation. She gains a +1 bonus to dodging and saving throws when she is the last one standing in combat.
  18. Hello again! I was just looking at that as reference (although now I changed a few things around). Very true. I have moved that part to the henchmen's heartbeat. I actually moved everything to the henchmen's heartbeat because my testing was not successful when trying to apply the bonus via k_hen_damage01 while it did work using the heartbeat. I don't like it because of the delay (I think the worst case scenario is the bonus being applied 6 seconds after the death of the other party members) so I am open to alternate solutions. This is the code I introduced in the henchmen's heartbeat: void BuffUp(object oSelf) { SetGlobalBoolean("STREETWISE", TRUE); effect eACUp = EffectACIncrease(1, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); effect eSTUp = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eACUp, oSelf); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSTUp, oSelf); BarkString(oSelf, 36946); } void FeatStreetwise() { if (GetHasFeat(129, OBJECT_SELF)) { object oFirstPM; object oSecondPM; if (GetPartyMemberCount() == 3) { if (GetPartyMemberByIndex(0) == OBJECT_SELF) { oFirstPM = GetPartyMemberByIndex(1); oSecondPM = GetPartyMemberByIndex(2); } else if (GetPartyMemberByIndex(1) == OBJECT_SELF) { oFirstPM = GetPartyMemberByIndex(0); oSecondPM = GetPartyMemberByIndex(2); } else { oFirstPM = GetPartyMemberByIndex(0); oSecondPM = GetPartyMemberByIndex(1); } if ((GetCurrentHitPoints(oFirstPM) < 1) && (GetCurrentHitPoints(oSecondPM) < 1) && (!GetGlobalBoolean("STREETWISE"))) { BuffUp(OBJECT_SELF); } } else if (GetPartyMemberCount() == 2) { if (GetPartyMemberByIndex(0) == OBJECT_SELF) { oFirstPM = GetPartyMemberByIndex(1); } else { oFirstPM = GetPartyMemberByIndex(0); } if ((GetCurrentHitPoints(oFirstPM) < 1) && (!GetGlobalBoolean("STREETWISE"))) { BuffUp(OBJECT_SELF); } } } } void main() { object oLeader = GetPartyMemberByIndex(0); object oNPC1 = GetPartyMemberByIndex(1); object oNPC2 = GetPartyMemberByIndex(2); (...) if (IsNPCPartyMember(NPC_MISSION)) { if ((GetGlobalBoolean("STREETWISE")) && (!GetIsInCombat(oMission))) { AssignCommand(oMission, ClearAllEffects()); SetGlobalBoolean("STREETWISE", FALSE); } if ((!GetGlobalBoolean("STREETWISE")) && (GetIsInCombat(oMission)) && (GetCurrentHitPoints(oMission) > 0)) { if (GetIsObjectValid(oNPC2)) { if (GetCurrentHitPoints(oLeader) < 1 || GetCurrentHitPoints(oNPC1) < 1 || GetCurrentHitPoints(oNPC2) < 1) { AssignCommand(oMission, FeatStreetwise()); } } else if (GetIsObjectValid(oNPC1)) { if (GetCurrentHitPoints(oLeader) < 1 || GetCurrentHitPoints(oNPC1) < 1) { AssignCommand(oMission, FeatStreetwise()); } } } } (...) } By the way, do you know if BarkString() plays .wav files associated with the string called? And if not, how do I play a sound that is in the Streamsounds folder of the game? Would Playsound("p_mission_bat4") work? Thanks!
  19. Hello! I have not tested yet but I did recompile the game's persuasion scripts (k_con_perseasy, k_con_persmed and k_con_pershigh). It should be all, correct?
  20. One more thing I realize now is that my code wouldn't work when there are only two party members (unlikely to happen but surely possible). I'll have to remedy that.
  21. DURATION_TYPE_TEMPORARY sounds ideal but I have never seen it used anywhere. But other than duration type, would you say things should work? I am unsure about the effect being applied on the player controlled party member and that's my main concern.
  22. Alright. Thanks for the advice! Do you see a problem with my revised k_hen_damage01 script, @DarthParametric? The goal is to have Mission gain some bonus once the other two party members are down and remove the bonus once combat is over (feat.2da and globalcat.2da have been modified accordingly, of course). void FeatStreetwise() { if (GetHasFeat(129, OBJECT_SELF)) { if (GetPartyMemberByIndex(1) != OBJECT_INVALID && GetPartyMemberByIndex(2) != OBJECT_INVALID) { object oFirstPM; object oSecondPM; if (GetPartyMemberByIndex(0) == OBJECT_SELF) { oFirstPM = GetPartyMemberByIndex(1); oSecondPM = GetPartyMemberByIndex(2); } else if (GetPartyMemberByIndex(1) == OBJECT_SELF) { oFirstPM = GetPartyMemberByIndex(0); oSecondPM = GetPartyMemberByIndex(2); } else if (GetPartyMemberByIndex(2) == OBJECT_SELF) { oFirstPM = GetPartyMemberByIndex(0); oSecondPM = GetPartyMemberByIndex(1); } if ((GetCurrentHitPoints(oFirstPM) < 1) && (GetCurrentHitPoints(oSecondPM) < 1) && (!GetGlobalBoolean("STREETWISE"))) { SetGlobalBoolean("STREETWISE", TRUE); effect eACUp = EffectACIncrease(1, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); effect eSTUp = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL); ApplyEffectToObject(DURATION_TYPE_INSTANT, eACUp, OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_INSTANT, eSTUp, OBJECT_SELF); } } } } void main() { object oMission = GetObjectByTag("Mission"); if (IsNPCPartyMember(NPC_MISSION)) { if ((GetGlobalBoolean("STREETWISE")) && (!GetIsInCombat(oMission))) { SetGlobalBoolean("STREETWISE", FALSE); AssignCommand(oMission, ClearAllEffects()); } if ((!GetGlobalBoolean("STREETWISE")) && (GetIsInCombat(oMission)) && (GetCurrentHitPoints(oMission) > 0)) { AssignCommand(oMission, FeatStreetwise()); } } ExecuteScript("k_ai_master", OBJECT_SELF, KOTOR_HENCH_EVENT_ON_DAMAGE); }
  23. Hello! Does anyone know whether the OnDeath() script triggers for party members that are incapacitated during combat or if they do need to be "properly" killed?
  24. Thanks to Sdub's help I have a new icon for T3-M4's unique feat which now includes the droid's capability of functioning as a portable workbench. I have also modified the k_inc_utility script to allow for Carth's new unique feat. Due to his status as decorated soldier of the Republic his presence in the party grants a +1 bonus to Persuasion checks made by the Player. I would have loved to give Mission TSL's Stealth Run feat but it is unfortunately not doable so I will have to think of something different for her.
  25. I take your work very seriously, Amano Jyaku. And since I'm old enough l can tell you for personal experience that many a argument on a Forum or a chat would hardly ever take place between smart people talking face to face. I've not the slightest doubt both you and DrMcCoy are both smart and competent. It's been an awful period for the world (still is) and you're dealing with your own real life issues. Hard sometimes to keep tempers and words in check but I appeal to your intelligence, hoping we can all dismiss the latest exchange as unworthy of you both. Keep up the excellent job done on either side when you can. We'll be here waiting and thankful for future and past contributions! Cheers!