class CheapWeapon { String name; float reach_mult; float knockback_mult; float rad; int speed; int charge_time; int cooldown; float weight = 1.0; int[] damage = new int[]{1, 1, 1, 2}; float[] sweep = new float[]{0.25, -0.65, 1, -0.5}; PVector[] lunge; PVector[] knockback; color fade1; color fade2; AudioSample sound; } class Stick extends CheapWeapon { Stick() { name = "STICK"; reach_mult = 2; rad = 0.75; knockback_mult = 1; speed = 30; charge_time = 90; cooldown = 20; damage = new int[]{1, 1, 1, 1}; sweep = new float[]{0.5, -0.75, 1, -0.5}; lunge = new PVector[]{PV(1.5,0), PV(1.5,0), PV(1.5,0), PV(5,0)}; knockback = new PVector[]{PV(3,-1), PV(3,-1), PV(3,-1), PV(5,-3)}; fade1 = color(128, 64, 32); fade2 = color(192, 128, 64); sound = stick_sound; } }; class Club extends CheapWeapon { Club() { name = "CLUB"; weight = 1.3; reach_mult = 2; rad = 0.85; knockback_mult = 1; speed = 60; charge_time = 90; cooldown = 60; damage = new int[]{2, 2, 3}; sweep = new float[]{0.75, -0.75, 1}; lunge = new PVector[]{PV(2,0), PV(2,0), PV(0,-1)}; knockback = new PVector[]{PV(4,-2), PV(4,-2), PV(6,0)}; fade1 = color(128, 64, 32); fade2 = color(192, 128, 64); sound = club_sound; } }; class Fang extends CheapWeapon { Fang() { name = "FANG"; weight = 1; reach_mult = 1; rad = 0.65; knockback_mult = 1; speed = 40; charge_time = 90; cooldown = 100; damage = new int[]{2, 2, 2}; sweep = new float[]{0.6, 0.6, -0.6}; lunge = new PVector[]{PV(4,0), PV(4,0), PV(6.0, -1)}; knockback = new PVector[]{PV(2,0), PV(2,0), PV(3,0)}; fade1 = color(200, 200, 150); fade2 = color(230, 230, 210); sound = club_sound; } }; class Claw extends CheapWeapon { Claw() { name = "DRAGON CLAW"; weight = 1; reach_mult = 1.2; rad = 0.75; knockback_mult = 1; speed = 40; charge_time = 90; cooldown = 30; damage = new int[]{2, 2, 4}; sweep = new float[]{1, 1, 1}; lunge = new PVector[]{PV(2,0),PV(2,0), PV(2.0,0)}; knockback = new PVector[]{PV(2,0), PV(2,0), PV(0,0)}; fade1 = color(255, 200, 220); fade2 = color(255, 255, 255); sound = stick_sound; } }; class Fireball extends CheapWeapon { Fireball() { name = "FIREBALL WAND"; weight = 1; reach_mult = 8; rad = 1.7; knockback_mult = 1; speed = 100; charge_time = 90; cooldown = 150; damage = new int[]{2}; sweep = new float[]{0.15}; lunge = new PVector[]{PV(0,0)}; knockback = new PVector[]{PV(0,-7)}; fade1 = color(255, 128, 0); fade2 = color(255, 255, 64); sound = club_sound; } }; class Spook extends CheapWeapon { Spook() { name = "SPOOK"; weight = 1; reach_mult = 0; rad = 1.2; knockback_mult = 1; speed = 10; charge_time = 90; cooldown = 80; damage = new int[]{1,2}; sweep = new float[]{0, 0}; lunge = new PVector[]{PV(0,0), PV(0,0)}; knockback = new PVector[]{PV(3,-3), PV(5,-5)}; fade1 = color(128, 192, 255); fade2 = color(192, 230, 255); sound = ghost_sound; } }; class Knife extends CheapWeapon { Knife() { name = "KNIFE"; reach_mult = 1.7; rad = 0.5; knockback_mult = 1; speed = 23; charge_time = 70; cooldown = 20; damage = new int[]{1, 1, 1, 1, 2}; sweep = new float[]{0.5, -0.5, 0.5, -0.5, -1}; lunge = new PVector[]{PV(1.0,0), PV(1.0,0), PV(1.0,0), PV(1.0, 0), PV(-2,-2)}; knockback = new PVector[]{PV(2,-1), PV(2,-1), PV(2,-1), PV(2,-1), PV(2,-4)}; fade1 = color(128, 128, 160); fade2 = color(230, 230, 230); sound = knife_sound; } }; class Nothing extends CheapWeapon { Nothing() { name = "<3"; reach_mult = 2; rad = 0.75; knockback_mult = 1; speed = 30; charge_time = 90; damage = new int[]{}; sweep = new float[]{0.5, -0.75, 1, -0.5}; lunge = new PVector[]{PV(1.5,0), PV(1.5,0), PV(1.5,0), PV(5,0)}; fade1 = color(128, 64, 32); fade2 = color(192, 128, 64); sound = stick_sound; } }; Hitbox cheapGetbox(float x_scale, float y_scale, float box_radius, float progress) { // float progress = frame / (float)active_time; float sweep = 0.75; float radmag = sin(progress*PI); PVector xbasis = new PVector(1, 0); PVector ybasis = new PVector(0, 1); xbasis.mult(x_scale); ybasis.mult(y_scale); float angle=(-sweep/2 + sweep*progress)*TWO_PI; xbasis.mult(cos(angle)); ybasis.mult(sin(angle)); PVector box_center = PVector.add(xbasis, ybasis); return new Hitbox(box_center, radmag*box_radius); }