예제 #1
0
 public void DrawString(string text, float x, float y, FontWeight fw, SharpDX.DirectWrite.FontStyle fs, SharpDX.Color fontColor, float fontHeight, bool isUnderlined)
 {
     if ((y > -2) && (y <= (int)(tbHeight * gv.screenDensity) - fontHeight))
     {
         //hurgh21
         if (gv.mod.useMinimalisticUI)
         {
             gv.DrawText(text, x + (int)(tbXloc * gv.screenDensity) + 2 * gv.pS, y, fw, fs, 1.0f, fontColor, isUnderlined);
         }
         else
         {
             gv.DrawText(text, x + (int)(tbXloc * gv.screenDensity) + gv.pS, y, fw, fs, 1.0f, fontColor, isUnderlined);
         }
     }
 }
예제 #2
0
 public void DrawString(string text, float x, float y, FontWeight fw, SharpDX.DirectWrite.FontStyle fs, SharpDX.Color fontColor, float fontHeight, bool isUnderlined)
 {
     if ((y > -2) && (y <= tbHeight - fontHeight))
     {
         gv.DrawText(text, x + tbXloc, y + tbYloc, fw, fs, 1.0f, fontColor, isUnderlined);
     }
 }
예제 #3
0
        //INVENTORY SCREEN (COMBAT and MAIN)
        public void redrawTokenSelector()
        {
            //IF CONTROLS ARE NULL, CREATE THEM
            if (btnAction == null)
            {
                setControlsStart();
            }

            int pW = (int)((float)gv.screenWidth / 100.0f);
            int pH = (int)((float)gv.screenHeight / 100.0f);

            int locY       = 0;
            int locX       = pW * 4;
            int textH      = (int)gv.drawFontRegHeight;
            int spacing    = textH;
            int tabX       = pW * 4;
            int tabX2      = 5 * gv.squareSize + pW * 2;
            int leftStartY = pH * 4;
            int tabStartY  = 5 * gv.squareSize + pW * 10;

            //DRAW TEXT
            locY = (pH * 2);
            gv.DrawText("Token Selection", locX + (gv.squareSize * 8), locY);

            //DRAW LEFT/RIGHT ARROWS and PAGE INDEX
            btnPageIndex.Draw();
            btnTokensLeft.Draw();
            btnTokensRight.Draw();

            //DRAW ALL INVENTORY SLOTS
            int cntSlot = 0;

            foreach (IbbButton btn in btnTokenSlot)
            {
                if (cntSlot == tknSlotIndex)
                {
                    btn.glowOn = true;
                }
                else
                {
                    btn.glowOn = false;
                }
                if ((cntSlot + (tknPageIndex * slotsPerPage)) < playerTokenList.Count)
                {
                    gv.cc.DisposeOfBitmap(ref btn.Img2);
                    btn.Img2 = gv.cc.LoadBitmap(playerTokenList[cntSlot + (tknPageIndex * slotsPerPage)]);
                }
                else
                {
                    btn.Img2 = null;
                }
                btn.Draw();
                cntSlot++;
            }

            btnAction.Draw();
            btnExit.Draw();
        }
예제 #4
0
        //TITLE SCREEN
        public void redrawTitle()
        {
            //DRAW TITLE SCREEN
            float dstHeight = ((float)gv.screenWidth / (float)gv.cc.title.PixelSize.Width) * (float)gv.cc.title.PixelSize.Height;
            //do narration with image setup
            IbRect src = new IbRect(0, 0, gv.cc.title.PixelSize.Width, gv.cc.title.PixelSize.Height);
            IbRect dst = new IbRect(0, 0, gv.screenWidth, (int)dstHeight);

            gv.DrawBitmap(gv.cc.title, src, dst);

            //Draw This gv.module's Version Number
            int xLoc = (gv.screenWidth / 2) - 4;
            int pH   = (int)((float)gv.screenHeight / 100.0f);

            gv.DrawText("v" + gv.mod.moduleVersion, xLoc, (8 * gv.squareSize) + (pH * 4));

            drawTitleControls();
        }
