Hey?
SO being that I've not seen any sort of trainer that can do this, does anyone know if eventually it's possible to reset points spent? Like many games like this it's almost impossible to really know the affect stats will have on your personal play experience and needs, which is double lame when you're asked to pre-spec a few points before you're even done creating your char or seeing the first cut-scene :S
If there is ultimately no way to do this officially in the game as far as visiting a trainer or some option on the menus, does anyone have any console commands that would allow setting the ranks back down to 0 so I could manually put points back in?
Thanks.
EDIT: An example of my view, is I grabbed the ice weapons on my mage and to see that same spell on Morrigan is disheartening. I should have at least gone down the fire path there or something, as they do not stack.
Dragon Age: Origins
Game » consists of 20 releases. Released Nov 03, 2009
Dragon Age: Origins is an epic fantasy role-playing game featuring a rich story, personality-driven characters, and tactical, bloody combat. It is considered a spiritual successor to the Baldur's Gate series.
Way to reset talents/skill points?
I found out something nifty that made me reroll when I had invested 10 hours, beyond the first level at creation you can choose not to invest anything upon level up!
So I simply choose what felt right for the first attributes, skills and spells (talents for a warrior/rogue) and then only added the attributes whenever I leveled up. Saving me a number of skills and spells to determine on a later point in the game.
Granted, this doesn't help your case where even if you knew this you 'took the wrong spell'. But having both Ice Weapons isn't bad if you ask me.
It means you can choose whoever has the better manapool to pay the upkeep. Having Cold on both mages is great, crowd control through Frozen plus the chances of a Shatter = awesome.
My mage has Ice damage (all four where Morrigan doesn't) as well as electricity and it works quite well. So I wouldn't worry too much, ice comes in really handy. Plus personally, I find myself using my main character much more than the others in the heat of battle so being able to freeze yourself is nice.
// -----------------------------------------------------------------------------
// reset.nss
// Version 2.0
// -----------------------------------------------------------------------------
/*
Resets the current character's attributes, skills, and talents
Usage:
runscript reset
*/
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
#include "sys_autolevelup_h"
#include "sys_chargen_h"
#include "sys_rewards_h"
#include "sys_autoscale_h"
void ChangeAttributes(object oChar)
{
int nRace = GetCreatureRacialType(oChar);
int nClass = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_CURRENT_CLASS));
// save attribute points
int oldStatTotal=FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_STRENGTH))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_DEXTERITY))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_CONSTITUTION))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_WILLPOWER))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_INTELLIGENCE))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_MAGIC));
int oldStatPoints=FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_ATTRIBUTE_POINTS));
// intialize
SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_STRENGTH, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_DEXTERITY, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_CONSTITUTION, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_WILLPOWER, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_INTELLIGENCE, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_MAGIC, CHARGEN_BASE_ATTRIBUTE_VALUE, PROPERTY_VALUE_BASE);
// -------------------------------------------------------------------------
// Attributes for Race
// -------------------------------------------------------------------------
// Read the modifier values in
// - Clean this 2da mess up, there's a better structure than this.
// -------------------------------------------------------------------------
float fStrMod = GetM2DAFloat(TABLE_RULES_RACES,"StrAdjust",nRace);
float fDexMod = GetM2DAFloat(TABLE_RULES_RACES,"DexAdjust",nRace);
float fIntMod = GetM2DAFloat(TABLE_RULES_RACES,"IntAdjust",nRace);
float fWillMod = GetM2DAFloat(TABLE_RULES_RACES,"WillAdjust",nRace);
float fConMod = GetM2DAFloat(TABLE_RULES_RACES,"ConAdjust",nRace);
float fMagMod = GetM2DAFloat(TABLE_RULES_RACES,"MagAdjust",nRace);
// -------------------------------------------------------------------------
// Modify the creature properties based on the values
// -------------------------------------------------------------------------
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_STRENGTH, fStrMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_DEXTERITY, fDexMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_INTELLIGENCE, fIntMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_WILLPOWER, fWillMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_CONSTITUTION, fConMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_MAGIC, fMagMod);
// -------------------------------------------------------------------------
// Attributes for Class
// -------------------------------------------------------------------------
// Read the modifier values in
// - Clean this 2da mess up, there's a better structure than this.
// -------------------------------------------------------------------------
fStrMod = GetM2DAFloat(TABLE_RULES_CLASSES,"StrAdjust",nClass);
fDexMod = GetM2DAFloat(TABLE_RULES_CLASSES,"DexAdjust",nClass);
fIntMod = GetM2DAFloat(TABLE_RULES_CLASSES,"IntAdjust",nClass);
fWillMod = GetM2DAFloat(TABLE_RULES_CLASSES,"WillAdjust",nClass);
fConMod = GetM2DAFloat(TABLE_RULES_CLASSES,"ConAdjust",nClass);
fMagMod = GetM2DAFloat(TABLE_RULES_CLASSES,"MagAdjust",nClass);
// -------------------------------------------------------------------------
// Modify the creature properties based on the values
// -------------------------------------------------------------------------
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_STRENGTH, fStrMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_DEXTERITY, fDexMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_INTELLIGENCE, fIntMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_WILLPOWER, fWillMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_CONSTITUTION, fConMod);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_MAGIC, fMagMod);
// -------------------------------------------------------------------------
// Set the initial character stats based on Class (Health, Mana, etc..)
// -------------------------------------------------------------------------
// Initialize all stats
// -------------------------------------------------------------------------
SetCreatureProperty(oChar, PROPERTY_DEPLETABLE_HEALTH , 1.0f, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar, PROPERTY_DEPLETABLE_MANA_STAMINA , 0.0f, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_DEFENSE , 0.0f, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_ATTACK, 0.0f, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_DAMAGE_BONUS, 0.0f, PROPERTY_VALUE_BASE);
SetCreatureProperty(oChar, PROPERTY_ATTRIBUTE_FLANKING_ANGLE, 60.0f, PROPERTY_VALUE_BASE);
// -------------------------------------------------------------------------
// Read the modifier values in
// - Clean this 2da mess up, there's a better structure than this.
// -------------------------------------------------------------------------
float fBaseAttack = GetM2DAFloat(TABLE_RULES_CLASSES,"BaseAttack",nClass);
float fBaseDefense = GetM2DAFloat(TABLE_RULES_CLASSES,"BaseDefense",nClass);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_ATTACK, fBaseAttack);
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_DEFENSE, fBaseDefense);
float fRankModifierHealth = GetAutoScaleDataFloat(GetCreatureRank(oChar),AS_RANK_HEALTH_SCALE_FACTOR);
//bugfix:
if (fRankModifierHealth == 0.0f)
{
fRankModifierHealth = 1.0f;
}
// we subtract 1 as the stat is initialized at 1 to prevent the character from dying
float fDepletableMod = GetClassDataFloat(CLASS_DATA_BASE_MANA_STAMINA, nClass) ;
float fHealthMod = (((GetClassDataFloat(CLASS_DATA_BASE_HEALTH,nClass)) * fRankModifierHealth)) - 1.0f;
float fDamageMod = GetClassDataFloat(CLASS_DATA_DAMAGE_BONUS, nClass);
// -------------------------------------------------------------------------
// Modify the creature properties based on the values
// -------------------------------------------------------------------------
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_DEPLETABLE_MANA_STAMINA, fDepletableMod );
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_DEPLETABLE_HEALTH, fHealthMod );
Chargen_ModifyCreaturePropertyBase(oChar, PROPERTY_ATTRIBUTE_DAMAGE_BONUS , fDamageMod );
// -------------------------------------------------------------------------
// Go from level 1 to character level
// -------------------------------------------------------------------------
int nLevelsToAdd = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_LEVEL))-1;
float fRankModifier = GetAutoScaleDataFloat(GetCreatureRank(oChar),AS_RANK_SCALE_FACTOR);
fDamageMod = GetClassDataFloat(CLASS_DATA_DAMAGE_BONUS , nClass) * nLevelsToAdd;
fHealthMod = (GetClassDataFloat(CLASS_DATA_HEALTH_PER_LEVEL, nClass) * fRankModifierHealth) * nLevelsToAdd ;
float fManaMod = GetClassDataFloat(CLASS_DATA_MANA_PER_LEVEL, nClass) * nLevelsToAdd * fRankModifier;
Chargen_ModifyCreaturePropertyBase(oChar,PROPERTY_ATTRIBUTE_DAMAGE_BONUS, fDamageMod);
Chargen_ModifyCreaturePropertyBase(oChar,PROPERTY_DEPLETABLE_HEALTH, fHealthMod);
Chargen_ModifyCreaturePropertyBase(oChar,PROPERTY_DEPLETABLE_MANA_STAMINA, fManaMod);
// -------------------------------------------------------------------------
// Restore attribute points
// -------------------------------------------------------------------------
int newStatTotal=FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_STRENGTH))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_DEXTERITY))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_CONSTITUTION))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_WILLPOWER))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_INTELLIGENCE))+
FloatToInt(GetCreatureProperty(oChar,PROPERTY_ATTRIBUTE_MAGIC));
SetCreatureProperty(oChar,PROPERTY_SIMPLE_ATTRIBUTE_POINTS, IntToFloat(oldStatPoints+(oldStatTotal-newStatTotal)));
DEBUG_PrintToScreen("New Attribute points: " + IntToString(oldStatPoints+(oldStatTotal-newStatTotal)));
}
void AddAbilities(object oChar)
{
int nRace = GetCreatureRacialType(oChar);
int nClass = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_CURRENT_CLASS));
int nBackground=FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_BACKGROUND));
int nSkillPoints = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_SKILL_POINTS));
int nTalentPoints = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_TALENT_POINTS));
int nAbility;
// -------------------------------------------------------------------------
// Race
// -------------------------------------------------------------------------
// Humanoids gain the 'humanoid' trait (prereq for skills)
nAbility = ABILITY_TALENT_TRAIT_HUMANOID;
if (IsHumanoid(oChar) && !HasAbility(oChar,nAbility))
{
AddAbility(oChar,nAbility);
}
// -------------------------------------------------------------------------
// Dwaves gain dwarven resistance free.
// -------------------------------------------------------------------------
nAbility = ABILITY_SKILL_DWARVEN_RESISTANCE;
if ((nRace == RACE_DWARF) && (!HasAbility(oChar,nAbility)))
{
AddAbility(oChar,nAbility);
}
// -------------------------------------------------------------------------
// 2. Ability #1
// -------------------------------------------------------------------------
nAbility = GetM2DAInt(TABLE_RULES_RACES,"Ability1",nRace);
if (nAbility && !HasAbility(oChar,nAbility))
{
_AddAbility(oChar, nAbility);
// nTalentPoints--;
}
// -------------------------------------------------------------------------
// 3. Ability #2
// -------------------------------------------------------------------------
nAbility = GetM2DAInt(TABLE_RULES_RACES,"Ability2",nRace);
if (nAbility && !HasAbility(oChar,nAbility))
{
_AddAbility(oChar, nAbility);
// nTalentPoints--;
}
// -------------------------------------------------------------------------
// 4. Grant class abilities (hidden class talent)
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// 1. Ability #1
// -------------------------------------------------------------------------
nAbility = GetM2DAInt(TABLE_RULES_CLASSES,"StartingAbility1",nClass);
if (nAbility && !HasAbility(oChar,nAbility))
{
_AddAbility(oChar, nAbility);
nTalentPoints--;
}
// -------------------------------------------------------------------------
// 2. Ability #2
// -------------------------------------------------------------------------
nAbility = GetM2DAInt(TABLE_RULES_CLASSES,"StartingAbility2",nClass);
if (nAbility && !HasAbility(oChar,nAbility))
{
_AddAbility(oChar, nAbility);
nTalentPoints--;
}
// -------------------------------------------------------------------------
// Starting Skills
// -------------------------------------------------------------------------
if (nClass == CLASS_WARRIOR)
{
nAbility = 100100;
if (!HasAbility(oChar,nAbility)) {
_AddAbility(oChar, nAbility);
nSkillPoints--;
}
}
else if (nClass == CLASS_ROGUE)
{
nAbility = ABILITY_SKILL_POISON_1;
if (!HasAbility(oChar,nAbility)) {
_AddAbility(oChar, nAbility);
nSkillPoints--;
}
}
else if (nClass == CLASS_WIZARD)
{
nAbility = ABILITY_SKILL_HERBALISM_1;
if (!HasAbility(oChar,nAbility)) {
_AddAbility(oChar, nAbility);
nSkillPoints--;
}
}
// -------------------------------------------------------------------------
// Give one skill for backgroud
// -------------------------------------------------------------------------
nAbility = 0;
switch (nBackground)
{
case BACKGROUND_CITY: nAbility = ABILITY_SKILL_PERSUADE_1; break;
case BACKGROUND_COMMONER: nAbility = ABILITY_SKILL_STEALING_1; break;
case BACKGROUND_DALISH: nAbility = ABILITY_SKILL_SURVIVAL_1; break;
case BACKGROUND_MAGI: nAbility = ABILITY_SKILL_COMBAT_TACTICS_1; break;
case BACKGROUND_NOBLE: nAbility = (!HasAbility(oChar,ABILITY_SKILL_COMBAT_TRAINING_1))?ABILITY_SKILL_COMBAT_TRAINING_1:ABILITY_SKILL_COMBAT_TRAINING_2; break;
}
if (nAbility && !HasAbility(oChar,nAbility))
{
_AddAbility (oChar, nAbility);
nSkillPoints--;
}
SetCreatureProperty(oChar,PROPERTY_SIMPLE_SKILL_POINTS, IntToFloat(nSkillPoints));
SetCreatureProperty(oChar,PROPERTY_SIMPLE_TALENT_POINTS, IntToFloat(nTalentPoints));
}
void RemoveSkillPoints(object oChar, int nTable)
{
int nPoints = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_SKILL_POINTS));
int nIdx = 0;
int nCount;
nCount = GetM2DAInt(nTable,"SkillID",nIdx);
for (nIdx=1; nIdx < nCount; nIdx++) // each talent in table
{
int nTalent;
nTalent = GetM2DAInt(nTable,"SkillID",nIdx); // get talent
if (HasAbility(oChar,nTalent)) // if character has talent
{
RemoveAbility(oChar, nTalent); // remove talent and refund point
nPoints++;
}
}
SetCreatureProperty(oChar,PROPERTY_SIMPLE_SKILL_POINTS, IntToFloat(nPoints)); // give points back for each skill removed
}
void RemoveTalentPoints(object oChar, int nTable)
{
int nPoints = FloatToInt(GetCreatureProperty(oChar,PROPERTY_SIMPLE_TALENT_POINTS));
int nIdx = 0;
int nCount;
nCount = GetM2DAInt(nTable,"TalentID",nIdx);
for (nIdx=1; nIdx < nCount; nIdx++)
{
int nTalent;
nTalent = GetM2DAInt(nTable,"TalentID",nIdx);
if (HasAbility(oChar,nTalent))
{
RemoveAbility(oChar, nTalent);
nPoints++;
}
}
SetCreatureProperty(oChar,PROPERTY_SIMPLE_TALENT_POINTS, IntToFloat(nPoints));
}
void main()
{
object oChar;
oChar = OBJECT_SELF;
//clear quickslot
int j;
for(j = 0; j < 20; j++)
{
SetQuickslot(OBJECT_SELF, j, 0);
}
ChangeAttributes(oChar);
int nTable = _GetTableToUseForAL(oChar); // set correct autoleveling table for character
RemoveSkillPoints(oChar,nTable);
RemoveTalentPoints(oChar,nTable);
AddAbilities(oChar);
// AL_DoAutoLevelUp(oChar);
// -------------------------------------------------------------------------
// Update various UIs
// -------------------------------------------------------------------------
Chargen_SetNumTactics(oChar);
SetCanLevelUp(oChar,Chargen_HasPointsToSpend(oChar));
}
Now you will have the compiled script in \BioWare\Dragon Age\modules\Single Player\override\toolsetexport
If you have someone that can send you the compiled script you wont have to do the above steps.
In order to use the script you will have to 1) create a shortcut to the \Dragon Age\bin_ship\daorigins.exe file 2) open up properties of the shortcut 3) under target add "-enabledeveloperconsole" (without quotes) after the last quote 4) run the game with this shortcut 5) select the character you want to reset. 6) hit the tilde key to bring up the console 7) type in "runscript reset" and hit enter 8) hit the levelup button on your character.
The first version up the script I wrote didn't keep the points that you gained from books or the +1attribute items. This one doesn't lose anything. Not _all_ skills are reset however most are. If there is sufficient demand I will mod it to refund even more skills.
" You will need to download and install the Toolset to use this script. 1) run the toolset. 2) go to file->new and select script 2) Call the script reset 3) select debug for the directory 4) Copy the text of the above post to the open file. 5) hit F7 to compile the script 6) close the toolset 6) delete the file in your my document folder \BioWare\Dragon Age\modules\Single Player\SinglePlayer.cif Now you will have the compiled script in \BioWare\Dragon Age\modules\Single Player\override\toolsetexport If you have someone that can send you the compiled script you wont have to do the above steps. In order to use the script you will have to 1) create a shortcut to the \Dragon Age\bin_ship\daorigins.exe file 2) open up properties of the shortcut 3) under target add "-enabledeveloperconsole" (without quotes) after the last quote 4) run the game with this shortcut 5) select the character you want to reset. 6) hit the tilde key to bring up the console 7) type in "runscript reset" and hit enter 8) hit the levelup button on your character. The first version up the script I wrote didn't keep the points that you gained from books or the +1attribute items. This one doesn't lose anything. Not _all_ skills are reset however most are. If there is sufficient demand I will mod it to refund even more skills. "Has this script been tested to ensure it doesn't break anything, or is there a good chance it will?
I.E. as you can see here, a lot of the scripts which are pre-created in the game can cause things to break.
I missed a step, you also have to delete the BioWare\Dragon Age\packages\core\override directory. Otherwise you can have characters disappear and stuff.
@DeriusE:
The game creators didn't mean for their scripts to be used by game players .. they aren't coded for that purpose. They could have coded them better if they were meant to be used in game.
The only things this code changes is the attributes/skills/talents. I don't see any way it could possibly break the game. It's been tested to the extent that it does what I intended it to do :P
@artureg:
I don't have a place to upload the compiled script to or I would.
Edit: download this picture file.. strip off the .jpg extension, extract the .rar file to my documents folder at
BioWare\Dragon Age\modules\Single Player\override\toolsetexport
http://i38.tinypic.com/i563bt.jpg
Yeah, I actually had some fun trying to fix that - deleting said directory didn't actually fix it for me, what fixed it was opening the Toolset, making a new module so the toolset isn't opening the main campaign and then changed the name of my single player directory under Documents\BioWare\Dragon Age\modules." I missed a step, you also have to delete the BioWare\Dragon Age\packages\core\override directory. Otherwise you can have characters disappear and stuff.
Suffice to say, I'll be staying away from the Toolset for now on.
There is a functioning respec mod on fileplanet and the dragon age mod site.
As for your problem of two mages having icy weapons, that's probably for the best anyways because the only thing better than one cone of cold is two. I would recommend having one of your mages spec either into fiery weapons or telekinetic weapons especially if you have 2+ dual wielders in the party which I would recommend always having even if you turn one of your mages into an arcane warrior.
Here's a good summary of a guy's respec experience.
I'm not sure if it links to stuff you've already been talking about; I've never needed to respec. :-\
In my opinion though respeccing is cheating because Bioware seems to have designed this game to be difficult when you have a suboptimal group. I noticed a massive difference in my game after I respecced and the recruitable characters weren't carrying around any baggage in the form of useless talents/spells. This is unfortunate because it seems to mean that there's a pretty low ceiling for challenge in this game... heck it's low even without respecs really because the best skills in the game rarely require you to actually go very far into a talent tree. For example with oghren and sten you only need 3 talents in dual wielding to become a dps powerhouse compared to 2h and then there are two more that are just icing on the cake.
Please Log In to post.
This edit will also create new pages on Giant Bomb for:
Beware, you are proposing to add brand new pages to the wiki along with your edits. Make sure this is what you intended. This will likely increase the time it takes for your changes to go live.Comment and Save
Until you earn 1000 points all your submissions need to be vetted by other Giant Bomb users. This process takes no more than a few hours and we'll send you an email once approved.
Log in to comment