diff --git a/Crawler/LightningBolt.cpp b/Crawler/LightningBolt.cpp index 69cb861d..f32eef88 100644 --- a/Crawler/LightningBolt.cpp +++ b/Crawler/LightningBolt.cpp @@ -15,21 +15,22 @@ LightningBolt::LightningBolt(vf2d pos,vf2d vel,float radius,int damage,bool uppe void LightningBolt::Update(float fElapsedTime){ lastParticleSpawn=std::max(0.f,lastParticleSpawn-fElapsedTime); + uint8_t brightness=uint8_t("Wizard.Ability 2.ParticleColorRange"_FRange); if(lastParticleSpawn==0){ - lastParticleSpawn=0.01; - uint8_t brightness=uint8_t(util::random(100)+150); + lastParticleSpawn="Wizard.Ability 2.ParticleFrequency"_F; + uint8_t brightness=uint8_t("Wizard.Ability 2.ParticleColorRange"_FRange); switch(rand()%4){ case 0:{ - game->AddEffect(std::make_unique(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE1,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); + game->AddEffect(std::make_unique(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE1,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); }break; case 1:{ - game->AddEffect(std::make_unique(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE2,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); + game->AddEffect(std::make_unique(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE2,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); }break; case 2:{ - game->AddEffect(std::make_unique(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE3,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); + game->AddEffect(std::make_unique(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE3,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); }break; case 3:{ - game->AddEffect(std::make_unique(pos+vf2d{util::random(12)-6,util::random(12)-6},util::random(0.1),AnimationState::LIGHTNING_BOLT_PARTICLE4,upperLevel,util::random(0.5)+1,0.1,vel*(util::random(0.1)+0.9),Pixel{brightness,brightness,brightness})); + game->AddEffect(std::make_unique(pos+vf2d{"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange,"Wizard.Ability 2.ParticleSpawnRadiusRange"_FRange},"Wizard.Ability 2.ParticleLifetimeRange"_FRange,AnimationState::LIGHTNING_BOLT_PARTICLE4,upperLevel,"Wizard.Ability 2.ParticleSizeRange"_FRange,"Wizard.Ability 2.ParticleFadeoutTime"_F,vel*"Wizard.Ability 2.ParticleSpeedMultRange"_FRange,Pixel{brightness,brightness,brightness})); }break; } } @@ -38,25 +39,25 @@ void LightningBolt::Update(float fElapsedTime){ bool LightningBolt::PlayerHit(Player*player) { deactivated=true; - fadeOutTime=0.2f; - game->AddEffect(std::make_unique(player->GetPos(),0.3,AnimationState::LIGHTNING_SPLASH,upperLevel,player->GetSizeMult(),0.25,vf2d{},WHITE,util::random(PI))); + fadeOutTime="Wizard.Ability 2.BulletFadeoutTime"_F; + game->AddEffect(std::make_unique(player->GetPos(),"Wizard.Ability 2.SplashLifetime"_F,AnimationState::LIGHTNING_SPLASH,upperLevel,player->GetSizeMult(),"Wizard.Ability 2.SplashFadeoutTime"_F,vf2d{},WHITE,"Wizard.Ability 2.SplashRotationRange"_FRange)); return false; } bool LightningBolt::MonsterHit(Monster& monster) { deactivated=true; - fadeOutTime=0.2f; - game->AddEffect(std::make_unique(monster.GetPos(),0.3,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),0.25,vf2d{},WHITE,util::random(PI))); + fadeOutTime="Wizard.Ability 2.BulletFadeoutTime"_F; + game->AddEffect(std::make_unique(monster.GetPos(),"Wizard.Ability 2.SplashLifetime"_F,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),"Wizard.Ability 2.SplashFadeoutTime"_F,vf2d{},WHITE,"Wizard.Ability 2.SplashRotationRange"_FRange)); int targetsHit=0; for(Monster&m:MONSTER_LIST){ if(&m==&monster||monster.OnUpperLevel()!=m.OnUpperLevel())continue; geom2d::linelineToTarget=geom2d::line(monster.GetPos(),m.GetPos()); float dist=lineToTarget.length(); - if(dist<=72){ - if(m.Hurt(game->GetPlayer()->GetAttack()*2,OnUpperLevel())){ - EMITTER_LIST.push_back(std::make_unique(LightningBoltEmitter(monster.GetPos(),m.GetPos(),0.05,0.25,upperLevel))); - game->AddEffect(std::make_unique(m.GetPos(),0.5,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),0.25,vf2d{},WHITE,util::random(PI))); + if(dist<="Wizard.Ability 2.LightningChainDistance"_F/100*12){ + if(m.Hurt(game->GetPlayer()->GetAttack()*"Wizard.Ability 2.LightningChainDamageMult"_F,OnUpperLevel())){ + EMITTER_LIST.push_back(std::make_unique(LightningBoltEmitter(monster.GetPos(),m.GetPos(),"Wizard.Ability 2.LightningChainFrequency"_F,"Wizard.Ability 2.LightningChainLifetime"_F,upperLevel))); + game->AddEffect(std::make_unique(m.GetPos(),"Wizard.Ability 2.LightningChainSplashLifetime"_F,AnimationState::LIGHTNING_SPLASH,upperLevel,monster.GetSizeMult(),"Wizard.Ability 2.LightningChainSplashFadeoutTime"_F,vf2d{},WHITE,"Wizard.Ability 2.LightningChainSplashRotationRange"_FRange)); targetsHit++; } } diff --git a/Crawler/Version.h b/Crawler/Version.h index adc5e57f..4e7a7c95 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -2,7 +2,7 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -#define VERSION_BUILD 914 +#define VERSION_BUILD 920 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Crawler/assets/config/classes/Wizard.txt b/Crawler/assets/config/classes/Wizard.txt index 55077967..34e7c777 100644 --- a/Crawler/assets/config/classes/Wizard.txt +++ b/Crawler/assets/config/classes/Wizard.txt @@ -139,10 +139,39 @@ Wizard DamageMult = 4 BulletSpeed = 230 - Radius = 100 + Radius = 150 #Coloring of the bullet. BulletColor = 255, 255, 255, 255 + + BulletFadeoutTime = 0.2 + + # How far away to look for nearby enemies to chain lightning to. + LightningChainDistance = 600 + # Damage multiplier for enemies hit by lightning chain. + LightningChainDamageMult = 2 + # How fast the chain lightning chases its target (Frequency updates in seconds). + LightningChainFrequency = 0.05 + LightningChainLifetime = 0.25 + + LightningChainSplashLifetime = 0.5 + LightningChainSplashFadeoutTime = 0.25 + LightningChainSplashRotationRange = 0,3.14159 + + # How long the splash effect lasts. + SplashLifetime = 0.3 + SplashFadeoutTime = 0.25 + SplashRotationRange = 0,3.14159 + + # How much time passes before another particle spawns from the bullet. + ParticleFrequency = 0.01 + # The darkest and brightest amount this particle will be colored (applied to R,G,and B components simultaneously) + ParticleColorRange = 150,250 + ParticleSpawnRadiusRange = -24,24 + ParticleLifetimeRange = 0,0.1 + ParticleSizeRange = 1,1.5 + ParticleFadeoutTime = 0.4 + ParticleSpeedMultRange = 0.9,1 } Ability 3 { diff --git a/Crawler/assets/config/configuration.txt b/Crawler/assets/config/configuration.txt index 098bab37..2f4e114c 100644 --- a/Crawler/assets/config/configuration.txt +++ b/Crawler/assets/config/configuration.txt @@ -16,4 +16,4 @@ class_directory = classes/ class_list = Warrior, Thief, Ranger, Trapper, Wizard, Witch # Whether or not to show individual data accesses from config data structure. -debug_access_options = 1 \ No newline at end of file +debug_access_options = 0 \ No newline at end of file diff --git a/x64/Release Desktop/Crawler.exe b/x64/Release Desktop/Crawler.exe index 964be80d..886583e9 100644 Binary files a/x64/Release Desktop/Crawler.exe and b/x64/Release Desktop/Crawler.exe differ