Slowdive's Little Daily Blog

Discuss anything in general about the IceBlink Engine + Toolset project (or anything else) here.
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

cartons wrote: Mon Apr 26, 2021 12:49 pm The Entangle tiles look great, and I'm glad for the inclusion of finesse weapons.
Thanks cartons! I'm pushing back the initial release date a couple of weeks. I want to make sure and get all the "+" features in before the first release (see the feature list for details).

Next up I plan on working on the #/day type Traits. I'll add three new properties to Traits such as "NumberOfUsesPerDay" which will be an int array so you can assign the number at any given level. Another property would be "NumberOfUsesLeftForToday". The final property would be a simple bool property of "UseNumberOfUsesPerDaySystem". I see such uses for these type of Traits like Lay on Hands (once per day), Rage, etc. I figure it would be easiest to reset at 06:00 each day and after a long rest when using the "forceRest" script.
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

I basically have the Trait "number of uses per day" system working now. You set the number of uses per day at each level in the Trait Editor. It is an integer array so you could have something like [1,1,1,2,2,2,3,4,5,6]. This would mean that you get one use per day at levels 1-3, two uses per day at levels 4-6, three uses per day at level 7, four uses per day at level 8, etc. If you set the "useNumberOfUsesPerDaySystem" flag to false, you will not use the "uses per day" system for this trait and instead use the old system of just SP. Also, you have to set this trait to be isPassive = false, so that it is an active trait that you have to activate from the "use trait" screen. Here is an example of the "Lay on Hands" trait for Paladins:
IBbasic17.PNG
IBbasic17.PNG (124.46 KiB) Viewed 22965 times
I have it set so that at midnight, all your traits are reset and you can once again use them if they were deplenished. I also have it set so that if you call one of the itForceRest scripts it will reset your traits to fill their number of uses for the day.
cartons
Posts: 73
Joined: Mon Jan 11, 2021 5:38 pm

Re: Slowdive's Little Daily Blog

Post by cartons »

Always fun to have more resources to account for when planning your next dungeon deep dive!
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

I figured out how to make a branch on GitHub and how to make a pull request to merge the branched code. So for now, I will work on new features of IB using branches and then have Karl or myself merge the branch. My first branch is called "TwoWeaponFighting" and will include the two weapon fighting code and the light weapon code. I will also need to add code to the toolset so I'll do a branch there as well.
Pongo
Posts: 156
Joined: Fri Jan 22, 2021 8:39 am

Re: Slowdive's Little Daily Blog

Post by Pongo »

Traits with "uses per day" are great, really opens up opportunities for class builds etc. Good work!
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

I started adding the code for two weapon fighting to IB. I still need to create an Effect property for "TwoWeaponFightingMainHandModifier" and "TwoWeaponFightingOffHandModifier" so that it can be used by a trait, item, or spell I suppose.

In the below image, the PC does not have a trait so full negative modifiers for off-hand are in place:
IB02.PNG
IB02.PNG (1.38 MiB) Viewed 22930 times
IB03.PNG
IB03.PNG (1.4 MiB) Viewed 22930 times
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

I think I have a trait working now for two weapon fighting (a L1 and L2). The PC below has both Two Weapon Fighting L1 and L2, but only L2 is used since it is not stackable.
IB04.PNG
IB04.PNG (566.56 KiB) Viewed 22914 times
IB05.PNG
IB05.PNG (778.35 KiB) Viewed 22914 times

The Effects:

Code: Select all