예제 #5
0
        //CAST SELECTOR SCREEN (COMBAT and MAIN)
        public void redrawCastSelector(bool inCombat)
        {
            Player pc = getCastingPlayer();

            isInCombat = inCombat;
            //IF CONTROLS ARE NULL, CREATE THEM
            if (btnSelect == null)
            {
                setControlsStart();
            }
            btnSelect.Text = pc.playerClass.labelForCastAction.ToUpper() + " SELECTED " + gv.mod.getPlayerClass(getCastingPlayer().classTag).spellLabelSingular.ToUpper();
            int pW = (int)((float)gv.screenWidth / 100.0f);
            int pH = (int)((float)gv.screenHeight / 100.0f);

            int locY = 0;
            int locX = pW * 4;
            //int textH = (int)gv.cc.MeasureString("GetHeight", gv.drawFontReg, gv.Width).Height;
            int textH   = (int)gv.drawFontRegHeight;
            int spacing = textH;
            //int spacing = (int)gv.mSheetTextPaint.getTextSize() + pH;
            int tabX       = pW * 4;
            int noticeX    = pW * 5;
            int noticeY    = pH * 3 + spacing;
            int leftStartY = pH * 3;
            int tabStartY  = 4 * gv.squareSize + pW * 10;

            //DRAW TEXT
            locY = (gv.squareSize * 0) + (pH * 2);
            //gv.mSheetTextPaint.setColor(Color.LTGRAY);
            gv.DrawText("Select a " + gv.mod.getPlayerClass(pc.classTag).spellLabelSingular + " to " + gv.mod.getPlayerClass(pc.classTag).labelForCastAction, noticeX, pH * 3);
            //gv.DrawText("Select a " + gv.mod.getPlayerClass(pc.classTag).spellLabelSingular + " to Cast", noticeX, pH * 3, "wh");
            //gv.mSheetTextPaint.setColor(Color.YELLOW);
            gv.DrawText(getCastingPlayer().name + " SP: " + getCastingPlayer().sp + "/" + getCastingPlayer().spMax, pW * 55, leftStartY);
            gv.DrawText(getCastingPlayer().name + "  HP: " + getCastingPlayer().hp + "/" + getCastingPlayer().hpMax, pW * 55, leftStartY + (int)(gv.squareSize / 3));

            //DRAW NOTIFICATIONS
            //here insert
            sortTraitsForLevelUp(pc);

            if (isSelectedSpellSlotInKnownSpellsRange())
            {
                Spell sp = GetCurrentlySelectedSpell();
                //Player pc = getCastingPlayer();

                bool swiftBlocked = false;
                if (sp.isSwiftAction && gv.mod.swiftActionHasBeenUsedThisTurn)
                {
                    swiftBlocked = true;
                }

                bool coolBlocked  = false;
                int  coolDownTime = 0;
                for (int i = 0; i < pc.coolingSpellsByTag.Count; i++)
                {
                    if (pc.coolingSpellsByTag[i] == sp.tag)
                    {
                        coolBlocked  = true;
                        coolDownTime = pc.coolDownTimes[i];
                        if (coolDownTime < sp.coolDownTime)
                        {
                            coolDownTime++;
                        }
                    }
                }

                if (coolBlocked)
                {
                    gv.DrawText("This is still cooling down for " + coolDownTime + " turn(s).", noticeX, noticeY, 1.0f, Color.Red);
                }
                else if (swiftBlocked)
                {
                    gv.DrawText("Swift action already used this turn.", noticeX, noticeY, 1.0f, Color.Red);
                }
                else if ((pc.sp >= sp.costSP) && ((pc.hp - 1) >= sp.costHP) && !gv.mod.nonRepeatableFreeActionsUsedThisTurnBySpellTag.Contains(sp.tag))
                {
                    //gv.mSheetTextPaint.setColor(Color.GREEN);
                    gv.DrawText("Available", noticeX, noticeY, 1.0f, Color.Lime);
                }
                else if (!gv.mod.nonRepeatableFreeActionsUsedThisTurnBySpellTag.Contains(sp.tag)) //if known but not enough spell points, "Insufficient SP to Cast" in yellow
                {
                    //gv.mSheetTextPaint.setColor(Color.YELLOW);
                    gv.DrawText("Insufficient SP or HP", noticeX, noticeY, 1.0f, Color.Red);
                }
                else
                {
                    gv.DrawText("This can only be used once per turn.", noticeX, noticeY, 1.0f, Color.Red);
                }
            }

            //DRAW ALL SPELL SLOTS
            int cntSlot = 0;

            foreach (IbbButton btn in btnSpellSlots)
            {
                //Player pc = getCastingPlayer();

                if (cntSlot == spellSlotIndex)
                {
                    btn.glowOn = true;
                }
                else
                {
                    btn.glowOn = false;
                }
                if (isInCombat)
                {
                    if ((cntSlot + (tknPageIndex * slotsPerPage)) < backupKnownSpellTagsInCombat.Count)
                    {
                        Spell sp = gv.mod.getSpellByTag(backupKnownSpellTagsInCombat[cntSlot + (tknPageIndex * slotsPerPage)]);
                        //TraitAllowed ta = backupTraitsAllowed[cntSlot + (tknPageIndex * slotsPerPage)];
                        gv.cc.DisposeOfBitmap(ref btn.Img2);
                        btn.Img2 = gv.cc.LoadBitmap(sp.spellImage);
                        gv.cc.DisposeOfBitmap(ref btn.Img2Off);
                        btn.Img2Off  = gv.cc.LoadBitmap(sp.spellImage + "_off");
                        btn.btnState = buttonState.Normal;
                    }
                    else
                    {
                        gv.cc.DisposeOfBitmap(ref btn.Img);
                        btn.Img      = gv.cc.LoadBitmap("btn_small_off");
                        btn.Img2     = null;
                        btn.Img2Off  = null;
                        btn.Img3     = null;
                        btn.btnState = buttonState.Off;
                    }
                }

                //outside combat
                else
                {
                    if ((cntSlot + (tknPageIndex * slotsPerPage)) < backupKnownSpellTagsOutsideCombat.Count)
                    {
                        Spell sp = gv.mod.getSpellByTag(backupKnownSpellTagsOutsideCombat[cntSlot + (tknPageIndex * slotsPerPage)]);
                        //TraitAllowed ta = backupTraitsAllowed[cntSlot + (tknPageIndex * slotsPerPage)];
                        gv.cc.DisposeOfBitmap(ref btn.Img2);
                        btn.Img2 = gv.cc.LoadBitmap(sp.spellImage);
                        gv.cc.DisposeOfBitmap(ref btn.Img2Off);
                        btn.Img2Off  = gv.cc.LoadBitmap(sp.spellImage + "_off");
                        btn.btnState = buttonState.Normal;
                    }
                    else
                    {
                        gv.cc.DisposeOfBitmap(ref btn.Img);
                        btn.Img      = gv.cc.LoadBitmap("btn_small_off");
                        btn.Img2     = null;
                        btn.Img2Off  = null;
                        btn.Img3     = null;
                        btn.btnState = buttonState.Off;
                    }
                }

                btn.Draw();
                cntSlot++;
            }

            //DRAW DESCRIPTION BOX
            locY = tabStartY;
            if (isSelectedSpellSlotInKnownSpellsRange())
            {
                Spell sp = GetCurrentlySelectedSpell();
                //string textToSpan = "<u>Description</u>" + "<BR>" + "<BR>";
                string textToSpan = "<b><i><big>" + sp.name + "</big></i></b><BR>";
                if (sp.isSwiftAction && !sp.usesTurnToActivate)
                {
                    textToSpan += "Swift action" + "<BR>";
                }
                else if (sp.onlyOncePerTurn && !sp.usesTurnToActivate)
                {
                    textToSpan += "Free action, not repeatable" + "<BR>";
                }
                else if (!sp.onlyOncePerTurn && !sp.usesTurnToActivate)
                {
                    textToSpan += "Free action, repeatable" + "<BR>";
                }
                else if (sp.castTimeInTurns > 0)
                {
                    textToSpan += "Takes " + sp.castTimeInTurns + " full turn(s)" + "<BR>";
                }

                if (sp.coolDownTime > 0)
                {
                    textToSpan += "Cool down time: " + sp.coolDownTime + " turn(s)" + "<BR>";
                }

                textToSpan += "SP Cost: " + sp.costSP + "<BR>";
                textToSpan += "HP Cost: " + sp.costHP + "<BR>";
                textToSpan += "Target Range: " + sp.range + "<BR>";
                textToSpan += "Area of Effect Radius: " + sp.aoeRadius + "<BR>";
                textToSpan += "Available at Level: " + getLevelAvailable(sp.tag) + "<BR>";
                textToSpan += "<BR>";
                textToSpan += sp.description;

                description.tbXloc   = 11 * gv.squareSize;
                description.tbYloc   = 2 * gv.squareSize;
                description.tbWidth  = pW * 40;
                description.tbHeight = pH * 80;
                description.logLinesList.Clear();
                description.AddHtmlTextToLog(textToSpan);
                description.onDrawLogBox();
            }

            btnHelp.Draw();
            btnExit.Draw();
            btnSelect.Draw();
            btnTokensLeft.Draw();
            btnTokensRight.Draw();
            btnPageIndex.Draw();
        }
