I know there is a thread here with some basic info on how to recompile the scripts in FO3 mods (FOSE) but I was wondering if someone would be willing to do a video tutorial on exactly how to do this, or maybe a sticky'd thread with a screenshot walkthrough. I think it would help a lot of us who have very limited modding experience to transfer our favorite FO3 mods to TTW to test, while at the same time give us a chance to contribute to the TTW experience. Besides, as TTW grows, the more of us there are who can pass along the proper way to do this will go a long way to freeing up others to work on new content and bug fixes.
If this has been asked and answered before, and something is already out there, my apologies.
Request for tutorial - Recompiling Scripts
-
Befo
- Posts: 44
- Joined: Thu Jan 24, 2013 3:59 am
Request for tutorial - Recompiling Scripts
-
TJ
- Posts: 2181
- Joined: Mon Sep 17, 2012 1:06 pm
My apologies for not doing
My apologies for not doing pics or video, I'm about to leave for work. So you've got this esm/p file with a script in it. Can be a FO3 Fose mod, can be a straight NV mod with a script that you merged into a new esp. Doesn't matter where it came from, all that matters is the esm/p is set up for NV and the script needs recompiled.
Step 1: You have NVSE in your game? Good, you need it to mess with am (EDIT: FOSE) script. In your FNV folder you have a file called nvse_loader.exe. Make a shortcut to it and place it where you want it. You're set? OK Right click the shortcut and select properties on the "Shortcut" tab under the line target go to the very end after the " and place a space and "-editor". Use this shortcut to boot GECK from now on. Congratulations your GECK is infinately more powerful now.
Step 2: Open your new more powerful Geck and set your file as active. You can use TESSnip to also open the same esm/p to check the scpt line for what needs recompiled and just go down the line one at a time. Find the name of the first one in TESSnip- GECK Object Window> Miscellanious> Script then click the filter box and start typing the name of the script. It also will have an asterisk under count I believe to show that the active esm/p modifies this script. When you find it double click the script on the right side of object window and the script will open up. At this point all you have to do is click the floppy disk icon on that window. NOT the one that's half red. If it recompiles successfully it wont tell you anything. X out of that window and go to the next one. If not, it'll tell you what line needs to be fixed before you try again. After that it's just trial and error. Do all the scripts in your esp NOT all scripts in the game. Do NOT recompile all scripts either.
Step 3: Save, exit GECK, go make sure it works right!
My project Dash is on Kickstarter!
-
Befo
- Posts: 44
- Joined: Thu Jan 24, 2013 3:59 am
Thanks for the guide, TJ.
Thanks for the guide, TJ.
A few issues I'm running in to:
1) TESSnip - I was only able to find TESSnip for Oblivion through a Google search, and it gives me an error when trying to load up a FO3 file. Is there a Fallout specific version? If so, where would I find it?
2) I was able to successfully open Amy Wong.esm and start recompiling the scripts. On occasion, after I would click the disk icon then go to click X to close, certain of the scripts i would ask me if I wanted to save. I would hit Yes, then attempt to close the window again, and the same menu would pop up, asking if I wanted to save. If I clicked No, then the window would close as it should. Even if I clicked No, the file would show with an asterisk in the count column, so I'm guessing it recompiled. Is that right?
3) After recompiling all fifty or so scripts (all that began with AW for Amy Wong), I tried to Save the file so I could exit. Unfortunately, Amy Wong is an .esm and it only wants me to save in the .esp format. How do I address that?
Thanks for the help!
EDIT: One other thing. I know I need to change my GECK so that I can allow multiple masters by changing/adding bAllowMultipleMasterLoad=1 the GECKCustom.ini. My issue is that I can't seem to find the GECKCustom.ini file. I have the NV GECK installed directly into my main FNV directory.
-
Befo
- Posts: 44
- Joined: Thu Jan 24, 2013 3:59 am
Solved two of these I think.
Solved two of these I think.
I found the GECKCustom.ini in my Documents\My Games\FalloutNV directory with the other .ini files. I updated the FO3 one while I was at it.
I saved the recompiled scripts as a separate .esp that I'll load after the AmyWong.esm master. I think that's how it was done for the scripts Shadow did for Mothership Zeta Crew, so I'm trying it here.
How do permissions work here? Can I upload my recompiled scripts here or do I need permission from the original author?
-
JaxFirehart
- Posts: 3003
- Joined: Wed Sep 12, 2012 12:33 am
Far as I'm concerned, so long
Far as I'm concerned, so long as all you did was recompile the scripts, and you aren't trying to take credit for it, its fine.
The script that wouldn't save was doing that because there was an error in it. It is not recompiled and MAY still cause issues. If you post the trouble script here I can take a look at it and see if its anything obvious.
Finally, as for saving it as an esp: The GECK won't let you save .esm files or create new .esm files. You have to use FNVEdit or TESnip or Wrye Flash to change it from an esm to an esp, recompile the scripts, save and close the geck, and finally use one of those programs to change it back into an esm.
-
TJ
- Posts: 2181
- Joined: Mon Sep 17, 2012 1:06 pm
TESSnip comes packaged with
TESSnip comes packaged with FOMM. If you're using that you've already got it. Once you have it if you use windows to try to open an esm/p it'll pop up a box saying it doesn't know how to open this file, you can click open with browse to FOMM.exe and from then on Windows will open esm/p files with TESSnip. Even if you use NMM for your mods it's handy to have FOMM installed for the features it comes packed with.
The asterisk in the count column just shows that that script is modified by the active file. I should've included this in my last post but install GECK Powerup and instead of acting wonky when a script has an error it'll tell you what line the error is on and a brief description of what's wrong.
My project Dash is on Kickstarter!
-
Befo
- Posts: 44
- Joined: Thu Jan 24, 2013 3:59 am
Here is the first one I tried
Here is the first one I tried that wouldn't recompile. Sorry for the long post, but I don't know how to hide this as a spoiler.
[collapsed title=Script]
Scriptname AWActorAmyScript
ref xREF
short a
short b
float f
short intel
BEGIN OnStartCombat
set xREF to getCombatTarget
if xREF.getInFaction AWFactionAmy == 1
xREF.stopCombat
stopCombat
else
if AWQShareXP.level > 0
if xREF != Player
if xREF.hasMagicEffect AWBaseEffShareXP == 0
xREF.castImmediateOnSelf AWEffShareXP
endif
endif
endif
if hasMagicEffect AWBaseEffUseDrug1 == 0
castImmediateOnSelf AWEffUseDrug1
endif
if hasMagicEffect AWBaseEffUseDrug2 == 0
castImmediateOnSelf AWEffUseDrug2
endif
if hasMagicEffect AWBaseEffUseDrug3 == 0
castImmediateOnSelf AWEffUseDrug3
endif
endif
END
BEGIN OnCombatEND
; ########################## Reset Hit Points ##########################
set f to getAV Health / getPermanentActorValue Health
set a to (20 * getAV Endurance) + (10 * getLevel)
if a < 150
set a to 150
endif
setAV Health a
restoreAV Health a
forceAV Health a
set a to a - (a * f)
if a > 0
damageAV Health a
endif
; ########################## Player Relationship ##########################
if getInSameCell Player
if AWContExpAmyREF.getItemCount AWTokenFriendlyFire == 0
set AWQAmy.Relationship to AWQAmy.Relationship + AWQConst.ARelModerateGain
elseif AWContExpAmyREF.getItemCount AWTokenFriendlyFire == 1
set AWQAmy.Relationship to AWQAmy.Relationship + AWQConst.ARelMinorGain
endif
if AWQAmy.Relationship > AWQConst.ARelMaxCap
set AWQAmy.Relationship to AWQConst.ARelMaxCap
endif
endif
AWContExpAmyREF.removeItem AWTokenFriendlyFire 99999
; ########################## Accumlate Combat Experience ##########################
AWContExpAmyREF.addItem AWTokenCombat 1
if AWContExpAmyREF.getItemCount AWTokenCombat > AWQConst.ALvlCombat
set a to 1 + getAV Confidence
if a <= 4
setAV Confidence a
endif
set a to 1 + getAV Strength
if a <= 10
forceAV Strength a
endif
set a to 1 + getAV Perception
if a <= 10
forceAV Perception a
endif
set a to 1 + getAV Agility
if a <= 10
forceAV Agility a
endif
resetHealth
restoreav perceptioncondition 100
restoreav endurancecondition 100
restoreav leftattackcondition 100
restoreav leftmobilitycondition 100
restoreav rightattackcondition 100
restoreav rightmobilitycondition 100
AWContExpAmyREF.removeItem AWTokenCombat AWQConst.ALvlCombat
endif
; ########################## Accumlate Weapon Experience ##########################
set intel to getAV Intelligence
if IsWeaponInList AWLstWeapSmGuns == 1
AWContExpAmyREF.addItem AWTokenSmGuns intel
elseif IsWeaponInList AWLstWeapBgGuns == 1
AWContExpAmyREF.addItem AWTokenBgGuns intel
elseif IsWeaponInList AWLstWeapEnergy == 1
AWContExpAmyREF.addItem AWTokenEnergy intel
elseif IsWeaponInList AWLstWeapMelee == 1
AWContExpAmyREF.addItem AWTokenMelee intel
elseif IsWeaponInList AWLstWeapExplosives == 1
AWContExpAmyREF.addItem AWTokenExplosives intel
elseif IsWeaponInList AWLstWeapUnarmed == 1
AWContExpAmyREF.addItem AWTokenUnarmed intel
elseif IsWeaponInList AWLstWeapMedic == 1
AWContExpAmyREF.addItem AWTokenMedic intel
elseif getItemCount AWTokenTagSmGuns != 0
AWContExpAmyREF.addItem AWTokenSmGuns intel
elseif getItemCount AWTokenTagBgGuns != 0
AWContExpAmyREF.addItem AWTokenBgGuns intel
elseif getItemCount AWTokenTagEnergy != 0
AWContExpAmyREF.addItem AWTokenEnergy intel
elseif getItemCount AWTokenTagMelee != 0
AWContExpAmyREF.addItem AWTokenMelee intel
elseif getItemCount AWTokenTagExplosives != 0
AWContExpAmyREF.addItem AWTokenExplosives intel
elseif getItemCount AWTokenTagUnarmed != 0
AWContExpAmyREF.addItem AWTokenUnarmed intel
else
; Unknown weapon, try to guess what kind of weapon by its anim
; IsWeaponSkillType doesn't seems to work
if getWeaponAnimType == 2 || getWeaponAnimType == 3
AWContExpAmyREF.addItem AWTokenMelee intel
elseif getWeaponAnimType == 7 || getWeaponAnimType == 8
AWContExpAmyREF.addItem AWTokenBgGuns intel
elseif getWeaponAnimType == 4 || getWeaponAnimType == 5 || getWeaponAnimType == 6
set a to intel / 2
AWContExpAmyREF.addItem AWTokenSmGuns a
AWContExpAmyREF.addItem AWTokenEnergy a
elseif getWeaponAnimType == 9 || getWeaponAnimType == 10 || getWeaponAnimType == 11
AWContExpAmyREF.addItem AWTokenExplosives intel
elseif getWeaponAnimType == 1
AWContExpAmyREF.addItem AWTokenUnarmed intel
endif
endif
if AWContExpAmyREF.getItemCount AWTokenSmGuns > AWQConst.ALvlSmGuns
set a to 1 + getAV SmallGuns
if a > 100
set a to 100
endif
forceAV SmallGuns a
AWContExpAmyREF.removeItem AWTokenSmGuns AWQConst.ALvlSmGuns
endif
if AWContExpAmyREF.getItemCount AWTokenBgGuns > AWQConst.ALvlBgGuns
set a to 1 + getAV BigGuns
if a > 100
set a to 100
endif
forceAV BigGuns a
AWContExpAmyREF.removeItem AWTokenBgGuns AWQConst.ALvlBgGuns
endif
if AWContExpAmyREF.getItemCount AWTokenEnergy > AWQConst.ALvlEnergy
set a to 1 + getAV EnergyWeapons
if a > 100
set a to 100
endif
forceAV EnergyWeapons a
AWContExpAmyREF.removeItem AWTokenEnergy AWQConst.ALvlEnergy
endif
if AWContExpAmyREF.getItemCount AWTokenMelee > AWQConst.ALvlMelee
set a to 1 + getAV MeleeWeapons
if a > 100
set a to 100
endif
forceAV MeleeWeapons a
AWContExpAmyREF.removeItem AWTokenMelee AWQConst.ALvlMelee
endif
if AWContExpAmyREF.getItemCount AWTokenExplosives > AWQConst.ALvlExplosives
set a to 1 + getAV Explosives
if a > 100
set a to 100
endif
forceAV Explosives a
AWContExpAmyREF.removeItem AWTokenExplosives AWQConst.ALvlExplosives
endif
if AWContExpAmyREF.getItemCount AWTokenUnarmed > AWQConst.ALvlUnarmed
set a to 1 + getAV Unarmed
if a > 100
set a to 100
endif
forceAV Unarmed a
AWContExpAmyREF.removeItem AWTokenUnarmed AWQConst.ALvlUnarmed
endif
; ########################## Weapon Repair ##########################
set a to getWeaponHealthPerc
if a < AWQConst.AEquipMinHealth
set b to getAV Repair
if a < b
setWeaponHealthPerc b
endif
AWContExpAmyREF.addItem AWTokenRepair intel
endif
if AWContExpAmyREF.getItemCount AWTokenRepair > AWQConst.ALvlRepair
set a to 1 + getAV Repair
if a > 100
set a to 100
endif
forceAV Repair a
AWContExpAmyREF.removeItem AWTokenRepair AWQConst.ALvlRepair
endif
; ########################## Get Aids ##########################
if getItemCount Stimpak < AWQConst.AMinStimpak && AWContTHREF.getItemCount Stimpak >= 2
AWContTHREF.removeItem Stimpak 2
addItem Stimpak 2
endif
; ########################## Use Medicine Skill ##########################
set f to getAV Health / getPermanentActorValue Health
if f < AWQConst.ALvlEndurance
set b to 1 + getAV Endurance
if b <= 10
forceAV Endurance b
endif
endif
if f < 1.0
set a to getAV Medicine
if a > 100
set a to 100
endif
restoreAV Health a
restoreAV perceptionCondition a
restoreAV enduranceCondition a
restoreAV leftAttackCondition a
restoreAV leftMobilityCondition a
restoreAV rightAttackCondition a
restoreAV rightMobilityCondition a
AWContExpAmyREF.addItem AWTokenMedic intel
endif
if AWContExpAmyREF.getItemCount AWTokenMedic > AWQConst.ALvlMedic
set a to 1 + getAV Medicine
if a > 100
set a to 100
endif
forceAV Medicine a
AWContExpAmyREF.removeItem AWTokenMedic AWQConst.ALvlMedic
endif
; ########################## Reset Health if is teammate ##########################
if getPlayerTeammate == 1
resetHealth
restoreav perceptioncondition 100
restoreav endurancecondition 100
restoreav leftattackcondition 100
restoreav leftmobilitycondition 100
restoreav rightattackcondition 100
restoreav rightmobilitycondition 100
endif
; ########################## Use Stimpak ##########################
if getAV Health < getPermanentActorValue Health
if getAV Health < AWQConst.AMinHPtoStimpak
if getItemCount Stimpak != 0
removeItem Stimpak 1
resetHealth
endif
endif
endif
; ########################## Disarm Weapon ##########################
if AWQAmy.disarm == 1
if hasMagicEffect AWBaseEffDisarm == 0
castImmediateOnSelf AWEffDisarm
endif
endif
END
BEGIN OnHit Player
AWContExpAmyREF.addItem AWTokenFriendlyFire 1
if AWContExpAmyREF.getItemCount AWTokenFriendlyFire == 1
set AWQAmy.Relationship to AWQAmy.Relationship - AWQConst.ARelMinorLost
elseif AWContExpAmyREF.getItemCount AWTokenFriendlyFire == 2
set AWQAmy.Relationship to AWQAmy.Relationship - AWQConst.ARelModerateLost
else
set AWQAmy.Relationship to AWQAmy.Relationship - AWQConst.ARelMajorLost
endif
if AWQAmy.Relationship < AWQConst.ARelMinCap
set AWQAmy.Relationship to AWQConst.ARelMinCap
endif
if AWQAmy.hintHitAmy != 1
set AWQAmy.hintHitAmy to 1
showMessage AWMsgHint1001
endif
END
BEGIN OnDeath
AWContTHREF.removeAllItems AWAmyREF
AWContTHFoodREF.removeAllItems AWAmyREF
AWAmyREF.setPlayerTeammate 0
AWAmyREF.removeFromFaction FollowerFaction
ShowMessage AWMsgDead
END
[/collapsed]
-
Befo
- Posts: 44
- Joined: Thu Jan 24, 2013 3:59 am
Bah, I figure out how to do
Bah, I figure out how to do it as a spoiler, but it doesn't want to save the formatting with copy and paste...
-
TJ
- Posts: 2181
- Joined: Mon Sep 17, 2012 1:06 pm
Please let that be a
I'm gonna download this mod after dinner to take a look at that script. No promises but I'll see what I can do.
My project Dash is on Kickstarter!
-
Befo
- Posts: 44
- Joined: Thu Jan 24, 2013 3:59 am
Well, that was just one of
Well, that was just one of the ones that didn't recompile. The mod has a few dozen scripts (maybe around 50 or so) and about a third had issues recompiling. That is unless I was doing it wrong, but your instructions seemed pretty clear.