{
    "traitWorksOnlyWhen": [],
    "traitWorksNeverWhen": [],
    "name": "Two Weapon Fighting L1",
    "thisEffectUsesFullSizeIcon": false,
    "squareIndicatorFilename": "fx_webbed",
    "durationOnSquareInUnits": 0,
    "modifyShopBuyBackPrice": 0,
    "modifyShopSellPrice": 0,
    "allowCastingWithoutTriggeringAoO": false,
    "allowCastingWithoutRiskOfInterruption": false,
    "affectNeverList": [],
    "affectOnlyList": [],
    "tag": "twoweaponfightingL1",
    "tagOfSender": "senderTag",
    "classLevelOfSender": 0,
    "description": "",
    "spriteFilename": "held",
    "durationInUnits": 0,
    "currentDurationInUnits": 0,
    "startingTimeInUnits": 0,
    "babModifier": 0,
    "babModifierForRangedAttack": 0,
    "babModifierForMeleeAttack": 0,
    "twoWeaponFightingMainHandModifier": 2,
    "twoWeaponFightingOffHandModifier": 6,
    "damageModifierForMeleeAttack": 0,
    "damageModifierForRangedAttack": 0,
    "acModifier": 0,
    "isStackableEffect": false,
    "isStackableDuration": false,
    "usedForUpdateStats": false,
    "repeatTerminalSaveEachRound": false,
    "isPermanent": false,
    "endEffectWhenCarrierTakesDamage": false,
    "saveOnlyHalvesDamage": false,
    "effectScript": "efGeneric",
    "saveCheckType": "none",
    "saveCheckDC": 10,
    "doDamage": false,
    "damType": "Normal",
    "damNumOfDice": 0,
    "damDie": 0,
    "damAdder": 0,
    "damAttacksEveryNLevels": 0,
    "damAttacksAfterLevelN": 0,
    "damAttacksUpToNLevelsTotal": 0,
    "damNumberOfAttacks": 0,
    "damNumberOfAttacksForEveryNLevels": 0,
    "damNumberOfAttacksAfterLevelN": 0,
    "damNumberOfAttacksUpToNAttacksTotal": 0,
    "doHeal": false,
    "healHP": true,
    "healType": "Organic",
    "healNumOfDice": 0,
    "healDie": 0,
    "healAdder": 0,
    "healActionsEveryNLevels": 0,
    "healActionsAfterLevelN": 0,
    "healActionsUpToNLevelsTotal": 0,
    "doBuff": false,
    "doDeBuff": false,
    "statusType": "none",
    "modifyFortitude": 0,
    "modifyWill": 0,
    "modifyReflex": 0,
    "modifyStr": 0,
    "modifyDex": 0,
    "modifyInt": 0,
    "modifyCha": 0,
    "modifyCon": 0,
    "modifyWis": 0,
    "modifyLuk": 0,
    "modifyMoveDistance": 0,
    "modifyHpMax": 0,
    "modifySpMax": 0,
    "modifySp": 0,
    "modifyHpInCombat": 0,
    "modifySpInCombat": 0,
    "modifyDamageTypeResistanceAcid": 0,
    "modifyDamageTypeResistanceCold": 0,
    "modifyDamageTypeResistanceNormal": 0,
    "modifyDamageTypeResistanceElectricity": 0,
    "modifyDamageTypeResistanceFire": 0,
    "modifyDamageTypeResistanceMagic": 0,
    "modifyDamageTypeResistancePoison": 0,
    "modifyNumberOfMeleeAttacks": 0,
    "modifyNumberOfRangedAttacks": 0,
    "modifyNumberOfEnemiesAttackedOnCleave": 0,
    "modifyNumberOfEnemiesAttackedOnSweepAttack": 0,
    "useDexterityForMeleeAttackModifierIfGreaterThanStrength": false,
    "useDexterityForMeleeDamageModifierIfGreaterThanStrength": false,
    "negateAttackPenaltyForAdjacentEnemyWithRangedAttack": false,
    "useEvasion": false
  },
  {
    "traitWorksOnlyWhen": [],
    "traitWorksNeverWhen": [],
    "name": "Two Weapon Fighting L2",
    "thisEffectUsesFullSizeIcon": false,
    "squareIndicatorFilename": "fx_webbed",
    "durationOnSquareInUnits": 0,
    "modifyShopBuyBackPrice": 0,
    "modifyShopSellPrice": 0,
    "allowCastingWithoutTriggeringAoO": false,
    "allowCastingWithoutRiskOfInterruption": false,
    "affectNeverList": [],
    "affectOnlyList": [],
    "tag": "twoweaponfightingL2",
    "tagOfSender": "senderTag",
    "classLevelOfSender": 0,
    "description": "",
    "spriteFilename": "held",
    "durationInUnits": 0,
    "currentDurationInUnits": 0,
    "startingTimeInUnits": 0,
    "babModifier": 0,
    "babModifierForRangedAttack": 0,
    "babModifierForMeleeAttack": 0,
    "twoWeaponFightingMainHandModifier": 4,
    "twoWeaponFightingOffHandModifier": 8,
    "damageModifierForMeleeAttack": 0,
    "damageModifierForRangedAttack": 0,
    "acModifier": 0,
    "isStackableEffect": false,
    "isStackableDuration": false,
    "usedForUpdateStats": false,
    "repeatTerminalSaveEachRound": false,
    "isPermanent": false,
    "endEffectWhenCarrierTakesDamage": false,
    "saveOnlyHalvesDamage": false,
    "effectScript": "efGeneric",
    "saveCheckType": "none",
    "saveCheckDC": 10,
    "doDamage": false,
    "damType": "Normal",
    "damNumOfDice": 0,
    "damDie": 0,
    "damAdder": 0,
    "damAttacksEveryNLevels": 0,
    "damAttacksAfterLevelN": 0,
    "damAttacksUpToNLevelsTotal": 0,
    "damNumberOfAttacks": 0,
    "damNumberOfAttacksForEveryNLevels": 0,
    "damNumberOfAttacksAfterLevelN": 0,
    "damNumberOfAttacksUpToNAttacksTotal": 0,
    "doHeal": false,
    "healHP": true,
    "healType": "Organic",
    "healNumOfDice": 0,
    "healDie": 0,
    "healAdder": 0,
    "healActionsEveryNLevels": 0,
    "healActionsAfterLevelN": 0,
    "healActionsUpToNLevelsTotal": 0,
    "doBuff": false,
    "doDeBuff": false,
    "statusType": "none",
    "modifyFortitude": 0,
    "modifyWill": 0,
    "modifyReflex": 0,
    "modifyStr": 0,
    "modifyDex": 0,
    "modifyInt": 0,
    "modifyCha": 0,
    "modifyCon": 0,
    "modifyWis": 0,
    "modifyLuk": 0,
    "modifyMoveDistance": 0,
    "modifyHpMax": 0,
    "modifySpMax": 0,
    "modifySp": 0,
    "modifyHpInCombat": 0,
    "modifySpInCombat": 0,
    "modifyDamageTypeResistanceAcid": 0,
    "modifyDamageTypeResistanceCold": 0,
    "modifyDamageTypeResistanceNormal": 0,
    "modifyDamageTypeResistanceElectricity": 0,
    "modifyDamageTypeResistanceFire": 0,
    "modifyDamageTypeResistanceMagic": 0,
    "modifyDamageTypeResistancePoison": 0,
    "modifyNumberOfMeleeAttacks": 0,
    "modifyNumberOfRangedAttacks": 0,
    "modifyNumberOfEnemiesAttackedOnCleave": 0,
    "modifyNumberOfEnemiesAttackedOnSweepAttack": 0,
    "useDexterityForMeleeAttackModifierIfGreaterThanStrength": false,
    "useDexterityForMeleeDamageModifierIfGreaterThanStrength": false,
    "negateAttackPenaltyForAdjacentEnemyWithRangedAttack": false,
    "useEvasion": false
  }