예제 #6
0
        //PARTY SCREEN
        public void redrawPartyBuild()
        {
            if (partyScreenPcIndex >= gv.mod.playerList.Count)
            {
                partyScreenPcIndex = 0;
            }
            if (pcIndex >= pcList.Count)
            {
                pcIndex = 0;
            }
            Player pc = null;

            if ((gv.mod.playerList.Count > 0) && (lastClickedPlayerList))
            {
                pc = gv.mod.playerList[partyScreenPcIndex];
            }
            else if ((pcList.Count > 0) && (!lastClickedPlayerList))
            {
                pc = pcList[pcIndex];
            }
            if (pc != null)
            {
                gv.sf.UpdateStats(pc);
            }

            int pW         = (int)((float)gv.screenWidth / 100.0f);
            int pH         = (int)((float)gv.screenHeight / 100.0f);
            int padH       = gv.squareSize / 6;
            int locY       = 0;
            int locX       = 2 * gv.squareSize + gv.oXshift;
            int spacing    = (int)gv.drawFontRegHeight;
            int tabX       = pW * 50;
            int tabX2      = pW * 60;
            int leftStartY = 5 * gv.squareSize + (pH * 6);

            //Draw screen title name
            string text = "Party Members [" + gv.mod.numberOfPlayerMadePcsAllowed + " player made PC(s) allowed, " + gv.mod.numberOfPlayerMadePcsRequired + " required]";
            // Measure string.
            float stringSize = gv.cc.MeasureString(text, SharpDX.DirectWrite.FontWeight.Normal, SharpDX.DirectWrite.FontStyle.Normal, gv.drawFontRegHeight);
            int   ulX        = (gv.screenWidth / 2) - ((int)stringSize / 2);

            gv.DrawText(text, ulX, pH * 3, 1.0f, Color.White);

            //DRAW EACH PC BUTTON
            this.refreshPlayerTokens();

            int cntPCs = 0;

            foreach (IbbButton btn in btnPartyIndex)
            {
                if (cntPCs < gv.mod.playerList.Count)
                {
                    if (cntPCs == partyScreenPcIndex)
                    {
                        btn.glowOn = true;
                    }
                    else
                    {
                        btn.glowOn = false;
                    }
                    btn.Draw();
                }
                cntPCs++;
            }

            btnLeft.Draw();
            btnRight.Draw();
            btnAdd.Draw();
            btnRemove.Draw();
            btnCreate.Draw();
            btnHelp.Draw();
            btnReturn.Draw();

            if (pcList.Count > 0)
            {
                gv.cc.DisposeOfBitmap(ref btnPcListIndex.Img2);
                btnPcListIndex.Img2 = gv.cc.LoadBitmap(pcList[pcIndex].tokenFilename);
            }
            else
            {
                btnPcListIndex.Img2 = null;
            }
            btnPcListIndex.Draw();

            if (pc != null)
            {
                //DRAW LEFT STATS
                gv.DrawText("Name: " + pc.name, locX, locY += leftStartY);
                gv.DrawText(gv.mod.raceLabel + ": " + gv.mod.getRace(pc.raceTag).name, locX, locY += spacing);
                if (pc.isMale)
                {
                    gv.DrawText("Gender: Male", locX, locY += spacing);
                }
                else
                {
                    gv.DrawText("Gender: Female", locX, locY += spacing);
                }
                gv.DrawText("Class: " + gv.mod.getPlayerClass(pc.classTag).name, locX, locY += spacing);
                gv.DrawText("Level: " + pc.classLevel, locX, locY          += spacing);
                gv.DrawText("XP: " + pc.XP + "/" + pc.XPNeeded, locX, locY += spacing);
                gv.DrawText("---------------", locX, locY += spacing);

                //draw spells known list
                string allSpells = "";
                foreach (string s in pc.knownSpellsTags)
                {
                    Spell sp = gv.mod.getSpellByTag(s);
                    allSpells += sp.name + ", ";
                }
                gv.DrawText(gv.mod.getPlayerClass(pc.classTag).spellLabelPlural + ": " + allSpells, locX, locY += spacing);

                //draw traits known list
                string allTraits = "";
                foreach (string s in pc.knownTraitsTags)
                {
                    Trait tr = gv.mod.getTraitByTag(s);
                    if (tr != null)
                    {
                        allTraits += tr.name + ", ";
                    }
                }
                gv.DrawText(gv.mod.getPlayerClass(pc.classTag).traitLabelPlural + ": " + allTraits, locX, locY += spacing);

                //DRAW RIGHT STATS
                int actext = 0;
                if (gv.mod.ArmorClassAscending)
                {
                    actext = pc.AC;
                }
                else
                {
                    actext = 20 - pc.AC;
                }
                locY = 0;
                int locY2 = 0;
                if (gv.mod.useOrbitronFont == true)
                {
                    locX  = tabX - 3 * gv.squareSize;
                    locY += leftStartY;
                    //tabX2 = 0;
                    locY2 += leftStartY - spacing * 3;
                    //STR
                    gv.DrawText("STR:", locX + pW, locY);
                    gv.DrawText(pc.baseStr.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.strength - pc.baseStr >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    int racial = pc.strength - pc.baseStr;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.strength.ToString(), locX + 13 * pW, locY);
                    if (((pc.strength - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.strength - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.strength - 10) / 2) + ")", locX + 15 * pW, locY);
                    }

                    gv.DrawText("AC: " + actext, tabX2, locY2 += (spacing * 3));
                    gv.DrawText("BAB: " + pc.baseAttBonus + ", Melee to hit/damage: " + (pc.baseAttBonus + ((pc.strength - 10) / 2)) + "/" + ((pc.strength - 10) / 2) + ", Ranged to hit: " + (pc.baseAttBonus + ((pc.dexterity - 10) / 2)), tabX2, locY2 += spacing);
                    //DEX
                    gv.DrawText("DEX:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseDex.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.dexterity - pc.baseDex >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.dexterity - pc.baseDex;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.dexterity.ToString(), locX + 13 * pW, locY);
                    if (((pc.dexterity - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.dexterity - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.dexterity - 10) / 2) + ")", locX + 15 * pW, locY);
                    }

                    gv.DrawText("HP: " + pc.hp + "/" + pc.hpMax, tabX2, locY2 += spacing);
                    //CON
                    gv.DrawText("CON:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseCon.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.constitution - pc.baseCon >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.constitution - pc.baseCon;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.constitution.ToString(), locX + 13 * pW, locY);
                    if (((pc.constitution - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.constitution - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.constitution - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    gv.DrawText("SP: " + pc.sp + "/" + pc.spMax, tabX2, locY2 += spacing);
                    //INT
                    gv.DrawText("INT:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseInt.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.intelligence - pc.baseInt >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.intelligence - pc.baseInt;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.intelligence.ToString(), locX + 13 * pW, locY);
                    if (((pc.intelligence - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.intelligence - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.intelligence - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    gv.DrawText("FORT: " + pc.fortitude + ", Acid: " + pc.damageTypeResistanceTotalAcid + "%" + ", Cold: " + pc.damageTypeResistanceTotalCold + "%" + ", Normal: " + pc.damageTypeResistanceTotalNormal + "%", tabX2, locY2 += spacing);
                    gv.DrawText("REF:   " + pc.reflex + ", Electricity: " + pc.damageTypeResistanceTotalElectricity + "%" + ", Fire: " + pc.damageTypeResistanceTotalFire + "%", tabX2, locY2 += spacing);
                    gv.DrawText("WILL: " + pc.will + ", Magic: " + pc.damageTypeResistanceTotalMagic + "%" + ", Poison: " + pc.damageTypeResistanceTotalPoison + "%", tabX2, locY2            += spacing);
                    //WIS
                    gv.DrawText("WIS:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseWis.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.wisdom - pc.baseWis >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.wisdom - pc.baseWis;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.wisdom.ToString(), locX + 13 * pW, locY);
                    if (((pc.wisdom - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.wisdom - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.wisdom - 10) / 2) + ")", locX + 15 * pW, locY);
                    }

                    //CHA
                    gv.DrawText("CHA:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseCha.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.charisma - pc.baseCha >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.charisma - pc.baseCha;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.charisma.ToString(), locX + 13 * pW, locY);
                    if (((pc.charisma - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.charisma - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.charisma - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    if (gv.mod.useLuck)
                    {
                        if (((pc.luck - 10) / 2) > 0)
                        {
                            gv.DrawText("LCK:  " + pc.baseLuck + " + " + (pc.luck - pc.baseLuck) + " = " + pc.luck, locX + pW, locY += spacing);
                        }
                        else
                        {
                            gv.DrawText("LCK:  " + pc.baseLuck + " + " + (pc.luck - pc.baseLuck) + " = " + pc.luck, locX + pW, locY += spacing);
                        }
                    }

                    /*
                     * gv.DrawText("STR:   " + pc.baseStr + " + " + (pc.strength - pc.baseStr) + " = " + pc.strength + " (" + ((pc.strength - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += leftStartY);
                     * gv.DrawText("AC: " + actext, tabX2, locY2 += leftStartY);
                     * //gv.DrawText("BAB: " + pc.baseAttBonus + ", Melee to hit/damage: " + (pc.baseAttBonus + ((pc.strength - 10) / 2)) + "/" + ((pc.strength - 10) / 2) + ", Ranged to hit: " + (pc.baseAttBonus + ((pc.dexterity - 10) / 2)), tabX2, locY2 += spacing);
                     * gv.DrawText("BAB: " + pc.baseAttBonus + ", Melee to hit/damage: " + (pc.baseAttBonus + gv.sf.CalcPcMeleeAttackAttributeModifier(pc)) + "/" + (((pc.strength - 10) / 2) + gv.sf.CalcPcMeleeDamageModifier(pc)) + ", Ranged to hit: " + (pc.baseAttBonus + ((pc.dexterity - 10) / 2) + gv.sf.CalcPcRangedAttackModifier(pc)), tabX2, locY2 += spacing);
                     * gv.DrawText("DEX:  " + pc.baseDex + " + " + (pc.dexterity - pc.baseDex) + " = " + pc.dexterity + " (" + ((pc.dexterity - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("HP: " + pc.hp + "/" + pc.hpMax, tabX2, locY2 += spacing);
                     * gv.DrawText("CON: " + pc.baseCon + " + " + (pc.constitution - pc.baseCon) + " = " + pc.constitution + " (" + ((pc.constitution - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("SP: " + pc.sp + "/" + pc.spMax, tabX2, locY2 += spacing);
                     * gv.DrawText("INT:   " + pc.baseInt + " + " + (pc.intelligence - pc.baseInt) + " = " + pc.intelligence + " (" + ((pc.intelligence - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("FORT: " + pc.fortitude + ", Acid: " + pc.damageTypeResistanceTotalAcid + "%" + ", Cold: " + pc.damageTypeResistanceTotalCold + "%" + ", Normal: " + pc.damageTypeResistanceTotalNormal + "%", tabX2, locY2 += spacing);
                     * gv.DrawText("REF:   " + pc.reflex + ", Electricity: " + pc.damageTypeResistanceTotalElectricity + "%" + ", Fire: " + pc.damageTypeResistanceTotalFire + "%", tabX2, locY2 += spacing);
                     * gv.DrawText("WILL: " + pc.will + ", Magic: " + pc.damageTypeResistanceTotalMagic + "%" + ", Poison: " + pc.damageTypeResistanceTotalPoison + "%", tabX2, locY2 += spacing);
                     * gv.DrawText("WIS:  " + pc.baseWis + " + " + (pc.wisdom - pc.baseWis) + " = " + pc.wisdom + " (" + ((pc.wisdom - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("CHA: " + pc.baseCha + " + " + (pc.charisma - pc.baseCha) + " = " + pc.charisma + " (" + ((pc.charisma - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * if (gv.mod.useLuck == true)
                     * {
                     *  gv.DrawText("LCK:  " + pc.baseLuck + " + " + (pc.luck - pc.baseLuck) + " = " + pc.luck, tabX - 3 * gv.squareSize, locY += spacing);
                     * }
                     */
                }
                else
                {
                    locX  = tabX - 3 * gv.squareSize;
                    locY += leftStartY;
                    //tabX2 = 0;
                    locY2 += leftStartY - spacing * 3;
                    //STR
                    gv.DrawText("STR:", locX + pW, locY);
                    gv.DrawText(pc.baseStr.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.strength - pc.baseStr >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    int racial = pc.strength - pc.baseStr;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.strength.ToString(), locX + 13 * pW, locY);
                    if (((pc.strength - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.strength - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.strength - 10) / 2) + ")", locX + 15 * pW, locY);
                    }

                    gv.DrawText("AC: " + actext, tabX2, locY2 += (spacing * 3));
                    gv.DrawText("BAB: " + pc.baseAttBonus + ", Melee to hit/damage: " + (pc.baseAttBonus + ((pc.strength - 10) / 2)) + "/" + ((pc.strength - 10) / 2) + ", Ranged to hit: " + (pc.baseAttBonus + ((pc.dexterity - 10) / 2)), tabX2, locY2 += spacing);
                    //DEX
                    gv.DrawText("DEX:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseDex.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.dexterity - pc.baseDex >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.dexterity - pc.baseDex;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.dexterity.ToString(), locX + 13 * pW, locY);
                    if (((pc.dexterity - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.dexterity - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.dexterity - 10) / 2) + ")", locX + 15 * pW, locY);
                    }

                    gv.DrawText("HP: " + pc.hp + "/" + pc.hpMax, tabX2, locY2 += spacing);
                    //CON
                    gv.DrawText("CON:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseCon.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.constitution - pc.baseCon >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.constitution - pc.baseCon;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.constitution.ToString(), locX + 13 * pW, locY);
                    if (((pc.constitution - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.constitution - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.constitution - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    gv.DrawText("SP: " + pc.sp + "/" + pc.spMax, tabX2, locY2 += spacing);
                    //INT
                    gv.DrawText("INT:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseInt.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.intelligence - pc.baseInt >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.intelligence - pc.baseInt;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.intelligence.ToString(), locX + 13 * pW, locY);
                    if (((pc.intelligence - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.intelligence - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.intelligence - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    gv.DrawText("FORT: " + pc.fortitude + ", Acid: " + pc.damageTypeResistanceTotalAcid + "%" + ", Cold: " + pc.damageTypeResistanceTotalCold + "%" + ", Normal: " + pc.damageTypeResistanceTotalNormal + "%", tabX2, locY2 += spacing);
                    gv.DrawText("REF:   " + pc.reflex + ", Electricity: " + pc.damageTypeResistanceTotalElectricity + "%" + ", Fire: " + pc.damageTypeResistanceTotalFire + "%", tabX2, locY2 += spacing);
                    gv.DrawText("WILL: " + pc.will + ", Magic: " + pc.damageTypeResistanceTotalMagic + "%" + ", Poison: " + pc.damageTypeResistanceTotalPoison + "%", tabX2, locY2            += spacing);
                    //WIS
                    gv.DrawText("WIS:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseWis.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.wisdom - pc.baseWis >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.wisdom - pc.baseWis;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.wisdom.ToString(), locX + 13 * pW, locY);
                    if (((pc.wisdom - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.wisdom - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.wisdom - 10) / 2) + ")", locX + 15 * pW, locY);
                    }

                    //CHA
                    gv.DrawText("CHA:", locX + pW, locY += (spacing));
                    gv.DrawText(pc.baseCha.ToString(), locX + 3 * pW * 2, locY);
                    if (pc.charisma - pc.baseCha >= 0)
                    {
                        gv.DrawText(" + ", locX + 4 * pW * 2, locY);
                    }
                    else
                    {
                        gv.DrawText(" - ", locX + 4 * pW * 2, locY);
                    }
                    racial = pc.charisma - pc.baseCha;
                    if (racial < 0)
                    {
                        racial *= -1;
                    }
                    gv.DrawText(racial.ToString(), locX + 5 * pW * 2, locY);
                    gv.DrawText(" = ", locX + 11 * pW, locY);
                    gv.DrawText(pc.charisma.ToString(), locX + 13 * pW, locY);
                    if (((pc.charisma - 10) / 2) > 0)
                    {
                        gv.DrawText(" (+" + ((pc.charisma - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    else
                    {
                        gv.DrawText(" (" + ((pc.charisma - 10) / 2) + ")", locX + 15 * pW, locY);
                    }
                    if (gv.mod.useLuck)
                    {
                        if (((pc.luck - 10) / 2) > 0)
                        {
                            gv.DrawText("LCK:  " + pc.baseLuck + " + " + (pc.luck - pc.baseLuck) + " = " + pc.luck, locX + pW, locY += spacing);
                        }
                        else
                        {
                            gv.DrawText("LCK:  " + pc.baseLuck + " + " + (pc.luck - pc.baseLuck) + " = " + pc.luck, locX + pW, locY += spacing);
                        }
                    }

                    /*
                     * gv.DrawText("STR:  " + pc.baseStr + " + " + (pc.strength - pc.baseStr) + " = " + pc.strength + " (" + ((pc.strength - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += leftStartY);
                     * gv.DrawText("AC: " + actext, tabX2, locY2 += leftStartY);
                     * gv.DrawText("BAB: " + pc.baseAttBonus + ", Melee to hit/damage: " + (pc.baseAttBonus + gv.sf.CalcPcMeleeAttackAttributeModifier(pc)) + "/" + (((pc.strength - 10) / 2) + gv.sf.CalcPcMeleeDamageModifier(pc)) + ", Ranged to hit: " + (pc.baseAttBonus + ((pc.dexterity - 10) / 2) + gv.sf.CalcPcRangedAttackModifier(pc)), tabX2, locY2 += spacing);
                     * gv.DrawText("DEX:  " + pc.baseDex + " + " + (pc.dexterity - pc.baseDex) + " = " + pc.dexterity + " (" + ((pc.dexterity - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("HP: " + pc.hp + "/" + pc.hpMax, tabX2, locY2 += spacing);
                     * gv.DrawText("CON:  " + pc.baseCon + " + " + (pc.constitution - pc.baseCon) + " = " + pc.constitution + " (" + ((pc.constitution - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("SP: " + pc.sp + "/" + pc.spMax, tabX2, locY2 += spacing);
                     * gv.DrawText("INT:   " + pc.baseInt + " + " + (pc.intelligence - pc.baseInt) + " = " + pc.intelligence + " (" + ((pc.intelligence - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("FORT: " + pc.fortitude + ", Acid: " + pc.damageTypeResistanceTotalAcid + "%" + ", Cold: " + pc.damageTypeResistanceTotalCold + "%" + ", Normal: " + pc.damageTypeResistanceTotalNormal + "%", tabX2, locY2 += spacing);
                     * gv.DrawText("REF:   " + pc.reflex + ", Electricity: " + pc.damageTypeResistanceTotalElectricity + "%" + ", Fire: " + pc.damageTypeResistanceTotalFire + "%", tabX2, locY2 += spacing);
                     * gv.DrawText("WILL: " + pc.will + ", Magic: " + pc.damageTypeResistanceTotalMagic + "%" + ", Poison: " + pc.damageTypeResistanceTotalPoison + "%", tabX2, locY2 += spacing);
                     * gv.DrawText("WIS:  " + pc.baseWis + " + " + (pc.wisdom - pc.baseWis) + " = " + pc.wisdom + " (" + ((pc.wisdom - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * gv.DrawText("CHA:  " + pc.baseCha + " + " + (pc.charisma - pc.baseCha) + " = " + pc.charisma + " (" + ((pc.charisma - 10) / 2) + ")", tabX - 3 * gv.squareSize, locY += spacing);
                     * if (gv.mod.useLuck == true)
                     * {
                     *  gv.DrawText("LCK:  " + pc.baseLuck + " + " + (pc.luck - pc.baseLuck) + " = " + pc.luck, tabX - 3 * gv.squareSize, locY += spacing);
                     * }
                     */
                }
            }
        }
예제 #7
0
        //PARTY SCREEN
        public void redrawPcSelector()
        {
            if (pcSelectorPcIndex >= gv.mod.playerList.Count)
            {
                pcSelectorPcIndex = 0;
            }
            Player pc = gv.mod.playerList[pcSelectorPcIndex];

            gv.sf.UpdateStats(pc);

            int pW         = (int)((float)gv.screenWidth / 100.0f);
            int pH         = (int)((float)gv.screenHeight / 100.0f);
            int padH       = gv.squareSize / 6;
            int locY       = 0;
            int locX       = pW * 4;
            int textH      = (int)gv.drawFontRegHeight;
            int spacing    = textH;
            int tabX       = pW * 50;
            int tabX2      = pW * 70;
            int leftStartY = btnPartyIndex[0].Y + btnPartyIndex[0].Height + (pH * 4);

            //DRAW EACH PC BUTTON
            int cntPCs = 0;

            foreach (IbbButton btn in btnPartyIndex)
            {
                if (cntPCs < gv.mod.playerList.Count)
                {
                    if (cntPCs == pcSelectorPcIndex)
                    {
                        btn.glowOn = true;
                    }
                    else
                    {
                        btn.glowOn = false;
                    }
                    btn.Draw();
                }
                cntPCs++;
            }

            //DRAW LEFT STATS
            //name
            gv.DrawText("Name: " + pc.name, locX, locY += leftStartY, 1.0f, Color.White);

            //race
            gv.DrawText(gv.mod.raceLabel + ": " + gv.mod.getRace(pc.raceTag).name, locX, locY += spacing, 1.0f, Color.White);

            //gender
            if (pc.isMale)
            {
                gv.DrawText("Gender: Male", locX, locY += spacing, 1.0f, Color.White);
            }
            else
            {
                gv.DrawText("Gender: Female", locX, locY += spacing, 1.0f, Color.White);
            }

            //class
            gv.DrawText("Class: " + gv.mod.getPlayerClass(pc.classTag).name, locX, locY += spacing, 1.0f, Color.White);
            gv.DrawText("Level: " + pc.classLevel, locX, locY          += spacing, 1.0f, Color.White);
            gv.DrawText("XP: " + pc.XP + "/" + pc.XPNeeded, locX, locY += spacing, 1.0f, Color.White);
            gv.DrawText("---------------", locX, locY += spacing, 1.0f, Color.White);

            //DRAW RIGHT STATS
            int actext = 0;

            if (gv.mod.ArmorClassAscending)
            {
                actext = pc.AC;
            }
            else
            {
                actext = 20 - pc.AC;
            }
            locY = 0;
            gv.DrawText("STR: " + pc.strength, tabX, locY += leftStartY);
            gv.DrawText("AC: " + actext, tabX2, locY);
            gv.DrawText("DEX: " + pc.dexterity, tabX, locY += spacing);
            gv.DrawText("HP: " + pc.hp + "/" + pc.hpMax, tabX2, locY);
            gv.DrawText("CON: " + pc.constitution, tabX, locY += spacing);
            gv.DrawText("SP: " + pc.sp + "/" + pc.spMax, tabX2, locY);
            gv.DrawText("INT: " + pc.intelligence, tabX, locY += spacing);
            gv.DrawText("BAB: " + pc.baseAttBonus, tabX2, locY);
            gv.DrawText("WIS: " + pc.wisdom, tabX, locY   += spacing);
            gv.DrawText("CHA: " + pc.charisma, tabX, locY += spacing);

            btnReturn.Draw();
        }
예제 #8
0
        public void redrawJournal()
        {
            int pW = (int)((float)gv.screenWidth / 100.0f);
            int pH = (int)((float)gv.screenHeight / 100.0f);

            int locY       = pH * 5;
            int locX       = 4 * gv.squareSize;
            int spacing    = (int)gv.drawFontRegHeight + pH;
            int leftStartY = pH * 4;
            int tabStartY  = pH * 40;

            //IF BACKGROUND IS NULL, LOAD IMAGE
            if (journalBack == null)
            {
                gv.cc.DisposeOfBitmap(ref journalBack);
                journalBack = gv.cc.LoadBitmap("journalback");
            }
            //IF BUTTONS ARE NULL, LOAD BUTTONS
            if (btnReturnJournal == null)
            {
                setControlsStart();
            }

            //DRAW BACKGROUND IMAGE
            IbRect src = new IbRect(0, 0, journalBack.PixelSize.Width, journalBack.PixelSize.Height);
            IbRect dst = new IbRect(2 * gv.squareSize, 0, (gv.squaresInWidth - 4) * gv.squareSize, (gv.squaresInHeight - 1) * gv.squareSize);

            gv.DrawBitmap(journalBack, src, dst);

            //MAKE SURE NO OUT OF INDEX ERRORS
            if (gv.mod.partyJournalQuests.Count > 0)
            {
                if (journalScreenQuestIndex >= gv.mod.partyJournalQuests.Count)
                {
                    journalScreenQuestIndex = 0;
                }
                if (journalScreenEntryIndex >= gv.mod.partyJournalQuests[journalScreenQuestIndex].Entries.Count)
                {
                    journalScreenEntryIndex = 0;
                }
            }

            //DRAW QUESTS
            Color color = Color.Black;

            gv.DrawText("Active Quests:", locX, locY += leftStartY, 1.0f, color);
            gv.DrawText("--------------", locX, locY += spacing, 1.0f, color);

            //draw Faction info first
            bool drawFactionQuest = false;

            if (gv.mod.moduleFactionsList != null)
            {
                foreach (Faction f in gv.mod.moduleFactionsList)
                {
                    if (f.showThisFactionInJournal)
                    {
                        drawFactionQuest = true;
                        break;
                    }
                }
            }

            if (drawFactionQuest)
            {
                //now add the faction quest and an entry for each drawn faction

                //1. No need to add the quest if it already exists
                bool factionQuestExistsAlready = false;
                foreach (JournalQuest jQ in gv.mod.partyJournalQuests)
                {
                    if (jQ.Tag == "factionQuest001")
                    {
                        factionQuestExistsAlready = true;
                        jQ.Entries.Clear();
                        break;
                    }
                }

                if (!factionQuestExistsAlready)
                {
                    JournalQuest factionQuest = new JournalQuest();
                    factionQuest.Tag  = "factionQuest001";
                    factionQuest.Name = "Factions";
                    factionQuest.Entries.Clear();
                    gv.mod.partyJournalQuests.Add(factionQuest);
                }

                //2. update entries of faction quest
                foreach (JournalQuest jQ in gv.mod.partyJournalQuests)
                {
                    if (jQ.Tag == "factionQuest001")
                    {
                        int idCounter = 0;
                        foreach (Faction f in gv.mod.moduleFactionsList)
                        {
                            if (f.showThisFactionInJournal)
                            {
                                JournalEntry factionEntry = new JournalEntry();
                                factionEntry.EntryId    = idCounter;
                                factionEntry.EntryTitle = f.name;
                                factionEntry.EntryText  = "";
                                //Rank 1 (27 of 99, +1 every 24h), +4 buff to AC/toHit/Saves
                                if (f.showRankInJournal)
                                {
                                    if (f.displayRankInWords)
                                    {
                                        if (f.rank == 1)
                                        {
                                            factionEntry.EntryText += f.nameRank1 + " ";
                                        }
                                        else if (f.rank == 2)
                                        {
                                            factionEntry.EntryText += f.nameRank2 + " ";
                                        }
                                        else if (f.rank == 3)
                                        {
                                            factionEntry.EntryText += f.nameRank3 + " ";
                                        }
                                        else if (f.rank == 4)
                                        {
                                            factionEntry.EntryText += f.nameRank4 + " ";
                                        }
                                        else if (f.rank == 5)
                                        {
                                            factionEntry.EntryText += f.nameRank5 + " ";
                                        }
                                        else if (f.rank == 6)
                                        {
                                            factionEntry.EntryText += f.nameRank6 + " ";
                                        }
                                        else if (f.rank == 7)
                                        {
                                            factionEntry.EntryText += f.nameRank7 + " ";
                                        }
                                        else if (f.rank == 8)
                                        {
                                            factionEntry.EntryText += f.nameRank8 + " ";
                                        }
                                        else if (f.rank == 9)
                                        {
                                            factionEntry.EntryText += f.nameRank9 + " ";
                                        }
                                        else if (f.rank == 10)
                                        {
                                            factionEntry.EntryText += f.nameRank10 + " ";
                                        }
                                    }
                                    else
                                    {
                                        if (f.rank == 1)
                                        {
                                            factionEntry.EntryText += "Rank 1 ";
                                        }
                                        else if (f.rank == 2)
                                        {
                                            factionEntry.EntryText += "Rank 2 ";
                                        }
                                        else if (f.rank == 3)
                                        {
                                            factionEntry.EntryText += "Rank 3 ";
                                        }
                                        else if (f.rank == 4)
                                        {
                                            factionEntry.EntryText += "Rank 4 ";
                                        }
                                        else if (f.rank == 5)
                                        {
                                            factionEntry.EntryText += "Rank 5 ";
                                        }
                                        else if (f.rank == 6)
                                        {
                                            factionEntry.EntryText += "Rank 6 ";
                                        }
                                        else if (f.rank == 7)
                                        {
                                            factionEntry.EntryText += "Rank 7 ";
                                        }
                                        else if (f.rank == 8)
                                        {
                                            factionEntry.EntryText += "Rank 8 ";
                                        }
                                        else if (f.rank == 9)
                                        {
                                            factionEntry.EntryText += "Rank 9 ";
                                        }
                                        else if (f.rank == 9)
                                        {
                                            factionEntry.EntryText += "Rank 9 ";
                                        }
                                        else if (f.rank == 10)
                                        {
                                            factionEntry.EntryText += "Rank 10 ";
                                        }
                                    }
                                }

                                if ((f.showStrengthInJournal || f.showChangeRateInJournal) && (f.showRankInJournal))
                                {
                                    factionEntry.EntryText += "(";
                                }
                                if (f.showStrengthInJournal)
                                {
                                    if (f.rank == 1)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank2.ToString();
                                    }
                                    else if (f.rank == 2)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank3.ToString();
                                    }
                                    else if (f.rank == 3)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank4.ToString();
                                    }
                                    else if (f.rank == 4)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank5.ToString();
                                    }
                                    else if (f.rank == 5)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank6.ToString();
                                    }
                                    else if (f.rank == 6)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank7.ToString();
                                    }
                                    else if (f.rank == 7)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank8.ToString();
                                    }
                                    else if (f.rank == 8)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank9.ToString();
                                    }
                                    else if (f.rank == 9)
                                    {
                                        factionEntry.EntryText += f.strength.ToString() + " of " + f.factionStrengthRequiredForRank10.ToString();
                                    }
                                    else if (f.rank == 10)
                                    {
                                        factionEntry.EntryText += f.strength.ToString();
                                    }
                                }

                                if ((f.showStrengthInJournal && !f.showChangeRateInJournal) && f.showRankInJournal)
                                {
                                    factionEntry.EntryText += ") ";
                                }

                                if ((f.showChangeRateInJournal) && (f.showRankInJournal || f.showStrengthInJournal))
                                {
                                    if (f.showRankInJournal && f.showStrengthInJournal)
                                    {
                                        factionEntry.EntryText += ", " + f.amountOfFactionStrengthChangePerInterval.ToString() + " every " + f.intervalOfFactionStrengthChangeInHours.ToString() + "h)";
                                    }
                                    else if (f.showRankInJournal && !f.showStrengthInJournal)
                                    {
                                        factionEntry.EntryText += f.amountOfFactionStrengthChangePerInterval.ToString() + " every " + f.intervalOfFactionStrengthChangeInHours.ToString() + "h)";
                                    }
                                    else if (!f.showRankInJournal && f.showStrengthInJournal)
                                    {
                                        factionEntry.EntryText += ", " + f.amountOfFactionStrengthChangePerInterval.ToString() + " every " + f.intervalOfFactionStrengthChangeInHours.ToString() + "h";
                                    }
                                    else if (f.showRankInJournal && !f.showStrengthInJournal)
                                    {
                                        factionEntry.EntryText += f.amountOfFactionStrengthChangePerInterval.ToString() + " every " + f.intervalOfFactionStrengthChangeInHours.ToString() + "h)";
                                    }
                                }
                                else if (f.showChangeRateInJournal)
                                {
                                    factionEntry.EntryText += f.amountOfFactionStrengthChangePerInterval.ToString() + " every " + f.intervalOfFactionStrengthChangeInHours.ToString() + "h";
                                }

                                if (f.rank == 1)
                                {
                                    if (f.accumulatedBuffStrengthRank1 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank1.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 2)
                                {
                                    if (f.accumulatedBuffStrengthRank2 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank2.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 3)
                                {
                                    if (f.accumulatedBuffStrengthRank3 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank3.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 4)
                                {
                                    if (f.accumulatedBuffStrengthRank4 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank4.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 5)
                                {
                                    if (f.accumulatedBuffStrengthRank5 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank5.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 6)
                                {
                                    if (f.accumulatedBuffStrengthRank6 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank6.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 7)
                                {
                                    if (f.accumulatedBuffStrengthRank7 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank7.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 8)
                                {
                                    if (f.accumulatedBuffStrengthRank8 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank8.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 9)
                                {
                                    if (f.accumulatedBuffStrengthRank9 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank9.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }
                                else if (f.rank == 10)
                                {
                                    if (f.accumulatedBuffStrengthRank10 != 0)
                                    {
                                        factionEntry.EntryText += ", +" + f.accumulatedBuffStrengthRank10.ToString() + " buff to AC/toHit/Saves";
                                        //factionEntry.EntryText += "<br>";
                                    }
                                }

                                factionEntry.EntryText += "<br>";
                                factionEntry.EntryText += "<br>";
                                factionEntry.EntryText += f.factionDescriptionInJournal;
                                jQ.Entries.Add(factionEntry);
                                idCounter++;
                            }
                        }
                        break;
                    }
                }
            }

            if (gv.mod.partyJournalQuests.Count > 0)
            {
                /*
                 * int cnt = 0;
                 *          foreach (JournalQuest jq in gv.mod.partyJournalQuests)
                 *          {
                 *  if (journalScreenQuestIndex == cnt) { color = Color.Lime; }
                 *                  else { color = Color.Black; }
                 *  gv.DrawText(jq.Name, locX, locY += spacing, 1.0f, color);
                 *                  cnt++;
                 *          }
                 */
                int minQuestNumber = journalScreenQuestIndex - 3;
                int maxQuestNumber = journalScreenQuestIndex + 3;
                if (minQuestNumber < 0)
                {
                    maxQuestNumber -= minQuestNumber;
                    if (maxQuestNumber > gv.mod.partyJournalQuests.Count - 1)
                    {
                        maxQuestNumber = gv.mod.partyJournalQuests.Count - 1;
                    }
                    minQuestNumber = 0;
                }
                if (maxQuestNumber > gv.mod.partyJournalQuests.Count - 1)
                {
                    minQuestNumber -= (maxQuestNumber - (gv.mod.partyJournalQuests.Count - 1));
                    if (minQuestNumber < 0)
                    {
                        minQuestNumber = 0;
                    }
                    maxQuestNumber = gv.mod.partyJournalQuests.Count - 1;
                }


                for (int i = minQuestNumber; i <= maxQuestNumber; i++)
                {
                    if (journalScreenQuestIndex == i)
                    {
                        color = Color.Lime;
                    }
                    else
                    {
                        color = Color.Black;
                    }
                    gv.DrawText(gv.mod.partyJournalQuests[i].Name, locX, locY += spacing, 1.0f, color);
                }
            }

            //DRAW QUEST ENTRIES
            locY = tabStartY;
            gv.DrawText("Quest Entry:", locX, locY, 1.0f, Color.Black);
            gv.DrawText("--------------", locX, locY += spacing, 1.0f, Color.Black);
            if (gv.mod.partyJournalQuests.Count > 0)
            {
                //Description
                string textToSpan = "<font color='black'><i><b>" + gv.mod.partyJournalQuests[journalScreenQuestIndex].Entries[journalScreenEntryIndex].EntryTitle + "</b></i></font><br>";
                textToSpan += gv.mod.partyJournalQuests[journalScreenQuestIndex].Entries[journalScreenEntryIndex].EntryText;

                string textToSpanReplaced = replaceText(textToSpan);

                int yLoc = pH * 18;

                description.tbXloc   = locX;
                description.tbYloc   = locY + spacing;
                description.tbWidth  = pW * 60;
                description.tbHeight = pH * 45;
                description.logLinesList.Clear();
                description.AddHtmlTextToLog(textToSpanReplaced);
                description.onDrawLogBox();
            }

            //DRAW ALL CONTROLS
            ctrlUpArrow.Draw();
            ctrlDownArrow.Draw();
            ctrlLeftArrow.Draw();
            ctrlRightArrow.Draw();
            btnReturnJournal.Draw();
        }
예제 #9
0
        //PARTY SCREEN
        public void redrawPartyRoster()
        {
            if (partyScreenPcIndex >= gv.mod.playerList.Count)
            {
                partyScreenPcIndex = 0;
            }
            if (partyRosterPcIndex >= gv.mod.partyRosterList.Count)
            {
                partyRosterPcIndex = 0;
            }
            Player pc = null;

            if ((gv.mod.playerList.Count > 0) && (lastClickedPlayerList))
            {
                pc = gv.mod.playerList[partyScreenPcIndex];
            }
            else if ((gv.mod.partyRosterList.Count > 0) && (!lastClickedPlayerList))
            {
                pc = gv.mod.partyRosterList[partyRosterPcIndex];
            }
            if (pc != null)
            {
                gv.sf.UpdateStats(pc);
            }

            int pW         = (int)((float)gv.screenWidth / 100.0f);
            int pH         = (int)((float)gv.screenHeight / 100.0f);
            int padH       = gv.squareSize / 6;
            int locY       = 0;
            int locX       = pW * 4;
            int textH      = (int)gv.drawFontRegHeight;
            int spacing    = textH;
            int tabX       = pW * 50;
            int tabX2      = pW * 70;
            int leftStartY = 5 * gv.squareSize + (pH * 6);

            //Draw screen title name
            int textWidth = (int)gv.cc.MeasureString("Current Party Members [" + gv.mod.MaxPartySize + " Maximum]", SharpDX.DirectWrite.FontWeight.Normal, SharpDX.DirectWrite.FontStyle.Normal, gv.drawFontRegHeight);
            int ulX       = (gv.screenWidth / 2) - (textWidth / 2);

            gv.DrawText("Current Party Members [" + gv.mod.MaxPartySize + " Maximum]", ulX, pH * 3, 1.0f, Color.Gray);

            //DRAW EACH PC BUTTON
            this.refreshPlayerTokens();

            int cntPCs = 0;

            foreach (IbbButton btn in btnPartyIndex)
            {
                if (cntPCs < gv.mod.playerList.Count)
                {
                    if (cntPCs == partyScreenPcIndex)
                    {
                        btn.glowOn = true;
                    }
                    else
                    {
                        btn.glowOn = false;
                    }
                    btn.Draw();
                }
                cntPCs++;
            }

            //Draw screen title name
            textWidth = (int)gv.cc.MeasureString("Party Roster [Players in Reserve]", SharpDX.DirectWrite.FontWeight.Normal, SharpDX.DirectWrite.FontStyle.Normal, gv.drawFontRegHeight);
            ulX       = (gv.screenWidth / 2) - (textWidth / 2);
            gv.DrawText("Party Roster [Players in Reserve]", ulX, 3 * gv.squareSize + (pH * 0), 1.0f, Color.Gray);

            //DRAW EACH ROSTER PC BUTTON
            this.refreshRosterPlayerTokens();

            cntPCs = 0;
            foreach (IbbButton btn in btnPartyRosterIndex)
            {
                if (cntPCs < gv.mod.partyRosterList.Count)
                {
                    if (cntPCs == partyRosterPcIndex)
                    {
                        btn.glowOn = true;
                    }
                    else
                    {
                        btn.glowOn = false;
                    }
                    btn.Draw();
                }
                cntPCs++;
            }

            btnDown.Draw();
            btnUp.Draw();
            btnHelp.Draw();
            btnReturn.Draw();

            if (pc != null)
            {
                //DRAW LEFT STATS
                gv.DrawText("Name: " + pc.name, locX, locY += leftStartY);
                gv.DrawText(gv.mod.raceLabel + ": " + gv.mod.getRace(pc.raceTag).name, locX, locY += spacing);
                if (pc.isMale)
                {
                    gv.DrawText("Gender: Male", locX, locY += spacing);
                }
                else
                {
                    gv.DrawText("Gender: Female", locX, locY += spacing);
                }
                gv.DrawText("Class: " + gv.mod.getPlayerClass(pc.classTag).name, locX, locY += spacing);
                gv.DrawText("Level: " + pc.classLevel, locX, locY          += spacing);
                gv.DrawText("XP: " + pc.XP + "/" + pc.XPNeeded, locX, locY += spacing);
                gv.DrawText("---------------", locX, locY += spacing);

                //draw spells known list
                string allSpells = "";
                foreach (string s in pc.knownSpellsTags)
                {
                    Spell sp = gv.mod.getSpellByTag(s);
                    allSpells += sp.name + ", ";
                }
                gv.DrawText(pc.playerClass.spellLabelPlural + ": " + allSpells, locX, locY += spacing);

                //draw traits known list
                string allTraits = "";
                foreach (string s in pc.knownTraitsTags)
                {
                    Trait tr = gv.mod.getTraitByTag(s);
                    allTraits += tr.name + ", ";
                }
                gv.DrawText(pc.playerClass.traitLabelPlural + ": " + allTraits, locX, locY += spacing);

                //DRAW RIGHT STATS
                int actext = 0;
                if (gv.mod.ArmorClassAscending)
                {
                    actext = pc.AC;
                }
                else
                {
                    actext = 20 - pc.AC;
                }
                locY = 0;
                gv.DrawText("STR: " + pc.strength, tabX, locY += leftStartY);
                gv.DrawText("AC: " + actext, tabX2, locY);
                gv.DrawText("DEX: " + pc.dexterity, tabX, locY += spacing);
                gv.DrawText("HP: " + pc.hp + "/" + pc.hpMax, tabX2, locY);
                gv.DrawText("CON: " + pc.constitution, tabX, locY += spacing);
                gv.DrawText("SP: " + pc.sp + "/" + pc.spMax, tabX2, locY);
                gv.DrawText("INT: " + pc.intelligence, tabX, locY += spacing);
                gv.DrawText("BAB: " + pc.baseAttBonus, tabX2, locY);
                gv.DrawText("WIS: " + pc.wisdom, tabX, locY   += spacing);
                gv.DrawText("CHA: " + pc.charisma, tabX, locY += spacing);
            }
        }