summaryrefslogtreecommitdiff
path: root/src/map/skill-pools.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/skill-pools.cpp')
-rw-r--r--src/map/skill-pools.cpp121
1 files changed, 44 insertions, 77 deletions
diff --git a/src/map/skill-pools.cpp b/src/map/skill-pools.cpp
index 204036d..c225ebe 100644
--- a/src/map/skill-pools.cpp
+++ b/src/map/skill-pools.cpp
@@ -1,37 +1,20 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
+#include "skill.hpp"
-#include "../common/timer.hpp"
-#include "../common/nullpo.hpp"
-#include "../common/mt_rand.hpp"
-#include "magic.hpp"
+#include "../common/cxxstdio.hpp"
#include "battle.hpp"
-#include "clif.hpp"
-#include "intif.hpp"
-#include "itemdb.hpp"
-#include "map.hpp"
-#include "mob.hpp"
-#include "party.hpp"
#include "pc.hpp"
-#include "script.hpp"
-#include "skill.hpp"
-#include "../common/socket.hpp"
-#ifdef MEMWATCH
-#include "memwatch.hpp"
-#endif
+#include "../poison.hpp"
-int skill_pool_skills[MAX_POOL_SKILLS];
-int skill_pool_skills_size = 0;
+SkillID skill_pool_skills[MAX_POOL_SKILLS];
+int skill_pool_skills_size = 0;
-void skill_pool_register(int id)
+void skill_pool_register(SkillID id)
{
if (skill_pool_skills_size + 1 >= MAX_POOL_SKILLS)
{
- fprintf (stderr,
+ FPRINTF(stderr,
"Too many pool skills! Increase MAX_POOL_SKILLS and recompile.");
return;
}
@@ -39,22 +22,14 @@ void skill_pool_register(int id)
skill_pool_skills[skill_pool_skills_size++] = id;
}
-const char *skill_name (int skill)
-{
- if (skill > 0 && skill < MAX_SKILL_DB)
- return skill_names[skill].desc;
- else
- return NULL;
-}
-
-int skill_pool (struct map_session_data *sd, int *skills)
+int skill_pool(struct map_session_data *sd, SkillID *skills)
{
- int i, count = 0;
+ int i, count = 0;
for (i = 0; count < MAX_SKILL_POOL && i < skill_pool_skills_size; i++)
{
- int skill_id = skill_pool_skills[i];
- if (sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED)
+ SkillID skill_id = skill_pool_skills[i];
+ if (bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED))
{
if (skills)
skills[count] = skill_id;
@@ -65,78 +40,70 @@ int skill_pool (struct map_session_data *sd, int *skills)
return count;
}
-void skill_pool_empty (struct map_session_data *sd)
-{
- int i;
-
- for (i = 0; i < skill_pool_skills_size; i++)
- {
- int skill_id = skill_pool_skills[i];
- sd->status.skill[skill_id].flags = 0;
- }
-}
-
-int skill_pool_size (struct map_session_data *sd)
+int skill_pool_size(struct map_session_data *sd)
{
- return skill_pool (sd, NULL);
+ return skill_pool(sd, NULL);
}
-int skill_pool_max (struct map_session_data *sd)
+int skill_pool_max(struct map_session_data *sd)
{
- return sd->status.skill[TMW_SKILLPOOL].lv;
+ return sd->status.skill[SkillID::TMW_SKILLPOOL].lv;
}
-int skill_pool_activate (struct map_session_data *sd, int skill_id)
+int skill_pool_activate(struct map_session_data *sd, SkillID skill_id)
{
- if (sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED)
+ if (bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED))
return 0; // Already there
- else if (sd->status.skill[skill_id].id == skill_id // knows the skill
- && (skill_pool_size (sd) < skill_pool_max (sd)))
+ else if (sd->status.skill[skill_id].lv
+ && (skill_pool_size(sd) < skill_pool_max(sd)))
{
- sd->status.skill[skill_id].flags |= SKILL_POOL_ACTIVATED;
- pc_calcstatus (sd, 0);
- MAP_LOG_PC (sd, "SKILL-ACTIVATE %d %d %d", skill_id,
- sd->status.skill[skill_id].lv, skill_power (sd,
- skill_id));
+ sd->status.skill[skill_id].flags |= SkillFlags::POOL_ACTIVATED;
+ pc_calcstatus(sd, 0);
+ MAP_LOG_PC(sd, "SKILL-ACTIVATE %d %d %d",
+ skill_id, sd->status.skill[skill_id].lv,
+ skill_power(sd, skill_id));
return 0;
}
return 1; // failed
}
-int skill_pool_is_activated (struct map_session_data *sd, int skill_id)
+bool skill_pool_is_activated(struct map_session_data *sd, SkillID skill_id)
{
- return sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED;
+ return bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED);
}
-int skill_pool_deactivate (struct map_session_data *sd, int skill_id)
+int skill_pool_deactivate(struct map_session_data *sd, SkillID skill_id)
{
- if (sd->status.skill[skill_id].flags & SKILL_POOL_ACTIVATED)
+ if (bool(sd->status.skill[skill_id].flags & SkillFlags::POOL_ACTIVATED))
{
- sd->status.skill[skill_id].flags &= ~SKILL_POOL_ACTIVATED;
- MAP_LOG_PC (sd, "SKILL-DEACTIVATE %d", skill_id);
- pc_calcstatus (sd, 0);
+ sd->status.skill[skill_id].flags &= ~SkillFlags::POOL_ACTIVATED;
+ MAP_LOG_PC(sd, "SKILL-DEACTIVATE %d", skill_id);
+ pc_calcstatus(sd, 0);
return 0;
}
return 1;
}
-int skill_stat (int skill_id)
+// Yields the stat associated with a skill.
+// Returns zero if none, or SP::STR, SP::VIT, ... otherwise
+static
+SP skill_stat(SkillID skill_id)
{
return skill_db[skill_id].stat;
}
-int skill_power (struct map_session_data *sd, int skill_id)
+int skill_power(struct map_session_data *sd, SkillID skill_id)
{
- int stat = skill_stat (skill_id);
- int stat_value, skill_value;
- int result;
+ SP stat = skill_stat(skill_id);
+ int stat_value, skill_value;
+ int result;
- if (stat == 0 || !skill_pool_is_activated (sd, skill_id))
+ if (stat == SP::ZERO || !skill_pool_is_activated(sd, skill_id))
return 0;
- stat_value = battle_get_stat (stat, &(sd->bl));
+ stat_value = battle_get_stat(stat, &(sd->bl));
skill_value = sd->status.skill[skill_id].lv;
if ((skill_value * 10) - 1 > stat_value)
@@ -149,10 +116,10 @@ int skill_power (struct map_session_data *sd, int skill_id)
return result;
}
-int skill_power_bl (struct block_list *bl, int skill)
+int skill_power_bl(struct block_list *bl, SkillID skill)
{
- if (bl->type == BL_PC)
- return skill_power ((struct map_session_data *) bl, skill);
+ if (bl->type == BL::PC)
+ return skill_power((struct map_session_data *) bl, skill);
else
return 0;
}