The Traits:

Code: Select all

{
    "methodOfChecking": "leader",
    "nameOfTraitGroup": "none",
    "showOnMainMap": false,
    "name": "Two Weapon Fighting L1",
    "traitEffectTagList": [
      {
        "tag": "twoweaponfightingL1"
      }
    ],
    "traitWorksOnlyWhen": [],
    "traitWorksNeverWhen": [],
    "tag": "twoweaponfightingL1",
    "associatedSpellTag": "none",
    "traitImage": "tr_twoattacks",
    "description": "Allows the player to improve their two weapon fighting skills.",
    "prerequisiteTrait": "none",
    "skillModifier": 0,
    "requiredStrength": 0,
    "requiredDexterity": 0,
    "requiredConstitution": 0,
    "requiredIntelligence": 0,
    "requiredWisdom": 0,
    "requiredCharisma": 0,
    "skillModifierAttribute": "str",
    "traitToReplaceByTag": "none",
    "useableInSituation": "Always"
  },
  {
    "methodOfChecking": "leader",
    "nameOfTraitGroup": "none",
    "showOnMainMap": false,
    "name": "Two Weapon Fighting L2",
    "traitEffectTagList": [
      {
        "tag": "twoweaponfightingL2"
      }
    ],
    "traitWorksOnlyWhen": [],
    "traitWorksNeverWhen": [],
    "tag": "twoweaponfightingL2",
    "associatedSpellTag": "none",
    "traitImage": "tr_twoattacks",
    "description": "Allows the player to improve their two weapon fighting skills.",
    "prerequisiteTrait": "none",
    "skillModifier": 0,
    "requiredStrength": 0,
    "requiredDexterity": 0,
    "requiredConstitution": 0,
    "requiredIntelligence": 0,
    "requiredWisdom": 0,
    "requiredCharisma": 0,
    "skillModifierAttribute": "str",
    "traitToReplaceByTag": "none",
    "useableInSituation": "Always"
  }
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

So before I go too crazy and break everything Karl has done with IB on GitHub, I wanted to do a simple test of adding one feature and going through the whole process on GitHub. So I picked two weapon fighting which was probably not the best feature to use as a test run due to its complexity, but I think it worked out okay. I was able to create a branch, work off that branch, make a pull request, and merge that pull request into the master branch on GitHub. I'll do this from now on for each feature.

Below is the link to v198 that includes the two weapon fighting feature:

https://www.dropbox.com/s/yeibhtywqyvv4 ... 8.zip?dl=0

I also added a new Configuration Screen that opens first. It allows you to select the window size you want to use or go full screen. This is very useful for me when debugging the engine, but may just be a nuisance to others, what do you think?
youngneil1
Posts: 148
Joined: Mon Jan 20, 2020 9:01 am

Re: Slowdive's Little Daily Blog

Post by youngneil1 »

Wow! Lots of activity, very cool :D !

So, I am a little bit overhwelmed right now and my old brain must get into IB again :lol: .

For starters I cloned a fresh IB repo to my desktop (new computer),using Jers's latetst great changes. Unfortunately I get lots of namespace related errors. A heapload of them is related to sharpdx. I updated everything to newest versions via managing nuget packages. This did not help though. I also integrated a reference to sharpdx.mathematics, but still many errors remain. For example the gameview class fails to recognize a lot of its functions (like eg KeyDown or MouseWheel).

I likely botched in the cloning process (or miss some prerequisite install on my computer; right now I am using just Microsoft VS 2019). Any heads up intel welcome :) .

I have a lot of forum reading ahead :oops: ...
User avatar
slowdive
Site Admin
Posts: 511
Joined: Wed Jan 15, 2020 4:37 am

Re: Slowdive's Little Daily Blog

Post by slowdive »

Newer versions of SharpDX do not work. Just copy the ones from the v198 (or any previous IB version) and copy them into your debug folder after cloning.
Post Reply