PokeVenture 2.0 Full Update
This update matches the new 2.0 version of the game, with a number of new changes for auto-calculation of STAB, Typing, and other features.
@@ -1,3 +1,7 @@
|
||||
.charsheet, .sheet-rolltemplate-PMD {
|
||||
font-family: 'Calibri', 'Arial', sans-serif;
|
||||
}
|
||||
|
||||
.charsheet, .sheet-rolltemplate-PMD{
|
||||
--background:#faf3d7;
|
||||
--section:#cfccb8;
|
||||
@@ -187,27 +191,126 @@ div.sheet-section{
|
||||
box-sizing:border-box;
|
||||
}
|
||||
|
||||
.sheet-type-toggle[value="trainer"] ~ div.sheet-section{ background-color:var(--section);}
|
||||
.sheet-type-toggle[value="trainer"] ~ .sheet-character-header strong{ color:var(--border) !important; text-shadow: 0px 0px 3px var(--background) !important;}
|
||||
.sheet-type-toggle[value="normal"] ~ div.sheet-section{ background-color:var(--normal);}
|
||||
.sheet-type-toggle[value="bug"] ~ div.sheet-section{ background-color:var(--bug);}
|
||||
.sheet-type-toggle[value="dark"] ~ div.sheet-section{ background-color:var(--dark);}
|
||||
.sheet-type-toggle[value="dragon"] ~ div.sheet-section{ background-color:var(--dragon);}
|
||||
.sheet-type-toggle[value="electric"] ~ div.sheet-section{ background-color:var(--electric);}
|
||||
.sheet-type-toggle[value="fairy"] ~ div.sheet-section{ background-color:var(--fairy);}
|
||||
.sheet-type-toggle[value="fighting"] ~ div.sheet-section{ background-color:var(--fighting);}
|
||||
.sheet-type-toggle[value="fire"] ~ div.sheet-section{ background-color:var(--fire);}
|
||||
.sheet-type-toggle[value="flying"] ~ div.sheet-section{ background-color:var(--flying);}
|
||||
.sheet-type-toggle[value="ghost"] ~ div.sheet-section{ background-color:var(--ghost);}
|
||||
.sheet-type-toggle[value="grass"] ~ div.sheet-section{ background-color:var(--grass);}
|
||||
.sheet-type-toggle[value="ground"] ~ div.sheet-section{ background-color:var(--ground);}
|
||||
.sheet-type-toggle[value="ice"] ~ div.sheet-section{ background-color:var(--ice);}
|
||||
.sheet-type-toggle[value="poison"] ~ div.sheet-section{ background-color:var(--poison);}
|
||||
.sheet-type-toggle[value="psychic"] ~ div.sheet-section{ background-color:var(--psychic);}
|
||||
.sheet-type-toggle[value="rock"] ~ div.sheet-section{ background-color:var(--rock);}
|
||||
.sheet-type-toggle[value="steel"] ~ div.sheet-section{ background-color:var(--steel);}
|
||||
.sheet-type-toggle[value="water"] ~ div.sheet-section{ background-color:var(--water);}
|
||||
|
||||
.sheet-type-toggle[value="trainer"] ~ .sheet-character-header strong{ color:var(--border) !important; text-shadow: 0px 0px 3px var(--background) !important;}
|
||||
/* PRIMARY TYPE (type_1) BACKGROUND COLORS - Complete List */
|
||||
.sheet-type-toggle[value="trainer"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--section);
|
||||
}
|
||||
.sheet-type-toggle[value="normal"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--normal);
|
||||
}
|
||||
.sheet-type-toggle[value="bug"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--bug);
|
||||
}
|
||||
.sheet-type-toggle[value="dark"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--dark);
|
||||
}
|
||||
.sheet-type-toggle[value="dragon"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--dragon);
|
||||
}
|
||||
.sheet-type-toggle[value="electric"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--electric);
|
||||
}
|
||||
.sheet-type-toggle[value="fairy"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--fairy);
|
||||
}
|
||||
.sheet-type-toggle[value="fighting"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--fighting);
|
||||
}
|
||||
.sheet-type-toggle[value="fire"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--fire);
|
||||
}
|
||||
.sheet-type-toggle[value="flying"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--flying);
|
||||
}
|
||||
.sheet-type-toggle[value="ghost"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--ghost);
|
||||
}
|
||||
.sheet-type-toggle[value="grass"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--grass);
|
||||
}
|
||||
.sheet-type-toggle[value="ground"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--ground);
|
||||
}
|
||||
.sheet-type-toggle[value="ice"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--ice);
|
||||
}
|
||||
.sheet-type-toggle[value="poison"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--poison);
|
||||
}
|
||||
.sheet-type-toggle[value="psychic"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--psychic);
|
||||
}
|
||||
.sheet-type-toggle[value="rock"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--rock);
|
||||
}
|
||||
.sheet-type-toggle[value="steel"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--steel);
|
||||
}
|
||||
.sheet-type-toggle[value="water"] ~ .sheet-tab-core div.sheet-section {
|
||||
background-color: var(--water);
|
||||
}
|
||||
|
||||
/* SECONDARY TYPE (type_2) BORDER COLORS - Complete List */
|
||||
.sheet-type2-toggle[value="trainer"] ~ .sheet-tab-core div.sheet-section,
|
||||
.sheet-type2-toggle[value=""] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--border);
|
||||
}
|
||||
.sheet-type2-toggle[value="normal"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--normal);
|
||||
}
|
||||
.sheet-type2-toggle[value="bug"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--bug);
|
||||
}
|
||||
.sheet-type2-toggle[value="dark"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--dark);
|
||||
}
|
||||
.sheet-type2-toggle[value="dragon"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--dragon);
|
||||
}
|
||||
.sheet-type2-toggle[value="electric"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--electric);
|
||||
}
|
||||
.sheet-type2-toggle[value="fairy"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--fairy);
|
||||
}
|
||||
.sheet-type2-toggle[value="fighting"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--fighting);
|
||||
}
|
||||
.sheet-type2-toggle[value="fire"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--fire);
|
||||
}
|
||||
.sheet-type2-toggle[value="flying"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--flying);
|
||||
}
|
||||
.sheet-type2-toggle[value="ghost"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--ghost);
|
||||
}
|
||||
.sheet-type2-toggle[value="grass"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--grass);
|
||||
}
|
||||
.sheet-type2-toggle[value="ground"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--ground);
|
||||
}
|
||||
.sheet-type2-toggle[value="ice"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--ice);
|
||||
}
|
||||
.sheet-type2-toggle[value="poison"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--poison);
|
||||
}
|
||||
.sheet-type2-toggle[value="psychic"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--psychic);
|
||||
}
|
||||
.sheet-type2-toggle[value="rock"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--rock);
|
||||
}
|
||||
.sheet-type2-toggle[value="steel"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--steel);
|
||||
}
|
||||
.sheet-type2-toggle[value="water"] ~ .sheet-tab-core div.sheet-section {
|
||||
border-color: var(--water);
|
||||
}
|
||||
input[type="checkbox"]{
|
||||
display:inline;
|
||||
}
|
||||
@@ -522,7 +625,7 @@ div.sheet-character-header strong{
|
||||
text-align: right;
|
||||
}
|
||||
.sheet-attributes .sheet-social > label {
|
||||
width: 70px;
|
||||
width: 50px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
@@ -626,7 +729,7 @@ div.sheet-character-header strong{
|
||||
display:-ms-grid;
|
||||
display:grid;
|
||||
-ms-grid-columns:auto 10px auto 10px auto;
|
||||
grid-template-columns:auto auto auto;
|
||||
grid-template-columns:auto auto auto auto;
|
||||
-webkit-box-pack:center;
|
||||
-ms-flex-pack:center;
|
||||
justify-content:center;
|
||||
|
||||
@@ -18,23 +18,124 @@
|
||||
let hp_rank = parseInt(values.hp_rank)
|
||||
let pain = parseInt(values.pain)
|
||||
let pain_mod = parseInt(values.pain_mod)
|
||||
let hp_max = hp_base + (hp_rank * 3)
|
||||
let hp_max = hp_base + (hp_rank * 2)
|
||||
let pain_max = pain + pain_mod
|
||||
|
||||
if (hp > Math.floor(hp_max / 2)) {
|
||||
setAttrs({pain: 0})
|
||||
} else if (hp <= Math.floor(hp_max / 2) && hp !== 1) {
|
||||
setAttrs({pain: 1})
|
||||
} else if (hp === 1) {
|
||||
setAttrs({pain: 2})
|
||||
} else if (hp === 1) {
|
||||
setAttrs({pain: 4})
|
||||
}
|
||||
}); // This closes the getAttrs() function
|
||||
}); // This closes the on() function
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<script type="text/worker">
|
||||
// Listen for changes to the paralysis checkbox and any dexterity-related attributes
|
||||
on("change:is_paralyzed change:dexterity change:dexteritymod change:dexterity_bonus change:dexterity_rank change:carbos sheet:opened", function(eventInfo) {
|
||||
|
||||
// Get all the values we need
|
||||
getAttrs(["is_paralyzed", "dexterity", "dexteritymod", "dexterity_bonus", "dexterity_rank", "carbos"], function(values) {
|
||||
|
||||
// Check if paralyzed checkbox is checked
|
||||
const isParalyzed = values.is_paralyzed === "1" || values.is_paralyzed === "on";
|
||||
|
||||
let paraValue;
|
||||
|
||||
if (isParalyzed) {
|
||||
// Calculate the full dexterity value
|
||||
const dexterity = parseInt(values.dexterity) || 0;
|
||||
const dexteritymod = parseInt(values.dexteritymod) || 0;
|
||||
const dexterity_bonus = parseInt(values.dexterity_bonus) || 0;
|
||||
const dexterity_rank = parseInt(values.dexterity_rank) || 0;
|
||||
const carbos = parseInt(values.carbos) || 0;
|
||||
|
||||
// Perform the calculation: dexterity + dexteritymod + (dexterity_bonus * 2) + dexterity_rank + carbos
|
||||
const totalDex = dexterity + dexteritymod + (dexterity_bonus * 2) + dexterity_rank + carbos;
|
||||
|
||||
// Divide by 2 and round up
|
||||
paraValue = Math.ceil(totalDex / 2);
|
||||
} else {
|
||||
// If not paralyzed, use the original value (or set to 0/null as needed)
|
||||
paraValue = 0 || 0; // You can adjust this default behavior
|
||||
}
|
||||
|
||||
// Update the para_dex attribute
|
||||
setAttrs({
|
||||
para_dex: paraValue
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Automatic STAB (Same Type Attack Bonus) Calculator with Debug
|
||||
// Place this in your sheet worker section
|
||||
|
||||
on('change:repeating_moves:move_type change:type_1 change:type_2 sheet:opened', function(eventInfo) {
|
||||
console.log('STAB Calculator triggered:', eventInfo.sourceAttribute);
|
||||
|
||||
// Get the repeating section ID if this was triggered by a move change
|
||||
let rowId;
|
||||
if (eventInfo.sourceAttribute && eventInfo.sourceAttribute.includes('repeating_moves')) {
|
||||
rowId = eventInfo.sourceAttribute.split('_')[2];
|
||||
console.log('Updating single move with rowId:', rowId);
|
||||
}
|
||||
|
||||
if (rowId) {
|
||||
// Update just this specific move
|
||||
updateMoveSTAB(rowId);
|
||||
} else {
|
||||
// Update all moves (when character types change)
|
||||
console.log('Updating all moves due to type change');
|
||||
getSectionIDs('repeating_moves', function(idArray) {
|
||||
console.log('Found move IDs:', idArray);
|
||||
idArray.forEach(function(id) {
|
||||
updateMoveSTAB(id);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function updateMoveSTAB(rowId) {
|
||||
const movePrefix = `repeating_moves_${rowId}_`;
|
||||
console.log('Processing move with prefix:', movePrefix);
|
||||
|
||||
getAttrs(['type_1', 'type_2', `${movePrefix}move_type`], function(values) {
|
||||
console.log('Retrieved values:', values);
|
||||
|
||||
const characterType1 = values.type_1 ? values.type_1.toLowerCase() : null;
|
||||
const characterType2 = values.type_2 ? values.type_2.toLowerCase() : null;
|
||||
const moveType = values[`${movePrefix}move_type`] ? values[`${movePrefix}move_type`].toLowerCase() : null;
|
||||
|
||||
console.log('Processed types - Char1:', characterType1, 'Char2:', characterType2, 'Move:', moveType);
|
||||
|
||||
let stabBonus = 0;
|
||||
|
||||
// Check if move type matches either character type
|
||||
if (moveType && moveType !== '-' && moveType !== 'trainer' &&
|
||||
(moveType === characterType1 || moveType === characterType2)) {
|
||||
stabBonus = 3;
|
||||
console.log('STAB match found! Setting bonus to 3');
|
||||
} else {
|
||||
console.log('No STAB match, bonus remains 0');
|
||||
}
|
||||
|
||||
// Set the calculated STAB value
|
||||
const updateObj = {};
|
||||
updateObj[`${movePrefix}move_stab_auto`] = stabBonus;
|
||||
|
||||
console.log('Setting attributes:', updateObj);
|
||||
setAttrs(updateObj);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
<rolltemplate class="sheet-rolltemplate-PMD">
|
||||
<div class="sheet-roll-container">
|
||||
|
||||
@@ -87,7 +188,7 @@
|
||||
<input type="hidden" name="attr_Endurance_calc" value="@{endurance} + @{endurancemod} + (@{endurance_bonus} * 2) + @{endurance_rank} + @{iron}" disabled="true"/>
|
||||
<input type="hidden" name="attr_SPECIAL_calc" value="@{special} + @{specialmod} + (@{special_bonus} * 2) + @{special_rank} + @{calcium}" disabled="true"/>
|
||||
<input type="hidden" name="attr_SPIRIT_calc" value="@{spirit} + @{spiritmod} + (@{spirit_bonus} * 2) + @{spirit_rank} + @{zinc}" disabled="true"/>
|
||||
<input type="hidden" name="attr_DEXTERITY_calc" value="@{dexterity} + @{dexteritymod} + (@{dexterity_bonus} * 2) + @{dexterity_rank} + @{carbos} - @{is_paralyzed}" disabled="true"/>
|
||||
<input type="hidden" name="attr_DEXTERITY_calc" value="@{dexterity} + @{dexteritymod} + (@{dexterity_bonus} * 2) + @{dexterity_rank} + @{carbos}" disabled="true"/>
|
||||
|
||||
<input type="hidden" name="attr_frame_calc" value="@{frame} + @{frame_bonus}" disabled="true"/>
|
||||
<input type="hidden" name="attr_intellect_calc" value="@{intellect} + @{intellect_bonus}" disabled="true"/>
|
||||
@@ -101,15 +202,19 @@
|
||||
|
||||
<input type='hidden' name='attr_set_Spiritense' value='0' />
|
||||
|
||||
<input type="hidden" name="attr_hitc_calc" value="8 + (@{DEXTERITY_calc}) + (@{evasion} * 2)" disabled="true"/>
|
||||
<input type="hidden" name="attr_para_dex" disabled="true"/>
|
||||
|
||||
<input type="hidden" name="attr_hp_calc" value="@{hp_base} + (@{hp_rank} * 3) + (@{hpup} * 3)" disabled="true"/>
|
||||
<input type="hidden" name="attr_hitc_calc" value="8 + (@{DEXTERITY_calc}) + (@{evasion} * 4)" disabled="true"/>
|
||||
|
||||
<input type="hidden" name="attr_hp_calc" value="@{hp_base} + (@{hp_rank} * 2) + (@{hpup} * 2)" disabled="true"/>
|
||||
|
||||
<input type="hidden" name="attr_crit0" value="1d20" disabled="true"/>
|
||||
<input type="hidden" name="attr_crit1" value="1d20cs>18" disabled="true"/>
|
||||
<input type="hidden" name="attr_crit2" value="1d20cs>11" disabled="true"/>
|
||||
<input type="hidden" name="attr_crit3" value="1d20cs>1" disabled="true"/>
|
||||
|
||||
<input type="hidden" name="attr_move_stab_auto" disabled="true"/>
|
||||
|
||||
|
||||
<input type="hidden" name="attr_move_generic_calc" value="@{generic_attribute} + @{generic_specialty}" />
|
||||
|
||||
@@ -117,9 +222,12 @@
|
||||
|
||||
<input type="hidden" class="contest-toggle" name="attr_rank_contest" value="0" />
|
||||
|
||||
<input type="hidden" name="attr_rank" value="@{Rank}" disabled="true"/>
|
||||
<input type="hidden" name="attr_rank" value="@{Rank}" />
|
||||
|
||||
<div class="sheet-wrapper">
|
||||
<input type="hidden" class="type-toggle" name="attr_type_1" value="trainer" />
|
||||
<input type="hidden" class="type2-toggle" name="attr_type_2" value="trainer" />
|
||||
|
||||
<input type="hidden" class="creature-toggle" name="attr_creature_mode" value="0" />
|
||||
<input type="hidden" class="PMD-toggle" name="attr_PMD_mode" value="0" />
|
||||
<div class='sheet-toggle-header'>
|
||||
@@ -143,13 +251,13 @@
|
||||
<strong><span name="attr_character_name" style="display:inline-block;font-size:2.2em;width:300px;"></span></strong>
|
||||
<span class="field-labeled" style="width:100px;text-align:center;margin-left:40px;">
|
||||
<select name="attr_rank" title="@{rank}" >
|
||||
<option value="1">Starter</option>
|
||||
<option value="2">Beginner</option>
|
||||
<option value="3">Amateur</option>
|
||||
<option value="4">Ace</option>
|
||||
<option value="5">Pro</option>
|
||||
<option value="6">Elite</option>
|
||||
<option value="7">Master</option>
|
||||
<option value="4">Starter</option>
|
||||
<option value="6">Beginner</option>
|
||||
<option value="8">Amateur</option>
|
||||
<option value="10">Ace</option>
|
||||
<option value="12">Pro</option>
|
||||
<option value="14">Elite</option>
|
||||
<option value="16">Master</option>
|
||||
</select>
|
||||
<span>Battle Rank</span>
|
||||
</span>
|
||||
@@ -389,18 +497,195 @@
|
||||
<!----------------------------------------------------
|
||||
Pokemon Weaknesses
|
||||
----------------------------------------------------->
|
||||
|
||||
|
||||
|
||||
<script type="text/worker">
|
||||
// Pokemon Type Effectiveness Auto-Calculator
|
||||
// This script automatically calculates weaknesses, resistances, and immunities based on selected types
|
||||
|
||||
// Type effectiveness chart - attacking type vs defending type
|
||||
// 2 = super effective, 0.5 = not very effective, 0 = no effect, 1 = normal
|
||||
const typeChart = {
|
||||
normal: { rock: 0.5, ghost: 0, steel: 0.5 },
|
||||
fire: { fire: 0.5, water: 0.5, grass: 2, ice: 2, bug: 2, rock: 0.5, dragon: 0.5, steel: 2 },
|
||||
water: { fire: 2, water: 0.5, grass: 0.5, ground: 2, rock: 2, dragon: 0.5 },
|
||||
electric: { water: 2, electric: 0.5, grass: 0.5, ground: 0, flying: 2, dragon: 0.5 },
|
||||
grass: { fire: 0.5, water: 2, grass: 0.5, poison: 0.5, flying: 0.5, bug: 0.5, rock: 2, ground: 2, steel: 0.5, dragon: 0.5 },
|
||||
ice: { fire: 0.5, water: 0.5, grass: 2, ice: 0.5, ground: 2, flying: 2, dragon: 2, steel: 0.5 },
|
||||
fighting: { normal: 2, ice: 2, poison: 0.5, psychic: 0.5, bug: 0.5, rock: 2, ghost: 0, dark: 2, steel: 2, flying: 0.5, fairy: 0.5 },
|
||||
poison: { grass: 2, poison: 0.5, ground: 0.5, rock: 0.5, ghost: 0.5, steel: 0, fairy: 2 },
|
||||
ground: { fire: 2, electric: 2, grass: 0.5, poison: 2, flying: 0, bug: 0.5, rock: 2, steel: 2 },
|
||||
flying: { electric: 0.5, grass: 2, ice: 0.5, fighting: 2, bug: 2, rock: 0.5, steel: 0.5 },
|
||||
psychic: { fighting: 2, poison: 2, psychic: 0.5, dark: 0, steel: 0.5 },
|
||||
bug: { fire: 0.5, grass: 2, fighting: 0.5, poison: 0.5, flying: 0.5, psychic: 2, ghost: 0.5, dark: 2, steel: 0.5, fairy: 0.5 },
|
||||
rock: { fire: 2, ice: 2, fighting: 0.5, ground: 0.5, flying: 2, bug: 2, steel: 0.5 },
|
||||
ghost: { normal: 0, psychic: 2, ghost: 2, dark: 0.5 },
|
||||
dragon: { dragon: 2, steel: 0.5, fairy: 0 },
|
||||
dark: { fighting: 0.5, psychic: 2, ghost: 2, dark: 0.5, fairy: 0.5 },
|
||||
steel: { fire: 0.5, water: 0.5, electric: 0.5, ice: 2, rock: 2, steel: 0.5, fairy: 2 },
|
||||
fairy: { fire: 0.5, poison: 0.5, fighting: 2, dragon: 2, dark: 2, steel: 0.5 }
|
||||
};
|
||||
|
||||
// Function to calculate type effectiveness for a defending Pokemon
|
||||
function calculateTypeEffectiveness(defendingType1, defendingType2) {
|
||||
// Convert types to lowercase to match the typeChart keys (if needed)
|
||||
const defType1 = defendingType1 ? defendingType1.toLowerCase() : null;
|
||||
const defType2 = defendingType2 ? defendingType2.toLowerCase() : null;
|
||||
|
||||
// Initialize arrays for different effectiveness levels
|
||||
const weaknesses = []; // 2x damage (or 4x for dual weakness)
|
||||
const resistances = []; // 0.5x damage (or 0.25x for dual resistance)
|
||||
const immunities = []; // 0x damage
|
||||
const superWeaknesses = []; // 4x damage (dual type weakness)
|
||||
const superResistances = [];// 0.25x damage (dual type resistance)
|
||||
|
||||
// Get all possible attacking types
|
||||
const allTypes = ['normal', 'fire', 'water', 'electric', 'grass', 'ice', 'fighting',
|
||||
'poison', 'ground', 'flying', 'psychic', 'bug', 'rock', 'ghost',
|
||||
'dragon', 'dark', 'steel', 'fairy'];
|
||||
|
||||
allTypes.forEach(attackingType => {
|
||||
let effectiveness1 = 1; // Default neutral effectiveness
|
||||
let effectiveness2 = 1; // Default neutral effectiveness
|
||||
|
||||
// Check effectiveness against first type - FIXED: properly handle 0 values
|
||||
if (defType1 && defType1 !== 'trainer' && typeChart[attackingType]) {
|
||||
effectiveness1 = typeChart[attackingType][defType1] !== undefined ? typeChart[attackingType][defType1] : 1;
|
||||
}
|
||||
|
||||
// Check effectiveness against second type (if exists) - FIXED: properly handle 0 values
|
||||
if (defType2 && defType2 !== 'trainer' && typeChart[attackingType]) {
|
||||
effectiveness2 = typeChart[attackingType][defType2] !== undefined ? typeChart[attackingType][defType2] : 1;
|
||||
}
|
||||
|
||||
// Calculate combined effectiveness
|
||||
const totalEffectiveness = effectiveness1 * effectiveness2;
|
||||
|
||||
// Categorize based on total effectiveness
|
||||
if (totalEffectiveness === 0) {
|
||||
immunities.push(attackingType);
|
||||
} else if (totalEffectiveness === 0.25) {
|
||||
superResistances.push(attackingType);
|
||||
} else if (totalEffectiveness === 0.5) {
|
||||
resistances.push(attackingType);
|
||||
} else if (totalEffectiveness === 2) {
|
||||
weaknesses.push(attackingType);
|
||||
} else if (totalEffectiveness === 4) {
|
||||
superWeaknesses.push(attackingType);
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
immunities,
|
||||
superResistances,
|
||||
resistances,
|
||||
weaknesses,
|
||||
superWeaknesses
|
||||
};
|
||||
}
|
||||
|
||||
// Function to format type lists for display
|
||||
function formatTypeList(types) {
|
||||
if (types.length === 0) return 'None';
|
||||
return types.map(type => type.charAt(0).toUpperCase() + type.slice(1)).join(', ');
|
||||
}
|
||||
|
||||
// Main function to update weakness/resistance fields
|
||||
function updateTypeEffectiveness() {
|
||||
getAttrs(['type_1', 'type_2'], function(values) {
|
||||
const type1 = values.type_1;
|
||||
const type2 = values.type_2;
|
||||
|
||||
// Skip calculation if no types are selected or if trainer is selected
|
||||
if (!type1 || type1 === 'trainer') {
|
||||
setAttrs({
|
||||
weakness: 'None',
|
||||
resistance: 'None',
|
||||
immunity: 'None'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Calculate effectiveness
|
||||
const effectiveness = calculateTypeEffectiveness(type1, type2);
|
||||
|
||||
// For debugging - show what we found
|
||||
let debugInfo = `Type1:${type1} Type2:${type2} Imm:${effectiveness.immunities.length}`;
|
||||
|
||||
// Format weakness string
|
||||
let weaknessText = 'None';
|
||||
if (effectiveness.superWeaknesses.length > 0) {
|
||||
weaknessText = formatTypeList(effectiveness.superWeaknesses) + ' (4x)';
|
||||
if (effectiveness.weaknesses.length > 0) {
|
||||
weaknessText += ', ' + formatTypeList(effectiveness.weaknesses) + ' (2x)';
|
||||
}
|
||||
} else if (effectiveness.weaknesses.length > 0) {
|
||||
weaknessText = formatTypeList(effectiveness.weaknesses);
|
||||
}
|
||||
|
||||
// Format resistance string
|
||||
let resistanceText = 'None';
|
||||
if (effectiveness.superResistances.length > 0) {
|
||||
resistanceText = formatTypeList(effectiveness.superResistances) + ' (0.25x)';
|
||||
if (effectiveness.resistances.length > 0) {
|
||||
resistanceText += ', ' + formatTypeList(effectiveness.resistances) + ' (0.5x)';
|
||||
}
|
||||
} else if (effectiveness.resistances.length > 0) {
|
||||
resistanceText = formatTypeList(effectiveness.resistances);
|
||||
}
|
||||
|
||||
// Format immunity string
|
||||
const immunityText = formatTypeList(effectiveness.immunities);
|
||||
|
||||
// Update the sheet attributes - temporarily show debug info in immunity field
|
||||
setAttrs({
|
||||
weakness: weaknessText,
|
||||
resistance: resistanceText,
|
||||
immunity: immunityText // Remove the debug info
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
// Event listeners for type changes
|
||||
on('change:type_1 change:type_2 sheet:opened', function(eventInfo) {
|
||||
updateTypeEffectiveness();
|
||||
});
|
||||
|
||||
// Additional event listener for creature mode changes to clear fields when switching to trainer
|
||||
on('change:creature_mode', function(eventInfo) {
|
||||
getAttrs(['creature_mode'], function(values) {
|
||||
// If switching to trainer mode, clear the type effectiveness fields
|
||||
if (values.creature_mode === "0") {
|
||||
setAttrs({
|
||||
weakness: 'None',
|
||||
resistance: 'None',
|
||||
immunity: 'None'
|
||||
});
|
||||
} else {
|
||||
// If switching to Pokemon mode, recalculate
|
||||
updateTypeEffectiveness();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<input type="hidden" class="creature-toggle" name="attr_creature_mode" value="0" />
|
||||
<div class="section resistance pokemon-only">
|
||||
<div class="field-labeled" style="width:100%;margin-bottom:2px;">
|
||||
<input type="text" name="attr_weakness" title="@{weakness}" placeholder="None" />
|
||||
<span>Weakness +3 Damage</span>
|
||||
<input type="text" name="attr_weakness" title="@{weakness}" placeholder="None" readonly />
|
||||
<span>Weakness +6 Damage</span>
|
||||
</div>
|
||||
<div class="field-labeled" style="width:100%;margin-bottom:2px;">
|
||||
<input type="text" name="attr_resistance" title="@{resistance}" placeholder="None"/>
|
||||
<span>Resistance -3 Damage</span>
|
||||
<input type="text" name="attr_resistance" title="@{resistance}" placeholder="None" readonly />
|
||||
<span>Resistance -6 Damage</span>
|
||||
</div>
|
||||
<div class="field-labeled" style="width:100%;margin-bottom:2px;">
|
||||
<input type="text" name="attr_immunity" title="@{immunity}" placeholder="None" />
|
||||
<input type="text" name="attr_immunity" title="@{immunity}" placeholder="None" readonly />
|
||||
<span>Immunity - No Damage</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -563,7 +848,7 @@
|
||||
<div class="hp-will">
|
||||
<strong style="display:inline-block;width:120px;text-align:right;">Hit Chance</strong>
|
||||
<span class="field-labeled" >
|
||||
<input type="number" name="attr_hitc" title="@{hitc}" value="@{hitc_calc}" disabled="true"/>
|
||||
<input type="number" name="attr_hitc" title="@{hitc}" value="@{hitc_calc} - @{para_dex}" disabled="true"/>
|
||||
<span title="">Current</span>
|
||||
</span>
|
||||
</div>
|
||||
@@ -625,12 +910,12 @@
|
||||
<div>
|
||||
<span style="display:inline-block;width:160px">
|
||||
<span style="display:inline-block;width:100%">
|
||||
<strong>Dexterity + Alert</strong>
|
||||
<strong>Dexterity</strong>
|
||||
</span>
|
||||
</span>
|
||||
<span style="display:inline-block;width:120px">
|
||||
<span class="field-labeled" style="display:inline-block;width:50px">
|
||||
<input type="number" name="attr_initiative_calc" title="@{initiative_calc}" value="(@{dexterity_calc})+@{alert}+@{initiative_mod}" disabled="true" />
|
||||
<input type="number" name="attr_initiative_calc" title="@{initiative_calc}" value="(@{dexterity_calc})+@{initiative_mod}-@{para_dex}" disabled="true" />
|
||||
<span title="">Total</span>
|
||||
</span>
|
||||
<span class="field-labeled" style="display:inline-block;width:60px">
|
||||
@@ -639,7 +924,7 @@
|
||||
</span>
|
||||
</span>
|
||||
<span style="display:inline-block;width:110px">
|
||||
<button type="roll" name="roll_initiative" value="@{whisper} &{template:default} {{name= Initiative }} {{character= @{character_name} }} {{roll=[[(@{initiative_calc}) + (1d20/100) &{tracker}]]}} {{tiebreaker=[[1d20]]}}">Initiative</button>
|
||||
<button type="roll" name="roll_initiative" value="@{whisper} &{template:default} {{name= Initiative }} {{character= @{character_name} }} {{roll=[[(@{initiative_calc}) + (1d20/100) &{tracker}]]}}">Initiative</button>
|
||||
</span>
|
||||
</div>
|
||||
<!-- Evade -->
|
||||
@@ -649,7 +934,7 @@
|
||||
</span>
|
||||
<span style="display:inline-block;width:120px">
|
||||
<span class="field-labeled" style="display:inline-block;width:50px">
|
||||
<input type="number" name="attr_evade_calc" title="@{evade_calc}" value="(@{dexterity_calc}) + @{evade_mod} - @{exhaustion}" disabled="true"/>
|
||||
<input type="number" name="attr_evade_calc" title="@{evade_calc}" value="(@{dexterity_calc}) + @{evade_mod} - @{exhaustion} - @{para_dex}" disabled="true"/>
|
||||
<span title="">Total</span>
|
||||
</span>
|
||||
<span class="field-labeled" style="display:inline-block;width:60px">
|
||||
@@ -736,33 +1021,33 @@
|
||||
<span class="field-labeled sheet-field-readonly" style="display:inline-block;width:120px;text-align:center">
|
||||
<select name="attr_pokeball_current" title="@{pokeball_current}">
|
||||
<option value="0">Pokeball (0)</option>
|
||||
<option value="2">Great Ball (2)</option>
|
||||
<option value="4">Ultra Ball (4)</option>
|
||||
<option value="7">Dive Ball (7)</option>
|
||||
<option value="8">Dream Ball (8)</option>
|
||||
<option value="6">Dusk Ball (6)</option>
|
||||
<option value="8">Fast Ball (8)</option>
|
||||
<option value="4">Great Ball (4)</option>
|
||||
<option value="8">Ultra Ball (8)</option>
|
||||
<option value="15">Dive Ball (15)</option>
|
||||
<option value="18">Dream Ball (18)</option>
|
||||
<option value="12">Dusk Ball (12)</option>
|
||||
<option value="18">Fast Ball (18)</option>
|
||||
<option value="0">Friend Ball (0)</option>
|
||||
<option value="0">Heal Ball (0)</option>
|
||||
<option value="12">Heavy Ball (12)</option>
|
||||
<option value="0">Level Ball (0)</option>
|
||||
<option value="16">Love Ball (16)</option>
|
||||
<option value="8">Lure Ball (8)</option>
|
||||
<option value="0">Level Ball (X)</option>
|
||||
<option value="42">Love Ball (42)</option>
|
||||
<option value="18">Lure Ball (18)</option>
|
||||
<option value="0">Luxury Ball (0)</option>
|
||||
<option value="8">Moon Ball (8)</option>
|
||||
<option value="10">Nest Ball (10)</option>
|
||||
<option value="7">Net Ball (7)</option>
|
||||
<option value="18">Moon Ball (18)</option>
|
||||
<option value="12">Nest Ball (12)</option>
|
||||
<option value="15">Net Ball (15)</option>
|
||||
<option value="0">Premier Ball (0)</option>
|
||||
<option value="10">Quick Ball (10)</option>
|
||||
<option value="7">Repeat Ball (7)</option>
|
||||
<option value="0">Timer Ball (0)</option>
|
||||
<option value="24">Quick Ball (24)</option>
|
||||
<option value="15">Repeat Ball (15)</option>
|
||||
<option value="0">Timer Ball (X)</option>
|
||||
</select>
|
||||
<span title="">Pokeball</span>
|
||||
</span>
|
||||
<strong>+ Mod</strong>
|
||||
<span style="display:inline-block;width:70px">
|
||||
<button type="roll" style="display: block; width: auto ; margin: 3px auto;padding: 3px 20px;"
|
||||
value="@{whisper} &{template:default}{{name= Pokeball Seal Check}}{{character= @{character_name} }}{{roll= [[1d20 + @{pokeball_current}]]}}">Catch</button>
|
||||
value="@{whisper} &{template:default}{{name= Pokeball Seal Check}}{{character= @{character_name} }} {{Variable Bonus= ?{Variable Bonus|0}}} {{roll= [[1d20 + @{pokeball_current} - @{pain_max} + ?{Variable Bonus}]]}}">Catch</button>
|
||||
</span>
|
||||
</div>
|
||||
<div class="conditions-row">
|
||||
@@ -787,7 +1072,7 @@
|
||||
<strong style="display:inline-block;width:80px">Frostbitten</strong>
|
||||
<input type="checkbox" name="attr_is_frostbitten" title="@{is_frostbitten}" value="1/2 Special Damage" />
|
||||
<strong style="display:inline-block;width:80px">Paralyzed</strong>
|
||||
<input type="checkbox" name="attr_is_paralyzed" title="@{is_paralyzed}" value="3" />
|
||||
<input type="checkbox" name="attr_is_paralyzed" title="@{is_paralyzed}" />
|
||||
</div>
|
||||
<div class="conditions-row">
|
||||
<strong style="display:inline-block;width:80px">Poisoned</strong>
|
||||
@@ -819,8 +1104,8 @@
|
||||
<span class="field-labeled" style="width:100px">
|
||||
<select name="attr_generic_specialty" title="@{generic_specialty}">
|
||||
<option value="0">-</option>
|
||||
<option value="@{brawl}">Brawl</option>
|
||||
<option value="@{athletics}">Athletics</option>
|
||||
<option value="@{Athletics}">Athletics</option>
|
||||
<option value="@{Finesse}">Finesse</option>
|
||||
<option value="@{deception}">Deception</option>
|
||||
<option value="@{science}">Science</option>
|
||||
<option value="@{nature}">Nature</option>
|
||||
@@ -877,7 +1162,44 @@
|
||||
<input type="number" name="attr_loyalty" title="@{loyalty}" min="0" value="2" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
<div style="display:inline-block;">
|
||||
<label style="display:block;text-align:center">Beautiful</label>
|
||||
<span class="field-labeled" style="display:block;width:100px;margin:0 auto;text-align:center">
|
||||
<input type="number" name="attr_Beautiful" title="@{Beautiful}" min="0" value="1" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
<div style="display:inline-block;">
|
||||
<label style="display:block;text-align:center">Clever</label>
|
||||
<span class="field-labeled" style="display:block;width:100px;margin:0 auto;text-align:center">
|
||||
<input type="number" name="attr_Clever" title="@{Clever}" min="0" value="1" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
<div style="display:inline-block;">
|
||||
<label style="display:block;text-align:center">Cool</label>
|
||||
<span class="field-labeled" style="display:block;width:100px;margin:0 auto;text-align:center">
|
||||
<input type="number" name="attr_Cool" title="@{Cool}" min="0" value="1" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
<div style="display:inline-block;">
|
||||
<label style="display:block;text-align:center">Cute</label>
|
||||
<span class="field-labeled" style="display:block;width:100px;margin:0 auto;text-align:center">
|
||||
<input type="number" name="attr_Cute" title="@{Cute}" min="0" value="1" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
<div style="display:inline-block;">
|
||||
<label style="display:block;text-align:center">Tough</label>
|
||||
<span class="field-labeled" style="display:block;width:100px;margin:0 auto;text-align:center">
|
||||
<input type="number" name="attr_Tough" title="@{Tough}" min="0" value="1" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
<div style="display:inline-block;">
|
||||
<input type="text" name="attr_extra_custom_name2" title="@{extra_custom_name2}" placeholder="Custom" style="margin-left:10px;text-align:center;width:80px;border:none;border-bottom:2px;" />
|
||||
<span class="field-labeled" style="display:block;width:100px;margin:0 auto;text-align:center">
|
||||
<input type="number" name="attr_extra_custom_2" title="@{extra_custom_2}" min="0" value="1" max="5" />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="PMD-only sheet-attitude-grid" style="width:70%;margin:0 auto;">
|
||||
<div style="display:inline-block;">
|
||||
@@ -930,14 +1252,14 @@
|
||||
<div class="skills-sub">
|
||||
<input type="hidden" class="creature-toggle" name="attr_creature_mode" value="0" />
|
||||
<div class="skills-col">
|
||||
<div>
|
||||
<strong>Brawl</strong>
|
||||
<input type="number" name="attr_brawl" title="@{brawl}" min="0" value="0" max="10" />
|
||||
</div>
|
||||
<div>
|
||||
<strong>Athletics</strong>
|
||||
<input type="number" name="attr_athletics" title="@{athletics}" min="0" value="0" max="10" />
|
||||
</div>
|
||||
<div>
|
||||
<strong>Finesse</strong>
|
||||
<input type="number" name="attr_finesse" title="@{finesse}" min="0" value="0" max="10" />
|
||||
</div>
|
||||
<div>
|
||||
<strong>Deception</strong>
|
||||
<input type="number" name="attr_deception" title="@{deception}" min="0" value="0" max="10" />
|
||||
@@ -1102,7 +1424,7 @@
|
||||
<span>Count</span>
|
||||
</span>
|
||||
<span class="field-labeled" style="width:70px">
|
||||
<input type="number" name="attr_potion_use_max" title="@{potion_use_max}" value="2" disabled="true" />
|
||||
<input type="number" name="attr_potion_use_max" title="@{potion_use_max}" value="4" disabled="true" />
|
||||
<span>HP Restored</span>
|
||||
</span>
|
||||
</div>
|
||||
@@ -1114,7 +1436,7 @@
|
||||
<span>Count</span>
|
||||
</span>
|
||||
<span class="field-labeled" style="width:70px">
|
||||
<input type="number" name="attr_superPotion_use_max" title="@{superPotion_use_max}" value="5" disabled="true" />
|
||||
<input type="number" name="attr_superPotion_use_max" title="@{superPotion_use_max}" value="12" disabled="true" />
|
||||
<span>HP Restored</span>
|
||||
</span>
|
||||
</div>
|
||||
@@ -1126,7 +1448,7 @@
|
||||
<span>Count</span>
|
||||
</span>
|
||||
<span class="field-labeled" style="width:70px">
|
||||
<input type="number" name="attr_hyperPotion_use_max" title="@{hyperPotion_use_max}" value="12" disabled="true" />
|
||||
<input type="number" name="attr_hyperPotion_use_max" title="@{hyperPotion_use_max}" value="24" disabled="true" />
|
||||
<span>HP Restored</span>
|
||||
</span>
|
||||
</div>
|
||||
@@ -1240,13 +1562,14 @@
|
||||
<div class="section moves">
|
||||
<label class="header">Moves</label>
|
||||
<fieldset class="repeating_moves">
|
||||
<div class="move-item">
|
||||
<span class="move-known-wrapper">
|
||||
<input type="checkbox" name="attr_move_known" title="Move Known">
|
||||
<span></span>
|
||||
</span>
|
||||
<input type="hidden" name="attr_move_accuracy_calc" value="@{move_accuracy_3} + @{move_accuracy_mod} + (@{accuracy} * 2)" disabled=true />
|
||||
<input type="hidden" name="attr_move_damage_calc" value="@{move_damage_attribute} + @{move_power} + @{move_flatmod} + @{move_has_stab}" />
|
||||
<div class="move-item">
|
||||
<span class="move-known-wrapper">
|
||||
<input type="checkbox" name="attr_move_known" title="Move Known">
|
||||
<span></span>
|
||||
</span>
|
||||
<input type="hidden" name="attr_move_accuracy_calc" value="@{rank} + @{move_accuracy_mod} + (@{accuracy} * 2)" disabled=true />
|
||||
<input type="hidden" name="attr_move_damage_calc" value="@{move_damage_attribute} + @{move_power} + @{move_flatmod} + @{move_stab_auto}" />
|
||||
<input type="hidden" name="attr_move_stab_auto" value="0" />
|
||||
<div class="move-header">
|
||||
<input type="hidden" name="attr_move_display_mode" class="move-display-toggle" value="0" />
|
||||
<div class="move-edit">
|
||||
@@ -1338,32 +1661,7 @@
|
||||
<div class="move-edit">
|
||||
<div>
|
||||
<label style="display:inline-block;width:70px">Accuracy</label>
|
||||
<select name="attr_move_accuracy_3" value="0" >
|
||||
<option value="0">-</option>
|
||||
<option value="@{brawl}">Brawl</option>
|
||||
<option value="@{athletics}">Athletics</option>
|
||||
<option value="@{deception}">Deception</option>
|
||||
<option value="@{science}">Science</option>
|
||||
<option value="@{nature}">Nature</option>
|
||||
<option value="@{channel}">Channel</option>
|
||||
<option value="@{performance}">Performance</option>
|
||||
<option value="@{intimidation}">Intimidation</option>
|
||||
<option value="@{medicine}">Medicine</option>
|
||||
<option value="@{insight}">Insight</option>
|
||||
<option value="@{alert}">Alert</option>
|
||||
<option value="@{stealth}">Stealth</option>
|
||||
<option value="@{empathy}">Empathy</option>
|
||||
<option value="@{lore}">Lore</option>
|
||||
<option value="@{custom}">Custom</option>
|
||||
<option value="4">Starter</option>
|
||||
<option value="6">Beginner</option>
|
||||
<option value="8">Amateur</option>
|
||||
<option value="10">Ace</option>
|
||||
<option value="12">Pro</option>
|
||||
<option value="14">Elite</option>
|
||||
<option value="16">Master</option>
|
||||
</select>
|
||||
</span><strong>+</strong><span class="field-labeled">
|
||||
</span><strong>Battle Rank + </strong><span class="field-labeled">
|
||||
<select name="attr_move_accuracy_crit" value="@{crit0}" >
|
||||
<option value="@{crit0}">Crit-Up 0</option>
|
||||
<option value="@{crit1}">Crit-Up 1</option>
|
||||
@@ -1375,6 +1673,7 @@
|
||||
<strong>+</strong>
|
||||
<span class="field-labeled" style="width: 70px; text-align:center" >
|
||||
<input type="number" name="attr_move_accuracy_mod" value="0"/>
|
||||
<span>Flat Mod</span>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
@@ -1398,7 +1697,6 @@
|
||||
<input type="number" name="attr_move_flatmod" min="0" value="0" />
|
||||
<span>Flat Mod</span>
|
||||
</span>
|
||||
<label style="vertical-align:middle">STAB <input type="checkbox" name="attr_move_has_stab" title="Move has STAB" value="3" /></label>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
@@ -1430,7 +1728,7 @@
|
||||
<div style="display:inline-block;margin-right:5px">
|
||||
<span style="font-size:10pt;font-weight:bolder;margin-right:10px;">Damage: </span>
|
||||
<button type="roll" name="roll_move_damage"
|
||||
value="@{whisper} &{template:default}{{character= @{character_name} }}{{name= @{move_name} Damage }}{{type=@{move_type}}}{{category= @{move_category} }} {{roll=[[@{move_power}+(@{move_power}d6>6f<2) + @{move_damage_attribute} + @{move_flatmod} + @{move_has_stab} ]] }} {{Extra Base Power=[[(?{Extra Base Power?|0}d6>6f<2) + ?{Extra Base Power?|0}]] }} {{Burned?= @{is_burned} }} {{Frostbitten?= @{is_frostbitten} }}" ></button>
|
||||
value="@{whisper} &{template:default}{{character= @{character_name} }}{{name= @{move_name} Damage }}{{type=@{move_type}}}{{category= @{move_category} }} {{roll=[[@{move_power}+(@{move_power}d6>6f<2) + @{move_damage_attribute} + @{move_flatmod} + @{move_stab_auto} ]] }} {{Extra Base Power=[[(?{Extra Base Power?|0}d6>6f<2) + ?{Extra Base Power?|0}]] }} {{Burned?= @{is_burned} }} {{Frostbitten?= @{is_frostbitten} }}" ></button>
|
||||
<span class="field-labeled" style="width:70px;text-align:center" >
|
||||
<input type="number" name="attr_move_power" min="0" value="0" />
|
||||
<span>Power</span>
|
||||
@@ -1469,4 +1767,4 @@
|
||||
<label><input type='checkbox' name='attr_creature_mode' value='1' /> Pokemon sheet</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
Before Width: | Height: | Size: 302 KiB After Width: | Height: | Size: 227 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
@@ -4,6 +4,6 @@
|
||||
"authors": "Brandon P.",
|
||||
"roll20userid": "625689",
|
||||
"preview": "Pokeventure.jpg",
|
||||
"instructions": "Designed for PokeVenture 1.5 - Clicking on the icons on the edge of section borders changes the mode of parts of the sheet. I've added some extra options in the Accuracy dropdown to allow for folks to use the optional rule that replaces Skills with Battle Ranks instead.",
|
||||
"instructions": "Designed for the PokeVenture 2.0 Full Release - Clicking on the icons on the edge of section borders changes the mode of parts of the sheet for Pokemon vs Trainer. Fetures include: Auto-Calcs for STAB have been added to damage rolls. Type Weaknesses, Resistances, and Immunities will now auto-populate based on a Pokemon's selected typing. Now that the system uses Battle Rank for accuracy, that will be automatically calculated based on the Battle Rank selected at the top of the Pokemon's sheet. Pokeball rolls have been improved to allow for variable modifiers for Level and Timer Balls. Border colors around the section boxes will now update according to a Pokemon's secondary typing.",
|
||||
"legacy": true
|
||||
}
|
||||
|
||||