Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ccc_inc_misc"
- // sets up the header and the choices for each stage of the convoCC
- void DoHeaderAndChoices(int nStage);
- // processes the player choices for each stage of the convoCC
- int HandleChoice(int nStage, int nChoice);
- void DoHeaderAndChoices(int nStage)
- {
- string sText;
- string sName;
- int i = 0; // loop counter
- switch(nStage)
- {
- case STAGE_INTRODUCTION: {
- sText = "This is the PRC Conversation Character Creator (CCC).\n";
- sText+= "This is a replicate of the bioware character creator, but it will allow you to select custom content at level 1. ";
- sText+= "Simply follow the step by step instructions and select what you want. ";
- sText+= "If you dont get all the options you think you should at a stage, select one, then select No at the confirmation step.";
- SetHeader(sText);
- // setup the choices
- AddChoice("continue", 0);
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_GENDER: {
- sText = GetStringByStrRef(158);
- SetHeader(sText);
- // set up the choices
- Do2daLoop("gender", "name", GetPRCSwitch(FILE_END_GENDER));
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_GENDER_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- sText+= GetStringByStrRef(StringToInt(Get2DACache("gender", "NAME", GetLocalInt(OBJECT_SELF, "Gender"))));
- sText+= "\n"+GetStringByStrRef(16824210);
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_RACE: {
- sText = GetStringByStrRef(162); // Select a Race for your Character
- SetHeader(sText);
- // set up choices
- // try with waiting set up first
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- DelayCommand(0.01, DoRacialtypesLoop());
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_RACE_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- sText += GetStringByStrRef(StringToInt(Get2DACache("racialtypes", "Name", GetLocalInt(OBJECT_SELF, "Race"))));
- sText += "\n";
- sText+= GetStringByStrRef(StringToInt(Get2DACache("racialtypes", "Description", GetLocalInt(OBJECT_SELF, "Race"))));
- sText+= "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_CLASS: {
- sText = GetStringByStrRef(61920); // Select a Class for Your Character
- SetHeader(sText);
- // set up choices
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- DelayCommand(0.01, DoClassesLoop());
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_CLASS_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- sText += GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", GetLocalInt(OBJECT_SELF, "Class"))));
- sText += "\n";
- sText+= GetStringByStrRef(StringToInt(Get2DACache("classes", "Description", GetLocalInt(OBJECT_SELF, "Class"))));
- sText+= "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_ALIGNMENT: {
- sText = GetStringByStrRef(111); // Select an Alignment for your Character
- SetHeader(sText);
- // get the restriction info from classes.2da
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- int iAlignRestrict = HexToInt(Get2DACache("classes", "AlignRestrict",nClass));
- int iAlignRstrctType = HexToInt(Get2DACache("classes", "AlignRstrctType",nClass));
- int iInvertRestrict = HexToInt(Get2DACache("classes", "InvertRestrict",nClass));
- // set up choices
- if(GetIsValidAlignment(ALIGNMENT_LAWFUL, ALIGNMENT_GOOD,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(112), 112);
- if(GetIsValidAlignment(ALIGNMENT_NEUTRAL, ALIGNMENT_GOOD,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(115), 115);
- if(GetIsValidAlignment(ALIGNMENT_CHAOTIC, ALIGNMENT_GOOD,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(118), 118);
- if(GetIsValidAlignment(ALIGNMENT_LAWFUL, ALIGNMENT_NEUTRAL,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(113), 113);
- if(GetIsValidAlignment(ALIGNMENT_NEUTRAL, ALIGNMENT_NEUTRAL,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(116), 116);
- if(GetIsValidAlignment(ALIGNMENT_CHAOTIC, ALIGNMENT_NEUTRAL,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(119), 119);
- if(GetIsValidAlignment(ALIGNMENT_LAWFUL, ALIGNMENT_EVIL,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(114), 114);
- if(GetIsValidAlignment(ALIGNMENT_NEUTRAL, ALIGNMENT_EVIL,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(117), 117);
- if(GetIsValidAlignment(ALIGNMENT_CHAOTIC, ALIGNMENT_EVIL,iAlignRestrict, iAlignRstrctType, iInvertRestrict))
- AddChoice(GetStringByStrRef(120), 120);
- DelayCommand(0.01, DeleteLocalInt(OBJECT_SELF, "DynConv_Waiting"));
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_ALIGNMENT_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- int nStrRef = GetLocalInt(OBJECT_SELF, "AlignChoice"); // strref for the alignment
- sText += GetStringByStrRef(nStrRef);
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_ABILITY: {
- // the first time through this stage set everything up
- if(GetLocalInt(OBJECT_SELF, "Str") == 0)
- {
- // get the starting points to allocate
- int nPoints = GetPRCSwitch(PRC_CONVOCC_STAT_POINTS);
- if(nPoints == 0)
- nPoints = 30; // default
- SetLocalInt(OBJECT_SELF, "Points", nPoints);
- // get the max stat level (before racial modifiers)
- int nMaxStat = GetPRCSwitch(PRC_CONVOCC_MAX_STAT);
- if(nMaxStat == 0)
- nMaxStat = 18; // default
- SetLocalInt(OBJECT_SELF, "MaxStat", nMaxStat);
- // set the starting stat values
- SetLocalInt(OBJECT_SELF, "Str", 8);
- SetLocalInt(OBJECT_SELF, "Dex", 8);
- SetLocalInt(OBJECT_SELF, "Con", 8);
- SetLocalInt(OBJECT_SELF, "Int", 8);
- SetLocalInt(OBJECT_SELF, "Wis", 8);
- SetLocalInt(OBJECT_SELF, "Cha", 8);
- }
- sText = GetStringByStrRef(130) + "\n"; // Select Ability Scores for your Character
- sText += GetStringByStrRef(138) + ": "; // Remaining Points
- sText += IntToString(GetLocalInt(OBJECT_SELF, "Points"));
- SetHeader(sText);
- // get the racial adjustment
- int nRace = GetLocalInt(OBJECT_SELF, "Race");
- string sStrAdjust = Get2DACache("racialtypes", "StrAdjust", nRace);
- string sDexAdjust = Get2DACache("racialtypes", "DexAdjust", nRace);
- string sConAdjust = Get2DACache("racialtypes", "ConAdjust", nRace);
- string sIntAdjust = Get2DACache("racialtypes", "IntAdjust", nRace);
- string sWisAdjust = Get2DACache("racialtypes", "WisAdjust", nRace);
- string sChaAdjust = Get2DACache("racialtypes", "ChaAdjust", nRace);
- // set up the choices in "<statvalue> (racial <+/-modifier>) <statname>. Cost to increase <cost>" format
- AddAbilityChoice(GetLocalInt(OBJECT_SELF, "Str"), GetStringByStrRef(135), sStrAdjust, ABILITY_STRENGTH);
- AddAbilityChoice(GetLocalInt(OBJECT_SELF, "Dex"), GetStringByStrRef(133), sDexAdjust, ABILITY_DEXTERITY);
- AddAbilityChoice(GetLocalInt(OBJECT_SELF, "Con"), GetStringByStrRef(132), sConAdjust, ABILITY_CONSTITUTION);
- AddAbilityChoice(GetLocalInt(OBJECT_SELF, "Int"), GetStringByStrRef(134), sIntAdjust, ABILITY_INTELLIGENCE);
- AddAbilityChoice(GetLocalInt(OBJECT_SELF, "Wis"), GetStringByStrRef(136), sWisAdjust, ABILITY_WISDOM);
- AddAbilityChoice(GetLocalInt(OBJECT_SELF, "Cha"), GetStringByStrRef(131), sChaAdjust, ABILITY_CHARISMA);
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_ABILITY_CHECK: {
- sText = GetStringByStrRef(16824209) + "\n"; // You have selected:
- // get the racial adjustment
- int nRace = GetLocalInt(OBJECT_SELF, "Race");
- string sStrAdjust = Get2DACache("racialtypes", "StrAdjust", nRace);
- string sDexAdjust = Get2DACache("racialtypes", "DexAdjust", nRace);
- string sConAdjust = Get2DACache("racialtypes", "ConAdjust", nRace);
- string sIntAdjust = Get2DACache("racialtypes", "IntAdjust", nRace);
- string sWisAdjust = Get2DACache("racialtypes", "WisAdjust", nRace);
- string sChaAdjust = Get2DACache("racialtypes", "ChaAdjust", nRace);
- sText += GetStringByStrRef(135) + ": " + IntToString(GetLocalInt(OBJECT_SELF, "Str") + StringToInt(sStrAdjust)) + "\n"; // str
- sText += GetStringByStrRef(133) + ": " + IntToString(GetLocalInt(OBJECT_SELF, "Dex") + StringToInt(sDexAdjust)) + "\n"; // dex
- sText += GetStringByStrRef(132) + ": " + IntToString(GetLocalInt(OBJECT_SELF, "Con") + StringToInt(sConAdjust)) + "\n"; // con
- sText += GetStringByStrRef(134) + ": " + IntToString(GetLocalInt(OBJECT_SELF, "Int") + StringToInt(sIntAdjust)) + "\n"; // int
- sText += GetStringByStrRef(136) + ": " + IntToString(GetLocalInt(OBJECT_SELF, "Wis") + StringToInt(sWisAdjust)) + "\n"; // wis
- sText += GetStringByStrRef(131) + ": " + IntToString(GetLocalInt(OBJECT_SELF, "Cha") + StringToInt(sChaAdjust)) + "\n"; // cha
- sText += "\n" + GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_SKILL: {
- // the first time through this stage set everything up
- int nPoints = GetLocalInt(OBJECT_SELF, "Points");
- if(nPoints == 0)
- {
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- //calculate number of points
- nPoints += StringToInt(Get2DACache("classes", "SkillPointBase", GetLocalInt(OBJECT_SELF, "Class")));
- // calculate the intelligence bonus/penalty
- int nInt = GetLocalInt(OBJECT_SELF, "Int");
- int nRace = GetLocalInt(OBJECT_SELF, "Race");
- nPoints += (nInt-10+StringToInt(Get2DACache("racialtypes", "IntAdjust", nRace)))/2;
- if(GetPRCSwitch(PRC_CONVOCC_SKILL_MULTIPLIER))
- nPoints *= GetPRCSwitch(PRC_CONVOCC_SKILL_MULTIPLIER);
- else
- nPoints *= 4;
- // humans get an extra 4 skill points at level 1
- if (GetLocalInt(OBJECT_SELF, "Race") == RACIAL_TYPE_HUMAN)
- nPoints += 4;
- nPoints += GetPRCSwitch(PRC_CONVOCC_SKILL_BONUS);
- // minimum of 4, regardless of int
- if(nPoints < 4)
- nPoints = 4;
- SetLocalInt(OBJECT_SELF, "Points", nPoints);
- DelayCommand(0.01, DoSkillsLoop());
- }
- else
- DoSkillsLoop();
- // do header
- sText = GetStringByStrRef(396) + "\n"; // Allocate skill points
- sText += GetStringByStrRef(395) + ": "; // Remaining Points
- sText += IntToString(GetLocalInt(OBJECT_SELF, "Points"));
- SetHeader(sText);
- /* Hack - Returning to the skill selection stage, restore the
- * offset to be the same as it was choosing the skill.
- */
- if(GetLocalInt(OBJECT_SELF, "SkillListChoiceOffset"))
- {
- SetLocalInt(OBJECT_SELF, DYNCONV_CHOICEOFFSET, GetLocalInt(OBJECT_SELF, "SkillListChoiceOffset") - 1);
- DeleteLocalInt(OBJECT_SELF, "SkillListChoiceOffset");
- }
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_SKILL_CHECK: {
- sText = GetStringByStrRef(16824209) + "\n"; // You have selected:
- if(GetPRCSwitch(PRC_CONVOCC_ALLOW_SKILL_POINT_ROLLOVER))
- {
- sText += "Stored skill points: ";
- sText += IntToString(GetLocalInt(OBJECT_SELF, "SavedSkillPoints")) + "\n";
- }
- // loop through the "Skills" array
- for(i=0; i <= GetPRCSwitch(FILE_END_SKILLS); i++) // the array can't be bigger than the skills 2da
- {
- if(array_get_int(OBJECT_SELF, "Skills",i) != 0) // if there are points in the skill, add it to the header
- {
- sText+= GetStringByStrRef(StringToInt(Get2DACache("skills", "Name", i)));
- sText+= " "+IntToString(array_get_int(OBJECT_SELF, "Skills",i))+"\n";
- }
- }
- sText += "\n" + GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_FEAT: {
- sText = GetStringByStrRef(397) + "\n"; // Select Feats
- sText += GetStringByStrRef(398) + ": "; // Feats remaining
- // if it's the first time through, work out the number of feats
- int nFeatsRemaining = GetLocalInt(OBJECT_SELF, "Points");
- if (!nFeatsRemaining) // first time through
- {
- nFeatsRemaining = 1; // always have at least 1
- // check for quick to master
- nFeatsRemaining += GetLocalInt(OBJECT_SELF, "QTM");
- // set how many times to go through this stage
- SetLocalInt(OBJECT_SELF, "Points", nFeatsRemaining);
- // mark skill focus feat prereq here so it's only done once
- // note: any other skill that is restricted to certain classes needs to be added here
- // and the local ints deleted in the STAGE_BONUS_FEAT_CHECK case of HandleChoice()
- // and it enforced in CheckSkillPrereq()
- // UMD and animal empathy are the only ones so far
- MarkSkillFocusPrereq(SKILL_ANIMAL_EMPATHY, "bHasAnimalEmpathy");
- MarkSkillFocusPrereq(SKILL_USE_MAGIC_DEVICE, "bHasUMD");
- }
- // check for bonus feat(s) from class - show the player the total feats
- // even though class bonuses are a different stage
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- nFeatsRemaining += StringToInt(Get2DACache(Get2DACache("Classes", "BonusFeatsTable", nClass), "Bonus", 0));
- sText += IntToString(nFeatsRemaining);
- SetHeader(sText);
- // do feat list
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- if (array_exists(OBJECT_SELF, "CachedChoiceTokens"))
- {
- // add cached choices to convo
- AddChoicesFromCache();
- DeleteLocalInt(OBJECT_SELF, "DynConv_Waiting");
- }
- else
- {
- DoFeatLoop();
- }
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_FEAT_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- // get feat
- int nFeat = array_get_int(OBJECT_SELF, "Feats", (array_get_size(OBJECT_SELF, "Feats") - 1));
- // alertness fix
- if (nFeat == -1)
- nFeat = 0;
- sText += GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))) + "\n"; // name
- sText += GetStringByStrRef(StringToInt(Get2DACache("feat", "DESCRIPTION", nFeat))) + "\n"; // description
- sText+= "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_BONUS_FEAT: {
- sText = GetStringByStrRef(397) + "\n"; // Select Feats
- sText += GetStringByStrRef(398) + ": "; // Feats remaining
- int nFeatsRemaining = GetLocalInt(OBJECT_SELF, "Points");
- if (!nFeatsRemaining) // first time through
- {
- // check for bonus feat(s) from class
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- nFeatsRemaining += StringToInt(Get2DACache(Get2DACache("Classes", "BonusFeatsTable", nClass), "Bonus", 0));
- // set how many times to go through this stage
- SetLocalInt(OBJECT_SELF, "Points", nFeatsRemaining);
- }
- sText += IntToString(nFeatsRemaining);
- SetHeader(sText);
- // do feat list
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- if (array_exists(OBJECT_SELF, "CachedChoiceTokens"))
- {
- // add cached choices to convo
- AddChoicesFromCache();
- DeleteLocalInt(OBJECT_SELF, "DynConv_Waiting");
- }
- else
- {
- DoBonusFeatLoop();
- }
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_BONUS_FEAT_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- // get feat
- int nFeat = array_get_int(OBJECT_SELF, "Feats", (array_get_size(OBJECT_SELF, "Feats") - 1));
- sText += GetStringByStrRef(StringToInt(Get2DACache("feat", "FEAT", nFeat))) + "\n"; // name
- sText += GetStringByStrRef(StringToInt(Get2DACache("feat", "DESCRIPTION", nFeat))) + "\n"; // description
- sText+= "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_WIZ_SCHOOL: {
- sText = GetStringByStrRef(381); // Select a School of Magic
- SetHeader(sText);
- // choices
- if(GetPRCSwitch(PRC_PNP_SPELL_SCHOOLS))
- {
- AddChoice(GetStringByStrRef(StringToInt(Get2DACache("spellschools", "StringRef", 9))), 9);
- }
- else
- {
- for(i = 0; i < 9; i++)
- {
- AddChoice(GetStringByStrRef(StringToInt(Get2DACache("spellschools", "StringRef", i))), i);
- }
- }
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_WIZ_SCHOOL_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- sText+= GetStringByStrRef(StringToInt(Get2DACache("spellschools", "StringRef", GetLocalInt(OBJECT_SELF, "School"))));
- sText+= "\n\n";
- sText+= GetStringByStrRef(StringToInt(Get2DACache("spellschools", "Description", GetLocalInt(OBJECT_SELF, "School"))));
- sText+= "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_SPELLS_0: {
- // if the first time through, set up the number of cantrips to pick
- int nPoints = GetLocalInt(OBJECT_SELF, "Points");
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- if(nPoints == 0)
- {
- // set up the number of spells to pick
- // get the cls_spkn_***2da to use
- string sSpkn = Get2DACache("classes", "SpellKnownTable", nClass);
- // set the number of spells to pick
- nPoints = StringToInt(Get2DACache(sSpkn, "SpellLevel0", 0));
- SetLocalInt(OBJECT_SELF, "Points", nPoints);
- // don't want to be waiting every time
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- }
- sText = GetStringByStrRef(372) + "\n"; // Select Cantrips
- sText += GetStringByStrRef(371) + ": "; // Remaining Spells
- sText += IntToString(nPoints);
- SetHeader(sText);
- // choices, uses nStage to see if it's listing level 0 or level 1 spells
- DoSpellsLoop(nStage);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_SPELLS_1: {
- // if the first time through, set up the number of spells to pick
- int nPoints = GetLocalInt(OBJECT_SELF, "Points");
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- if(nPoints == 0)
- {
- switch(nClass)
- {
- case CLASS_TYPE_WIZARD: {
- // spells to pick is 3 + int modifier
- int nIntMod = GetLocalInt(OBJECT_SELF, "Int");
- nIntMod += StringToInt(Get2DACache("racialtypes", "IntAdjust", GetLocalInt(OBJECT_SELF, "Race")));
- nIntMod = (nIntMod - 10)/2;
- nPoints = 3 + nIntMod;
- break;
- }
- case CLASS_TYPE_SORCERER: {
- // get the cls_spkn_***2da to use
- string sSpkn = Get2DACache("classes", "SpellKnownTable", nClass);
- // set the number of spells to pick
- nPoints = StringToInt(Get2DACache(sSpkn, "SpellLevel1", 0));
- break;
- }
- }
- SetLocalInt(OBJECT_SELF, "Points", nPoints);
- // don't want to be waiting every time
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- }
- sText = GetStringByStrRef(368) + "\n"; // Select Spells for your Character
- sText += GetStringByStrRef(371) + ": "; // Remaining Spells
- sText += IntToString(GetLocalInt(OBJECT_SELF, "Points"));
- SetHeader(sText);
- // choices, uses nStage to see if it's listing level 0 or level 1 spells
- DoSpellsLoop(nStage);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_SPELLS_CHECK: {
- sText = GetStringByStrRef(16824209) + "\n"; // You have selected:
- int spellID = 0;
- sText += GetStringByStrRef(691) + " - \n"; // Cantrips
- // loop through the spell choices
- for (i = 0; i < array_get_size(OBJECT_SELF, "SpellLvl0"); i++)
- {
- spellID = array_get_int(OBJECT_SELF, "SpellLvl0", i);
- sText+= GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellID)));
- sText += "\n";
- }
- sText += GetStringByStrRef(61924) + " - \n"; // Level 1 Spells
- // loop through the spell choices
- for (i = 0; i < array_get_size(OBJECT_SELF, "SpellLvl1"); i++)
- {
- spellID = array_get_int(OBJECT_SELF, "SpellLvl1", i);
- sText+= GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", spellID)));
- sText += "\n";
- }
- sText+= "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_FAMILIAR: {
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- sText = GetStringByStrRef(5607) + "\n"; // Choose a Familiar for your Character
- sText += "(" + GetStringByStrRef(StringToInt(Get2DACache("classes", "Name", nClass))) + ")";
- SetHeader(sText);
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- // do choices
- if (nClass == CLASS_TYPE_DRUID)
- Do2daLoop("hen_companion", "strref", GetPRCSwitch(FILE_END_ANIMALCOMP));
- else // wizard or sorc
- Do2daLoop("hen_familiar", "strref", GetPRCSwitch(FILE_END_FAMILIAR));
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", FALSE);
- FloatingTextStringOnCreature("Done", OBJECT_SELF, FALSE);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_FAMILIAR_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- if (GetLocalInt(OBJECT_SELF, "Class") == CLASS_TYPE_DRUID)
- {
- int nCompanion = GetLocalInt(OBJECT_SELF, "Companion");
- sText += GetStringByStrRef(StringToInt(Get2DACache("hen_companion", "STRREF", nCompanion)));
- sText += "\n";
- sText += GetStringByStrRef(StringToInt(Get2DACache("hen_companion", "DESCRIPTION", nCompanion)));
- sText += "\n";
- }
- else
- {
- int nFamiliar = GetLocalInt(OBJECT_SELF, "Familiar");
- sText += GetStringByStrRef(StringToInt(Get2DACache("hen_familiar", "STRREF", nFamiliar)));
- sText += "\n";
- sText += GetStringByStrRef(StringToInt(Get2DACache("hen_familiar", "DESCRIPTION", nFamiliar)));
- sText += "\n";
- }
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_DOMAIN: {
- sText = GetStringByStrRef(5982); // Pick Cleric Domain
- SetHeader(sText);
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- // choices
- DoDomainsLoop();
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_DOMAIN_CHECK1: {
- sText = GetStringByStrRef(16824209) + "\n"; // You have selected:
- // first domain
- int nDomain = GetLocalInt(OBJECT_SELF,"Domain1");
- // fix for air domain being 0
- if (nDomain == -1)
- nDomain = 0;
- sText += GetStringByStrRef(StringToInt(Get2DACache("domains", "Name", nDomain))) + "\n";
- sText += GetStringByStrRef(StringToInt(Get2DACache("domains", "Description", nDomain))) + "\n";
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_DOMAIN_CHECK2: {
- sText = GetStringByStrRef(16824209) + "\n"; // You have selected:
- // second domain
- int nDomain = GetLocalInt(OBJECT_SELF,"Domain2");
- // fix for air domain being 0
- if (nDomain == -1)
- nDomain = 0;
- sText += GetStringByStrRef(StringToInt(Get2DACache("domains", "Name", nDomain))) + "\n";
- sText += GetStringByStrRef(StringToInt(Get2DACache("domains", "Description", nDomain))) + "\n";
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_APPEARANCE: {
- sText = GetStringByStrRef(124); // Select the Appearance of your Character
- SetHeader(sText);
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- if(GetPRCSwitch(PRC_CONVOCC_USE_RACIAL_APPEARANCES)) // restrict to what is given in the 2da
- SetupRacialAppearances();
- else
- DoAppearanceLoop();
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_APPEARANCE_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- int nAppearance = GetLocalInt(OBJECT_SELF, "Appearance");
- int nStrRef = StringToInt(Get2DACache("appearance", "STRING_REF", nAppearance));
- if(nStrRef)
- sText += GetStringByStrRef(nStrRef);
- else
- sText += Get2DACache("appearance", "LABEL", nAppearance);
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_PORTRAIT: {
- sText = GetStringByStrRef(7383); // Select a portrait
- SetHeader(sText);
- if(GetPRCSwitch(PRC_CONVOCC_ALLOW_TO_KEEP_PORTRAIT))
- AddChoice("Keep existing portrait.", -1);
- // if(GetPRCSwitch(PRC_CONVOCC_USE_RACIAL_PORTRAIT))
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- DoPortraitsLoop();
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_PORTRAIT_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- int nPortrait = GetPortraitId(OBJECT_SELF);
- sText += Get2DACache("portraits", "BaseResRef", nPortrait);
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice("View this portrait.", 2);
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_SOUNDSET: {
- sText = GetStringByStrRef(7535); // Select a sound set
- SetHeader(sText);
- if(GetPRCSwitch(PRC_CONVOCC_ALLOW_TO_KEEP_VOICESET))
- AddChoice("keep existing soundset.", -1);
- SetLocalInt(OBJECT_SELF, "DynConv_Waiting", TRUE);
- DoSoundsetLoop();
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_SOUNDSET_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- int nSoundset = GetLocalInt(OBJECT_SELF, "Soundset");
- sText += GetStringByStrRef(StringToInt(Get2DACache("soundset", "STRREF", nSoundset)));
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice("Listen to this soundset.", 2);
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_HEAD: {
- sText = GetStringByStrRef(124); // Select the Appearance of your Character
- sText += "(" + GetStringByStrRef(123) + ")"; // Head
- SetHeader(sText);
- AddChoice("keep existing head", -1);
- SetupHeadChoices();
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_HEAD_CHECK: {
- sText = "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_TATTOO: {
- sText = GetStringByStrRef(124); // Select the Appearance of your Character
- sText += "(" + GetStringByStrRef(1591) + ")"; // Tattoo
- SetHeader(sText);
- AddChoice("keep current tatoos", -1);
- AddChoice("torso", CREATURE_PART_TORSO);
- AddChoice("right shin", CREATURE_PART_RIGHT_SHIN);
- AddChoice("left shin", CREATURE_PART_LEFT_SHIN);
- AddChoice("right thigh", CREATURE_PART_RIGHT_THIGH);
- AddChoice("left thigh", CREATURE_PART_LEFT_THIGH);
- AddChoice("right forearm", CREATURE_PART_RIGHT_FOREARM);
- AddChoice("left forearm", CREATURE_PART_LEFT_FOREARM);
- AddChoice("right bicep", CREATURE_PART_RIGHT_BICEP);
- AddChoice("left bicep", CREATURE_PART_LEFT_BICEP);
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_TATTOO_CHECK: {
- sText = "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_WINGS: {
- sText = GetStringByStrRef(124); // Select the Appearance of your Character
- sText += "(" + GetStringByStrRef(2409) + ")"; // Wings
- SetHeader(sText);
- DoWingmodelLoop();
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_WINGS_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- int nWingType = GetCreatureWingType();
- sText += Get2DACache("wingmodel", "label", nWingType);
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_TAIL: {
- sText = GetStringByStrRef(124); // Select the Appearance of your Character
- sText += "(" + GetStringByStrRef(2410) + ")"; // Tail
- SetHeader(sText);
- DoTailmodelLoop();
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_TAIL_CHECK: {
- sText = GetStringByStrRef(16824209) + " "; // You have selected:
- int nTailType = GetCreatureTailType();
- sText += Get2DACache("tailmodel", "label", nTailType);
- sText += "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_SKIN_COLOUR: {
- sText = "Pick a colour category ";
- sText += "(" + GetStringByStrRef(128) + ")"; // Skin Color
- SetHeader(sText);
- AddChoice("Keep current skin colour", -1);
- AddChoice("Tan colours", 1);
- AddChoice("Sand & Rose brown", 2);
- AddChoice("Tan-Greys and blues", 3);
- AddChoice("Gold and obsidian", 4);
- AddChoice("Greens", 5);
- AddChoice("Greys and reds", 6);
- AddChoice("Bright blues, greens and yellows", 7);
- // new colours
- AddChoice("Metallic & pure white and black", 8);
- AddChoice("Smoky Group 1", 9);
- AddChoice("Smoky Group 2", 10);
- AddChoice("Smoky Group 3", 11);
- AddChoice("Smoky Group 4", 12);
- AddChoice("Black Cherry & Cinnamon", 13);
- AddChoice("Hunter Green & Druid Green", 14);
- AddChoice("Graveyard Fog & Chestnut", 15);
- AddChoice("Clay & Toasted Ash", 16);
- AddChoice("Snail Brown & Cobalt Blue", 17);
- AddChoice("Midnight Blue & Peacock Green", 18);
- AddChoice("Royal Purple, Mountain Blue, & Sea Foam Green", 19);
- AddChoice("Spring Green, Honey Gold, Copper Coin & Berry Ice", 20);
- AddChoice("Sugar Plum, Ice Blue, Black, & White", 21);
- AddChoice("Greens, Mystics, & Browns", 22);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_SKIN_COLOUR_CHOICE: {
- sText = "Pick a colour ";
- sText += "(" + GetStringByStrRef(128) + ")"; // Skin Color
- SetHeader(sText);
- int nCategory = GetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- AddColourChoices(nStage, nCategory);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_SKIN_COLOUR_CHECK: {
- sText = "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_HAIR_COLOUR: {
- sText = "Pick a colour category ";
- sText += "(" + GetStringByStrRef(125) + ")"; // Hair Color
- SetHeader(sText);
- AddChoice("Keep current hair colour", -1);
- AddChoice("Chestnuts and Reds", 1);
- AddChoice("Blondes and Browns", 2);
- AddChoice("White, Greys and Black", 3);
- AddChoice("Blues", 4);
- AddChoice("Greens", 5);
- AddChoice("Spring Greens and Yellows", 6);
- AddChoice("Oranges and Pinks", 7);
- // new colours
- AddChoice("Metallic & pure white and black", 8);
- AddChoice("Smoky Group 1", 9);
- AddChoice("Smoky Group 2", 10);
- AddChoice("Smoky Group 3", 11);
- AddChoice("Smoky Group 4", 12);
- AddChoice("Black Cherry & Cinnamon", 13);
- AddChoice("Hunter Green & Druid Green", 14);
- AddChoice("Graveyard Fog & Chestnut", 15);
- AddChoice("Clay & Toasted Ash", 16);
- AddChoice("Snail Brown & Cobalt Blue", 17);
- AddChoice("Midnight Blue & Peacock Green", 18);
- AddChoice("Royal Purple, Mountain Blue, & Sea Foam Green", 19);
- AddChoice("Spring Green, Honey Gold, Copper Coin & Berry Ice", 20);
- AddChoice("Sugar Plum, Ice Blue, Black, & White", 21);
- AddChoice("Greens, Mystics, & Browns", 22);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_HAIR_COLOUR_CHOICE: {
- sText = "Pick a colour ";
- sText += "(" + GetStringByStrRef(125) + ")"; // Hair Color
- SetHeader(sText);
- int nCategory = GetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- AddColourChoices(nStage, nCategory);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_HAIR_COLOUR_CHECK: {
- sText = "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_TATTOO1_COLOUR: {
- sText = "Pick a colour category ";
- sText += "(" + GetStringByStrRef(337) + ")"; // Tattoo Colors
- SetHeader(sText);
- AddChoice("Keep current tattoo 1 colour", -1);
- AddChoice("Tan/Brown & Tan/Red", 1);
- AddChoice("Tan/Yellow & Tan/Grey", 2);
- AddChoice("Olive, White, Grey & Charcoal", 3);
- AddChoice("Blue, Aqua, Teal & Green", 4);
- AddChoice("Yellow, Orange, Red & Pink", 5);
- AddChoice("Purple, Violet & Shiny/Metallic group 1", 6);
- AddChoice("Shiny/Metallic group 2", 7);
- // new colours
- AddChoice("Metallic & pure white and black", 8);
- AddChoice("Smoky Group 1", 9);
- AddChoice("Smoky Group 2", 10);
- AddChoice("Smoky Group 3", 11);
- AddChoice("Smoky Group 4", 12);
- AddChoice("Black Cherry & Cinnamon", 13);
- AddChoice("Hunter Green & Druid Green", 14);
- AddChoice("Graveyard Fog & Chestnut", 15);
- AddChoice("Clay & Toasted Ash", 16);
- AddChoice("Snail Brown & Cobalt Blue", 17);
- AddChoice("Midnight Blue & Peacock Green", 18);
- AddChoice("Royal Purple, Mountain Blue, & Sea Foam Green", 19);
- AddChoice("Spring Green, Honey Gold, Copper Coin & Berry Ice", 20);
- AddChoice("Sugar Plum, Ice Blue, Black, & White", 21);
- AddChoice("Greens, Mystics, & Browns", 22);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_TATTOO1_COLOUR_CHOICE: {
- sText = "Pick a colour ";
- sText += "(" + GetStringByStrRef(337) + ")"; // Tattoo Colors
- SetHeader(sText);
- int nCategory = GetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- AddColourChoices(nStage, nCategory);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_TATTOO1_COLOUR_CHECK: {
- sText = "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case STAGE_TATTOO2_COLOUR: {
- sText = "Pick a colour category ";
- sText += "(" + GetStringByStrRef(337) + ")"; // Tattoo Colors
- SetHeader(sText);
- AddChoice("Keep current tattoo 2 colour", -1);
- AddChoice("Tan/Brown & Tan/Red", 1);
- AddChoice("Tan/Yellow & Tan/Grey", 2);
- AddChoice("Olive, White, Grey & Charcoal", 3);
- AddChoice("Blue, Aqua, Teal & Green", 4);
- AddChoice("Yellow, Orange, Red & Pink", 5);
- AddChoice("Purple, Violet & Shiny/Metallic group 1", 6);
- AddChoice("Shiny/Metallic group 2", 7);
- // new colours
- AddChoice("Metallic & pure white and black", 8);
- AddChoice("Smoky Group 1", 9);
- AddChoice("Smoky Group 2", 10);
- AddChoice("Smoky Group 3", 11);
- AddChoice("Smoky Group 4", 12);
- AddChoice("Black Cherry & Cinnamon", 13);
- AddChoice("Hunter Green & Druid Green", 14);
- AddChoice("Graveyard Fog & Chestnut", 15);
- AddChoice("Clay & Toasted Ash", 16);
- AddChoice("Snail Brown & Cobalt Blue", 17);
- AddChoice("Midnight Blue & Peacock Green", 18);
- AddChoice("Royal Purple, Mountain Blue, & Sea Foam Green", 19);
- AddChoice("Spring Green, Honey Gold, Copper Coin & Berry Ice", 20);
- AddChoice("Sugar Plum, Ice Blue, Black, & White", 21);
- AddChoice("Greens, Mystics, & Browns", 22);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_TATTOO2_COLOUR_CHOICE: {
- sText = "Pick a colour ";
- sText += "(" + GetStringByStrRef(337) + ")"; // Tattoo Colors
- SetHeader(sText);
- int nCategory = GetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- AddColourChoices(nStage, nCategory);
- MarkStageSetUp(nStage);
- SetDefaultTokens();
- break;
- }
- case STAGE_TATTOO2_COLOUR_CHECK: {
- sText = "\n"+GetStringByStrRef(16824210); // Is this correct?
- SetHeader(sText);
- // choices Y/N
- AddChoice(GetStringByStrRef(4753), -1); // no
- AddChoice(GetStringByStrRef(4752), 1); // yes
- MarkStageSetUp(nStage);
- break;
- }
- case FINAL_STAGE: {
- sText = "Your character will now be generated. As part of this process, you will be booted. Please exit NWN completely before rejoining.";
- SetHeader(sText);
- AddChoice("Make Character", 1);
- MarkStageSetUp(nStage);
- // give the PC the woodsman outfit so they don't have to be naked
- CreateItemOnObject("NW_CLOTH001", OBJECT_SELF);
- break;
- }
- default:
- DoDebug("ccc_inc_convo: DoHeaderAndChoices(): Unknown nStage value: " + IntToString(nStage));
- }
- }
- int HandleChoice(int nStage, int nChoice)
- {
- switch(nStage)
- {
- case STAGE_INTRODUCTION:
- nStage++;
- break;
- case STAGE_GENDER:
- SetLocalInt(OBJECT_SELF, "Gender", nChoice);
- nStage++;
- break;
- case STAGE_GENDER_CHECK: {
- if(nChoice == 1)
- nStage++;
- else // go back to pick gender
- {
- nStage = STAGE_GENDER;
- MarkStageNotSetUp(STAGE_GENDER_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_GENDER, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Gender");
- }
- break;
- }
- case STAGE_RACE:
- SetLocalInt(OBJECT_SELF, "Race", nChoice);
- nStage++;
- break;
- case STAGE_RACE_CHECK: {
- if(nChoice == 1)
- {
- nStage++;
- DoCutscene(OBJECT_SELF);
- // store racial feat variables
- AddRaceFeats(GetLocalInt(OBJECT_SELF, "Race"));
- }
- else // go back and pick race
- {
- nStage = STAGE_RACE;
- MarkStageNotSetUp(STAGE_RACE_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_RACE, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Race");
- }
- break;
- }
- case STAGE_CLASS:
- SetLocalInt(OBJECT_SELF, "Class", nChoice);
- nStage++;
- break;
- case STAGE_CLASS_CHECK: {
- if(nChoice == 1)
- {
- nStage++;
- // add class feats
- AddClassFeats(GetLocalInt(OBJECT_SELF, "Class"));
- // now for hitpoints (without con alteration)
- SetLocalInt(OBJECT_SELF, "HitPoints",
- StringToInt(Get2DACache("classes", "HitDie",
- GetLocalInt(OBJECT_SELF, "Class"))));
- }
- else // go back and pick class
- {
- nStage = STAGE_CLASS;
- MarkStageNotSetUp(STAGE_CLASS_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_CLASS, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Class");
- }
- break;
- }
- case STAGE_ALIGNMENT: {
- // for stage check later
- SetLocalInt(OBJECT_SELF, "AlignChoice", nChoice);
- switch(nChoice)
- {
- case 112: //lawful good
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 85);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 85);
- break;
- case 115: //neutral good
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 50);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 85);
- break;
- case 118: //chaotic good
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 15);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 85);
- break;
- case 113: //lawful neutral
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 85);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 50);
- break;
- case 116: //true neutral
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 50);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 50);
- break;
- case 119: //chaotic neutral
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 15);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 50);
- break;
- case 114: //lawful evil
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 85);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 15);
- break;
- case 117: //neutral evil
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 50);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 15);
- break;
- case 120: //chaotic evil
- SetLocalInt(OBJECT_SELF, "LawfulChaotic", 15);
- SetLocalInt(OBJECT_SELF, "GoodEvil", 15);
- break;
- default:
- DoDebug("Duh, that clearly didn't work right");
- }
- nStage++;
- break;
- }
- case STAGE_ALIGNMENT_CHECK: {
- if(nChoice == 1)
- {
- nStage++;
- }
- else // go back and pick alignment
- {
- nStage = STAGE_ALIGNMENT;
- MarkStageNotSetUp(STAGE_ALIGNMENT_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_ALIGNMENT, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "AlignChoice");
- DeleteLocalInt(OBJECT_SELF, "LawfulChaotic");
- DeleteLocalInt(OBJECT_SELF, "GoodEvil");
- }
- break;
- }
- case STAGE_ABILITY: {
- int nAbilityScore;
- switch(nChoice)
- {
- case ABILITY_STRENGTH:
- nAbilityScore = IncreaseAbilityScore(GetLocalInt(OBJECT_SELF, "Str"));
- SetLocalInt(OBJECT_SELF, "Str", nAbilityScore);
- break;
- case ABILITY_DEXTERITY:
- nAbilityScore = IncreaseAbilityScore(GetLocalInt(OBJECT_SELF, "Dex"));
- SetLocalInt(OBJECT_SELF, "Dex", nAbilityScore);
- break;
- case ABILITY_CONSTITUTION:
- nAbilityScore = IncreaseAbilityScore(GetLocalInt(OBJECT_SELF, "Con"));
- SetLocalInt(OBJECT_SELF, "Con", nAbilityScore);
- break;
- case ABILITY_INTELLIGENCE:
- nAbilityScore = IncreaseAbilityScore(GetLocalInt(OBJECT_SELF, "Int"));
- SetLocalInt(OBJECT_SELF, "Int", nAbilityScore);
- break;
- case ABILITY_WISDOM:
- nAbilityScore = IncreaseAbilityScore(GetLocalInt(OBJECT_SELF, "Wis"));
- SetLocalInt(OBJECT_SELF, "Wis", nAbilityScore);
- break;
- case ABILITY_CHARISMA:
- nAbilityScore = IncreaseAbilityScore(GetLocalInt(OBJECT_SELF, "Cha"));
- SetLocalInt(OBJECT_SELF, "Cha", nAbilityScore);
- break;
- }
- int nPoints = GetLocalInt(OBJECT_SELF, "Points"); // new total
- if (nPoints) // if there's still points to allocate
- {
- // resets the stage so that the convo choices reflect the new ability scores
- ClearCurrentStage();
- }
- else
- nStage++; // go to next stage
- break;
- }
- case STAGE_ABILITY_CHECK:{
- if(nChoice == 1)
- {
- nStage++;
- }
- else // go back and reselect ability score
- {
- nStage = STAGE_ABILITY;
- MarkStageNotSetUp(STAGE_ABILITY_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_ABILITY, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Str");
- DeleteLocalInt(OBJECT_SELF, "Dex");
- DeleteLocalInt(OBJECT_SELF, "Con");
- DeleteLocalInt(OBJECT_SELF, "Int");
- DeleteLocalInt(OBJECT_SELF, "Wis");
- DeleteLocalInt(OBJECT_SELF, "Cha");
- }
- break;
- }
- case STAGE_SKILL: {
- // first time through, create the skills array
- if(!array_exists(OBJECT_SELF, "Skills"))
- array_create(OBJECT_SELF, "Skills");
- // get current points
- int nPoints = GetLocalInt(OBJECT_SELF, "Points");
- if(GetChoice(OBJECT_SELF) == -2) // save all remaining points
- {
- SetLocalInt(OBJECT_SELF, "SavedSkillPoints", nPoints);
- nPoints = 0;
- }
- else // chosen a skill to increase
- {
- // get the cls_skill_*** 2da to use
- string sFile = Get2DACache("classes", "SkillsTable", GetLocalInt(OBJECT_SELF, "Class"));
- // work out what line in skills.2da it corresponds to
- int nSkillIndex = StringToInt(Get2DAString(sFile, "SkillIndex", nChoice));
- //increase the points in that skill
- // the array index is the line number in skills.2da
- array_set_int(OBJECT_SELF, "Skills", nSkillIndex,
- array_get_int(OBJECT_SELF, "Skills", nSkillIndex)+1);
- //decrease points remaining
- // see if it's class or cross-class
- int nClassSkill = StringToInt(Get2DAString(sFile, "ClassSkill", nChoice));
- if (nClassSkill) // class skill
- nPoints -= 1;
- else // cross class skill
- nPoints -= 2;
- }
- // store new points total
- SetLocalInt(OBJECT_SELF, "Points", nPoints);
- if (nPoints) // still some left to allocate
- {
- // Store offset so that if the user decides not to take the power,
- // we can return to the same page in the power list instead of resetting to the beginning
- // Store the value +1 in order to be able to differentiate between offset 0 and undefined
- SetLocalInt(OBJECT_SELF, "SkillListChoiceOffset", GetLocalInt(OBJECT_SELF, DYNCONV_CHOICEOFFSET) + 1);
- ClearCurrentStage();
- }
- else
- nStage++;
- break;
- }
- case STAGE_SKILL_CHECK: {
- if (nChoice == 1)
- nStage++;
- else
- {
- nStage = STAGE_SKILL;
- MarkStageNotSetUp(STAGE_SKILL_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_SKILL, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "SavedSkillPoints");
- DeleteLocalInt(OBJECT_SELF, "Points");
- array_delete(OBJECT_SELF, "Skills");
- }
- break;
- }
- case STAGE_FEAT: {
- int nArraySize = array_get_size(OBJECT_SELF, "Feats");
- // alertness fix
- if (nChoice == 0)
- nChoice = -1;
- // add the feat chosen to the feat array
- array_set_int(OBJECT_SELF, "Feats", array_get_size(OBJECT_SELF, "Feats"), nChoice);
- nStage++;
- break;
- }
- case STAGE_FEAT_CHECK: {
- if (nChoice == 1)
- {
- // delete the stored convo choice list
- ClearCachedChoices();
- // decrement the number of feats left to pick
- int nFeatsRemaining = GetLocalInt(OBJECT_SELF, "Points");
- --nFeatsRemaining;
- // check new number of feats left
- if (nFeatsRemaining == 0)
- {
- // no more feats left to pick
- // if there's a bonus feat to pick, go to next stage
- nFeatsRemaining = StringToInt(Get2DACache(Get2DACache("Classes", "BonusFeatsTable",
- GetLocalInt(OBJECT_SELF, "Class")), "Bonus", 0));
- if (nFeatsRemaining)
- {
- // go to bonus feat stage
- nStage = STAGE_BONUS_FEAT;
- }
- else
- {
- // go to next stage after that the PC qualifies for
- nStage = GetNextCCCStage(nStage);
- }
- }
- else
- {
- // go back to feat stage to pick next feat
- nStage = STAGE_FEAT;
- MarkStageNotSetUp(STAGE_FEAT_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_FEAT, OBJECT_SELF);
- }
- SetLocalInt(OBJECT_SELF, "Points", nFeatsRemaining);
- }
- else
- {
- nStage = STAGE_FEAT;
- MarkStageNotSetUp(STAGE_FEAT_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_FEAT, OBJECT_SELF);
- // delete the chosen feat
- if(array_shrink(OBJECT_SELF, "Feats", (array_get_size(OBJECT_SELF, "Feats") - 1)) != SDL_SUCCESS)
- DoDebug("No feats array!");
- }
- break;
- }
- case STAGE_BONUS_FEAT: {
- int nArraySize = array_get_size(OBJECT_SELF, "Feats");
- // alertness fix
- if (nChoice == 0)
- nChoice = -1;
- // add the feat chosen to the feat array
- array_set_int(OBJECT_SELF, "Feats", array_get_size(OBJECT_SELF, "Feats"), nChoice);
- nStage++;
- break;
- }
- case STAGE_BONUS_FEAT_CHECK: {
- if (nChoice == 1)
- {
- // delete the stored convo choice list
- ClearCachedChoices();
- // decrement the number of feats left to pick
- int nFeatsRemaining = GetLocalInt(OBJECT_SELF, "Points");
- --nFeatsRemaining;
- // check new number of feats left
- if (nFeatsRemaining == 0)
- {
- // no more feats left to pick
- // tidy up locals
- DeleteLocalInt(OBJECT_SELF, "bHasAnimalEmpathy");
- DeleteLocalInt(OBJECT_SELF, "bHasUMD");
- // go to next stage after that the PC qualifies for
- nStage = GetNextCCCStage(nStage);
- }
- else
- {
- // go back to feat stage to pick next feat
- nStage = STAGE_BONUS_FEAT;
- MarkStageNotSetUp(STAGE_BONUS_FEAT_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_BONUS_FEAT, OBJECT_SELF);
- }
- SetLocalInt(OBJECT_SELF, "Points", nFeatsRemaining);
- }
- else
- {
- nStage = STAGE_BONUS_FEAT;
- MarkStageNotSetUp(STAGE_BONUS_FEAT_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_BONUS_FEAT, OBJECT_SELF);
- // delete the chosen feat
- if(array_shrink(OBJECT_SELF, "Feats", (array_get_size(OBJECT_SELF, "Feats") - 1)) != SDL_SUCCESS)
- DoDebug("No feats array!");
- }
- break;
- }
- case STAGE_WIZ_SCHOOL: {
- SetLocalInt(OBJECT_SELF, "School", GetChoice());
- nStage++;
- break;
- }
- case STAGE_WIZ_SCHOOL_CHECK: {
- if(nChoice == 1)
- {
- // go to next stage after that the PC qualifies for
- nStage = GetNextCCCStage(nStage);
- // add cantrips - wizards know all of them so don't need to choose
- SetWizCantrips(GetLocalInt(OBJECT_SELF, "School"));
- }
- else // go back and pick the school again
- {
- nStage = STAGE_WIZ_SCHOOL;
- MarkStageNotSetUp(STAGE_WIZ_SCHOOL_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_WIZ_SCHOOL, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "School");
- }
- break;
- }
- case STAGE_SPELLS_0: {
- // create the array first time through
- if (!array_exists(OBJECT_SELF, "SpellLvl0"))
- array_create(OBJECT_SELF, "SpellLvl0");
- int nPoints = GetLocalInt(OBJECT_SELF, "Points");
- // add the choice to the spells known array
- array_set_int(OBJECT_SELF, "SpellLvl0", array_get_size(OBJECT_SELF, "SpellLvl0"), nChoice);
- // decrement the number of spells left to select
- SetLocalInt(OBJECT_SELF, "Points", --nPoints);
- if (nPoints) // still some left to allocate
- ClearCurrentStage();
- else // go to next stage after that the PC qualifies for
- nStage = GetNextCCCStage(nStage);
- break;
- }
- case STAGE_SPELLS_1: {
- // create the array first time through
- if (!array_exists(OBJECT_SELF, "SpellLvl1"))
- array_create(OBJECT_SELF, "SpellLvl1");
- int nPoints = GetLocalInt(OBJECT_SELF, "Points");
- // add the choice to the spells known array
- array_set_int(OBJECT_SELF, "SpellLvl1", array_get_size(OBJECT_SELF, "SpellLvl1"), nChoice);
- // decrement the number of spells left to select
- SetLocalInt(OBJECT_SELF, "Points", --nPoints);
- if (nPoints) // still some left to allocate
- ClearCurrentStage();
- else // go to next stage after that the PC qualifies for
- nStage = GetNextCCCStage(nStage);
- break;
- }
- case STAGE_SPELLS_CHECK: {
- if(nChoice == 1)
- {
- // go to next stage after that the PC qualifies for
- nStage = GetNextCCCStage(nStage);
- int nClass = GetLocalInt(OBJECT_SELF, "Class");
- // get the cls_spgn_***2da to use
- string sSpgn = Get2DACache("classes", "SpellGainTable", nClass);
- int nSpellsPerDay;
- // level 1 spells
- if (array_exists(OBJECT_SELF, "SpellLvl1"))
- {
- nSpellsPerDay = StringToInt(Get2DACache(sSpgn, "SpellLevel1", 0));
- SetLocalInt(OBJECT_SELF, "SpellsPerDay1", nSpellsPerDay);
- }
- // cantrips
- if (array_exists(OBJECT_SELF, "SpellLvl0"))
- {
- nSpellsPerDay = StringToInt(Get2DACache(sSpgn, "SpellLevel0", 0));
- SetLocalInt(OBJECT_SELF, "SpellsPerDay0", nSpellsPerDay);
- }
- }
- else // go back and pick the spells again
- {
- // hacky...but returns the right stage, depending on the class
- nStage = GetNextCCCStage(STAGE_WIZ_SCHOOL_CHECK);
- MarkStageNotSetUp(STAGE_SPELLS_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_SPELLS_1, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_SPELLS_0, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Points");
- array_delete(OBJECT_SELF, "SpellLvl1");
- if(nStage == STAGE_SPELLS_0)
- {
- // if the new value of nStage takes us back to picking cantrips,
- // then also delete the level 0 array
- array_delete(OBJECT_SELF, "SpellLvl0");
- }
- }
- break;
- }
- case STAGE_FAMILIAR: {
- if(GetLocalInt(OBJECT_SELF, "Class") == CLASS_TYPE_DRUID)
- SetLocalInt(OBJECT_SELF, "Companion", nChoice);
- else // sorc or wiz
- SetLocalInt(OBJECT_SELF, "Familiar", nChoice);
- nStage++;
- break;
- }
- case STAGE_FAMILIAR_CHECK: {
- if (nChoice == 1)
- nStage = GetNextCCCStage(nStage);
- else
- {
- nStage = STAGE_FAMILIAR;
- MarkStageNotSetUp(STAGE_FAMILIAR_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_FAMILIAR, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Familiar");
- DeleteLocalInt(OBJECT_SELF, "Companion");
- }
- break;
- }
- case STAGE_DOMAIN: {
- // if this is the first domain chosen
- if (GetLocalInt(OBJECT_SELF, "Domain1") == 0)
- {
- // fix for air domain being 0
- if (nChoice == 0)
- nChoice = -1;
- SetLocalInt(OBJECT_SELF, "Domain1", nChoice);
- nStage = STAGE_DOMAIN_CHECK1;
- }
- else // second domain
- {
- // fix for air domain being 0
- if (nChoice == 0)
- nChoice = -1;
- SetLocalInt(OBJECT_SELF, "Domain2", nChoice);
- nStage = STAGE_DOMAIN_CHECK2;
- }
- break;
- }
- case STAGE_DOMAIN_CHECK1: {
- if (nChoice == 1)
- {
- nStage = STAGE_DOMAIN;
- MarkStageNotSetUp(STAGE_DOMAIN_CHECK1);
- MarkStageNotSetUp(STAGE_DOMAIN);
- }
- else
- {
- nStage = STAGE_DOMAIN;
- MarkStageNotSetUp(STAGE_DOMAIN_CHECK1);
- MarkStageNotSetUp(STAGE_DOMAIN);
- DeleteLocalInt(OBJECT_SELF,"Domain1");
- DeleteLocalInt(OBJECT_SELF,"Domain2");
- }
- break;
- }
- case STAGE_DOMAIN_CHECK2: {
- if (nChoice == 1)
- {
- nStage++;
- // add domain feats
- AddDomainFeats();
- }
- else
- {
- nStage = STAGE_DOMAIN;
- MarkStageNotSetUp(STAGE_DOMAIN_CHECK2);
- MarkStageNotSetUp(STAGE_DOMAIN);
- DeleteLocalInt(OBJECT_SELF,"Domain1");
- DeleteLocalInt(OBJECT_SELF,"Domain2");
- }
- break;
- }
- case STAGE_APPEARANCE: {
- if (nChoice == -1) // no change
- {
- SetLocalInt(OBJECT_SELF, "Appearance", GetAppearanceType(OBJECT_SELF));
- nStage = STAGE_PORTRAIT;
- }
- else
- {
- SetLocalInt(OBJECT_SELF, "Appearance", nChoice);
- SetCreatureAppearanceType(OBJECT_SELF, nChoice);
- // change the appearance
- DoCutscene(OBJECT_SELF);
- nStage++;
- }
- break;
- }
- case STAGE_APPEARANCE_CHECK: {
- if (nChoice == 1)
- {
- nStage++;
- }
- else
- {
- nStage = STAGE_APPEARANCE;
- MarkStageNotSetUp(STAGE_APPEARANCE_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_APPEARANCE, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Appearance");
- }
- break;
- }
- case STAGE_PORTRAIT: {
- if (nChoice == -1) // no change
- {
- nStage = STAGE_SOUNDSET;
- }
- else
- {
- // change the portrait
- SetPortraitId(OBJECT_SELF, nChoice);
- // change the clone's portrait
- object oClone = GetLocalObject(OBJECT_SELF, "Clone");
- SetPortraitId(oClone, nChoice);
- nStage++;
- }
- break;
- }
- case STAGE_PORTRAIT_CHECK: {
- if (nChoice == 2)
- {
- object oClone = GetLocalObject(OBJECT_SELF, "Clone");
- ActionExamine(oClone);
- // DelayCommand(1.0, ActionExamine(oClone));
- // DelayCommand(2.0, ActionExamine(oClone));
- }
- else if (nChoice == 1)
- {
- nStage++;
- }
- else
- {
- nStage = STAGE_PORTRAIT;
- MarkStageNotSetUp(STAGE_PORTRAIT_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_PORTRAIT, OBJECT_SELF);
- }
- break;
- }
- case STAGE_SOUNDSET: {
- if (nChoice == -1) // no change
- {
- SetLocalInt(OBJECT_SELF, "Soundset", nChoice);
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- // store the choice
- SetLocalInt(OBJECT_SELF, "Soundset", nChoice);
- // modify the clone
- DoCutscene(OBJECT_SELF);
- nStage++;
- }
- break;
- }
- case STAGE_SOUNDSET_CHECK: {
- if (nChoice == 2)
- {
- object oClone = GetLocalObject(OBJECT_SELF, "Clone");
- PlayVoiceChat(0 , oClone);
- }
- else if (nChoice == 1)
- {
- // set up colour defaults here to make sure they don't reset for non-player type appearances
- SetLocalInt(OBJECT_SELF, "Skin", -1);
- SetLocalInt(OBJECT_SELF, "Hair", -1);
- SetLocalInt(OBJECT_SELF, "TattooColour1", -1);
- SetLocalInt(OBJECT_SELF, "TattooColour2", -1);
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- nStage = STAGE_SOUNDSET;
- MarkStageNotSetUp(STAGE_SOUNDSET_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_SOUNDSET, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Soundset");
- }
- break;
- }
- case STAGE_HEAD: {
- if (nChoice == -1) // no change
- {
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- // change the head
- SetCreatureBodyPart(CREATURE_PART_HEAD, nChoice);
- // modify the clone's head
- object oClone = GetLocalObject(OBJECT_SELF, "Clone");
- SetCreatureBodyPart(CREATURE_PART_HEAD, nChoice, oClone);
- nStage++;
- }
- break;
- }
- case STAGE_HEAD_CHECK: {
- if (nChoice == 1)
- {
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- nStage = STAGE_HEAD;
- MarkStageNotSetUp(STAGE_HEAD_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_HEAD, OBJECT_SELF);
- }
- break;
- }
- case STAGE_TATTOO: {
- if (nChoice == -1) // no change
- {
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- int nTattooed = GetCreatureBodyPart(nChoice, OBJECT_SELF);
- if(nTattooed == 1)
- nTattooed = 2;
- else if(nTattooed == 2)
- nTattooed = 1;
- // change the tattoo on the clone
- SetCreatureBodyPart(nChoice, nTattooed,
- GetLocalObject(OBJECT_SELF, "Clone"));
- // change the tattoo on the PC
- SetCreatureBodyPart(nChoice, nTattooed);
- }
- break;
- }
- case STAGE_TATTOO_CHECK: {
- if (nChoice == 1)
- {
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- nStage = STAGE_TATTOO;
- MarkStageNotSetUp(STAGE_TATTOO_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_TATTOO, OBJECT_SELF);
- }
- break;
- }
- case STAGE_WINGS: {
- SetCreatureWingType(nChoice);
- // alter the clone
- object oClone = GetLocalObject(OBJECT_SELF, "Clone");
- SetCreatureWingType(nChoice, oClone);
- nStage++;
- break;
- }
- case STAGE_WINGS_CHECK: {
- if (nChoice == 1)
- {
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- nStage = STAGE_WINGS;
- MarkStageNotSetUp(STAGE_WINGS_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_WINGS, OBJECT_SELF);
- }
- break;
- }
- case STAGE_TAIL: {
- SetCreatureTailType(nChoice);
- // alter the clone
- object oClone = GetLocalObject(OBJECT_SELF, "Clone");
- SetCreatureTailType(nChoice, oClone);
- nStage++;
- break;
- }
- case STAGE_TAIL_CHECK: {
- if (nChoice == 1)
- {
- nStage = GetNextCCCStage(nStage, FALSE);
- }
- else
- {
- nStage = STAGE_TAIL;
- MarkStageNotSetUp(STAGE_TAIL_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_TAIL, OBJECT_SELF);
- }
- break;
- }
- case STAGE_SKIN_COLOUR: {
- if (nChoice == -1) // keep existing
- {
- nStage = STAGE_SKIN_COLOUR_CHECK;
- SetLocalInt(OBJECT_SELF, "Skin", -1);
- }
- else
- {
- SetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED", nChoice);
- nStage++;
- }
- break;
- }
- case STAGE_SKIN_COLOUR_CHOICE: {
- SetLocalInt(OBJECT_SELF, "Skin", nChoice);
- // change the clone
- DoCutscene(OBJECT_SELF);
- nStage++;
- break;
- }
- case STAGE_SKIN_COLOUR_CHECK: {
- if (nChoice == 1)
- {
- nStage++;
- }
- else
- {
- nStage = STAGE_SKIN_COLOUR;
- MarkStageNotSetUp(STAGE_SKIN_COLOUR_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_SKIN_COLOUR_CHOICE, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_SKIN_COLOUR, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Skin");
- }
- DeleteLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- break;
- }
- case STAGE_HAIR_COLOUR: {
- if (nChoice == -1) // keep existing
- {
- nStage = STAGE_HAIR_COLOUR_CHECK;
- SetLocalInt(OBJECT_SELF, "Hair", -1);
- }
- else
- {
- SetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED", nChoice);
- nStage++;
- }
- break;
- }
- case STAGE_HAIR_COLOUR_CHOICE: {
- SetLocalInt(OBJECT_SELF, "Hair", nChoice);
- // change the clone
- DoCutscene(OBJECT_SELF);
- nStage++;
- break;
- }
- case STAGE_HAIR_COLOUR_CHECK: {
- if (nChoice == 1)
- {
- nStage++;
- }
- else
- {
- nStage = STAGE_HAIR_COLOUR;
- MarkStageNotSetUp(STAGE_HAIR_COLOUR_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_HAIR_COLOUR_CHOICE, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_HAIR_COLOUR, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "Hair");
- }
- DeleteLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- break;
- }
- case STAGE_TATTOO1_COLOUR: {
- if (nChoice == -1) // keep existing
- {
- nStage = STAGE_TATTOO1_COLOUR_CHECK;
- SetLocalInt(OBJECT_SELF, "TattooColour1", -1);
- }
- else
- {
- SetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED", nChoice);
- nStage++;
- }
- break;
- }
- case STAGE_TATTOO1_COLOUR_CHOICE: {
- SetLocalInt(OBJECT_SELF, "TattooColour1", nChoice);
- // change the clone
- DoCutscene(OBJECT_SELF);
- nStage++;
- break;
- }
- case STAGE_TATTOO1_COLOUR_CHECK: {
- if (nChoice == 1)
- {
- nStage++;
- }
- else
- {
- nStage = STAGE_TATTOO1_COLOUR;
- MarkStageNotSetUp(STAGE_TATTOO1_COLOUR_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_TATTOO1_COLOUR_CHOICE, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_TATTOO1_COLOUR, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "TattooColour1");
- }
- DeleteLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- break;
- }
- case STAGE_TATTOO2_COLOUR: {
- if (nChoice == -1) // keep existing
- {
- nStage = STAGE_TATTOO2_COLOUR_CHECK;
- SetLocalInt(OBJECT_SELF, "TattooColour2", -1);
- }
- else
- {
- SetLocalInt(OBJECT_SELF, "CATEGORY_SELECTED", nChoice);
- nStage++;
- }
- break;
- }
- case STAGE_TATTOO2_COLOUR_CHOICE: {
- SetLocalInt(OBJECT_SELF, "TattooColour2", nChoice);
- // change the clone
- DoCutscene(OBJECT_SELF);
- nStage++;
- break;
- }
- case STAGE_TATTOO2_COLOUR_CHECK: {
- if (nChoice == 1)
- {
- nStage = FINAL_STAGE;
- }
- else
- {
- nStage = STAGE_TATTOO2_COLOUR;
- MarkStageNotSetUp(STAGE_TATTOO2_COLOUR_CHECK, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_TATTOO2_COLOUR_CHOICE, OBJECT_SELF);
- MarkStageNotSetUp(STAGE_TATTOO2_COLOUR, OBJECT_SELF);
- DeleteLocalInt(OBJECT_SELF, "TattooColour2");
- }
- DeleteLocalInt(OBJECT_SELF, "CATEGORY_SELECTED");
- break;
- }
- case FINAL_STAGE: {
- ExecuteScript("prc_ccc_make_pc", OBJECT_SELF);
- AllowExit(DYNCONV_EXIT_FORCE_EXIT);
- break;
- }
- }
- return nStage;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement