diff --git a/public/effect.js b/public/effect.js
new file mode 100644
index 0000000..44b6b85
--- /dev/null
+++ b/public/effect.js
@@ -0,0 +1,112 @@
+// Passive effects (just does stuff)
+let flight = {};
+let reach = {};
+let equipped = {}; // Entity x has [a,b,c] equipped to it
+
+
+// Actives to add passives
+function giveFlight(card){
+ flight[card] = true;
+}
+function removeFlight(card){
+ // If the card has flight delete entity component
+ if(card in flight){
+ delete flight[card];
+ return true;
+ }
+ return false;
+}
+
+// Active
+function equip(){
+ // Equip card to another unit
+
+}
+function unequip(){
+ // Remove card from its equipped to unit
+
+}
+
+function heal(healAmount, healPlayer){
+ // For each heal 1..4
+ for(let i = 0; i < healAmount; i++){
+ // Loop shield
+ let items = this.getItems('shield', healPlayer, null, null);
+ for(let item = 0; item < items.length; item++){
+
+ let itemKey = items[item];
+ // If a shield is tapped, untap it to 'heal'
+ if(board.isTapped(itemKey)){
+ board.untapCard(itemKey);
+ }
+
+ }
+ }
+}
+
+function hurt(hurtDamage, hurtTarget = null, hurtPlayer = null){
+ // Deal X000 damage to unit this turn, or deal Y to opponent's shield
+
+ // Set player/element
+ if(hurtPlayer == null && hurtTarget != null){
+ hurtPlayer = player[hurtTarget];
+ hurtElement = boardElement[hurtTarget];
+ }else{
+ hurtElement = 'shield'
+ }
+
+ switch(hurtElement){
+ case 'board':
+ // TODO: Make temp damage this turn as well
+ if(hurtDamage >= cardAttack[hurtTarget][0]){
+ board.sendToGrave(hurtTarget);
+ }
+ break;
+
+ case 'shield':
+ let destroyCount = cardAttackToShieldDamage(hurtDamage);
+ console.log(destroyCount);
+ // TODO: loop player's shield, tap if they can be tapped, destroy
+ // if all already tapped
+
+ // While there's still damage to deal
+ while(destroyCount > 0){
+
+ // Keep looping through the shield belonging to target user
+ let items = board.getItems('shield', hurtPlayer, null, null);
+ let tappedItems = board.getItems('shield', hurtPlayer, 'tapped', null);
+
+ for(let item = 0; item < items.length; item++){
+
+ // If nothing more to destroy, exit loop
+ if(destroyCount <= 0){ break; }
+
+ let itemKey = items[item];
+ console.log(itemKey);
+ console.log(cardStatus[itemKey]);
+
+ // If there's anything to tap, tap it
+ if(cardStatus[itemKey] == null){
+ console.log('been tapped');
+ board.tapCard(itemKey);
+ destroyCount--;
+ continue;
+ }
+
+ // If there's nothing to tap, destroy it
+ if(items.length == tappedItems.length){
+ console.log('been destroyed');
+ board.destroyShield(itemKey);
+ destroyCount--;
+ continue;
+ }
+
+ }
+ }
+
+ board.drawBoard();
+ break; // end case 'shield'
+
+ }
+}
+
diff --git a/public/helper.js b/public/helper.js
new file mode 100644
index 0000000..bb995ac
--- /dev/null
+++ b/public/helper.js
@@ -0,0 +1,6 @@
+function cardAttackToShieldDamage(attack){
+ if (attack >= 10000){ return 3; }
+ if (attack >= 5001){ return 2; }
+ if (attack >= 1){ return 1; }
+}
+
diff --git a/public/index.html b/public/index.html
index d0ccafc..1bed34f 100644
--- a/public/index.html
+++ b/public/index.html
@@ -69,6 +69,8 @@
+
+