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.
This commit is contained in:
Self-Help-dev
2025-09-30 15:22:53 -04:00
parent 23c9ee2c76
commit af9680b94d
18 changed files with 511 additions and 110 deletions
+125 -22
View File
@@ -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;
+385 -87
View File
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

+1 -1
View File
@@ -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
}