Group Toolbar Menu

Forums » Suggestions » Move power

I was curious, for the sake of this rp, would moves like ember and flamethrower have effectively the same base power?
I believe they would, as that was my balancing decision. Otherwise each move would have its own dice to roll and every Pokemon would have their own dice pools and leveling up would start throwing so many numbers everywhere that it was much more complicated then it needed to be.

I designed the game to be easy enough for new dice rollers to grasp, but so far, I have attracted new dice rollers, but I could not hold onto them.
I am thinking of ways to do Hyper Beam and Solar Beam, and Bide. Perhaps even Flamethrower.

Perhaps Flamethrower can target Pokemon in a cone, which would make it different than ember, which is single target.

But if I were to change one normal attack into something else, then I would have to make every move unique. Hyper Beam, Solar Beam, and Bide are a few different moves that may have special rules for them, just because they affect the Pokemon using them.

For now, I think the fore mentioned moves will be the exception to regular moves such as Flamethrower and Ember. The uniform balance is to make the game less about combat and more about the story telling of combat. And story telling in general.

But! Flamethrower and Ember do have different effects in Pokemon Contests.
Pokemon moves can also have different out of combat abilities. Like, if the Trainer is on a ship and the ship collides into some icebergs, they could command their Vulpix to melt the ice with their flamethrower.

It would be rather difficult to melt an iceberg with the much smaller ember. And since story telling is the focus, different moves can mean different outcomes of the story.
Perhaps you could do it like this. Moves with a power of 1-64 give no dice modifier, moves with a base power of 65-80 give a +1 modifier and moves stronger then that give a +2.
Oh, I like that! It fits in with my current 2 pattern and its a generality that can be applied to all Pokemon equally, without over shadowing low level competitors. I think I might implement that ruling!
"use strict"; (function() { const TYPING_DELAY = 500; const MAX_AGE_HOURS = 48; let typingTimers = {}; function isLocalStorageAvailable() { try { const test = '__localStorage_test__'; localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch(e) { console.warn('localStorage is not available:', e); return false; } } function saveContentDraft(key, value) { if (!isLocalStorageAvailable()) return; try { const data = { content: value, timestamp: Date.now() }; localStorage.setItem(key, JSON.stringify(data)); } catch(e) { console.error('Failed to save draft:', e); } } function restoreContentDraft(key) { if (!isLocalStorageAvailable()) return null; try { const stored = localStorage.getItem(key); if (!stored) return null; const data = JSON.parse(stored); // Check if draft is too old const age = Date.now() - data.timestamp; if (age > MAX_AGE_HOURS * 60 * 60 * 1000) { localStorage.removeItem(key); return null; } return data.content; } catch(e) { console.error('Failed to restore draft:', e); return null; } } // Clear specific draft function clearContentDraft(key) { if (!isLocalStorageAvailable()) return; try { localStorage.removeItem(key); } catch(e) { console.error('Failed to clear draft:', e); } } // Show notification to user function showContentRecoveryNotification(element) { const notification = document.createElement('div'); notification.style.cssText = 'padding: 10px; margin-bottom: 10px; background-color: #d4edda; border: 1px solid #c3e6cb; color: #155724; border-radius: 4px; font-size: 14px;'; notification.innerHTML = '✓ Your previous draft has been restored. Dismiss'; // Insert before the element element.parentNode.insertBefore(notification, element); // Dismiss on click notification.querySelector('a').addEventListener('click', function(e) { e.preventDefault(); notification.remove(); }); // Auto-dismiss after 10 seconds setTimeout(() => { if (notification.parentNode) { notification.remove(); } }, 10000); } // Initialize auto-save for an element function initAutoSave(element, storageKey) { if (!element || !storageKey) return; // Restore saved content on page load const savedContent = restoreContentDraft(storageKey); if (savedContent && savedContent !== element.value) { element.value = savedContent; showContentRecoveryNotification(element); } // Save on user input (debounced) function handleInput() { clearTimeout(typingTimers[storageKey]); typingTimers[storageKey] = setTimeout(function() { saveContentDraft(storageKey, element.value); }, TYPING_DELAY); } element.addEventListener('input', handleInput); element.addEventListener('change', handleInput); // Clear draft on form submission const form = element.closest('form'); if (form) { form.addEventListener('submit', function() { clearContentDraft(storageKey); }); } } function cleanupOldContentDrafts() { if (!isLocalStorageAvailable()) return; try { const keys = Object.keys(localStorage); const now = Date.now(); keys.forEach(key => { if (key.startsWith('draft_')) { try { const stored = localStorage.getItem(key); const data = JSON.parse(stored); if (data.timestamp && (now - data.timestamp) > MAX_AGE_HOURS * 60 * 60 * 1000) { localStorage.removeItem(key); } } catch(e) { // Invalid data, remove it localStorage.removeItem(key); } } }); } catch(e) { console.error('Failed to cleanup old drafts:', e); } } // Initialize on DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } function init() { cleanupOldContentDrafts(); // Auto-initialize elements with data-draft-key attribute document.querySelectorAll('[data-draft-key]').forEach(function(element) { const draftKey = element.getAttribute('data-draft-key'); initAutoSave(element, draftKey); }); } // Expose API for manual initialization window.DraftContentRecovery = { init: initAutoSave, save: saveContentDraft, restore: restoreContentDraft, clear: clearContentDraft }; })();