From 31544d2b6973931be7fdec898ea3672bea831de2 Mon Sep 17 00:00:00 2001
From: Ben Longbons <b.r.longbons@gmail.com>
Date: Thu, 30 Aug 2012 17:37:27 -0700
Subject: Fix compiler errors of C++ conversion

---
 GNUmakefile                          |   14 +-
 make.defs                            |    4 +-
 src/char/GNUmakefile                 |    4 +-
 src/char/char.cpp                    |  203 ++----
 src/char/char.hpp                    |   11 +-
 src/char/int_guild.cpp               |   77 +-
 src/char/int_party.cpp               |   54 +-
 src/char/int_storage.cpp             |   17 +
 src/char/inter.cpp                   |   27 +-
 src/char/inter.hpp                   |    3 +-
 src/common/GNUmakefile               |    4 +-
 src/common/core.cpp                  |    6 +-
 src/common/db.hpp                    |    3 +
 src/common/grfio.cpp                 |    6 +-
 src/common/md5calc.cpp               |   23 +-
 src/common/md5calc.hpp               |    4 +-
 src/common/mmo.hpp                   |    8 +-
 src/common/mt_rand.cpp               |    1 +
 src/common/nullpo.cpp                |   17 +-
 src/common/utils.cpp                 |   97 +++
 src/common/utils.hpp                 |    8 +
 src/ladmin/GNUmakefile               |    4 +-
 src/ladmin/ladmin.cpp                |  189 ++---
 src/login/GNUmakefile                |    4 +-
 src/login/login.cpp                  |  257 +++----
 src/map/GNUmakefile                  |    4 +-
 src/map/atcommand.cpp                |  856 ++++++++++------------
 src/map/atcommand.hpp                |    5 +-
 src/map/battle.cpp                   |    7 +
 src/map/chat.cpp                     |   12 +-
 src/map/chat.hpp                     |   14 +-
 src/map/chrif.cpp                    |   42 +-
 src/map/chrif.hpp                    |    2 +-
 src/map/clif.cpp                     |  327 ++++++---
 src/map/clif.hpp                     |   41 +-
 src/map/guild.cpp                    |   19 +-
 src/map/guild.hpp                    |   12 +-
 src/map/intif.cpp                    |   83 ++-
 src/map/intif.hpp                    |   16 +-
 src/map/itemdb.cpp                   |   15 +-
 src/map/itemdb.hpp                   |    5 +-
 src/map/magic-expr-eval.hpp          |    5 +-
 src/map/magic-expr.cpp               |   34 +-
 src/map/magic-expr.hpp               |    8 +-
 src/map/magic-interpreter-base.cpp   |    4 +-
 src/map/magic-interpreter-parser.ypp |   29 +-
 src/map/magic-interpreter.hpp        |    6 +-
 src/map/magic-stmt.cpp               |   19 +-
 src/map/magic.cpp                    |    2 -
 src/map/magic.hpp                    |    4 +-
 src/map/map.cpp                      |   35 +-
 src/map/map.hpp                      |   28 +-
 src/map/mob.cpp                      |  144 ++--
 src/map/mob.hpp                      |    6 +-
 src/map/npc.cpp                      |   60 +-
 src/map/npc.hpp                      |    8 +-
 src/map/party.cpp                    |   23 +-
 src/map/party.hpp                    |   16 +-
 src/map/pc.cpp                       |   64 +-
 src/map/pc.hpp                       |   23 +-
 src/map/script.cpp                   | 1324 ++++++++++++++++------------------
 src/map/script.hpp                   |   60 +-
 src/map/skill-pools.cpp              |    4 +-
 src/map/skill.cpp                    |  331 +++++----
 src/map/skill.hpp                    |    3 +-
 src/map/storage.cpp                  |    1 +
 src/map/tmw.cpp                      |   17 +-
 src/map/tmw.hpp                      |    9 +-
 src/tool/GNUmakefile                 |    4 +-
 src/tool/eathena-monitor.cpp         |    5 +
 src/webserver/GNUmakefile            |    4 +-
 warnings                             |    8 +-
 72 files changed, 2513 insertions(+), 2280 deletions(-)
 create mode 100644 src/common/utils.cpp

diff --git a/GNUmakefile b/GNUmakefile
index b00e55c..a8914f8 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -40,7 +40,7 @@ PROGS = login-server char-server map-server ladmin eathena-monitor webserver
 all: ${PROGS}
 clean:
 	rm -rf ${PROGS} ${BUILD_DIR}/
-common: ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/grfio.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/nullpo.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o
+common: ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/grfio.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/nullpo.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/utils.o
 
 # Top level programs
 login-server: ${BUILD_DIR}/login/login
@@ -57,10 +57,10 @@ webserver: ${BUILD_DIR}/webserver/main
 	cp -f $< $@
 
 # Executable dependencies - generated by hand
-${BUILD_DIR}/char/char: ${BUILD_DIR}/char/char.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_storage.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/mt_rand.o
-${BUILD_DIR}/ladmin/ladmin: ${BUILD_DIR}/ladmin/ladmin.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/mt_rand.o
-${BUILD_DIR}/login/login: ${BUILD_DIR}/login/login.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/md5calc.o
-${BUILD_DIR}/map/map: ${BUILD_DIR}/map/map.o ${BUILD_DIR}/map/tmw.o ${BUILD_DIR}/map/magic-interpreter-lexer.o ${BUILD_DIR}/map/magic-interpreter-parser.o ${BUILD_DIR}/map/magic-interpreter-base.o ${BUILD_DIR}/map/magic-expr.o ${BUILD_DIR}/map/magic-stmt.o ${BUILD_DIR}/map/magic.o ${BUILD_DIR}/map/map.o ${BUILD_DIR}/map/chrif.o ${BUILD_DIR}/map/clif.o ${BUILD_DIR}/map/pc.o ${BUILD_DIR}/map/npc.o ${BUILD_DIR}/map/chat.o ${BUILD_DIR}/map/path.o ${BUILD_DIR}/map/itemdb.o ${BUILD_DIR}/map/mob.o ${BUILD_DIR}/map/script.o ${BUILD_DIR}/map/storage.o ${BUILD_DIR}/map/skill.o ${BUILD_DIR}/map/skill-pools.o ${BUILD_DIR}/map/atcommand.o ${BUILD_DIR}/map/battle.o ${BUILD_DIR}/map/intif.o ${BUILD_DIR}/map/trade.o ${BUILD_DIR}/map/party.o ${BUILD_DIR}/map/guild.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/grfio.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/nullpo.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/md5calc.o
+${BUILD_DIR}/char/char: ${BUILD_DIR}/char/char.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_storage.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/utils.o
+${BUILD_DIR}/ladmin/ladmin: ${BUILD_DIR}/ladmin/ladmin.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/utils.o
+${BUILD_DIR}/login/login: ${BUILD_DIR}/login/login.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/utils.o
+${BUILD_DIR}/map/map: ${BUILD_DIR}/map/map.o ${BUILD_DIR}/map/tmw.o ${BUILD_DIR}/map/magic-interpreter-lexer.o ${BUILD_DIR}/map/magic-interpreter-parser.o ${BUILD_DIR}/map/magic-interpreter-base.o ${BUILD_DIR}/map/magic-expr.o ${BUILD_DIR}/map/magic-stmt.o ${BUILD_DIR}/map/magic.o ${BUILD_DIR}/map/map.o ${BUILD_DIR}/map/chrif.o ${BUILD_DIR}/map/clif.o ${BUILD_DIR}/map/pc.o ${BUILD_DIR}/map/npc.o ${BUILD_DIR}/map/chat.o ${BUILD_DIR}/map/path.o ${BUILD_DIR}/map/itemdb.o ${BUILD_DIR}/map/mob.o ${BUILD_DIR}/map/script.o ${BUILD_DIR}/map/storage.o ${BUILD_DIR}/map/skill.o ${BUILD_DIR}/map/skill-pools.o ${BUILD_DIR}/map/atcommand.o ${BUILD_DIR}/map/battle.o ${BUILD_DIR}/map/intif.o ${BUILD_DIR}/map/trade.o ${BUILD_DIR}/map/party.o ${BUILD_DIR}/map/guild.o ${BUILD_DIR}/common/core.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/grfio.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/common/nullpo.o ${BUILD_DIR}/common/mt_rand.o ${BUILD_DIR}/common/md5calc.o ${BUILD_DIR}/common/utils.o
 ${BUILD_DIR}/tool/eathena-monitor: ${BUILD_DIR}/tool/eathena-monitor.o
 ${BUILD_DIR}/tool/adduser: ${BUILD_DIR}/tool/adduser.o ${BUILD_DIR}/common/socket.o
 ${BUILD_DIR}/tool/itemfrob: ${BUILD_DIR}/tool/itemfrob.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_storage.o
@@ -68,7 +68,9 @@ ${BUILD_DIR}/tool/mapfrob: ${BUILD_DIR}/tool/mapfrob.o ${BUILD_DIR}/common/timer
 ${BUILD_DIR}/tool/marriage-info: ${BUILD_DIR}/tool/marriage-info.o ${BUILD_DIR}/common/timer.o ${BUILD_DIR}/common/socket.o ${BUILD_DIR}/common/db.o ${BUILD_DIR}/common/lock.o ${BUILD_DIR}/char/inter.o ${BUILD_DIR}/char/int_guild.o ${BUILD_DIR}/char/int_party.o ${BUILD_DIR}/char/int_storage.o
 ${BUILD_DIR}/webserver/main: ${BUILD_DIR}/webserver/main.o ${BUILD_DIR}/webserver/parse.o ${BUILD_DIR}/webserver/generate.o ${BUILD_DIR}/webserver/htmlstyle.o ${BUILD_DIR}/webserver/logs.o ${BUILD_DIR}/webserver/pages/about.o ${BUILD_DIR}/webserver/pages/sample.o ${BUILD_DIR}/webserver/pages/notdone.o
 
-deps.make:
+# deps.make is *NOT* automatically rebuilt normally
+# but the generated source files do need to be done first
+deps.make: src/map/magic-interpreter-parser.cpp src/map/magic-interpreter-lexer.cpp
 	for F in `find src/ -name '*.cpp'`; do \
 	    ${CXX} ${CPPFLAGS} -MM "$$F" -MT "$$(sed 's/src/$${BUILD_DIR}/;s/\.cpp/.o/' <<< "$$F")"; \
 	done > deps.make
diff --git a/make.defs b/make.defs
index 9328688..17b06a8 100644
--- a/make.defs
+++ b/make.defs
@@ -2,12 +2,12 @@
 CXX = g++
 LEX = flex
 BISON = bison
-CXXFLAGS = -pipe -g -O2
+CXXFLAGS = -pipe -g -O2 #@warnings
 
 # works on both x86 and x86_64
 override CXX += -m32 -std=c++0x
 # for linking
 override CC = ${CXX}
 
-override CXXFLAGS += -fstack-protector
+override CXXFLAGS += -fstack-protector -fno-strict-aliasing
 
diff --git a/src/char/GNUmakefile b/src/char/GNUmakefile
index cd7ad57..0e1aece 100644
--- a/src/char/GNUmakefile
+++ b/src/char/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. char-server
+	${MAKE} -C ../.. char-server
 clean:
 	rm -r ../../obj/char/
 %::
-	make -C ../.. obj/char/$@
+	${MAKE} -C ../.. obj/char/$@
diff --git a/src/char/char.cpp b/src/char/char.cpp
index a57520b..acb52fd 100644
--- a/src/char/char.cpp
+++ b/src/char/char.cpp
@@ -120,7 +120,7 @@ pid_t pid = 0;                  // For forked DB writes
 //------------------------------
 // Writing function of logs file
 //------------------------------
-int char_log (char *fmt, ...)
+int char_log (const char *fmt, ...)
 {
     FILE *logfp;
     va_list ap;
@@ -148,30 +148,11 @@ int char_log (char *fmt, ...)
     return 0;
 }
 
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars (unsigned char *str)
-{
-    int  i;
-    int  change = 0;
-
-    for (i = 0; str[i]; i++)
-    {
-        if (str[i] < 32)
-        {
-            str[i] = '_';
-            change = 1;
-        }
-    }
-
-    return change;
-}
-
 //----------------------------------------------------------------------
 // Determine if an account (id) is a GM account
 // and returns its level (or 0 if it isn't a GM account or if not found)
 //----------------------------------------------------------------------
+static
 int isGM (int account_id)
 {
     int  i;
@@ -190,7 +171,7 @@ int isGM (int account_id)
 //   and returns index if only 1 character is found
 //   and similar to the searched name.
 //----------------------------------------------
-int search_character_index (char *character_name)
+int search_character_index (const char *character_name)
 {
     int  i, quantity, index;
 
@@ -232,6 +213,7 @@ char *search_character_name (int index)
 //-------------------------------------------------
 // Function to create the character line (for save)
 //-------------------------------------------------
+static
 int mmo_char_tostr (char *str, struct mmo_charstatus *p)
 {
     int  i;
@@ -312,6 +294,7 @@ int mmo_char_tostr (char *str, struct mmo_charstatus *p)
 //-------------------------------------------------------------------------
 // Function to set the character from the line (at read of characters file)
 //-------------------------------------------------------------------------
+static
 int mmo_char_fromstr (char *str, struct mmo_charstatus *p)
 {
     int  tmp_int[256];
@@ -584,17 +567,17 @@ int mmo_char_fromstr (char *str, struct mmo_charstatus *p)
 //---------------------------------
 // Function to read characters file
 //---------------------------------
+static
 int mmo_char_init (void)
 {
     char line[65536];
-    int  i;
     int  ret, line_count;
     FILE *fp;
 
     char_max = 256;
     CREATE (char_dat, struct mmo_charstatus, 256);
     CREATE (online_chars, int, 256);
-    for (i = 0; i < char_max; i++)
+    for (int i = 0; i < char_max; i++)
         online_chars[i] = -1;
 
     char_num = 0;
@@ -717,6 +700,7 @@ int mmo_char_init (void)
 //---------------------------------------------------------
 // Function to save characters in files (speed up by [Yor])
 //---------------------------------------------------------
+static
 void mmo_char_sync (void)
 {
     char line[65536];
@@ -791,6 +775,7 @@ void mmo_char_sync (void)
 //----------------------------------------------------
 // Function to save (in a periodic way) datas in files
 //----------------------------------------------------
+static
 void mmo_char_sync_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     if (pid != 0)
@@ -845,14 +830,17 @@ static void remove_prefix_blanks (char *name)
 //-----------------------------------
 // Function to create a new character
 //-----------------------------------
+static
 int make_new_char (int fd, unsigned char *dat)
 {
+    // ugh
+    char *cdat = (char *)dat;
     int  i, j;
     struct char_session_data *sd = (struct char_session_data *)session[fd]->session_data;
 
     // remove control characters from the name
-    dat[23] = '\0';
-    if (remove_control_chars (dat))
+    cdat[23] = '\0';
+    if (remove_control_chars (cdat))
     {
         char_log
             ("Make new char error (control char received in the name): (connection #%d, account: %d).\n",
@@ -861,45 +849,46 @@ int make_new_char (int fd, unsigned char *dat)
     }
 
     // Eliminate whitespace
-    remove_trailing_blanks ((char *) dat);
-    remove_prefix_blanks ((char *) dat);
+    remove_trailing_blanks (cdat);
+    remove_prefix_blanks (cdat);
 
     // check lenght of character name
-    if (strlen (dat) < 4)
+    if (strlen (cdat) < 4)
     {
         char_log
             ("Make new char error (character name too small): (connection #%d, account: %d, name: '%s').\n",
-             fd, sd->account_id, dat);
+             fd, sd->account_id, cdat);
         return -1;
     }
 
     // Check Authorised letters/symbols in the name of the character
     if (char_name_option == 1)
     {                           // only letters/symbols in char_name_letters are authorised
-        for (i = 0; dat[i]; i++)
-            if (strchr (char_name_letters, dat[i]) == NULL)
+        for (i = 0; cdat[i]; i++)
+            if (strchr (char_name_letters, cdat[i]) == NULL)
             {
                 char_log
                     ("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c.\n",
-                     fd, sd->account_id, dat, dat[i]);
+                     fd, sd->account_id, cdat, cdat[i]);
                 return -1;
             }
     }
     else if (char_name_option == 2)
     {                           // letters/symbols in char_name_letters are forbidden
-        for (i = 0; dat[i]; i++)
-            if (strchr (char_name_letters, dat[i]) != NULL)
+        for (i = 0; cdat[i]; i++)
+            if (strchr (char_name_letters, cdat[i]) != NULL)
             {
                 char_log
                     ("Make new char error (invalid letter in the name): (connection #%d, account: %d), name: %s, invalid letter: %c.\n",
-                     fd, sd->account_id, dat, dat[i]);
+                     fd, sd->account_id, cdat, cdat[i]);
                 return -1;
             }
     }                           // else, all letters/symbols are authorised (except control char removed before)
 
+    // this is why it needs to be unsigned
     if (dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29] != 5 * 6 ||   // stats
         dat[30] >= 9 ||         // slots (dat[30] can not be negativ)
-        dat[33] < 0 || dat[33] >= 20 || // hair style
+        dat[33] >= 20 || // hair style
         dat[31] >= 12)
     {                           // hair color (dat[31] can not be negativ)
         char_log
@@ -928,13 +917,13 @@ int make_new_char (int fd, unsigned char *dat)
 
     for (i = 0; i < char_num; i++)
     {
-        if ((name_ignoring_case != 0 && strcmp (char_dat[i].name, dat) == 0)
+        if ((name_ignoring_case != 0 && strcmp (char_dat[i].name, cdat) == 0)
             || (name_ignoring_case == 0
-                && strcasecmp (char_dat[i].name, dat) == 0))
+                && strcasecmp (char_dat[i].name, cdat) == 0))
         {
             char_log
                 ("Make new char error (name already exists): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %s), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d.\n",
-                 fd, sd->account_id, dat[30], dat, char_dat[i].name,
+                 fd, sd->account_id, dat[30], cdat, char_dat[i].name,
                  dat[24], dat[25], dat[26], dat[27], dat[28], dat[29],
                  dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29],
                  dat[33], dat[31]);
@@ -945,7 +934,7 @@ int make_new_char (int fd, unsigned char *dat)
         {
             char_log
                 ("Make new char error (slot already used): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %s), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d.\n",
-                 fd, sd->account_id, dat[30], dat, char_dat[i].name,
+                 fd, sd->account_id, dat[30], cdat, char_dat[i].name,
                  dat[24], dat[25], dat[26], dat[27], dat[28], dat[29],
                  dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29],
                  dat[33], dat[31]);
@@ -953,11 +942,11 @@ int make_new_char (int fd, unsigned char *dat)
         }
     }
 
-    if (strcmp (wisp_server_name, dat) == 0)
+    if (strcmp (wisp_server_name, cdat) == 0)
     {
         char_log
-            ("Make new char error (name used is wisp name for server): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %d), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d.\n",
-             fd, sd->account_id, dat[30], dat, char_dat[i].name,
+            ("Make new char error (name used is wisp name for server): (connection #%d, account: %d) slot %d, name: %s (actual name of other char: %s), stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d.\n",
+             fd, sd->account_id, dat[30], cdat, char_dat[i].name,
              dat[24], dat[25], dat[26], dat[27], dat[28], dat[29],
              dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29],
              dat[33], dat[31]);
@@ -981,7 +970,7 @@ int make_new_char (int fd, unsigned char *dat)
 
     char_log
         ("Creation of New Character: (connection #%d, account: %d) slot %d, character Name: %s, stats: %d+%d+%d+%d+%d+%d=%d, hair: %d, hair color: %d. [%s]\n",
-         fd, sd->account_id, dat[30], dat, dat[24], dat[25], dat[26],
+         fd, sd->account_id, dat[30], cdat, dat[24], dat[25], dat[26],
          dat[27], dat[28], dat[29],
          dat[24] + dat[25] + dat[26] + dat[27] + dat[28] + dat[29], dat[33],
          dat[31], ip);
@@ -991,7 +980,7 @@ int make_new_char (int fd, unsigned char *dat)
     char_dat[i].char_id = char_id_count++;
     char_dat[i].account_id = sd->account_id;
     char_dat[i].char_num = dat[30];
-    strcpy (char_dat[i].name, dat);
+    strcpy (char_dat[i].name, cdat);
     char_dat[i].pc_class = 0;
     char_dat[i].base_level = 1;
     char_dat[i].job_level = 1;
@@ -1043,7 +1032,8 @@ int make_new_char (int fd, unsigned char *dat)
 //----------------------------------------------------
 // This function return the name of the job (by [Yor])
 //----------------------------------------------------
-char *job_name (int pc_class)
+static
+const char *job_name (int pc_class)
 {
     switch (pc_class)
     {
@@ -1192,6 +1182,7 @@ char *job_name (int pc_class)
 //-------------------------------------------------------------
 // Function to create the online files (txt and html). by [Yor]
 //-------------------------------------------------------------
+static
 void create_online_files (void)
 {
     int  i, j, k, l;            // for loops
@@ -1448,7 +1439,7 @@ void create_online_files (void)
                     // displaying of the job
                     if (online_display_option & 6)
                     {
-                        char *jobname = job_name (char_dat[j].pc_class);
+                        const char *jobname = job_name (char_dat[j].pc_class);
                         if ((online_display_option & 6) == 6)
                         {
                             fprintf (fp2, "        <td>%s %d/%d</td>\n",
@@ -1549,6 +1540,7 @@ void create_online_files (void)
 //---------------------------------------------------------------------
 // This function return the number of online players in all map-servers
 //---------------------------------------------------------------------
+static
 int count_users (void)
 {
     int  i, users;
@@ -1577,6 +1569,7 @@ static int find_equip_view (struct mmo_charstatus *p, unsigned int equipmask)
 //----------------------------------------
 // Function to send characters to a player
 //----------------------------------------
+static
 int mmo_char_send006b (int fd, struct char_session_data *sd)
 {
     int  i, j, found_num;
@@ -1657,6 +1650,7 @@ int mmo_char_send006b (int fd, struct char_session_data *sd)
     return 0;
 }
 
+static
 int set_account_reg2 (int acc, int num, struct global_reg *reg)
 {
     int  i, c;
@@ -1676,10 +1670,11 @@ int set_account_reg2 (int acc, int num, struct global_reg *reg)
 }
 
 // Divorce a character from it's partner and let the map server know
+static
 int char_divorce (struct mmo_charstatus *cs)
 {
     int  i;
-    char buf[10];
+    uint8_t buf[10];
 
     if (cs == NULL)
         return 0;
@@ -1726,51 +1721,10 @@ int char_divorce (struct mmo_charstatus *cs)
     return 0;
 }
 
-//------------------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid). by [Yor]
-//------------------------------------------------------------
-int e_mail_check (unsigned char *email)
-{
-    char ch;
-    unsigned char *last_arobas;
-
-    // athena limits
-    if (strlen (email) < 3 || strlen (email) > 39)
-        return 0;
-
-    // part of RFC limits (official reference of e-mail description)
-    if (strchr (email, '@') == NULL || email[strlen (email) - 1] == '@')
-        return 0;
-
-    if (email[strlen (email) - 1] == '.')
-        return 0;
-
-    last_arobas = strrchr (email, '@');
-
-    if (strstr (last_arobas, "@.") != NULL ||
-        strstr (last_arobas, "..") != NULL)
-        return 0;
-
-    for (ch = 1; ch < 32; ch++)
-    {
-        if (strchr (last_arobas, ch) != NULL)
-        {
-            return 0;
-            break;
-        }
-    }
-
-    if (strchr (last_arobas, ' ') != NULL ||
-        strchr (last_arobas, ';') != NULL)
-        return 0;
-
-    // all correct
-    return 1;
-}
-
 //----------------------------------------------------------------------
 // Force disconnection of an online player (with account value) by [Yor]
 //----------------------------------------------------------------------
+static
 int disconnect_player (int accound_id)
 {
     int  i;
@@ -1817,9 +1771,9 @@ static int char_delete (struct mmo_charstatus *cs)
     return 0;
 }
 
+static
 void parse_tologin (int fd)
 {
-    int  i;
     struct char_session_data *sd;
 
     // only login-server can have an access to here.
@@ -1866,6 +1820,7 @@ void parse_tologin (int fd)
                     printf ("Connected to login-server (connection #%d).\n",
                             fd);
                     // if no map-server already connected, display a message...
+                    int i;
                     for (i = 0; i < MAX_MAP_SERVERS; i++)
                         if (server_fd[i] >= 0 && server[i].map[0][0])   // if map-server online and at least 1 map
                             break;
@@ -1879,7 +1834,7 @@ void parse_tologin (int fd)
                 if (RFIFOREST (fd) < 51)
                     return;
 //          printf("parse_tologin 2713 : %d\n", RFIFOB(fd,6));
-                for (i = 0; i < fd_max; i++)
+                for (int i = 0; i < fd_max; i++)
                 {
                     if (session[i] && (sd = (struct char_session_data*)session[i]->session_data)
                         && sd->account_id == RFIFOL (fd, 2))
@@ -1922,7 +1877,7 @@ void parse_tologin (int fd)
             case 0x2717:
                 if (RFIFOREST (fd) < 50)
                     return;
-                for (i = 0; i < fd_max; i++)
+                for (int i = 0; i < fd_max; i++)
                 {
                     if (session[i] && (sd = (struct char_session_data*)session[i]->session_data))
                     {
@@ -2026,6 +1981,7 @@ void parse_tologin (int fd)
                         ("Receiving a message for broadcast, but message is void.\n");
                 else
                 {
+                    int i;
                     // at least 1 map-server
                     for (i = 0; i < MAX_MAP_SERVERS; i++)
                         if (server_fd[i] >= 0)
@@ -2035,7 +1991,7 @@ void parse_tologin (int fd)
                             ("'ladmin': Receiving a message for broadcast, but no map-server is online.\n");
                     else
                     {
-                        char buf[128];
+                        uint8_t buf[128];
                         char message[RFIFOL (fd, 4) + 1];   // +1 to add a null terminated if not exist in the packet
                         int  lp;
                         char *p;
@@ -2140,7 +2096,7 @@ void parse_tologin (int fd)
                 WBUFL (buf, 6) = dest_id;
 
                 mapif_sendall (buf, 10);    // forward package to map servers
-                for (i = 0; i < char_num; i++)
+                for (int i = 0; i < char_num; i++)
                 {
                     struct mmo_charstatus *c = char_dat + i;
                     struct storage *s = account2storage (c->account_id);
@@ -2180,7 +2136,7 @@ void parse_tologin (int fd)
                 if (RFIFOREST (fd) < 6)
                     return;
                 // Deletion of all characters of the account
-                for (i = 0; i < char_num; i++)
+                for (int i = 0; i < char_num; i++)
                 {
                     if (char_dat[i].account_id == RFIFOL (fd, 2))
                     {
@@ -2260,12 +2216,12 @@ void parse_tologin (int fd)
                 if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2))
                     return;
                 {
-                    char buf[32000];
+                    uint8_t buf[32000];
                     if (gm_account != NULL)
                         free (gm_account);
                     CREATE (gm_account, struct gm_account, (RFIFOW (fd, 2) - 4) / 5);
                     GM_num = 0;
-                    for (i = 4; i < RFIFOW (fd, 2); i = i + 5)
+                    for (int i = 4; i < RFIFOW (fd, 2); i = i + 5)
                     {
                         gm_account[GM_num].account_id = RFIFOL (fd, i);
                         gm_account[GM_num].level = (int) RFIFOB (fd, i + 4);
@@ -2323,6 +2279,7 @@ void parse_tologin (int fd)
 //--------------------------------
 // Map-server anti-freeze system
 //--------------------------------
+static
 void map_anti_freeze_system (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     int  i;
@@ -2347,6 +2304,7 @@ void map_anti_freeze_system (timer_id tid, tick_t tick, custom_id_t id, custom_d
     }
 }
 
+static
 void parse_frommap (int fd)
 {
     int  i, j;
@@ -2875,7 +2833,8 @@ void parse_frommap (int fd)
     }
 }
 
-int search_mapserver (char *map)
+static
+int search_mapserver (const char *map)
 {
     int  i, j;
     char temp_map[16];
@@ -2911,6 +2870,7 @@ static int char_mapif_init (int fd)
 //-----------------------------------------------------
 // Test to know if an IP come from LAN or WAN. by [Yor]
 //-----------------------------------------------------
+static
 int lan_ip_check (unsigned char *p)
 {
     int  i;
@@ -2933,6 +2893,7 @@ int lan_ip_check (unsigned char *p)
     return lancheck;
 }
 
+static
 void parse_char (int fd)
 {
     int  i, ch;
@@ -3072,12 +3033,8 @@ void parse_char (int fd)
             case 0x66:         // キャラ選択
                 if (!sd || RFIFOREST (fd) < 3)
                     return;
-
-                char ip[16];
-                unsigned char *sin_addr =
-                    (unsigned char *) &session[fd]->client_addr.sin_addr;
-                sprintf (ip, "%d.%d.%d.%d", sin_addr[0], sin_addr[1],
-                         sin_addr[2], sin_addr[3]);
+            {
+                const char *ip = ip2str(session[fd]->client_addr.sin_addr);
 
                 // if we activated email creation and email is default email
                 if (email_creation != 0 && strcmp (sd->email, "a@a.com") == 0
@@ -3236,6 +3193,7 @@ void parse_char (int fd)
                         auth_fifo_pos++;
                     }
                 }
+            }
                 RFIFOSKIP (fd, 3);
                 break;
 
@@ -3449,8 +3407,8 @@ void parse_char (int fd)
                     if (server_fd[i] < 0)
                         break;
                 }
-                if (i == MAX_MAP_SERVERS || strcmp (RFIFOP (fd, 2), userid)
-                    || strcmp (RFIFOP (fd, 26), passwd))
+                if (i == MAX_MAP_SERVERS || strcmp ((const char *)RFIFOP (fd, 2), userid)
+                    || strcmp ((const char *)RFIFOP (fd, 26), passwd))
                 {
                     WFIFOB (fd, 2) = 3;
                     WFIFOSET (fd, 3);
@@ -3520,7 +3478,7 @@ void parse_char (int fd)
 }
 
 // 全てのMAPサーバーにデータ送信(送信したmap鯖の数を返す)
-int mapif_sendall (char *buf, unsigned int len)
+int mapif_sendall (const uint8_t *buf, unsigned int len)
 {
     int  i, c;
 
@@ -3539,7 +3497,7 @@ int mapif_sendall (char *buf, unsigned int len)
 }
 
 // 自分以外の全てのMAPサーバーにデータ送信(送信したmap鯖の数を返す)
-int mapif_sendallwos (int sfd, unsigned char *buf, unsigned int len)
+int mapif_sendallwos (int sfd, const uint8_t *buf, unsigned int len)
 {
     int  i, c;
 
@@ -3558,7 +3516,7 @@ int mapif_sendallwos (int sfd, unsigned char *buf, unsigned int len)
 }
 
 // MAPサーバーにデータ送信(map鯖生存確認有り)
-int mapif_send (int fd, unsigned char *buf, unsigned int len)
+int mapif_send (int fd, const uint8_t *buf, unsigned int len)
 {
     int  i;
 
@@ -3577,10 +3535,11 @@ int mapif_send (int fd, unsigned char *buf, unsigned int len)
     return 0;
 }
 
+static
 void send_users_tologin (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     int  users = count_users ();
-    char buf[16];
+    uint8_t buf[16];
 
     if (login_fd > 0 && session[login_fd])
     {
@@ -3595,6 +3554,7 @@ void send_users_tologin (timer_id tid, tick_t tick, custom_id_t id, custom_data_
     mapif_sendall (buf, 6);
 }
 
+static
 void check_connect_login_server (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     if (login_fd <= 0 || session[login_fd] == NULL)
@@ -3624,26 +3584,10 @@ void check_connect_login_server (timer_id tid, tick_t tick, custom_id_t id, cust
     }
 }
 
-//----------------------------------------------------------
-// Return numerical value of a switch configuration by [Yor]
-// on/off, english, français, deutsch, español
-//----------------------------------------------------------
-int config_switch (const char *str)
-{
-    if (strcasecmp (str, "on") == 0 || strcasecmp (str, "yes") == 0
-        || strcasecmp (str, "oui") == 0 || strcasecmp (str, "ja") == 0
-        || strcasecmp (str, "si") == 0)
-        return 1;
-    if (strcasecmp (str, "off") == 0 || strcasecmp (str, "no") == 0
-        || strcasecmp (str, "non") == 0 || strcasecmp (str, "nein") == 0)
-        return 0;
-
-    return atoi (str);
-}
-
 //-------------------------------------------
 // Reading Lan Support configuration by [Yor]
 //-------------------------------------------
+static
 int lan_config_read (const char *lancfgName)
 {
     int  j;
@@ -3761,6 +3705,7 @@ int lan_config_read (const char *lancfgName)
     return 0;
 }
 
+static
 int char_config_read (const char *cfgName)
 {
     struct hostent *h = NULL;
diff --git a/src/char/char.hpp b/src/char/char.hpp
index 22b7678..f93e86b 100644
--- a/src/char/char.hpp
+++ b/src/char/char.hpp
@@ -18,14 +18,15 @@ struct mmo_map_server
     char map[MAX_MAP_PER_SERVER][16];
 };
 
-int  search_character_index (char *character_name);
+int  search_character_index (const char *character_name);
 char *search_character_name (int index);
 
-int  mapif_sendall (char *buf, unsigned int len);
-int  mapif_sendallwos (int fd, unsigned char *buf, unsigned int len);
-int  mapif_send (int fd, unsigned char *buf, unsigned int len);
+int  mapif_sendall (const uint8_t *buf, unsigned int len);
+int  mapif_sendallwos (int fd, const uint8_t *buf, unsigned int len);
+int  mapif_send (int fd, const uint8_t *buf, unsigned int len);
 
-int  char_log (char *fmt, ...);
+__attribute__((format(printf, 1, 2)))
+int  char_log (const char *fmt, ...);
 
 extern int autosave_interval;
 
diff --git a/src/char/int_guild.cpp b/src/char/int_guild.cpp
index fe9a95b..318297e 100644
--- a/src/char/int_guild.cpp
+++ b/src/char/int_guild.cpp
@@ -33,6 +33,7 @@ int  mapif_guild_info (int fd, struct guild *g);
 void guild_break_sub (db_key_t key, db_val_t data, va_list ap);
 
 // ギルドデータの文字列への変換
+static
 int inter_guild_tostr (char *str, struct guild *g)
 {
     int  i, c, len;
@@ -76,7 +77,7 @@ int inter_guild_tostr (char *str, struct guild *g)
     len += sprintf (str + len, "%d\t", c);
     for (i = 0; i < MAX_GUILDALLIANCE; i++)
     {
-        struct guild_alliance *a = &g->alliance[i];
+        GuildAlliance *a = &g->alliance[i];
         if (a->guild_id > 0)
             len +=
                 sprintf (str + len, "%d,%d\t%s\t", a->guild_id, a->opposition,
@@ -90,7 +91,7 @@ int inter_guild_tostr (char *str, struct guild *g)
     len += sprintf (str + len, "%d\t", c);
     for (i = 0; i < MAX_GUILDEXPLUSION; i++)
     {
-        struct guild_explusion *e = &g->explusion[i];
+        GuildExpulsion *e = &g->explusion[i];
         if (e->account_id > 0)
             len += sprintf (str + len, "%d,%d,%d,%d\t%s\t%s\t%s#\t",
                             e->account_id, e->rsv1, e->rsv2, e->rsv3,
@@ -107,6 +108,7 @@ int inter_guild_tostr (char *str, struct guild *g)
 }
 
 // ギルドデータの文字列からの変換
+static
 int inter_guild_fromstr (char *str, struct guild *g)
 {
     int  i, j, c;
@@ -218,7 +220,7 @@ int inter_guild_fromstr (char *str, struct guild *g)
     str = strchr (str + 1, '\t');   // 位置スキップ
     for (i = 0; i < c; i++)
     {
-        struct guild_alliance *a = &g->alliance[i];
+        GuildAlliance *a = &g->alliance[i];
         if (sscanf
             (str + 1, "%d,%d\t%[^\t]\t", &tmp_int[0], &tmp_int[1],
              tmp_str[0]) < 3)
@@ -237,7 +239,7 @@ int inter_guild_fromstr (char *str, struct guild *g)
     str = strchr (str + 1, '\t');   // 位置スキップ
     for (i = 0; i < c; i++)
     {
-        struct guild_explusion *e = &g->explusion[i];
+        GuildExpulsion *e = &g->explusion[i];
         if (sscanf (str + 1, "%d,%d,%d,%d\t%[^\t]\t%[^\t]\t%[^\t]\t",
                     &tmp_int[0], &tmp_int[1], &tmp_int[2], &tmp_int[3],
                     tmp_str[0], tmp_str[1], tmp_str[2]) < 6)
@@ -271,6 +273,7 @@ int inter_guild_fromstr (char *str, struct guild *g)
 }
 
 // ギルド城データの文字列への変換
+static
 int inter_guildcastle_tostr (char *str, struct guild_castle *gc)
 {
     int  len;
@@ -287,6 +290,7 @@ int inter_guildcastle_tostr (char *str, struct guild_castle *gc)
 }
 
 // ギルド城データの文字列からの変換
+static
 int inter_guildcastle_fromstr (char *str, struct guild_castle *gc)
 {
     int  tmp_int[26];
@@ -398,6 +402,7 @@ int inter_guildcastle_fromstr (char *str, struct guild_castle *gc)
 }
 
 // ギルド関連データベース読み込み
+static
 int inter_guild_readdb (void)
 {
     int  i;
@@ -541,6 +546,7 @@ struct guild *inter_guild_search (int guild_id)
 }
 
 // ギルドデータのセーブ用
+static
 void inter_guild_save_sub (db_key_t key, db_val_t data, va_list ap)
 {
     char line[16384];
@@ -552,6 +558,7 @@ void inter_guild_save_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // ギルド城データのセーブ用
+static
 void inter_castle_save_sub (db_key_t key, db_val_t data, va_list ap)
 {
     char line[16384];
@@ -592,6 +599,7 @@ int inter_guild_save (void)
 }
 
 // ギルド名検索用
+static
 void search_guildname_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct guild *g = (struct guild *) data, **dst;
@@ -604,7 +612,8 @@ void search_guildname_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // ギルド名検索
-struct guild *search_guildname (char *str)
+static
+struct guild *search_guildname (const char *str)
 {
     struct guild *g = NULL;
     numdb_foreach (guild_db, search_guildname_sub, str, &g);
@@ -634,6 +643,7 @@ int guild_check_empty (struct guild *g)
 }
 
 // キャラの競合がないかチェック用
+static
 void guild_check_conflict_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct guild *g = (struct guild *) data;
@@ -660,6 +670,7 @@ void guild_check_conflict_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // キャラの競合がないかチェック
+static
 int guild_check_conflict (int guild_id, int account_id, int char_id)
 {
     numdb_foreach (guild_db, guild_check_conflict_sub, guild_id, account_id,
@@ -668,6 +679,7 @@ int guild_check_conflict (int guild_id, int account_id, int char_id)
     return 0;
 }
 
+static
 int guild_nextexp (int level)
 {
     if (level < 100)
@@ -677,6 +689,7 @@ int guild_nextexp (int level)
 }
 
 // ギルドスキルがあるか確認
+static
 int guild_checkskill (struct guild *g, int id)
 {
     return g->skill[id - 10000].lv;
@@ -745,6 +758,7 @@ int guild_calcinfo (struct guild *g)
 // map serverへの通信
 
 // ギルド作成可否
+static
 int mapif_guild_created (int fd, int account_id, struct guild *g)
 {
     WFIFOW (fd, 0) = 0x3830;
@@ -763,6 +777,7 @@ int mapif_guild_created (int fd, int account_id, struct guild *g)
 }
 
 // ギルド情報見つからず
+static
 int mapif_guild_noinfo (int fd, int guild_id)
 {
     WFIFOW (fd, 0) = 0x3831;
@@ -793,6 +808,7 @@ int mapif_guild_info (int fd, struct guild *g)
 }
 
 // メンバ追加可否
+static
 int mapif_guild_memberadded (int fd, int guild_id, int account_id,
                              int char_id, int flag)
 {
@@ -807,6 +823,7 @@ int mapif_guild_memberadded (int fd, int guild_id, int account_id,
 }
 
 // 脱退/追放通知
+static
 int mapif_guild_leaved (int guild_id, int account_id, int char_id, int flag,
                         const char *name, const char *mes)
 {
@@ -827,6 +844,7 @@ int mapif_guild_leaved (int guild_id, int account_id, int char_id, int flag,
 }
 
 // オンライン状態とLv更新通知
+static
 int mapif_guild_memberinfoshort (struct guild *g, int idx)
 {
     unsigned char buf[19];
@@ -857,7 +875,8 @@ int mapif_guild_broken (int guild_id, int flag)
 }
 
 // ギルド内発言
-int mapif_guild_message (int guild_id, int account_id, char *mes, int len)
+static
+int mapif_guild_message (int guild_id, int account_id, const char *mes, int len)
 {
     unsigned char buf[len + 12];
 
@@ -887,6 +906,7 @@ int mapif_guild_basicinfochanged (int guild_id, int type, const void *data,
 }
 
 // ギルドメンバ情報変更通知
+static
 int mapif_guild_memberinfochanged (int guild_id, int account_id, int char_id,
                                    int type, const void *data, int len)
 {
@@ -905,6 +925,7 @@ int mapif_guild_memberinfochanged (int guild_id, int account_id, int char_id,
 }
 
 // ギルドスキルアップ通知
+static
 int mapif_guild_skillupack (int guild_id, int skill_num, int account_id)
 {
     unsigned char buf[14];
@@ -919,6 +940,7 @@ int mapif_guild_skillupack (int guild_id, int skill_num, int account_id)
 }
 
 // ギルド同盟/敵対通知
+static
 int mapif_guild_alliance (int guild_id1, int guild_id2, int account_id1,
                           int account_id2, int flag, const char *name1,
                           const char *name2)
@@ -939,6 +961,7 @@ int mapif_guild_alliance (int guild_id1, int guild_id2, int account_id1,
 }
 
 // ギルド役職変更通知
+static
 int mapif_guild_position (struct guild *g, int idx)
 {
     unsigned char buf[sizeof (struct guild_position) + 12];
@@ -955,6 +978,7 @@ int mapif_guild_position (struct guild *g, int idx)
 }
 
 // ギルド告知変更通知
+static
 int mapif_guild_notice (struct guild *g)
 {
     unsigned char buf[186];
@@ -969,6 +993,7 @@ int mapif_guild_notice (struct guild *g)
 }
 
 // ギルドエンブレム変更通知
+static
 int mapif_guild_emblem (struct guild *g)
 {
     unsigned char buf[2048];
@@ -983,6 +1008,7 @@ int mapif_guild_emblem (struct guild *g)
     return 0;
 }
 
+static
 int mapif_guild_castle_dataload (int castle_id, int index, int value)
 {
     unsigned char buf[9];
@@ -996,6 +1022,7 @@ int mapif_guild_castle_dataload (int castle_id, int index, int value)
     return 0;
 }
 
+static
 int mapif_guild_castle_datasave (int castle_id, int index, int value)
 {
     unsigned char buf[9];
@@ -1009,6 +1036,7 @@ int mapif_guild_castle_datasave (int castle_id, int index, int value)
     return 0;
 }
 
+static
 void mapif_guild_castle_alldataload_sub (db_key_t key, db_val_t data, va_list ap)
 {
     int  fd = va_arg (ap, int);
@@ -1019,6 +1047,7 @@ void mapif_guild_castle_alldataload_sub (db_key_t key, db_val_t data, va_list ap
     (*p) += sizeof (struct guild_castle);
 }
 
+static
 int mapif_guild_castle_alldataload (int fd)
 {
     int  len = 4;
@@ -1035,7 +1064,8 @@ int mapif_guild_castle_alldataload (int fd)
 // map serverからの通信
 
 // ギルド作成要求
-int mapif_parse_CreateGuild (int fd, int account_id, char *name,
+static
+int mapif_parse_CreateGuild (int fd, int account_id, const char *name,
                              struct guild_member *master)
 {
     struct guild *g;
@@ -1087,6 +1117,7 @@ int mapif_parse_CreateGuild (int fd, int account_id, char *name,
 }
 
 // ギルド情報要求
+static
 int mapif_parse_GuildInfo (int fd, int guild_id)
 {
     struct guild *g = (struct guild *)numdb_search (guild_db, guild_id);
@@ -1102,6 +1133,7 @@ int mapif_parse_GuildInfo (int fd, int guild_id)
 }
 
 // ギルドメンバ追加要求
+static
 int mapif_parse_GuildAddMember (int fd, int guild_id, struct guild_member *m)
 {
     struct guild *g = (struct guild *)numdb_search (guild_db, guild_id);
@@ -1181,6 +1213,7 @@ int mapif_parse_GuildLeave (int fd, int guild_id, int account_id, int char_id,
 }
 
 // オンライン/Lv更新
+static
 int mapif_parse_GuildChangeMemberInfoShort (int fd, int guild_id,
                                             int account_id, int char_id,
                                             int online, int lv, int pc_class)
@@ -1231,6 +1264,7 @@ void guild_break_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // ギルド解散要求
+static
 int mapif_parse_BreakGuild (int fd, int guild_id)
 {
     struct guild *g = (struct guild *)numdb_search (guild_db, guild_id);
@@ -1249,13 +1283,15 @@ int mapif_parse_BreakGuild (int fd, int guild_id)
 }
 
 // ギルドメッセージ送信
-int mapif_parse_GuildMessage (int fd, int guild_id, int account_id, char *mes,
+static
+int mapif_parse_GuildMessage (int fd, int guild_id, int account_id, const char *mes,
                               int len)
 {
     return mapif_guild_message (guild_id, account_id, mes, len);
 }
 
 // ギルド基本データ変更要求
+static
 int mapif_parse_GuildBasicInfoChange (int fd, int guild_id, int type,
                                       const char *data, int len)
 {
@@ -1288,6 +1324,7 @@ int mapif_parse_GuildBasicInfoChange (int fd, int guild_id, int type,
 }
 
 // ギルドメンバデータ変更要求
+static
 int mapif_parse_GuildMemberInfoChange (int fd, int guild_id, int account_id,
                                        int char_id, int type,
                                        const char *data, int len)
@@ -1332,6 +1369,7 @@ int mapif_parse_GuildMemberInfoChange (int fd, int guild_id, int account_id,
 }
 
 // ギルド役職名変更要求
+static
 int mapif_parse_GuildPosition (int fd, int guild_id, int idx,
                                struct guild_position *p)
 {
@@ -1349,6 +1387,7 @@ int mapif_parse_GuildPosition (int fd, int guild_id, int idx,
 }
 
 // ギルドスキルアップ要求
+static
 int mapif_parse_GuildSkillUp (int fd, int guild_id, int skill_num,
                               int account_id)
 {
@@ -1372,6 +1411,7 @@ int mapif_parse_GuildSkillUp (int fd, int guild_id, int skill_num,
 }
 
 // ギルド同盟要求
+static
 int mapif_parse_GuildAlliance (int fd, int guild_id1, int guild_id2,
                                int account_id1, int account_id2, int flag)
 {
@@ -1417,6 +1457,7 @@ int mapif_parse_GuildAlliance (int fd, int guild_id1, int guild_id2,
 }
 
 // ギルド告知変更要求
+static
 int mapif_parse_GuildNotice (int fd, int guild_id, const char *mes1,
                              const char *mes2)
 {
@@ -1430,6 +1471,7 @@ int mapif_parse_GuildNotice (int fd, int guild_id, const char *mes1,
 }
 
 // ギルドエンブレム変更要求
+static
 int mapif_parse_GuildEmblem (int fd, int len, int guild_id, int dummy,
                              const char *data)
 {
@@ -1443,6 +1485,7 @@ int mapif_parse_GuildEmblem (int fd, int len, int guild_id, int dummy,
     return mapif_guild_emblem (g);
 }
 
+static
 int mapif_parse_GuildCastleDataLoad (int fd, int castle_id, int index)
 {
     struct guild_castle *gc = (struct guild_castle *)numdb_search (castle_db, castle_id);
@@ -1537,6 +1580,7 @@ int mapif_parse_GuildCastleDataLoad (int fd, int castle_id, int index)
     return 0;
 }
 
+static
 int mapif_parse_GuildCastleDataSave (int fd, int castle_id, int index,
                                      int value)
 {
@@ -1642,6 +1686,7 @@ int mapif_parse_GuildCastleDataSave (int fd, int castle_id, int index,
 }
 
 // ギルドチェック要求
+static
 int mapif_parse_GuildCheck (int fd, int guild_id, int account_id, int char_id)
 {
     return guild_check_conflict (guild_id, account_id, 0 /*char_id*/);
@@ -1657,7 +1702,7 @@ int inter_guild_parse_frommap (int fd)
     switch (RFIFOW (fd, 0))
     {
         case 0x3030:
-            mapif_parse_CreateGuild (fd, RFIFOL (fd, 4), RFIFOP (fd, 8),
+            mapif_parse_CreateGuild (fd, RFIFOL (fd, 4), (const char *)RFIFOP (fd, 8),
                                      (struct guild_member *) RFIFOP (fd, 32));
             break;
         case 0x3031:
@@ -1671,7 +1716,7 @@ int inter_guild_parse_frommap (int fd)
         case 0x3034:
             mapif_parse_GuildLeave (fd, RFIFOL (fd, 2), RFIFOL (fd, 6),
                                     RFIFOL (fd, 10), RFIFOB (fd, 14),
-                                    RFIFOP (fd, 15));
+                                    (const char *)RFIFOP (fd, 15));
             break;
         case 0x3035:
             mapif_parse_GuildChangeMemberInfoShort (fd, RFIFOL (fd, 2),
@@ -1686,7 +1731,7 @@ int inter_guild_parse_frommap (int fd)
             break;
         case 0x3037:
             mapif_parse_GuildMessage (fd, RFIFOL (fd, 4), RFIFOL (fd, 8),
-                                      RFIFOP (fd, 12), RFIFOW (fd, 2) - 12);
+                                      (const char *)RFIFOP (fd, 12), RFIFOW (fd, 2) - 12);
             break;
         case 0x3038:
             mapif_parse_GuildCheck (fd, RFIFOL (fd, 2), RFIFOL (fd, 6),
@@ -1694,14 +1739,14 @@ int inter_guild_parse_frommap (int fd)
             break;
         case 0x3039:
             mapif_parse_GuildBasicInfoChange (fd, RFIFOL (fd, 4),
-                                              RFIFOW (fd, 8), RFIFOP (fd, 10),
+                                              RFIFOW (fd, 8), (const char *)RFIFOP (fd, 10),
                                               RFIFOW (fd, 2) - 10);
             break;
         case 0x303A:
             mapif_parse_GuildMemberInfoChange (fd, RFIFOL (fd, 4),
                                                RFIFOL (fd, 8), RFIFOL (fd,
                                                                        12),
-                                               RFIFOW (fd, 16), RFIFOP (fd,
+                                               RFIFOW (fd, 16), (const char *)RFIFOP (fd,
                                                                         18),
                                                RFIFOW (fd, 2) - 18);
             break;
@@ -1720,12 +1765,12 @@ int inter_guild_parse_frommap (int fd)
                                        RFIFOB (fd, 18));
             break;
         case 0x303E:
-            mapif_parse_GuildNotice (fd, RFIFOL (fd, 2), RFIFOP (fd, 6),
-                                     RFIFOP (fd, 66));
+            mapif_parse_GuildNotice (fd, RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6),
+                                     (const char *)RFIFOP (fd, 66));
             break;
         case 0x303F:
             mapif_parse_GuildEmblem (fd, RFIFOW (fd, 2) - 12, RFIFOL (fd, 4),
-                                     RFIFOL (fd, 8), RFIFOP (fd, 12));
+                                     RFIFOL (fd, 8), (const char *)RFIFOP (fd, 12));
             break;
         case 0x3040:
             mapif_parse_GuildCastleDataLoad (fd, RFIFOW (fd, 2),
diff --git a/src/char/int_party.cpp b/src/char/int_party.cpp
index 7d0e0ce..6602ce5 100644
--- a/src/char/int_party.cpp
+++ b/src/char/int_party.cpp
@@ -20,6 +20,7 @@ int  party_check_empty (struct party *p);
 int  mapif_parse_PartyLeave (int fd, int party_id, int account_id);
 
 // パーティデータの文字列への変換
+static
 int inter_party_tostr (char *str, struct party *p)
 {
     int  i, len;
@@ -39,6 +40,7 @@ int inter_party_tostr (char *str, struct party *p)
 }
 
 // パーティデータの文字列からの変換
+static
 int inter_party_fromstr (char *str, struct party *p)
 {
     int  i, j;
@@ -133,6 +135,7 @@ int inter_party_init (void)
 }
 
 // パーティーデータのセーブ用
+static
 void inter_party_save_sub (db_key_t key, db_val_t data, va_list ap)
 {
     char line[8192];
@@ -164,6 +167,7 @@ int inter_party_save (void)
 }
 
 // パーティ名検索用
+static
 void search_partyname_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct party *p = (struct party *) data, **dst;
@@ -176,7 +180,8 @@ void search_partyname_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // パーティ名検索
-struct party *search_partyname (char *str)
+static
+struct party *search_partyname (const char *str)
 {
     struct party *p = NULL;
     numdb_foreach (party_db, search_partyname_sub, str, &p);
@@ -185,6 +190,7 @@ struct party *search_partyname (char *str)
 }
 
 // EXP公平分配できるかチェック
+static
 int party_check_exp_share (struct party *p)
 {
     int  i;
@@ -228,6 +234,7 @@ int party_check_empty (struct party *p)
 }
 
 // キャラの競合がないかチェック用
+static
 void party_check_conflict_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct party *p = (struct party *) data;
@@ -255,7 +262,8 @@ void party_check_conflict_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // キャラの競合がないかチェック
-int party_check_conflict (int party_id, int account_id, char *nick)
+static
+int party_check_conflict (int party_id, int account_id, const char *nick)
 {
     numdb_foreach (party_db, party_check_conflict_sub, party_id, account_id,
                    nick);
@@ -267,6 +275,7 @@ int party_check_conflict (int party_id, int account_id, char *nick)
 // map serverへの通信
 
 // パーティ作成可否
+static
 int mapif_party_created (int fd, int account_id, struct party *p)
 {
     WFIFOW (fd, 0) = 0x3820;
@@ -290,6 +299,7 @@ int mapif_party_created (int fd, int account_id, struct party *p)
 }
 
 // パーティ情報見つからず
+static
 int mapif_party_noinfo (int fd, int party_id)
 {
     WFIFOW (fd, 0) = 0x3821;
@@ -302,6 +312,7 @@ int mapif_party_noinfo (int fd, int party_id)
 }
 
 // パーティ情報まとめ送り
+static
 int mapif_party_info (int fd, struct party *p)
 {
     unsigned char buf[4 + sizeof (struct party)];
@@ -319,6 +330,7 @@ int mapif_party_info (int fd, struct party *p)
 }
 
 // パーティメンバ追加可否
+static
 int mapif_party_memberadded (int fd, int party_id, int account_id, int flag)
 {
     WFIFOW (fd, 0) = 0x3822;
@@ -331,6 +343,7 @@ int mapif_party_memberadded (int fd, int party_id, int account_id, int flag)
 }
 
 // パーティ設定変更通知
+static
 int mapif_party_optionchanged (int fd, struct party *p, int account_id,
                                int flag)
 {
@@ -353,6 +366,7 @@ int mapif_party_optionchanged (int fd, struct party *p, int account_id,
 }
 
 // パーティ脱退通知
+static
 int mapif_party_leaved (int party_id, int account_id, char *name)
 {
     unsigned char buf[34];
@@ -368,6 +382,7 @@ int mapif_party_leaved (int party_id, int account_id, char *name)
 }
 
 // パーティマップ更新通知
+static
 int mapif_party_membermoved (struct party *p, int idx)
 {
     unsigned char buf[29];
@@ -397,7 +412,8 @@ int mapif_party_broken (int party_id, int flag)
 }
 
 // パーティ内発言
-int mapif_party_message (int party_id, int account_id, char *mes, int len)
+static
+int mapif_party_message (int party_id, int account_id, const char *mes, int len)
 {
     unsigned char buf[len + 12];
 
@@ -415,8 +431,9 @@ int mapif_party_message (int party_id, int account_id, char *mes, int len)
 // map serverからの通信
 
 // パーティ
-int mapif_parse_CreateParty (int fd, int account_id, char *name, char *nick,
-                             char *map, int lv)
+static
+int mapif_parse_CreateParty (int fd, int account_id, const char *name, const char *nick,
+                             const char *map, int lv)
 {
     struct party *p;
     int  i;
@@ -458,6 +475,7 @@ int mapif_parse_CreateParty (int fd, int account_id, char *name, char *nick,
 }
 
 // パーティ情報要求
+static
 int mapif_parse_PartyInfo (int fd, int party_id)
 {
     struct party *p = (struct party *)numdb_search (party_db, party_id);
@@ -470,8 +488,9 @@ int mapif_parse_PartyInfo (int fd, int party_id)
 }
 
 // パーティ追加要求
+static
 int mapif_parse_PartyAddMember (int fd, int party_id, int account_id,
-                                char *nick, char *map, int lv)
+                                const char *nick, const char *map, int lv)
 {
     struct party *p = (struct party *)numdb_search (party_db, party_id);
     if (p == NULL)
@@ -511,6 +530,7 @@ int mapif_parse_PartyAddMember (int fd, int party_id, int account_id,
 }
 
 // パーティー設定変更要求
+static
 int mapif_parse_PartyChangeOption (int fd, int party_id, int account_id,
                                    int exp, int item)
 {
@@ -556,8 +576,9 @@ int mapif_parse_PartyLeave (int fd, int party_id, int account_id)
 }
 
 // パーティマップ更新要求
+static
 int mapif_parse_PartyChangeMap (int fd, int party_id, int account_id,
-                                char *map, int online, int lv)
+                                const char *map, int online, int lv)
 {
     struct party *p = (struct party *)numdb_search (party_db, party_id);
     if (p == NULL)
@@ -589,6 +610,7 @@ int mapif_parse_PartyChangeMap (int fd, int party_id, int account_id,
 }
 
 // パーティ解散要求
+static
 int mapif_parse_BreakParty (int fd, int party_id)
 {
     struct party *p = (struct party *)numdb_search (party_db, party_id);
@@ -602,14 +624,16 @@ int mapif_parse_BreakParty (int fd, int party_id)
 }
 
 // パーティメッセージ送信
-int mapif_parse_PartyMessage (int fd, int party_id, int account_id, char *mes,
+static
+int mapif_parse_PartyMessage (int fd, int party_id, int account_id, const char *mes,
                               int len)
 {
     return mapif_party_message (party_id, account_id, mes, len);
 }
 
 // パーティチェック要求
-int mapif_parse_PartyCheck (int fd, int party_id, int account_id, char *nick)
+static
+int mapif_parse_PartyCheck (int fd, int party_id, int account_id, const char *nick)
 {
     return party_check_conflict (party_id, account_id, nick);
 }
@@ -624,8 +648,8 @@ int inter_party_parse_frommap (int fd)
     switch (RFIFOW (fd, 0))
     {
         case 0x3020:
-            mapif_parse_CreateParty (fd, RFIFOL (fd, 2), RFIFOP (fd, 6),
-                                     RFIFOP (fd, 30), RFIFOP (fd, 54),
+            mapif_parse_CreateParty (fd, RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6),
+                                     (const char *)RFIFOP (fd, 30), (const char *)RFIFOP (fd, 54),
                                      RFIFOW (fd, 70));
             break;
         case 0x3021:
@@ -633,7 +657,7 @@ int inter_party_parse_frommap (int fd)
             break;
         case 0x3022:
             mapif_parse_PartyAddMember (fd, RFIFOL (fd, 2), RFIFOL (fd, 6),
-                                        RFIFOP (fd, 10), RFIFOP (fd, 34),
+                                        (const char *)RFIFOP (fd, 10), (const char *)RFIFOP (fd, 34),
                                         RFIFOW (fd, 50));
             break;
         case 0x3023:
@@ -645,7 +669,7 @@ int inter_party_parse_frommap (int fd)
             break;
         case 0x3025:
             mapif_parse_PartyChangeMap (fd, RFIFOL (fd, 2), RFIFOL (fd, 6),
-                                        RFIFOP (fd, 10), RFIFOB (fd, 26),
+                                        (const char *)RFIFOP (fd, 10), RFIFOB (fd, 26),
                                         RFIFOW (fd, 27));
             break;
         case 0x3026:
@@ -653,11 +677,11 @@ int inter_party_parse_frommap (int fd)
             break;
         case 0x3027:
             mapif_parse_PartyMessage (fd, RFIFOL (fd, 4), RFIFOL (fd, 8),
-                                      RFIFOP (fd, 12), RFIFOW (fd, 2) - 12);
+                                      (const char *)RFIFOP (fd, 12), RFIFOW (fd, 2) - 12);
             break;
         case 0x3028:
             mapif_parse_PartyCheck (fd, RFIFOL (fd, 2), RFIFOL (fd, 6),
-                                    RFIFOP (fd, 10));
+                                    (const char *)RFIFOP (fd, 10));
             break;
         default:
             return 0;
diff --git a/src/char/int_storage.cpp b/src/char/int_storage.cpp
index b197213..a962b92 100644
--- a/src/char/int_storage.cpp
+++ b/src/char/int_storage.cpp
@@ -21,6 +21,7 @@ static struct dbt *storage_db;
 static struct dbt *guild_storage_db;
 
 // 倉庫データを文字列に変換
+static
 int storage_tostr (char *str, struct storage *p)
 {
     int  i, f = 0;
@@ -49,6 +50,7 @@ int storage_tostr (char *str, struct storage *p)
 }
 
 // 文字列を倉庫データに変換
+static
 int storage_fromstr (char *str, struct storage *p)
 {
     int  tmp_int[256];
@@ -118,6 +120,7 @@ int storage_fromstr (char *str, struct storage *p)
     return 0;
 }
 
+static
 int guild_storage_tostr (char *str, struct guild_storage *p)
 {
     int  i, f = 0;
@@ -145,6 +148,7 @@ int guild_storage_tostr (char *str, struct guild_storage *p)
     return 0;
 }
 
+static
 int guild_storage_fromstr (char *str, struct guild_storage *p)
 {
     int  tmp_int[256];
@@ -229,6 +233,7 @@ struct storage *account2storage (int account_id)
     return s;
 }
 
+static
 struct guild_storage *guild2storage (int guild_id)
 {
     struct guild_storage *gs = NULL;
@@ -314,6 +319,7 @@ int inter_storage_init (void)
     return 0;
 }
 
+static
 void storage_db_final (db_key_t k, db_val_t data, va_list ap)
 {
     struct storage *p = (struct storage *) data;
@@ -321,6 +327,7 @@ void storage_db_final (db_key_t k, db_val_t data, va_list ap)
         free (p);
 }
 
+static
 void guild_storage_db_final (db_key_t k, db_val_t data, va_list ap)
 {
     struct guild_storage *p = (struct guild_storage *) data;
@@ -335,6 +342,7 @@ void inter_storage_final (void)
     return;
 }
 
+static
 void inter_storage_save_sub (db_key_t key, db_val_t data, va_list ap)
 {
     char line[65536];
@@ -367,6 +375,7 @@ int inter_storage_save (void)
     return 0;
 }
 
+static
 void inter_guild_storage_save_sub (db_key_t key, db_val_t data, va_list ap)
 {
     char line[65536];
@@ -434,6 +443,7 @@ int inter_guild_storage_delete (int guild_id)
 // map serverへの通信
 
 // 倉庫データの送信
+static
 int mapif_load_storage (int fd, int account_id)
 {
     struct storage *s = account2storage (account_id);
@@ -446,6 +456,7 @@ int mapif_load_storage (int fd, int account_id)
 }
 
 // 倉庫データ保存完了送信
+static
 int mapif_save_storage_ack (int fd, int account_id)
 {
     WFIFOW (fd, 0) = 0x3811;
@@ -455,6 +466,7 @@ int mapif_save_storage_ack (int fd, int account_id)
     return 0;
 }
 
+static
 int mapif_load_guild_storage (int fd, int account_id, int guild_id)
 {
     struct guild_storage *gs = guild2storage (guild_id);
@@ -477,6 +489,7 @@ int mapif_load_guild_storage (int fd, int account_id, int guild_id)
     return 0;
 }
 
+static
 int mapif_save_guild_storage_ack (int fd, int account_id, int guild_id,
                                   int fail)
 {
@@ -492,6 +505,7 @@ int mapif_save_guild_storage_ack (int fd, int account_id, int guild_id,
 // map serverからの通信
 
 // 倉庫データ要求受信
+static
 int mapif_parse_LoadStorage (int fd)
 {
     mapif_load_storage (fd, RFIFOL (fd, 2));
@@ -499,6 +513,7 @@ int mapif_parse_LoadStorage (int fd)
 }
 
 // 倉庫データ受信&保存
+static
 int mapif_parse_SaveStorage (int fd)
 {
     struct storage *s;
@@ -518,12 +533,14 @@ int mapif_parse_SaveStorage (int fd)
     return 0;
 }
 
+static
 int mapif_parse_LoadGuildStorage (int fd)
 {
     mapif_load_guild_storage (fd, RFIFOL (fd, 2), RFIFOL (fd, 6));
     return 0;
 }
 
+static
 int mapif_parse_SaveGuildStorage (int fd)
 {
     struct guild_storage *gs;
diff --git a/src/char/inter.cpp b/src/char/inter.cpp
index af95a2d..7752cb4 100644
--- a/src/char/inter.cpp
+++ b/src/char/inter.cpp
@@ -68,6 +68,7 @@ static int wis_dellist[WISDELLIST_MAX], wis_delnum;
 //--------------------------------------------------------
 
 // アカウント変数を文字列へ変換
+static
 int inter_accreg_tostr (char *str, struct accreg *reg)
 {
     int  j;
@@ -83,6 +84,7 @@ int inter_accreg_tostr (char *str, struct accreg *reg)
 }
 
 // アカウント変数を文字列から変換
+static
 int inter_accreg_fromstr (const char *str, struct accreg *reg)
 {
     int  j, v, n;
@@ -106,6 +108,7 @@ int inter_accreg_fromstr (const char *str, struct accreg *reg)
 }
 
 // アカウント変数の読み込み
+static
 int inter_accreg_init (void)
 {
     char line[8192];
@@ -140,6 +143,7 @@ int inter_accreg_init (void)
 }
 
 // アカウント変数のセーブ用
+static
 void inter_accreg_save_sub (db_key_t key, db_val_t data, va_list ap)
 {
     char line[8192];
@@ -155,6 +159,7 @@ void inter_accreg_save_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // アカウント変数のセーブ
+static
 int inter_accreg_save (void)
 {
     FILE *fp;
@@ -179,6 +184,7 @@ int inter_accreg_save (void)
  * 設定ファイルを読み込む
  *------------------------------------------
  */
+static
 int inter_config_read (const char *cfgName)
 {
     char line[1024], w1[1024], w2[1024];
@@ -244,7 +250,7 @@ int inter_config_read (const char *cfgName)
 }
 
 // ログ書き出し
-int inter_log (char *fmt, ...)
+int inter_log (const char *fmt, ...)
 {
     FILE *logfp;
     va_list ap;
@@ -300,6 +306,7 @@ int inter_mapif_init (int fd)
 // sended packets to map-server
 
 // GMメッセージ送信
+static
 int mapif_GMmessage (unsigned char *mes, int len)
 {
     unsigned char buf[len];
@@ -314,6 +321,7 @@ int mapif_GMmessage (unsigned char *mes, int len)
 }
 
 // Wisp/page transmission to all map-server
+static
 int mapif_wis_message (struct WisData *wd)
 {
     unsigned char buf[56 + wd->len];
@@ -330,6 +338,7 @@ int mapif_wis_message (struct WisData *wd)
 }
 
 // Wisp/page transmission result to map-server
+static
 int mapif_wis_end (struct WisData *wd, int flag)
 {
     unsigned char buf[27];
@@ -344,6 +353,7 @@ int mapif_wis_end (struct WisData *wd, int flag)
 }
 
 // アカウント変数送信
+static
 int mapif_account_reg (int fd, unsigned char *src)
 {
     unsigned char buf[WBUFW (src, 2)];
@@ -356,6 +366,7 @@ int mapif_account_reg (int fd, unsigned char *src)
 }
 
 // アカウント変数要求返信
+static
 int mapif_account_reg_reply (int fd, int account_id)
 {
     struct accreg *reg = (struct accreg *)numdb_search (accreg_db, account_id);
@@ -384,6 +395,7 @@ int mapif_account_reg_reply (int fd, int account_id)
 //--------------------------------------------------------
 
 // Existence check of WISP data
+static
 void check_ttl_wisdata_sub (db_key_t key, db_val_t data, va_list ap)
 {
     unsigned long tick;
@@ -395,6 +407,7 @@ void check_ttl_wisdata_sub (db_key_t key, db_val_t data, va_list ap)
         wis_dellist[wis_delnum++] = wd->id;
 }
 
+static
 int check_ttl_wisdata (void)
 {
     unsigned long tick = gettick ();
@@ -424,6 +437,7 @@ int check_ttl_wisdata (void)
 // received packets from map-server
 
 // GMメッセージ送信
+static
 int mapif_parse_GMmessage (int fd)
 {
     mapif_GMmessage (RFIFOP (fd, 4), RFIFOW (fd, 2));
@@ -432,6 +446,7 @@ int mapif_parse_GMmessage (int fd)
 }
 
 // Wisp/page request to send
+static
 int mapif_parse_WisRequest (int fd)
 {
     struct WisData *wd;
@@ -450,7 +465,7 @@ int mapif_parse_WisRequest (int fd)
     }
 
     // search if character exists before to ask all map-servers
-    if ((index = search_character_index (RFIFOP (fd, 28))) == -1)
+    if ((index = search_character_index ((const char *)RFIFOP (fd, 28))) == -1)
     {
         unsigned char buf[27];
         WBUFW (buf, 0) = 0x3802;
@@ -463,9 +478,9 @@ int mapif_parse_WisRequest (int fd)
     {
         // to be sure of the correct name, rewrite it
         memset (RFIFOP (fd, 28), 0, 24);
-        strncpy (RFIFOP (fd, 28), search_character_name (index), 24);
+        strncpy ((char *)RFIFOP (fd, 28), search_character_name (index), 24);
         // if source is destination, don't ask other servers.
-        if (strcmp (RFIFOP (fd, 4), RFIFOP (fd, 28)) == 0)
+        if (strcmp ((const char *)RFIFOP (fd, 4), (const char *)RFIFOP (fd, 28)) == 0)
         {
             unsigned char buf[27];
             WBUFW (buf, 0) = 0x3802;
@@ -496,6 +511,7 @@ int mapif_parse_WisRequest (int fd)
 }
 
 // Wisp/page transmission result
+static
 int mapif_parse_WisReply (int fd)
 {
     int  id = RFIFOL (fd, 2), flag = RFIFOB (fd, 6);
@@ -515,6 +531,7 @@ int mapif_parse_WisReply (int fd)
 }
 
 // Received wisp message from map-server for ALL gm (just copy the message and resends it to ALL map-servers)
+static
 int mapif_parse_WisToGM (int fd)
 {
     unsigned char buf[RFIFOW (fd, 2)];  // 0x3003/0x3803 <packet_len>.w <wispname>.24B <min_gm_level>.w <message>.?B
@@ -527,6 +544,7 @@ int mapif_parse_WisToGM (int fd)
 }
 
 // アカウント変数保存要求
+static
 int mapif_parse_AccReg (int fd)
 {
     int  j, p;
@@ -553,6 +571,7 @@ int mapif_parse_AccReg (int fd)
 }
 
 // アカウント変数送信要求
+static
 int mapif_parse_AccRegRequest (int fd)
 {
 //  printf("mapif: accreg request\n");
diff --git a/src/char/inter.hpp b/src/char/inter.hpp
index 769324c..56960be 100644
--- a/src/char/inter.hpp
+++ b/src/char/inter.hpp
@@ -9,7 +9,8 @@ int  inter_mapif_init (int fd);
 
 int  inter_check_length (int fd, int length);
 
-int  inter_log (char *fmt, ...);
+__attribute__((format(printf, 1, 2)))
+int  inter_log (const char *fmt, ...);
 
 #define inter_cfgName "conf/inter_athena.conf"
 
diff --git a/src/common/GNUmakefile b/src/common/GNUmakefile
index 555f81e..d8d841f 100644
--- a/src/common/GNUmakefile
+++ b/src/common/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. common
+	${MAKE} -C ../.. common
 clean:
 	rm -r ../../obj/common/
 %::
-	make -C ../.. obj/common/$@
+	${MAKE} -C ../.. obj/common/$@
diff --git a/src/common/core.cpp b/src/common/core.cpp
index 38b2260..db26e31 100644
--- a/src/common/core.cpp
+++ b/src/common/core.cpp
@@ -11,10 +11,6 @@
 #include "mt_rand.hpp"
 #include "nullpo.hpp"
 
-/// Defined by each server
-extern int  do_init (int, char **);
-extern void term_func (void);
-
 // Added by Gabuzomeu
 //
 // This is an implementation of signal() using sigaction() for portability.
@@ -22,7 +18,7 @@ extern void term_func (void);
 // Programming in the UNIX Environment_.
 //
 typedef void (*sigfunc)(int);
-sigfunc compat_signal (int signo, sigfunc func)
+static sigfunc compat_signal (int signo, sigfunc func)
 {
     struct sigaction sact, oact;
 
diff --git a/src/common/db.hpp b/src/common/db.hpp
index 145ba13..62125d8 100644
--- a/src/common/db.hpp
+++ b/src/common/db.hpp
@@ -22,6 +22,9 @@ typedef union db_key_t
     char *ms __attribute__((deprecated));
     const char* s;
     numdb_key_t i;
+
+    db_key_t(numdb_key_t n) : i(n) {}
+    db_key_t(const char * z) : s(z) {}
 } db_key_t;
 typedef void* db_val_t;
 typedef uint32_t hash_t;
diff --git a/src/common/grfio.cpp b/src/common/grfio.cpp
index 1b89b18..dd1e707 100644
--- a/src/common/grfio.cpp
+++ b/src/common/grfio.cpp
@@ -29,7 +29,9 @@ static uint16_t filelist_entrys = 0;
 static uint16_t filelist_maxentry = 0;
 
 /// First index of the given hash, into the filelist[] array
-static int16_t filelist_hash[256] = {[0 ... 255] = -1};
+#define l -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
+static int16_t filelist_hash[256] = {l,l,l,l,l,l,l,l,l,l,l,l,l,l,l,l};
+#undef l
 
 /// Hash a filename
 static uint8_t filehash (const char *fname)
@@ -45,6 +47,7 @@ static uint8_t filehash (const char *fname)
 }
 
 /// Find the filelist entry for the given filename, or NULL if it is not
+static
 FILELIST *filelist_find (const char *fname)
 {
     int16_t index = filelist_hash[filehash (fname)];
@@ -98,6 +101,7 @@ static FILELIST *filelist_modify (FILELIST * entry)
 
 /// Change fname data/*.gat to lfname data/*.wlk
 // TODO even if the file exists, don't keep reopening it every time one loads
+static
 void grfio_resnametable (const char *fname, char *lfname)
 {
     char restable[] = "data/resnametable.txt";
diff --git a/src/common/md5calc.cpp b/src/common/md5calc.cpp
index f00861d..b0f8e5f 100644
--- a/src/common/md5calc.cpp
+++ b/src/common/md5calc.cpp
@@ -309,31 +309,26 @@ bool pass_ok(const char *password, const char *crypted) {
 
 // [M|h]ashes up an IP address and a secret key
 // to return a hopefully unique masked IP.
-in_addr_t MD5_ip(char *secret, in_addr_t ip)
+struct in_addr MD5_ip(char *secret, struct in_addr ip)
 {
     char ipbuf[32];
     uint8_t obuf[16];
     union {
-        struct bytes {
-            uint8_t b1;
-            uint8_t b2;
-            uint8_t b3;
-            uint8_t b4;
-        } bytes;
-        in_addr_t ip;
+        uint8_t bytes[4];
+        struct in_addr ip;
     } conv;
 
     // MD5sum a secret + the IP address
     memset(&ipbuf, 0, sizeof(ipbuf));
-    snprintf(ipbuf, sizeof(ipbuf), "%lu%s", (unsigned long)ip, secret);
+    snprintf(ipbuf, sizeof(ipbuf), "%u%s", ip.s_addr, secret);
     /// TODO stop it from being a cstring
     MD5_to_bin(MD5_from_cstring(ipbuf), obuf);
 
-    // Fold the md5sum to 32 bits, pack the bytes to an in_addr_t
-    conv.bytes.b1 = obuf[0] ^ obuf[1] ^ obuf[8] ^ obuf[9];
-    conv.bytes.b2 = obuf[2] ^ obuf[3] ^ obuf[10] ^ obuf[11];
-    conv.bytes.b3 = obuf[4] ^ obuf[5] ^ obuf[12] ^ obuf[13];
-    conv.bytes.b4 = obuf[6] ^ obuf[7] ^ obuf[14] ^ obuf[15];
+    // Fold the md5sum to 32 bits, pack the bytes to an in_addr
+    conv.bytes[0] = obuf[0] ^ obuf[1] ^ obuf[8] ^ obuf[9];
+    conv.bytes[1] = obuf[2] ^ obuf[3] ^ obuf[10] ^ obuf[11];
+    conv.bytes[2] = obuf[4] ^ obuf[5] ^ obuf[12] ^ obuf[13];
+    conv.bytes[3] = obuf[6] ^ obuf[7] ^ obuf[14] ^ obuf[15];
 
     return conv.ip;
 }
diff --git a/src/common/md5calc.hpp b/src/common/md5calc.hpp
index 1dde2ed..2dfaecb 100644
--- a/src/common/md5calc.hpp
+++ b/src/common/md5calc.hpp
@@ -58,7 +58,7 @@ const char *make_salt(void);
 /// check plaintext password against saved saltcrypt
 bool pass_ok(const char *password, const char *crypted);
 
-/// This returns an in_addr_t because it is configurable whether it gets called at all
-in_addr_t MD5_ip(char *secret, in_addr_t ip);
+/// This returns an in_addr because it is configurable whether it gets called at all
+struct in_addr MD5_ip(char *secret, struct in_addr ip);
 
 #endif
diff --git a/src/common/mmo.hpp b/src/common/mmo.hpp
index 2ca93b0..151fa03 100644
--- a/src/common/mmo.hpp
+++ b/src/common/mmo.hpp
@@ -185,14 +185,14 @@ struct guild_position
     int  exp_mode;
 };
 
-struct guild_alliance
+struct GuildAlliance
 {
     int  opposition;
     int  guild_id;
     char name[24];
 };
 
-struct guild_explusion
+struct GuildExpulsion
 {
     char name[24];
     char mes[40];
@@ -217,8 +217,8 @@ struct guild
     char mes1[60], mes2[120];
     int  emblem_len, emblem_id;
     char emblem_data[2048];
-    struct guild_alliance alliance[MAX_GUILDALLIANCE];
-    struct guild_explusion explusion[MAX_GUILDEXPLUSION];
+    GuildAlliance alliance[MAX_GUILDALLIANCE];
+    GuildExpulsion explusion[MAX_GUILDEXPLUSION];
     struct guild_skill skill[MAX_GUILDSKILL];
 };
 
diff --git a/src/common/mt_rand.cpp b/src/common/mt_rand.cpp
index 89872ad..676eca1 100644
--- a/src/common/mt_rand.cpp
+++ b/src/common/mt_rand.cpp
@@ -70,6 +70,7 @@ void mt_seed (uint32_t seed)
     for (int j = N; *s++ = x, --j; x *= 69069U);
 }
 
+static
 void mt_reload (void)
 {
     // if mt_seed has never been called
diff --git a/src/common/nullpo.cpp b/src/common/nullpo.cpp
index 6dd2736..67c839f 100644
--- a/src/common/nullpo.cpp
+++ b/src/common/nullpo.cpp
@@ -3,6 +3,8 @@
 #include <string.h>
 #include "nullpo.hpp"
 
+static void nullpo_info_core (const char *file, int line, const char *func);
+__attribute__((format(printf, 4, 0)))
 static void nullpo_info_core (const char *file, int line, const char *func,
                               const char *fmt, va_list ap);
 
@@ -26,7 +28,7 @@ bool nullpo_chk (const char *file, int line, const char *func,
     if (target)
         return 0;
 
-    nullpo_info_core (file, line, func, NULL, NULL);
+    nullpo_info_core (file, line, func);
     return 1;
 }
 
@@ -42,14 +44,11 @@ void nullpo_info_f (const char *file, int line, const char *func,
 }
 void nullpo_info (const char *file, int line, const char *func)
 {
-    nullpo_info_core (file, line, func, NULL, NULL);
+    nullpo_info_core (file, line, func);
 }
 
 /// Actual output function
-static void nullpo_info_core (const char *file, int line, const char *func,
-                              const char *fmt, va_list ap) __attribute__((format(printf, 4, 0)));
-static void nullpo_info_core (const char *file, int line, const char *func,
-                              const char *fmt, va_list ap)
+static void nullpo_info_core (const char *file, int line, const char *func)
 {
     if (!file)
         file = "??";
@@ -57,6 +56,12 @@ static void nullpo_info_core (const char *file, int line, const char *func,
         func = "unknown";
 
     fprintf (stderr, "%s:%d: in func `%s': NULL pointer\n", file, line, func);
+}
+
+static void nullpo_info_core (const char *file, int line, const char *func,
+                              const char *fmt, va_list ap)
+{
+    nullpo_info_core(file, line, func);
     if (fmt && *fmt)
     {
         vfprintf (stderr, fmt, ap);
diff --git a/src/common/utils.cpp b/src/common/utils.cpp
new file mode 100644
index 0000000..fbdd87e
--- /dev/null
+++ b/src/common/utils.cpp
@@ -0,0 +1,97 @@
+#include "utils.hpp"
+
+#include <cstring>
+#include <cstdio>
+#include <cstdlib>
+
+#include <netinet/in.h>
+
+//-----------------------------------------------------
+// Function to suppress control characters in a string.
+//-----------------------------------------------------
+int remove_control_chars (char *str)
+{
+    int  i;
+    int  change = 0;
+
+    for (i = 0; str[i]; i++)
+    {
+        if (0 <= str[i] && str[i] < 32)
+        {
+            str[i] = '_';
+            change = 1;
+        }
+    }
+
+    return change;
+}
+
+//---------------------------------------------------
+// E-mail check: return 0 (not correct) or 1 (valid).
+//---------------------------------------------------
+int e_mail_check (const char *email)
+{
+    char ch;
+    const char *last_arobas;
+
+    // athena limits
+    if (strlen (email) < 3 || strlen (email) > 39)
+        return 0;
+
+    // part of RFC limits (official reference of e-mail description)
+    if (strchr (email, '@') == NULL || email[strlen (email) - 1] == '@')
+        return 0;
+
+    if (email[strlen (email) - 1] == '.')
+        return 0;
+
+    last_arobas = strrchr (email, '@');
+
+    if (strstr (last_arobas, "@.") != NULL ||
+        strstr (last_arobas, "..") != NULL)
+        return 0;
+
+    for (ch = 1; ch < 32; ch++)
+    {
+        if (strchr (last_arobas, ch) != NULL)
+        {
+            return 0;
+            break;
+        }
+    }
+
+    if (strchr (last_arobas, ' ') != NULL ||
+        strchr (last_arobas, ';') != NULL)
+        return 0;
+
+    // all correct
+    return 1;
+}
+
+//-------------------------------------------------
+// Return numerical value of a switch configuration
+// on/off, english, français, deutsch, español
+//-------------------------------------------------
+int config_switch (const char *str)
+{
+    if (strcasecmp (str, "on") == 0 || strcasecmp (str, "yes") == 0
+        || strcasecmp (str, "oui") == 0 || strcasecmp (str, "ja") == 0
+        || strcasecmp (str, "si") == 0)
+        return 1;
+    if (strcasecmp (str, "off") == 0 || strcasecmp (str, "no") == 0
+        || strcasecmp (str, "non") == 0 || strcasecmp (str, "nein") == 0)
+        return 0;
+
+    return atoi (str);
+}
+
+const char *ip2str(struct in_addr ip, bool extra_dot)
+{
+    const uint8_t *p = (const uint8_t *)(&ip);
+    static char buf[17];
+    if (extra_dot)
+        sprintf(buf, "%d.%d.%d.%d.", p[0], p[1], p[2], p[3]);
+    else
+        sprintf(buf, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
+    return buf;
+}
diff --git a/src/common/utils.hpp b/src/common/utils.hpp
index 7c7da16..1097bf7 100644
--- a/src/common/utils.hpp
+++ b/src/common/utils.hpp
@@ -1,5 +1,8 @@
 #ifndef UTILS_HPP
 #define UTILS_HPP
+
+#include "sanity.hpp"
+
 /*
 Notes about memory allocation in tmwAthena:
 There used to be 3 sources of allocation: these macros,
@@ -15,4 +18,9 @@ future calls should either use this or depend on the coming segfault.
   if (!((result) = (type *) realloc ((result), sizeof(type) * (number))))\
       { perror("SYSERR: realloc failure"); abort(); } else (void)0
 
+int remove_control_chars (char *str);
+int e_mail_check (const char *email);
+int config_switch (const char *str);
+const char *ip2str(struct in_addr ip, bool extra_dot = false);
+
 #endif //UTILS_HPP
diff --git a/src/ladmin/GNUmakefile b/src/ladmin/GNUmakefile
index 1461bcf..d44f89d 100644
--- a/src/ladmin/GNUmakefile
+++ b/src/ladmin/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. ladmin
+	${MAKE} -C ../.. ladmin
 clean:
 	rm -r ../../obj/ladmin/
 %::
-	make -C ../.. obj/ladmin/$@
+	${MAKE} -C ../.. obj/ladmin/$@
diff --git a/src/ladmin/ladmin.cpp b/src/ladmin/ladmin.cpp
index 01eb244..dbad7bb 100644
--- a/src/ladmin/ladmin.cpp
+++ b/src/ladmin/ladmin.cpp
@@ -255,6 +255,8 @@ int  already_exit_function = 0; // sometimes, the exit function is called twice.
 //------------------------------
 // Writing function of logs file
 //------------------------------
+static __attribute__((format(printf, 1, 2)))
+int ladmin_log (const char *fmt, ...);
 int ladmin_log (const char *fmt, ...)
 {
     FILE *logfp;
@@ -284,29 +286,10 @@ int ladmin_log (const char *fmt, ...)
     return 0;
 }
 
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars (unsigned char *str)
-{
-    int  i;
-    int  change = 0;
-
-    for (i = 0; str[i]; i++)
-    {
-        if (str[i] < 32)
-        {
-            str[i] = '_';
-            change = 1;
-        }
-    }
-
-    return change;
-}
-
 //---------------------------------------------
 // Function to return ordonal text of a number.
 //---------------------------------------------
+static
 const char *makeordinal (int number)
 {
     if (defaultlanguage == 'F')
@@ -341,7 +324,8 @@ const char *makeordinal (int number)
 //-----------------------------------------------------------------------------------------
 // Function to test of the validity of an account name (return 0 if incorrect, and 1 if ok)
 //-----------------------------------------------------------------------------------------
-int verify_accountname (char *account_name)
+static
+int verify_accountname (const char *account_name)
 {
     int  i;
 
@@ -412,51 +396,10 @@ int verify_accountname (char *account_name)
     return 1;
 }
 
-//---------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid).
-//---------------------------------------------------
-int e_mail_check (unsigned char *email)
-{
-    char ch;
-    unsigned char *last_arobas;
-
-    // athena limits
-    if (strlen (email) < 3 || strlen (email) > 39)
-        return 0;
-
-    // part of RFC limits (official reference of e-mail description)
-    if (strchr (email, '@') == NULL || email[strlen (email) - 1] == '@')
-        return 0;
-
-    if (email[strlen (email) - 1] == '.')
-        return 0;
-
-    last_arobas = strrchr (email, '@');
-
-    if (strstr (last_arobas, "@.") != NULL ||
-        strstr (last_arobas, "..") != NULL)
-        return 0;
-
-    for (ch = 1; ch < 32; ch++)
-    {
-        if (strchr (last_arobas, ch) != NULL)
-        {
-            return 0;
-            break;
-        }
-    }
-
-    if (strchr (last_arobas, ' ') != NULL ||
-        strchr (last_arobas, ';') != NULL)
-        return 0;
-
-    // all correct
-    return 1;
-}
-
 //----------------------------------
 // Sub-function: Input of a password
 //----------------------------------
+static
 int typepasswd (char *password)
 {
     char password1[1023], password2[1023];
@@ -532,7 +475,8 @@ int typepasswd (char *password)
 //------------------------------------------------------------------------------------
 // Sub-function: Test of the validity of password (return 0 if incorrect, and 1 if ok)
 //------------------------------------------------------------------------------------
-int verify_password (char *password)
+static
+int verify_password (const char *password)
 {
     int  i;
 
@@ -606,6 +550,7 @@ int verify_password (char *password)
 //------------------------------------------------------------------
 // Sub-function: Check the name of a command (return complete name)
 //-----------------------------------------------------------------
+static
 int check_command (char *command)
 {
 // help
@@ -733,7 +678,8 @@ int check_command (char *command)
 //-----------------------------------------
 // Sub-function: Display commands of ladmin
 //-----------------------------------------
-void display_help (char *param, int language)
+static
+void display_help (const char *param, int language)
 {
     char command[1023];
     int  i;
@@ -1592,7 +1538,8 @@ void display_help (char *param, int language)
 //-----------------------------
 // Sub-function: add an account
 //-----------------------------
-int addaccount (char *param, int emailflag)
+static
+int addaccount (const char *param, int emailflag)
 {
     char name[1023], sex[1023], email[1023], password[1023];
 //  int i;
@@ -1785,11 +1732,12 @@ int addaccount (char *param, int emailflag)
 //---------------------------------------------------------------------------------
 // Sub-function: Add/substract time to the final date of a banishment of an account
 //---------------------------------------------------------------------------------
-int banaddaccount (char *param)
+static
+int banaddaccount (const char *param)
 {
     char name[1023], modif[1023];
     int  year, month, day, hour, minute, second;
-    char *p_modif;
+    const char *p_modif;
     int  value, i;
 
     memset (name, '\0', sizeof (name));
@@ -2080,7 +2028,8 @@ int banaddaccount (char *param)
 // Sub-function of sub-function banaccount, unbanaccount or bansetaccount
 // Set the final date of a banishment of an account
 //-----------------------------------------------------------------------
-int bansetaccountsub (char *name, char *date, char *time)
+static
+int bansetaccountsub (const char *name, const char *date, const char *time)
 {
     int  year, month, day, hour, minute, second;
     time_t ban_until_time;      // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban)
@@ -2299,7 +2248,8 @@ int bansetaccountsub (char *name, char *date, char *time)
 //---------------------------------------------------------------------
 // Sub-function: Set the final date of a banishment of an account (ban)
 //---------------------------------------------------------------------
-int banaccount (char *param)
+static
+int banaccount (const char *param)
 {
     char name[1023], date[1023], time[1023];
 
@@ -2347,7 +2297,8 @@ int banaccount (char *param)
 //------------------------------------------------------------------------
 // Sub-function: Set the final date of a banishment of an account (banset)
 //------------------------------------------------------------------------
-int bansetaccount (char *param)
+static
+int bansetaccount (const char *param)
 {
     char name[1023], date[1023], time[1023];
 
@@ -2398,7 +2349,8 @@ int bansetaccount (char *param)
 //-------------------------------------------------
 // Sub-function: unbanishment of an account (unban)
 //-------------------------------------------------
-int unbanaccount (char *param)
+static
+int unbanaccount (const char *param)
 {
     char name[1023];
 
@@ -2446,7 +2398,8 @@ int unbanaccount (char *param)
 // Sub-function: Asking to check the validity of a password
 // (Note: never send back a password with login-server!! security of passwords)
 //---------------------------------------------------------
-int checkaccount (char *param)
+static
+int checkaccount (const char *param)
 {
     char name[1023], password[1023];
 
@@ -2509,7 +2462,8 @@ int checkaccount (char *param)
 //------------------------------------------------
 // Sub-function: Asking for deletion of an account
 //------------------------------------------------
-int delaccount (char *param)
+static
+int delaccount (const char *param)
 {
     char name[1023];
     char letter;
@@ -2599,7 +2553,8 @@ int delaccount (char *param)
 //----------------------------------------------------------
 // Sub-function: Asking to modification of an account e-mail
 //----------------------------------------------------------
-int changeemail (char *param)
+static
+int changeemail (const char *param)
 {
     char name[1023], email[1023];
 
@@ -2715,6 +2670,7 @@ int changeemail (char *param)
 //-----------------------------------------------------
 // Sub-function: Asking of the number of online players
 //-----------------------------------------------------
+static
 int getlogincount (void)
 {
     if (defaultlanguage == 'F')
@@ -2738,7 +2694,8 @@ int getlogincount (void)
 //----------------------------------------------------------
 // Sub-function: Asking to modify the GM level of an account
 //----------------------------------------------------------
-int changegmlevel (char *param)
+static
+int changegmlevel (const char *param)
 {
     char name[1023];
     int  GM_level;
@@ -2817,7 +2774,8 @@ int changegmlevel (char *param)
 //---------------------------------------------
 // Sub-function: Asking to obtain an account id
 //---------------------------------------------
-int idaccount (char *param)
+static
+int idaccount (const char *param)
 {
     char name[1023];
 
@@ -2871,6 +2829,7 @@ int idaccount (char *param)
 //----------------------------------------------------------------------------
 // Sub-function: Asking to displaying information about an account (by its id)
 //----------------------------------------------------------------------------
+static
 int infoaccount (int account_id)
 {
     if (account_id < 0)
@@ -2911,7 +2870,8 @@ int infoaccount (int account_id)
 //---------------------------------------
 // Sub-function: Send a broadcast message
 //---------------------------------------
-int sendbroadcast (short type, char *message)
+static
+int sendbroadcast (short type, const char *message)
 {
     if (strlen (message) == 0)
     {
@@ -2957,6 +2917,7 @@ int sendbroadcast (short type, char *message)
 //--------------------------------------------
 // Sub-function: Change language of displaying
 //--------------------------------------------
+static
 int changelanguage (char *language)
 {
     if (strlen (language) == 0)
@@ -3016,6 +2977,7 @@ int changelanguage (char *language)
 //--------------------------------------------------------
 // Sub-function: Asking to Displaying of the accounts list
 //--------------------------------------------------------
+static
 int listaccount (char *param, int type)
 {
 //int list_first, list_last, list_type; // parameter to display a list of accounts
@@ -3104,7 +3066,8 @@ int listaccount (char *param, int type)
 //--------------------------------------------------------
 // Sub-function: Frobnicate items
 //--------------------------------------------------------
-int itemfrob (char *param)
+static
+int itemfrob (const char *param)
 {
     int  source_id, dest_id;
 
@@ -3126,7 +3089,8 @@ int itemfrob (char *param)
 //--------------------------------------------
 // Sub-function: Asking to modify a memo field
 //--------------------------------------------
-int changememo (char *param)
+static
+int changememo (const char *param)
 {
     char name[1023], memo[1023];
 
@@ -3204,6 +3168,7 @@ int changememo (char *param)
 //-----------------------------------------------
 // Sub-function: Asking to obtain an account name
 //-----------------------------------------------
+static
 int nameaccount (int id)
 {
     if (id < 0)
@@ -3241,7 +3206,8 @@ int nameaccount (int id)
 // Sub-function: Asking to modify a password
 // (Note: never send back a password with login-server!! security of passwords)
 //------------------------------------------
-int changepasswd (char *param)
+static
+int changepasswd (const char *param)
 {
     char name[1023], password[1023];
 
@@ -3305,6 +3271,7 @@ int changepasswd (char *param)
 // Sub-function: Request to login-server to reload GM configuration file
 // this function have no answer
 //----------------------------------------------------------------------
+static
 int reloadGM (void)
 {
     WFIFOW (login_fd, 0) = 0x7955;
@@ -3333,7 +3300,8 @@ int reloadGM (void)
 //-----------------------------------------------------
 // Sub-function: Asking to modify the sex of an account
 //-----------------------------------------------------
-int changesex (char *param)
+static
+int changesex (const char *param)
 {
     char name[1023], sex[1023];
 
@@ -3407,7 +3375,8 @@ int changesex (char *param)
 // Sub-function of sub-function changestate, blockaccount or unblockaccount
 // Asking to modify the state of an account
 //-------------------------------------------------------------------------
-int changestatesub (char *name, int state, char *error_message7)
+static
+int changestatesub (const char *name, int state, const char *error_message7)
 {
     char error_message[1023];   // need to use, because we can modify error_message7
 
@@ -3529,7 +3498,8 @@ int changestatesub (char *name, int state, char *error_message7)
 //-------------------------------------------------------
 // Sub-function: Asking to modify the state of an account
 //-------------------------------------------------------
-int changestate (char *param)
+static
+int changestate (const char *param)
 {
     char name[1023], error_message[1023];
     int  state;
@@ -3572,7 +3542,8 @@ int changestate (char *param)
 //-------------------------------------------
 // Sub-function: Asking to unblock an account
 //-------------------------------------------
-int unblockaccount (char *param)
+static
+int unblockaccount (const char *param)
 {
     char name[1023];
 
@@ -3612,7 +3583,8 @@ int unblockaccount (char *param)
 //-------------------------------------------
 // Sub-function: Asking to unblock an account
 //-------------------------------------------
-int blockaccount (char *param)
+static
+int blockaccount (const char *param)
 {
     char name[1023];
 
@@ -3652,11 +3624,12 @@ int blockaccount (char *param)
 //---------------------------------------------------------------------
 // Sub-function: Add/substract time to the validity limit of an account
 //---------------------------------------------------------------------
-int timeaddaccount (char *param)
+static
+int timeaddaccount (const char *param)
 {
     char name[1023], modif[1023];
     int  year, month, day, hour, minute, second;
-    char *p_modif;
+    const char *p_modif;
     int  value, i;
 
     memset (name, '\0', sizeof (name));
@@ -3946,7 +3919,8 @@ int timeaddaccount (char *param)
 //-------------------------------------------------
 // Sub-function: Set a validity limit of an account
 //-------------------------------------------------
-int timesetaccount (char *param)
+static
+int timesetaccount (const char *param)
 {
     char name[1023], date[1023], time[1023];
     int  year, month, day, hour, minute, second;
@@ -4185,7 +4159,8 @@ int timesetaccount (char *param)
 //------------------------------------------------------------------------------
 // Sub-function: Asking to displaying information about an account (by its name)
 //------------------------------------------------------------------------------
-int whoaccount (char *param)
+static
+int whoaccount (const char *param)
 {
     char name[1023];
 
@@ -4237,6 +4212,7 @@ int whoaccount (char *param)
 //--------------------------------------------------------
 // Sub-function: Asking of the version of the login-server
 //--------------------------------------------------------
+static
 int checkloginversion (void)
 {
     if (defaultlanguage == 'F')
@@ -4257,6 +4233,7 @@ int checkloginversion (void)
 // this function wait until user type a command
 // and analyse the command.
 //---------------------------------------------
+static
 int prompt (void)
 {
     int  i, j;
@@ -4586,6 +4563,7 @@ int prompt (void)
 //-------------------------------------------------------------
 // Function: Parse receiving informations from the login-server
 //-------------------------------------------------------------
+static
 void parse_fromlogin (int fd)
 {
     struct char_session_data *sd;
@@ -4681,20 +4659,20 @@ void parse_fromlogin (int fd)
                 if (RFIFOREST (fd) < 4 || RFIFOREST (fd) < RFIFOW (fd, 2))
                     return;
                 {
-                    char md5str[64] =
-                        "", md5bin[32], md5key[RFIFOW (fd, 2) - 4 + 1];
+                    char md5str[64] = "";
+                    uint8_t md5bin[32], md5key[RFIFOW (fd, 2) - 4 + 1];
                     memcpy (md5key, RFIFOP (fd, 4), RFIFOW (fd, 2) - 4);
                     md5key[sizeof (md5key) - 1] = '0';
                     if (passenc == 1)
                     {
-                        strncpy (md5str, RFIFOP (fd, 4), RFIFOW (fd, 2) - 4);
+                        strncpy (md5str, (const char *)RFIFOP (fd, 4), RFIFOW (fd, 2) - 4);
                         strcat (md5str, loginserveradminpassword);
                     }
                     else if (passenc == 2)
                     {
                         strncpy (md5str, loginserveradminpassword,
                                  sizeof (loginserveradminpassword));
-                        strcat (md5str, RFIFOP (fd, 4));
+                        strcat (md5str, (const char *)RFIFOP (fd, 4));
                     }
                     MD5_to_bin(MD5_from_cstring(md5str), md5bin);
                     WFIFOW (login_fd, 0) = 0x7918;  // Request for administation login (encrypted password)
@@ -5505,7 +5483,7 @@ void parse_fromlogin (int fd)
             case 0x7947:       // answer of an account name search
                 if (RFIFOREST (fd) < 30)
                     return;
-                if (strcmp (RFIFOP (fd, 6), "") == 0)
+                if (strcmp ((const char *)RFIFOP (fd, 6), "") == 0)
                 {
                     if (defaultlanguage == 'F')
                     {
@@ -5935,7 +5913,7 @@ void parse_fromlogin (int fd)
                     connect_until_time = (time_t) RFIFOL (fd, 140);
                     ban_until_time = (time_t) RFIFOL (fd, 144);
                     memset (memo, '\0', sizeof (memo));
-                    strncpy (memo, RFIFOP (fd, 150), RFIFOW (fd, 148));
+                    strncpy (memo, (const char *)RFIFOP (fd, 150), RFIFOW (fd, 148));
                     if (RFIFOL (fd, 2) == -1)
                     {
                         if (defaultlanguage == 'F')
@@ -6170,6 +6148,7 @@ void parse_fromlogin (int fd)
 //------------------------------------
 // Function to connect to login-server
 //------------------------------------
+static
 int Connect_login_server (void)
 {
     if (defaultlanguage == 'F')
@@ -6229,26 +6208,10 @@ int Connect_login_server (void)
     return 0;
 }
 
-//-------------------------------------------------
-// Return numerical value of a switch configuration
-// on/off, english, français, deutsch, español
-//-------------------------------------------------
-int config_switch (const char *str)
-{
-    if (strcasecmp (str, "on") == 0 || strcasecmp (str, "yes") == 0
-        || strcasecmp (str, "oui") == 0 || strcasecmp (str, "ja") == 0
-        || strcasecmp (str, "si") == 0)
-        return 1;
-    if (strcasecmp (str, "off") == 0 || strcasecmp (str, "no") == 0
-        || strcasecmp (str, "non") == 0 || strcasecmp (str, "nein") == 0)
-        return 0;
-
-    return atoi (str);
-}
-
 //-----------------------------------
 // Reading general configuration file
 //-----------------------------------
+static
 int ladmin_config_read (const char *cfgName)
 {
     char line[1024], w1[1024], w2[1024];
diff --git a/src/login/GNUmakefile b/src/login/GNUmakefile
index 912127d..a87b879 100644
--- a/src/login/GNUmakefile
+++ b/src/login/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. login-server
+	${MAKE} -C ../.. login-server
 clean:
 	rm -r ../../obj/login/
 %::
-	make -C ../.. obj/login/$@
+	${MAKE} -C ../.. obj/login/$@
diff --git a/src/login/login.cpp b/src/login/login.cpp
index 543f32f..ce3fd4e 100644
--- a/src/login/login.cpp
+++ b/src/login/login.cpp
@@ -34,6 +34,9 @@
 #include "memwatch.hpp"
 #endif
 
+#include <type_traits>
+static_assert(std::is_same<time_t, long>::value, "much code assumes time_t is a long");
+
 int  account_id_count = START_ACCOUNT_NUM;
 int  server_num;
 int  new_account_flag = 0;
@@ -135,7 +138,8 @@ pid_t pid = 0; // For forked DB writes
 //------------------------------
 // Writing function of logs file
 //------------------------------
-int login_log (char *fmt, ...)
+static __attribute__((format(printf, 1, 2)))
+int login_log (const char *fmt, ...)
 {
     FILE *logfp;
     va_list ap;
@@ -168,6 +172,7 @@ int login_log (char *fmt, ...)
 // Determine if an account (id) is a GM account
 // and returns its level (or 0 if it isn't a GM account or if not found)
 //----------------------------------------------------------------------
+static
 int isGM (int account_id)
 {
     struct gm_account *p = (struct gm_account*) numdb_search (gm_account_db, account_id);
@@ -179,6 +184,7 @@ int isGM (int account_id)
 //-------------------------------------------------------
 // Reading function of GM accounts file (and their level)
 //-------------------------------------------------------
+static
 int read_gm_account (void)
 {
     char line[512];
@@ -278,7 +284,8 @@ int read_gm_account (void)
 // Test of the IP mask
 // (ip: IP to be tested, str: mask x.x.x.x/# or x.x.x.x/y.y.y.y)
 //--------------------------------------------------------------
-int check_ipmask (unsigned int ip, const unsigned char *str)
+static
+int check_ipmask (struct in_addr ip, const char *str)
 {
     unsigned int mask = 0, i = 0, m, ip2, a0, a1, a2, a3;
     unsigned char *p = (unsigned char *) &ip2, *p2 = (unsigned char *) &mask;
@@ -298,7 +305,7 @@ int check_ipmask (unsigned int ip, const unsigned char *str)
         p2[3] = a3;
         mask = ntohl (mask);
     }
-    else if (sscanf (str + i, "%d", &m) == 1 && m >= 0 && m <= 32)
+    else if (sscanf (str + i, "%d", &m) == 1 && m <= 32)
     {
         for (i = 0; i < m && i < 32; i++)
             mask = (mask >> 1) | 0x80000000;
@@ -311,17 +318,16 @@ int check_ipmask (unsigned int ip, const unsigned char *str)
 
 //  printf("Tested IP: %08x, network: %08x, network mask: %08x\n",
 //         (unsigned int)ntohl(ip), (unsigned int)ntohl(ip2), (unsigned int)mask);
-    return ((ntohl (ip) & mask) == (ntohl (ip2) & mask));
+    return ((ntohl (ip.s_addr) & mask) == (ntohl (ip2) & mask));
 }
 
 //---------------------
 // Access control by IP
 //---------------------
-int check_ip (unsigned int ip)
+static
+int check_ip (struct in_addr ip)
 {
     int  i;
-    unsigned char *p = (unsigned char *) &ip;
-    char buf[32];
     enum
     { ACF_DEF, ACF_ALLOW, ACF_DENY } flag = ACF_DEF;
 
@@ -337,7 +343,7 @@ int check_ip (unsigned int ip)
 //      If we have an answer, there is no guarantee to have a 100% correct value.
 //      And, the waiting time (to check) can be long (over 1 minute to a timeout). That can block the software.
 //      So, DNS notation isn't authorised for ip checking.
-    sprintf (buf, "%d.%d.%d.%d.", p[0], p[1], p[2], p[3]);
+    const char *buf = ip2str(ip, true);
 
     for (i = 0; i < access_allownum; i++)
     {
@@ -372,11 +378,10 @@ int check_ip (unsigned int ip)
 //--------------------------------
 // Access control by IP for ladmin
 //--------------------------------
-int check_ladminip (unsigned int ip)
+static
+int check_ladminip (struct in_addr ip)
 {
     int  i;
-    unsigned char *p = (unsigned char *) &ip;
-    char buf[32];
 
     if (access_ladmin_allownum == 0)
         return 1;               // When there is no restriction, all IP are authorised.
@@ -390,7 +395,7 @@ int check_ladminip (unsigned int ip)
 //      If we have an answer, there is no guarantee to have a 100% correct value.
 //      And, the waiting time (to check) can be long (over 1 minute to a timeout). That can block the software.
 //      So, DNS notation isn't authorised for ip checking.
-    sprintf (buf, "%d.%d.%d.%d.", p[0], p[1], p[2], p[3]);
+    const char *buf = ip2str(ip, true);
 
     for (i = 0; i < access_ladmin_allownum; i++)
     {
@@ -404,68 +409,6 @@ int check_ladminip (unsigned int ip)
     return 0;
 }
 
-//-----------------------------------------------------
-// Function to suppress control characters in a string.
-//-----------------------------------------------------
-int remove_control_chars (unsigned char *str)
-{
-    int  i;
-    int  change = 0;
-
-    for (i = 0; str[i]; i++)
-    {
-        if (str[i] < 32)
-        {
-            str[i] = '_';
-            change = 1;
-        }
-    }
-
-    return change;
-}
-
-//---------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid).
-//---------------------------------------------------
-int e_mail_check (unsigned char *email)
-{
-    char ch;
-    unsigned char *last_arobas;
-
-    // athena limits
-    if (strlen (email) < 3 || strlen (email) > 39)
-        return 0;
-
-    // part of RFC limits (official reference of e-mail description)
-    if (strchr (email, '@') == NULL || email[strlen (email) - 1] == '@')
-        return 0;
-
-    if (email[strlen (email) - 1] == '.')
-        return 0;
-
-    last_arobas = strrchr (email, '@');
-
-    if (strstr (last_arobas, "@.") != NULL ||
-        strstr (last_arobas, "..") != NULL)
-        return 0;
-
-    for (ch = 1; ch < 32; ch++)
-    {
-        if (strchr (last_arobas, ch) != NULL)
-        {
-            return 0;
-            break;
-        }
-    }
-
-    if (strchr (last_arobas, ' ') != NULL ||
-        strchr (last_arobas, ';') != NULL)
-        return 0;
-
-    // all correct
-    return 1;
-}
-
 //-----------------------------------------------
 // Search an account id
 //   (return account index or -1 (if not found))
@@ -474,6 +417,7 @@ int e_mail_check (unsigned char *email)
 //   and returns index if only 1 account is found
 //   and similar to the searched name.
 //-----------------------------------------------
+static
 int search_account_index (char *account_name)
 {
     int  i, quantity, index;
@@ -504,6 +448,7 @@ int search_account_index (char *account_name)
 //--------------------------------------------------------
 // Create a string to save the account in the account file
 //--------------------------------------------------------
+static
 int mmo_auth_tostr (char *str, struct auth_dat *p)
 {
     int  i;
@@ -530,6 +475,7 @@ int mmo_auth_tostr (char *str, struct auth_dat *p)
 //---------------------------------
 // Reading of the accounts database
 //---------------------------------
+static
 int mmo_auth_init (void)
 {
     FILE *fp;
@@ -967,6 +913,7 @@ int mmo_auth_init (void)
 // Writing of the accounts database file
 //   (accounts are sorted by id before save)
 //------------------------------------------
+static
 void mmo_auth_sync (void)
 {
     FILE *fp;
@@ -1036,6 +983,7 @@ void mmo_auth_sync (void)
 // update the account DB will not immideately trigger a save. Instead
 // we save periodicly on a timer.
 //-----------------------------------------------------
+static
 void check_auth_sync (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     if (pid != 0)
@@ -1067,6 +1015,7 @@ void check_auth_sync (timer_id tid, tick_t tick, custom_id_t id, custom_data_t d
 //--------------------------------------------------------------------
 // Packet send to all char-servers, except one (wos: without our self)
 //--------------------------------------------------------------------
+static
 int charif_sendallwos (int sfd, unsigned char *buf, unsigned int len)
 {
     int  i, c;
@@ -1087,10 +1036,11 @@ int charif_sendallwos (int sfd, unsigned char *buf, unsigned int len)
 //-----------------------------------------------------
 // Send GM accounts to all char-server
 //-----------------------------------------------------
+static
 void send_GM_accounts (void)
 {
     int  i;
-    char buf[32000];
+    uint8_t buf[32000];
     int  GM_value;
     int  len;
 
@@ -1113,6 +1063,7 @@ void send_GM_accounts (void)
 //-----------------------------------------------------
 // Check if GM file account have been changed
 //-----------------------------------------------------
+static
 void check_GM_file (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct stat file_stat;
@@ -1138,7 +1089,8 @@ void check_GM_file (timer_id tid, tick_t tick, custom_id_t id, custom_data_t dat
 //-------------------------------------
 // Account creation (with e-mail check)
 //-------------------------------------
-int mmo_auth_new (struct mmo_account *account, char sex, char *email)
+static
+int mmo_auth_new (struct mmo_account *account, char sex, const char *email)
 {
     time_t timestamp, timestamp_temp;
     struct tm *tmtime;
@@ -1208,6 +1160,7 @@ int mmo_auth_new (struct mmo_account *account, char sex, char *email)
 //---------------------------------------
 // Check/authentification of a connection
 //---------------------------------------
+static
 int mmo_auth (struct mmo_account *account, int fd)
 {
     int  i;
@@ -1217,12 +1170,8 @@ int mmo_auth (struct mmo_account *account, int fd)
 #ifdef PASSWDENC
     char md5str[64], md5bin[32];
 #endif
-    char ip[16];
-    unsigned char *sin_addr =
-        (unsigned char *) &session[fd]->client_addr.sin_addr;
 
-    sprintf (ip, "%d.%d.%d.%d", sin_addr[0], sin_addr[1], sin_addr[2],
-             sin_addr[3]);
+    const char *ip = ip2str(session[fd]->client_addr.sin_addr);
 
     len = strlen (account->userid) - 2;
     // Account creation with _M/_F
@@ -1429,6 +1378,7 @@ int mmo_auth (struct mmo_account *account, int fd)
 //-------------------------------
 // Char-server anti-freeze system
 //-------------------------------
+static
 void char_anti_freeze_system (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     int  i;
@@ -1456,13 +1406,12 @@ void char_anti_freeze_system (timer_id tid, tick_t tick, custom_id_t id, custom_
 //--------------------------------
 // Packet parsing for char-servers
 //--------------------------------
+static
 void parse_fromchar (int fd)
 {
     int  i, j, id;
-    unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-    char ip[16];
 
-    sprintf (ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
+    const char *ip = ip2str(session[fd]->client_addr.sin_addr);
 
     for (id = 0; id < MAX_SERVERS; id++)
         if (server_fd[id] == fd)
@@ -1669,7 +1618,7 @@ void parse_fromchar (int fd)
                     WBUFW (buf, 0) = 0x2721;
                     WBUFL (buf, 2) = acc;
                     WBUFL (buf, 6) = 0;
-                    if (strcmp (RFIFOP (fd, 8), gm_pass) == 0)
+                    if (strcmp ((const char *)RFIFOP (fd, 8), gm_pass) == 0)
                     {
                         // only non-GM can become GM
                         if (isGM (acc) == 0)
@@ -1900,7 +1849,7 @@ void parse_fromchar (int fd)
                                         strftime (tmpstr, 24, date_format,
                                                   gmtime (&timestamp));
                                         login_log
-                                            ("Char-server '%s': Ban request (account: %d, new final date of banishment: %d (%s), ip: %s).\n",
+                                            ("Char-server '%s': Ban request (account: %d, new final date of banishment: %ld (%s), ip: %s).\n",
                                              server[id].name, acc,
                                              timestamp,
                                              (timestamp ==
@@ -2206,14 +2155,13 @@ void parse_fromchar (int fd)
 //---------------------------------------
 // Packet parsing for administation login
 //---------------------------------------
+static
 void parse_admin (int fd)
 {
     int  i, j;
-    unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
     char *account_name;
-    char ip[16];
 
-    sprintf (ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
+    const char *ip = ip2str(session[fd]->client_addr.sin_addr);
 
     if (session[fd]->eof)
     {
@@ -2334,8 +2282,8 @@ void parse_admin (int fd)
                     return;
                 {
                     struct mmo_account ma;
-                    ma.userid = RFIFOP (fd, 2);
-                    ma.passwd = RFIFOP (fd, 26);
+                    ma.userid = (char *)RFIFOP (fd, 2);
+                    ma.passwd = (char *)RFIFOP (fd, 26);
                     memcpy (ma.lastlogin, "-", 2);
                     ma.sex = RFIFOB (fd, 50);
                     WFIFOW (fd, 0) = 0x7931;
@@ -2405,12 +2353,13 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x7933;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 i = search_account_index (account_name);
                 if (i != -1)
                 {
+                    {
                     // Char-server is notified of deletion (for characters deletion).
                     unsigned char buf[65535];
                     WBUFW (buf, 0) = 0x2730;
@@ -2424,8 +2373,12 @@ void parse_admin (int fd)
                         ("'ladmin': Account deletion (account: %s, id: %d, ip: %s) - saved in next line:\n",
                          auth_dat[i].userid, auth_dat[i].account_id,
                          ip);
+                    }
+                    {
+                    char buf[65535];
                     mmo_auth_tostr (buf, &auth_dat[i]);
                     login_log ("%s\n", buf);
+                    }
                     // delete account
                     memset (auth_dat[i].userid, '\0',
                             sizeof (auth_dat[i].userid));
@@ -2447,14 +2400,14 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x7935;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 i = search_account_index (account_name);
                 if (i != -1)
                 {
                     memcpy (WFIFOP (fd, 6), auth_dat[i].userid, 24);
-                    strcpy (auth_dat[i].pass, MD5_saltcrypt(RFIFOP (fd, 26), make_salt()));
+                    strcpy (auth_dat[i].pass, MD5_saltcrypt((char *)RFIFOP (fd, 26), make_salt()));
                     auth_dat[i].pass[39] = '\0';
                     WFIFOL (fd, 2) = auth_dat[i].account_id;
                     login_log
@@ -2480,7 +2433,7 @@ void parse_admin (int fd)
                     int  statut;
                     WFIFOW (fd, 0) = 0x7937;
                     WFIFOL (fd, 2) = -1;
-                    account_name = RFIFOP (fd, 2);
+                    account_name = (char *)RFIFOP (fd, 2);
                     account_name[23] = '\0';
                     remove_control_chars (account_name);
                     statut = RFIFOL (fd, 26);
@@ -2574,14 +2527,14 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x793b;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 i = search_account_index (account_name);
                 if (i != -1)
                 {
                     memcpy (WFIFOP (fd, 6), auth_dat[i].userid, 24);
-		    if ( pass_ok(RFIFOP (fd, 26), auth_dat[i].pass) )
+		    if ( pass_ok((char *)RFIFOP (fd, 26), auth_dat[i].pass) )
                     {
                         WFIFOL (fd, 2) = auth_dat[i].account_id;
                         login_log
@@ -2616,7 +2569,7 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x793d;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 memcpy (WFIFOP (fd, 6), account_name, 24);
@@ -2688,7 +2641,7 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x793f;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 memcpy (WFIFOP (fd, 6), account_name, 24);
@@ -2848,7 +2801,7 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x7941;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 memcpy (WFIFOP (fd, 6), account_name, 24);
@@ -2892,7 +2845,7 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x7943;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 i = search_account_index (account_name);
@@ -2938,7 +2891,7 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x7945;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 i = search_account_index (account_name);
@@ -2972,7 +2925,7 @@ void parse_admin (int fd)
                 {
                     if (auth_dat[i].account_id == RFIFOL (fd, 2))
                     {
-                        strncpy (WFIFOP (fd, 6), auth_dat[i].userid, 24);
+                        strncpy ((char *)WFIFOP (fd, 6), auth_dat[i].userid, 24);
                         login_log
                             ("'ladmin': Request (by id) of an account name (account: %s, id: %d, ip: %s)\n",
                              auth_dat[i].userid, RFIFOL (fd, 2), ip);
@@ -2984,7 +2937,7 @@ void parse_admin (int fd)
                     login_log
                         ("'ladmin': Name request (by id) of an unknown account (id: %d, ip: %s)\n",
                          RFIFOL (fd, 2), ip);
-                    strncpy (WFIFOP (fd, 6), "", 24);
+                    strncpy ((char *)WFIFOP (fd, 6), "", 24);
                 }
                 WFIFOSET (fd, 30);
                 RFIFOSKIP (fd, 6);
@@ -2998,7 +2951,7 @@ void parse_admin (int fd)
                     char tmpstr[2048];
                     WFIFOW (fd, 0) = 0x7949;
                     WFIFOL (fd, 2) = -1;
-                    account_name = RFIFOP (fd, 2);
+                    account_name = (char *)RFIFOP (fd, 2);
                     account_name[23] = '\0';
                     remove_control_chars (account_name);
                     timestamp = (time_t) RFIFOL (fd, 26);
@@ -3008,7 +2961,7 @@ void parse_admin (int fd)
                     {
                         memcpy (WFIFOP (fd, 6), auth_dat[i].userid, 24);
                         login_log
-                            ("'ladmin': Change of a validity limit (account: %s, new validity: %d (%s), ip: %s)\n",
+                            ("'ladmin': Change of a validity limit (account: %s, new validity: %ld (%s), ip: %s)\n",
                              auth_dat[i].userid, timestamp,
                              (timestamp == 0 ? "unlimited" : tmpstr), ip);
                         auth_dat[i].connect_until_time = timestamp;
@@ -3018,7 +2971,7 @@ void parse_admin (int fd)
                     {
                         memcpy (WFIFOP (fd, 6), account_name, 24);
                         login_log
-                            ("'ladmin': Attempt to change the validity limit of an unknown account (account: %s, received validity: %d (%s), ip: %s)\n", account_name, timestamp,
+                            ("'ladmin': Attempt to change the validity limit of an unknown account (account: %s, received validity: %ld (%s), ip: %s)\n", account_name, timestamp,
                              (timestamp == 0 ? "unlimited" : tmpstr), ip);
                     }
                     WFIFOL (fd, 30) = timestamp;
@@ -3035,7 +2988,7 @@ void parse_admin (int fd)
                     char tmpstr[2048];
                     WFIFOW (fd, 0) = 0x794b;
                     WFIFOL (fd, 2) = -1;
-                    account_name = RFIFOP (fd, 2);
+                    account_name = (char *)RFIFOP (fd, 2);
                     account_name[23] = '\0';
                     remove_control_chars (account_name);
                     timestamp = (time_t) RFIFOL (fd, 26);
@@ -3048,7 +3001,7 @@ void parse_admin (int fd)
                         memcpy (WFIFOP (fd, 6), auth_dat[i].userid, 24);
                         WFIFOL (fd, 2) = auth_dat[i].account_id;
                         login_log
-                            ("'ladmin': Change of the final date of a banishment (account: %s, new final date of banishment: %d (%s), ip: %s)\n",
+                            ("'ladmin': Change of the final date of a banishment (account: %s, new final date of banishment: %ld (%s), ip: %s)\n",
                              auth_dat[i].userid, timestamp,
                              (timestamp == 0 ? "no banishment" : tmpstr), ip);
                         if (auth_dat[i].ban_until_time != timestamp)
@@ -3073,7 +3026,7 @@ void parse_admin (int fd)
                     {
                         memcpy (WFIFOP (fd, 6), account_name, 24);
                         login_log
-                            ("'ladmin': Attempt to change the final date of a banishment of an unknown account (account: %s, received final date of banishment: %d (%s), ip: %s)\n",
+                            ("'ladmin': Attempt to change the final date of a banishment of an unknown account (account: %s, received final date of banishment: %ld (%s), ip: %s)\n",
                              account_name, timestamp,
                              (timestamp == 0 ? "no banishment" : tmpstr), ip);
                     }
@@ -3092,7 +3045,7 @@ void parse_admin (int fd)
                     char tmpstr[2048];
                     WFIFOW (fd, 0) = 0x794d;
                     WFIFOL (fd, 2) = -1;
-                    account_name = RFIFOP (fd, 2);
+                    account_name = (char *)RFIFOP (fd, 2);
                     account_name[23] = '\0';
                     remove_control_chars (account_name);
                     i = search_account_index (account_name);
@@ -3126,7 +3079,7 @@ void parse_admin (int fd)
                             strftime (tmpstr, 24, date_format,
                                       gmtime (&timestamp));
                             login_log
-                                ("'ladmin': Adjustment of a final date of a banishment (account: %s, (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %d (%s), ip: %s)\n",
+                                ("'ladmin': Adjustment of a final date of a banishment (account: %s, (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %ld (%s), ip: %s)\n",
                                  auth_dat[i].userid,
                                  (short) RFIFOW (fd, 26), (short) RFIFOW (fd,
                                                                           28),
@@ -3160,7 +3113,7 @@ void parse_admin (int fd)
                             strftime (tmpstr, 24, date_format,
                                       gmtime (&auth_dat[i].ban_until_time));
                             login_log
-                                ("'ladmin': Impossible to adjust the final date of a banishment (account: %s, %d (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)\n",
+                                ("'ladmin': Impossible to adjust the final date of a banishment (account: %s, %ld (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)\n",
                                  auth_dat[i].userid,
                                  auth_dat[i].ban_until_time,
                                  (auth_dat[i].ban_until_time ==
@@ -3215,7 +3168,7 @@ void parse_admin (int fd)
                     }
                     else
                     {
-                        char buf[32000];
+                        uint8_t buf[32000];
                         char message[32000];
                         WFIFOW (fd, 2) = 0;
                         memset (message, '\0', sizeof (message));
@@ -3251,7 +3204,7 @@ void parse_admin (int fd)
                     char tmpstr2[2048];
                     WFIFOW (fd, 0) = 0x7951;
                     WFIFOL (fd, 2) = -1;
-                    account_name = RFIFOP (fd, 2);
+                    account_name = (char *)RFIFOP (fd, 2);
                     account_name[23] = '\0';
                     remove_control_chars (account_name);
                     i = search_account_index (account_name);
@@ -3293,7 +3246,7 @@ void parse_admin (int fd)
                                 strftime (tmpstr2, 24, date_format,
                                           gmtime (&timestamp));
                                 login_log
-                                    ("'ladmin': Adjustment of a validity limit (account: %s, %d (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %d (%s), ip: %s)\n",
+                                    ("'ladmin': Adjustment of a validity limit (account: %s, %ld (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> new validity: %ld (%s), ip: %s)\n",
                                      auth_dat[i].userid,
                                      auth_dat[i].connect_until_time,
                                      (auth_dat[i].connect_until_time ==
@@ -3317,7 +3270,7 @@ void parse_admin (int fd)
                                           gmtime (&auth_dat
                                                   [i].connect_until_time));
                                 login_log
-                                    ("'ladmin': Impossible to adjust a validity limit (account: %s, %d (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)\n",
+                                    ("'ladmin': Impossible to adjust a validity limit (account: %s, %ld (%s) + (%+d y %+d m %+d d %+d h %+d mn %+d s) -> ???, ip: %s)\n",
                                      auth_dat[i].userid,
                                      auth_dat[i].connect_until_time,
                                      (auth_dat[i].connect_until_time ==
@@ -3350,7 +3303,7 @@ void parse_admin (int fd)
                     return;
                 WFIFOW (fd, 0) = 0x7953;
                 WFIFOL (fd, 2) = -1;
-                account_name = RFIFOP (fd, 2);
+                account_name = (char *)RFIFOP (fd, 2);
                 account_name[23] = '\0';
                 remove_control_chars (account_name);
                 i = search_account_index (account_name);
@@ -3438,7 +3391,7 @@ void parse_admin (int fd)
                     login_log
                         ("'ladmin': Attempt to obtain information (by the id) of an unknown account (id: %d, ip: %s)\n",
                          RFIFOL (fd, 2), ip);
-                    strncpy (WFIFOP (fd, 7), "", 24);
+                    strncpy ((char *)WFIFOP (fd, 7), "", 24);
                     WFIFOW (fd, 148) = 0;
                     WFIFOSET (fd, 150);
                 }
@@ -3523,6 +3476,8 @@ void parse_admin (int fd)
 //--------------------------------------------
 // Test to know if an IP come from LAN or WAN.
 //--------------------------------------------
+// TODO fix to not take a ptr-to-uint8_t
+static
 int lan_ip_check (unsigned char *p)
 {
     int  i;
@@ -3548,15 +3503,15 @@ int lan_ip_check (unsigned char *p)
 //----------------------------------------------------------------------------------------
 // Default packet parsing (normal players or administation/char-server connexion requests)
 //----------------------------------------------------------------------------------------
+static
 void parse_login (int fd)
 {
     struct mmo_account account;
-    int  result, i, j;
+    int  result, j;
     unsigned char *p = (unsigned char *) &session[fd]->client_addr.sin_addr;
-    char ip[16];
     int  host_len;
 
-    sprintf (ip, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
+    const char *ip = ip2str(session[fd]->client_addr.sin_addr);
 
     if (session[fd]->eof)
     {
@@ -3608,10 +3563,10 @@ void parse_login (int fd)
                 if (RFIFOREST (fd) < ((RFIFOW (fd, 0) == 0x64) ? 55 : 47))
                     return;
 
-                account.userid = RFIFOP (fd, 6);
+                account.userid = (char *)RFIFOP (fd, 6);
                 account.userid[23] = '\0';
                 remove_control_chars (account.userid);
-                account.passwd = RFIFOP (fd, 30);
+                account.passwd = (char *)RFIFOP (fd, 30);
                 if (RFIFOW (fd, 0) == 0x64)
                 {
                     account.passwd[23] = '\0';
@@ -3637,7 +3592,7 @@ void parse_login (int fd)
                          account.userid, ip);
                 }
 
-                if (!check_ip (session[fd]->client_addr.sin_addr.s_addr))
+                if (!check_ip (session[fd]->client_addr.sin_addr))
                 {
                     login_log
                         ("Connection refused: IP isn't authorised (deny/allow, ip: %s).\n",
@@ -3701,8 +3656,8 @@ void parse_login (int fd)
 
                         // Load list of char servers into outbound packet
                         server_num = 0;
-                        if (version_2 && VERSION_2_SERVERORDER)
-                            for (i = 0; i < MAX_SERVERS; i++)
+                        if (version_2 & VERSION_2_SERVERORDER)
+                            for (int i = 0; i < MAX_SERVERS; i++)
                             {
                                 if (server_fd[i] >= 0)
                                 {
@@ -3727,7 +3682,7 @@ void parse_login (int fd)
                                 }
                             }
                         else    // Send them in reverse, as the client defaults to the second (!) one
-                            for (i = MAX_SERVERS - 1; i >= 0; i--)
+                            for (int i = MAX_SERVERS - 1; i >= 0; i--)
                             {
                                 if (server_fd[i] >= 0)
                                 {
@@ -3796,7 +3751,7 @@ void parse_login (int fd)
                     WFIFOB (fd, 2) = result;
                     if (result == 6)
                     {           // 6 = Your are Prohibited to log in until %s
-                        i = search_account_index (account.userid);
+                        int i = search_account_index (account.userid);
                         if (i != -1)
                         {
                             if (auth_dat[i].ban_until_time != 0)
@@ -3854,7 +3809,7 @@ void parse_login (int fd)
                 // Creation of the coding key
                 memset (ld->md5key, '\0', sizeof (ld->md5key));
                 ld->md5keylen = rand () % 4 + 12;
-                for (i = 0; i < ld->md5keylen; i++)
+                for (int i = 0; i < ld->md5keylen; i++)
                     ld->md5key[i] = rand () % 255 + 1;
 
                 RFIFOSKIP (fd, 2);
@@ -3870,15 +3825,15 @@ void parse_login (int fd)
                     return;
                 {
                     int  GM_value, len;
-                    unsigned char *server_name;
-                    account.userid = RFIFOP (fd, 2);
+                    char *server_name;
+                    account.userid = (char *)RFIFOP (fd, 2);
                     account.userid[23] = '\0';
                     remove_control_chars (account.userid);
-                    account.passwd = RFIFOP (fd, 26);
+                    account.passwd = (char *)RFIFOP (fd, 26);
                     account.passwd[23] = '\0';
                     remove_control_chars (account.passwd);
                     account.passwdenc = 0;
-                    server_name = RFIFOP (fd, 60);
+                    server_name = (char *)RFIFOP (fd, 60);
                     server_name[19] = '\0';
                     remove_control_chars (server_name);
                     login_log
@@ -3943,7 +3898,7 @@ void parse_login (int fd)
                         // send GM account to char-server
                         len = 4;
                         WFIFOW (fd, 0) = 0x2732;
-                        for (i = 0; i < auth_num; i++)
+                        for (int i = 0; i < auth_num; i++)
                             // send only existing accounts. We can not create a GM account when server is online.
                             if ((GM_value =
                                  isGM (auth_dat[i].account_id)) > 0)
@@ -3995,7 +3950,7 @@ void parse_login (int fd)
                 WFIFOW (fd, 0) = 0x7919;
                 WFIFOB (fd, 2) = 1;
                 if (!check_ladminip
-                    (session[fd]->client_addr.sin_addr.s_addr))
+                    (session[fd]->client_addr.sin_addr))
                 {
                     login_log
                         ("'ladmin'-login: Connection in administration mode refused: IP isn't authorised (ladmin_allow, ip: %s).\n",
@@ -4006,8 +3961,8 @@ void parse_login (int fd)
                     struct login_session_data *ld = (struct login_session_data *)session[fd]->session_data;
                     if (RFIFOW (fd, 2) == 0)
                     {           // non encrypted password
-                        unsigned char *password;
-                        password = RFIFOP (fd, 4);
+                        char *password;
+                        password = (char *)RFIFOP (fd, 4);
                         password[23] = '\0';
                         remove_control_chars (password);
                         // If remote administration is enabled and password sent by client matches password read from login server configuration file
@@ -4038,7 +3993,8 @@ void parse_login (int fd)
                                 ("'ladmin'-login: error! MD5 key not created/requested for an administration login.\n");
                         else
                         {
-                            char md5str[64] = "", md5bin[32];
+                            char md5str[64] = "";
+                            uint8_t md5bin[32];
                             if (RFIFOW (fd, 2) == 1)
                             {
                                 strncpy (md5str, ld->md5key, sizeof (ld->md5key));  // 20
@@ -4100,6 +4056,8 @@ void parse_login (int fd)
                         fprintf (logfp,
                                  "---- 00-01-02-03-04-05-06-07  08-09-0A-0B-0C-0D-0E-0F\n");
                         memset (tmpstr, '\0', sizeof (tmpstr));
+
+                        int i;
                         for (i = 0; i < RFIFOREST (fd); i++)
                         {
                             if ((i & 15) == 0)
@@ -4139,26 +4097,10 @@ void parse_login (int fd)
     return;
 }
 
-//-------------------------------------------------
-// Return numerical value of a switch configuration
-// on/off, english, français, deutsch, español
-//-------------------------------------------------
-int config_switch (const char *str)
-{
-    if (strcasecmp (str, "on") == 0 || strcasecmp (str, "yes") == 0
-        || strcasecmp (str, "oui") == 0 || strcasecmp (str, "ja") == 0
-        || strcasecmp (str, "si") == 0)
-        return 1;
-    if (strcasecmp (str, "off") == 0 || strcasecmp (str, "no") == 0
-        || strcasecmp (str, "non") == 0 || strcasecmp (str, "nein") == 0)
-        return 0;
-
-    return atoi (str);
-}
-
 //----------------------------------
 // Reading Lan Support configuration
 //----------------------------------
+static
 int login_lan_config_read (const char *lancfgName)
 {
     int  j;
@@ -4291,6 +4233,7 @@ int login_lan_config_read (const char *lancfgName)
 //-----------------------------------
 // Reading general configuration file
 //-----------------------------------
+static
 int login_config_read (const char *cfgName)
 {
     char line[1024], w1[1024], w2[1024];
@@ -4576,6 +4519,7 @@ int login_config_read (const char *cfgName)
 //-------------------------------------
 // Displaying of configuration warnings
 //-------------------------------------
+static
 void display_conf_warnings (void)
 {
     if (admin_state != 0 && admin_state != 1)
@@ -4766,6 +4710,7 @@ void display_conf_warnings (void)
 //-------------------------------
 // Save configuration in log file
 //-------------------------------
+static
 void save_config_in_log (void)
 {
     int  i;
diff --git a/src/map/GNUmakefile b/src/map/GNUmakefile
index a02deda..0945926 100644
--- a/src/map/GNUmakefile
+++ b/src/map/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. map-server
+	${MAKE} -C ../.. map-server
 clean:
 	rm -r ../../obj/map/
 %::
-	make -C ../.. obj/map/$@
+	${MAKE} -C ../.. obj/map/$@
diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp
index 8f62ca2..c608af5 100644
--- a/src/map/atcommand.cpp
+++ b/src/map/atcommand.cpp
@@ -10,6 +10,8 @@
 #include <time.h>
 #include <unistd.h>
 
+#include <array>
+
 #include "../common/socket.hpp"
 #include "../common/timer.hpp"
 #include "../common/nullpo.hpp"
@@ -38,16 +40,14 @@
 
 static char command_symbol = '@';   // first char of the commands (by [Yor])
 
-static char msg_table[1000][1024];  // Server messages (0-499 reserved for GM commands, 500-999 reserved for others)
-
 #define ATCOMMAND_FUNC(x) int atcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message)
 ATCOMMAND_FUNC (setup);
 ATCOMMAND_FUNC (broadcast);
 ATCOMMAND_FUNC (localbroadcast);
 ATCOMMAND_FUNC (charwarp);
-ATCOMMAND_FUNC (warp);
+//ATCOMMAND_FUNC (warp);
 ATCOMMAND_FUNC (where);
-ATCOMMAND_FUNC (goto);
+//ATCOMMAND_FUNC (goto);
 ATCOMMAND_FUNC (jump);
 ATCOMMAND_FUNC (who);
 ATCOMMAND_FUNC (whogroup);
@@ -66,7 +66,7 @@ ATCOMMAND_FUNC (kill);
 ATCOMMAND_FUNC (alive);
 ATCOMMAND_FUNC (kami);
 ATCOMMAND_FUNC (heal);
-ATCOMMAND_FUNC (item);
+//ATCOMMAND_FUNC (item);
 ATCOMMAND_FUNC (itemreset);
 ATCOMMAND_FUNC (itemcheck);
 ATCOMMAND_FUNC (baselevelup);
@@ -79,7 +79,7 @@ ATCOMMAND_FUNC (gvgoff);
 ATCOMMAND_FUNC (gvgon);
 ATCOMMAND_FUNC (model);
 ATCOMMAND_FUNC (go);
-ATCOMMAND_FUNC (spawn);
+//ATCOMMAND_FUNC (spawn);
 ATCOMMAND_FUNC (killmonster);
 ATCOMMAND_FUNC (killmonster2);
 ATCOMMAND_FUNC (refine);
@@ -92,7 +92,7 @@ ATCOMMAND_FUNC (skillpoint);
 ATCOMMAND_FUNC (zeny);
 ATCOMMAND_FUNC (param);
 ATCOMMAND_FUNC (guildlevelup);
-ATCOMMAND_FUNC (recall);
+//ATCOMMAND_FUNC (recall);
 ATCOMMAND_FUNC (recallall);
 ATCOMMAND_FUNC (revive);
 ATCOMMAND_FUNC (character_stats);
@@ -420,6 +420,7 @@ static AtCommandInfo atcommand_info[] = {
  * This function return the name of the job (by [Yor])
  *----------------------------------------------------
  */
+static
 const char *job_name (int pc_class)
 {
     switch (pc_class)
@@ -566,61 +567,6 @@ const char *job_name (int pc_class)
     return "Unknown Job";
 }
 
-//-----------------------------------------------------------
-// Return the message string of the specified number by [Yor]
-//-----------------------------------------------------------
-char *msg_txt (int msg_number)
-{
-    if (msg_number >= 0
-        && msg_number < (int) (sizeof (msg_table) / sizeof (msg_table[0]))
-        && msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
-        return msg_table[msg_number];
-
-    return "??";
-}
-
-//------------------------------------------------------------
-// E-mail check: return 0 (not correct) or 1 (valid). by [Yor]
-//------------------------------------------------------------
-int e_mail_check (unsigned char *email)
-{
-    char ch;
-    unsigned char *last_arobas;
-
-    // athena limits
-    if (strlen (email) < 3 || strlen (email) > 39)
-        return 0;
-
-    // part of RFC limits (official reference of e-mail description)
-    if (strchr (email, '@') == NULL || email[strlen (email) - 1] == '@')
-        return 0;
-
-    if (email[strlen (email) - 1] == '.')
-        return 0;
-
-    last_arobas = strrchr (email, '@');
-
-    if (strstr (last_arobas, "@.") != NULL ||
-        strstr (last_arobas, "..") != NULL)
-        return 0;
-
-    for (ch = 1; ch < 32; ch++)
-    {
-        if (strchr (last_arobas, ch) != NULL)
-        {
-            return 0;
-            break;
-        }
-    }
-
-    if (strchr (last_arobas, ' ') != NULL ||
-        strchr (last_arobas, ';') != NULL)
-        return 0;
-
-    // all correct
-    return 1;
-}
-
 /*==========================================
  * get_atcommand_level @コマンドの必要レベルを取得
  *------------------------------------------
@@ -744,7 +690,7 @@ is_atcommand (const int fd, struct map_session_data *sd, const char *message,
 
         if (type == AtCommand_Unknown || info.proc == NULL)
         {
-            sprintf (output, msg_table[153], command);  // %s is Unknown Command.
+            sprintf (output, "%s is Unknown Command.", command);
             clif_displaymessage (fd, output);
         }
         else
@@ -752,7 +698,7 @@ is_atcommand (const int fd, struct map_session_data *sd, const char *message,
             if (info.proc (fd, sd, command, p) != 0)
             {
                 // Command can not be executed
-                sprintf (output, msg_table[154], command);  // %s failed.
+                sprintf (output, "%s failed.", command);
                 clif_displaymessage (fd, output);
             }
             else
@@ -843,48 +789,6 @@ static int atkillmonster_sub (struct block_list *bl, va_list ap)
     return 0;
 }
 
-/*==========================================
- * Read Message Data
- *------------------------------------------
- */
-int msg_config_read (const char *cfgName)
-{
-    int  msg_number;
-    char line[1024], w1[1024], w2[1024];
-    FILE *fp;
-
-    if ((fp = fopen_ (cfgName, "r")) == NULL)
-    {
-        printf ("Messages file not found: %s\n", cfgName);
-        return 1;
-    }
-
-    while (fgets (line, sizeof (line) - 1, fp))
-    {
-        if (line[0] == '/' && line[1] == '/')
-            continue;
-        if (sscanf (line, "%[^:]: %[^\r\n]", w1, w2) == 2)
-        {
-            if (strcasecmp (w1, "import") == 0)
-            {
-                msg_config_read (w2);
-            }
-            else
-            {
-                msg_number = atoi (w1);
-                if (msg_number >= 0
-                    && msg_number <
-                    (int) (sizeof (msg_table) / sizeof (msg_table[0])))
-                    strcpy (msg_table[msg_number], w2);
-                //  printf("message #%d: '%s'.\n", msg_number, msg_table[msg_number]);
-            }
-        }
-    }
-    fclose_ (fp);
-
-    return 0;
-}
-
 /*==========================================
  *
  *------------------------------------------
@@ -1051,30 +955,30 @@ int atcommand_charwarp (const int fd, struct map_session_data *sd,
                 }
                 if (pc_setpos (pl_sd, map_name, x, y, 3) == 0)
                 {
-                    clif_displaymessage (pl_sd->fd, msg_table[0]);  // Warped.
-                    clif_displaymessage (fd, msg_table[15]);    // Player warped (message sends to player too).
+                    clif_displaymessage (pl_sd->fd, "Warped.");
+                    clif_displaymessage (fd, "Player warped (message sends to player too).");
                 }
                 else
                 {
-                    clif_displaymessage (fd, msg_table[1]); // Map not found.
+                    clif_displaymessage (fd, "Map not found.");
                     return -1;
                 }
             }
             else
             {
-                clif_displaymessage (fd, msg_table[2]); // Coordinates out of range.
+                clif_displaymessage (fd, "Coordinates out of range.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -1128,16 +1032,16 @@ int atcommand_warp (const int fd, struct map_session_data *sd,
             return -1;
         }
         if (pc_setpos (sd, map_name, x, y, 3) == 0)
-            clif_displaymessage (fd, msg_table[0]); // Warped.
+            clif_displaymessage (fd, "Warped.");
         else
         {
-            clif_displaymessage (fd, msg_table[1]); // Map not found.
+            clif_displaymessage (fd, "Map not found.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[2]); // Coordinates out of range.
+        clif_displaymessage (fd, "Coordinates out of range.");
         return -1;
     }
 
@@ -1172,7 +1076,7 @@ int atcommand_where (const int fd, struct map_session_data *sd,
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -1217,12 +1121,12 @@ int atcommand_goto (const int fd, struct map_session_data *sd,
             return -1;
         }
         pc_setpos (sd, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y, 3);
-        sprintf (output, msg_table[4], character);  // Jump to %s
+        sprintf (output, "Jump to %s", character);
         clif_displaymessage (fd, output);
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -1264,12 +1168,12 @@ int atcommand_jump (const int fd, struct map_session_data *sd,
             return -1;
         }
         pc_setpos (sd, sd->mapname, x, y, 3);
-        sprintf (output, msg_table[5], x, y);   // Jump to %d %d
+        sprintf (output, "Jump to %d %d", x, y);
         clif_displaymessage (fd, output);
     }
     else
     {
-        clif_displaymessage (fd, msg_table[2]); // Coordinates out of range.
+        clif_displaymessage (fd, "Coordinates out of range.");
         return -1;
     }
 
@@ -1334,12 +1238,12 @@ int atcommand_who (const int fd, struct map_session_data *sd,
     }
 
     if (count == 0)
-        clif_displaymessage (fd, msg_table[28]);    // No player found.
+        clif_displaymessage (fd, "No player found.");
     else if (count == 1)
-        clif_displaymessage (fd, msg_table[29]);    // 1 player found.
+        clif_displaymessage (fd, "1 player found.");
     else
     {
-        sprintf (output, msg_table[30], count); // %d players found.
+        sprintf (output, "%d players found.", count);
         clif_displaymessage (fd, output);
     }
 
@@ -1420,12 +1324,12 @@ int atcommand_whogroup (const int fd, struct map_session_data *sd,
     }
 
     if (count == 0)
-        clif_displaymessage (fd, msg_table[28]);    // No player found.
+        clif_displaymessage (fd, "No player found.");
     else if (count == 1)
-        clif_displaymessage (fd, msg_table[29]);    // 1 player found.
+        clif_displaymessage (fd, "1 player found.");
     else
     {
-        sprintf (output, msg_table[30], count); // %d players found.
+        sprintf (output, "%d players found.", count);
         clif_displaymessage (fd, output);
     }
 
@@ -1492,12 +1396,12 @@ int atcommand_whomap (const int fd, struct map_session_data *sd,
     }
 
     if (count == 0)
-        sprintf (output, msg_table[54], map[map_id].name);  // No player found in map '%s'.
+        sprintf (output, "No player found in map '%s'.", map[map_id].name);
     else if (count == 1)
-        sprintf (output, msg_table[55], map[map_id].name);  // 1 player found in map '%s'.
+        sprintf (output, "1 player found in map '%s'.", map[map_id].name);
     else
     {
-        sprintf (output, msg_table[56], count, map[map_id].name);   // %d players found in map '%s'.
+        sprintf (output, "%d players found in map '%s'.", count, map[map_id].name);
     }
     clif_displaymessage (fd, output);
 
@@ -1580,12 +1484,12 @@ int atcommand_whomapgroup (const int fd, struct map_session_data *sd,
     }
 
     if (count == 0)
-        sprintf (output, msg_table[54], map[map_id].name);  // No player found in map '%s'.
+        sprintf (output, "No player found in map '%s'.", map[map_id].name);
     else if (count == 1)
-        sprintf (output, msg_table[55], map[map_id].name);  // 1 player found in map '%s'.
+        sprintf (output, "1 player found in map '%s'.", map[map_id].name);
     else
     {
-        sprintf (output, msg_table[56], count, map[map_id].name);   // %d players found in map '%s'.
+        sprintf (output, "%d players found in map '%s'.", count, map[map_id].name);
     }
     clif_displaymessage (fd, output);
 
@@ -1673,12 +1577,12 @@ int atcommand_whogm (const int fd, struct map_session_data *sd,
     }
 
     if (count == 0)
-        clif_displaymessage (fd, msg_table[150]);   // No GM found.
+        clif_displaymessage (fd, "No GM found.");
     else if (count == 1)
-        clif_displaymessage (fd, msg_table[151]);   // 1 GM found.
+        clif_displaymessage (fd, "1 GM found.");
     else
     {
-        sprintf (output, msg_table[152], count);    // %d GMs found.
+        sprintf (output, "%d GMs found.", count);
         clif_displaymessage (fd, output);
     }
 
@@ -1697,7 +1601,7 @@ int atcommand_save (const int fd, struct map_session_data *sd,
     pc_setsavepoint (sd, sd->mapname, sd->bl.x, sd->bl.y);
     pc_makesavestatus (sd);
     chrif_save (sd);
-    clif_displaymessage (fd, msg_table[6]); // Character data respawn point saved.
+    clif_displaymessage (fd, "Character data respawn point saved.");
 
     return 0;
 }
@@ -1729,7 +1633,7 @@ int atcommand_load (const int fd, struct map_session_data *sd,
 
     pc_setpos (sd, sd->status.save_point.map, sd->status.save_point.x,
                sd->status.save_point.y, 0);
-    clif_displaymessage (fd, msg_table[7]); // Warping to respawn point.
+    clif_displaymessage (fd, "Warping to respawn point.");
 
     return 0;
 }
@@ -1762,7 +1666,7 @@ int atcommand_speed (const int fd, struct map_session_data *sd,
         //sd->walktimer = x;
         //この文を追加 by れ
         clif_updatestatus (sd, SP_SPEED);
-        clif_displaymessage (fd, msg_table[8]); // Speed changed.
+        clif_displaymessage (fd, "Speed changed.");
     }
     else
     {
@@ -1788,14 +1692,14 @@ int atcommand_storage (const int fd, struct map_session_data *sd,
 
     if (sd->state.storage_flag)
     {
-        clif_displaymessage (fd, msg_table[250]);
+        clif_displaymessage (fd, "msg_table[250]");
         return -1;
     }
 
     if ((stor = account2storage2 (sd->status.account_id)) != NULL
         && stor->storage_status == 1)
     {
-        clif_displaymessage (fd, msg_table[250]);
+        clif_displaymessage (fd, "msg_table[250]");
         return -1;
     }
 
@@ -1818,20 +1722,20 @@ int atcommand_guildstorage (const int fd, struct map_session_data *sd,
     {
         if (sd->state.storage_flag)
         {
-            clif_displaymessage (fd, msg_table[251]);
+            clif_displaymessage (fd, "msg_table[251]");
             return -1;
         }
         if ((stor = account2storage2 (sd->status.account_id)) != NULL
             && stor->storage_status == 1)
         {
-            clif_displaymessage (fd, msg_table[251]);
+            clif_displaymessage (fd, "msg_table[251]");
             return -1;
         }
         storage_guild_storageopen (sd);
     }
     else
     {
-        clif_displaymessage (fd, msg_table[252]);
+        clif_displaymessage (fd, "msg_table[252]");
         return -1;
     }
 
@@ -1908,7 +1812,7 @@ int atcommand_option (const int fd, struct map_session_data *sd,
 
     clif_changeoption (&sd->bl);
     pc_calcstatus (sd, 0);
-    clif_displaymessage (fd, msg_table[9]); // Options changed.
+    clif_displaymessage (fd, "Options changed.");
 
     return 0;
 }
@@ -1923,12 +1827,12 @@ int atcommand_hide (const int fd, struct map_session_data *sd,
     if (sd->status.option & OPTION_HIDE)
     {
         sd->status.option &= ~OPTION_HIDE;
-        clif_displaymessage (fd, msg_table[10]);    // Invisible: Off
+        clif_displaymessage (fd, "Invisible: Off.");    // Invisible: Off
     }
     else
     {
         sd->status.option |= OPTION_HIDE;
-        clif_displaymessage (fd, msg_table[11]);    // Invisible: On
+        clif_displaymessage (fd, "Invisible: On.");    // Invisible: On
     }
     clif_changeoption (&sd->bl);
 
@@ -1943,7 +1847,7 @@ int atcommand_die (const int fd, struct map_session_data *sd,
                    const char *command, const char *message)
 {
     pc_damage (NULL, sd, sd->status.hp + 1);
-    clif_displaymessage (fd, msg_table[13]);    // A pity! You've died.
+    clif_displaymessage (fd, "A pity! You've died.");
 
     return 0;
 }
@@ -1972,17 +1876,17 @@ int atcommand_kill (const int fd, struct map_session_data *sd,
         if (pc_isGM (sd) >= pc_isGM (pl_sd))
         {                       // you can kill only lower or same level
             pc_damage (NULL, pl_sd, pl_sd->status.hp + 1);
-            clif_displaymessage (fd, msg_table[14]);    // Character killed.
+            clif_displaymessage (fd, "Character killed.");
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -2004,7 +1908,7 @@ int atcommand_alive (const int fd, struct map_session_data *sd,
     clif_updatestatus (sd, SP_HP);
     clif_updatestatus (sd, SP_SP);
     clif_resurrection (&sd->bl, 1);
-    clif_displaymessage (fd, msg_table[16]);    // You've been revived! It's a miracle!
+    clif_displaymessage (fd, "You've been revived! It's a miracle!");
 
     return 0;
 }
@@ -2072,13 +1976,13 @@ int atcommand_heal (const int fd, struct map_session_data *sd,
     {
         pc_heal (sd, hp, sp);
         if (hp >= 0 && sp >= 0)
-            clif_displaymessage (fd, msg_table[17]);    // HP, SP recovered.
+            clif_displaymessage (fd, "HP, SP recovered.");
         else
-            clif_displaymessage (fd, msg_table[156]);   // HP or/and SP modified.
+            clif_displaymessage (fd, "HP or/and SP modified.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[157]);   // HP and SP are already with the good value.
+        clif_displaymessage (fd, "HP and SP are already with the good value.");
         return -1;
     }
 
@@ -2134,11 +2038,11 @@ int atcommand_item (const int fd, struct map_session_data *sd,
                              get_count)))
                 clif_additem ((struct map_session_data *) sd, 0, 0, flag);
         }
-        clif_displaymessage (fd, msg_table[18]);    // Item created.
+        clif_displaymessage (fd, "Item created.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[19]);    // Invalid item ID or name.
+        clif_displaymessage (fd, "Invalid item ID or name.");
         return -1;
     }
 
@@ -2160,7 +2064,7 @@ int atcommand_itemreset (const int fd, struct map_session_data *sd,
             && sd->status.inventory[i].equip == 0)
             pc_delitem (sd, i, sd->status.inventory[i].amount, 0);
     }
-    clif_displaymessage (fd, msg_table[20]);    // All of your items have been removed.
+    clif_displaymessage (fd, "All of your items have been removed.");
 
     return 0;
 }
@@ -2197,7 +2101,7 @@ int atcommand_baselevelup (const int fd, struct map_session_data *sd,
     {
         if (sd->status.base_level == battle_config.maximum_level)
         {                       // check for max level by Valaris
-            clif_displaymessage (fd, msg_table[47]);    // Base level can't go any higher.
+            clif_displaymessage (fd, "Base level can't go any higher.");
             return -1;
         }                       // End Addition
         if (level > battle_config.maximum_level || level > (battle_config.maximum_level - sd->status.base_level))   // fix positiv overflow
@@ -2211,13 +2115,13 @@ int atcommand_baselevelup (const int fd, struct map_session_data *sd,
         pc_calcstatus (sd, 0);
         pc_heal (sd, sd->status.max_hp, sd->status.max_sp);
         clif_misceffect (&sd->bl, 0);
-        clif_displaymessage (fd, msg_table[21]);    // Base level raised.
+        clif_displaymessage (fd, "Base level raised.");
     }
     else
     {
         if (sd->status.base_level == 1)
         {
-            clif_displaymessage (fd, msg_table[158]);   // Base level can't go any lower.
+            clif_displaymessage (fd, "Base level can't go any lower.");
             return -1;
         }
         if (level < -battle_config.maximum_level || level < (1 - sd->status.base_level))    // fix negativ overflow
@@ -2235,7 +2139,7 @@ int atcommand_baselevelup (const int fd, struct map_session_data *sd,
         clif_updatestatus (sd, SP_BASELEVEL);
         clif_updatestatus (sd, SP_NEXTBASEEXP);
         pc_calcstatus (sd, 0);
-        clif_displaymessage (fd, msg_table[22]);    // Base level lowered.
+        clif_displaymessage (fd, "Base level lowered.");
     }
 
     return 0;
@@ -2267,7 +2171,7 @@ int atcommand_joblevelup (const int fd, struct map_session_data *sd,
     {
         if (sd->status.job_level == up_level)
         {
-            clif_displaymessage (fd, msg_table[23]);    // Job level can't go any higher.
+            clif_displaymessage (fd, "Job level can't go any higher.");
             return -1;
         }
         if (level > up_level || level > (up_level - sd->status.job_level))  // fix positiv overflow
@@ -2279,13 +2183,13 @@ int atcommand_joblevelup (const int fd, struct map_session_data *sd,
         clif_updatestatus (sd, SP_SKILLPOINT);
         pc_calcstatus (sd, 0);
         clif_misceffect (&sd->bl, 1);
-        clif_displaymessage (fd, msg_table[24]);    // Job level raised.
+        clif_displaymessage (fd, "Job level raised.");
     }
     else
     {
         if (sd->status.job_level == 1)
         {
-            clif_displaymessage (fd, msg_table[159]);   // Job level can't go any lower.
+            clif_displaymessage (fd, "Job level can't go any lower.");
             return -1;
         }
         if (level < -up_level || level < (1 - sd->status.job_level))    // fix negativ overflow
@@ -2301,7 +2205,7 @@ int atcommand_joblevelup (const int fd, struct map_session_data *sd,
             clif_updatestatus (sd, SP_SKILLPOINT);
         }                       // to add: remove status points from skills
         pc_calcstatus (sd, 0);
-        clif_displaymessage (fd, msg_table[25]);    // Job level lowered.
+        clif_displaymessage (fd, "Job level lowered.");
     }
 
     return 0;
@@ -2322,7 +2226,7 @@ int atcommand_help (const int fd, struct map_session_data *sd,
 
     if ((fp = fopen_ (help_txt, "r")) != NULL)
     {
-        clif_displaymessage (fd, msg_table[26]);    // Help commands:
+        clif_displaymessage (fd, "Help commands:");
         gm_level = pc_isGM (sd);
         while (fgets (buf, sizeof (buf) - 1, fp) != NULL)
         {
@@ -2345,7 +2249,7 @@ int atcommand_help (const int fd, struct map_session_data *sd,
     }
     else
     {
-        clif_displaymessage (fd, msg_table[27]);    // File help.txt not found.
+        clif_displaymessage (fd, "File help.txt not found.");
         return -1;
     }
 
@@ -2372,7 +2276,7 @@ int atcommand_gm (const int fd, struct map_session_data *sd,
 
     if (pc_isGM (sd))
     {                           // a GM can not use this function. only a normal player (become gm is not for gm!)
-        clif_displaymessage (fd, msg_table[50]);    // You already have some GM powers.
+        clif_displaymessage (fd, "You already have some GM powers.");
         return -1;
     }
     else
@@ -2394,7 +2298,7 @@ int atcommand_pvpoff (const int fd, struct map_session_data *sd,
 
     if (battle_config.pk_mode)
     {                           //disable command if server is in PK mode [Valaris]
-        clif_displaymessage (fd, msg_table[52]);    // This option cannot be used in PK Mode.
+        clif_displaymessage (fd, "This option cannot be used in PK Mode.");
         return -1;
     }
 
@@ -2419,11 +2323,11 @@ int atcommand_pvpoff (const int fd, struct map_session_data *sd,
                 }
             }
         }
-        clif_displaymessage (fd, msg_table[31]);    // PvP: Off.
+        clif_displaymessage (fd, "PvP: Off.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[160]);   // PvP is already Off.
+        clif_displaymessage (fd, "PvP is already Off.");
         return -1;
     }
 
@@ -2442,7 +2346,7 @@ int atcommand_pvpon (const int fd, struct map_session_data *sd,
 
     if (battle_config.pk_mode)
     {                           //disable command if server is in PK mode [Valaris]
-        clif_displaymessage (fd, msg_table[52]);    // This option cannot be used in PK Mode.
+        clif_displaymessage (fd, "This option cannot be used in PK Mode.");
         return -1;
     }
 
@@ -2466,11 +2370,11 @@ int atcommand_pvpon (const int fd, struct map_session_data *sd,
                 }
             }
         }
-        clif_displaymessage (fd, msg_table[32]);    // PvP: On.
+        clif_displaymessage (fd, "PvP: On.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[161]);   // PvP is already On.
+        clif_displaymessage (fd, "PvP is already On.");
         return -1;
     }
 
@@ -2488,11 +2392,11 @@ int atcommand_gvgoff (const int fd, struct map_session_data *sd,
     {
         map[sd->bl.m].flag.gvg = 0;
         clif_send0199 (sd->bl.m, 0);
-        clif_displaymessage (fd, msg_table[33]);    // GvG: Off.
+        clif_displaymessage (fd, "GvG: Off.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[162]);   // GvG is already Off.
+        clif_displaymessage (fd, "GvG is already Off.");
         return -1;
     }
 
@@ -2510,11 +2414,11 @@ int atcommand_gvgon (const int fd, struct map_session_data *sd,
     {
         map[sd->bl.m].flag.gvg = 1;
         clif_send0199 (sd->bl.m, 3);
-        clif_displaymessage (fd, msg_table[34]);    // GvG: On.
+        clif_displaymessage (fd, "GvG: On.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[163]);   // GvG is already On.
+        clif_displaymessage (fd, "GvG is already On.");
         return -1;
     }
 
@@ -2554,7 +2458,7 @@ int atcommand_model (const int fd, struct map_session_data *sd,
             && (sd->status.pc_class == 12 || sd->status.pc_class == 17))
         {
             //服の色未実装職の判定
-            clif_displaymessage (fd, msg_table[35]);    // You can't use this command with this class.
+            clif_displaymessage (fd, "You can't use this command with this class.");
             return -1;
         }
         else
@@ -2562,12 +2466,12 @@ int atcommand_model (const int fd, struct map_session_data *sd,
             pc_changelook (sd, LOOK_HAIR, hair_style);
             pc_changelook (sd, LOOK_HAIR_COLOR, hair_color);
             pc_changelook (sd, LOOK_CLOTHES_COLOR, cloth_color);
-            clif_displaymessage (fd, msg_table[36]);    // Appearence changed.
+            clif_displaymessage (fd, "Appearence changed.");
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[37]);    // An invalid number was specified.
+        clif_displaymessage (fd, "An invalid number was specified.");
         return -1;
     }
 
@@ -2600,18 +2504,18 @@ int atcommand_dye (const int fd, struct map_session_data *sd,
         if (cloth_color != 0 && sd->status.sex == 1
             && (sd->status.pc_class == 12 || sd->status.pc_class == 17))
         {
-            clif_displaymessage (fd, msg_table[35]);    // You can't use this command with this class.
+            clif_displaymessage (fd, "You can't use this command with this class.");
             return -1;
         }
         else
         {
             pc_changelook (sd, LOOK_CLOTHES_COLOR, cloth_color);
-            clif_displaymessage (fd, msg_table[36]);    // Appearence changed.
+            clif_displaymessage (fd, "Appearence changed.");
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[37]);    // An invalid number was specified.
+        clif_displaymessage (fd, "An invalid number was specified.");
         return -1;
     }
 
@@ -2655,18 +2559,18 @@ int atcommand_hair_style (const int fd, struct map_session_data *sd,
         if (hair_style != 0 && sd->status.sex == 1
             && (sd->status.pc_class == 12 || sd->status.pc_class == 17))
         {
-            clif_displaymessage (fd, msg_table[35]);    // You can't use this command with this class.
+            clif_displaymessage (fd, "You can't use this command with this class.");
             return -1;
         }
         else
         {
             pc_changelook (sd, LOOK_HAIR, hair_style);
-            clif_displaymessage (fd, msg_table[36]);    // Appearence changed.
+            clif_displaymessage (fd, "Appearence changed.");
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[37]);    // An invalid number was specified.
+        clif_displaymessage (fd, "An invalid number was specified.");
         return -1;
     }
 
@@ -2710,18 +2614,18 @@ int atcommand_hair_color (const int fd, struct map_session_data *sd,
         if (hair_color != 0 && sd->status.sex == 1
             && (sd->status.pc_class == 12 || sd->status.pc_class == 17))
         {
-            clif_displaymessage (fd, msg_table[35]);    // You can't use this command with this class.
+            clif_displaymessage (fd, "You can't use this command with this class.");
             return -1;
         }
         else
         {
             pc_changelook (sd, LOOK_HAIR_COLOR, hair_color);
-            clif_displaymessage (fd, msg_table[36]);    // Appearence changed.
+            clif_displaymessage (fd, "Appearence changed.");
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[37]);    // An invalid number was specified.
+        clif_displaymessage (fd, "An invalid number was specified.");
         return -1;
     }
 
@@ -2804,8 +2708,8 @@ int atcommand_go (const int fd, struct map_session_data *sd,
     if (!message || !*message || sscanf (message, "%99s", map_name) < 1
         || town < -3 || town >= (int) (sizeof (data) / sizeof (data[0])))
     {
-        clif_displaymessage (fd, msg_table[38]);    // Invalid location number or name.
-        clif_displaymessage (fd, msg_table[82]);    // Please, use one of this number/name:
+        clif_displaymessage (fd, "Invalid location number or name.");
+        clif_displaymessage (fd, "Please, use one of this number/name:");
         clif_displaymessage (fd,
                              "-3=(Memo point 2)   4=Alberta       11=Gon Ryun");
         clif_displaymessage (fd,
@@ -2934,17 +2838,17 @@ int atcommand_go (const int fd, struct map_session_data *sd,
                      sd->status.memo_point[-town - 1].x,
                      sd->status.memo_point[-town - 1].y, 3) == 0)
                 {
-                    clif_displaymessage (fd, msg_table[0]); // Warped.
+                    clif_displaymessage (fd, "Warped.");
                 }
                 else
                 {
-                    clif_displaymessage (fd, msg_table[1]); // Map not found.
+                    clif_displaymessage (fd, "Map not found.");
                     return -1;
                 }
             }
             else
             {
-                sprintf (output, msg_table[164], -town - 1);    // Your memo point #%d doesn't exist.
+                sprintf (output, "Your memo point #%d doesn't exist.", -town - 1);
                 clif_displaymessage (fd, output);
                 return -1;
             }
@@ -2969,17 +2873,17 @@ int atcommand_go (const int fd, struct map_session_data *sd,
             if (pc_setpos (sd, data[town].map, data[town].x, data[town].y, 3)
                 == 0)
             {
-                clif_displaymessage (fd, msg_table[0]); // Warped.
+                clif_displaymessage (fd, "Warped.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[1]); // Map not found.
+                clif_displaymessage (fd, "Map not found.");
                 return -1;
             }
         }
         else
         {                       // if you arrive here, you have an error in town variable when reading of names
-            clif_displaymessage (fd, msg_table[38]);    // Invalid location number or name.
+            clif_displaymessage (fd, "Invalid location number or name.");
             return -1;
         }
     }
@@ -3009,7 +2913,7 @@ int atcommand_spawn (const int fd, struct map_session_data *sd,
     if (!message || !*message
         || sscanf (message, "%99s %d %d %d", monster, &number, &x, &y) < 1)
     {
-        clif_displaymessage (fd, msg_table[143]);   // Give a monster name/id please.
+        clif_displaymessage (fd, "Give a monster name/id please.");
         return -1;
     }
 
@@ -3019,13 +2923,13 @@ int atcommand_spawn (const int fd, struct map_session_data *sd,
 
     if (mob_id == 0)
     {
-        clif_displaymessage (fd, msg_table[40]);    // Invalid monster ID or name.
+        clif_displaymessage (fd, "Invalid monster ID or name.");
         return -1;
     }
 
     if (mob_id == 1288)
     {
-        clif_displaymessage (fd, msg_table[83]);    // Cannot spawn emperium.
+        clif_displaymessage (fd, "Cannot spawn emperium.");
         return -1;
     }
 
@@ -3066,15 +2970,15 @@ int atcommand_spawn (const int fd, struct map_session_data *sd,
 
     if (count != 0)
         if (number == count)
-            clif_displaymessage (fd, msg_table[39]);    // All monster summoned!
+            clif_displaymessage (fd, "All monster summoned!");
         else
         {
-            sprintf (output, msg_table[240], count);    // %d monster(s) summoned!
+            sprintf (output, "%d monster(s) summoned!", count);
             clif_displaymessage (fd, output);
         }
     else
     {
-        clif_displaymessage (fd, msg_table[40]);    // Invalid monster ID or name.
+        clif_displaymessage (fd, "Invalid monster ID or name.");
         return -1;
     }
 
@@ -3085,6 +2989,7 @@ int atcommand_spawn (const int fd, struct map_session_data *sd,
  *
  *------------------------------------------
  */
+static
 void atcommand_killmonster_sub (const int fd, struct map_session_data *sd,
                                 const char *message, const int drop)
 {
@@ -3106,7 +3011,7 @@ void atcommand_killmonster_sub (const int fd, struct map_session_data *sd,
     map_foreachinarea (atkillmonster_sub, map_id, 0, 0, map[map_id].xs,
                        map[map_id].ys, BL_MOB, drop);
 
-    clif_displaymessage (fd, msg_table[165]);   // All monsters killed!
+    clif_displaymessage (fd, "All monsters killed!");
 
     return;
 }
@@ -3221,9 +3126,9 @@ int atcommand_produce (const int fd, struct map_session_data *sd,
         if (battle_config.error_log)
             printf ("@produce NOT WEAPON [%d]\n", item_id);
         if (item_id != 0 && itemdb_exists (item_id))
-            sprintf (output, msg_table[169], item_id, item_data->name); // This item (%d: '%s') is not an equipment.
+            sprintf (output, "This item (%d: '%s') is not an equipment.", item_id, item_data->name);
         else
-            sprintf (output, "%s", msg_table[170]);   // This item is not an equipment.
+            sprintf (output, "%s", "This item is not an equipment.");
         clif_displaymessage (fd, output);
         return -1;
     }
@@ -3235,6 +3140,7 @@ int atcommand_produce (const int fd, struct map_session_data *sd,
  * Sub-function to display actual memo points
  *------------------------------------------
  */
+static
 void atcommand_memo_sub (struct map_session_data *sd)
 {
     int  i;
@@ -3251,7 +3157,7 @@ void atcommand_memo_sub (struct map_session_data *sd)
                      sd->status.memo_point[i].map, sd->status.memo_point[i].x,
                      sd->status.memo_point[i].y);
         else
-            sprintf (output, msg_table[171], i);    // %d - void
+            sprintf (output, "%d - void", i);
         clif_displaymessage (sd->fd, output);
     }
 
@@ -3285,7 +3191,7 @@ int atcommand_memo (const int fd, struct map_session_data *sd,
             }
             if (sd->status.memo_point[position].map[0])
             {
-                sprintf (output, msg_table[172], position, sd->status.memo_point[position].map, sd->status.memo_point[position].x, sd->status.memo_point[position].y);  // You replace previous memo position %d - %s (%d,%d).
+                sprintf (output, "You replace previous memo position %d - %s (%d,%d).", position, sd->status.memo_point[position].map, sd->status.memo_point[position].x, sd->status.memo_point[position].y);
                 clif_displaymessage (fd, output);
             }
             memcpy (sd->status.memo_point[position].map, map[sd->bl.m].name,
@@ -3294,7 +3200,7 @@ int atcommand_memo (const int fd, struct map_session_data *sd,
             sd->status.memo_point[position].y = sd->bl.y;
             clif_skill_memo (sd, 0);
             if (pc_checkskill (sd, AL_WARP) <= (position + 1))
-                clif_displaymessage (fd, msg_table[173]);   // Note: you don't have the 'Warp' skill level to use it.
+                clif_displaymessage (fd, "Note: you don't have the 'Warp' skill level to use it.");
             atcommand_memo_sub (sd);
         }
         else
@@ -3385,14 +3291,14 @@ int atcommand_statuspoint (const int fd, struct map_session_data *sd,
     {
         sd->status.status_point = (short) new_status_point;
         clif_updatestatus (sd, SP_STATUSPOINT);
-        clif_displaymessage (fd, msg_table[174]);   // Number of status points changed!
+        clif_displaymessage (fd, "Number of status points changed!");
     }
     else
     {
         if (point < 0)
-            clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+            clif_displaymessage (fd, "Impossible to decrease the number/value.");
         else
-            clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+            clif_displaymessage (fd, "Impossible to increase the number/value.");
         return -1;
     }
 
@@ -3425,14 +3331,14 @@ int atcommand_skillpoint (const int fd, struct map_session_data *sd,
     {
         sd->status.skill_point = (short) new_skill_point;
         clif_updatestatus (sd, SP_SKILLPOINT);
-        clif_displaymessage (fd, msg_table[175]);   // Number of skill points changed!
+        clif_displaymessage (fd, "Number of skill points changed!");
     }
     else
     {
         if (point < 0)
-            clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+            clif_displaymessage (fd, "Impossible to decrease the number/value.");
         else
-            clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+            clif_displaymessage (fd, "Impossible to increase the number/value.");
         return -1;
     }
 
@@ -3465,14 +3371,14 @@ int atcommand_zeny (const int fd, struct map_session_data *sd,
     {
         sd->status.zeny = new_zeny;
         clif_updatestatus (sd, SP_ZENY);
-        clif_displaymessage (fd, msg_table[176]);   // Number of zenys changed!
+        clif_displaymessage (fd, "Number of zenys changed!");
     }
     else
     {
         if (zeny < 0)
-            clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+            clif_displaymessage (fd, "Impossible to decrease the number/value.");
         else
-            clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+            clif_displaymessage (fd, "Impossible to increase the number/value.");
         return -1;
     }
 
@@ -3535,14 +3441,14 @@ int atcommand_param (const int fd, struct map_session_data *sd,
         clif_updatestatus (sd, SP_STR + index);
         clif_updatestatus (sd, SP_USTR + index);
         pc_calcstatus (sd, 0);
-        clif_displaymessage (fd, msg_table[42]);    // Stat changed.
+        clif_displaymessage (fd, "Stat changed.");
     }
     else
     {
         if (value < 0)
-            clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+            clif_displaymessage (fd, "Impossible to decrease the number/value.");
         else
-            clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+            clif_displaymessage (fd, "Impossible to increase the number/value.");
         return -1;
     }
 
@@ -3589,13 +3495,13 @@ int atcommand_all_stats (const int fd, struct map_session_data *sd,
     }
 
     if (count > 0)              // if at least 1 stat modified
-        clif_displaymessage (fd, msg_table[84]);    // All stats changed!
+        clif_displaymessage (fd, "All stats changed!");
     else
     {
         if (value < 0)
-            clif_displaymessage (fd, msg_table[177]);   // Impossible to decrease a stat.
+            clif_displaymessage (fd, "Impossible to decrease a stat.");
         else
-            clif_displaymessage (fd, msg_table[178]);   // Impossible to increase a stat.
+            clif_displaymessage (fd, "Impossible to increase a stat.");
         return -1;
     }
 
@@ -3624,12 +3530,12 @@ int atcommand_guildlevelup (const int fd, struct map_session_data *sd,
     if (sd->status.guild_id <= 0
         || (guild_info = guild_search (sd->status.guild_id)) == NULL)
     {
-        clif_displaymessage (fd, msg_table[43]);    // You're not in a guild.
+        clif_displaymessage (fd, "You're not in a guild.");
         return -1;
     }
     if (strcmp (sd->status.name, guild_info->master) != 0)
     {
-        clif_displaymessage (fd, msg_table[44]);    // You're not the master of your guild.
+        clif_displaymessage (fd, "You're not the master of your guild.");
         return -1;
     }
 
@@ -3643,11 +3549,11 @@ int atcommand_guildlevelup (const int fd, struct map_session_data *sd,
     {
         intif_guild_change_basicinfo (guild_info->guild_id, GBI_GUILDLV,
                                       &added_level, 2);
-        clif_displaymessage (fd, msg_table[179]);   // Guild level changed.
+        clif_displaymessage (fd, "Guild level changed.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[45]);    // Guild level change failed.
+        clif_displaymessage (fd, "Guild level change failed.");
         return -1;
     }
 
@@ -3694,18 +3600,18 @@ int atcommand_recall (const int fd, struct map_session_data *sd,
                 return -1;
             }
             pc_setpos (pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
-            sprintf (output, msg_table[46], character); // %s recalled!
+            sprintf (output, "%s recalled!", character);
             clif_displaymessage (fd, output);
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -3740,11 +3646,11 @@ int atcommand_revive (const int fd, struct map_session_data *sd,
         clif_updatestatus (pl_sd, SP_HP);
         clif_updatestatus (pl_sd, SP_SP);
         clif_resurrection (&pl_sd->bl, 1);
-        clif_displaymessage (fd, msg_table[51]);    // Character revived.
+        clif_displaymessage (fd, "Character revived.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -3814,7 +3720,7 @@ int atcommand_character_stats (const int fd, struct map_session_data *sd,
         };
         sprintf (job_jobname, "Job - %s %s", job_name (pl_sd->status.pc_class),
                  "(level %d)");
-        sprintf (output, msg_table[53], pl_sd->status.name);    // '%s' stats:
+        sprintf (output, "'%s' stats:", pl_sd->status.name);
         clif_displaymessage (fd, output);
         for (i = 0; output_table[i].format != NULL; i++)
         {
@@ -3824,7 +3730,7 @@ int atcommand_character_stats (const int fd, struct map_session_data *sd,
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -3878,12 +3784,12 @@ int atcommand_character_stats_all (const int fd, struct map_session_data *sd,
     }
 
     if (count == 0)
-        clif_displaymessage (fd, msg_table[28]);    // No player found.
+        clif_displaymessage (fd, "No player found.");
     else if (count == 1)
-        clif_displaymessage (fd, msg_table[29]);    // 1 player found.
+        clif_displaymessage (fd, "1 player found.");
     else
     {
-        sprintf (output, msg_table[30], count); // %d players found.
+        sprintf (output, "%d players found.", count);
         clif_displaymessage (fd, output);
     }
 
@@ -3960,17 +3866,17 @@ int atcommand_character_option (const int fd, struct map_session_data *sd,
             }
             clif_changeoption (&pl_sd->bl);
             pc_calcstatus (pl_sd, 0);
-            clif_displaymessage (fd, msg_table[58]);    // Character's options changed.
+            clif_displaymessage (fd, "Character's options changed.");
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -3998,18 +3904,18 @@ int atcommand_char_change_sex (const int fd, struct map_session_data *sd,
     // check player name
     if (strlen (character) < 4)
     {
-        clif_displaymessage (fd, msg_table[86]);    // Sorry, but a player name have at least 4 characters.
+        clif_displaymessage (fd, "Sorry, but a player name have at least 4 characters.");
         return -1;
     }
     else if (strlen (character) > 23)
     {
-        clif_displaymessage (fd, msg_table[87]);    // Sorry, but a player name have 23 characters maximum.
+        clif_displaymessage (fd, "Sorry, but a player name have 23 characters maximum.");
         return -1;
     }
     else
     {
         chrif_char_ask_name (sd->status.account_id, character, 5, 0, 0, 0, 0, 0, 0);    // type: 5 - changesex
-        clif_displaymessage (fd, msg_table[88]);    // Character name sends to char-server to ask it.
+        clif_displaymessage (fd, "Character name sends to char-server to ask it.");
     }
 
     return 0;
@@ -4037,18 +3943,18 @@ int atcommand_char_block (const int fd, struct map_session_data *sd,
     // check player name
     if (strlen (character) < 4)
     {
-        clif_displaymessage (fd, msg_table[86]);    // Sorry, but a player name have at least 4 characters.
+        clif_displaymessage (fd, "Sorry, but a player name have at least 4 characters.");
         return -1;
     }
     else if (strlen (character) > 23)
     {
-        clif_displaymessage (fd, msg_table[87]);    // Sorry, but a player name have 23 characters maximum.
+        clif_displaymessage (fd, "Sorry, but a player name have 23 characters maximum.");
         return -1;
     }
     else
     {
         chrif_char_ask_name (sd->status.account_id, character, 1, 0, 0, 0, 0, 0, 0);    // type: 1 - block
-        clif_displaymessage (fd, msg_table[88]);    // Character name sends to char-server to ask it.
+        clif_displaymessage (fd, "Character name sends to char-server to ask it.");
     }
 
     return 0;
@@ -4143,25 +4049,25 @@ int atcommand_char_ban (const int fd, struct map_session_data *sd,
     if (year == 0 && month == 0 && day == 0 && hour == 0 && minute == 0
         && second == 0)
     {
-        clif_displaymessage (fd, msg_table[85]);    // Invalid time for ban command.
+        clif_displaymessage (fd, "Invalid time for ban command.");
         return -1;
     }
 
     // check player name
     if (strlen (character) < 4)
     {
-        clif_displaymessage (fd, msg_table[86]);    // Sorry, but a player name have at least 4 characters.
+        clif_displaymessage (fd, "Sorry, but a player name have at least 4 characters.");
         return -1;
     }
     else if (strlen (character) > 23)
     {
-        clif_displaymessage (fd, msg_table[87]);    // Sorry, but a player name have 23 characters maximum.
+        clif_displaymessage (fd, "Sorry, but a player name have 23 characters maximum.");
         return -1;
     }
     else
     {
         chrif_char_ask_name (sd->status.account_id, character, 2, year, month, day, hour, minute, second);  // type: 2 - ban
-        clif_displaymessage (fd, msg_table[88]);    // Character name sends to char-server to ask it.
+        clif_displaymessage (fd, "Character name sends to char-server to ask it.");
     }
 
     return 0;
@@ -4188,19 +4094,19 @@ int atcommand_char_unblock (const int fd, struct map_session_data *sd,
     // check player name
     if (strlen (character) < 4)
     {
-        clif_displaymessage (fd, msg_table[86]);    // Sorry, but a player name have at least 4 characters.
+        clif_displaymessage (fd, "Sorry, but a player name have at least 4 characters.");
         return -1;
     }
     else if (strlen (character) > 23)
     {
-        clif_displaymessage (fd, msg_table[87]);    // Sorry, but a player name have 23 characters maximum.
+        clif_displaymessage (fd, "Sorry, but a player name have 23 characters maximum.");
         return -1;
     }
     else
     {
         // send answer to login server via char-server
         chrif_char_ask_name (sd->status.account_id, character, 3, 0, 0, 0, 0, 0, 0);    // type: 3 - unblock
-        clif_displaymessage (fd, msg_table[88]);    // Character name sends to char-server to ask it.
+        clif_displaymessage (fd, "Character name sends to char-server to ask it.");
     }
 
     return 0;
@@ -4227,19 +4133,19 @@ int atcommand_char_unban (const int fd, struct map_session_data *sd,
     // check player name
     if (strlen (character) < 4)
     {
-        clif_displaymessage (fd, msg_table[86]);    // Sorry, but a player name have at least 4 characters.
+        clif_displaymessage (fd, "Sorry, but a player name have at least 4 characters.");
         return -1;
     }
     else if (strlen (character) > 23)
     {
-        clif_displaymessage (fd, msg_table[87]);    // Sorry, but a player name have 23 characters maximum.
+        clif_displaymessage (fd, "Sorry, but a player name have 23 characters maximum.");
         return -1;
     }
     else
     {
         // send answer to login server via char-server
         chrif_char_ask_name (sd->status.account_id, character, 4, 0, 0, 0, 0, 0, 0);    // type: 4 - unban
-        clif_displaymessage (fd, msg_table[88]);    // Character name sends to char-server to ask it.
+        clif_displaymessage (fd, "Character name sends to char-server to ask it.");
     }
 
     return 0;
@@ -4280,7 +4186,7 @@ int atcommand_character_save (const int fd, struct map_session_data *sd,
             m = map_mapname2mapid (map_name);
             if (m < 0)
             {
-                clif_displaymessage (fd, msg_table[1]); // Map not found.
+                clif_displaymessage (fd, "Map not found.");
                 return -1;
             }
             else
@@ -4293,18 +4199,18 @@ int atcommand_character_save (const int fd, struct map_session_data *sd,
                     return -1;
                 }
                 pc_setsavepoint (pl_sd, map_name, x, y);
-                clif_displaymessage (fd, msg_table[57]);    // Character's respawn point changed.
+                clif_displaymessage (fd, "Character's respawn point changed.");
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -4331,13 +4237,13 @@ int atcommand_night (const int fd, struct map_session_data *sd,
             {
                 pl_sd->opt2 |= STATE_BLIND;
                 clif_changeoption (&pl_sd->bl);
-                clif_displaymessage (pl_sd->fd, msg_table[59]); // Night has fallen.
+                clif_displaymessage (pl_sd->fd, "Night has fallen.");
             }
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[89]);    // Sorry, it's already the night. Impossible to execute the command.
+        clif_displaymessage (fd, "Sorry, it's already the night. Impossible to execute the command.");
         return -1;
     }
 
@@ -4364,13 +4270,13 @@ int atcommand_day (const int fd, struct map_session_data *sd,
             {
                 pl_sd->opt2 &= ~STATE_BLIND;
                 clif_changeoption (&pl_sd->bl);
-                clif_displaymessage (pl_sd->fd, msg_table[60]); // Day has arrived.
+                clif_displaymessage (pl_sd->fd, "Day has arrived.");
             }
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[90]);    // Sorry, it's already the day. Impossible to execute the command.
+        clif_displaymessage (fd, "Sorry, it's already the day. Impossible to execute the command.");
         return -1;
     }
 
@@ -4394,10 +4300,10 @@ int atcommand_doom (const int fd, struct map_session_data *sd,
             && pc_isGM (sd) >= pc_isGM (pl_sd))
         {                       // you can doom only lower or same gm level
             pc_damage (NULL, pl_sd, pl_sd->status.hp + 1);
-            clif_displaymessage (pl_sd->fd, msg_table[61]); // The holy messenger has given judgement.
+            clif_displaymessage (pl_sd->fd, "The holy messenger has given judgement.");
         }
     }
-    clif_displaymessage (fd, msg_table[62]);    // Judgement was made.
+    clif_displaymessage (fd, "Judgement was made.");
 
     return 0;
 }
@@ -4419,10 +4325,10 @@ int atcommand_doommap (const int fd, struct map_session_data *sd,
             && pc_isGM (sd) >= pc_isGM (pl_sd))
         {                       // you can doom only lower or same gm level
             pc_damage (NULL, pl_sd, pl_sd->status.hp + 1);
-            clif_displaymessage (pl_sd->fd, msg_table[61]); // The holy messenger has given judgement.
+            clif_displaymessage (pl_sd->fd, "The holy messenger has given judgement.");
         }
     }
-    clif_displaymessage (fd, msg_table[62]);    // Judgement was made.
+    clif_displaymessage (fd, "Judgement was made.");
 
     return 0;
 }
@@ -4441,7 +4347,7 @@ static void atcommand_raise_sub (struct map_session_data *sd)
         clif_updatestatus (sd, SP_HP);
         clif_updatestatus (sd, SP_SP);
         clif_resurrection (&sd->bl, 1);
-        clif_displaymessage (sd->fd, msg_table[63]);    // Mercy has been shown.
+        clif_displaymessage (sd->fd, "Mercy has been shown.");
     }
 }
 
@@ -4459,7 +4365,7 @@ int atcommand_raise (const int fd, struct map_session_data *sd,
         if (session[i])
             atcommand_raise_sub ((struct map_session_data *)session[i]->session_data);
     }
-    clif_displaymessage (fd, msg_table[64]);    // Mercy has been granted.
+    clif_displaymessage (fd, "Mercy has been granted.");
 
     return 0;
 }
@@ -4480,7 +4386,7 @@ int atcommand_raisemap (const int fd, struct map_session_data *sd,
             && pl_sd->state.auth && sd->bl.m == pl_sd->bl.m)
             atcommand_raise_sub (pl_sd);
     }
-    clif_displaymessage (fd, msg_table[64]);    // Mercy has been granted.
+    clif_displaymessage (fd, "Mercy has been granted.");
 
     return 0;
 }
@@ -4516,7 +4422,7 @@ int atcommand_character_baselevel (const int fd, struct map_session_data *sd,
             {
                 if (pl_sd->status.base_level == battle_config.maximum_level)
                 {               // check for max level by Valaris
-                    clif_displaymessage (fd, msg_table[91]);    // Character's base level can't go any higher.
+                    clif_displaymessage (fd, "Character's base level can't go any higher.");
                     return 0;
                 }               // End Addition
                 if (level > battle_config.maximum_level || level > (battle_config.maximum_level - pl_sd->status.base_level))    // fix positiv overflow
@@ -4533,13 +4439,13 @@ int atcommand_character_baselevel (const int fd, struct map_session_data *sd,
                 pc_calcstatus (pl_sd, 0);
                 pc_heal (pl_sd, pl_sd->status.max_hp, pl_sd->status.max_sp);
                 clif_misceffect (&pl_sd->bl, 0);
-                clif_displaymessage (fd, msg_table[65]);    // Character's base level raised.
+                clif_displaymessage (fd, "Character's base level raised.");
             }
             else
             {
                 if (pl_sd->status.base_level == 1)
                 {
-                    clif_displaymessage (fd, msg_table[193]);   // Character's base level can't go any lower.
+                    clif_displaymessage (fd, "Character's base level can't go any lower.");
                     return -1;
                 }
                 if (level < -battle_config.maximum_level || level < (1 - pl_sd->status.base_level)) // fix negativ overflow
@@ -4559,20 +4465,20 @@ int atcommand_character_baselevel (const int fd, struct map_session_data *sd,
                 clif_updatestatus (pl_sd, SP_NEXTBASEEXP);
                 clif_updatestatus (pl_sd, SP_BASEEXP);
                 pc_calcstatus (pl_sd, 0);
-                clif_displaymessage (fd, msg_table[66]);    // Character's base level lowered.
+                clif_displaymessage (fd, "Character's base level lowered.");
             }
 	    // Reset their stat points to prevent extra points from stacking
 	    atcommand_charstreset(fd, sd,"@charstreset", character);
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -4617,7 +4523,7 @@ int atcommand_character_joblevel (const int fd, struct map_session_data *sd,
             {
                 if (pl_sd->status.job_level == max_level)
                 {
-                    clif_displaymessage (fd, msg_table[67]);    // Character's job level can't go any higher.
+                    clif_displaymessage (fd, "Character's job level can't go any higher.");
                     return -1;
                 }
                 if (pl_sd->status.job_level + level > max_level)
@@ -4629,13 +4535,13 @@ int atcommand_character_joblevel (const int fd, struct map_session_data *sd,
                 clif_updatestatus (pl_sd, SP_SKILLPOINT);
                 pc_calcstatus (pl_sd, 0);
                 clif_misceffect (&pl_sd->bl, 1);
-                clif_displaymessage (fd, msg_table[68]);    // character's job level raised.
+                clif_displaymessage (fd, "character's job level raised.");
             }
             else
             {
                 if (pl_sd->status.job_level == 1)
                 {
-                    clif_displaymessage (fd, msg_table[194]);   // Character's job level can't go any lower.
+                    clif_displaymessage (fd, "Character's job level can't go any lower.");
                     return -1;
                 }
                 if (pl_sd->status.job_level + level < 1)
@@ -4651,18 +4557,18 @@ int atcommand_character_joblevel (const int fd, struct map_session_data *sd,
                     clif_updatestatus (pl_sd, SP_SKILLPOINT);
                 }               // to add: remove status points from skills
                 pc_calcstatus (pl_sd, 0);
-                clif_displaymessage (fd, msg_table[69]);    // Character's job level lowered.
+                clif_displaymessage (fd, "Character's job level lowered.");
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -4694,13 +4600,13 @@ int atcommand_kick (const int fd, struct map_session_data *sd,
             clif_GM_kick (sd, pl_sd, 1);
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -4727,7 +4633,7 @@ int atcommand_kickall (const int fd, struct map_session_data *sd,
         }
     }
 
-    clif_displaymessage (fd, msg_table[195]);   // All players have been kicked!
+    clif_displaymessage (fd, "All players have been kicked!");
 
     return 0;
 }
@@ -4742,7 +4648,7 @@ int atcommand_allskills (const int fd, struct map_session_data *sd,
     pc_allskillup (sd);         // all skills
     sd->status.skill_point = 0; // 0 skill points
     clif_updatestatus (sd, SP_SKILLPOINT);  // update
-    clif_displaymessage (fd, msg_table[76]);    // You have received all skills.
+    clif_displaymessage (fd, "You have received all skills.");
 
     return 0;
 }
@@ -4770,23 +4676,23 @@ int atcommand_questskill (const int fd, struct map_session_data *sd,
             if (pc_checkskill (sd, skill_id) == 0)
             {
                 pc_skill (sd, skill_id, 1, 0);
-                clif_displaymessage (fd, msg_table[70]);    // You have learned the skill.
+                clif_displaymessage (fd, "You have learned the skill.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[196]);   // You already have this quest skill.
+                clif_displaymessage (fd, "You already have this quest skill.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[197]);   // This skill number doesn't exist or isn't a quest skill.
+            clif_displaymessage (fd, "This skill number doesn't exist or isn't a quest skill.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[198]);   // This skill number doesn't exist.
+        clif_displaymessage (fd, "This skill number doesn't exist.");
         return -1;
     }
 
@@ -4824,29 +4730,29 @@ int atcommand_charquestskill (const int fd, struct map_session_data *sd,
                 if (pc_checkskill (pl_sd, skill_id) == 0)
                 {
                     pc_skill (pl_sd, skill_id, 1, 0);
-                    clif_displaymessage (fd, msg_table[199]);   // This player has learned the skill.
+                    clif_displaymessage (fd, "This player has learned the skill.");
                 }
                 else
                 {
-                    clif_displaymessage (fd, msg_table[200]);   // This player already has this quest skill.
+                    clif_displaymessage (fd, "This player already has this quest skill.");
                     return -1;
                 }
             }
             else
             {
-                clif_displaymessage (fd, msg_table[3]); // Character not found.
+                clif_displaymessage (fd, "Character not found.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[197]);   // This skill number doesn't exist or isn't a quest skill.
+            clif_displaymessage (fd, "This skill number doesn't exist or isn't a quest skill.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[198]);   // This skill number doesn't exist.
+        clif_displaymessage (fd, "This skill number doesn't exist.");
         return -1;
     }
 
@@ -4878,23 +4784,23 @@ int atcommand_lostskill (const int fd, struct map_session_data *sd,
                 sd->status.skill[skill_id].lv = 0;
                 sd->status.skill[skill_id].flags = 0;
                 clif_skillinfoblock (sd);
-                clif_displaymessage (fd, msg_table[71]);    // You have forgotten the skill.
+                clif_displaymessage (fd, "You have forgotten the skill.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[201]);   // You don't have this quest skill.
+                clif_displaymessage (fd, "You don't have this quest skill.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[197]);   // This skill number doesn't exist or isn't a quest skill.
+            clif_displaymessage (fd, "This skill number doesn't exist or isn't a quest skill.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[198]);   // This skill number doesn't exist.
+        clif_displaymessage (fd, "This skill number doesn't exist.");
         return -1;
     }
 
@@ -4934,29 +4840,29 @@ int atcommand_charlostskill (const int fd, struct map_session_data *sd,
                     pl_sd->status.skill[skill_id].lv = 0;
                     pl_sd->status.skill[skill_id].flags = 0;
                     clif_skillinfoblock (pl_sd);
-                    clif_displaymessage (fd, msg_table[202]);   // This player has forgotten the skill.
+                    clif_displaymessage (fd, "This player has forgotten the skill.");
                 }
                 else
                 {
-                    clif_displaymessage (fd, msg_table[203]);   // This player doesn't have this quest skill.
+                    clif_displaymessage (fd, "This player doesn't have this quest skill.");
                     return -1;
                 }
             }
             else
             {
-                clif_displaymessage (fd, msg_table[3]); // Character not found.
+                clif_displaymessage (fd, "Character not found.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[197]);   // This skill number doesn't exist or isn't a quest skill.
+            clif_displaymessage (fd, "This skill number doesn't exist or isn't a quest skill.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[198]);   // This skill number doesn't exist.
+        clif_displaymessage (fd, "This skill number doesn't exist.");
         return -1;
     }
 
@@ -5022,13 +4928,13 @@ int atcommand_agitstart (const int fd, struct map_session_data *sd,
 {
     if (agit_flag == 1)
     {
-        clif_displaymessage (fd, msg_table[73]);    // Already it has started siege warfare.
+        clif_displaymessage (fd, "Already it has started siege warfare.");
         return -1;
     }
 
     agit_flag = 1;
     guild_agit_start ();
-    clif_displaymessage (fd, msg_table[72]);    // Guild siege warfare start!
+    clif_displaymessage (fd, "Guild siege warfare start!");
 
     return 0;
 }
@@ -5042,13 +4948,13 @@ int atcommand_agitend (const int fd, struct map_session_data *sd,
 {
     if (agit_flag == 0)
     {
-        clif_displaymessage (fd, msg_table[75]);    // Siege warfare hasn't started yet.
+        clif_displaymessage (fd, "Siege warfare hasn't started yet.");
         return -1;
     }
 
     agit_flag = 0;
     guild_agit_end ();
-    clif_displaymessage (fd, msg_table[74]);    // Guild siege warfare end!
+    clif_displaymessage (fd, "Guild siege warfare end!");
 
     return 0;
 }
@@ -5101,7 +5007,7 @@ int atcommand_idsearch (const int fd, struct map_session_data *sd,
         return -1;
     }
 
-    sprintf (output, msg_table[77], item_name); // The reference result of '%s' (name: id):
+    sprintf (output, "The reference result of '%s' (name: id):", item_name);
     clif_displaymessage (fd, output);
     match = 0;
     for (i = 0; i < 20000; i++)
@@ -5110,11 +5016,11 @@ int atcommand_idsearch (const int fd, struct map_session_data *sd,
             && strstr (item->jname, item_name) != NULL)
         {
             match++;
-            sprintf (output, msg_table[78], item->jname, item->nameid); // %s: %d
+            sprintf (output, "%s: %d", item->jname, item->nameid);
             clif_displaymessage (fd, output);
         }
     }
-    sprintf (output, msg_table[79], match); // It is %d affair above.
+    sprintf (output, "It is %d affair above.", match);
     clif_displaymessage (fd, output);
 
     return 0;
@@ -5146,18 +5052,18 @@ int atcommand_charskreset (const int fd, struct map_session_data *sd,
         if (pc_isGM (sd) >= pc_isGM (pl_sd))
         {                       // you can reset skill points only lower or same gm level
             pc_resetskill (pl_sd);
-            sprintf (output, msg_table[206], character);    // '%s' skill points reseted!
+            sprintf (output, "'%s' skill points reseted!", character);
             clif_displaymessage (fd, output);
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5190,18 +5096,18 @@ int atcommand_charstreset (const int fd, struct map_session_data *sd,
         if (pc_isGM (sd) >= pc_isGM (pl_sd))
         {                       // you can reset stats points only lower or same gm level
             pc_resetstate (pl_sd);
-            sprintf (output, msg_table[207], character);    // '%s' stats points reseted!
+            sprintf (output, "'%s' stats points reseted!", character);
             clif_displaymessage (fd, output);
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5237,18 +5143,18 @@ int atcommand_charreset (const int fd, struct map_session_data *sd,
             pc_resetskill (pl_sd);
             pc_setglobalreg (pl_sd, "MAGIC_FLAGS", 0);  // [Fate] Reset magic quest variables
             pc_setglobalreg (pl_sd, "MAGIC_EXP", 0);    // [Fate] Reset magic experience
-            sprintf (output, msg_table[208], character);    // '%s' skill and stats points reseted!
+            sprintf (output, "'%s' skill and stats points reseted!", character);
             clif_displaymessage (fd, output);
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5327,18 +5233,18 @@ int atcommand_char_wipe (const int fd, struct map_session_data *sd,
             pc_setglobalreg (pl_sd, "MAGIC_FLAGS", 0);  // [Fate] Reset magic quest variables
             pc_setglobalreg (pl_sd, "MAGIC_EXP", 0);    // [Fate] Reset magic experience
 
-            sprintf (output, "%s:  wiped.", character); // '%s' skill and stats points reseted!
+            sprintf (output, "%s:  wiped.", character);
             clif_displaymessage (fd, output);
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5384,7 +5290,7 @@ int atcommand_charmodel (const int fd, struct map_session_data *sd,
                 pl_sd->status.sex == 1 &&
                 (pl_sd->status.pc_class == 12 || pl_sd->status.pc_class == 17))
             {
-                clif_displaymessage (fd, msg_table[35]);    // You can't use this command with this class.
+                clif_displaymessage (fd, "You can't use this command with this class.");
                 return -1;
             }
             else
@@ -5392,18 +5298,18 @@ int atcommand_charmodel (const int fd, struct map_session_data *sd,
                 pc_changelook (pl_sd, LOOK_HAIR, hair_style);
                 pc_changelook (pl_sd, LOOK_HAIR_COLOR, hair_color);
                 pc_changelook (pl_sd, LOOK_CLOTHES_COLOR, cloth_color);
-                clif_displaymessage (fd, msg_table[36]);    // Appearence changed.
+                clif_displaymessage (fd, "Appearence changed.");
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[37]);    // An invalid number was specified.
+            clif_displaymessage (fd, "An invalid number was specified.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5444,20 +5350,20 @@ int atcommand_charskpoint (const int fd, struct map_session_data *sd,
         {
             pl_sd->status.skill_point = new_skill_point;
             clif_updatestatus (pl_sd, SP_SKILLPOINT);
-            clif_displaymessage (fd, msg_table[209]);   // Character's number of skill points changed!
+            clif_displaymessage (fd, "Character's number of skill points changed!");
         }
         else
         {
             if (point < 0)
-                clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+                clif_displaymessage (fd, "Impossible to decrease the number/value.");
             else
-                clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+                clif_displaymessage (fd, "Impossible to increase the number/value.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5498,20 +5404,20 @@ int atcommand_charstpoint (const int fd, struct map_session_data *sd,
         {
             pl_sd->status.status_point = new_status_point;
             clif_updatestatus (pl_sd, SP_STATUSPOINT);
-            clif_displaymessage (fd, msg_table[210]);   // Character's number of status points changed!
+            clif_displaymessage (fd, "Character's number of status points changed!");
         }
         else
         {
             if (point < 0)
-                clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+                clif_displaymessage (fd, "Impossible to decrease the number/value.");
             else
-                clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+                clif_displaymessage (fd, "Impossible to increase the number/value.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5550,20 +5456,20 @@ int atcommand_charzeny (const int fd, struct map_session_data *sd,
         {
             pl_sd->status.zeny = new_zeny;
             clif_updatestatus (pl_sd, SP_ZENY);
-            clif_displaymessage (fd, msg_table[211]);   // Character's number of zenys changed!
+            clif_displaymessage (fd, "Character's number of zenys changed!");
         }
         else
         {
             if (zeny < 0)
-                clif_displaymessage (fd, msg_table[41]);    // Impossible to decrease the number/value.
+                clif_displaymessage (fd, "Impossible to decrease the number/value.");
             else
-                clif_displaymessage (fd, msg_table[149]);   // Impossible to increase the number/value.
+                clif_displaymessage (fd, "Impossible to increase the number/value.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -5608,7 +5514,7 @@ int atcommand_recallall (const int fd, struct map_session_data *sd,
         }
     }
 
-    clif_displaymessage (fd, msg_table[92]);    // All characters recalled!
+    clif_displaymessage (fd, "All characters recalled!");
     if (count)
     {
         sprintf (output,
@@ -5670,7 +5576,7 @@ int atcommand_guildrecall (const int fd, struct map_session_data *sd,
                     pc_setpos (pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
             }
         }
-        sprintf (output, msg_table[93], g->name);   // All online characters of the %s guild are near you.
+        sprintf (output, "All online characters of the %s guild are near you.", g->name);
         clif_displaymessage (fd, output);
         if (count)
         {
@@ -5682,7 +5588,7 @@ int atcommand_guildrecall (const int fd, struct map_session_data *sd,
     }
     else
     {
-        clif_displaymessage (fd, msg_table[94]);    // Incorrect name/ID, or no one from the guild is online.
+        clif_displaymessage (fd, "Incorrect name/ID, or no one from the guild is online.");
         return -1;
     }
 
@@ -5739,7 +5645,7 @@ int atcommand_partyrecall (const int fd, struct map_session_data *sd,
                     pc_setpos (pl_sd, sd->mapname, sd->bl.x, sd->bl.y, 2);
             }
         }
-        sprintf (output, msg_table[95], p->name);   // All online characters of the %s party are near you.
+        sprintf (output, "All online characters of the %s party are near you.", p->name);
         clif_displaymessage (fd, output);
         if (count)
         {
@@ -5751,7 +5657,7 @@ int atcommand_partyrecall (const int fd, struct map_session_data *sd,
     }
     else
     {
-        clif_displaymessage (fd, msg_table[96]);    // Incorrect name or ID, or no one from the party is online.
+        clif_displaymessage (fd, "Incorrect name or ID, or no one from the party is online.");
         return -1;
     }
 
@@ -5766,7 +5672,7 @@ int atcommand_reloaditemdb (const int fd, struct map_session_data *sd,
                             const char *command, const char *message)
 {
     itemdb_reload ();
-    clif_displaymessage (fd, msg_table[97]);    // Item database reloaded.
+    clif_displaymessage (fd, "Item database reloaded.");
 
     return 0;
 }
@@ -5779,7 +5685,7 @@ int atcommand_reloadmobdb (const int fd, struct map_session_data *sd,
                            const char *command, const char *message)
 {
     mob_reload ();
-    clif_displaymessage (fd, msg_table[98]);    // Monster database reloaded.
+    clif_displaymessage (fd, "Monster database reloaded.");
 
     return 0;
 }
@@ -5792,7 +5698,7 @@ int atcommand_reloadskilldb (const int fd, struct map_session_data *sd,
                              const char *command, const char *message)
 {
     skill_reload ();
-    clif_displaymessage (fd, msg_table[99]);    // Skill database reloaded.
+    clif_displaymessage (fd, "Skill database reloaded.");
 
     return 0;
 }
@@ -5809,7 +5715,7 @@ int atcommand_reloadscript (const int fd, struct map_session_data *sd,
 
     npc_event_do_oninit ();
 
-    clif_displaymessage (fd, msg_table[100]);   // Scripts reloaded.
+    clif_displaymessage (fd, "Scripts reloaded.");
 
     return 0;
 }
@@ -5824,7 +5730,7 @@ int atcommand_reloadgmdb (      // by [Yor]
 {
     chrif_reloadGMdb ();
 
-    clif_displaymessage (fd, msg_table[101]);   // Login-server asked to reload GM accounts and their level.
+    clif_displaymessage (fd, "Login-server asked to reload GM accounts and their level.");
 
     return 0;
 }
@@ -5868,7 +5774,7 @@ int atcommand_mapinfo (const int fd, struct map_session_data *sd,
 
     if ((m_id = map_mapname2mapid (map_name)) < 0)
     {
-        clif_displaymessage (fd, msg_table[1]); // Map not found.
+        clif_displaymessage (fd, "Map not found.");
         return -1;
     }
 
@@ -6033,7 +5939,7 @@ int atcommand_mount_peco (const int fd, struct map_session_data *sd,
 {
     if (sd->disguise > 0)
     {                           // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-        clif_displaymessage (fd, msg_table[212]);   // Cannot mount a Peco while in disguise.
+        clif_displaymessage (fd, "Cannot mount a Peco while in disguise.");
         return -1;
     }
 
@@ -6051,11 +5957,11 @@ int atcommand_mount_peco (const int fd, struct map_session_data *sd,
             else if (sd->status.pc_class == 4015)
                 sd->status.pc_class = sd->view_class = 4022;
             pc_setoption (sd, sd->status.option | 0x0020);
-            clif_displaymessage (fd, msg_table[102]);   // Mounted Peco.
+            clif_displaymessage (fd, "Mounted Peco.");
         }
         else
         {
-            clif_displaymessage (fd, msg_table[213]);   // You can not mount a peco with your job.
+            clif_displaymessage (fd, "You can not mount a peco with your job.");
             return -1;
         }
     }
@@ -6070,7 +5976,7 @@ int atcommand_mount_peco (const int fd, struct map_session_data *sd,
         else if (sd->status.pc_class == 4022)
             sd->status.pc_class = sd->view_class = 4015;
         pc_setoption (sd, sd->status.option & ~0x0020);
-        clif_displaymessage (fd, msg_table[214]);   // Unmounted Peco.
+        clif_displaymessage (fd, "Unmounted Peco.");
     }
 
     return 0;
@@ -6099,7 +6005,7 @@ int atcommand_char_mount_peco (const int fd, struct map_session_data *sd,
     {
         if (pl_sd->disguise > 0)
         {                       // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-            clif_displaymessage (fd, msg_table[215]);   // This player cannot mount a Peco while in disguise.
+            clif_displaymessage (fd, "This player cannot mount a Peco while in disguise.");
             return -1;
         }
 
@@ -6117,11 +6023,11 @@ int atcommand_char_mount_peco (const int fd, struct map_session_data *sd,
                 else if (pl_sd->status.pc_class == 4015)
                     pl_sd->status.pc_class = pl_sd->view_class = 4022;
                 pc_setoption (pl_sd, pl_sd->status.option | 0x0020);
-                clif_displaymessage (fd, msg_table[216]);   // Now, this player mounts a peco.
+                clif_displaymessage (fd, "Now, this player mounts a peco.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[217]);   // This player can not mount a peco with his/her job.
+                clif_displaymessage (fd, "This player can not mount a peco with his/her job.");
                 return -1;
             }
         }
@@ -6136,12 +6042,12 @@ int atcommand_char_mount_peco (const int fd, struct map_session_data *sd,
             else if (pl_sd->status.pc_class == 4022)
                 pl_sd->status.pc_class = pl_sd->view_class = 4015;
             pc_setoption (pl_sd, pl_sd->status.option & ~0x0020);
-            clif_displaymessage (fd, msg_table[218]);   // Now, this player has not more peco.
+            clif_displaymessage (fd, "Now, this player has not more peco.");
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -6175,19 +6081,19 @@ int atcommand_guildspy (const int fd, struct map_session_data *sd,
         if (sd->guildspy == g->guild_id)
         {
             sd->guildspy = 0;
-            sprintf (output, msg_table[103], g->name);  // No longer spying on the %s guild.
+            sprintf (output, "No longer spying on the %s guild.", g->name);
             clif_displaymessage (fd, output);
         }
         else
         {
             sd->guildspy = g->guild_id;
-            sprintf (output, msg_table[104], g->name);  // Spying on the %s guild.
+            sprintf (output, "Spying on the %s guild.", g->name);
             clif_displaymessage (fd, output);
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[94]);    // Incorrect name/ID, or no one from the guild is online.
+        clif_displaymessage (fd, "Incorrect name/ID, or no one from the guild is online.");
         return -1;
     }
 
@@ -6221,19 +6127,19 @@ int atcommand_partyspy (const int fd, struct map_session_data *sd,
         if (sd->partyspy == p->party_id)
         {
             sd->partyspy = 0;
-            sprintf (output, msg_table[105], p->name);  // No longer spying on the %s party.
+            sprintf (output, "No longer spying on the %s party.", p->name);
             clif_displaymessage (fd, output);
         }
         else
         {
             sd->partyspy = p->party_id;
-            sprintf (output, msg_table[106], p->name);  // Spying on the %s party.
+            sprintf (output, "Spying on the %s party.", p->name);
             clif_displaymessage (fd, output);
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[96]);    // Incorrect name or ID, or no one from the party is online.
+        clif_displaymessage (fd, "Incorrect name or ID, or no one from the party is online.");
         return -1;
     }
 
@@ -6261,11 +6167,11 @@ int atcommand_enablenpc (const int fd, struct map_session_data *sd,
     if (npc_name2id (NPCname) != NULL)
     {
         npc_enable (NPCname, 1);
-        clif_displaymessage (fd, msg_table[110]);   // Npc Enabled.
+        clif_displaymessage (fd, "Npc Enabled.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[111]);   // This NPC doesn't exist.
+        clif_displaymessage (fd, "This NPC doesn't exist.");
         return -1;
     }
 
@@ -6293,11 +6199,11 @@ int atcommand_disablenpc (const int fd, struct map_session_data *sd,
     if (npc_name2id (NPCname) != NULL)
     {
         npc_enable (NPCname, 0);
-        clif_displaymessage (fd, msg_table[112]);   // Npc Disabled.
+        clif_displaymessage (fd, "Npc Disabled.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[111]);   // This NPC doesn't exist.
+        clif_displaymessage (fd, "This NPC doesn't exist.");
         return -1;
     }
 
@@ -6308,7 +6214,8 @@ int atcommand_disablenpc (const int fd, struct map_session_data *sd,
  * time in txt for time command (by [Yor])
  *------------------------------------------
  */
-char *txt_time (unsigned int duration)
+static
+const char *txt_time (unsigned int duration)
 {
     int  days, hours, minutes, seconds;
     char temp[256];
@@ -6328,21 +6235,21 @@ char *txt_time (unsigned int duration)
     seconds = duration - (60 * minutes);
 
     if (days < 2)
-        sprintf (temp, msg_table[219], days);   // %d day
+        sprintf (temp, "%d day", days);
     else
-        sprintf (temp, msg_table[220], days);   // %d days
+        sprintf (temp, "%d days", days);
     if (hours < 2)
-        sprintf (temp1, msg_table[221], temp, hours);   // %s %d hour
+        sprintf (temp1, "%s %d hour", temp, hours);
     else
-        sprintf (temp1, msg_table[222], temp, hours);   // %s %d hours
+        sprintf (temp1, "%s %d hours", temp, hours);
     if (minutes < 2)
-        sprintf (temp, msg_table[223], temp1, minutes); // %s %d minute
+        sprintf (temp, "%s %d minute", temp1, minutes);
     else
-        sprintf (temp, msg_table[224], temp1, minutes); // %s %d minutes
+        sprintf (temp, "%s %d minutes", temp1, minutes);
     if (seconds < 2)
-        sprintf (temp1, msg_table[225], temp, seconds); // %s and %d second
+        sprintf (temp1, "%s and %d second", temp, seconds);
     else
-        sprintf (temp1, msg_table[226], temp, seconds); // %s and %d seconds
+        sprintf (temp1, "%s and %d seconds", temp, seconds);
 
     return temp1;
 }
@@ -6366,64 +6273,64 @@ int atcommand_servertime (const int fd, struct map_session_data *sd,
     time (&time_server);        // get time in seconds since 1/1/1970
     datetime = gmtime (&time_server);   // convert seconds in structure
     // like sprintf, but only for date/time (Sunday, November 02 2003 15:12:52)
-    strftime (temp, sizeof (temp) - 1, msg_table[230], datetime);   // Server time (normal time): %A, %B %d %Y %X.
+    strftime (temp, sizeof (temp) - 1, "Server time (normal time): %A, %B %d %Y %X.", datetime);
     clif_displaymessage (fd, temp);
 
     if (battle_config.night_duration == 0 && battle_config.day_duration == 0)
     {
         if (night_flag == 0)
-            clif_displaymessage (fd, msg_table[231]);   // Game time: The game is in permanent daylight.
+            clif_displaymessage (fd, "Game time: The game is in permanent daylight.");
         else
-            clif_displaymessage (fd, msg_table[232]);   // Game time: The game is in permanent night.
+            clif_displaymessage (fd, "Game time: The game is in permanent night.");
     }
     else if (battle_config.night_duration == 0)
         if (night_flag == 1)
         {                       // we start with night
             timer_data = get_timer (day_timer_tid);
-            sprintf (temp, msg_table[233], txt_time ((timer_data->tick - gettick ()) / 1000));  // Game time: The game is actualy in night for %s.
+            sprintf (temp, "Game time: The game is actualy in night for %s.", txt_time ((timer_data->tick - gettick ()) / 1000));
             clif_displaymessage (fd, temp);
-            clif_displaymessage (fd, msg_table[234]);   // Game time: After, the game will be in permanent daylight.
+            clif_displaymessage (fd, "Game time: After, the game will be in permanent daylight.");
         }
         else
-            clif_displaymessage (fd, msg_table[231]);   // Game time: The game is in permanent daylight.
+            clif_displaymessage (fd, "Game time: The game is in permanent daylight.");
     else if (battle_config.day_duration == 0)
         if (night_flag == 0)
         {                       // we start with day
             timer_data = get_timer (night_timer_tid);
-            sprintf (temp, msg_table[235], txt_time ((timer_data->tick - gettick ()) / 1000));  // Game time: The game is actualy in daylight for %s.
+            sprintf (temp, "Game time: The game is actualy in daylight for %s.", txt_time ((timer_data->tick - gettick ()) / 1000));
             clif_displaymessage (fd, temp);
-            clif_displaymessage (fd, msg_table[236]);   // Game time: After, the game will be in permanent night.
+            clif_displaymessage (fd, "Game time: After, the game will be in permanent night.");
         }
         else
-            clif_displaymessage (fd, msg_table[232]);   // Game time: The game is in permanent night.
+            clif_displaymessage (fd, "Game time: The game is in permanent night.");
     else
     {
         if (night_flag == 0)
         {
             timer_data = get_timer (night_timer_tid);
             timer_data2 = get_timer (day_timer_tid);
-            sprintf (temp, msg_table[235], txt_time ((timer_data->tick - gettick ()) / 1000));  // Game time: The game is actualy in daylight for %s.
+            sprintf (temp, "Game time: The game is actualy in daylight for %s.", txt_time ((timer_data->tick - gettick ()) / 1000));
             clif_displaymessage (fd, temp);
             if (timer_data->tick > timer_data2->tick)
-                sprintf (temp, msg_table[237], txt_time ((timer_data->interval - abs (timer_data->tick - timer_data2->tick)) / 1000));  // Game time: After, the game will be in night for %s.
+                sprintf (temp, "Game time: After, the game will be in night for %s.", txt_time ((timer_data->interval - abs (timer_data->tick - timer_data2->tick)) / 1000));
             else
-                sprintf (temp, msg_table[237], txt_time (abs (timer_data->tick - timer_data2->tick) / 1000));   // Game time: After, the game will be in night for %s.
+                sprintf (temp, "Game time: After, the game will be in night for %s.", txt_time (abs (timer_data->tick - timer_data2->tick) / 1000));
             clif_displaymessage (fd, temp);
-            sprintf (temp, msg_table[238], txt_time (timer_data->interval / 1000)); // Game time: A day cycle has a normal duration of %s.
+            sprintf (temp, "Game time: A day cycle has a normal duration of %s.", txt_time (timer_data->interval / 1000));
             clif_displaymessage (fd, temp);
         }
         else
         {
             timer_data = get_timer (day_timer_tid);
             timer_data2 = get_timer (night_timer_tid);
-            sprintf (temp, msg_table[233], txt_time ((timer_data->tick - gettick ()) / 1000));  // Game time: The game is actualy in night for %s.
+            sprintf (temp, "Game time: The game is actualy in night for %s.", txt_time ((timer_data->tick - gettick ()) / 1000));
             clif_displaymessage (fd, temp);
             if (timer_data->tick > timer_data2->tick)
-                sprintf (temp, msg_table[239], txt_time ((timer_data->interval - abs (timer_data->tick - timer_data2->tick)) / 1000));  // Game time: After, the game will be in daylight for %s.
+                sprintf (temp, "Game time: After, the game will be in daylight for %s.", txt_time ((timer_data->interval - abs (timer_data->tick - timer_data2->tick)) / 1000));
             else
-                sprintf (temp, msg_table[239], txt_time (abs (timer_data->tick - timer_data2->tick) / 1000));   // Game time: After, the game will be in daylight for %s.
+                sprintf (temp, "Game time: After, the game will be in daylight for %s.", txt_time (abs (timer_data->tick - timer_data2->tick) / 1000));
             clif_displaymessage (fd, temp);
-            sprintf (temp, msg_table[238], txt_time (timer_data->interval / 1000)); // Game time: A day cycle has a normal duration of %s.
+            sprintf (temp, "Game time: A day cycle has a normal duration of %s.", txt_time (timer_data->interval / 1000));
             clif_displaymessage (fd, temp);
         }
     }
@@ -6482,35 +6389,35 @@ int atcommand_chardelitem (const int fd, struct map_session_data *sd,
                         count++;
                         item_position = pc_search_inventory (pl_sd, item_id);   // for next loop
                     }
-                    sprintf (output, msg_table[113], count);    // %d item(s) removed by a GM.
+                    sprintf (output, "%d item(s) removed by a GM.", count);
                     clif_displaymessage (pl_sd->fd, output);
                     if (number == count)
-                        sprintf (output, msg_table[114], count);    // %d item(s) removed from the player.
+                        sprintf (output, "%d item(s) removed from the player.", count);
                     else
-                        sprintf (output, msg_table[115], count, count, number); // %d item(s) removed. Player had only %d on %d items.
+                        sprintf (output, "%d item(s) removed. Player had only %d on %d items.", count, count, number);
                     clif_displaymessage (fd, output);
                 }
                 else
                 {
-                    clif_displaymessage (fd, msg_table[116]);   // Character does not have the item.
+                    clif_displaymessage (fd, "Character does not have the item.");
                     return -1;
                 }
             }
             else
             {
-                clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+                clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[3]); // Character not found.
+            clif_displaymessage (fd, "Character not found.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[19]);    // Invalid item ID or name.
+        clif_displaymessage (fd, "Invalid item ID or name.");
         return -1;
     }
 
@@ -6556,24 +6463,24 @@ int atcommand_jail (const int fd, struct map_session_data *sd,
             if (pc_setpos (pl_sd, "sec_pri.gat", x, y, 3) == 0)
             {
                 pc_setsavepoint (pl_sd, "sec_pri.gat", x, y);   // Save Char Respawn Point in the jail room [Lupus]
-                clif_displaymessage (pl_sd->fd, msg_table[117]);    // GM has send you in jails.
-                clif_displaymessage (fd, msg_table[118]);   // Player warped in jails.
+                clif_displaymessage (pl_sd->fd, "GM has send you in jails.");
+                clif_displaymessage (fd, "Player warped in jails.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[1]); // Map not found.
+                clif_displaymessage (fd, "Map not found.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -6606,30 +6513,30 @@ int atcommand_unjail (const int fd, struct map_session_data *sd,
         {                       // you can jail only lower or same GM
             if (pl_sd->bl.m != map_mapname2mapid ("sec_pri.gat"))
             {
-                clif_displaymessage (fd, msg_table[119]);   // This player is not in jails.
+                clif_displaymessage (fd, "This player is not in jails.");
                 return -1;
             }
             else if (pc_setpos (pl_sd, "prontera.gat", 156, 191, 3) == 0)
             {
                 pc_setsavepoint (pl_sd, "prontera.gat", 156, 191);  // Save char respawn point in Prontera
-                clif_displaymessage (pl_sd->fd, msg_table[120]);    // GM has discharge you.
-                clif_displaymessage (fd, msg_table[121]);   // Player warped to Prontera.
+                clif_displaymessage (pl_sd->fd, "GM has discharge you.");
+                clif_displaymessage (fd, "Player warped to Prontera.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[1]); // Map not found.
+                clif_displaymessage (fd, "Map not found.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -6662,17 +6569,17 @@ int atcommand_disguise (const int fd, struct map_session_data *sd,
     {                           // monsters
         if (pc_isriding (sd))
         {                       // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-            clif_displaymessage (fd, msg_table[227]);   // Cannot wear disguise while riding a Peco.
+            clif_displaymessage (fd, "Cannot wear disguise while riding a Peco.");
             return -1;
         }
         sd->disguiseflag = 1;   // set to override items with disguise script [Valaris]
         sd->disguise = mob_id;
         pc_setpos (sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
-        clif_displaymessage (fd, msg_table[122]);   // Disguise applied.
+        clif_displaymessage (fd, "Disguise applied.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[123]);   // Monster/NPC name/id hasn't been found.
+        clif_displaymessage (fd, "Monster/NPC name/id hasn't been found.");
         return -1;
     }
 
@@ -6691,11 +6598,11 @@ int atcommand_undisguise (const int fd, struct map_session_data *sd,
         clif_clearchar (&sd->bl, 9);
         sd->disguise = 0;
         pc_setpos (sd, sd->mapname, sd->bl.x, sd->bl.y, 3);
-        clif_displaymessage (fd, msg_table[124]);   // Undisguise applied.
+        clif_displaymessage (fd, "Undisguise applied.");
     }
     else
     {
-        clif_displaymessage (fd, msg_table[125]);   // You're not disguised.
+        clif_displaymessage (fd, "You're not disguised.");
         return -1;
     }
 
@@ -6771,17 +6678,17 @@ int atcommand_ignorelist (const int fd, struct map_session_data *sd,
 
     if (sd->ignoreAll == 0)
         if (count == 0)
-            clif_displaymessage (fd, msg_table[126]);   // You accept any wisp (no wisper is refused).
+            clif_displaymessage (fd, "You accept any wisp (no wisper is refused).");
         else
         {
-            sprintf (output, msg_table[127], count);    // You accept any wisp, except thoses from %d player(s):
+            sprintf (output, "You accept any wisp, except thoses from %d player(s):", count);
             clif_displaymessage (fd, output);
         }
     else if (count == 0)
-        clif_displaymessage (fd, msg_table[128]);   // You refuse all wisps (no specifical wisper is refused).
+        clif_displaymessage (fd, "You refuse all wisps (no specifical wisper is refused).");
     else
     {
-        sprintf (output, msg_table[129], count);    // You refuse all wisps, AND refuse wisps from %d player(s):
+        sprintf (output, "You refuse all wisps, AND refuse wisps from %d player(s):", count);
         clif_displaymessage (fd, output);
     }
 
@@ -6829,22 +6736,22 @@ int atcommand_charignorelist (const int fd, struct map_session_data *sd,
         if (pl_sd->ignoreAll == 0)
             if (count == 0)
             {
-                sprintf (output, msg_table[130], pl_sd->status.name);   // '%s' accept any wisp (no wisper is refused).
+                sprintf (output, "'%s' accept any wisp (no wisper is refused).", pl_sd->status.name);
                 clif_displaymessage (fd, output);
             }
             else
             {
-                sprintf (output, msg_table[131], pl_sd->status.name, count);    // '%s' accept any wisp, except thoses from %d player(s):
+                sprintf (output, "'%s' accept any wisp, except thoses from %d player(s):", pl_sd->status.name, count);
                 clif_displaymessage (fd, output);
             }
         else if (count == 0)
         {
-            sprintf (output, msg_table[132], pl_sd->status.name);   // '%s' refuse all wisps (no specifical wisper is refused).
+            sprintf (output, "'%s' refuse all wisps (no specifical wisper is refused).", pl_sd->status.name);
             clif_displaymessage (fd, output);
         }
         else
         {
-            sprintf (output, msg_table[133], pl_sd->status.name, count);    // '%s' refuse all wisps, AND refuse wisps from %d player(s):
+            sprintf (output, "'%s' refuse all wisps, AND refuse wisps from %d player(s):", pl_sd->status.name, count);
             clif_displaymessage (fd, output);
         }
 
@@ -6859,7 +6766,7 @@ int atcommand_charignorelist (const int fd, struct map_session_data *sd,
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -6893,17 +6800,17 @@ int atcommand_inall (const int fd, struct map_session_data *sd,
         {                       // you can change wisp option only to lower or same level
             if (pl_sd->ignoreAll == 0)
             {
-                sprintf (output, msg_table[134], pl_sd->status.name);   // '%s' already accepts all wispers.
+                sprintf (output, "'%s' already accepts all wispers.", pl_sd->status.name);
                 clif_displaymessage (fd, output);
                 return -1;
             }
             else
             {
                 pl_sd->ignoreAll = 0;
-                sprintf (output, msg_table[135], pl_sd->status.name);   // '%s' now accepts all wispers.
+                sprintf (output, "'%s' now accepts all wispers.", pl_sd->status.name);
                 clif_displaymessage (fd, output);
                 // message to player
-                clif_displaymessage (pl_sd->fd, msg_table[136]);    // A GM has authorised all wispers for you.
+                clif_displaymessage (pl_sd->fd, "A GM has authorised all wispers for you.");
                 WFIFOW (pl_sd->fd, 0) = 0x0d2;  // R 00d2 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
                 WFIFOB (pl_sd->fd, 2) = 1;
                 WFIFOB (pl_sd->fd, 3) = 0;  // success
@@ -6912,13 +6819,13 @@ int atcommand_inall (const int fd, struct map_session_data *sd,
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -6952,17 +6859,17 @@ int atcommand_exall (const int fd, struct map_session_data *sd,
         {                       // you can change wisp option only to lower or same level
             if (pl_sd->ignoreAll == 1)
             {
-                sprintf (output, msg_table[137], pl_sd->status.name);   // '%s' already blocks all wispers.
+                sprintf (output, "'%s' already blocks all wispers.", pl_sd->status.name);
                 clif_displaymessage (fd, output);
                 return -1;
             }
             else
             {
                 pl_sd->ignoreAll = 1;
-                sprintf (output, msg_table[138], pl_sd->status.name);   // '%s' blocks now all wispers.
+                sprintf (output, "'%s' blocks now all wispers.", pl_sd->status.name);
                 clif_displaymessage (fd, output);
                 // message to player
-                clif_displaymessage (pl_sd->fd, msg_table[139]);    // A GM has blocked all wispers for you.
+                clif_displaymessage (pl_sd->fd, "A GM has blocked all wispers for you.");
                 WFIFOW (pl_sd->fd, 0) = 0x0d2;  // R 00d2 <type>.B <fail>.B: type: 0: deny, 1: allow, fail: 0: success, 1: fail
                 WFIFOB (pl_sd->fd, 2) = 0;
                 WFIFOB (pl_sd->fd, 3) = 0;  // success
@@ -6971,13 +6878,13 @@ int atcommand_exall (const int fd, struct map_session_data *sd,
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -7021,30 +6928,30 @@ int atcommand_chardisguise (const int fd, struct map_session_data *sd,
             {                   // monsters
                 if (pc_isriding (pl_sd))
                 {               // temporary prevention of crash caused by peco + disguise, will look into a better solution [Valaris]
-                    clif_displaymessage (fd, msg_table[228]);   // Character cannot wear disguise while riding a Peco.
+                    clif_displaymessage (fd, "Character cannot wear disguise while riding a Peco.");
                     return -1;
                 }
                 pl_sd->disguiseflag = 1;    // set to override items with disguise script [Valaris]
                 pl_sd->disguise = mob_id;
                 pc_setpos (pl_sd, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y,
                            3);
-                clif_displaymessage (fd, msg_table[140]);   // Character's disguise applied.
+                clif_displaymessage (fd, "Character's disguise applied.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[123]);   // Monster/NPC name/id hasn't been found.
+                clif_displaymessage (fd, "Monster/NPC name/id hasn't been found.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -7080,23 +6987,23 @@ int atcommand_charundisguise (const int fd, struct map_session_data *sd,
                 pl_sd->disguise = 0;
                 pc_setpos (pl_sd, pl_sd->mapname, pl_sd->bl.x, pl_sd->bl.y,
                            3);
-                clif_displaymessage (fd, msg_table[141]);   // Character's undisguise applied.
+                clif_displaymessage (fd, "Character's undisguise applied.");
             }
             else
             {
-                clif_displaymessage (fd, msg_table[142]);   // Character is not disguised.
+                clif_displaymessage (fd, "Character is not disguised.");
                 return -1;
             }
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -7126,28 +7033,28 @@ int atcommand_email (const int fd, struct map_session_data *sd,
 
     if (e_mail_check (actual_email) == 0)
     {
-        clif_displaymessage (fd, msg_table[144]);   // Invalid actual email. If you have default e-mail, give a@a.com.
+        clif_displaymessage (fd, "Invalid actual email. If you have default e-mail, type a@a.com.");   // Invalid actual email. If you have default e-mail, give a@a.com.
         return -1;
     }
     else if (e_mail_check (new_email) == 0)
     {
-        clif_displaymessage (fd, msg_table[145]);   // Invalid new email. Please enter a real e-mail.
+        clif_displaymessage (fd, "Invalid new email. Please enter a real e-mail.");
         return -1;
     }
     else if (strcasecmp (new_email, "a@a.com") == 0)
     {
-        clif_displaymessage (fd, msg_table[146]);   // New email must be a real e-mail.
+        clif_displaymessage (fd, "New email must be a real e-mail.");
         return -1;
     }
     else if (strcasecmp (actual_email, new_email) == 0)
     {
-        clif_displaymessage (fd, msg_table[147]);   // New email must be different of the actual e-mail.
+        clif_displaymessage (fd, "New email must be different of the actual e-mail.");
         return -1;
     }
     else
     {
         chrif_changeemail (sd->status.account_id, actual_email, new_email);
-        clif_displaymessage (fd, msg_table[148]);   // Information sended to login-server via char-server.
+        clif_displaymessage (fd, "Information sended to login-server via char-server.");
     }
 
     return 0;
@@ -7172,7 +7079,7 @@ int atcommand_effect (const int fd, struct map_session_data *sd,
     if (flag <= 0)
     {
         clif_specialeffect (&sd->bl, type, flag);
-        clif_displaymessage (fd, msg_table[229]);   // Your effect has changed.
+        clif_displaymessage (fd, "Your Effect Has Changed.");   // Your effect has changed.
     }
     else
     {
@@ -7182,7 +7089,7 @@ int atcommand_effect (const int fd, struct map_session_data *sd,
                 && pl_sd->state.auth)
             {
                 clif_specialeffect (&pl_sd->bl, type, flag);
-                clif_displaymessage (pl_sd->fd, msg_table[229]);    // Your effect has changed.
+                clif_displaymessage (pl_sd->fd, "Your Effect Has Changed.");    // Your effect has changed.
             }
         }
     }
@@ -7329,13 +7236,13 @@ atcommand_character_item_list (const int fd, struct map_session_data *sd,
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -7455,13 +7362,13 @@ atcommand_character_storage_list (const int fd, struct map_session_data *sd,
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -7570,13 +7477,13 @@ atcommand_character_cart_list (const int fd, struct map_session_data *sd,
         }
         else
         {
-            clif_displaymessage (fd, msg_table[81]);    // Your GM level don't authorise you to do this action on this player.
+            clif_displaymessage (fd, "Your GM level don't authorise you to do this action on this player.");
             return -1;
         }
     }
     else
     {
-        clif_displaymessage (fd, msg_table[3]); // Character not found.
+        clif_displaymessage (fd, "Character not found.");
         return -1;
     }
 
@@ -7595,9 +7502,9 @@ atcommand_killer (const int fd, struct map_session_data *sd,
     sd->special_state.killer = !sd->special_state.killer;
 
     if (sd->special_state.killer)
-        clif_displaymessage (fd, msg_table[241]);
+        clif_displaymessage (fd, "You be a killa...");
     else
-        clif_displaymessage (fd, msg_table[242]);
+        clif_displaymessage (fd, "You gonna be own3d...");
 
     return 0;
 }
@@ -7614,9 +7521,9 @@ atcommand_killable (const int fd, struct map_session_data *sd,
     sd->special_state.killable = !sd->special_state.killable;
 
     if (sd->special_state.killable)
-        clif_displaymessage (fd, msg_table[242]);
+        clif_displaymessage (fd, "You gonna be own3d...");
     else
-        clif_displaymessage (fd, msg_table[241]);
+        clif_displaymessage (fd, "You be a killa...");
 
     return 0;
 }
@@ -7658,7 +7565,7 @@ atcommand_skillon (const int fd, struct map_session_data *sd,
                    const char *command, const char *message)
 {
     map[sd->bl.m].flag.noskill = 0;
-    clif_displaymessage (fd, msg_table[244]);
+    clif_displaymessage (fd, "Map skills are on.");
     return 0;
 }
 
@@ -7672,7 +7579,7 @@ atcommand_skilloff (const int fd, struct map_session_data *sd,
                     const char *command, const char *message)
 {
     map[sd->bl.m].flag.noskill = 1;
-    clif_displaymessage (fd, msg_table[243]);
+    clif_displaymessage (fd, "Map skills are off.");
     return 0;
 }
 
@@ -7802,7 +7709,7 @@ atcommand_chareffect (const int fd, struct map_session_data *sd,
         return -1;
 
     clif_specialeffect (&pl_sd->bl, type, 0);
-    clif_displaymessage (fd, msg_table[229]);   // Your effect has changed.
+    clif_displaymessage (fd, "Your Effect Has Changed.");   // Your effect has changed.
 
     return 0;
 }
@@ -8282,7 +8189,7 @@ int atcommand_unmute (const int fd, struct map_session_data *sd,
 
 static int magic_base = TMW_MAGIC;
 #define magic_skills_nr 6
-static char *magic_skill_names[magic_skills_nr] =
+static const char *magic_skill_names[magic_skills_nr] =
     { "magic", "life", "war", "transmute", "nature", "astral" };
 
 int
@@ -8426,6 +8333,7 @@ atcommand_visible (const int fd, struct map_session_data *sd,
     return 0;
 }
 
+static
 int atcommand_jump_iterate (const int fd, struct map_session_data *sd,
                             const char *command, const char *message,
                             struct map_session_data *(*get_start) (void),
@@ -8468,7 +8376,7 @@ int atcommand_jump_iterate (const int fd, struct map_session_data *sd,
         return -1;
     }
     pc_setpos (sd, map[pl_sd->bl.m].name, pl_sd->bl.x, pl_sd->bl.y, 3);
-    sprintf (output, msg_table[4], pl_sd->status.name); // Jump to %s
+    sprintf (output, "Jump to %s", pl_sd->status.name);
     clif_displaymessage (fd, output);
 
     sd->followtarget = pl_sd->bl.id;
@@ -8546,7 +8454,7 @@ int atcommand_skillpool_info (const int fd, struct map_session_data *sd,
 
         for (i = 0; i < skill_pool_skills_size; ++i)
         {
-            char *name = skill_name (skill_pool_skills[i]);
+            const char *name = skill_name (skill_pool_skills[i]);
             int  lvl = pl_sd->status.skill[skill_pool_skills[i]].lv;
 
             if (lvl)
@@ -8719,10 +8627,10 @@ int atcommand_doomspot(const int fd, struct map_session_data *sd,
             && pc_isGM (sd) >= pc_isGM (pl_sd))
         {                       // you can doom only lower or same gm level
             pc_damage (NULL, pl_sd, pl_sd->status.hp + 1);
-            clif_displaymessage (pl_sd->fd, msg_table[61]); // The holy messenger has given judgement.
+            clif_displaymessage (pl_sd->fd, "The holy messenger has given judgement.");
         }
     }
-    clif_displaymessage (fd, msg_table[62]);    // Judgement was made.
+    clif_displaymessage (fd, "Judgement was made.");
 
     return 0;
 }
diff --git a/src/map/atcommand.hpp b/src/map/atcommand.hpp
index 824a7cf..d35cb4f 100644
--- a/src/map/atcommand.hpp
+++ b/src/map/atcommand.hpp
@@ -209,8 +209,6 @@ AtCommandType atcommand (const int level, const char *message,
                          AtCommandInfo * info);
 int  get_atcommand_level (const AtCommandType type);
 
-char *msg_txt (int msg_number); // [Yor]
-
 int  atcommand_item (const int fd, struct map_session_data *sd, const char *command, const char *message);  // [Valaris]
 int  atcommand_warp (const int fd, struct map_session_data *sd, const char *command, const char *message);  // [Yor]
 int  atcommand_spawn (const int fd, struct map_session_data *sd, const char *command, const char *message); // [Valaris]
@@ -218,9 +216,10 @@ int  atcommand_goto (const int fd, struct map_session_data *sd, const char *comm
 int  atcommand_recall (const int fd, struct map_session_data *sd, const char *command, const char *message);    // [Yor]
 
 int  atcommand_config_read (const char *cfgName);
-int  msg_config_read (const char *cfgName);
 
+__attribute__((format(printf, 2, 3)))
 void log_atcommand (struct map_session_data *sd, const char *fmt, ...);
+__attribute__((format(printf, 1, 2)))
 void gm_log (const char *fmt, ...);
 
 #endif
diff --git a/src/map/battle.cpp b/src/map/battle.cpp
index a46db13..818d77e 100644
--- a/src/map/battle.cpp
+++ b/src/map/battle.cpp
@@ -521,6 +521,7 @@ int battle_get_flee2 (struct block_list *bl)
  * 戻りは整数で1以上
  *------------------------------------------
  */
+static
 int battle_get_critical (struct block_list *bl)
 {
     int  critical = 1;
@@ -625,6 +626,7 @@ int battle_get_atk (struct block_list *bl)
  * 戻りは整数で0以上
  *------------------------------------------
  */
+static
 int battle_get_atk_ (struct block_list *bl)
 {
     nullpo_retr (0, bl);
@@ -687,6 +689,7 @@ int battle_get_atk2 (struct block_list *bl)
  * 戻りは整数で0以上
  *------------------------------------------
  */
+static
 int battle_get_atk_2 (struct block_list *bl)
 {
     nullpo_retr (0, bl);
@@ -701,6 +704,7 @@ int battle_get_atk_2 (struct block_list *bl)
  * 戻りは整数で0以上
  *------------------------------------------
  */
+static
 int battle_get_matk1 (struct block_list *bl)
 {
     struct status_change *sc_data;
@@ -727,6 +731,7 @@ int battle_get_matk1 (struct block_list *bl)
  * 戻りは整数で0以上
  *------------------------------------------
  */
+static
 int battle_get_matk2 (struct block_list *bl)
 {
     struct status_change *sc_data = battle_get_sc_data (bl);
@@ -1422,6 +1427,7 @@ struct battle_delay_damage_
     int  damage;
     int  flag;
 };
+static
 void battle_delay_damage_sub (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct battle_delay_damage_ *dat = (struct battle_delay_damage_ *) data;
@@ -1853,6 +1859,7 @@ int battle_calc_damage (struct block_list *src, struct block_list *bl,
  * 修練ダメージ
  *------------------------------------------
  */
+static
 int battle_addmastery (struct map_session_data *sd, struct block_list *target,
                        int dmg, int type)
 {
diff --git a/src/map/chat.cpp b/src/map/chat.cpp
index 0615b41..cb274f8 100644
--- a/src/map/chat.cpp
+++ b/src/map/chat.cpp
@@ -22,7 +22,7 @@ int  chat_triggerevent (struct chat_data *cd);
  *------------------------------------------
  */
 int chat_createchat (struct map_session_data *sd, int limit, int pub,
-                     char *pass, char *title, int titlelen)
+                     const char *pass, const char *title, int titlelen)
 {
     struct chat_data *cd;
 
@@ -65,7 +65,7 @@ int chat_createchat (struct map_session_data *sd, int limit, int pub,
  * 既存チャットルームに参加
  *------------------------------------------
  */
-int chat_joinchat (struct map_session_data *sd, int chatid, char *pass)
+int chat_joinchat (struct map_session_data *sd, int chatid, const char *pass)
 {
     struct chat_data *cd;
 
@@ -165,7 +165,7 @@ int chat_leavechat (struct map_session_data *sd)
  * チャットルームの持ち主を譲る
  *------------------------------------------
  */
-int chat_changechatowner (struct map_session_data *sd, char *nextownername)
+int chat_changechatowner (struct map_session_data *sd, const char *nextownername)
 {
     struct chat_data *cd;
     struct map_session_data *tmp_sd;
@@ -213,7 +213,7 @@ int chat_changechatowner (struct map_session_data *sd, char *nextownername)
  *------------------------------------------
  */
 int chat_changechatstatus (struct map_session_data *sd, int limit, int pub,
-                           char *pass, char *title, int titlelen)
+                           const char *pass, const char *title, int titlelen)
 {
     struct chat_data *cd;
 
@@ -241,7 +241,7 @@ int chat_changechatstatus (struct map_session_data *sd, int limit, int pub,
  * チャットルームから蹴り出す
  *------------------------------------------
  */
-int chat_kickchat (struct map_session_data *sd, char *kickusername)
+int chat_kickchat (struct map_session_data *sd, const char *kickusername)
 {
     struct chat_data *cd;
     int  i, kickuser;
@@ -273,7 +273,7 @@ int chat_kickchat (struct map_session_data *sd, char *kickusername)
  *------------------------------------------
  */
 int chat_createnpcchat (struct npc_data *nd, int limit, int pub, int trigger,
-                        char *title, int titlelen, const char *ev)
+                        const char *title, int titlelen, const char *ev)
 {
     struct chat_data *cd;
 
diff --git a/src/map/chat.hpp b/src/map/chat.hpp
index 3a9ccb6..fca9217 100644
--- a/src/map/chat.hpp
+++ b/src/map/chat.hpp
@@ -4,17 +4,17 @@
 
 #include "map.hpp"
 
-int  chat_createchat (struct map_session_data *, int, int, char *, char *,
+int  chat_createchat (struct map_session_data *, int, int, const char *, const char *,
                       int);
-int  chat_joinchat (struct map_session_data *, int, char *);
+int  chat_joinchat (struct map_session_data *, int, const char *);
 int  chat_leavechat (struct map_session_data *);
-int  chat_changechatowner (struct map_session_data *, char *);
-int  chat_changechatstatus (struct map_session_data *, int, int, char *,
-                            char *, int);
-int  chat_kickchat (struct map_session_data *, char *);
+int  chat_changechatowner (struct map_session_data *, const char *);
+int  chat_changechatstatus (struct map_session_data *, int, int, const char *,
+                            const char *, int);
+int  chat_kickchat (struct map_session_data *, const char *);
 
 int  chat_createnpcchat (struct npc_data *nd, int limit, int pub, int trigger,
-                         char *title, int titlelen, const char *ev);
+                         const char *title, int titlelen, const char *ev);
 int  chat_deletenpcchat (struct npc_data *nd);
 int  chat_enableevent (struct chat_data *cd);
 int  chat_disableevent (struct chat_data *cd);
diff --git a/src/map/chrif.cpp b/src/map/chrif.cpp
index 0223e67..24d5d26 100644
--- a/src/map/chrif.cpp
+++ b/src/map/chrif.cpp
@@ -133,13 +133,14 @@ int chrif_save (struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 int chrif_connect (int fd)
 {
     WFIFOW (fd, 0) = 0x2af8;
     memcpy (WFIFOP (fd, 2), userid, 24);
     memcpy (WFIFOP (fd, 26), passwd, 24);
     WFIFOL (fd, 50) = 0;
-    WFIFOL (fd, 54) = clif_getip ();
+    WFIFOL (fd, 54) = clif_getip ().s_addr;
     WFIFOW (fd, 58) = clif_getport ();  // [Valaris] thanks to fov
     WFIFOSET (fd, 60);
 
@@ -150,6 +151,7 @@ int chrif_connect (int fd)
  * マップ送信
  *------------------------------------------
  */
+static
 int chrif_sendmap (int fd)
 {
     int  i;
@@ -170,25 +172,25 @@ int chrif_sendmap (int fd)
  * マップ受信
  *------------------------------------------
  */
+static
 int chrif_recvmap (int fd)
 {
-    int  i, j, ip, port;
-    unsigned char *p = (unsigned char *) &ip;
+    int  i, j, port;
 
     if (chrif_state < 2)        // まだ準備中
         return -1;
 
-    ip = RFIFOL (fd, 4);
+    struct in_addr ip;
+    ip.s_addr = RFIFOL (fd, 4);
     port = RFIFOW (fd, 8);
     for (i = 10, j = 0; i < RFIFOW (fd, 2); i += 16, j++)
     {
-        map_setipport (RFIFOP (fd, i), ip, port);
+        map_setipport ((const char *)RFIFOP (fd, i), ip, port);
 //      if (battle_config.etc_log)
 //          printf("recv map %d %s\n", j, RFIFOP(fd,i));
     }
     if (battle_config.etc_log)
-        printf ("recv map on %d.%d.%d.%d:%d (%d maps)\n", p[0], p[1], p[2],
-                p[3], port, j);
+        printf ("recv map on %s:%d (%d maps)\n", ip2str(ip), port, j);
 
     return 0;
 }
@@ -198,7 +200,7 @@ int chrif_recvmap (int fd)
  *------------------------------------------
  */
 int chrif_changemapserver (struct map_session_data *sd, char *name, int x,
-                           int y, int ip, short port)
+                           int y, struct in_addr ip, short port)
 {
     int  i, s_ip;
 
@@ -220,7 +222,7 @@ int chrif_changemapserver (struct map_session_data *sd, char *name, int x,
     memcpy (WFIFOP (char_fd, 18), name, 16);
     WFIFOW (char_fd, 34) = x;
     WFIFOW (char_fd, 36) = y;
-    WFIFOL (char_fd, 38) = ip;
+    WFIFOL (char_fd, 38) = ip.s_addr;
     WFIFOL (char_fd, 42) = port;
     WFIFOB (char_fd, 44) = sd->status.sex;
     WFIFOL (char_fd, 45) = s_ip;
@@ -233,6 +235,7 @@ int chrif_changemapserver (struct map_session_data *sd, char *name, int x,
  * マップ鯖間移動ack
  *------------------------------------------
  */
+static
 int chrif_changemapserverack (int fd)
 {
     struct map_session_data *sd = map_id2sd (RFIFOL (fd, 2));
@@ -247,8 +250,8 @@ int chrif_changemapserverack (int fd)
         pc_authfail (sd->fd);
         return 0;
     }
-    clif_changemapserver (sd, RFIFOP (fd, 18), RFIFOW (fd, 34),
-                          RFIFOW (fd, 36), RFIFOL (fd, 38), RFIFOW (fd, 42));
+    clif_changemapserver (sd, (const char *)RFIFOP (fd, 18), RFIFOW (fd, 34),
+                          RFIFOW (fd, 36), in_addr{RFIFOL (fd, 38)}, RFIFOW (fd, 42));
 
     return 0;
 }
@@ -257,6 +260,7 @@ int chrif_changemapserverack (int fd)
  *
  *------------------------------------------
  */
+static
 int chrif_connectack (int fd)
 {
     if (RFIFOB (fd, 2))
@@ -284,6 +288,7 @@ int chrif_connectack (int fd)
  *
  *------------------------------------------
  */
+static
 int chrif_sendmapack (int fd)
 {
     if (RFIFOB (fd, 2))
@@ -465,6 +470,7 @@ int chrif_char_ask_name (int id, char *character_name, short operation_type,
  *   3: login-server offline
  *------------------------------------------
  */
+static
 int chrif_char_ask_name_answer (int fd)
 {
     int  acc;
@@ -608,6 +614,7 @@ int chrif_char_ask_name_answer (int fd)
  * End of GM change (@GM) (modified by Yor)
  *------------------------------------------
  */
+static
 int chrif_changedgm (int fd)
 {
     int  acc, level;
@@ -636,6 +643,7 @@ int chrif_changedgm (int fd)
  * 性別変化終了 (modified by Yor)
  *------------------------------------------
  */
+static
 int chrif_changedsex (int fd)
 {
     int  acc, sex, i;
@@ -736,6 +744,7 @@ int chrif_saveaccountreg2 (struct map_session_data *sd)
  * アカウント変数通知
  *------------------------------------------
  */
+static
 int chrif_accountreg2 (int fd)
 {
     int  j, p;
@@ -762,6 +771,7 @@ int chrif_accountreg2 (int fd)
  * ack from a map-server divorce request
  *------------------------------------------
  */
+static
 int chrif_divorce (int char_id, int partner_id)
 {
     struct map_session_data *sd = NULL;
@@ -808,6 +818,7 @@ int chrif_send_divorce (int char_id)
  * Disconnection of a player (account has been deleted in login-server) by [Yor]
  *------------------------------------------
  */
+static
 int chrif_accountdeletion (int fd)
 {
     int  acc;
@@ -840,6 +851,7 @@ int chrif_accountdeletion (int fd)
  * Disconnection of a player (account has been banned of has a status, from login-server) by [Yor]
  *------------------------------------------
  */
+static
 int chrif_accountban (int fd)
 {
     int  acc;
@@ -930,6 +942,7 @@ int chrif_accountban (int fd)
  * Receiving GM accounts and their levels from char-server by [Yor]
  *------------------------------------------
  */
+static
 int chrif_recvgmaccounts (int fd)
 {
     printf ("From login-server: receiving of %d GM accounts information.\n",
@@ -1092,6 +1105,7 @@ static int ladmin_itemfrob_c2 (struct block_list *bl, int source_id,
     return 0;
 }
 
+static
 int ladmin_itemfrob_c (struct block_list *bl, va_list va_args)
 {
     int  source_id = va_arg (va_args, int);
@@ -1099,6 +1113,7 @@ int ladmin_itemfrob_c (struct block_list *bl, va_list va_args)
     return ladmin_itemfrob_c2 (bl, source_id, dest_id);
 }
 
+static
 void ladmin_itemfrob (int fd)
 {
     int  source_id = RFIFOL (fd, 2);
@@ -1121,6 +1136,7 @@ void ladmin_itemfrob (int fd)
  *
  *------------------------------------------
  */
+static
 void chrif_parse (int fd)
 {
     int  packet_len, cmd;
@@ -1203,7 +1219,7 @@ void chrif_parse (int fd)
                 chrif_changemapserverack (fd);
                 break;
             case 0x2b09:
-                map_addchariddb (RFIFOL (fd, 2), RFIFOP (fd, 6));
+                map_addchariddb (RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6));
                 break;
             case 0x2b0b:
                 chrif_changedgm (fd);
@@ -1246,6 +1262,7 @@ void chrif_parse (int fd)
  * 今このmap鯖に繋がっているクライアント人数をchar鯖へ送る
  *------------------------------------------
  */
+static
 void send_users_tochar (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     int  users = 0, i;
@@ -1276,6 +1293,7 @@ void send_users_tochar (timer_id tid, tick_t tick, custom_id_t id, custom_data_t
  * char鯖との接続を確認し、もし切れていたら再度接続する
  *------------------------------------------
  */
+static
 void check_connect_char_server (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     if (char_fd <= 0 || session[char_fd] == NULL)
diff --git a/src/map/chrif.hpp b/src/map/chrif.hpp
index 5b0341e..82bfe0d 100644
--- a/src/map/chrif.hpp
+++ b/src/map/chrif.hpp
@@ -16,7 +16,7 @@ int  chrif_save (struct map_session_data *);
 int  chrif_charselectreq (struct map_session_data *);
 
 int  chrif_changemapserver (struct map_session_data *sd, char *name, int x,
-                            int y, int ip, short port);
+                            int y, struct in_addr ip, short port);
 
 int  chrif_searchcharid (int char_id);
 int  chrif_changegm (int id, const char *pass, int len);
diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index 2d6ddf1..fd22160 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -132,7 +132,7 @@ enum
 #define WFIFOPOS2(fd,pos,x0,y0,x1,y1) { WBUFPOS2(WFIFOP(fd,pos),0,x0,y0,x1,y1); }
 
 static char map_ip_str[16];
-static in_addr_t map_ip;
+static struct in_addr map_ip;
 static int map_port = 5121;
 int  map_fd;
 char talkie_mes[80];
@@ -141,10 +141,10 @@ char talkie_mes[80];
  * map鯖のip設定
  *------------------------------------------
  */
-void clif_setip (char *ip)
+void clif_setip (const char *ip)
 {
     memcpy (map_ip_str, ip, 16);
-    map_ip = inet_addr (map_ip_str);
+    map_ip.s_addr = inet_addr (map_ip_str);
 }
 
 /*==========================================
@@ -160,7 +160,7 @@ void clif_setport (int port)
  * map鯖のip読み出し
  *------------------------------------------
  */
-in_addr_t clif_getip (void)
+struct in_addr clif_getip (void)
 {
     return map_ip;
 }
@@ -232,6 +232,7 @@ static char *clif_validate_chat (struct map_session_data *sd, int type,
  * clif_sendでAREA*指定時用
  *------------------------------------------
  */
+static
 int clif_send_sub (struct block_list *bl, va_list ap)
 {
     unsigned char *buf;
@@ -305,7 +306,8 @@ int clif_send_sub (struct block_list *bl, va_list ap)
  *
  *------------------------------------------
  */
-int clif_send (unsigned char *buf, int len, struct block_list *bl, int type)
+static
+int clif_send (const uint8_t *buf, int len, struct block_list *bl, int type)
 {
     int  i;
     struct map_session_data *sd;
@@ -320,8 +322,8 @@ int clif_send (unsigned char *buf, int len, struct block_list *bl, int type)
 
         if (bl->type == BL_PC)
         {
-            struct map_session_data *sd = (struct map_session_data *) bl;
-            if (sd->status.option & OPTION_INVISIBILITY)
+            struct map_session_data *sd2 = (struct map_session_data *) bl;
+            if (sd2->status.option & OPTION_INVISIBILITY)
             {
                 // Obscure hidden GMs
 
@@ -661,7 +663,7 @@ int clif_charselectok (int id)
  *
  *------------------------------------------
  */
-static int clif_set009e (struct flooritem_data *fitem, char *buf)
+static int clif_set009e (struct flooritem_data *fitem, uint8_t *buf)
 {
     int  view;
 
@@ -690,7 +692,7 @@ static int clif_set009e (struct flooritem_data *fitem, char *buf)
  */
 int clif_dropflooritem (struct flooritem_data *fitem)
 {
-    char buf[64];
+    uint8_t buf[64];
 
     nullpo_retr (0, fitem);
 
@@ -981,7 +983,7 @@ static int clif_set007b (struct map_session_data *sd, unsigned char *buf)
  */
 int clif_npc_class_change (struct block_list *bl, int npc_class, int type)
 {
-    char buf[16];
+    uint8_t buf[16];
 
     nullpo_retr (0, bl);
 
@@ -1003,7 +1005,7 @@ int clif_npc_class_change (struct block_list *bl, int npc_class, int type)
  */
 int clif_mob_class_change (struct mob_data *md, int class_)
 {
-    char buf[16];
+    uint8_t buf[16];
     int  view = mob_get_viewclass (class_);
 
     nullpo_retr (0, md);
@@ -1430,6 +1432,7 @@ int clif_spawnmob (struct mob_data *md)
  *
  *------------------------------------------
  */
+static
 int clif_servertick (struct map_session_data *sd)
 {
     int  fd;
@@ -1499,6 +1502,7 @@ int clif_movechar (struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_quitsave (int fd, struct map_session_data *sd)
 {
     map_quit (sd);
@@ -1527,7 +1531,7 @@ void clif_setwaitclose (int fd)
  *
  *------------------------------------------
  */
-int clif_changemap (struct map_session_data *sd, char *mapname, int x, int y)
+int clif_changemap (struct map_session_data *sd, const char *mapname, int x, int y)
 {
     int  fd;
 
@@ -1551,8 +1555,8 @@ int clif_changemap (struct map_session_data *sd, char *mapname, int x, int y)
  *
  *------------------------------------------
  */
-int clif_changemapserver (struct map_session_data *sd, char *mapname, int x,
-                          int y, int ip, int port)
+int clif_changemapserver (struct map_session_data *sd, const char *mapname, int x,
+                          int y, struct in_addr ip, int port)
 {
     int  fd;
 
@@ -1563,7 +1567,7 @@ int clif_changemapserver (struct map_session_data *sd, char *mapname, int x,
     memcpy (WFIFOP (fd, 2), mapname, 16);
     WFIFOW (fd, 18) = x;
     WFIFOW (fd, 20) = y;
-    WFIFOL (fd, 22) = ip;
+    WFIFOL (fd, 22) = ip.s_addr;
     WFIFOW (fd, 26) = port;
     WFIFOSET (fd, packet_len_table[0x92]);
 
@@ -1576,7 +1580,7 @@ int clif_changemapserver (struct map_session_data *sd, char *mapname, int x,
  */
 int clif_fixpos (struct block_list *bl)
 {
-    char buf[16];
+    uint8_t buf[16];
 
     nullpo_retr (0, bl);
 
@@ -1679,7 +1683,7 @@ int clif_selllist (struct map_session_data *sd)
  *
  *------------------------------------------
  */
-int clif_scriptmes (struct map_session_data *sd, int npcid, char *mes)
+int clif_scriptmes (struct map_session_data *sd, int npcid, const char *mes)
 {
     int  fd;
 
@@ -1689,7 +1693,7 @@ int clif_scriptmes (struct map_session_data *sd, int npcid, char *mes)
     WFIFOW (fd, 0) = 0xb4;
     WFIFOW (fd, 2) = strlen (mes) + 9;
     WFIFOL (fd, 4) = npcid;
-    strcpy (WFIFOP (fd, 8), mes);
+    strcpy ((char *)WFIFOP (fd, 8), mes);
     WFIFOSET (fd, WFIFOW (fd, 2));
 
     return 0;
@@ -1735,7 +1739,7 @@ int clif_scriptclose (struct map_session_data *sd, int npcid)
  *
  *------------------------------------------
  */
-int clif_scriptmenu (struct map_session_data *sd, int npcid, char *mes)
+int clif_scriptmenu (struct map_session_data *sd, int npcid, const char *mes)
 {
     int  fd;
 
@@ -1745,7 +1749,7 @@ int clif_scriptmenu (struct map_session_data *sd, int npcid, char *mes)
     WFIFOW (fd, 0) = 0xb7;
     WFIFOW (fd, 2) = strlen (mes) + 8;
     WFIFOL (fd, 4) = npcid;
-    strcpy (WFIFOP (fd, 8), mes);
+    strcpy ((char *)WFIFOP (fd, 8), mes);
     WFIFOSET (fd, WFIFOW (fd, 2));
 
     return 0;
@@ -1815,7 +1819,7 @@ int clif_viewpoint (struct map_session_data *sd, int npc_id, int type, int x,
  *
  *------------------------------------------
  */
-int clif_cutin (struct map_session_data *sd, char *image, int type)
+int clif_cutin (struct map_session_data *sd, const char *image, int type)
 {
     int  fd;
 
@@ -2682,6 +2686,7 @@ int clif_changelook_towards (struct block_list *bl, int type, int val,
  *
  *------------------------------------------
  */
+static
 int clif_initialstatus (struct map_session_data *sd)
 {
     int  fd;
@@ -2844,7 +2849,7 @@ int clif_unequipitemack (struct map_session_data *sd, int n, int pos, int ok)
  */
 int clif_misceffect (struct block_list *bl, int type)
 {
-    char buf[32];
+    uint8_t buf[32];
 
     nullpo_retr (0, bl);
 
@@ -2863,7 +2868,7 @@ int clif_misceffect (struct block_list *bl, int type)
  */
 int clif_changeoption (struct block_list *bl)
 {
-    char buf[32];
+    uint8_t buf[32];
     short option;
     struct status_change *sc_data;
     static const int omask[] = { 0x10, 0x20 };
@@ -2933,7 +2938,7 @@ int clif_useitemack (struct map_session_data *sd, int index, int amount,
     }
     else
     {
-        char buf[32];
+        uint8_t buf[32];
 
         WBUFW (buf, 0) = 0x1c8;
         WBUFW (buf, 2) = index + 2;
@@ -2975,7 +2980,7 @@ int clif_createchat (struct map_session_data *sd, int fail)
  */
 int clif_dispchat (struct chat_data *cd, int fd)
 {
-    char buf[128];              // 最大title(60バイト)+17
+    uint8_t buf[128];              // 最大title(60バイト)+17
 
     if (cd == NULL || *cd->owner == NULL)
         return 1;
@@ -2987,7 +2992,7 @@ int clif_dispchat (struct chat_data *cd, int fd)
     WBUFW (buf, 12) = cd->limit;
     WBUFW (buf, 14) = cd->users;
     WBUFB (buf, 16) = cd->pub;
-    strcpy (WBUFP (buf, 17), cd->title);
+    strcpy ((char *)WBUFP (buf, 17), cd->title);
     if (fd)
     {
         memcpy (WFIFOP (fd, 0), buf, WBUFW (buf, 2));
@@ -3008,7 +3013,7 @@ int clif_dispchat (struct chat_data *cd, int fd)
  */
 int clif_changechatstatus (struct chat_data *cd)
 {
-    char buf[128];              // 最大title(60バイト)+17
+    uint8_t buf[128];              // 最大title(60バイト)+17
 
     if (cd == NULL || cd->usersd[0] == NULL)
         return 1;
@@ -3020,7 +3025,7 @@ int clif_changechatstatus (struct chat_data *cd)
     WBUFW (buf, 12) = cd->limit;
     WBUFW (buf, 14) = cd->users;
     WBUFB (buf, 16) = cd->pub;
-    strcpy (WBUFP (buf, 17), cd->title);
+    strcpy ((char *)WBUFP (buf, 17), cd->title);
     clif_send (buf, WBUFW (buf, 2), &cd->usersd[0]->bl, CHAT);
 
     return 0;
@@ -3032,7 +3037,7 @@ int clif_changechatstatus (struct chat_data *cd)
  */
 int clif_clearchat (struct chat_data *cd, int fd)
 {
-    char buf[32];
+    uint8_t buf[32];
 
     nullpo_retr (0, cd);
 
@@ -3102,7 +3107,7 @@ int clif_joinchatok (struct map_session_data *sd, struct chat_data *cd)
  */
 int clif_addchat (struct chat_data *cd, struct map_session_data *sd)
 {
-    char buf[32];
+    uint8_t buf[32];
 
     nullpo_retr (0, sd);
     nullpo_retr (0, cd);
@@ -3121,7 +3126,7 @@ int clif_addchat (struct chat_data *cd, struct map_session_data *sd)
  */
 int clif_changechatowner (struct chat_data *cd, struct map_session_data *sd)
 {
-    char buf[64];
+    uint8_t buf[64];
 
     nullpo_retr (0, sd);
     nullpo_retr (0, cd);
@@ -3144,7 +3149,7 @@ int clif_changechatowner (struct chat_data *cd, struct map_session_data *sd)
  */
 int clif_leavechat (struct chat_data *cd, struct map_session_data *sd)
 {
-    char buf[32];
+    uint8_t buf[32];
 
     nullpo_retr (0, sd);
     nullpo_retr (0, cd);
@@ -3163,7 +3168,7 @@ int clif_leavechat (struct chat_data *cd, struct map_session_data *sd)
  * 取り引き要請受け
  *------------------------------------------
  */
-int clif_traderequest (struct map_session_data *sd, char *name)
+int clif_traderequest (struct map_session_data *sd, const char *name)
 {
     int  fd;
 
@@ -3171,7 +3176,7 @@ int clif_traderequest (struct map_session_data *sd, char *name)
 
     fd = sd->fd;
     WFIFOW (fd, 0) = 0xe5;
-    strcpy (WFIFOP (fd, 2), name);
+    strcpy ((char *)WFIFOP (fd, 2), name);
     WFIFOSET (fd, packet_len_table[0xe5]);
 
     return 0;
@@ -3575,6 +3580,7 @@ clif_changelook_accessories (struct block_list *bl,
  * PC表示
  *------------------------------------------
  */
+static
 void clif_getareachar_pc (struct map_session_data *sd,
                           struct map_session_data *dstsd)
 {
@@ -3624,6 +3630,7 @@ void clif_getareachar_pc (struct map_session_data *sd,
  * NPC表示
  *------------------------------------------
  */
+static
 void clif_getareachar_npc (struct map_session_data *sd, struct npc_data *nd)
 {
     int  len;
@@ -3770,6 +3777,7 @@ int clif_damage (struct block_list *src, struct block_list *dst,
  *
  *------------------------------------------
  */
+static
 void clif_getareachar_mob (struct map_session_data *sd, struct mob_data *md)
 {
     int  len;
@@ -3795,6 +3803,7 @@ void clif_getareachar_mob (struct map_session_data *sd, struct mob_data *md)
  *
  *------------------------------------------
  */
+static
 void clif_getareachar_item (struct map_session_data *sd,
                             struct flooritem_data *fitem)
 {
@@ -3825,6 +3834,7 @@ void clif_getareachar_item (struct map_session_data *sd,
  * 場所スキルエフェクトが視界に入る
  *------------------------------------------
  */
+static
 int clif_getareachar_skillunit (struct map_session_data *sd,
                                 struct skill_unit *unit)
 {
@@ -3886,6 +3896,7 @@ int clif_getareachar_skillunit (struct map_session_data *sd,
  * 場所スキルエフェクトが視界から消える
  *------------------------------------------
  */
+static
 int clif_clearchar_skillunit (struct skill_unit *unit, int fd)
 {
     nullpo_retr (0, unit);
@@ -3905,7 +3916,7 @@ int clif_clearchar_skillunit (struct skill_unit *unit, int fd)
  */
 int clif_01ac (struct block_list *bl)
 {
-    char buf[32];
+    uint8_t buf[32];
 
     nullpo_retr (0, bl);
 
@@ -3920,6 +3931,7 @@ int clif_01ac (struct block_list *bl)
  *
  *------------------------------------------
  */
+static
 int clif_getareachar (struct block_list *bl, va_list ap)
 {
     struct map_session_data *sd;
@@ -4587,7 +4599,7 @@ int clif_status_change (struct block_list *bl, int type, int flag)
  * Send message (modified by [Yor])
  *------------------------------------------
  */
-int clif_displaymessage (const int fd, char *mes)
+int clif_displaymessage (int fd, const char *mes)
 {
     int  len_mes = strlen (mes);
 
@@ -4606,7 +4618,7 @@ int clif_displaymessage (const int fd, char *mes)
  * 天の声を送信する
  *------------------------------------------
  */
-int clif_GMmessage (struct block_list *bl, char *mes, int len, int flag)
+int clif_GMmessage (struct block_list *bl, const char *mes, int len, int flag)
 {
     unsigned char lbuf[255];
     unsigned char *buf =
@@ -4703,7 +4715,7 @@ int clif_pvpset (struct map_session_data *sd, int pvprank, int pvpnum,
     }
     else
     {
-        char buf[32];
+        uint8_t buf[32];
 
         WBUFW (buf, 0) = 0x19a;
         WBUFL (buf, 2) = sd->bl.id;
@@ -4726,12 +4738,12 @@ int clif_pvpset (struct map_session_data *sd, int pvprank, int pvpnum,
  *
  *------------------------------------------
  */
-int clif_send0199 (int map, int type)
+int clif_send0199 (int m, int type)
 {
     struct block_list bl;
-    char buf[16];
+    uint8_t buf[16];
 
-    bl.m = map;
+    bl.m = m;
     WBUFW (buf, 0) = 0x199;
     WBUFW (buf, 2) = type;
     clif_send (buf, packet_len_table[0x199], &bl, ALL_SAMEMAP);
@@ -4759,7 +4771,7 @@ int clif_refine (int fd, struct map_session_data *sd, int fail, int index,
  * Wisp/page is transmitted to the destination player
  *------------------------------------------
  */
-int clif_wis_message (int fd, char *nick, char *mes, int mes_len)   // R 0097 <len>.w <nick>.24B <message>.?B
+int clif_wis_message (int fd, const char *nick, const char *mes, int mes_len)   // R 0097 <len>.w <nick>.24B <message>.?B
 {
     WFIFOW (fd, 0) = 0x97;
     WFIFOW (fd, 2) = mes_len + 24 + 4;
@@ -5310,7 +5322,7 @@ int clif_party_invite (struct map_session_data *sd,
  *  4 The character is in the same party.
  *------------------------------------------
  */
-int clif_party_inviteack (struct map_session_data *sd, char *nick, int flag)
+int clif_party_inviteack (struct map_session_data *sd, const char *nick, int flag)
 {
     int  fd;
 
@@ -5366,7 +5378,7 @@ int clif_party_option (struct party *p, struct map_session_data *sd, int flag)
  *------------------------------------------
  */
 int clif_party_leaved (struct party *p, struct map_session_data *sd,
-                       int account_id, char *name, int flag)
+                       int account_id, const char *name, int flag)
 {
     unsigned char buf[64];
     int  i;
@@ -5399,7 +5411,7 @@ int clif_party_leaved (struct party *p, struct map_session_data *sd,
  * パーティメッセージ送信
  *------------------------------------------
  */
-int clif_party_message (struct party *p, int account_id, char *mes, int len)
+int clif_party_message (struct party *p, int account_id, const char *mes, int len)
 {
     struct map_session_data *sd;
     int  i;
@@ -5670,7 +5682,7 @@ int clif_bladestop (struct block_list *src, struct block_list *dst, int boolean)
 int clif_changemapcell (int m, int x, int y, int cell_type, int type)
 {
     struct block_list bl;
-    char buf[32];
+    uint8_t buf[32];
 
     bl.m = m;
     bl.x = x;
@@ -5821,6 +5833,7 @@ int clif_guild_memberlogin_notice (struct guild *g, int idx, int flag)
  * ギルドマスター通知(14dへの応答)
  *------------------------------------------
  */
+static
 int clif_guild_masterormember (struct map_session_data *sd)
 {
     int  type = 0x57, fd;
@@ -5955,7 +5968,7 @@ int clif_guild_allianceinfo (struct map_session_data *sd)
     WFIFOW (fd, 0) = 0x14c;
     for (i = c = 0; i < MAX_GUILDALLIANCE; i++)
     {
-        struct guild_alliance *a = &g->alliance[i];
+        GuildAlliance *a = &g->alliance[i];
         if (a->guild_id > 0)
         {
             WFIFOL (fd, c * 32 + 4) = a->opposition;
@@ -6015,6 +6028,7 @@ int clif_guild_memberlist (struct map_session_data *sd)
  * ギルド役職名リスト
  *------------------------------------------
  */
+static
 int clif_guild_positionnamelist (struct map_session_data *sd)
 {
     int  i, fd;
@@ -6041,6 +6055,7 @@ int clif_guild_positionnamelist (struct map_session_data *sd)
  * ギルド役職情報リスト
  *------------------------------------------
  */
+static
 int clif_guild_positioninfolist (struct map_session_data *sd)
 {
     int  i, fd;
@@ -6272,6 +6287,7 @@ int clif_guild_explusion (struct map_session_data *sd, const char *name,
  * ギルド追放メンバリスト
  *------------------------------------------
  */
+static
 int clif_guild_explusionlist (struct map_session_data *sd)
 {
     int  fd;
@@ -6287,7 +6303,7 @@ int clif_guild_explusionlist (struct map_session_data *sd)
     WFIFOW (fd, 0) = 0x163;
     for (i = c = 0; i < MAX_GUILDEXPLUSION; i++)
     {
-        struct guild_explusion *e = &g->explusion[i];
+        GuildExpulsion *e = &g->explusion[i];
         if (e->account_id > 0)
         {
             memcpy (WFIFOP (fd, c * 88 + 4), e->name, 24);
@@ -6490,7 +6506,7 @@ static void clif_emotion_towards (struct block_list *bl,
  * トーキーボックス
  *------------------------------------------
  */
-void clif_talkiebox (struct block_list *bl, char *talkie)
+void clif_talkiebox (struct block_list *bl, const char *talkie)
 {
     unsigned char buf[86];
 
@@ -6563,7 +6579,7 @@ void clif_sitting (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
-int clif_disp_onlyself (struct map_session_data *sd, char *mes, int len)
+int clif_disp_onlyself (struct map_session_data *sd, const char *mes, int len)
 {
     unsigned char lbuf[255];
     unsigned char *buf =
@@ -6620,6 +6636,7 @@ int clif_GM_kick (struct map_session_data *sd, struct map_session_data *tsd,
  * Wis拒否許可応答
  *------------------------------------------
  */
+static
 int clif_wisexin (struct map_session_data *sd, int type, int flag)
 {
     int  fd;
@@ -6639,6 +6656,7 @@ int clif_wisexin (struct map_session_data *sd, int type, int flag)
  * Wis全拒否許可応答
  *------------------------------------------
  */
+static
 int clif_wisall (struct map_session_data *sd, int type, int flag)
 {
     int  fd;
@@ -6659,7 +6677,7 @@ int clif_wisall (struct map_session_data *sd, int type, int flag)
  *------------------------------------------
  */
 void clif_soundeffect (struct map_session_data *sd, struct block_list *bl,
-                       char *name, int type)
+                       const char *name, int type)
 {
     int  fd;
 
@@ -6719,6 +6737,7 @@ int clif_specialeffect (struct block_list *bl, int type, int flag)
  *
  *------------------------------------------
  */
+static
 void clif_parse_WantToConnection (int fd, struct map_session_data *sd)
 {
     struct map_session_data *old_sd;
@@ -6772,6 +6791,7 @@ void clif_parse_WantToConnection (int fd, struct map_session_data *sd)
  * map侵入時に必要なデータを全て送りつける
  *------------------------------------------
  */
+static
 void clif_parse_LoadEndAck (int fd, struct map_session_data *sd)
 {
 //  struct item_data* item;
@@ -6928,6 +6948,7 @@ void clif_parse_LoadEndAck (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_TickSend (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -6941,6 +6962,7 @@ void clif_parse_TickSend (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_WalkToXY (int fd, struct map_session_data *sd)
 {
     int  x, y;
@@ -7033,6 +7055,7 @@ void clif_parse_QuitGame (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_GetCharNameRequest (int fd, struct map_session_data *sd)
 {
     struct block_list *bl;
@@ -7063,7 +7086,7 @@ void clif_parse_GetCharNameRequest (int fd, struct map_session_data *sd)
             struct guild *g = NULL;
             struct party *p = NULL;
 
-            char *guild_name = "", *guild_pos = "", *party_name = "";
+            const char *guild_name = "", *guild_pos = "", *party_name = "";
 
             int send = 0;
 
@@ -7105,7 +7128,7 @@ void clif_parse_GetCharNameRequest (int fd, struct map_session_data *sd)
 
             if (pc_isGM(sd) >= battle_config.hack_info_GM_level)
             {
-                in_addr_t ip = ssd->ip;
+                struct in_addr ip = ssd->ip;
                 WFIFOW (fd, 0) = 0x20C;
 
                 // Mask the IP using the char-server password
@@ -7113,7 +7136,7 @@ void clif_parse_GetCharNameRequest (int fd, struct map_session_data *sd)
                     ip = MD5_ip(chrif_getpasswd (), ssd->ip);
 
                 WFIFOL (fd, 2) = account_id;
-                WFIFOL (fd, 6) = ip;
+                WFIFOL (fd, 6) = ip.s_addr;
                 WFIFOSET (fd, packet_len_table[0x20C]);
              }
 
@@ -7122,7 +7145,7 @@ void clif_parse_GetCharNameRequest (int fd, struct map_session_data *sd)
         case BL_NPC:
             memcpy (WFIFOP (fd, 6), ((struct npc_data *) bl)->name, 24);
             {
-                char *start = WFIFOP (fd, 6);
+                char *start = (char *)WFIFOP (fd, 6);
                 char *end = strchr (start, '#');    // [fate] elim hashed out/invisible names for the client
                 if (end)
                     while (*end)
@@ -7159,10 +7182,12 @@ void clif_parse_GetCharNameRequest (int fd, struct map_session_data *sd)
  * (S 008c <len>.w <message>.?B)
  *------------------------------------------
  */
+static
 void clif_parse_GlobalMessage (int fd, struct map_session_data *sd)
 {
     int msg_len = RFIFOW (fd, 2) - 4; /* Header (2) + length (2). */
     size_t message_len = 0;
+    // sometimes uint8_t
     char *buf = NULL;
     char *message = NULL;   /* The message text only. */
 
@@ -7170,8 +7195,7 @@ void clif_parse_GlobalMessage (int fd, struct map_session_data *sd)
 
     if (!(buf = clif_validate_chat (sd, 2, &message, &message_len)))
     {
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -7189,8 +7213,7 @@ void clif_parse_GlobalMessage (int fd, struct map_session_data *sd)
         if (tmw_CheckChatSpam (sd, message))
         {
             free (buf);
-            /* "Your message could not be sent." */
-            clif_displaymessage (fd, msg_txt (505));
+            clif_displaymessage (fd, "Your message could not be sent.");
             return;
         }
 
@@ -7199,7 +7222,8 @@ void clif_parse_GlobalMessage (int fd, struct map_session_data *sd)
         WBUFW (buf, 2) = msg_len + 8;   /* Header (2) + length (2) + ID (4). */
         WBUFL (buf, 4) = sd->bl.id;
 
-        clif_send (buf, msg_len + 8, &sd->bl,
+        // evil multiuse buffer!
+        clif_send ((const uint8_t *)buf, msg_len + 8, &sd->bl,
                    sd->chatID ? CHAT_WOS : AREA_CHAT_WOC);
     }
 
@@ -7212,7 +7236,7 @@ void clif_parse_GlobalMessage (int fd, struct map_session_data *sd)
     return;
 }
 
-int clif_message (struct block_list *bl, char *msg)
+int clif_message (struct block_list *bl, const char *msg)
 {
     unsigned short msg_len = strlen (msg) + 1;
     unsigned char buf[512];
@@ -7236,6 +7260,7 @@ int clif_message (struct block_list *bl, char *msg)
  *
  *------------------------------------------
  */
+static
 void clif_parse_MapMove (int fd, struct map_session_data *sd)
 {
 // /m /mapmove (as @rura GM command)
@@ -7264,6 +7289,7 @@ void clif_parse_MapMove (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_ChangeDir (int fd, struct map_session_data *sd)
 {
     unsigned char buf[64];
@@ -7294,6 +7320,7 @@ void clif_parse_ChangeDir (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_Emotion (int fd, struct map_session_data *sd)
 {
     unsigned char buf[64];
@@ -7316,6 +7343,7 @@ void clif_parse_Emotion (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_HowManyConnections (int fd, struct map_session_data *sd)
 {
     WFIFOW (fd, 0) = 0xc2;
@@ -7327,6 +7355,7 @@ void clif_parse_HowManyConnections (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_ActionRequest (int fd, struct map_session_data *sd)
 {
     unsigned int tick;
@@ -7397,6 +7426,7 @@ void clif_parse_ActionRequest (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_Restart (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7445,6 +7475,7 @@ void clif_parse_Restart (int fd, struct map_session_data *sd)
  * [remoitnane]
  *------------------------------------------
  */
+static
 void clif_parse_Wis (int fd, struct map_session_data *sd)
 {
     size_t message_len = 0;
@@ -7456,8 +7487,7 @@ void clif_parse_Wis (int fd, struct map_session_data *sd)
 
     if (!(buf = clif_validate_chat (sd, 1, &message, &message_len)))
     {
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -7473,8 +7503,7 @@ void clif_parse_Wis (int fd, struct map_session_data *sd)
     if (tmw_CheckChatSpam (sd, message))
     {
         free (buf);
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -7484,16 +7513,15 @@ void clif_parse_Wis (int fd, struct map_session_data *sd)
      * conflict (for instance, "Test" versus "test"), the char-server must
      * settle the discrepancy.
      */
-    if (!(dstsd = map_nick2sd (RFIFOP (fd, 4)))
-            || strcmp (dstsd->status.name, RFIFOP (fd, 4)) != 0)
-        intif_wis_message (sd, RFIFOP (fd, 4), message,  RFIFOW (fd, 2) - 28);
+    if (!(dstsd = map_nick2sd ((const char *)RFIFOP (fd, 4)))
+            || strcmp (dstsd->status.name, (const char *)RFIFOP (fd, 4)) != 0)
+        intif_wis_message (sd, (const char *)RFIFOP (fd, 4), message,  RFIFOW (fd, 2) - 28);
     else
     {
         /* Refuse messages addressed to self. */
         if (dstsd->fd == fd)
         {
-            /* "You cannot page yourself." */
-            char *mes = msg_txt (504);
+            const char *mes = "You cannot page yourself.";
             clif_wis_message (fd, wisp_server_name, mes, strlen (mes) + 1);
         }
         else
@@ -7535,6 +7563,7 @@ void clif_parse_Wis (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_GMmessage (int fd, struct map_session_data *sd)
 {
     char m[512];
@@ -7544,7 +7573,7 @@ void clif_parse_GMmessage (int fd, struct map_session_data *sd)
     if ((battle_config.atc_gmonly == 0 || pc_isGM (sd)) &&
         (pc_isGM (sd) >= get_atcommand_level (AtCommand_Broadcast)))
     {
-        strncpy (m, RFIFOP (fd, 4), RFIFOW (fd, 2) - 4);
+        strncpy (m, (const char *)RFIFOP (fd, 4), RFIFOW (fd, 2) - 4);
         m[RFIFOW (fd, 2) - 4] = 0;
         log_atcommand (sd, "/announce %s", m);
 
@@ -7559,6 +7588,7 @@ void clif_parse_GMmessage (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_TakeItem (int fd, struct map_session_data *sd)
 {
     struct flooritem_data *fitem;
@@ -7599,6 +7629,7 @@ void clif_parse_TakeItem (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_DropItem (int fd, struct map_session_data *sd)
 {
     int  item_index, item_amount;
@@ -7634,6 +7665,7 @@ void clif_parse_DropItem (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_UseItem (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7660,6 +7692,7 @@ void clif_parse_UseItem (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_EquipItem (int fd, struct map_session_data *sd)
 {
     int  index;
@@ -7700,6 +7733,7 @@ void clif_parse_EquipItem (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_UnequipItem (int fd, struct map_session_data *sd)
 {
     int  index;
@@ -7732,6 +7766,7 @@ void clif_parse_UnequipItem (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcClicked (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7750,6 +7785,7 @@ void clif_parse_NpcClicked (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcBuySellSelected (int fd, struct map_session_data *sd)
 {
     npc_buysellsel (sd, RFIFOL (fd, 2), RFIFOB (fd, 6));
@@ -7759,6 +7795,7 @@ void clif_parse_NpcBuySellSelected (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcBuyListSend (int fd, struct map_session_data *sd)
 {
     int  fail = 0, n;
@@ -7778,6 +7815,7 @@ void clif_parse_NpcBuyListSend (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcSellListSend (int fd, struct map_session_data *sd)
 {
     int  fail = 0, n;
@@ -7797,53 +7835,59 @@ void clif_parse_NpcSellListSend (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_CreateChatRoom (int fd, struct map_session_data *sd)
 {
-    chat_createchat (sd, RFIFOW (fd, 4), RFIFOB (fd, 6), RFIFOP (fd, 7),
-                     RFIFOP (fd, 15), RFIFOW (fd, 2) - 15);
+    chat_createchat (sd, RFIFOW (fd, 4), RFIFOB (fd, 6), (const char *)RFIFOP (fd, 7),
+                     (const char *)RFIFOP (fd, 15), RFIFOW (fd, 2) - 15);
 }
 
 /*==========================================
  *
  *------------------------------------------
  */
+static
 void clif_parse_ChatAddMember (int fd, struct map_session_data *sd)
 {
-    chat_joinchat (sd, RFIFOL (fd, 2), RFIFOP (fd, 6));
+    chat_joinchat (sd, RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6));
 }
 
 /*==========================================
  *
  *------------------------------------------
  */
+static
 void clif_parse_ChatRoomStatusChange (int fd, struct map_session_data *sd)
 {
-    chat_changechatstatus (sd, RFIFOW (fd, 4), RFIFOB (fd, 6), RFIFOP (fd, 7),
-                           RFIFOP (fd, 15), RFIFOW (fd, 2) - 15);
+    chat_changechatstatus (sd, RFIFOW (fd, 4), RFIFOB (fd, 6), (const char *)RFIFOP (fd, 7),
+                           (const char *)RFIFOP (fd, 15), RFIFOW (fd, 2) - 15);
 }
 
 /*==========================================
  *
  *------------------------------------------
  */
+static
 void clif_parse_ChangeChatOwner (int fd, struct map_session_data *sd)
 {
-    chat_changechatowner (sd, RFIFOP (fd, 6));
+    chat_changechatowner (sd, (const char *)RFIFOP (fd, 6));
 }
 
 /*==========================================
  *
  *------------------------------------------
  */
+static
 void clif_parse_KickFromChat (int fd, struct map_session_data *sd)
 {
-    chat_kickchat (sd, RFIFOP (fd, 2));
+    chat_kickchat (sd, (const char *)RFIFOP (fd, 2));
 }
 
 /*==========================================
  *
  *------------------------------------------
  */
+static
 void clif_parse_ChatLeave (int fd, struct map_session_data *sd)
 {
     chat_leavechat (sd);
@@ -7853,6 +7897,7 @@ void clif_parse_ChatLeave (int fd, struct map_session_data *sd)
  * 取引要請を相手に送る
  *------------------------------------------
  */
+static
 void clif_parse_TradeRequest (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7870,6 +7915,7 @@ void clif_parse_TradeRequest (int fd, struct map_session_data *sd)
  * 取引要請
  *------------------------------------------
  */
+static
 void clif_parse_TradeAck (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7881,6 +7927,7 @@ void clif_parse_TradeAck (int fd, struct map_session_data *sd)
  * アイテム追加
  *------------------------------------------
  */
+static
 void clif_parse_TradeAddItem (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7892,6 +7939,7 @@ void clif_parse_TradeAddItem (int fd, struct map_session_data *sd)
  * アイテム追加完了(ok押し)
  *------------------------------------------
  */
+static
 void clif_parse_TradeOk (int fd, struct map_session_data *sd)
 {
     trade_tradeok (sd);
@@ -7901,6 +7949,7 @@ void clif_parse_TradeOk (int fd, struct map_session_data *sd)
  * 取引キャンセル
  *------------------------------------------
  */
+static
 void clif_parse_TradeCansel (int fd, struct map_session_data *sd)
 {
     trade_tradecancel (sd);
@@ -7910,6 +7959,7 @@ void clif_parse_TradeCansel (int fd, struct map_session_data *sd)
  * 取引許諾(trade押し)
  *------------------------------------------
  */
+static
 void clif_parse_TradeCommit (int fd, struct map_session_data *sd)
 {
     trade_tradecommit (sd);
@@ -7919,6 +7969,7 @@ void clif_parse_TradeCommit (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_StopAttack (int fd, struct map_session_data *sd)
 {
     pc_stopattack (sd);
@@ -7928,6 +7979,7 @@ void clif_parse_StopAttack (int fd, struct map_session_data *sd)
  * カートへアイテムを移す
  *------------------------------------------
  */
+static
 void clif_parse_PutItemToCart (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7941,6 +7993,7 @@ void clif_parse_PutItemToCart (int fd, struct map_session_data *sd)
  * カートからアイテムを出す
  *------------------------------------------
  */
+static
 void clif_parse_GetItemFromCart (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -7954,6 +8007,7 @@ void clif_parse_GetItemFromCart (int fd, struct map_session_data *sd)
  * 付属品(鷹,ペコ,カート)をはずす
  *------------------------------------------
  */
+static
 void clif_parse_RemoveOption (int fd, struct map_session_data *sd)
 {
     if (pc_isriding (sd))
@@ -7978,6 +8032,7 @@ void clif_parse_RemoveOption (int fd, struct map_session_data *sd)
  * チェンジカート
  *------------------------------------------
  */
+static
 void clif_parse_ChangeCart (int fd, struct map_session_data *sd)
 {
     pc_setcart (sd, RFIFOW (fd, 2));
@@ -7987,6 +8042,7 @@ void clif_parse_ChangeCart (int fd, struct map_session_data *sd)
  * ステータスアップ
  *------------------------------------------
  */
+static
 void clif_parse_StatusUp (int fd, struct map_session_data *sd)
 {
     pc_statusup (sd, RFIFOW (fd, 2));
@@ -7996,6 +8052,7 @@ void clif_parse_StatusUp (int fd, struct map_session_data *sd)
  * スキルレベルアップ
  *------------------------------------------
  */
+static
 void clif_parse_SkillUp (int fd, struct map_session_data *sd)
 {
     pc_skillup (sd, RFIFOW (fd, 2));
@@ -8005,6 +8062,7 @@ void clif_parse_SkillUp (int fd, struct map_session_data *sd)
  * スキル使用(ID指定)
  *------------------------------------------
  */
+static
 void clif_parse_UseSkillToId (int fd, struct map_session_data *sd)
 {
     int  skillnum, skilllv, lv, target_id;
@@ -8082,6 +8140,7 @@ void clif_parse_UseSkillToId (int fd, struct map_session_data *sd)
  * スキル使用(場所指定)
  *------------------------------------------
  */
+static
 void clif_parse_UseSkillToPos (int fd, struct map_session_data *sd)
 {
     int  skillnum, skilllv, lv, x, y;
@@ -8152,6 +8211,7 @@ void clif_parse_UseSkillToPos (int fd, struct map_session_data *sd)
  * スキル使用(map指定)
  *------------------------------------------
  */
+static
 void clif_parse_UseSkillMap (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8172,13 +8232,14 @@ void clif_parse_UseSkillMap (int fd, struct map_session_data *sd)
     if (sd->invincible_timer != -1)
         pc_delinvincibletimer (sd);
 
-    skill_castend_map (sd, RFIFOW (fd, 2), RFIFOP (fd, 4));
+    skill_castend_map (sd, RFIFOW (fd, 2), (const char *)RFIFOP (fd, 4));
 }
 
 /*==========================================
  * メモ要求
  *------------------------------------------
  */
+static
 void clif_parse_RequestMemo (int fd, struct map_session_data *sd)
 {
     pc_memo (sd, -1);
@@ -8188,6 +8249,7 @@ void clif_parse_RequestMemo (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcSelectMenu (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8200,6 +8262,7 @@ void clif_parse_NpcSelectMenu (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcNextClicked (int fd, struct map_session_data *sd)
 {
     map_scriptcont (sd, RFIFOL (fd, 2));
@@ -8209,6 +8272,7 @@ void clif_parse_NpcNextClicked (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcAmountInput (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8228,6 +8292,7 @@ void clif_parse_NpcAmountInput (int fd, struct map_session_data *sd)
  * (S 01d5 <len>.w <npc_ID>.l <message>.?B)
  *------------------------------------------
  */
+static
 void clif_parse_NpcStringInput (int fd, struct map_session_data *sd)
 {
     int  len;
@@ -8249,7 +8314,7 @@ void clif_parse_NpcStringInput (int fd, struct map_session_data *sd)
     }
 
     if (len > 0)
-        strncpy (sd->npc_str, RFIFOP (fd, 8), len);
+        strncpy (sd->npc_str, (const char *)RFIFOP (fd, 8), len);
     sd->npc_str[len] = '\0';
 
     map_scriptcont (sd, RFIFOL (fd, 4));
@@ -8259,6 +8324,7 @@ void clif_parse_NpcStringInput (int fd, struct map_session_data *sd)
  *
  *------------------------------------------
  */
+static
 void clif_parse_NpcCloseClicked (int fd, struct map_session_data *sd)
 {
     map_scriptcont (sd, RFIFOL (fd, 2));
@@ -8268,6 +8334,7 @@ void clif_parse_NpcCloseClicked (int fd, struct map_session_data *sd)
  * アイテム鑑定
  *------------------------------------------
  */
+static
 void clif_parse_ItemIdentify (int fd, struct map_session_data *sd)
 {
     pc_item_identify (sd, RFIFOW (fd, 2) - 2);
@@ -8277,6 +8344,7 @@ void clif_parse_ItemIdentify (int fd, struct map_session_data *sd)
  * オートスペル受信
  *------------------------------------------
  */
+static
 void clif_parse_AutoSpell (int fd, struct map_session_data *sd)
 {
     skill_autospell (sd, RFIFOW (fd, 2));
@@ -8286,6 +8354,7 @@ void clif_parse_AutoSpell (int fd, struct map_session_data *sd)
  * カード使用
  *------------------------------------------
  */
+static
 void clif_parse_UseCard (int fd, struct map_session_data *sd)
 {
     clif_use_card (sd, RFIFOW (fd, 2) - 2);
@@ -8295,6 +8364,7 @@ void clif_parse_UseCard (int fd, struct map_session_data *sd)
  * カード挿入装備選択
  *------------------------------------------
  */
+static
 void clif_parse_InsertCard (int fd, struct map_session_data *sd)
 {
     pc_insert_card (sd, RFIFOW (fd, 2) - 2, RFIFOW (fd, 4) - 2);
@@ -8304,6 +8374,7 @@ void clif_parse_InsertCard (int fd, struct map_session_data *sd)
  * 0193 キャラID名前引き
  *------------------------------------------
  */
+static
 void clif_parse_SolveCharName (int fd, struct map_session_data *sd)
 {
     int  char_id;
@@ -8316,6 +8387,7 @@ void clif_parse_SolveCharName (int fd, struct map_session_data *sd)
  * 0197 /resetskill /resetstate
  *------------------------------------------
  */
+static
 void clif_parse_ResetChar (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8344,6 +8416,7 @@ void clif_parse_ResetChar (int fd, struct map_session_data *sd)
  * 019c /lb等
  *------------------------------------------
  */
+static
 void clif_parse_LGMmessage (int fd, struct map_session_data *sd)
 {
     unsigned char buf[64];
@@ -8364,6 +8437,7 @@ void clif_parse_LGMmessage (int fd, struct map_session_data *sd)
  * カプラ倉庫へ入れる
  *------------------------------------------
  */
+static
 void clif_parse_MoveToKafra (int fd, struct map_session_data *sd)
 {
     int  item_index, item_amount;
@@ -8387,6 +8461,7 @@ void clif_parse_MoveToKafra (int fd, struct map_session_data *sd)
  * カプラ倉庫から出す
  *------------------------------------------
  */
+static
 void clif_parse_MoveFromKafra (int fd, struct map_session_data *sd)
 {
     int  item_index, item_amount;
@@ -8410,6 +8485,7 @@ void clif_parse_MoveFromKafra (int fd, struct map_session_data *sd)
  * カプラ倉庫へカートから入れる
  *------------------------------------------
  */
+static
 void clif_parse_MoveToKafraFromCart (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8428,6 +8504,7 @@ void clif_parse_MoveToKafraFromCart (int fd, struct map_session_data *sd)
  * カプラ倉庫から出す
  *------------------------------------------
  */
+static
 void clif_parse_MoveFromKafraToCart (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8446,6 +8523,7 @@ void clif_parse_MoveFromKafraToCart (int fd, struct map_session_data *sd)
  * カプラ倉庫を閉じる
  *------------------------------------------
  */
+static
 void clif_parse_CloseKafra (int fd, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -8463,12 +8541,13 @@ void clif_parse_CloseKafra (int fd, struct map_session_data *sd)
  * (S 00f9 <party_name>.24B)
  *------------------------------------------
  */
+static
 void clif_parse_CreateParty (int fd, struct map_session_data *sd)
 {
     if (battle_config.basic_skill_check == 0
         || pc_checkskill (sd, NV_PARTY) >= 2)
     {
-        party_create (sd, RFIFOP (fd, 2));
+        party_create (sd, (const char *)RFIFOP (fd, 2));
     }
     else
         clif_skill_fail (sd, 1, 0, 4);
@@ -8486,12 +8565,13 @@ void clif_parse_CreateParty (int fd, struct map_session_data *sd)
  *       incomplete here.
  *------------------------------------------
  */
+static
 void clif_parse_CreateParty2 (int fd, struct map_session_data *sd)
 {
     if (battle_config.basic_skill_check == 0
         || pc_checkskill (sd, NV_PARTY) >= 2)
     {
-        party_create (sd, RFIFOP (fd, 2));
+        party_create (sd, (const char *)RFIFOP (fd, 2));
     }
     else
         clif_skill_fail (sd, 1, 0, 4);
@@ -8504,6 +8584,7 @@ void clif_parse_CreateParty2 (int fd, struct map_session_data *sd)
  * (S 00fc <account_ID>.l)
  *------------------------------------------
  */
+static
 void clif_parse_PartyInvite (int fd, struct map_session_data *sd)
 {
     party_invite (sd, RFIFOL (fd, 2));
@@ -8516,6 +8597,7 @@ void clif_parse_PartyInvite (int fd, struct map_session_data *sd)
  * (S 00ff <account_ID>.l <flag>.l)
  *------------------------------------------
  */
+static
 void clif_parse_ReplyPartyInvite (int fd, struct map_session_data *sd)
 {
     if (battle_config.basic_skill_check == 0
@@ -8534,6 +8616,7 @@ void clif_parse_ReplyPartyInvite (int fd, struct map_session_data *sd)
  * パーティ脱退要求
  *------------------------------------------
  */
+static
 void clif_parse_LeaveParty (int fd, struct map_session_data *sd)
 {
     party_leave (sd);
@@ -8543,15 +8626,17 @@ void clif_parse_LeaveParty (int fd, struct map_session_data *sd)
  * パーティ除名要求
  *------------------------------------------
  */
+static
 void clif_parse_RemovePartyMember (int fd, struct map_session_data *sd)
 {
-    party_removemember (sd, RFIFOL (fd, 2), RFIFOP (fd, 6));
+    party_removemember (sd, RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6));
 }
 
 /*==========================================
  * パーティ設定変更要求
  *------------------------------------------
  */
+static
 void clif_parse_PartyChangeOption (int fd, struct map_session_data *sd)
 {
     party_changeoption (sd, RFIFOW (fd, 2), RFIFOW (fd, 4));
@@ -8565,6 +8650,7 @@ void clif_parse_PartyChangeOption (int fd, struct map_session_data *sd)
  * (S 0108 <len>.w <message>.?B)
  *------------------------------------------
  */
+static
 void clif_parse_PartyMessage (int fd, struct map_session_data *sd)
 {
     size_t message_len = 0;
@@ -8575,8 +8661,7 @@ void clif_parse_PartyMessage (int fd, struct map_session_data *sd)
 
     if (!(buf = clif_validate_chat (sd, 0, &message, &message_len)))
     {
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -8592,8 +8677,7 @@ void clif_parse_PartyMessage (int fd, struct map_session_data *sd)
     if (tmw_CheckChatSpam (sd, message))
     {
         free (buf);
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -8605,6 +8689,7 @@ void clif_parse_PartyMessage (int fd, struct map_session_data *sd)
  * /monster /item rewriten by [Yor]
  *------------------------------------------
  */
+static
 void clif_parse_GM_Monster_Item (int fd, struct map_session_data *sd)
 {
     char monster_item_name[25];
@@ -8646,15 +8731,17 @@ void clif_parse_GM_Monster_Item (int fd, struct map_session_data *sd)
  * Note: The account ID seems to be ignored.
  *------------------------------------------
  */
+static
 void clif_parse_CreateGuild (int fd, struct map_session_data *sd)
 {
-    guild_create (sd, RFIFOP (fd, 6));
+    guild_create (sd, (const char *)RFIFOP (fd, 6));
 }
 
 /*==========================================
  * ギルドマスターかどうか確認
  *------------------------------------------
  */
+static
 void clif_parse_GuildCheckMaster (int fd, struct map_session_data *sd)
 {
     clif_guild_masterormember (sd);
@@ -8664,6 +8751,7 @@ void clif_parse_GuildCheckMaster (int fd, struct map_session_data *sd)
  * ギルド情報要求
  *------------------------------------------
  */
+static
 void clif_parse_GuildReqeustInfo (int fd, struct map_session_data *sd)
 {
     switch (RFIFOL (fd, 2))
@@ -8698,6 +8786,7 @@ void clif_parse_GuildReqeustInfo (int fd, struct map_session_data *sd)
  * ギルド役職変更
  *------------------------------------------
  */
+static
 void clif_parse_GuildChangePositionInfo (int fd, struct map_session_data *sd)
 {
     struct guild *g;
@@ -8717,7 +8806,7 @@ void clif_parse_GuildChangePositionInfo (int fd, struct map_session_data *sd)
     for (i = 4; i < RFIFOW (fd, 2); i += 40)
     {
         guild_change_position (sd, RFIFOL (fd, i), RFIFOL (fd, i + 4),
-                               RFIFOL (fd, i + 12), RFIFOP (fd, i + 16));
+                               RFIFOL (fd, i + 12), (const char *)RFIFOP (fd, i + 16));
     }
 }
 
@@ -8725,6 +8814,7 @@ void clif_parse_GuildChangePositionInfo (int fd, struct map_session_data *sd)
  * ギルドメンバ役職変更
  *------------------------------------------
  */
+static
 void clif_parse_GuildChangeMemberPosition (int fd,
                                            struct map_session_data *sd)
 {
@@ -8754,6 +8844,7 @@ void clif_parse_GuildChangeMemberPosition (int fd,
  * ギルドエンブレム要求
  *------------------------------------------
  */
+static
 void clif_parse_GuildRequestEmblem (int fd, struct map_session_data *sd)
 {
     struct guild *g = guild_search (RFIFOL (fd, 2));
@@ -8765,24 +8856,27 @@ void clif_parse_GuildRequestEmblem (int fd, struct map_session_data *sd)
  * ギルドエンブレム変更
  *------------------------------------------
  */
+static
 void clif_parse_GuildChangeEmblem (int fd, struct map_session_data *sd)
 {
-    guild_change_emblem (sd, RFIFOW (fd, 2) - 4, RFIFOP (fd, 4));
+    guild_change_emblem (sd, RFIFOW (fd, 2) - 4, (const char *)RFIFOP (fd, 4));
 }
 
 /*==========================================
  * ギルド告知変更
  *------------------------------------------
  */
+static
 void clif_parse_GuildChangeNotice (int fd, struct map_session_data *sd)
 {
-    guild_change_notice (sd, RFIFOL (fd, 2), RFIFOP (fd, 6), RFIFOP (fd, 66));
+    guild_change_notice (sd, RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6), (const char *)RFIFOP (fd, 66));
 }
 
 /*==========================================
  * ギルド勧誘
  *------------------------------------------
  */
+static
 void clif_parse_GuildInvite (int fd, struct map_session_data *sd)
 {
     guild_invite (sd, RFIFOL (fd, 2));
@@ -8792,6 +8886,7 @@ void clif_parse_GuildInvite (int fd, struct map_session_data *sd)
  * ギルド勧誘返信
  *------------------------------------------
  */
+static
 void clif_parse_GuildReplyInvite (int fd, struct map_session_data *sd)
 {
     guild_reply_invite (sd, RFIFOL (fd, 2), RFIFOB (fd, 6));
@@ -8801,20 +8896,22 @@ void clif_parse_GuildReplyInvite (int fd, struct map_session_data *sd)
  * ギルド脱退
  *------------------------------------------
  */
+static
 void clif_parse_GuildLeave (int fd, struct map_session_data *sd)
 {
     guild_leave (sd, RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10),
-                 RFIFOP (fd, 14));
+                 (const char *)RFIFOP (fd, 14));
 }
 
 /*==========================================
  * ギルド追放
  *------------------------------------------
  */
+static
 void clif_parse_GuildExplusion (int fd, struct map_session_data *sd)
 {
     guild_explusion (sd, RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10),
-                     RFIFOP (fd, 14));
+                     (const char *)RFIFOP (fd, 14));
 }
 
 /*==========================================
@@ -8825,6 +8922,7 @@ void clif_parse_GuildExplusion (int fd, struct map_session_data *sd)
  * (S 017e <len>.w <message>.?B)
  *------------------------------------------
  */
+static
 void clif_parse_GuildMessage (int fd, struct map_session_data *sd)
 {
     size_t message_len = 0;
@@ -8835,8 +8933,7 @@ void clif_parse_GuildMessage (int fd, struct map_session_data *sd)
 
     if (!(buf = clif_validate_chat (sd, 2, &message, &message_len)))
     {
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -8852,8 +8949,7 @@ void clif_parse_GuildMessage (int fd, struct map_session_data *sd)
     if (tmw_CheckChatSpam (sd, message))
     {
         free (buf);
-        /* "Your message could not be sent." */
-        clif_displaymessage (fd, msg_txt (505));
+        clif_displaymessage (fd, "Your message could not be sent.");
         return;
     }
 
@@ -8865,6 +8961,7 @@ void clif_parse_GuildMessage (int fd, struct map_session_data *sd)
  * ギルド同盟要求
  *------------------------------------------
  */
+static
 void clif_parse_GuildRequestAlliance (int fd, struct map_session_data *sd)
 {
     guild_reqalliance (sd, RFIFOL (fd, 2));
@@ -8874,6 +8971,7 @@ void clif_parse_GuildRequestAlliance (int fd, struct map_session_data *sd)
  * ギルド同盟要求返信
  *------------------------------------------
  */
+static
 void clif_parse_GuildReplyAlliance (int fd, struct map_session_data *sd)
 {
     guild_reply_reqalliance (sd, RFIFOL (fd, 2), RFIFOL (fd, 6));
@@ -8883,6 +8981,7 @@ void clif_parse_GuildReplyAlliance (int fd, struct map_session_data *sd)
  * ギルド関係解消
  *------------------------------------------
  */
+static
 void clif_parse_GuildDelAlliance (int fd, struct map_session_data *sd)
 {
     guild_delalliance (sd, RFIFOL (fd, 2), RFIFOL (fd, 6));
@@ -8892,6 +8991,7 @@ void clif_parse_GuildDelAlliance (int fd, struct map_session_data *sd)
  * ギルド敵対
  *------------------------------------------
  */
+static
 void clif_parse_GuildOpposition (int fd, struct map_session_data *sd)
 {
     guild_opposition (sd, RFIFOL (fd, 2));
@@ -8901,12 +9001,14 @@ void clif_parse_GuildOpposition (int fd, struct map_session_data *sd)
  * ギルド解散
  *------------------------------------------
  */
+static
 void clif_parse_GuildBreak (int fd, struct map_session_data *sd)
 {
-    guild_break (sd, RFIFOP (fd, 2));
+    guild_break (sd, (const char *)RFIFOP (fd, 2));
 }
 
 // Kick (right click menu for GM "(name) force to quit")
+static
 void clif_parse_GMKick (int fd, struct map_session_data *sd)
 {
     struct block_list *target;
@@ -8948,6 +9050,7 @@ void clif_parse_GMKick (int fd, struct map_session_data *sd)
  * /shift
  *------------------------------------------
  */
+static
 void clif_parse_Shift (int fd, struct map_session_data *sd)
 {                               // Rewriten by [Yor]
     char player_name[25];
@@ -8971,6 +9074,7 @@ void clif_parse_Shift (int fd, struct map_session_data *sd)
  * /recall
  *------------------------------------------
  */
+static
 void clif_parse_Recall (int fd, struct map_session_data *sd)
 {                               // Added by RoVeRT
     char player_name[25];
@@ -8990,6 +9094,7 @@ void clif_parse_Recall (int fd, struct map_session_data *sd)
     return;
 }
 
+static
 void clif_parse_GMHide (int fd, struct map_session_data *sd)
 {                               // Modified by [Yor]
     nullpo_retv (sd);
@@ -9002,14 +9107,12 @@ void clif_parse_GMHide (int fd, struct map_session_data *sd)
         if (sd->status.option & OPTION_HIDE)
         {                       // OPTION_HIDE = 0x40
             sd->status.option &= ~OPTION_HIDE;  // OPTION_HIDE = 0x40
-            /* "Invisible: Off." */
-            clif_displaymessage (fd, msg_txt (10));
+            clif_displaymessage (fd, "Invisible: Off.");
         }
         else
         {
             sd->status.option |= OPTION_HIDE;   // OPTION_HIDE = 0x40
-            /* "Invisible: On." */
-            clif_displaymessage (fd, msg_txt (11));
+            clif_displaymessage (fd, "Invisible: On.");
         }
         clif_changeoption (&sd->bl);
     }
@@ -9019,6 +9122,7 @@ void clif_parse_GMHide (int fd, struct map_session_data *sd)
  * GMによるチャット禁止時間付与
  *------------------------------------------
  */
+static
 void clif_parse_GMReqNoChat (int fd, struct map_session_data *sd)
 {
     int  tid = RFIFOL (fd, 2);
@@ -9032,8 +9136,7 @@ void clif_parse_GMReqNoChat (int fd, struct map_session_data *sd)
 
     if (!battle_config.muting_players)
     {
-        /* "Muting is disabled." */
-        clif_displaymessage (fd, msg_txt (245));
+        clif_displaymessage (fd, "Muting is disabled.");
         return;
     }
 
@@ -9069,19 +9172,21 @@ void clif_parse_GMReqNoChat (int fd, struct map_session_data *sd)
  * GMによるチャット禁止時間参照(?)
  *------------------------------------------
  */
+static
 void clif_parse_GMReqNoChatCount (int fd, struct map_session_data *sd)
 {
     int  tid = RFIFOL (fd, 2);
 
     WFIFOW (fd, 0) = 0x1e0;
     WFIFOL (fd, 2) = tid;
-    sprintf (WFIFOP (fd, 6), "%d", tid);
+    sprintf ((char *)WFIFOP (fd, 6), "%d", tid);
 //  memcpy(WFIFOP(fd,6),"TESTNAME",24);
     WFIFOSET (fd, packet_len_table[0x1e0]);
 
     return;
 }
 
+static
 void clif_parse_PMIgnore (int fd, struct map_session_data *sd)
 {                               // Rewritten by [Yor]
     char output[1024];
@@ -9091,7 +9196,7 @@ void clif_parse_PMIgnore (int fd, struct map_session_data *sd)
 
     memset (output, '\0', sizeof (output));
 
-    nick = RFIFOP (fd, 2);      // speed up
+    nick = (char *)RFIFOP (fd, 2);      // speed up
     //printf("Ignore: char '%s' state: %d\n", nick, RFIFOB(fd,26));
     // we ask for deny (we add nick only if it's not already exist
     if (RFIFOB (fd, 26) == 0)
@@ -9221,6 +9326,7 @@ void clif_parse_PMIgnore (int fd, struct map_session_data *sd)
     return;
 }
 
+static
 void clif_parse_PMIgnoreAll (int fd, struct map_session_data *sd)
 {                               // Rewritten by [Yor]
     //printf("Ignore all: state: %d\n", RFIFOB(fd,2));
@@ -9266,6 +9372,7 @@ void clif_parse_PMIgnoreAll (int fd, struct map_session_data *sd)
     return;
 }
 
+static
 void clif_parse_skillMessage (int fd, struct map_session_data *sd)
 {                               // Added by RoVeRT
     int  skillid, skilllv, x, y;
@@ -9277,12 +9384,13 @@ void clif_parse_skillMessage (int fd, struct map_session_data *sd)
     y = RFIFOB (fd, 6);
     x = RFIFOB (fd, 8);
 
-    mes = RFIFOP (fd, 10);
+    mes = (char *)RFIFOP (fd, 10);
 
     // skill 220 = graffiti
 //  printf("skill: %d %d location: %3d %3d message: %s\n", skillid, skilllv, x, y, (char*)mes);
 }
 
+static
 int monk (struct map_session_data *sd, struct block_list *target, int type)
 {
 //R 01d1 <Monk id>L <Target monster id>L <Bool>L
@@ -9300,6 +9408,7 @@ int monk (struct map_session_data *sd, struct block_list *target, int type)
  * スパノビの/doridoriによるSPR2倍
  *------------------------------------------
  */
+static
 void clif_parse_sn_doridori (int fd, struct map_session_data *sd)
 {
     if (sd)
@@ -9312,6 +9421,7 @@ void clif_parse_sn_doridori (int fd, struct map_session_data *sd)
  * スパノビの爆裂波動
  *------------------------------------------
  */
+static
 void clif_parse_sn_explosionspirits (int fd, struct map_session_data *sd)
 {
     if (sd)
@@ -9904,6 +10014,7 @@ func_table clif_parse_func_table[0x220] =
 // *INDENT-ON*
 
 // Checks for packet flooding
+static
 int clif_check_packet_flood(int fd, int cmd)
 {
     struct map_session_data *sd = (struct map_session_data *)session[fd]->session_data;
@@ -10057,7 +10168,7 @@ static char *clif_validate_chat (struct map_session_data *sd, int type,
         return NULL;
     }
 
-    p = (char *) (type != 1) ? RFIFOP (fd, 4) : RFIFOP (fd, 28);
+    p = (char *) ((type != 1) ? RFIFOP (fd, 4) : RFIFOP (fd, 28));
     buf_len = (type == 1) ? msg_len - min_len: msg_len;
 
     /*
diff --git a/src/map/clif.hpp b/src/map/clif.hpp
index f484a18..01f6a50 100644
--- a/src/map/clif.hpp
+++ b/src/map/clif.hpp
@@ -4,21 +4,16 @@
 
 #include <sys/types.h>
 
-#ifdef LCCWIN32
-#include <winsock.h>
-typedef unsigned int in_addr_t;
-#else
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-#endif
 
 #include "map.hpp"
 
-void clif_setip (char *);
+void clif_setip (const char *);
 void clif_setport (int);
 
-in_addr_t clif_getip (void);
+struct in_addr clif_getip (void);
 int  clif_getport (void);
 int  clif_countusers (void);
 void clif_setwaitclose (int);
@@ -40,21 +35,21 @@ int  clif_spawnmob (struct mob_data *); // area
 int  clif_walkok (struct map_session_data *);   // self
 int  clif_movechar (struct map_session_data *); // area
 int  clif_movemob (struct mob_data *);  //area
-int  clif_changemap (struct map_session_data *, char *, int, int);  //self
-int  clif_changemapserver (struct map_session_data *, char *, int, int, int, int);  //self
+int  clif_changemap (struct map_session_data *, const char *, int, int);  //self
+int  clif_changemapserver (struct map_session_data *, const char *, int, int, struct in_addr, int);  //self
 int  clif_fixpos (struct block_list *); // area
 int  clif_fixmobpos (struct mob_data *md);
 int  clif_fixpcpos (struct map_session_data *sd);
 int  clif_npcbuysell (struct map_session_data *, int);  //self
 int  clif_buylist (struct map_session_data *, struct npc_data *);   //self
 int  clif_selllist (struct map_session_data *); //self
-int  clif_scriptmes (struct map_session_data *, int, char *);   //self
+int  clif_scriptmes (struct map_session_data *, int, const char *);   //self
 int  clif_scriptnext (struct map_session_data *, int);  //self
 int  clif_scriptclose (struct map_session_data *, int); //self
-int  clif_scriptmenu (struct map_session_data *, int, char *);  //self
+int  clif_scriptmenu (struct map_session_data *, int, const char *);  //self
 int  clif_scriptinput (struct map_session_data *, int); //self
 int  clif_scriptinputstr (struct map_session_data *sd, int npcid);  // self
-int  clif_cutin (struct map_session_data *, char *, int);   //self
+int  clif_cutin (struct map_session_data *, const char *, int);   //self
 int  clif_viewpoint (struct map_session_data *, int, int, int, int, int, int);  //self
 int  clif_additem (struct map_session_data *, int, int, int);   //self
 int  clif_delitem (struct map_session_data *, int, int);    //self
@@ -85,16 +80,16 @@ int  clif_leavechat (struct chat_data *, struct map_session_data *);    // chat
 int  clif_changechatstatus (struct chat_data *);    // chat
 
 void clif_emotion (struct block_list *bl, int type);
-void clif_talkiebox (struct block_list *bl, char *talkie);
+void clif_talkiebox (struct block_list *bl, const char *talkie);
 void clif_wedding_effect (struct block_list *bl);
 void clif_sitting (int fd, struct map_session_data *sd);
 //void clif_callpartner(struct map_session_data *sd);
 //void clif_sitting(struct map_session_data *sd);
 void clif_soundeffect (struct map_session_data *sd, struct block_list *bl,
-                       char *name, int type);
+                       const char *name, int type);
 
 // trade
-int  clif_traderequest (struct map_session_data *sd, char *name);
+int  clif_traderequest (struct map_session_data *sd, const char *name);
 int  clif_tradestart (struct map_session_data *sd, int type);
 int  clif_tradeadditem (struct map_session_data *sd,
                         struct map_session_data *tsd, int index, int amount);
@@ -182,7 +177,7 @@ int  clif_changemapcell (int m, int x, int y, int cell_type, int type);
 
 int  clif_status_change (struct block_list *bl, int type, int flag);
 
-int  clif_wis_message (int fd, char *nick, char *mes, int mes_len);
+int  clif_wis_message (int fd, const char *nick, const char *mes, int mes_len);
 int  clif_wis_end (int fd, int flag);
 
 int  clif_solved_charname (struct map_session_data *sd, int char_id);
@@ -217,12 +212,12 @@ int  clif_party_created (struct map_session_data *sd, int flag);
 int  clif_party_info (struct party *p, int fd);
 int  clif_party_invite (struct map_session_data *sd,
                         struct map_session_data *tsd);
-int  clif_party_inviteack (struct map_session_data *sd, char *nick, int flag);
+int  clif_party_inviteack (struct map_session_data *sd, const char *nick, int flag);
 int  clif_party_option (struct party *p, struct map_session_data *sd,
                         int flag);
 int  clif_party_leaved (struct party *p, struct map_session_data *sd,
-                        int account_id, char *name, int flag);
-int  clif_party_message (struct party *p, int account_id, char *mes, int len);
+                        int account_id, const char *name, int flag);
+int  clif_party_message (struct party *p, int account_id, const char *mes, int len);
 int  clif_party_move (struct party *p, struct map_session_data *sd,
                       int online);
 int  clif_party_xy (struct party *p, struct map_session_data *sd);
@@ -258,9 +253,9 @@ int  clif_guild_oppositionack (struct map_session_data *sd, int flag);
 int  clif_guild_broken (struct map_session_data *sd, int flag);
 
 // atcommand
-int  clif_displaymessage (const int fd, char *mes);
-int  clif_disp_onlyself (struct map_session_data *sd, char *mes, int len);
-int  clif_GMmessage (struct block_list *bl, char *mes, int len, int flag);
+int  clif_displaymessage (int fd, const char *mes);
+int  clif_disp_onlyself (struct map_session_data *sd, const char *mes, int len);
+int  clif_GMmessage (struct block_list *bl, const char *mes, int len, int flag);
 int  clif_heal (int fd, int type, int val);
 int  clif_resurrection (struct block_list *bl, int type);
 int  clif_set0199 (int fd, int type);
@@ -271,7 +266,7 @@ int  clif_refine (int fd, struct map_session_data *sd, int fail, int index,
                   int val);
 
 int  clif_specialeffect (struct block_list *bl, int type, int flag);    // special effects [Valaris]
-int  clif_message (struct block_list *bl, char *msg);   // messages (from mobs/npcs) [Valaris]
+int  clif_message (struct block_list *bl, const char *msg);   // messages (from mobs/npcs) [Valaris]
 
 int  clif_GM_kickack (struct map_session_data *sd, int id);
 int  clif_GM_kick (struct map_session_data *sd, struct map_session_data *tsd,
diff --git a/src/map/guild.cpp b/src/map/guild.cpp
index c001f78..eba856d 100644
--- a/src/map/guild.cpp
+++ b/src/map/guild.cpp
@@ -165,6 +165,7 @@ struct guild *guild_search (int guild_id)
     return (struct guild *)numdb_search (guild_db, guild_id);
 }
 
+static
 void guild_searchname_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct guild *g = (struct guild *) data, **dst;
@@ -176,7 +177,7 @@ void guild_searchname_sub (db_key_t key, db_val_t data, va_list ap)
 }
 
 // ギルド名検索
-struct guild *guild_searchname (char *str)
+struct guild *guild_searchname (const char *str)
 {
     struct guild *g = NULL;
     numdb_foreach (guild_db, guild_searchname_sub, str, &g);
@@ -189,7 +190,7 @@ struct guild_castle *guild_castle_search (int gcid)
 }
 
 // mapnameに対応したアジトのgcを返す
-struct guild_castle *guild_mapname2gc (char *mapname)
+struct guild_castle *guild_mapname2gc (const char *mapname)
 {
     int  i;
     struct guild_castle *gc = NULL;
@@ -245,6 +246,7 @@ int guild_getposition (struct map_session_data *sd, struct guild *g)
 }
 
 // メンバー情報の作成
+static
 void guild_makemember (struct guild_member *m, struct map_session_data *sd)
 {
     nullpo_retv (sd);
@@ -266,6 +268,7 @@ void guild_makemember (struct guild_member *m, struct map_session_data *sd)
 }
 
 // ギルド競合確認
+static
 int guild_check_conflict (struct map_session_data *sd)
 {
     nullpo_retr (0, sd);
@@ -276,6 +279,7 @@ int guild_check_conflict (struct map_session_data *sd)
 }
 
 // ギルドのEXPキャッシュをinter鯖にフラッシュする
+static
 void guild_payexp_timer_sub (db_key_t key, db_val_t data, va_list ap)
 {
     int  i, *dellist, *delp, dataid = key.i;
@@ -316,7 +320,7 @@ void guild_payexp_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_
 //------------------------------------------------------------------------
 
 /* Process a guild creation request. */
-int guild_create (struct map_session_data *sd, char *name)
+int guild_create (struct map_session_data *sd, const char *name)
 {
     char pname[24];
 
@@ -425,6 +429,7 @@ int guild_npc_request_info (int guild_id, const char *event)
 }
 
 // 所属キャラの確認
+static
 int guild_check_member (const struct guild *g)
 {
     int  i;
@@ -905,7 +910,7 @@ int guild_recv_memberinfoshort (int guild_id, int account_id, int char_id,
 }
 
 // ギルド会話送信
-int guild_send_message (struct map_session_data *sd, char *mes, int len)
+int guild_send_message (struct map_session_data *sd, const char *mes, int len)
 {
     nullpo_retr (0, sd);
 
@@ -917,7 +922,7 @@ int guild_send_message (struct map_session_data *sd, char *mes, int len)
 }
 
 // ギルド会話受信
-int guild_recv_message (int guild_id, int account_id, char *mes, int len)
+int guild_recv_message (int guild_id, int account_id, const char *mes, int len)
 {
     struct guild *g;
     if ((g = guild_search (guild_id)) == NULL)
@@ -1141,6 +1146,7 @@ int guild_skillupack (int guild_id, int skill_num, int account_id)
 }
 
 // ギルド同盟数所得
+static
 int guild_get_alliance_count (struct guild *g, int flag)
 {
     int  i, c;
@@ -1442,6 +1448,7 @@ int guild_allianceack (int guild_id1, int guild_id2, int account_id1,
 }
 
 // ギルド解散通知用
+static
 void guild_broken_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct guild *g = (struct guild *) data;
@@ -1493,7 +1500,7 @@ int guild_broken (int guild_id, int flag)
 }
 
 // ギルド解散
-int guild_break (struct map_session_data *sd, char *name)
+int guild_break (struct map_session_data *sd, const char *name)
 {
     struct guild *g;
     int  i;
diff --git a/src/map/guild.hpp b/src/map/guild.hpp
index f6d1356..983934c 100644
--- a/src/map/guild.hpp
+++ b/src/map/guild.hpp
@@ -20,17 +20,17 @@ int  guild_isallied (struct guild *g, struct guild_castle *gc);
 
 void do_init_guild (void);
 struct guild *guild_search (int guild_id);
-struct guild *guild_searchname (char *str);
+struct guild *guild_searchname (const char *str);
 struct guild_castle *guild_castle_search (int gcid);
 
-struct guild_castle *guild_mapname2gc (char *mapname);
+struct guild_castle *guild_mapname2gc (const char *mapname);
 
 struct map_session_data *guild_getavailablesd (struct guild *g);
 int  guild_getindex (struct guild *g, int account_id, int char_id);
 int  guild_getposition (struct map_session_data *sd, struct guild *g);
 int  guild_payexp (struct map_session_data *sd, int exp);
 
-int  guild_create (struct map_session_data *sd, char *name);
+int  guild_create (struct map_session_data *sd, const char *name);
 int  guild_created (int account_id, int guild_id);
 int  guild_request_info (int guild_id);
 int  guild_recv_noinfo (int guild_id);
@@ -73,10 +73,10 @@ int  guild_change_emblem (struct map_session_data *sd, int len,
                           const char *data);
 int  guild_emblem_changed (int len, int guild_id, int emblem_id,
                            const char *data);
-int  guild_send_message (struct map_session_data *sd, char *mes, int len);
-int  guild_recv_message (int guild_id, int account_id, char *mes, int len);
+int  guild_send_message (struct map_session_data *sd, const char *mes, int len);
+int  guild_recv_message (int guild_id, int account_id, const char *mes, int len);
 int  guild_skillupack (int guild_id, int skill_num, int account_id);
-int  guild_break (struct map_session_data *sd, char *name);
+int  guild_break (struct map_session_data *sd, const char *name);
 int  guild_broken (int guild_id, int flag);
 
 int  guild_addcastleinfoevent (int castle_id, int index, const char *name);
diff --git a/src/map/intif.cpp b/src/map/intif.cpp
index 3ccb13a..dfbc665 100644
--- a/src/map/intif.cpp
+++ b/src/map/intif.cpp
@@ -55,7 +55,7 @@ extern int char_fd;             // inter serverのfdはchar_fdを使う
 // inter serverへの送信
 
 // Message for all GMs on all map servers
-int intif_GMmessage (char *mes, int len, int flag)
+int intif_GMmessage (const char *mes, int len, int flag)
 {
     int  lp = (flag & 0x10) ? 8 : 4;
     WFIFOW (inter_fd, 0) = 0x3000;
@@ -68,7 +68,7 @@ int intif_GMmessage (char *mes, int len, int flag)
 }
 
 // The transmission of Wisp/Page to inter-server (player not found on this server)
-int intif_wis_message (struct map_session_data *sd, char *nick, char *mes,
+int intif_wis_message (struct map_session_data *sd, const char *nick, const char *mes,
                        int mes_len)
 {
     nullpo_retr (0, sd);
@@ -88,6 +88,7 @@ int intif_wis_message (struct map_session_data *sd, char *nick, char *mes,
 }
 
 // The reply of Wisp/page
+static
 int intif_wis_replay (int id, int flag)
 {
     WFIFOW (inter_fd, 0) = 0x3002;
@@ -102,7 +103,7 @@ int intif_wis_replay (int id, int flag)
 }
 
 // The transmission of GM only Wisp/Page from server to inter-server
-int intif_wis_message_to_gm (char *Wisp_name, int min_gm_level, char *mes,
+int intif_wis_message_to_gm (const char *Wisp_name, int min_gm_level, const char *mes,
                              int mes_len)
 {
     WFIFOW (inter_fd, 0) = 0x3003;
@@ -192,7 +193,7 @@ int intif_send_guild_storage (int account_id, struct guild_storage *gstor)
 }
 
 // パーティ作成要求
-int intif_create_party (struct map_session_data *sd, char *name)
+int intif_create_party (struct map_session_data *sd, const char *name)
 {
     nullpo_retr (0, sd);
 
@@ -291,7 +292,7 @@ int intif_break_party (int party_id)
 }
 
 // パーティ会話送信
-int intif_party_message (int party_id, int account_id, char *mes, int len)
+int intif_party_message (int party_id, int account_id, const char *mes, int len)
 {
 //  if(battle_config.etc_log)
 //      printf("intif_party_message: %s\n",mes);
@@ -305,7 +306,7 @@ int intif_party_message (int party_id, int account_id, char *mes, int len)
 }
 
 // パーティ競合チェック要求
-int intif_party_checkconflict (int party_id, int account_id, char *nick)
+int intif_party_checkconflict (int party_id, int account_id, const char *nick)
 {
     WFIFOW (inter_fd, 0) = 0x3028;
     WFIFOL (inter_fd, 2) = party_id;
@@ -389,7 +390,7 @@ int intif_guild_break (int guild_id)
 }
 
 // ギルド会話送信
-int intif_guild_message (int guild_id, int account_id, char *mes, int len)
+int intif_guild_message (int guild_id, int account_id, const char *mes, int len)
 {
     WFIFOW (inter_fd, 0) = 0x3037;
     WFIFOW (inter_fd, 2) = len + 12;
@@ -526,26 +527,26 @@ int intif_guild_castle_datasave (int castle_id, int index, int value)
 // Packets receive from inter server
 
 // Wisp/Page reception
+static
 int intif_parse_WisMessage (int fd)
 {                               // rewritten by [Yor]
     struct map_session_data *sd;
     int  i;
-    char *wisp_source;
 
     if (battle_config.etc_log)
         printf
             ("intif_parse_wismessage: id: %d, from: %s, to: %s, message: '%s'\n",
              RFIFOL (fd, 4), RFIFOP (fd, 8), RFIFOP (fd, 32), RFIFOP (fd,
                                                                       56));
-    sd = map_nick2sd (RFIFOP (fd, 32)); // Searching destination player
-    if (sd != NULL && strcmp (sd->status.name, RFIFOP (fd, 32)) == 0)
+    sd = map_nick2sd ((const char *)RFIFOP (fd, 32)); // Searching destination player
+    if (sd != NULL && strcmp (sd->status.name, (const char *)RFIFOP (fd, 32)) == 0)
     {                           // exactly same name (inter-server have checked the name before)
         // if player ignore all
         if (sd->ignoreAll == 1)
             intif_wis_replay (RFIFOL (fd, 4), 2);   // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
         else
         {
-            wisp_source = RFIFOP (fd, 8);   // speed up
+            const char *wisp_source = (const char *)RFIFOP (fd, 8);   // speed up
             // if player ignore the source character
             for (i = 0; i < (sizeof (sd->ignore) / sizeof (sd->ignore[0]));
                  i++)
@@ -557,7 +558,7 @@ int intif_parse_WisMessage (int fd)
             // if source player not found in ignore list
             if (i == (sizeof (sd->ignore) / sizeof (sd->ignore[0])))
             {
-                clif_wis_message (sd->fd, RFIFOP (fd, 8), RFIFOP (fd, 56),
+                clif_wis_message (sd->fd, (const char *)RFIFOP (fd, 8), (const char *)RFIFOP (fd, 56),
                                   RFIFOW (fd, 2) - 56);
                 intif_wis_replay (RFIFOL (fd, 4), 0);   // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
             }
@@ -569,13 +570,14 @@ int intif_parse_WisMessage (int fd)
 }
 
 // Wisp/page transmission result reception
+static
 int intif_parse_WisEnd (int fd)
 {
     struct map_session_data *sd;
 
     if (battle_config.etc_log)
         printf ("intif_parse_wisend: player: %s, flag: %d\n", RFIFOP (fd, 2), RFIFOB (fd, 26)); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
-    sd = map_nick2sd (RFIFOP (fd, 2));
+    sd = map_nick2sd ((const char *)RFIFOP (fd, 2));
     if (sd != NULL)
         clif_wis_end (sd->fd, RFIFOB (fd, 26));
 
@@ -583,6 +585,7 @@ int intif_parse_WisEnd (int fd)
 }
 
 // Received wisp message from map-server via char-server for ALL gm
+static
 int mapif_parse_WisToGM (int fd)
 {                               // 0x3003/0x3803 <packet_len>.w <wispname>.24B <min_gm_level>.w <message>.?B
     int  i, min_gm_level, len;
@@ -616,6 +619,7 @@ int mapif_parse_WisToGM (int fd)
 }
 
 // アカウント変数通知
+static
 int intif_parse_AccountReg (int fd)
 {
     int  j, p;
@@ -636,6 +640,7 @@ int intif_parse_AccountReg (int fd)
 }
 
 // 倉庫データ受信
+static
 int intif_parse_LoadStorage (int fd)
 {
     struct storage *stor;
@@ -688,6 +693,7 @@ int intif_parse_LoadStorage (int fd)
 }
 
 // 倉庫データ送信成功
+static
 int intif_parse_SaveStorage (int fd)
 {
     if (battle_config.save_log)
@@ -697,6 +703,7 @@ int intif_parse_SaveStorage (int fd)
     return 0;
 }
 
+static
 int intif_parse_LoadGuildStorage (int fd)
 {
     struct guild_storage *gstor;
@@ -760,6 +767,7 @@ int intif_parse_LoadGuildStorage (int fd)
     return 0;
 }
 
+static
 int intif_parse_SaveGuildStorage (int fd)
 {
     if (battle_config.save_log)
@@ -772,16 +780,18 @@ int intif_parse_SaveGuildStorage (int fd)
 }
 
 // パーティ作成可否
+static
 int intif_parse_PartyCreated (int fd)
 {
     if (battle_config.etc_log)
         printf ("intif: party created\n");
     party_created (RFIFOL (fd, 2), RFIFOB (fd, 6), RFIFOL (fd, 7),
-                   RFIFOP (fd, 11));
+                   (const char *)RFIFOP (fd, 11));
     return 0;
 }
 
 // パーティ情報
+static
 int intif_parse_PartyInfo (int fd)
 {
     if (RFIFOW (fd, 2) == 8)
@@ -805,6 +815,7 @@ int intif_parse_PartyInfo (int fd)
 }
 
 // パーティ追加通知
+static
 int intif_parse_PartyMemberAdded (int fd)
 {
     if (battle_config.etc_log)
@@ -815,6 +826,7 @@ int intif_parse_PartyMemberAdded (int fd)
 }
 
 // パーティ設定変更通知
+static
 int intif_parse_PartyOptionChanged (int fd)
 {
     party_optionchanged (RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOW (fd, 10),
@@ -823,16 +835,18 @@ int intif_parse_PartyOptionChanged (int fd)
 }
 
 // パーティ脱退通知
+static
 int intif_parse_PartyMemberLeaved (int fd)
 {
     if (battle_config.etc_log)
         printf ("intif: party member leaved %d %d %s\n", RFIFOL (fd, 2),
-                RFIFOL (fd, 6), RFIFOP (fd, 10));
-    party_member_leaved (RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOP (fd, 10));
+                RFIFOL (fd, 6), (const char *)RFIFOP (fd, 10));
+    party_member_leaved (RFIFOL (fd, 2), RFIFOL (fd, 6), (const char *)RFIFOP (fd, 10));
     return 0;
 }
 
 // パーティ解散通知
+static
 int intif_parse_PartyBroken (int fd)
 {
     party_broken (RFIFOL (fd, 2));
@@ -840,26 +854,29 @@ int intif_parse_PartyBroken (int fd)
 }
 
 // パーティ移動通知
+static
 int intif_parse_PartyMove (int fd)
 {
 //  if(battle_config.etc_log)
 //      printf("intif: party move %d %d %s %d %d\n",RFIFOL(fd,2),RFIFOL(fd,6),RFIFOP(fd,10),RFIFOB(fd,26),RFIFOW(fd,27));
-    party_recv_movemap (RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOP (fd, 10),
+    party_recv_movemap (RFIFOL (fd, 2), RFIFOL (fd, 6), (const char *)RFIFOP (fd, 10),
                         RFIFOB (fd, 26), RFIFOW (fd, 27));
     return 0;
 }
 
 // パーティメッセージ
+static
 int intif_parse_PartyMessage (int fd)
 {
 //  if(battle_config.etc_log)
 //      printf("intif_parse_PartyMessage: %s\n",RFIFOP(fd,12));
-    party_recv_message (RFIFOL (fd, 4), RFIFOL (fd, 8), RFIFOP (fd, 12),
+    party_recv_message (RFIFOL (fd, 4), RFIFOL (fd, 8), (const char *)RFIFOP (fd, 12),
                         RFIFOW (fd, 2) - 12);
     return 0;
 }
 
 // ギルド作成可否
+static
 int intif_parse_GuildCreated (int fd)
 {
     guild_created (RFIFOL (fd, 2), RFIFOL (fd, 6));
@@ -867,6 +884,7 @@ int intif_parse_GuildCreated (int fd)
 }
 
 // ギルド情報
+static
 int intif_parse_GuildInfo (int fd)
 {
     if (RFIFOW (fd, 2) == 8)
@@ -891,6 +909,7 @@ int intif_parse_GuildInfo (int fd)
 }
 
 // ギルドメンバ追加通知
+static
 int intif_parse_GuildMemberAdded (int fd)
 {
     if (battle_config.etc_log)
@@ -902,14 +921,16 @@ int intif_parse_GuildMemberAdded (int fd)
 }
 
 // ギルドメンバ脱退/追放通知
+static
 int intif_parse_GuildMemberLeaved (int fd)
 {
     guild_member_leaved (RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10),
-                         RFIFOB (fd, 14), RFIFOP (fd, 55), RFIFOP (fd, 15));
+                         RFIFOB (fd, 14), (const char *)RFIFOP (fd, 55), (const char *)RFIFOP (fd, 15));
     return 0;
 }
 
 // ギルドメンバオンライン状態/Lv変更通知
+static
 int intif_parse_GuildMemberInfoShort (int fd)
 {
     guild_recv_memberinfoshort (RFIFOL (fd, 2), RFIFOL (fd, 6),
@@ -920,6 +941,7 @@ int intif_parse_GuildMemberInfoShort (int fd)
 }
 
 // ギルド解散通知
+static
 int intif_parse_GuildBroken (int fd)
 {
     guild_broken (RFIFOL (fd, 2), RFIFOB (fd, 6));
@@ -927,6 +949,7 @@ int intif_parse_GuildBroken (int fd)
 }
 
 // ギルド基本情報変更通知
+static
 int intif_parse_GuildBasicInfoChanged (int fd)
 {
     int  type = RFIFOW (fd, 8), guild_id = RFIFOL (fd, 4);
@@ -952,6 +975,7 @@ int intif_parse_GuildBasicInfoChanged (int fd)
 }
 
 // ギルドメンバ情報変更通知
+static
 int intif_parse_GuildMemberInfoChanged (int fd)
 {
     int  type = RFIFOW (fd, 16), guild_id = RFIFOL (fd, 4);
@@ -976,6 +1000,7 @@ int intif_parse_GuildMemberInfoChanged (int fd)
 }
 
 // ギルド役職変更通知
+static
 int intif_parse_GuildPosition (int fd)
 {
     if (RFIFOW (fd, 2) != sizeof (struct guild_position) + 12)
@@ -991,6 +1016,7 @@ int intif_parse_GuildPosition (int fd)
 }
 
 // ギルドスキル割り振り通知
+static
 int intif_parse_GuildSkillUp (int fd)
 {
     guild_skillupack (RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10));
@@ -998,38 +1024,43 @@ int intif_parse_GuildSkillUp (int fd)
 }
 
 // ギルド同盟/敵対通知
+static
 int intif_parse_GuildAlliance (int fd)
 {
     guild_allianceack (RFIFOL (fd, 2), RFIFOL (fd, 6), RFIFOL (fd, 10),
-                       RFIFOL (fd, 14), RFIFOB (fd, 18), RFIFOP (fd, 19),
-                       RFIFOP (fd, 43));
+                       RFIFOL (fd, 14), RFIFOB (fd, 18), (const char *)RFIFOP (fd, 19),
+                       (const char *)RFIFOP (fd, 43));
     return 0;
 }
 
 // ギルド告知変更通知
+static
 int intif_parse_GuildNotice (int fd)
 {
-    guild_notice_changed (RFIFOL (fd, 2), RFIFOP (fd, 6), RFIFOP (fd, 66));
+    guild_notice_changed (RFIFOL (fd, 2), (const char *)RFIFOP (fd, 6), (const char *)RFIFOP (fd, 66));
     return 0;
 }
 
 // ギルドエンブレム変更通知
+static
 int intif_parse_GuildEmblem (int fd)
 {
     guild_emblem_changed (RFIFOW (fd, 2) - 12, RFIFOL (fd, 4), RFIFOL (fd, 8),
-                          RFIFOP (fd, 12));
+                          (const char *)RFIFOP (fd, 12));
     return 0;
 }
 
 // ギルド会話受信
+static
 int intif_parse_GuildMessage (int fd)
 {
-    guild_recv_message (RFIFOL (fd, 4), RFIFOL (fd, 8), RFIFOP (fd, 12),
+    guild_recv_message (RFIFOL (fd, 4), RFIFOL (fd, 8), (const char *)RFIFOP (fd, 12),
                         RFIFOW (fd, 2) - 12);
     return 0;
 }
 
 // ギルド城データ要求返信
+static
 int intif_parse_GuildCastleDataLoad (int fd)
 {
     return guild_castledataloadack (RFIFOW (fd, 2), RFIFOB (fd, 4),
@@ -1037,6 +1068,7 @@ int intif_parse_GuildCastleDataLoad (int fd)
 }
 
 // ギルド城データ変更通知
+static
 int intif_parse_GuildCastleDataSave (int fd)
 {
     return guild_castledatasaveack (RFIFOW (fd, 2), RFIFOB (fd, 4),
@@ -1044,6 +1076,7 @@ int intif_parse_GuildCastleDataSave (int fd)
 }
 
 // ギルド城データ一括受信(初期化時)
+static
 int intif_parse_GuildCastleAllDataLoad (int fd)
 {
     return guild_castlealldataload (RFIFOW (fd, 2),
@@ -1084,7 +1117,7 @@ int intif_parse (int fd)
     switch (cmd)
     {
         case 0x3800:
-            clif_GMmessage (NULL, RFIFOP (fd, 4), packet_len - 4, 0);
+            clif_GMmessage (NULL, (const char *)RFIFOP (fd, 4), packet_len - 4, 0);
             break;
         case 0x3801:
             intif_parse_WisMessage (fd);
diff --git a/src/map/intif.hpp b/src/map/intif.hpp
index dc002e5..fcca523 100644
--- a/src/map/intif.hpp
+++ b/src/map/intif.hpp
@@ -1,14 +1,14 @@
 // $Id: intif.h,v 1.2 2004/09/25 05:32:18 MouseJstr Exp $
 #ifndef INTIF_HPP
-#define INFIF_HPP
+#define INTIF_HPP
 
 int  intif_parse (int fd);
 
-int  intif_GMmessage (char *mes, int len, int flag);
+int  intif_GMmessage (const char *mes, int len, int flag);
 
-int  intif_wis_message (struct map_session_data *sd, char *nick, char *mes,
+int  intif_wis_message (struct map_session_data *sd, const char *nick, const char *mes,
                         int mes_len);
-int  intif_wis_message_to_gm (char *Wisp_name, int min_gm_level, char *mes,
+int  intif_wis_message_to_gm (const char *Wisp_name, int min_gm_level, const char *mes,
                               int mes_len);
 
 int  intif_saveaccountreg (struct map_session_data *sd);
@@ -19,7 +19,7 @@ int  intif_send_storage (struct storage *stor);
 int  intif_request_guild_storage (int account_id, int guild_id);
 int  intif_send_guild_storage (int account_id, struct guild_storage *gstor);
 
-int  intif_create_party (struct map_session_data *sd, char *name);
+int  intif_create_party (struct map_session_data *sd, const char *name);
 int  intif_request_partyinfo (int party_id);
 int  intif_party_addmember (int party_id, int account_id);
 int  intif_party_changeoption (int party_id, int account_id, int exp,
@@ -27,8 +27,8 @@ int  intif_party_changeoption (int party_id, int account_id, int exp,
 int  intif_party_leave (int party_id, int accound_id);
 int  intif_party_changemap (struct map_session_data *sd, int online);
 int  intif_break_party (int party_id);
-int  intif_party_message (int party_id, int account_id, char *mes, int len);
-int  intif_party_checkconflict (int party_id, int account_id, char *nick);
+int  intif_party_message (int party_id, int account_id, const char *mes, int len);
+int  intif_party_checkconflict (int party_id, int account_id, const char *nick);
 
 int  intif_guild_create (const char *name, const struct guild_member *master);
 int  intif_guild_request_info (int guild_id);
@@ -38,7 +38,7 @@ int  intif_guild_leave (int guild_id, int account_id, int char_id, int flag,
 int  intif_guild_memberinfoshort (int guild_id, int account_id, int char_id,
                                   int online, int lv, int class_);
 int  intif_guild_break (int guild_id);
-int  intif_guild_message (int guild_id, int account_id, char *mes, int len);
+int  intif_guild_message (int guild_id, int account_id, const char *mes, int len);
 int  intif_guild_checkconflict (int guild_id, int account_id, int char_id);
 int  intif_guild_change_basicinfo (int guild_id, int type, const void *data,
                                    int len);
diff --git a/src/map/itemdb.cpp b/src/map/itemdb.cpp
index c1255bd..03e59d6 100644
--- a/src/map/itemdb.cpp
+++ b/src/map/itemdb.cpp
@@ -42,13 +42,13 @@ static int itemdb_read_randomitem (void);
 static int itemdb_read_itemavail (void);
 static int itemdb_read_itemnametable (void);
 static int itemdb_read_noequip (void);
-void itemdb_reload (void);
 
 /*==========================================
  * 名前で検索用
  *------------------------------------------
  */
 // name = item alias, so we should find items aliases first. if not found then look for "jname" (full name)
+static
 void itemdb_searchname_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct item_data *item = (struct item_data *) data, **dst;
@@ -65,6 +65,7 @@ void itemdb_searchname_sub (db_key_t key, db_val_t data, va_list ap)
  * 名前で検索用
  *------------------------------------------
  */
+static
 int itemdb_searchjname_sub (void *key, void *data, va_list ap)
 {
     struct item_data *item = (struct item_data *) data, **dst;
@@ -259,7 +260,7 @@ int itemdb_isdropable (int nameid)
 static int itemdb_read_itemslottable (void)
 {
     char *buf, *p;
-    int  s;
+    size_t s;
 
     buf = (char *)grfio_reads ("data\\itemslottable.txt", &s);
     if (buf == NULL)
@@ -297,7 +298,7 @@ static int itemdb_readdb (void)
     char *str[32], *p, *np;
     struct item_data *id;
     int  i = 0;
-    char *filename[] = { "db/item_db.txt", "db/item_db2.txt" };
+    const char *filename[] = { "db/item_db.txt", "db/item_db2.txt" };
 
     for (i = 0; i < 2; i++)
     {
@@ -542,7 +543,7 @@ static int itemdb_read_itemavail (void)
 static int itemdb_read_itemnametable (void)
 {
     char *buf, *p;
-    int  s;
+    size_t s;
 
     buf = (char *)grfio_reads ("data\\idnum2itemdisplaynametable.txt", &s);
 
@@ -588,7 +589,7 @@ static int itemdb_read_itemnametable (void)
 static int itemdb_read_cardillustnametable (void)
 {
     char *buf, *p;
-    int  s;
+    size_t s;
 
     buf = (char *)grfio_reads ("data\\num2cardillustnametable.txt", &s);
 
@@ -677,9 +678,9 @@ static void itemdb_final (db_key_t key, db_val_t data, va_list ap)
     nullpo_retv (id = (struct item_data *)data);
 
     if (id->use_script)
-        free (id->use_script);
+        free (const_cast<ScriptCode *>(id->use_script));
     if (id->equip_script)
-        free (id->equip_script);
+        free (const_cast<ScriptCode *>(id->equip_script));
     free (id);
 }
 
diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp
index ef5eab2..e03892d 100644
--- a/src/map/itemdb.hpp
+++ b/src/map/itemdb.hpp
@@ -3,6 +3,7 @@
 #define ITEMDB_HPP
 
 #include "map.hpp"
+#include "script.hpp"
 
 struct item_data
 {
@@ -25,8 +26,8 @@ struct item_data
     int  elv;
     int  wlv;
     int  refine;
-    char *use_script;
-    char *equip_script;
+    const ScriptCode *use_script;
+    const ScriptCode *equip_script;
     struct
     {
         unsigned available:1;
diff --git a/src/map/magic-expr-eval.hpp b/src/map/magic-expr-eval.hpp
index 71c1d86..a08b964 100644
--- a/src/map/magic-expr-eval.hpp
+++ b/src/map/magic-expr-eval.hpp
@@ -6,9 +6,8 @@
 static int heading_x[8] = { 0, -1, -1, -1, 0, 1, 1, 1 };
 static int heading_y[8] = { 1, 1, 0, -1, -1, -1, 0, 1 };
 
-int
- magic_signature_check (char *opname, char *funname, char *signature,
-                        int args_nr, val_t * args, int line, int column);
+int magic_signature_check (const char *opname, const char *funname, const char *signature,
+                           int args_nr, val_t * args, int line, int column);
 
 void
 magic_area_rect (int *m, int *x, int *y, int *width, int *height,
diff --git a/src/map/magic-expr.cpp b/src/map/magic-expr.cpp
index d75042d..4b4e3a3 100644
--- a/src/map/magic-expr.cpp
+++ b/src/map/magic-expr.cpp
@@ -83,7 +83,8 @@ void magic_clear_var (val_t * v)
     }
 }
 
-static char *show_entity (entity_t * entity)
+static
+const char *show_entity (entity_t * entity)
 {
     switch (entity->type)
     {
@@ -109,7 +110,7 @@ static char *show_entity (entity_t * entity)
 
 static void stringify (val_t * v, int within_op)
 {
-    static char *dirs[8] =
+    static const char *dirs[8] =
         { "south", "south-west", "west", "north-west", "north", "north-east",
         "east", "south-east"
     };
@@ -180,6 +181,7 @@ static void intify (val_t * v)
     v->v.v_int = 1;
 }
 
+static
 area_t *area_new (int ty)
 {
     area_t *retval;
@@ -188,6 +190,7 @@ area_t *area_new (int ty)
     return retval;
 }
 
+static
 area_t *area_union (area_t * area, area_t * other_area)
 {
     area_t *retval = area_new (AREA_UNION);
@@ -204,7 +207,7 @@ static void make_area (val_t * v)
 {
     if (v->ty == TY_LOCATION)
     {
-        area_t *a = (char *)malloc (sizeof (area_t));
+        area_t *a = (area_t *)malloc (sizeof (area_t));
         v->ty = TY_AREA;
         a->ty = AREA_LOCATION;
         a->a.a_loc = v->v.v_location;
@@ -1238,6 +1241,7 @@ static fun_t functions[] = {
 
 static int functions_are_sorted = 0;
 
+static
 int compare_fun (const void *lhs, const void *rhs)
 {
     return strcmp (((fun_t *) lhs)->name, ((fun_t *) rhs)->name);
@@ -1436,9 +1440,8 @@ static int type_key (char ty_key)
     }
 }
 
-int
-magic_signature_check (char *opname, char *funname, char *signature,
-                       int args_nr, val_t * args, int line, int column)
+int magic_signature_check (const char *opname, const char *funname, const char *signature,
+                           int args_nr, val_t * args, int line, int column)
 {
     int  i;
     for (i = 0; i < args_nr; i++)
@@ -1520,8 +1523,13 @@ magic_signature_check (char *opname, char *funname, char *signature,
     return 0;
 }
 
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
 void magic_eval (env_t * env, val_t * dest, expr_t * expr)
 {
+#ifdef RECENT_GCC
+#pragma GCC diagnostic pop
+#endif
     switch (expr->ty)
     {
         case EXPR_VAL:
@@ -1598,9 +1606,16 @@ void magic_eval (env_t * env, val_t * dest, expr_t * expr)
                     dest->ty = TY_UNDEF;
                 else
                 {
+#ifdef RECENT_GCC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#endif
                     env_t *env = t->env;
-                    val_t v = VAR (id);
-                    magic_copy_var (dest, &v);
+#ifdef RECENT_GCC
+#pragma GCC diagnostic pop
+#endif
+                    val_t val = VAR (id);
+                    magic_copy_var (dest, &val);
                 }
             }
             else
@@ -1620,6 +1635,9 @@ void magic_eval (env_t * env, val_t * dest, expr_t * expr)
             break;
     }
 }
+#ifndef RECENT_GCC
+#pragma GCC diagnostic pop
+#endif
 
 int magic_eval_int (env_t * env, expr_t * expr)
 {
diff --git a/src/map/magic-expr.hpp b/src/map/magic-expr.hpp
index 4551585..7a251df 100644
--- a/src/map/magic-expr.hpp
+++ b/src/map/magic-expr.hpp
@@ -29,16 +29,16 @@
  */
 typedef struct fun
 {
-    char *name;
-    char *signature;
+    const char *name;
+    const char *signature;
     char ret_ty;
     int  (*fun) (env_t * env, int args_nr, val_t * result, val_t * args);
 } fun_t;
 
 typedef struct op
 {
-    char *name;
-    char *signature;
+    const char *name;
+    const char *signature;
     int  (*op) (env_t * env, int args_nr, val_t * args);
 } op_t;
 
diff --git a/src/map/magic-interpreter-base.cpp b/src/map/magic-interpreter-base.cpp
index 1dc90a5..0305192 100644
--- a/src/map/magic-interpreter-base.cpp
+++ b/src/map/magic-interpreter-base.cpp
@@ -46,7 +46,7 @@ env_t magic_default_env = { &magic_conf, NULL };
 
 static int spells_sorted = 0;
 
-char *magic_find_invocation (char *spellname)
+const char *magic_find_invocation(const char *spellname)
 {
     int  i;
 
@@ -99,7 +99,7 @@ static int compare_teleport_anchor (const void *lhs, const void *rhs)
                    (*((teleport_anchor_t **) rhs))->invocation);
 }
 
-char *magic_find_anchor_invocation (char *anchor_name)
+const char *magic_find_anchor_invocation(const char *anchor_name)
 {
     int  i;
 
diff --git a/src/map/magic-interpreter-parser.ypp b/src/map/magic-interpreter-parser.ypp
index 2648be9..5fe2646 100644
--- a/src/map/magic-interpreter-parser.ypp
+++ b/src/map/magic-interpreter-parser.ypp
@@ -1,9 +1,13 @@
-%{
-#include "magic-interpreter.hpp"
+%code requires {
 #include "magic-expr.hpp"
+}
+%code{
+#include "magic-interpreter-parser.hpp"
+
+#include "magic-interpreter.hpp"
 #include <stdarg.h>
 
-magic_conf_t magic_conf;
+#define YYLEX_PARAM 0, 0
 
 static int
 intern_id(const char *id_name);
@@ -49,8 +53,7 @@ add_teleport_anchor(teleport_anchor_t *anchor, int line_nr);
 static effect_t *
 op_effect(char *name, int args_nr, expr_t **args, int line, int column);
 
-int
-magic_frontend_lex(void);
+int magic_frontend_lex(YYSTYPE *, YYLTYPE *);
 
 static void
 install_proc(proc_t *proc);
@@ -64,8 +67,7 @@ bind_constant(char *name, val_t *val, int line_nr);
 static val_t *
 find_constant(char *name);
 
-
-%}
+}
 
 %name-prefix="magic_frontend_"
 
@@ -678,7 +680,7 @@ effect			: '(' effect_list ')'
                                 }
 			| SCRIPT_DATA
                         	{ $$ = new_effect(EFFECT_SCRIPT);
-                                  $$->e.e_script = parse_script((unsigned char *) $1, @1.first_line);
+                                  $$->e.e_script = parse_script($1, @1.first_line);
                                   free($1);
                                   if ($$->e.e_script == NULL)
                                       fail(@1.first_line, @1.first_column, "Failed to compile script\n");
@@ -771,8 +773,8 @@ add_teleport_anchor(teleport_anchor_t *anchor, int line_nr)
 }
 
 
-static void
-fail(int line, int column, const char *fmt, ...)
+static __attribute__((format(printf, 3, 4)))
+void fail(int line, int column, const char *fmt, ...)
 {
         va_list ap;
         fprintf(stderr, "[magic-init]  L%d:%d: ", line, column);
@@ -1030,13 +1032,14 @@ find_constant(char *name)
 
 extern FILE *magic_frontend_in;
 
-int
-magic_init(char *conffile) // must be called after itemdb initialisation
+// must be called after itemdb initialisation
+int magic_init(const char *conffile)
 {
         int error_flag = 0;
 
         magic_conf.vars_nr = 0;
-        magic_conf.var_name = (char **)malloc(1);
+        // can these be left NULL ? I'm afraid to change anything.
+        magic_conf.var_name = (const char **)malloc(1);
         magic_conf.vars = (val_t *)malloc(1);
 
         magic_conf.obscure_chance = 95;
diff --git a/src/map/magic-interpreter.hpp b/src/map/magic-interpreter.hpp
index e040975..21e8d39 100644
--- a/src/map/magic-interpreter.hpp
+++ b/src/map/magic-interpreter.hpp
@@ -226,7 +226,7 @@ typedef struct effect
             struct effect *true_branch, *false_branch;
         } e_if;
         expr_t *e_sleep;        /* sleep time */
-        unsigned char *e_script;
+        const ScriptCode *e_script;
         struct
         {
             int  id;
@@ -497,4 +497,8 @@ typedef struct
     effect_t *body;
 } proc_t;
 
+// must be called after itemdb initialisation
+int magic_init(const char *);
+void spell_update_location (invocation_t * invocation);
+
 #endif /* !defined (MAGIC_INTERPRETER_H) */
diff --git a/src/map/magic-stmt.cpp b/src/map/magic-stmt.cpp
index 20130dd..5dd51d7 100644
--- a/src/map/magic-stmt.cpp
+++ b/src/map/magic-stmt.cpp
@@ -3,10 +3,6 @@
 #include "magic-expr-eval.hpp"
 #include "magic-interpreter-aux.hpp"
 
-int
- clif_spawn_fake_npc_for_player (struct map_session_data *sd,
-                                 int fake_npc_id);
-
 #define INVISIBLE_NPC 127       /* used for local spell effects */
 
 //#define DEBUG
@@ -683,7 +679,8 @@ static int op_spawn (env_t * env, int args_nr, val_t * args)
     return 0;
 }
 
-static char *get_invocation_name (env_t * env)
+static
+const char *get_invocation_name (env_t * env)
 {
     invocation_t *invocation;
 
@@ -853,6 +850,7 @@ static op_t operations[] = {
 static int operations_sorted = 0;
 static int operation_count;
 
+static
 int compare_operations (const void *lhs, const void *rhs)
 {
     return strcmp (((op_t *) lhs)->name, ((op_t *) rhs)->name);
@@ -1405,16 +1403,14 @@ static int spell_run (invocation_t * invocation, int allow_delete)
                 if (caster)
                 {
                     env_t *env = invocation->env;
-                    character_t *caster =
-                        (character_t *) map_id2bl (invocation->caster);
-                    argrec_t arg[] = { {"@target",.v.i =
+                    argrec_t arg[] = { {"@target",
                                         VAR (VAR_TARGET).ty ==
                                         TY_ENTITY ? 0 : VAR (VAR_TARGET).
                                         v.v_int}
                     ,
-                    {"@caster",.v.i = invocation->caster}
+                    {"@caster", invocation->caster}
                     ,
-                    {"@caster_name$",.v.s = caster ? caster->status.name : ""}
+                    {"@caster_name$", caster ? caster->status.name : ""}
                     };
                     int  message_recipient =
                         VAR (VAR_SCRIPTTARGET).ty ==
@@ -1501,8 +1497,7 @@ static int spell_run (invocation_t * invocation, int allow_delete)
 #undef REFRESH_INVOCATION
 }
 
-extern void spell_update_location (invocation_t * invocation);
-
+static
 void spell_execute_d (invocation_t * invocation, int allow_deletion)
 {
     int  delta;
diff --git a/src/map/magic.cpp b/src/map/magic.cpp
index 03b18a4..4311f09 100644
--- a/src/map/magic.cpp
+++ b/src/map/magic.cpp
@@ -122,8 +122,6 @@ int magic_message (character_t * caster, char *spell_, size_t spell_len)
     return 0;                   /* Not a spell */
 }
 
-int  magic_init (char *conffile);   // must be called after itemdb initialisation
-
 void do_init_magic (void)
 {
     magic_init (MAGIC_CONFIG_FILE);
diff --git a/src/map/magic.hpp b/src/map/magic.hpp
index 0c776ea..168a05f 100644
--- a/src/map/magic.hpp
+++ b/src/map/magic.hpp
@@ -53,14 +53,14 @@ void do_init_magic (void);
  *
  * Returns NULL if not found
  */
-char *magic_find_invocation (char *spellame);
+const char *magic_find_invocation (const char *spellame);
 
 /**
  * Identifies the invocation used to denote a teleport location
  *
  * Returns NULL if not found
  */
-char *magic_find_anchor_invocation (char *teleport_location);
+const char *magic_find_anchor_invocation (const char *teleport_location);
 
 /**
  * Execute a spell invocation and sets up timers to finish
diff --git a/src/map/map.cpp b/src/map/map.cpp
index 3c778df..6470d97 100644
--- a/src/map/map.cpp
+++ b/src/map/map.cpp
@@ -1019,7 +1019,7 @@ int map_addflooritem (struct item *item_data, int amount, int m, int x, int y,
  * charid_dbへ追加(返信待ちがあれば返信)
  *------------------------------------------
  */
-void map_addchariddb (int charid, char *name)
+void map_addchariddb (int charid, const char *name)
 {
     struct charid2nick *p = (struct charid2nick *)numdb_search (charid_db, charid);
     if (p == NULL)
@@ -1277,7 +1277,7 @@ struct map_session_data *map_get_prev_session (struct map_session_data *d)
  * return map_session_data pointer or NULL
  *------------------------------------------
  */
-struct map_session_data *map_nick2sd (char *nick)
+struct map_session_data *map_nick2sd (const char *nick)
 {
     int  i, quantity = 0, nicklen;
     struct map_session_data *sd = NULL;
@@ -1375,6 +1375,7 @@ int map_addnpc (int m, struct npc_data *nd)
     return i;
 }
 
+static
 void map_removenpc (void)
 {
     int  i, m, n = 0;
@@ -1406,7 +1407,7 @@ void map_removenpc (void)
  * map名からmap番号へ変換
  *------------------------------------------
  */
-int map_mapname2mapid (char *name)
+int map_mapname2mapid (const char *name)
 {
     struct map_data *md = (struct map_data *)strdb_search (map_db, name);
     if (md == NULL || md->gat == NULL)
@@ -1418,7 +1419,7 @@ int map_mapname2mapid (char *name)
  * 他鯖map名からip,port変換
  *------------------------------------------
  */
-int map_mapname2ipport (char *name, int *ip, int *port)
+int map_mapname2ipport (const char *name, struct in_addr *ip, int *port)
 {
     struct map_data_other_server *mdos = (struct map_data_other_server *)strdb_search (map_db, name);
     if (mdos == NULL || mdos->gat)
@@ -1553,7 +1554,7 @@ int map_setcell (int m, int x, int y, int t)
  * 他鯖管理のマップをdbに追加
  *------------------------------------------
  */
-int map_setipport (char *name, unsigned long ip, int port)
+int map_setipport (const char *name, struct in_addr ip, int port)
 {
     struct map_data_other_server *mdos = NULL;
 
@@ -1571,9 +1572,9 @@ int map_setipport (char *name, unsigned long ip, int port)
     {
         if (md->gat)
         {                       // local -> check data
-            if (ip != clif_getip () || port != clif_getport ())
+            if (ip.s_addr != clif_getip ().s_addr || port != clif_getport ())
             {
-                printf ("from char server : %s -> %08lx:%d\n", name, ip,
+                printf ("from char server : %s -> %s:%d\n", name, ip2str(ip),
                         port);
                 return 1;
             }
@@ -1727,6 +1728,7 @@ static int map_readmap (int m, char *fn, char *alias)
  * 全てのmapデータを読み込む
  *------------------------------------------
  */
+static
 int map_readallmap (void)
 {
     int  i, maps_removed = 0;
@@ -1785,6 +1787,7 @@ int map_readallmap (void)
  * 読み込むmapを追加する
  *------------------------------------------
  */
+static
 int map_addmap (char *mapname)
 {
     if (strcasecmp (mapname, "clear") == 0)
@@ -1868,7 +1871,7 @@ static void map_start_logfile (long suffix)
     free (filename_buf);
 }
 
-static void map_set_logfile (char *filename)
+static void map_set_logfile (const char *filename)
 {
     struct timeval tv;
 
@@ -1880,7 +1883,7 @@ static void map_set_logfile (char *filename)
     MAP_LOG ("log-start v3");
 }
 
-void map_write_log (char *format, ...)
+void map_write_log (const char *format, ...)
 {
     struct timeval tv;
     va_list args;
@@ -1903,7 +1906,8 @@ void map_write_log (char *format, ...)
  * 設定ファイルを読み込む
  *------------------------------------------
  */
-int map_config_read (char *cfgName)
+static
+int map_config_read (const char *cfgName)
 {
     char line[1024], w1[1024], w2[1024];
     FILE *fp;
@@ -2131,11 +2135,11 @@ int do_init (int argc, char *argv[])
 {
     int  i;
 
-    unsigned char *MAP_CONF_NAME = "conf/map_athena.conf";
-    unsigned char *BATTLE_CONF_FILENAME = "conf/battle_athena.conf";
-    unsigned char *ATCOMMAND_CONF_FILENAME = "conf/atcommand_athena.conf";
-    unsigned char *SCRIPT_CONF_NAME = "conf/script_athena.conf";
-    unsigned char *MSG_CONF_NAME = "conf/msg_athena.conf";
+    const char *MAP_CONF_NAME = "conf/map_athena.conf";
+    const char *BATTLE_CONF_FILENAME = "conf/battle_athena.conf";
+    const char *ATCOMMAND_CONF_FILENAME = "conf/atcommand_athena.conf";
+    const char *SCRIPT_CONF_NAME = "conf/script_athena.conf";
+    const char *MSG_CONF_NAME = "conf/msg_athena.conf";
 
     for (i = 1; i < argc; i++)
     {
@@ -2159,7 +2163,6 @@ int do_init (int argc, char *argv[])
     battle_config_read (BATTLE_CONF_FILENAME);
     atcommand_config_read (ATCOMMAND_CONF_FILENAME);
     script_config_read (SCRIPT_CONF_NAME);
-    msg_config_read (MSG_CONF_NAME);
 
     id_db = numdb_init ();
     map_db = strdb_init (16);
diff --git a/src/map/map.hpp b/src/map/map.hpp
index 5d3e0a2..8130739 100644
--- a/src/map/map.hpp
+++ b/src/map/map.hpp
@@ -10,6 +10,7 @@
 #include "../common/mmo.hpp"
 #include "../common/timer.hpp"
 #include "../common/db.hpp"
+#include "script.hpp"
 
 #ifndef MAX
 #  define MAX(x,y) (((x)>(y)) ? (x) : (y))
@@ -225,7 +226,7 @@ struct map_session_data
     int  npc_menu;
     int  npc_amount;
     int  npc_stack, npc_stackmax;
-    char *npc_script, *npc_scriptroot;
+    const ScriptCode *npc_script, *npc_scriptroot;
     char *npc_stackbuf;
     char npc_str[256];
     struct
@@ -404,7 +405,7 @@ struct map_session_data
     time_t packet_flood_reset_due;
     int packet_flood_in;
 
-    in_addr_t ip;
+    struct in_addr ip;
 };
 
 struct npc_timerevent_list
@@ -435,7 +436,7 @@ struct npc_data
     {
         struct
         {
-            char *script;
+            const ScriptCode *script;
             short xs, ys;
             int  guild_id;
             int  timer, timerid, timeramount, nexttimer;
@@ -614,7 +615,7 @@ struct map_data_other_server
 {
     char name[24];
     unsigned char *gat;         // NULL固定にして判断
-    unsigned long ip;
+    struct in_addr ip;
     unsigned int port;
 };
 #define read_gat(m,x,y) (map[m].gat[(x)+(y)*map[m].xs])
@@ -701,8 +702,8 @@ struct chat_data
 {
     struct block_list bl;
 
-    unsigned char pass[8];      /* password */
-    unsigned char title[61];    /* room title MAX 60 */
+    char pass[8];      /* password */
+    char title[61];    /* room title MAX 60 */
     unsigned char limit;        /* join limit */
     unsigned char trigger;
     unsigned char users;        /* current users */
@@ -758,7 +759,8 @@ int  map_quit (struct map_session_data *);
 int  map_addnpc (int, struct npc_data *);
 
 extern FILE *map_logfile;
-void map_write_log (char *format, ...);
+__attribute__((format(printf, 1, 2)))
+void map_write_log (const char *format, ...);
 #define MAP_LOG(format, args...) {if (map_logfile) map_write_log(format, ##args);}
 
 #define MAP_LOG_PC(sd, fmt, args...) MAP_LOG("PC%d %d:%d,%d " fmt, sd->status.char_id, sd->bl.m, sd->bl.x, sd->bl.y, ## args)
@@ -776,23 +778,23 @@ int  map_addflooritem (struct item *, int, int, int, int,
 int  map_searchrandfreecell (int, int, int, int);
 
 // キャラid=>キャラ名 変換関連
-void map_addchariddb (int charid, char *name);
+void map_addchariddb (int charid, const char *name);
 void map_delchariddb (int charid);
 int  map_reqchariddb (struct map_session_data *sd, int charid);
 char *map_charid2nick (int);
 
 struct map_session_data *map_id2sd (int);
 struct block_list *map_id2bl (int);
-int  map_mapname2mapid (char *);
-int  map_mapname2ipport (char *, int *, int *);
-int  map_setipport (char *name, unsigned long ip, int port);
-int  map_eraseipport (char *name, unsigned long ip, int port);
+int  map_mapname2mapid (const char *);
+int  map_mapname2ipport (const char *, struct in_addr *, int *);
+int  map_setipport (const char *name, struct in_addr ip, int port);
+int  map_eraseipport (const char *name, struct in_addr ip, int port);
 void map_addiddb (struct block_list *);
 void map_deliddb (struct block_list *bl);
 int  map_foreachiddb (db_func_t, ...);
 void map_addnickdb (struct map_session_data *);
 int  map_scriptcont (struct map_session_data *sd, int id);  /* Continues a script either on a spell or on an NPC */
-struct map_session_data *map_nick2sd (char *);
+struct map_session_data *map_nick2sd (const char *);
 int  compare_item (struct item *a, struct item *b);
 
 struct map_session_data *map_get_first_session (void);
diff --git a/src/map/mob.cpp b/src/map/mob.cpp
index a722920..c329a14 100644
--- a/src/map/mob.cpp
+++ b/src/map/mob.cpp
@@ -44,7 +44,6 @@ struct mob_db mob_db[2001];
 static int distance (int, int, int, int);
 static int mob_makedummymobdb (int);
 static void mob_timer (timer_id, tick_t, custom_id_t, custom_data_t);
-int  mobskill_use (struct mob_data *md, unsigned int tick, int event);
 int  mobskill_deltimer (struct mob_data *md);
 int  mob_skillid2skillidx (int mob_class, int skillid);
 int  mobskill_use_id (struct mob_data *md, struct block_list *target,
@@ -90,6 +89,7 @@ static void mob_init (struct mob_data *md);
  * The minimum data set for MOB spawning
  *------------------------------------------
  */
+static
 int mob_spawn_dataset (struct mob_data *md, const char *mobname, int mob_class)
 {
     nullpo_retr (0, md);
@@ -259,12 +259,13 @@ static void mob_mutate (struct mob_data *md, int stat, int intensity)   // inten
 }
 
 // This calculates the exp of a given mob
+static
 int mob_gen_exp (struct mob_db *mob)
 {
     if (mob->max_hp <= 1)
         return 1;
     double mod_def = 100 - mob->def;
-    if (mod_def == 0)
+    if (100 == mob->def)
         mod_def = 1;
     double effective_hp =
         ((50 - mob->luk) * mob->max_hp / 50.0) +
@@ -338,7 +339,7 @@ static void mob_init (struct mob_data *md)
  * The MOB appearance for one time (for scripts)
  *------------------------------------------
  */
-int mob_once_spawn (struct map_session_data *sd, char *mapname,
+int mob_once_spawn (struct map_session_data *sd, const char *mapname,
                     int x, int y, const char *mobname, int mob_class, int amount,
                     const char *event)
 {
@@ -444,7 +445,7 @@ int mob_once_spawn (struct map_session_data *sd, char *mapname,
  * The MOB appearance for one time (& area specification for scripts)
  *------------------------------------------
  */
-int mob_once_spawn_area (struct map_session_data *sd, char *mapname,
+int mob_once_spawn_area (struct map_session_data *sd, const char *mapname,
                          int x0, int y0, int x1, int y1,
                          const char *mobname, int mob_class, int amount,
                          const char *event)
@@ -494,7 +495,7 @@ int mob_once_spawn_area (struct map_session_data *sd, char *mapname,
  * Summoning Guardians [Valaris]
  *------------------------------------------
  */
-int mob_spawn_guardian (struct map_session_data *sd, char *mapname,
+int mob_spawn_guardian (struct map_session_data *sd, const char *mapname,
                         int x, int y, const char *mobname, int mob_class,
                         int amount, const char *event, int guardian)
 {
@@ -663,6 +664,7 @@ int mob_get_equip (int mob_class)   // mob equip [Valaris]
  * Is MOB in the state in which the present movement is possible or not?
  *------------------------------------------
  */
+static
 int mob_can_move (struct mob_data *md)
 {
     nullpo_retr (0, md);
@@ -955,6 +957,7 @@ static int mob_attack (struct mob_data *md, unsigned int tick, int data)
  * The callback function of clif_foreachclient
  *------------------------------------------
  */
+static
 int mob_stopattacked (struct map_session_data *sd, va_list ap)
 {
     int  id;
@@ -1161,6 +1164,7 @@ static void mob_delayspawn (timer_id tid, tick_t tick, custom_id_t m, custom_dat
  * spawn timing calculation
  *------------------------------------------
  */
+static
 int mob_setdelayspawn (int id)
 {
     unsigned int spawntime, spawntime1, spawntime2, spawntime3;
@@ -1412,6 +1416,7 @@ int mob_stop_walking (struct mob_data *md, int type)
  * Reachability to a Specification ID existence place
  *------------------------------------------
  */
+static
 int mob_can_reach (struct mob_data *md, struct block_list *bl, int range)
 {
     int  dx, dy;
@@ -2542,6 +2547,7 @@ void mob_timer_delete (timer_id tid, tick_t tick, custom_id_t id, custom_data_t
  *
  *------------------------------------------
  */
+static
 int mob_deleteslave_sub (struct block_list *bl, va_list ap)
 {
     struct mob_data *md;
@@ -2583,7 +2589,7 @@ const static double damage_bonus_factor[DAMAGE_BONUS_COUNT + 1] = {
 int mob_damage (struct block_list *src, struct mob_data *md, int damage,
                 int type)
 {
-    int  i, count, minpos, mindmg;
+    int count, minpos, mindmg;
     struct map_session_data *sd = NULL, *tmpsd[DAMAGELOG_SIZE];
     struct
     {
@@ -2598,7 +2604,6 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
     double dmg_rate, tdmg, temp;
     struct item item;
     int  ret;
-    int  drop_rate;
     int  skill, sp;
 
     nullpo_retr (0, md);        //srcはNULLで呼ばれる場合もあるので、他でチェック
@@ -2659,6 +2664,7 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
     {
         if (sd != NULL)
         {
+            int i;
             for (i = 0, minpos = 0, mindmg = 0x7fffffff; i < DAMAGELOG_SIZE;
                  i++)
             {
@@ -2700,6 +2706,7 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
             }
 
             nullpo_retr (0, md2);
+            int i;
             for (i = 0, minpos = 0, mindmg = 0x7fffffff; i < DAMAGELOG_SIZE;
                  i++)
             {
@@ -2869,7 +2876,9 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
     // overkill分は無いけどsumはmax_hpとは違う
 
     tdmg = 0;
-    for (i = 0, count = 0, mvp_damage = 0; i < DAMAGELOG_SIZE; i++)
+    count = 0;
+    mvp_damage = 0;
+    for (int i = 0; i < DAMAGELOG_SIZE; i++)
     {
         if (md->dmglog[i].id == 0)
             continue;
@@ -2900,7 +2909,7 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
             dmg_rate = 1;
 
         // 経験値の分配
-        for (i = 0; i < DAMAGELOG_SIZE; i++)
+        for (int i = 0; i < DAMAGELOG_SIZE; i++)
         {
 
             int  pid, base_exp, job_exp, flag = 1;
@@ -2983,14 +2992,14 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
                 pc_gainexp (tmpsd[i], base_exp, job_exp);
         }
         // 公平分配
-        for (i = 0; i < pnum; i++)
+        for (int i = 0; i < pnum; i++)
             party_exp_share (pt[i].p, md->bl.m, pt[i].base_exp,
                              pt[i].job_exp);
 
         // item drop
         if (!(type & 1))
         {
-            for (i = 0; i < 8; i++)
+            for (int i = 0; i < 8; i++)
             {
                 struct delay_item_drop *ditem;
                 int  drop_rate;
@@ -3025,7 +3034,7 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
             }
             if (sd && sd->state.attack_type == BF_WEAPON)
             {
-                for (i = 0; i < sd->monster_drop_item_count; i++)
+                for (int i = 0; i < sd->monster_drop_item_count; i++)
                 {
                     struct delay_item_drop *ditem;
                     int  race = battle_get_race (&md->bl);
@@ -3061,7 +3070,7 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
             }
             if (md->lootitem)
             {
-                for (i = 0; i < md->lootitem_count; i++)
+                for (int i = 0; i < md->lootitem_count; i++)
                 {
                     struct delay_item_drop2 *ditem;
 
@@ -3097,10 +3106,10 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
             pc_gainexp (mvp_sd, mexp, 0);
             for (j = 0; j < 3; j++)
             {
-                i = MRAND (3);
+                int i = MRAND (3);
                 if (mob_db[md->mob_class].mvpitem[i].nameid <= 0)
                     continue;
-                drop_rate = mob_db[md->mob_class].mvpitem[i].p;
+                int drop_rate = mob_db[md->mob_class].mvpitem[i].p;
                 if (drop_rate <= 0 && battle_config.drop_rate0item == 1)
                     drop_rate = 1;
                 if (drop_rate < battle_config.item_drop_mvp_min)
@@ -3149,16 +3158,16 @@ int mob_damage (struct block_list *src, struct mob_data *md, int damage,
                 sd = mvp_sd;
             else
             {
-                struct map_session_data *tmpsd;
+                struct map_session_data *tmp_sd;
                 int  i;
                 for (i = 0; i < fd_max; i++)
                 {
-                    if (session[i] && (tmpsd = (struct map_session_data *)session[i]->session_data)
-                        && tmpsd->state.auth)
+                    if (session[i] && (tmp_sd = (struct map_session_data *)session[i]->session_data)
+                        && tmp_sd->state.auth)
                     {
-                        if (md->bl.m == tmpsd->bl.m)
+                        if (md->bl.m == tmp_sd->bl.m)
                         {
-                            sd = tmpsd;
+                            sd = tmp_sd;
                             break;
                         }
                     }
@@ -3304,6 +3313,7 @@ int mob_heal (struct mob_data *md, int heal)
  * Added by RoVeRT
  *------------------------------------------
  */
+static
 int mob_warpslave_sub (struct block_list *bl, va_list ap)
 {
     struct mob_data *md = (struct mob_data *) bl;
@@ -3322,6 +3332,7 @@ int mob_warpslave_sub (struct block_list *bl, va_list ap)
  * Added by RoVeRT
  *------------------------------------------
  */
+static
 int mob_warpslave (struct mob_data *md, int x, int y)
 {
 //printf("warp slave\n");
@@ -3417,6 +3428,7 @@ int mob_warp (struct mob_data *md, int m, int x, int y, int type)
  * 画面内の取り巻きの数計算用(foreachinarea)
  *------------------------------------------
  */
+static
 int mob_countslave_sub (struct block_list *bl, va_list ap)
 {
     int  id, *c;
@@ -3438,6 +3450,7 @@ int mob_countslave_sub (struct block_list *bl, va_list ap)
  * 画面内の取り巻きの数計算
  *------------------------------------------
  */
+static
 int mob_countslave (struct mob_data *md)
 {
     int  c = 0;
@@ -3991,6 +4004,7 @@ int mobskill_use_id (struct mob_data *md, struct block_list *target,
  * スキル使用(場所指定)
  *------------------------------------------
  */
+static
 int mobskill_use_pos (struct mob_data *md,
                       int skill_x, int skill_y, int skill_idx)
 {
@@ -4089,6 +4103,7 @@ int mobskill_use_pos (struct mob_data *md,
  * Friendly Mob whose HP is decreasing by a nearby MOB is looked for.
  *------------------------------------------
  */
+static
 int mob_getfriendhpltmaxrate_sub (struct block_list *bl, va_list ap)
 {
     int  rate;
@@ -4109,6 +4124,7 @@ int mob_getfriendhpltmaxrate_sub (struct block_list *bl, va_list ap)
     return 0;
 }
 
+static
 struct mob_data *mob_getfriendhpltmaxrate (struct mob_data *md, int rate)
 {
     struct mob_data *fr = NULL;
@@ -4126,6 +4142,7 @@ struct mob_data *mob_getfriendhpltmaxrate (struct mob_data *md, int rate)
  * What a status state suits by nearby MOB is looked for.
  *------------------------------------------
  */
+static
 int mob_getfriendstatus_sub (struct block_list *bl, va_list ap)
 {
     int  cond1, cond2;
@@ -4158,6 +4175,7 @@ int mob_getfriendstatus_sub (struct block_list *bl, va_list ap)
     return 0;
 }
 
+static
 struct mob_data *mob_getfriendstatus (struct mob_data *md, int cond1,
                                       int cond2)
 {
@@ -4180,7 +4198,7 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
 {
     struct mob_skill *ms;
 //  struct block_list *target=NULL;
-    int  i, max_hp;
+    int max_hp;
 
     nullpo_retr (0, md);
     nullpo_retr (0, ms = mob_db[md->mob_class].skill);
@@ -4196,24 +4214,24 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
     if (md->sc_data[SC_SELFDESTRUCTION].timer != -1)    //自爆中はスキルを使わない
         return 0;
 
-    for (i = 0; i < mob_db[md->mob_class].maxskill; i++)
+    for (int ii = 0; ii < mob_db[md->mob_class].maxskill; ii++)
     {
-        int  c2 = ms[i].cond2, flag = 0;
+        int  c2 = ms[ii].cond2, flag = 0;
         struct mob_data *fmd = NULL;
 
         // ディレイ中
-        if (DIFF_TICK (tick, md->skilldelay[i]) < ms[i].delay)
+        if (DIFF_TICK (tick, md->skilldelay[ii]) < ms[ii].delay)
             continue;
 
         // 状態判定
-        if (ms[i].state >= 0 && ms[i].state != md->state.skillstate)
+        if (ms[ii].state >= 0 && ms[ii].state != md->state.skillstate)
             continue;
 
         // 条件判定
-        flag = (event == ms[i].cond1);
+        flag = (event == ms[ii].cond1);
         if (!flag)
         {
-            switch (ms[i].cond1)
+            switch (ms[ii].cond1)
             {
                 case MSC_ALWAYS:
                     flag = 1;
@@ -4223,7 +4241,7 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
                     break;
                 case MSC_MYSTATUSON:   // status[num] on
                 case MSC_MYSTATUSOFF:  // status[num] off
-                    if (ms[i].cond2 == -1)
+                    if (ms[ii].cond2 == -1)
                     {
                         int  j;
                         for (j = SC_STONE; j <= SC_BLIND && !flag; j++)
@@ -4232,21 +4250,21 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
                         }
                     }
                     else
-                        flag = (md->sc_data[ms[i].cond2].timer != -1);
-                    flag ^= (ms[i].cond1 == MSC_MYSTATUSOFF);
+                        flag = (md->sc_data[ms[ii].cond2].timer != -1);
+                    flag ^= (ms[ii].cond1 == MSC_MYSTATUSOFF);
                     break;
                 case MSC_FRIENDHPLTMAXRATE:    // friend HP < maxhp%
                     flag =
                         ((fmd =
                           mob_getfriendhpltmaxrate (md,
-                                                    ms[i].cond2)) != NULL);
+                                                    ms[ii].cond2)) != NULL);
                     break;
                 case MSC_FRIENDSTATUSON:   // friend status[num] on
                 case MSC_FRIENDSTATUSOFF:  // friend status[num] off
                     flag =
                         ((fmd =
-                          mob_getfriendstatus (md, ms[i].cond1,
-                                               ms[i].cond2)) != NULL);
+                          mob_getfriendstatus (md, ms[ii].cond1,
+                                               ms[ii].cond2)) != NULL);
                     break;
                 case MSC_NOTINTOWN:     // Only outside of towns.
                     flag = !map[md->bl.m].flag.town;
@@ -4271,17 +4289,17 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
         }
 
         // 確率判定
-        if (flag && MRAND (10000) < ms[i].permillage)
+        if (flag && MRAND (10000) < ms[ii].permillage)
         {
 
-            if (skill_get_inf (ms[i].skill_id) & 2)
+            if (skill_get_inf (ms[ii].skill_id) & 2)
             {
                 // 場所指定
                 struct block_list *bl = NULL;
                 int  x = 0, y = 0;
-                if (ms[i].target <= MST_AROUND)
+                if (ms[ii].target <= MST_AROUND)
                 {
-                    if (ms[i].target == MST_MASTER)
+                    if (ms[ii].target == MST_MASTER)
                     {
                         bl = &md->bl;
                         if (md->master_id)
@@ -4289,11 +4307,11 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
                     }
                     else
                     {
-                        bl = ((ms[i].target == MST_TARGET
-                               || ms[i].target ==
+                        bl = ((ms[ii].target == MST_TARGET
+                               || ms[ii].target ==
                                MST_AROUND5) ? map_id2bl (md->
                                                          target_id)
-                              : (ms[i].target ==
+                              : (ms[ii].target ==
                                  MST_FRIEND) ? &fmd->bl : &md->bl);
                     }
 
@@ -4306,7 +4324,7 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
                 if (x <= 0 || y <= 0)
                     continue;
                 // 自分の周囲
-                if (ms[i].target >= MST_AROUND1)
+                if (ms[ii].target >= MST_AROUND1)
                 {
                     int  bx = x, by = y, i = 0, c, m = bl->m, r =
                         ms[i].target - MST_AROUND1;
@@ -4326,7 +4344,7 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
                     }
                 }
                 // 相手の周囲
-                if (ms[i].target >= MST_AROUND5)
+                if (ms[ii].target >= MST_AROUND5)
                 {
                     int  bx = x, by = y, i = 0, c, m = bl->m, r =
                         (ms[i].target - MST_AROUND5) + 1;
@@ -4345,37 +4363,37 @@ int mobskill_use (struct mob_data *md, unsigned int tick, int event)
                         y = by;
                     }
                 }
-                if (!mobskill_use_pos (md, x, y, i))
+                if (!mobskill_use_pos (md, x, y, ii))
                     return 0;
 
             }
             else
             {
-                if (ms[i].target == MST_MASTER)
+                if (ms[ii].target == MST_MASTER)
                 {
                     struct block_list *bl = &md->bl;
                     if (md->master_id)
                         bl = map_id2bl (md->master_id);
 
-                    if (bl && !mobskill_use_id (md, bl, i))
+                    if (bl && !mobskill_use_id (md, bl, ii))
                         return 0;
                 }
                 // ID指定
-                if (ms[i].target <= MST_FRIEND)
+                if (ms[ii].target <= MST_FRIEND)
                 {
                     struct block_list *bl = NULL;
-                    bl = ((ms[i].target ==
+                    bl = ((ms[ii].target ==
                            MST_TARGET) ? map_id2bl (md->
-                                                    target_id) : (ms[i].target
+                                                    target_id) : (ms[ii].target
                                                                   ==
                                                                   MST_FRIEND)
                           ? &fmd->bl : &md->bl);
-                    if (bl && !mobskill_use_id (md, bl, i))
+                    if (bl && !mobskill_use_id (md, bl, ii))
                         return 0;
                 }
             }
-            if (ms[i].emotion >= 0)
-                clif_emotion (&md->bl, ms[i].emotion);
+            if (ms[ii].emotion >= 0)
+                clif_emotion (&md->bl, ms[ii].emotion);
             return 1;
         }
     }
@@ -4521,30 +4539,30 @@ static int mob_readdb (void)
 {
     FILE *fp;
     char line[1024];
-    char *filename[] = { "db/mob_db.txt", "db/mob_db2.txt" };
-    int  i;
+    const char *filename[] = { "db/mob_db.txt", "db/mob_db2.txt" };
 
     memset (mob_db, 0, sizeof (mob_db));
 
-    for (i = 0; i < 2; i++)
+    for (int j = 0; j < 2; j++)
     {
 
-        fp = fopen_ (filename[i], "r");
+        fp = fopen_ (filename[j], "r");
         if (fp == NULL)
         {
-            if (i > 0)
+            if (j > 0)
                 continue;
             return -1;
         }
         while (fgets (line, 1020, fp))
         {
-            int  mob_class, i;
+            int  mob_class;
             char *str[57], *p, *np;
 
             if (line[0] == '/' && line[1] == '/')
                 continue;
 
-            for (i = 0, p = line; i < 57; i++)
+            p = line;
+            for (int i = 0; i < 57; i++)
             {
                 while (*p == '\t' || *p == ' ')
                     p++;
@@ -4615,7 +4633,7 @@ static int mob_readdb (void)
             mob_db[mob_class].amotion = atoi (str[27]);
             mob_db[mob_class].dmotion = atoi (str[28]);
 
-            for (i = 0; i < 8; i++)
+            for (int i = 0; i < 8; i++)
             {
                 int  rate = 0, type, ratemin, ratemax;
                 mob_db[mob_class].dropitem[i].nameid = atoi (str[29 + i * 2]);
@@ -4660,7 +4678,7 @@ static int mob_readdb (void)
             mob_db[mob_class].mexp =
                 atoi (str[45]) * battle_config.mvp_exp_rate / 100;
             mob_db[mob_class].mexpper = atoi (str[46]);
-            for (i = 0; i < 3; i++)
+            for (int i = 0; i < 3; i++)
             {
                 mob_db[mob_class].mvpitem[i].nameid = atoi (str[47 + i * 2]);
                 mob_db[mob_class].mvpitem[i].p =
@@ -4670,7 +4688,7 @@ static int mob_readdb (void)
             mob_db[mob_class].mutations_nr = atoi (str[55]);
             mob_db[mob_class].mutation_power = atoi (str[56]);
 
-            for (i = 0; i < MAX_RANDOMMONSTER; i++)
+            for (int i = 0; i < MAX_RANDOMMONSTER; i++)
                 mob_db[mob_class].summonper[i] = 0;
             mob_db[mob_class].maxskill = 0;
 
@@ -4688,7 +4706,7 @@ static int mob_readdb (void)
                 mob_db[mob_class].base_exp = mob_gen_exp (&mob_db[mob_class]);
         }
         fclose_ (fp);
-        printf ("read %s done\n", filename[i]);
+        printf ("read %s done\n", filename[j]);
     }
     return 0;
 }
@@ -4936,7 +4954,7 @@ static int mob_readskilldb (void)
     "around", MST_AROUND},};
 
     int  x;
-    char *filename[] = { "db/mob_skill_db.txt", "db/mob_skill_db2.txt" };
+    const char *filename[] = { "db/mob_skill_db.txt", "db/mob_skill_db2.txt" };
 
     for (x = 0; x < 2; x++)
     {
diff --git a/src/map/mob.hpp b/src/map/mob.hpp
index 6161bab..19addf2 100644
--- a/src/map/mob.hpp
+++ b/src/map/mob.hpp
@@ -95,14 +95,14 @@ enum
 
 int  mobdb_searchname (const char *str);
 int  mobdb_checkid (const int id);
-int  mob_once_spawn (struct map_session_data *sd, char *mapname,
+int  mob_once_spawn (struct map_session_data *sd, const char *mapname,
                      int x, int y, const char *mobname, int class_, int amount,
                      const char *event);
-int  mob_once_spawn_area (struct map_session_data *sd, char *mapname, int x0,
+int  mob_once_spawn_area (struct map_session_data *sd, const char *mapname, int x0,
                           int y0, int x1, int y1, const char *mobname,
                           int class_, int amount, const char *event);
 
-int  mob_spawn_guardian (struct map_session_data *sd, char *mapname,    // Spawning Guardians [Valaris]
+int  mob_spawn_guardian (struct map_session_data *sd, const char *mapname,    // Spawning Guardians [Valaris]
                          int x, int y, const char *mobname, int class_, int amount, const char *event, int guardian);    // Spawning Guardians [Valaris]
 
 int  mob_walktoxy (struct mob_data *md, int x, int y, int easy);
diff --git a/src/map/npc.cpp b/src/map/npc.cpp
index b2612f0..c25f585 100644
--- a/src/map/npc.cpp
+++ b/src/map/npc.cpp
@@ -58,6 +58,7 @@ static struct tm ev_tm_b;       // 時計イベント用
  * npc_enable_sub 有効時にOnTouchイベントを実行
  *------------------------------------------
  */
+static
 int npc_enable_sub (struct block_list *bl, va_list ap)
 {
     struct map_session_data *sd;
@@ -248,6 +249,7 @@ int npc_timer(int tid,unsigned int tick,int id,int data)	// Added by RoVeRT
  * npc_parse_script->strdb_foreachから呼ばれる
  *------------------------------------------
  */
+static
 int npc_event_export (void *key, void *data, va_list ap)
 {
     char *lname = (char *) key;
@@ -287,6 +289,7 @@ int npc_event_export (void *key, void *data, va_list ap)
  * 全てのNPCのOn*イベント実行
  *------------------------------------------
  */
+static
 void npc_event_doall_sub (db_key_t key, db_val_t data, va_list ap)
 {
     const char *p = key.s;
@@ -324,6 +327,7 @@ int npc_event_doall_l (const char *name, int rid, int argc, argrec_t * args)
     return c;
 }
 
+static
 void npc_event_do_sub (db_key_t key, db_val_t data, va_list ap)
 {
     const char *p = key.s;
@@ -367,6 +371,7 @@ int npc_event_do_l (const char *name, int rid, int argc, argrec_t * args)
  * 時計イベント実行
  *------------------------------------------
  */
+static
 void npc_event_do_clock (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     time_t timer;
@@ -415,6 +420,7 @@ int npc_event_do_oninit (void)
  * OnTimer NPC event - by RoVeRT
  *------------------------------------------
  */
+static
 int npc_addeventtimer (struct npc_data *nd, int tick, const char *name)
 {
     int  i;
@@ -436,6 +442,7 @@ int npc_addeventtimer (struct npc_data *nd, int tick, const char *name)
     return 0;
 }
 
+static
 int npc_deleventtimer (struct npc_data *nd, const char *name)
 {
     int  i;
@@ -453,6 +460,7 @@ int npc_deleventtimer (struct npc_data *nd, const char *name)
     return 0;
 }
 
+static
 int npc_cleareventtimer (struct npc_data *nd)
 {
     int  i;
@@ -466,6 +474,7 @@ int npc_cleareventtimer (struct npc_data *nd)
     return 0;
 }
 
+static
 void npc_do_ontimer_sub (db_key_t key, db_val_t data, va_list ap)
 {
     const char *p = key.s;
@@ -497,9 +506,9 @@ void npc_do_ontimer_sub (db_key_t key, db_val_t data, va_list ap)
     }
 }
 
-int npc_do_ontimer (int npc_id, struct map_session_data *sd, int option)
+int npc_do_ontimer (int id, struct map_session_data *sd, int option)
 {
-    strdb_foreach (ev_db, npc_do_ontimer_sub, &npc_id, sd, option);
+    strdb_foreach (ev_db, npc_do_ontimer_sub, &id, sd, option);
     return 0;
 }
 
@@ -508,6 +517,7 @@ int npc_do_ontimer (int npc_id, struct map_session_data *sd, int option)
  * npc_parse_script->strdb_foreachから呼ばれる
  *------------------------------------------
  */
+static
 int npc_timerevent_import (void *key, void *data, va_list ap)
 {
     char *lname = (char *) key;
@@ -519,7 +529,8 @@ int npc_timerevent_import (void *key, void *data, va_list ap)
     {
         // タイマーイベント
         struct npc_timerevent_list *te = nd->u.scr.timer_event;
-        int  j, i = nd->u.scr.timeramount;
+        int  j;
+        i = nd->u.scr.timeramount;
         RECREATE (te, struct npc_timerevent_list, i+1);
         for (j = 0; j < i; j++)
         {
@@ -542,6 +553,7 @@ int npc_timerevent_import (void *key, void *data, va_list ap)
  * タイマーイベント実行
  *------------------------------------------
  */
+static
 void npc_timerevent (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     int  next, t;
@@ -744,6 +756,7 @@ int npc_event (struct map_session_data *sd, const char *eventname,
     return 0;
 }
 
+static
 void npc_command_sub (db_key_t key, db_val_t data, va_list ap)
 {
     const char *p = key.s;
@@ -762,7 +775,7 @@ void npc_command_sub (db_key_t key, db_val_t data, va_list ap)
     }
 }
 
-int npc_command (struct map_session_data *sd, char *npcname, char *command)
+int npc_command (struct map_session_data *sd, const char *npcname, const char *command)
 {
     strdb_foreach (ev_db, npc_command_sub, npcname, command);
 
@@ -1184,6 +1197,7 @@ int npc_selllist (struct map_session_data *sd, int n,
  * 読み込むnpcファイルのクリア
  *------------------------------------------
  */
+static
 void npc_clearsrcfile (void)
 {
     struct npc_src_list *p = npc_src_first;
@@ -1256,7 +1270,7 @@ void npc_delsrcfile (char *name)
  * warp行解析
  *------------------------------------------
  */
-int npc_parse_warp (char *w1, char *w2, char *w3, char *w4)
+int npc_parse_warp (const char *w1, const char *w2, const char *w3, const char *w4)
 {
     int  x, y, xs, ys, to_x, to_y, m;
     int  i, j;
@@ -1431,6 +1445,7 @@ static int npc_parse_shop (char *w1, char *w2, char *w3, char *w4)
  * NPCのラベルデータコンバート
  *------------------------------------------
  */
+static
 void npc_convertlabel_db (db_key_t key, db_val_t data, va_list ap)
 {
     const char *lname = key.s;
@@ -1438,7 +1453,8 @@ void npc_convertlabel_db (db_key_t key, db_val_t data, va_list ap)
     struct npc_data *nd;
     struct npc_label_list *lst;
     int  num;
-    char *p = strchr (lname, ':');
+    // this exists for evil purposes
+    char *p = const_cast<char *>(strchr (lname, ':'));
 
     nullpo_retv (ap);
     nullpo_retv (nd = va_arg (ap, struct npc_data *));
@@ -1456,6 +1472,7 @@ void npc_convertlabel_db (db_key_t key, db_val_t data, va_list ap)
                 realloc (lst, sizeof (struct npc_label_list) * (num + 1));
 
     *p = '\0';
+    // temporarily NUL-terminate lname
     strncpy (lst[num].name, lname, sizeof(lst[num].name)-1);
     lst[num].name[sizeof(lst[num].name)-1] = '\0';
     *p = ':';
@@ -1468,16 +1485,17 @@ void npc_convertlabel_db (db_key_t key, db_val_t data, va_list ap)
  * script行解析
  *------------------------------------------
  */
-static int npc_parse_script (char *w1, char *w2, char *w3, char *w4,
-                             char *first_line, FILE * fp, int *lines)
+static
+int npc_parse_script (char *w1, char *w2, char *w3, char *w4,
+                      const char *first_line, FILE * fp, int *lines)
 {
     int  x, y, dir = 0, m, xs = 0, ys = 0, npc_class = 0;   // [Valaris] thanks to fov
     char mapname[24];
-    unsigned char *srcbuf = NULL, *script;
+    char *srcbuf = NULL;
+    const ScriptCode *script = NULL;
     int  srcsize = 65536;
     int  startline = 0;
-    unsigned char line[1024];
-    int  i;
+    char line[1024];
     struct npc_data *nd;
     int  evflag = 0;
     struct dbt *label_db;
@@ -1517,6 +1535,7 @@ static int npc_parse_script (char *w1, char *w2, char *w3, char *w4,
             srcbuf[0] = 0;
         while (1)
         {
+            int i;
             for (i = strlen (srcbuf) - 1; i >= 0 && isspace (srcbuf[i]); i--);
             if (i >= 0 && srcbuf[i] == '}')
                 break;
@@ -1705,7 +1724,7 @@ static int npc_parse_script (char *w1, char *w2, char *w3, char *w4,
 
     //-----------------------------------------
     // イベント用ラベルデータのエクスポート
-    for (i = 0; i < nd->u.scr.label_list_num; i++)
+    for (int i = 0; i < nd->u.scr.label_list_num; i++)
     {
         char *lname = nd->u.scr.label_list[i].name;
         int  pos = nd->u.scr.label_list[i].pos;
@@ -1736,12 +1755,12 @@ static int npc_parse_script (char *w1, char *w2, char *w3, char *w4,
 
     //-----------------------------------------
     // ラベルデータからタイマーイベント取り込み
-    for (i = 0; i < nd->u.scr.label_list_num; i++)
+    for (int i = 0; i < nd->u.scr.label_list_num; i++)
     {
-        int  t = 0, k = 0;
+        int  t = 0, n = 0;
         char *lname = nd->u.scr.label_list[i].name;
         int  pos = nd->u.scr.label_list[i].pos;
-        if (sscanf (lname, "OnTimer%d%n", &t, &k) == 1 && lname[k] == '\0')
+        if (sscanf (lname, "OnTimer%d%n", &t, &n) == 1 && lname[n] == '\0')
         {
             // タイマーイベント
             struct npc_timerevent_list *te = nd->u.scr.timer_event;
@@ -1783,7 +1802,8 @@ static int npc_parse_script (char *w1, char *w2, char *w3, char *w4,
 static int npc_parse_function (char *w1, char *w2, char *w3, char *w4,
                                char *first_line, FILE * fp, int *lines)
 {
-    char *srcbuf = NULL, *script;
+    char *srcbuf = NULL;
+    const ScriptCode *script;
     int  srcsize = 65536;
     int  startline = 0;
     char line[1024];
@@ -1854,7 +1874,7 @@ static int npc_parse_function (char *w1, char *w2, char *w3, char *w4,
  * mob行解析
  *------------------------------------------
  */
-int npc_parse_mob (char *w1, char *w2, char *w3, char *w4)
+int npc_parse_mob (const char *w1, const char *w2, const char *w3, const char *w4)
 {
     int  m, x, y, xs, ys, mob_class, num, delay1, delay2;
     int  i;
@@ -2125,7 +2145,7 @@ static void ev_db_final (db_key_t key, db_val_t data, va_list ap)
 }
 
 struct npc_data *npc_spawn_text (int m, int x, int y,
-                                 int npc_class, char *name, char *message)
+                                 int npc_class, const char *name, const char *message)
 {
     struct npc_data *retval =
         (struct npc_data *) calloc (1, sizeof (struct npc_data));
@@ -2171,7 +2191,7 @@ static void npc_free_internal (struct npc_data *nd)
         {
             if (nd->u.scr.script)
             {
-                free (nd->u.scr.script);
+                free (const_cast<ScriptCode *>(nd->u.scr.script));
                 nd->u.scr.script = NULL;
             }
             if (nd->u.scr.label_list)
@@ -2188,6 +2208,7 @@ static void npc_free_internal (struct npc_data *nd)
     free (nd);
 }
 
+static
 void npc_propagate_update (struct npc_data *nd)
 {
     map_foreachinarea (npc_enable_sub,
@@ -2244,6 +2265,7 @@ int do_final_npc (void)
     return 0;
 }
 
+static
 void ev_release (db_key_t key, db_val_t val)
 {
     free ((char*)key.s);
diff --git a/src/map/npc.hpp b/src/map/npc.hpp
index 6bb9370..6204316 100644
--- a/src/map/npc.hpp
+++ b/src/map/npc.hpp
@@ -12,7 +12,7 @@ int  npc_event_dequeue (struct map_session_data *sd);
 void npc_event_timer (timer_id, tick_t, custom_id_t, custom_data_t);
 int  npc_event (struct map_session_data *sd, const char *npcname, int);
 int  npc_timer_event (const char *eventname);   // Added by RoVeRT
-int  npc_command (struct map_session_data *sd, char *npcname, char *command);
+int  npc_command (struct map_session_data *sd, const char *npcname, const char *command);
 int  npc_touch_areanpc (struct map_session_data *, int, int, int);
 int  npc_click (struct map_session_data *, int);
 int  npc_scriptcont (struct map_session_data *, int);
@@ -20,8 +20,8 @@ int  npc_checknear (struct map_session_data *, int);
 int  npc_buysellsel (struct map_session_data *, int, int);
 int  npc_buylist (struct map_session_data *, int, unsigned short *);
 int  npc_selllist (struct map_session_data *, int, unsigned short *);
-int  npc_parse_mob (char *w1, char *w2, char *w3, char *w4);
-int  npc_parse_warp (char *w1, char *w2, char *w3, char *w4);
+int  npc_parse_mob (const char *w1, const char *w2, const char *w3, const char *w4);
+int  npc_parse_warp (const char *w1, const char *w2, const char *w3, const char *w4);
 
 int  npc_enable (const char *name, int flag);
 struct npc_data *npc_name2id (const char *name);
@@ -33,7 +33,7 @@ int  npc_get_new_npc_id (void);
  *
  * \param message The message to speak.  If message is NULL, the NPC will not do anything at all.
  */
-struct npc_data *npc_spawn_text (int m, int x, int y, int class_, char *name, char *message);    // message is strdup'd within
+struct npc_data *npc_spawn_text (int m, int x, int y, int class_, const char *name, const char *message);    // message is strdup'd within
 
 /**
  * Uninstalls and frees an NPC
diff --git a/src/map/party.cpp b/src/map/party.cpp
index 1c4088a..95763b8 100644
--- a/src/map/party.cpp
+++ b/src/map/party.cpp
@@ -55,18 +55,19 @@ struct party *party_search (int party_id)
     return (struct party *)numdb_search (party_db, party_id);
 }
 
+static
 void party_searchname_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct party *p = (struct party *) data, **dst;
-    char *str;
-    str = va_arg (ap, char *);
+    const char *str;
+    str = va_arg (ap, const char *);
     dst = va_arg (ap, struct party **);
     if (strcasecmp (p->name, str) == 0)
         *dst = p;
 }
 
 // パーティ名検索
-struct party *party_searchname (char *str)
+struct party *party_searchname (const char *str)
 {
     struct party *p = NULL;
     numdb_foreach (party_db, party_searchname_sub, str, &p);
@@ -74,7 +75,7 @@ struct party *party_searchname (char *str)
 }
 
 /* Process a party creation request. */
-int party_create (struct map_session_data *sd, char *name)
+int party_create (struct map_session_data *sd, const char *name)
 {
     char pname[24];
     nullpo_retr (0, sd);
@@ -97,7 +98,7 @@ int party_create (struct map_session_data *sd, char *name)
 }
 
 /* Relay the result of a party creation request. */
-int party_created (int account_id, int fail, int party_id, char *name)
+int party_created (int account_id, int fail, int party_id, const char *name)
 {
     struct map_session_data *sd;
     sd = map_id2sd (account_id);
@@ -138,6 +139,7 @@ int party_request_info (int party_id)
 }
 
 // 所属キャラの確認
+static
 int party_check_member (struct party *p)
 {
     int  i;
@@ -382,7 +384,7 @@ int party_member_added (int party_id, int account_id, int flag)
 
 // パーティ除名要求
 int party_removemember (struct map_session_data *sd, int account_id,
-                        char *name)
+                        const char *name)
 {
     struct party *p;
     int  i;
@@ -433,7 +435,7 @@ int party_leave (struct map_session_data *sd)
 }
 
 // パーティメンバが脱退した
-int party_member_leaved (int party_id, int account_id, char *name)
+int party_member_leaved (int party_id, int account_id, const char *name)
 {
     struct map_session_data *sd = map_id2sd (account_id);
     struct party *p = party_search (party_id);
@@ -512,7 +514,7 @@ int party_optionchanged (int party_id, int account_id, int exp, int item,
 }
 
 // パーティメンバの移動通知
-int party_recv_movemap (int party_id, int account_id, char *map, int online,
+int party_recv_movemap (int party_id, int account_id, const char *map, int online,
                         int lv)
 {
     struct party *p;
@@ -611,7 +613,7 @@ int party_send_logout (struct map_session_data *sd)
 }
 
 // パーティメッセージ送信
-int party_send_message (struct map_session_data *sd, char *mes, int len)
+int party_send_message (struct map_session_data *sd, const char *mes, int len)
 {
     if (sd->status.party_id == 0)
         return 0;
@@ -621,7 +623,7 @@ int party_send_message (struct map_session_data *sd, char *mes, int len)
 }
 
 // パーティメッセージ受信
-int party_recv_message (int party_id, int account_id, char *mes, int len)
+int party_recv_message (int party_id, int account_id, const char *mes, int len)
 {
     struct party *p;
     if ((p = party_search (party_id)) == NULL)
@@ -641,6 +643,7 @@ int party_check_conflict (struct map_session_data *sd)
 }
 
 // 位置やHP通知用
+static
 void party_send_xyhp_timer_sub (db_key_t key, db_val_t data, va_list ap)
 {
     struct party *p = (struct party *) data;
diff --git a/src/map/party.hpp b/src/map/party.hpp
index e40609a..b4d462e 100644
--- a/src/map/party.hpp
+++ b/src/map/party.hpp
@@ -11,22 +11,22 @@ struct block_list;
 void do_init_party (void);
 void do_final_party (void);
 struct party *party_search (int party_id);
-struct party *party_searchname (char *str);
+struct party *party_searchname (const char *str);
 
-int  party_create (struct map_session_data *sd, char *name);
-int  party_created (int account_id, int fail, int party_id, char *name);
+int  party_create (struct map_session_data *sd, const char *name);
+int  party_created (int account_id, int fail, int party_id, const char *name);
 int  party_request_info (int party_id);
 int  party_invite (struct map_session_data *sd, int account_id);
 int  party_member_added (int party_id, int account_id, int flag);
 int  party_leave (struct map_session_data *sd);
 int  party_removemember (struct map_session_data *sd, int account_id,
-                         char *name);
-int  party_member_leaved (int party_id, int account_id, char *name);
+                         const char *name);
+int  party_member_leaved (int party_id, int account_id, const char *name);
 int  party_reply_invite (struct map_session_data *sd, int account_id,
                          int flag);
 int  party_recv_noinfo (int party_id);
 int  party_recv_info (struct party *sp);
-int  party_recv_movemap (int party_id, int account_id, char *map, int online,
+int  party_recv_movemap (int party_id, int account_id, const char *map, int online,
                          int lv);
 int  party_broken (int party_id);
 int  party_optionchanged (int party_id, int account_id, int exp, int item,
@@ -36,8 +36,8 @@ int  party_changeoption (struct map_session_data *sd, int exp, int item);
 int  party_send_movemap (struct map_session_data *sd);
 int  party_send_logout (struct map_session_data *sd);
 
-int  party_send_message (struct map_session_data *sd, char *mes, int len);
-int  party_recv_message (int party_id, int account_id, char *mes, int len);
+int  party_send_message (struct map_session_data *sd, const char *mes, int len);
+int  party_recv_message (int party_id, int account_id, const char *mes, int len);
 
 int  party_check_conflict (struct map_session_data *sd);
 
diff --git a/src/map/pc.cpp b/src/map/pc.cpp
index 7d02545..256244a 100644
--- a/src/map/pc.cpp
+++ b/src/map/pc.cpp
@@ -64,6 +64,9 @@
                    pc_readglobalreg(sd, "MAGIC_EXPERIENCE") & 0xffff,	\
                    (pc_readglobalreg(sd, "MAGIC_EXPERIENCE") >> 24) & 0xff)
 
+timer_id day_timer_tid;
+timer_id night_timer_tid;
+
 static int max_weight_base[MAX_PC_CLASS];
 static int hp_coefficient[MAX_PC_CLASS];
 static int hp_coefficient2[MAX_PC_CLASS];
@@ -526,6 +529,7 @@ int pc_equippoint (struct map_session_data *sd, int n)
     return ep;
 }
 
+static
 int pc_setinventorydata (struct map_session_data *sd)
 {
     int  i, id;
@@ -540,6 +544,7 @@ int pc_setinventorydata (struct map_session_data *sd)
     return 0;
 }
 
+static
 int pc_calcweapontype (struct map_session_data *sd)
 {
     nullpo_retr (0, sd);
@@ -566,6 +571,7 @@ int pc_calcweapontype (struct map_session_data *sd)
     return 0;
 }
 
+static
 int pc_setequipindex (struct map_session_data *sd)
 {
     int  i, j;
@@ -758,7 +764,6 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
 
     struct party *p;
     struct guild *g;
-    int  i;
     unsigned long tick = gettick ();
     struct sockaddr_in sai;
     socklen_t sa_len = sizeof(struct sockaddr);
@@ -827,13 +832,13 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
     sd->doridori_counter = 0;
 
     sd->spiritball = 0;
-    for (i = 0; i < MAX_SKILL_LEVEL; i++)
+    for (int i = 0; i < MAX_SKILL_LEVEL; i++)
         sd->spirit_timer[i] = -1;
-    for (i = 0; i < MAX_SKILLTIMERSKILL; i++)
+    for (int i = 0; i < MAX_SKILLTIMERSKILL; i++)
         sd->skilltimerskill[i].timer = -1;
 
     memset (&sd->dev, 0, sizeof (struct square));
-    for (i = 0; i < 5; i++)
+    for (int i = 0; i < 5; i++)
     {
         sd->dev.val1[i] = 0;
         sd->dev.val2[i] = 0;
@@ -847,7 +852,7 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
     pc_checkitem (sd);
 
     // ステータス異常の初期化
-    for (i = 0; i < MAX_STATUSCHANGE; i++)
+    for (int i = 0; i < MAX_STATUSCHANGE; i++)
     {
         sd->sc_data[i].timer = -1;
         sd->sc_data[i].val1 = sd->sc_data[i].val2 = sd->sc_data[i].val3 =
@@ -881,7 +886,7 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
 
     // イベント関係の初期化
     memset (sd->eventqueue, 0, sizeof (sd->eventqueue));
-    for (i = 0; i < MAX_EVENTTIMER; i++)
+    for (int i = 0; i < MAX_EVENTTIMER; i++)
         sd->eventtimer[i] = -1;
 
     // 位置の設定
@@ -914,7 +919,7 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
     if (night_flag == 1)
     {
         char tmpstr[1024];
-        strcpy (tmpstr, msg_txt (500)); // Actually, it's the night...
+        strcpy (tmpstr, "Actually, it's the night...");
         clif_wis_message (sd->fd, wisp_server_name, tmpstr,
                           strlen (tmpstr) + 1);
         sd->opt2 |= STATE_BLIND;
@@ -942,8 +947,7 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
         {
             while (fgets (buf, sizeof (buf) - 1, fp) != NULL)
             {
-                int  i;
-                for (i = 0; buf[i]; i++)
+                for (int i = 0; buf[i]; i++)
                 {
                     if (buf[i] == '\r' || buf[i] == '\n')
                     {
@@ -969,13 +973,13 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
 
     // Obtain IP address (if they are still connected)
     if (!getpeername(sd->fd, (struct sockaddr *)&sai, &sa_len))
-        sd->ip = sai.sin_addr.s_addr;
+        sd->ip = sai.sin_addr;
 
     // message of the limited time of the account
     if (connect_until_time != 0)
     {                           // don't display if it's unlimited or unknow value
         char tmpstr[1024];
-        strftime (tmpstr, sizeof (tmpstr) - 1, msg_txt (501), gmtime (&connect_until_time));    // "Your account time limit is: %d-%m-%Y %H:%M:%S."
+        strftime (tmpstr, sizeof (tmpstr) - 1, "Your account time limit is: %d-%m-%Y %H:%M:%S.", gmtime (&connect_until_time));
         clif_wis_message (sd->fd, wisp_server_name, tmpstr,
                           strlen (tmpstr) + 1);
     }
@@ -1020,6 +1024,7 @@ static int pc_calc_skillpoint (struct map_session_data *sd)
  * 覚えられるスキルの計算
  *------------------------------------------
  */
+static
 int pc_calc_skilltree (struct map_session_data *sd)
 {
     int  i, id = 0, flag;
@@ -1228,6 +1233,7 @@ int pc_checkweighticon (struct map_session_data *sd)
     return 0;
 }
 
+static
 void pc_set_weapon_look (struct map_session_data *sd)
 {
     if (sd->attack_spell_override)
@@ -3652,6 +3658,7 @@ int pc_takeitem (struct map_session_data *sd, struct flooritem_data *fitem)
     return 0;
 }
 
+static
 int pc_isUseitem (struct map_session_data *sd, int n)
 {
     struct item_data *item;
@@ -3915,6 +3922,7 @@ int pc_item_identify (struct map_session_data *sd, int idx)
  * スティル品公開
  *------------------------------------------
  */
+static
 int pc_show_steal (struct block_list *bl, va_list ap)
 {
     struct map_session_data *sd;
@@ -4058,7 +4066,7 @@ int pc_steal_coin (struct map_session_data *sd, struct block_list *bl)
  * PCの位置設定
  *------------------------------------------
  */
-int pc_setpos (struct map_session_data *sd, char *mapname_org, int x, int y,
+int pc_setpos (struct map_session_data *sd, const char *mapname_org, int x, int y,
                int clrtype)
 {
     char mapname[24];
@@ -4124,7 +4132,8 @@ int pc_setpos (struct map_session_data *sd, char *mapname_org, int x, int y,
     {
         if (sd->mapname[0])
         {
-            int  ip, port;
+            struct in_addr ip;
+            int port;
             if (map_mapname2ipport (mapname, &ip, &port) == 0)
             {
                 skill_stop_dancing (&sd->bl, 1);
@@ -4803,6 +4812,7 @@ struct pc_base_job pc_calc_base_job (int b_class)
  * PCの攻撃 (timer関数)
  *------------------------------------------
  */
+static
 void pc_attack_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct map_session_data *sd;
@@ -5008,6 +5018,7 @@ int pc_stopattack (struct map_session_data *sd)
     return 0;
 }
 
+static
 void pc_follow_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct map_session_data *sd, *bl;
@@ -5133,6 +5144,7 @@ int pc_checkbaselevelup (struct map_session_data *sd)
  * Compute the maximum for sd->skill_point, i.e., the max. number of skill points that can still be filled in
  *----------------------------------------
  */
+static
 int pc_skillpt_potential (struct map_session_data *sd)
 {
     int  skill_id;
@@ -6928,7 +6940,7 @@ char *pc_readregstr (struct map_session_data *sd, int reg)
  * script用文字列変数の値を設定
  *------------------------------------------
  */
-int pc_setregstr (struct map_session_data *sd, int reg, char *str)
+int pc_setregstr (struct map_session_data *sd, int reg, const char *str)
 {
     int  i;
 
@@ -6958,7 +6970,7 @@ int pc_setregstr (struct map_session_data *sd, int reg, char *str)
  * script用グローバル変数の値を読む
  *------------------------------------------
  */
-int pc_readglobalreg (struct map_session_data *sd, char *reg)
+int pc_readglobalreg (struct map_session_data *sd, const char *reg)
 {
     int  i;
 
@@ -6977,7 +6989,7 @@ int pc_readglobalreg (struct map_session_data *sd, char *reg)
  * script用グローバル変数の値を設定
  *------------------------------------------
  */
-int pc_setglobalreg (struct map_session_data *sd, char *reg, int val)
+int pc_setglobalreg (struct map_session_data *sd, const char *reg, int val)
 {
     int  i;
 
@@ -7029,7 +7041,7 @@ int pc_setglobalreg (struct map_session_data *sd, char *reg, int val)
  * script用アカウント変数の値を読む
  *------------------------------------------
  */
-int pc_readaccountreg (struct map_session_data *sd, char *reg)
+int pc_readaccountreg (struct map_session_data *sd, const char *reg)
 {
     int  i;
 
@@ -7048,7 +7060,7 @@ int pc_readaccountreg (struct map_session_data *sd, char *reg)
  * script用アカウント変数の値を設定
  *------------------------------------------
  */
-int pc_setaccountreg (struct map_session_data *sd, char *reg, int val)
+int pc_setaccountreg (struct map_session_data *sd, const char *reg, int val)
 {
     int  i;
 
@@ -7097,7 +7109,7 @@ int pc_setaccountreg (struct map_session_data *sd, char *reg, int val)
  * script用アカウント変数2の値を読む
  *------------------------------------------
  */
-int pc_readaccountreg2 (struct map_session_data *sd, char *reg)
+int pc_readaccountreg2 (struct map_session_data *sd, const char *reg)
 {
     int  i;
 
@@ -7116,7 +7128,7 @@ int pc_readaccountreg2 (struct map_session_data *sd, char *reg)
  * script用アカウント変数2の値を設定
  *------------------------------------------
  */
-int pc_setaccountreg2 (struct map_session_data *sd, char *reg, int val)
+int pc_setaccountreg2 (struct map_session_data *sd, const char *reg, int val)
 {
     int  i;
 
@@ -7192,6 +7204,7 @@ int pc_percentrefinery (struct map_session_data *sd, struct item *item)
  * イベントタイマー処理
  *------------------------------------------
  */
+static
 void pc_eventtimer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct map_session_data *sd = map_id2sd (id);
@@ -7746,6 +7759,7 @@ int pc_checkoversp (struct map_session_data *sd)
  * PVP順位計算用(foreachinarea)
  *------------------------------------------
  */
+static
 int pc_calc_pvprank_sub (struct block_list *bl, va_list ap)
 {
     struct map_session_data *sd1, *sd2 = NULL;
@@ -8260,7 +8274,6 @@ static int pc_spirit_heal_sp (struct map_session_data *sd, int level)
  * HP/SP 自然回復 各クライアント
  *------------------------------------------
  */
-static int pc_itemheal_effect (struct map_session_data *sd, int hp, int sp);
 
 static int
 pc_quickregenerate_effect (struct quick_regeneration *quick_regen,
@@ -8363,6 +8376,7 @@ static int pc_natural_heal_sub (struct map_session_data *sd, va_list ap)
  * HP/SP自然回復 (interval timer関数)
  *------------------------------------------
  */
+static
 void pc_natural_heal (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     natural_heal_tick = tick;
@@ -8377,7 +8391,7 @@ void pc_natural_heal (timer_id tid, tick_t tick, custom_id_t id, custom_data_t d
  * セーブポイントの保存
  *------------------------------------------
  */
-int pc_setsavepoint (struct map_session_data *sd, char *mapname, int x, int y)
+int pc_setsavepoint (struct map_session_data *sd, const char *mapname, int x, int y)
 {
     nullpo_retr (0, sd);
 
@@ -8440,6 +8454,7 @@ static int pc_autosave_sub (struct map_session_data *sd, va_list ap)
  * 自動セーブ (timer関数)
  *------------------------------------------
  */
+static
 void pc_autosave (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     int  interval;
@@ -8487,7 +8502,7 @@ void map_day_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t dat
     {                           // if we want a day
         if (night_flag != 0)
         {
-            strcpy (tmpstr, msg_txt (502)); // The day has arrived!
+            strcpy (tmpstr, "The day has arrived!");
             night_flag = 0;     // 0=day, 1=night [Yor]
             for (i = 0; i < fd_max; i++)
             {
@@ -8518,7 +8533,7 @@ void map_night_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t d
     {                           // if we want a night
         if (night_flag == 0)
         {
-            strcpy (tmpstr, msg_txt (503)); // The night has fallen...
+            strcpy (tmpstr, "The night has fallen...");
             night_flag = 1;     // 0=day, 1=night [Yor]
             for (i = 0; i < fd_max; i++)
             {
@@ -8559,6 +8574,7 @@ void pc_setstand (struct map_session_data *sd)
  * refine_db.txt 精錬データテーブル
  *------------------------------------------
  */
+static
 int pc_readdb (void)
 {
     int  i, j, k;
diff --git a/src/map/pc.hpp b/src/map/pc.hpp
index 7237957..cc433b8 100644
--- a/src/map/pc.hpp
+++ b/src/map/pc.hpp
@@ -56,8 +56,8 @@ int  pc_can_reach (struct map_session_data *, int, int);
 int  pc_walktoxy (struct map_session_data *, int, int);
 int  pc_stop_walking (struct map_session_data *, int);
 int  pc_movepos (struct map_session_data *, int, int);
-int  pc_setpos (struct map_session_data *, char *, int, int, int);
-int  pc_setsavepoint (struct map_session_data *, char *, int, int);
+int  pc_setpos (struct map_session_data *, const char *, int, int, int);
+int  pc_setsavepoint (struct map_session_data *, const char *, int, int);
 int  pc_randomwarp (struct map_session_data *sd, int type);
 int  pc_memo (struct map_session_data *sd, int i);
 
@@ -132,7 +132,6 @@ int  pc_resetskill (struct map_session_data *);
 int  pc_equipitem (struct map_session_data *, int, int);
 int  pc_unequipitem (struct map_session_data *, int, int);
 int  pc_unequipinvyitem (struct map_session_data *, int, int);
-int  pc_checkitem (struct map_session_data *);
 int  pc_useitem (struct map_session_data *, int);
 
 int  pc_damage (struct block_list *, struct map_session_data *, int);
@@ -152,13 +151,13 @@ int  pc_setparam (struct map_session_data *, int, int);
 int  pc_readreg (struct map_session_data *, int);
 int  pc_setreg (struct map_session_data *, int, int);
 char *pc_readregstr (struct map_session_data *sd, int reg);
-int  pc_setregstr (struct map_session_data *sd, int reg, char *str);
-int  pc_readglobalreg (struct map_session_data *, char *);
-int  pc_setglobalreg (struct map_session_data *, char *, int);
-int  pc_readaccountreg (struct map_session_data *, char *);
-int  pc_setaccountreg (struct map_session_data *, char *, int);
-int  pc_readaccountreg2 (struct map_session_data *, char *);
-int  pc_setaccountreg2 (struct map_session_data *, char *, int);
+int  pc_setregstr (struct map_session_data *sd, int reg, const char *str);
+int  pc_readglobalreg (struct map_session_data *, const char *);
+int  pc_setglobalreg (struct map_session_data *, const char *, int);
+int  pc_readaccountreg (struct map_session_data *, const char *);
+int  pc_setaccountreg (struct map_session_data *, const char *, int);
+int  pc_readaccountreg2 (struct map_session_data *, const char *);
+int  pc_setaccountreg2 (struct map_session_data *, const char *, int);
 int  pc_percentrefinery (struct map_session_data *sd, struct item *item);
 
 int  pc_addeventtimer (struct map_session_data *sd, int tick,
@@ -202,8 +201,8 @@ enum
 { ADDITEM_EXIST, ADDITEM_NEW, ADDITEM_OVERAMOUNT };
 
 // timer for night.day
-timer_id day_timer_tid;
-timer_id night_timer_tid;
+extern timer_id day_timer_tid;
+extern timer_id night_timer_tid;
 void map_day_timer (timer_id, tick_t, custom_id_t, custom_data_t);   // by [yor]
 void map_night_timer (timer_id, tick_t, custom_id_t, custom_data_t); // by [yor]
 
diff --git a/src/map/script.cpp b/src/map/script.cpp
index 9e851bb..b5b9618 100644
--- a/src/map/script.cpp
+++ b/src/map/script.cpp
@@ -15,6 +15,8 @@
 #include <time.h>
 #include <math.h>
 
+#include <cassert>
+
 #include "../common/socket.hpp"
 #include "../common/timer.hpp"
 #include "../common/lock.hpp"
@@ -46,14 +48,14 @@
 #define SCRIPT_BLOCK_SIZE 256
 enum
 { LABEL_NEXTLINE = 1, LABEL_START };
-static unsigned char *script_buf;
+static ScriptCode *script_buf;
 static int script_pos, script_size;
 
 char *str_buf;
 int  str_pos, str_size;
 static struct str_data_t
 {
-    int  type;
+    ScriptCode type;
     int  str;
     int  backpatch;
     int  label;
@@ -106,7 +108,7 @@ static int parse_cmd;
  * ローカルプロトタイプ宣言 (必要な物のみ)
  *------------------------------------------
  */
-unsigned char *parse_subexpr (unsigned char *, int);
+const char *parse_subexpr (const char *, int);
 int  buildin_mes (struct script_state *st);
 int  buildin_goto (struct script_state *st);
 int  buildin_callsub (struct script_state *st);
@@ -277,13 +279,10 @@ int  buildin_get_unactivated_pool_skills (struct script_state *st);   // [PO]
 int  buildin_activate_pool_skill (struct script_state *st); // [fate]
 int  buildin_deactivate_pool_skill (struct script_state *st);   // [fate]
 int  buildin_check_pool_skill (struct script_state *st);    // [fate]
-int  buildin_getskilllist (struct script_state *st);
-int  buildin_getskilllist (struct script_state *st);
 int  buildin_clearitem (struct script_state *st);
 int  buildin_classchange (struct script_state *st);
 int  buildin_misceffect (struct script_state *st);
 int  buildin_soundeffect (struct script_state *st);
-int  buildin_setcastledata (struct script_state *st);
 int  buildin_mapwarp (struct script_state *st);
 int  buildin_inittimer (struct script_state *st);
 int  buildin_stoptimer (struct script_state *st);
@@ -324,8 +323,8 @@ int  mapreg_setregstr (int num, const char *str);
 struct
 {
     int  (*func) (struct script_state *);
-    char *name;
-    char *arg;
+    const char *name;
+    const char *arg;
 } buildin_func[] =
 {
     {
@@ -743,24 +742,27 @@ struct
     {
 NULL, NULL, NULL},};
 
-int  buildin_message (struct script_state *st); // [MouseJstr]
-
-enum
+#ifdef RECENT_GCC
+enum class ScriptCode : uint8_t
 {
-    C_NOP, C_POS, C_INT, C_PARAM, C_FUNC, C_STR, C_CONSTSTR, C_ARG,
-    C_NAME, C_EOL, C_RETINFO,
+    // tyoes and specials
+    NOP, POS, INT, PARAM, FUNC, STR, CONSTSTR, ARG,
+    NAME, EOL, RETINFO,
 
-    C_LOR, C_LAND, C_LE, C_LT, C_GE, C_GT, C_EQ, C_NE,  //operator
-    C_XOR, C_OR, C_AND, C_ADD, C_SUB, C_MUL, C_DIV, C_MOD, C_NEG, C_LNOT,
-    C_NOT, C_R_SHIFT, C_L_SHIFT
+    // unary and binary operators
+    LOR, LAND, LE, LT, GE, GT, EQ, NE,
+    XOR, OR, AND, ADD, SUB, MUL, DIV, MOD, NEG, LNOT,
+    NOT, R_SHIFT, L_SHIFT
 };
+#endif
 
 /*==========================================
  * 文字列のハッシュを計算
  *------------------------------------------
  */
-static int calc_hash (const unsigned char *p)
+static int calc_hash (const char *s)
 {
+    const unsigned char *p = (const unsigned char *)s;
     int  h = 0;
     while (*p)
     {
@@ -775,7 +777,7 @@ static int calc_hash (const unsigned char *p)
  *------------------------------------------
  */
 // 既存のであれば番号、無ければ-1
-static int search_str (const unsigned char *p)
+static int search_str (const char *p)
 {
     int  i;
     i = str_hash[calc_hash (p)];
@@ -795,7 +797,7 @@ static int search_str (const unsigned char *p)
  *------------------------------------------
  */
 // 既存のであれば番号、無ければ登録して新規番号
-static int add_str (const unsigned char *p)
+static int add_str (const char *p)
 {
     int  i;
     char *lowcase;
@@ -843,7 +845,7 @@ static int add_str (const unsigned char *p)
         memset (str_buf + (str_size - 256), '\0', 256);
     }
     strcpy (str_buf + str_pos, p);
-    str_data[str_num].type = C_NOP;
+    str_data[str_num].type = ScriptCode::NOP;
     str_data[str_num].str = str_pos;
     str_data[str_num].next = 0;
     str_data[str_num].func = NULL;
@@ -862,7 +864,7 @@ static void check_script_buf (int size)
     if (script_pos + size >= script_size)
     {
         script_size += SCRIPT_BLOCK_SIZE;
-        script_buf = (char *) realloc (script_buf, script_size);
+        script_buf = (ScriptCode *) realloc (script_buf, script_size);
         memset (script_buf + script_size - SCRIPT_BLOCK_SIZE, '\0',
                 SCRIPT_BLOCK_SIZE);
     }
@@ -872,7 +874,8 @@ static void check_script_buf (int size)
  * スクリプトバッファに1バイト書き込む
  *------------------------------------------
  */
-static void add_scriptb (int a)
+static
+void add_scriptc (ScriptCode a)
 {
     check_script_buf (1);
     script_buf[script_pos++] = a;
@@ -882,14 +885,10 @@ static void add_scriptb (int a)
  * スクリプトバッファにデータタイプを書き込む
  *------------------------------------------
  */
-static void add_scriptc (int a)
+static
+void add_scriptb (uint8_t a)
 {
-    while (a >= 0x40)
-    {
-        add_scriptb ((a & 0x3f) | 0x40);
-        a = (a - 0x40) >> 6;
-    }
-    add_scriptb (a & 0x3f);
+    add_scriptc(static_cast<ScriptCode>(a));
 }
 
 /*==========================================
@@ -917,29 +916,29 @@ static void add_scriptl (int l)
 
     switch (str_data[l].type)
     {
-        case C_POS:
-            add_scriptc (C_POS);
-            add_scriptb (str_data[l].label);
-            add_scriptb (str_data[l].label >> 8);
-            add_scriptb (str_data[l].label >> 16);
+        case ScriptCode::POS:
+            add_scriptc (ScriptCode::POS);
+            add_scriptb ({uint8_t(str_data[l].label)});
+            add_scriptb ({uint8_t(str_data[l].label >> 8)});
+            add_scriptb ({uint8_t(str_data[l].label >> 16)});
             break;
-        case C_NOP:
+        case ScriptCode::NOP:
             // ラベルの可能性があるのでbackpatch用データ埋め込み
-            add_scriptc (C_NAME);
+            add_scriptc (ScriptCode::NAME);
             str_data[l].backpatch = script_pos;
-            add_scriptb (backpatch);
-            add_scriptb (backpatch >> 8);
-            add_scriptb (backpatch >> 16);
+            add_scriptb ({uint8_t(backpatch)});
+            add_scriptb ({uint8_t(backpatch >> 8)});
+            add_scriptb ({uint8_t(backpatch >> 16)});
             break;
-        case C_INT:
+        case ScriptCode::INT:
             add_scripti (str_data[l].val);
             break;
         default:
             // もう他の用途と確定してるので数字をそのまま
-            add_scriptc (C_NAME);
-            add_scriptb (l);
-            add_scriptb (l >> 8);
-            add_scriptb (l >> 16);
+            add_scriptc (ScriptCode::NAME);
+            add_scriptb ({uint8_t(l)});
+            add_scriptb ({uint8_t(l >> 8)});
+            add_scriptb ({uint8_t(l >> 16)});
             break;
     }
 }
@@ -948,19 +947,20 @@ static void add_scriptl (int l)
  * ラベルを解決する
  *------------------------------------------
  */
-void set_label (int l, int pos)
+static
+void set_label (int l, int pos_)
 {
     int  i, next;
 
-    str_data[l].type = C_POS;
-    str_data[l].label = pos;
+    str_data[l].type = ScriptCode::POS;
+    str_data[l].label = pos_;
     for (i = str_data[l].backpatch; i >= 0 && i != 0x00ffffff;)
     {
         next = (*(int *) (script_buf + i)) & 0x00ffffff;
-        script_buf[i - 1] = C_POS;
-        script_buf[i] = pos;
-        script_buf[i + 1] = pos >> 8;
-        script_buf[i + 2] = pos >> 16;
+        script_buf[i - 1] = ScriptCode::POS;
+        script_buf[i] = static_cast<ScriptCode>(pos_);
+        script_buf[i + 1] = static_cast<ScriptCode>(pos_ >> 8);
+        script_buf[i + 2] = static_cast<ScriptCode>(pos_ >> 16);
         i = next;
     }
 }
@@ -969,7 +969,7 @@ void set_label (int l, int pos)
  * スペース/コメント読み飛ばし
  *------------------------------------------
  */
-static unsigned char *skip_space (unsigned char *p)
+static const char *skip_space (const char *p)
 {
     while (1)
     {
@@ -998,7 +998,8 @@ static unsigned char *skip_space (unsigned char *p)
  * 1単語スキップ
  *------------------------------------------
  */
-static unsigned char *skip_word (unsigned char *p)
+static
+const char *skip_word (const char *p)
 {
     // prefix
     if (*p == '$')
@@ -1012,13 +1013,8 @@ static unsigned char *skip_word (unsigned char *p)
     if (*p == 'l')
         p++;                    // 一時的変数用(like weiss)
 
-    while (isalnum (*p) || *p == '_' || *p >= 0x81)
-        if (*p >= 0x81 && p[1])
-        {
-            p += 2;
-        }
-        else
-            p++;
+    while (isalnum (*p) || *p == '_')
+        p++;
 
     // postfix
     if (*p == '$')
@@ -1027,35 +1023,36 @@ static unsigned char *skip_word (unsigned char *p)
     return p;
 }
 
-static unsigned char *startptr;
+static const char *startptr;
 static int startline;
 
 /*==========================================
  * エラーメッセージ出力
  *------------------------------------------
  */
-static void disp_error_message (const char *mes, const unsigned char *pos)
+static void disp_error_message (const char *mes, const char *pos_)
 {
-    int  line, c = 0, i;
-    unsigned char *p, *linestart, *lineend;
+    int line;
+    const char *p;
 
     for (line = startline, p = startptr; p && *p; line++)
     {
-        linestart = p;
-        lineend = strchr (p, '\n');
+        const char *linestart = p;
+        char *lineend = const_cast<char *>(strchr (p, '\n'));
+        char c;
         if (lineend)
         {
             c = *lineend;
             *lineend = 0;
         }
-        if (lineend == NULL || pos < lineend)
+        if (lineend == NULL || pos_ < lineend)
         {
             printf ("%s line %d : ", mes, line);
-            for (i = 0;
+            for (int i = 0;
                  (linestart[i] != '\r') && (linestart[i] != '\n')
                  && linestart[i]; i++)
             {
-                if (linestart + i != pos)
+                if (linestart + i != pos_)
                     printf ("%c", linestart[i]);
                 else
                     printf ("\'%c\'", linestart[i]);
@@ -1074,7 +1071,8 @@ static void disp_error_message (const char *mes, const unsigned char *pos)
  * 項の解析
  *------------------------------------------
  */
-unsigned char *parse_simpleexpr (unsigned char *p)
+static
+const char *parse_simpleexpr (const char *p)
 {
     int  i;
     p = skip_space (p);
@@ -1108,7 +1106,7 @@ unsigned char *parse_simpleexpr (unsigned char *p)
     }
     else if (*p == '"')
     {
-        add_scriptc (C_STR);
+        add_scriptc (ScriptCode::STR);
         p++;
         while (*p && *p != '"')
         {
@@ -1131,16 +1129,15 @@ unsigned char *parse_simpleexpr (unsigned char *p)
     }
     else
     {
-        int  c, l;
-        char *p2;
+        int l;
         // label , register , function etc
         if (skip_word (p) == p)
         {
             disp_error_message ("unexpected character", p);
             exit (1);
         }
-        p2 = skip_word (p);
-        c = *p2;
+        char *p2 = const_cast<char *>(skip_word(p));
+        char c = *p2;
         *p2 = 0;                // 名前をadd_strする
         l = add_str (p);
 
@@ -1159,11 +1156,11 @@ unsigned char *parse_simpleexpr (unsigned char *p)
         *p2 = c;
         p = p2;
 
-        if (str_data[l].type != C_FUNC && c == '[')
+        if (str_data[l].type != ScriptCode::FUNC && c == '[')
         {
             // array(name[i] => getelementofarray(name,i) )
             add_scriptl (search_str ("getelementofarray"));
-            add_scriptc (C_ARG);
+            add_scriptc (ScriptCode::ARG);
             add_scriptl (l);
             p = parse_subexpr (p + 1, -1);
             p = skip_space (p);
@@ -1172,7 +1169,7 @@ unsigned char *parse_simpleexpr (unsigned char *p)
                 disp_error_message ("unmatch ']'", p);
                 exit (1);
             }
-            add_scriptc (C_FUNC);
+            add_scriptc (ScriptCode::FUNC);
         }
         else
             add_scriptl (l);
@@ -1190,10 +1187,10 @@ unsigned char *parse_simpleexpr (unsigned char *p)
  * 式の解析
  *------------------------------------------
  */
-unsigned char *parse_subexpr (unsigned char *p, int limit)
+const char *parse_subexpr (const char *p, int limit)
 {
-    int  op, opl, len;
-    char *tmpp;
+    ScriptCode op;
+    int opl, len;
 
 #ifdef DEBUG_FUNCIN
     if (battle_config.etc_log)
@@ -1203,7 +1200,7 @@ unsigned char *parse_subexpr (unsigned char *p, int limit)
 
     if (*p == '-')
     {
-        tmpp = skip_space (p + 1);
+        const char *tmpp = skip_space (p + 1);
         if (*tmpp == ';' || *tmpp == ',')
         {
             add_scriptl (LABEL_NEXTLINE);
@@ -1211,9 +1208,9 @@ unsigned char *parse_subexpr (unsigned char *p, int limit)
             return p;
         }
     }
-    tmpp = p;
-    if ((op = C_NEG, *p == '-') || (op = C_LNOT, *p == '!')
-        || (op = C_NOT, *p == '~'))
+    const char *tmpp = p;
+    if ((op = ScriptCode::NEG, *p == '-') || (op = ScriptCode::LNOT, *p == '!')
+        || (op = ScriptCode::NOT, *p == '~'))
     {
         p = parse_subexpr (p + 1, 100);
         add_scriptc (op);
@@ -1221,39 +1218,39 @@ unsigned char *parse_subexpr (unsigned char *p, int limit)
     else
         p = parse_simpleexpr (p);
     p = skip_space (p);
-    while (((op = C_ADD, opl = 6, len = 1, *p == '+') ||
-            (op = C_SUB, opl = 6, len = 1, *p == '-') ||
-            (op = C_MUL, opl = 7, len = 1, *p == '*') ||
-            (op = C_DIV, opl = 7, len = 1, *p == '/') ||
-            (op = C_MOD, opl = 7, len = 1, *p == '%') ||
-            (op = C_FUNC, opl = 8, len = 1, *p == '(') ||
-            (op = C_LAND, opl = 1, len = 2, *p == '&' && p[1] == '&') ||
-            (op = C_AND, opl = 5, len = 1, *p == '&') ||
-            (op = C_LOR, opl = 0, len = 2, *p == '|' && p[1] == '|') ||
-            (op = C_OR, opl = 4, len = 1, *p == '|') ||
-            (op = C_XOR, opl = 3, len = 1, *p == '^') ||
-            (op = C_EQ, opl = 2, len = 2, *p == '=' && p[1] == '=') ||
-            (op = C_NE, opl = 2, len = 2, *p == '!' && p[1] == '=') ||
-            (op = C_R_SHIFT, opl = 5, len = 2, *p == '>' && p[1] == '>') ||
-            (op = C_GE, opl = 2, len = 2, *p == '>' && p[1] == '=') ||
-            (op = C_GT, opl = 2, len = 1, *p == '>') ||
-            (op = C_L_SHIFT, opl = 5, len = 2, *p == '<' && p[1] == '<') ||
-            (op = C_LE, opl = 2, len = 2, *p == '<' && p[1] == '=') ||
-            (op = C_LT, opl = 2, len = 1, *p == '<')) && opl > limit)
+    while (((op = ScriptCode::ADD, opl = 6, len = 1, *p == '+') ||
+            (op = ScriptCode::SUB, opl = 6, len = 1, *p == '-') ||
+            (op = ScriptCode::MUL, opl = 7, len = 1, *p == '*') ||
+            (op = ScriptCode::DIV, opl = 7, len = 1, *p == '/') ||
+            (op = ScriptCode::MOD, opl = 7, len = 1, *p == '%') ||
+            (op = ScriptCode::FUNC, opl = 8, len = 1, *p == '(') ||
+            (op = ScriptCode::LAND, opl = 1, len = 2, *p == '&' && p[1] == '&') ||
+            (op = ScriptCode::AND, opl = 5, len = 1, *p == '&') ||
+            (op = ScriptCode::LOR, opl = 0, len = 2, *p == '|' && p[1] == '|') ||
+            (op = ScriptCode::OR, opl = 4, len = 1, *p == '|') ||
+            (op = ScriptCode::XOR, opl = 3, len = 1, *p == '^') ||
+            (op = ScriptCode::EQ, opl = 2, len = 2, *p == '=' && p[1] == '=') ||
+            (op = ScriptCode::NE, opl = 2, len = 2, *p == '!' && p[1] == '=') ||
+            (op = ScriptCode::R_SHIFT, opl = 5, len = 2, *p == '>' && p[1] == '>') ||
+            (op = ScriptCode::GE, opl = 2, len = 2, *p == '>' && p[1] == '=') ||
+            (op = ScriptCode::GT, opl = 2, len = 1, *p == '>') ||
+            (op = ScriptCode::L_SHIFT, opl = 5, len = 2, *p == '<' && p[1] == '<') ||
+            (op = ScriptCode::LE, opl = 2, len = 2, *p == '<' && p[1] == '=') ||
+            (op = ScriptCode::LT, opl = 2, len = 1, *p == '<')) && opl > limit)
     {
         p += len;
-        if (op == C_FUNC)
+        if (op == ScriptCode::FUNC)
         {
             int  i = 0, func = parse_cmd;
             const char *plist[128];
 
-            if (str_data[func].type != C_FUNC)
+            if (str_data[func].type != ScriptCode::FUNC)
             {
                 disp_error_message ("expect function", tmpp);
                 exit (0);
             }
 
-            add_scriptc (C_ARG);
+            add_scriptc (ScriptCode::ARG);
             while (*p && *p != ')' && i < 128)
             {
                 plist[i] = p;
@@ -1276,7 +1273,7 @@ unsigned char *parse_subexpr (unsigned char *p, int limit)
                 exit (1);
             }
 
-            if (str_data[func].type == C_FUNC
+            if (str_data[func].type == ScriptCode::FUNC
                 && script_config.warn_func_mismatch_paramnum)
             {
                 const char *arg = buildin_func[str_data[func].val].arg;
@@ -1291,7 +1288,7 @@ unsigned char *parse_subexpr (unsigned char *p, int limit)
                 }
             }
         }
-        else // not op == C_FUNC
+        else // not op == ScriptCode::FUNC
         {
             p = parse_subexpr (p, opl);
         }
@@ -1309,7 +1306,8 @@ unsigned char *parse_subexpr (unsigned char *p, int limit)
  * 式の評価
  *------------------------------------------
  */
-unsigned char *parse_expr (unsigned char *p)
+static
+const char *parse_expr (const char *p)
 {
 #ifdef DEBUG_FUNCIN
     if (battle_config.etc_log)
@@ -1338,11 +1336,11 @@ unsigned char *parse_expr (unsigned char *p)
  * 行の解析
  *------------------------------------------
  */
-unsigned char *parse_line (unsigned char *p)
+static
+const char *parse_line (const char *p)
 {
     int  i = 0, cmd;
     const char *plist[128];
-    char *p2;
 
     p = skip_space (p);
     if (*p == ';')
@@ -1351,18 +1349,18 @@ unsigned char *parse_line (unsigned char *p)
     parse_cmd_if = 0;           // warn_cmd_no_commaのために必要
 
     // 最初は関数名
-    p2 = p;
+    const char *p2 = p;
     p = parse_simpleexpr (p);
     p = skip_space (p);
 
     cmd = parse_cmd;
-    if (str_data[cmd].type != C_FUNC)
+    if (str_data[cmd].type != ScriptCode::FUNC)
     {
         disp_error_message ("expect command", p2);
 //      exit(0);
     }
 
-    add_scriptc (C_ARG);
+    add_scriptc (ScriptCode::ARG);
     while (p && *p && *p != ';' && i < 128)
     {
         plist[i] = p;
@@ -1386,9 +1384,9 @@ unsigned char *parse_line (unsigned char *p)
         disp_error_message ("need ';'", p);
         exit (1);
     }
-    add_scriptc (C_FUNC);
+    add_scriptc (ScriptCode::FUNC);
 
-    if (str_data[cmd].type == C_FUNC
+    if (str_data[cmd].type == ScriptCode::FUNC
         && script_config.warn_cmd_mismatch_paramnum)
     {
         const char *arg = buildin_func[str_data[cmd].val].arg;
@@ -1416,7 +1414,7 @@ static void add_buildin_func (void)
     for (i = 0; buildin_func[i].func; i++)
     {
         n = add_str (buildin_func[i].name);
-        str_data[n].type = C_FUNC;
+        str_data[n].type = ScriptCode::FUNC;
         str_data[n].val = i;
         str_data[n].func = buildin_func[i].func;
     }
@@ -1450,9 +1448,9 @@ static void read_constdb (void)
                 name[i] = tolower (name[i]);
             n = add_str (name);
             if (type == 0)
-                str_data[n].type = C_INT;
+                str_data[n].type = ScriptCode::INT;
             else
-                str_data[n].type = C_PARAM;
+                str_data[n].type = ScriptCode::PARAM;
             str_data[n].val = val;
         }
     }
@@ -1463,9 +1461,9 @@ static void read_constdb (void)
  * スクリプトの解析
  *------------------------------------------
  */
-unsigned char *parse_script (unsigned char *src, int line)
+const ScriptCode *parse_script (const char *src, int line)
 {
-    unsigned char *p, *tmpp;
+    const char *p;
     int  i;
     static int first = 1;
 
@@ -1475,17 +1473,17 @@ unsigned char *parse_script (unsigned char *src, int line)
         read_constdb ();
     }
     first = 0;
-    script_buf = (unsigned char *) calloc (SCRIPT_BLOCK_SIZE, 1);
+    script_buf = (ScriptCode *) calloc (SCRIPT_BLOCK_SIZE, 1);
     script_pos = 0;
     script_size = SCRIPT_BLOCK_SIZE;
-    str_data[LABEL_NEXTLINE].type = C_NOP;
+    str_data[LABEL_NEXTLINE].type = ScriptCode::NOP;
     str_data[LABEL_NEXTLINE].backpatch = -1;
     str_data[LABEL_NEXTLINE].label = -1;
     for (i = LABEL_START; i < str_num; i++)
     {
-        if (str_data[i].type == C_POS || str_data[i].type == C_NAME)
+        if (str_data[i].type == ScriptCode::POS || str_data[i].type == ScriptCode::NAME)
         {
-            str_data[i].type = C_NOP;
+            str_data[i].type = ScriptCode::NOP;
             str_data[i].backpatch = -1;
             str_data[i].label = -1;
         }
@@ -1511,23 +1509,21 @@ unsigned char *parse_script (unsigned char *src, int line)
     {
         p = skip_space (p);
         // labelだけ特殊処理
-        tmpp = skip_space (skip_word (p));
-        if (*tmpp == ':')
+        if (*skip_space (skip_word (p)) == ':')
         {
-            int  l, c;
-
-            c = *skip_word (p);
-            *skip_word (p) = 0;
-            l = add_str (p);
+            char *tmpp = const_cast<char *>(skip_word(p));
+            char c = *tmpp;
+            *tmpp = '\0';
+            int l = add_str (p);
             if (str_data[l].label != -1)
             {
-                *skip_word (p) = c;
+                *tmpp = c;
                 disp_error_message ("dup label ", p);
                 exit (1);
             }
             set_label (l, script_pos);
             strdb_insert (scriptlabel_db, (const char*)p, script_pos);   // 外部用label db登録
-            *skip_word (p) = c;
+            *tmpp = c;
             p = tmpp + 1;
             continue;
         }
@@ -1535,33 +1531,33 @@ unsigned char *parse_script (unsigned char *src, int line)
         // 他は全部一緒くた
         p = parse_line (p);
         p = skip_space (p);
-        add_scriptc (C_EOL);
+        add_scriptc (ScriptCode::EOL);
 
         set_label (LABEL_NEXTLINE, script_pos);
-        str_data[LABEL_NEXTLINE].type = C_NOP;
+        str_data[LABEL_NEXTLINE].type = ScriptCode::NOP;
         str_data[LABEL_NEXTLINE].backpatch = -1;
         str_data[LABEL_NEXTLINE].label = -1;
     }
 
-    add_scriptc (C_NOP);
+    add_scriptc (ScriptCode::NOP);
 
     script_size = script_pos;
-    script_buf = (char *) realloc (script_buf, script_pos + 1);
+    script_buf = (ScriptCode *) realloc (script_buf, script_pos + 1);
 
     // 未解決のラベルを解決
     for (i = LABEL_START; i < str_num; i++)
     {
-        if (str_data[i].type == C_NOP)
+        if (str_data[i].type == ScriptCode::NOP)
         {
             int  j, next;
-            str_data[i].type = C_NAME;
+            str_data[i].type = ScriptCode::NAME;
             str_data[i].label = i;
             for (j = str_data[i].backpatch; j >= 0 && j != 0x00ffffff;)
             {
                 next = (*(int *) (script_buf + j)) & 0x00ffffff;
-                script_buf[j] = i;
-                script_buf[j + 1] = i >> 8;
-                script_buf[j + 2] = i >> 16;
+                script_buf[j] = static_cast<ScriptCode>(i);
+                script_buf[j + 1] = static_cast<ScriptCode>(i >> 8);
+                script_buf[j + 2] = static_cast<ScriptCode>(i >> 16);
                 j = next;
             }
         }
@@ -1592,6 +1588,7 @@ enum
  * ridからsdへの解決
  *------------------------------------------
  */
+static
 struct map_session_data *script_rid2sd (struct script_state *st)
 {
     struct map_session_data *sd = map_id2sd (st->rid);
@@ -1606,10 +1603,11 @@ struct map_session_data *script_rid2sd (struct script_state *st)
  * 変数の読み取り
  *------------------------------------------
  */
+static
 int get_val (struct script_state *st, struct script_data *data)
 {
     struct map_session_data *sd = NULL;
-    if (data->type == C_NAME)
+    if (data->type == ScriptCode::NAME)
     {
         char *name = str_buf + str_data[data->u.num & 0x00ffffff].str;
         char prefix = *name;
@@ -1623,7 +1621,7 @@ int get_val (struct script_state *st, struct script_data *data)
         if (postfix == '$')
         {
 
-            data->type = C_CONSTSTR;
+            data->type = ScriptCode::CONSTSTR;
             if (prefix == '@' || prefix == 'l')
             {
                 if (sd)
@@ -1646,12 +1644,12 @@ int get_val (struct script_state *st, struct script_data *data)
         else
         {
 
-            data->type = C_INT;
-            if (str_data[data->u.num & 0x00ffffff].type == C_INT)
+            data->type = ScriptCode::INT;
+            if (str_data[data->u.num & 0x00ffffff].type == ScriptCode::INT)
             {
                 data->u.num = str_data[data->u.num & 0x00ffffff].val;
             }
-            else if (str_data[data->u.num & 0x00ffffff].type == C_PARAM)
+            else if (str_data[data->u.num & 0x00ffffff].type == ScriptCode::PARAM)
             {
                 if (sd)
                     data->u.num =
@@ -1694,30 +1692,29 @@ int get_val (struct script_state *st, struct script_data *data)
  * 変数の読み取り2
  *------------------------------------------
  */
-void *get_val2 (struct script_state *st, int num)
+static
+struct script_data get_val2 (struct script_state *st, int num)
 {
     struct script_data dat;
-    dat.type = C_NAME;
+    dat.type = ScriptCode::NAME;
     dat.u.num = num;
     get_val (st, &dat);
-    if (dat.type == C_INT)
-        return (void *) dat.u.num;
-    else
-        return (void *) dat.u.str;
+    return dat;
 }
 
 /*==========================================
  * 変数設定用
  *------------------------------------------
  */
-static int set_reg (struct map_session_data *sd, int num, char *name, void *v)
+static
+int set_reg (struct map_session_data *sd, int num, const char *name, struct script_data vd)
 {
     char prefix = *name;
     char postfix = name[strlen (name) - 1];
 
     if (postfix == '$')
     {
-        char *str = (char *) v;
+        const char *str = vd.u.str;
         if (prefix == '@' || prefix == 'l')
         {
             pc_setregstr (sd, num, str);
@@ -1734,8 +1731,8 @@ static int set_reg (struct map_session_data *sd, int num, char *name, void *v)
     else
     {
         // 数値
-        int  val = (int) v;
-        if (str_data[num & 0x00ffffff].type == C_PARAM)
+        int val = vd.u.num;
+        if (str_data[num & 0x00ffffff].type == ScriptCode::PARAM)
         {
             pc_setparam (sd, str_data[num & 0x00ffffff].val, val);
         }
@@ -1762,26 +1759,43 @@ static int set_reg (struct map_session_data *sd, int num, char *name, void *v)
     return 0;
 }
 
+static
+int set_reg (struct map_session_data *sd, int num, const char *name, int id)
+{
+    struct script_data vd;
+    vd.u.num = id;
+    return set_reg(sd, num, name, vd);
+}
+
+static
+int set_reg (struct map_session_data *sd, int num, const char *name, const char *zd)
+{
+    struct script_data vd;
+    vd.u.str = zd;
+    return set_reg(sd, num, name, vd);
+}
+
 /*==========================================
  * 文字列への変換
  *------------------------------------------
  */
-char *conv_str (struct script_state *st, struct script_data *data)
+static
+const char *conv_str (struct script_state *st, struct script_data *data)
 {
     get_val (st, data);
-    if (data->type == C_INT)
+    if (data->type == ScriptCode::INT)
     {
         char *buf;
         buf = (char *) calloc (16, 1);
         sprintf (buf, "%d", data->u.num);
-        data->type = C_STR;
+        data->type = ScriptCode::STR;
         data->u.str = buf;
 #if 1
     }
-    else if (data->type == C_NAME)
+    else if (data->type == ScriptCode::NAME)
     {
         // テンポラリ。本来無いはず
-        data->type = C_CONSTSTR;
+        data->type = ScriptCode::CONSTSTR;
         data->u.str = str_buf + str_data[data->u.num].str;
 #endif
     }
@@ -1792,17 +1806,17 @@ char *conv_str (struct script_state *st, struct script_data *data)
  * 数値へ変換
  *------------------------------------------
  */
+static
 int conv_num (struct script_state *st, struct script_data *data)
 {
-    char *p;
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
-        p = data->u.str;
+        const char *p = data->u.str;
         data->u.num = atoi (p);
-        if (data->type == C_STR)
-            free (p);
-        data->type = C_INT;
+        if (data->type == ScriptCode::STR)
+            free(const_cast<char *>(p));
+        data->type = ScriptCode::INT;
     }
     return data->u.num;
 }
@@ -1811,7 +1825,7 @@ int conv_num (struct script_state *st, struct script_data *data)
  * スタックへ数値をプッシュ
  *------------------------------------------
  */
-void push_val (struct script_stack *stack, int type, int val)
+void push_val (struct script_stack *stack, ScriptCode type, int val)
 {
     if (stack->sp >= stack->sp_max)
     {
@@ -1833,7 +1847,8 @@ void push_val (struct script_stack *stack, int type, int val)
  * スタックへ文字列をプッシュ
  *------------------------------------------
  */
-void push_str (struct script_stack *stack, int type, unsigned char *str)
+static
+void push_str (struct script_stack *stack, ScriptCode type, const char *str)
 {
     if (stack->sp >= stack->sp_max)
     {
@@ -1855,19 +1870,20 @@ void push_str (struct script_stack *stack, int type, unsigned char *str)
  * スタックへ複製をプッシュ
  *------------------------------------------
  */
-void push_copy (struct script_stack *stack, int pos)
+static
+void push_copy (struct script_stack *stack, int pos_)
 {
-    switch (stack->stack_data[pos].type)
+    switch (stack->stack_data[pos_].type)
     {
-        case C_CONSTSTR:
-            push_str (stack, C_CONSTSTR, stack->stack_data[pos].u.str);
+        case ScriptCode::CONSTSTR:
+            push_str (stack, ScriptCode::CONSTSTR, stack->stack_data[pos_].u.str);
             break;
-        case C_STR:
-            push_str (stack, C_STR, strdup (stack->stack_data[pos].u.str));
+        case ScriptCode::STR:
+            push_str (stack, ScriptCode::STR, strdup (stack->stack_data[pos_].u.str));
             break;
         default:
-            push_val (stack, stack->stack_data[pos].type,
-                      stack->stack_data[pos].u.num);
+            push_val (stack, stack->stack_data[pos_].type,
+                      stack->stack_data[pos_].u.num);
             break;
     }
 }
@@ -1876,14 +1892,15 @@ void push_copy (struct script_stack *stack, int pos)
  * スタックからポップ
  *------------------------------------------
  */
+static
 void pop_stack (struct script_stack *stack, int start, int end)
 {
     int  i;
     for (i = start; i < end; i++)
     {
-        if (stack->stack_data[i].type == C_STR)
+        if (stack->stack_data[i].type == ScriptCode::STR)
         {
-            free (stack->stack_data[i].u.str);
+            free (const_cast<char *>(stack->stack_data[i].u.str));
         }
     }
     if (stack->sp > end)
@@ -1915,17 +1932,14 @@ int buildin_mes (struct script_state *st)
  */
 int buildin_goto (struct script_state *st)
 {
-    int  pos;
-
-    if (st->stack->stack_data[st->start + 2].type != C_POS)
+    if (st->stack->stack_data[st->start + 2].type != ScriptCode::POS)
     {
         printf ("script: goto: not label !\n");
         st->state = END;
         return 0;
     }
 
-    pos = conv_num (st, &(st->stack->stack_data[st->start + 2]));
-    st->pos = pos;
+    st->pos = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     st->state = GOTO;
     return 0;
 }
@@ -1936,19 +1950,19 @@ int buildin_goto (struct script_state *st)
  */
 int buildin_callfunc (struct script_state *st)
 {
-    char *scr;
-    char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const ScriptCode *scr;
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
 
-    if ((scr = (char*)strdb_search (script_get_userfunc_db (), str)))
+    if ((scr = (const ScriptCode *)strdb_search (script_get_userfunc_db (), str)))
     {
         int  i, j;
         for (i = st->start + 3, j = 0; i < st->end; i++, j++)
             push_copy (st->stack, i);
 
-        push_val (st->stack, C_INT, j); // 引数の数をプッシュ
-        push_val (st->stack, C_INT, st->defsp); // 現在の基準スタックポインタをプッシュ
-        push_val (st->stack, C_INT, (int) st->script);  // 現在のスクリプトをプッシュ
-        push_val (st->stack, C_RETINFO, st->pos);   // 現在のスクリプト位置をプッシュ
+        push_val (st->stack, ScriptCode::INT, j); // 引数の数をプッシュ
+        push_val (st->stack, ScriptCode::INT, st->defsp); // 現在の基準スタックポインタをプッシュ
+        push_val (st->stack, ScriptCode::INT, (int) st->script);  // 現在のスクリプトをプッシュ
+        push_val (st->stack, ScriptCode::RETINFO, st->pos);   // 現在のスクリプト位置をプッシュ
 
         st->pos = 0;
         st->script = scr;
@@ -1969,17 +1983,17 @@ int buildin_callfunc (struct script_state *st)
  */
 int buildin_callsub (struct script_state *st)
 {
-    int  pos = conv_num (st, &(st->stack->stack_data[st->start + 2]));
+    int  pos_ = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     int  i, j;
     for (i = st->start + 3, j = 0; i < st->end; i++, j++)
         push_copy (st->stack, i);
 
-    push_val (st->stack, C_INT, j); // 引数の数をプッシュ
-    push_val (st->stack, C_INT, st->defsp); // 現在の基準スタックポインタをプッシュ
-    push_val (st->stack, C_INT, (int) st->script);  // 現在のスクリプトをプッシュ
-    push_val (st->stack, C_RETINFO, st->pos);   // 現在のスクリプト位置をプッシュ
+    push_val (st->stack, ScriptCode::INT, j); // 引数の数をプッシュ
+    push_val (st->stack, ScriptCode::INT, st->defsp); // 現在の基準スタックポインタをプッシュ
+    push_val (st->stack, ScriptCode::INT, (int) st->script);  // 現在のスクリプトをプッシュ
+    push_val (st->stack, ScriptCode::RETINFO, st->pos);   // 現在のスクリプト位置をプッシュ
 
-    st->pos = pos;
+    st->pos = pos_;
     st->defsp = st->start + 4 + j;
     st->state = GOTO;
     return 0;
@@ -1994,7 +2008,7 @@ int buildin_getarg (struct script_state *st)
     int  num = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     int  max, stsp;
     if (st->defsp < 4
-        || st->stack->stack_data[st->defsp - 1].type != C_RETINFO)
+        || st->stack->stack_data[st->defsp - 1].type != ScriptCode::RETINFO)
     {
         printf ("script:getarg without callfunc or callsub!\n");
         st->state = END;
@@ -2112,19 +2126,17 @@ int buildin_menu (struct script_state *st)
         sd->state.menu_or_input = 0;
         if (sd->npc_menu > 0 && sd->npc_menu <= menu_choices)
         {
-            int  pos;
             if (st->stack->
-                stack_data[st->start + sd->npc_menu * 2 + 1].type != C_POS)
+                stack_data[st->start + sd->npc_menu * 2 + 1].type != ScriptCode::POS)
             {
                 st->state = END;
                 return 0;
             }
-            pos =
+            st->pos =
                 conv_num (st,
                           &(st->
                             stack->stack_data[st->start + sd->npc_menu * 2 +
                                               1]));
-            st->pos = pos;
             st->state = GOTO;
         }
     }
@@ -2151,12 +2163,12 @@ int buildin_rand (struct script_state *st)
             max = tmp;
         }
         range = max - min + 1;
-        push_val (st->stack, C_INT, (range <= 0 ? 0 : MRAND (range)) + min);
+        push_val (st->stack, ScriptCode::INT, (range <= 0 ? 0 : MRAND (range)) + min);
     }
     else
     {
         range = conv_num (st, &(st->stack->stack_data[st->start + 2]));
-        push_val (st->stack, C_INT, range <= 0 ? 0 : MRAND (range));
+        push_val (st->stack, ScriptCode::INT, range <= 0 ? 0 : MRAND (range));
     }
     return 0;
 }
@@ -2172,7 +2184,7 @@ int buildin_pow (struct script_state *st)
     a = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     b = conv_num (st, &(st->stack->stack_data[st->start + 3]));
 
-    push_val (st->stack, C_INT, (int) pow (a * 0.001, b));
+    push_val (st->stack, ScriptCode::INT, (int) pow (a * 0.001, b));
 
     return 0;
 }
@@ -2184,17 +2196,16 @@ int buildin_pow (struct script_state *st)
 int buildin_isat (struct script_state *st)
 {
     int  x, y;
-    char *str;
     struct map_session_data *sd = script_rid2sd (st);
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
 
     if (!sd)
         return 1;
 
-    push_val (st->stack, C_INT,
+    push_val (st->stack, ScriptCode::INT,
               (x == sd->bl.x)
               && (y == sd->bl.y) && (!strcmp (str, map[sd->bl.m].name)));
 
@@ -2208,10 +2219,9 @@ int buildin_isat (struct script_state *st)
 int buildin_warp (struct script_state *st)
 {
     int  x, y;
-    char *str;
     struct map_session_data *sd = script_rid2sd (st);
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     if (strcmp (str, "Random") == 0)
@@ -2241,33 +2251,31 @@ int buildin_warp (struct script_state *st)
  * エリア指定ワープ
  *------------------------------------------
  */
+static
 int buildin_areawarp_sub (struct block_list *bl, va_list ap)
 {
     int  x, y;
-    char *map;
-    map = va_arg (ap, char *);
+    const char *mapname = va_arg (ap, const char *);
     x = va_arg (ap, int);
     y = va_arg (ap, int);
-    if (strcmp (map, "Random") == 0)
+    if (strcmp (mapname, "Random") == 0)
         pc_randomwarp ((struct map_session_data *) bl, 3);
     else
-        pc_setpos ((struct map_session_data *) bl, map, x, y, 0);
+        pc_setpos ((struct map_session_data *) bl, mapname, x, y, 0);
     return 0;
 }
 
 int buildin_areawarp (struct script_state *st)
 {
     int  x, y, m;
-    char *str;
-    char *mapname;
     int  x0, y0, x1, y1;
 
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y0 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
     y1 = conv_num (st, &(st->stack->stack_data[st->start + 6]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 7]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 7]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 8]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 9]));
 
@@ -2349,7 +2357,7 @@ int buildin_input (struct script_state *st)
     int  num =
         (st->end >
          st->start + 2) ? st->stack->stack_data[st->start + 2].u.num : 0;
-    char *name =
+    const char *name =
         (st->end >
          st->start + 2) ? str_buf + str_data[num & 0x00ffffff].str : "";
 //  char prefix=*name;
@@ -2364,7 +2372,7 @@ int buildin_input (struct script_state *st)
             // 文字列
             if (st->end > st->start + 2)
             {                   // 引数1個
-                set_reg (sd, num, name, (void *) sd->npc_str);
+                set_reg (sd, num, name, sd->npc_str);
             }
             else
             {
@@ -2385,7 +2393,7 @@ int buildin_input (struct script_state *st)
             // 数値
             if (st->end > st->start + 2)
             {                   // 引数1個
-                set_reg (sd, num, name, (void *) sd->npc_amount);
+                set_reg (sd, num, name, sd->npc_amount);
             }
             else
             {
@@ -2421,7 +2429,7 @@ int buildin_if (struct script_state *st)
     // 関数名をコピー
     push_copy (st->stack, st->start + 3);
     // 間に引数マーカを入れて
-    push_val (st->stack, C_ARG, 0);
+    push_val (st->stack, ScriptCode::ARG, 0);
     // 残りの引数をコピー
     for (i = st->start + 4; i < st->end; i++)
     {
@@ -2444,7 +2452,7 @@ int buildin_set (struct script_state *st)
     char prefix = *name;
     char postfix = name[strlen (name) - 1];
 
-    if (st->stack->stack_data[st->start + 2].type != C_NAME)
+    if (st->stack->stack_data[st->start + 2].type != ScriptCode::NAME)
     {
         printf ("script: buildin_set: not name\n");
         return 0;
@@ -2456,14 +2464,14 @@ int buildin_set (struct script_state *st)
     if (postfix == '$')
     {
         // 文字列
-        char *str = conv_str (st, &(st->stack->stack_data[st->start + 3]));
-        set_reg (sd, num, name, (void *) str);
+        const char *str = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+        set_reg (sd, num, name, str);
     }
     else
     {
         // 数値
         int  val = conv_num (st, &(st->stack->stack_data[st->start + 3]));
-        set_reg (sd, num, name, (void *) val);
+        set_reg (sd, num, name, val);
     }
 
     return 0;
@@ -2492,12 +2500,10 @@ int buildin_setarray (struct script_state *st)
 
     for (j = 0, i = st->start + 3; i < st->end && j < 128; i++, j++)
     {
-        void *v;
         if (postfix == '$')
-            v = (void *) conv_str (st, &(st->stack->stack_data[i]));
+            set_reg(sd, num + (j << 24), name, conv_str(st, &(st->stack->stack_data[i])));
         else
-            v = (void *) conv_num (st, &(st->stack->stack_data[i]));
-        set_reg (sd, num + (j << 24), name, v);
+            set_reg(sd, num + (j << 24), name, conv_num(st, &(st->stack->stack_data[i])));
     }
     return 0;
 }
@@ -2526,12 +2532,12 @@ int buildin_cleararray (struct script_state *st)
         sd = script_rid2sd (st);
 
     if (postfix == '$')
-        v = (void *) conv_str (st, &(st->stack->stack_data[st->start + 3]));
+        for (i = 0; i < sz; i++)
+            set_reg(sd, num + (i << 24), name, conv_str(st, &(st->stack->stack_data[st->start + 3])));
     else
-        v = (void *) conv_num (st, &(st->stack->stack_data[st->start + 3]));
+        for (i = 0; i < sz; i++)
+            set_reg(sd, num + (i << 24), name, conv_num(st, &(st->stack->stack_data[st->start + 3])));
 
-    for (i = 0; i < sz; i++)
-        set_reg (sd, num + (i << 24), name, v);
     return 0;
 }
 
@@ -2580,10 +2586,8 @@ static int getarraysize (struct script_state *st, int num, int postfix)
     int  i = (num >> 24), c = i;
     for (; i < 128; i++)
     {
-        void *v = get_val2 (st, num + (i << 24));
-        if (postfix == '$' && *((char *) v))
-            c = i;
-        if (postfix != '$' && (int) v)
+        struct script_data vd = get_val2 (st, num + (i << 24));
+        if (postfix == '$' ? bool(vd.u.str) : bool(vd.u.num))
             c = i;
     }
     return c + 1;
@@ -2602,7 +2606,7 @@ int buildin_getarraysize (struct script_state *st)
         return 0;
     }
 
-    push_val (st->stack, C_INT, getarraysize (st, num, postfix));
+    push_val (st->stack, ScriptCode::INT, getarraysize (st, num, postfix));
     return 0;
 }
 
@@ -2652,7 +2656,7 @@ int buildin_deletearray (struct script_state *st)
  */
 int buildin_getelementofarray (struct script_state *st)
 {
-    if (st->stack->stack_data[st->start + 2].type == C_NAME)
+    if (st->stack->stack_data[st->start + 2].type == ScriptCode::NAME)
     {
         int  i = conv_num (st, &(st->stack->stack_data[st->start + 3]));
         if (i > 127 || i < 0)
@@ -2660,11 +2664,11 @@ int buildin_getelementofarray (struct script_state *st)
             printf
                 ("script: getelementofarray (operator[]): param2 illegal number %d\n",
                  i);
-            push_val (st->stack, C_INT, 0);
+            push_val (st->stack, ScriptCode::INT, 0);
         }
         else
         {
-            push_val (st->stack, C_NAME,
+            push_val (st->stack, ScriptCode::NAME,
                       (i << 24) | st->stack->stack_data[st->start + 2].u.num);
         }
     }
@@ -2672,7 +2676,7 @@ int buildin_getelementofarray (struct script_state *st)
     {
         printf
             ("script: getelementofarray (operator[]): param1 not name !\n");
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
     return 0;
 }
@@ -2760,7 +2764,7 @@ int buildin_countitem (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data;
@@ -2781,7 +2785,7 @@ int buildin_countitem (struct script_state *st)
         if (battle_config.error_log)
             printf ("wrong item ID : countitem(%i)\n", nameid);
     }
-    push_val (st->stack, C_INT, count);
+    push_val (st->stack, ScriptCode::INT, count);
 
     return 0;
 }
@@ -2800,7 +2804,7 @@ int buildin_checkweight (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data = itemdb_searchname (name);
@@ -2813,17 +2817,17 @@ int buildin_checkweight (struct script_state *st)
     amount = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     if (amount <= 0 || nameid < 500)
     {                           //if get wrong item ID or amount<=0, don't count weight of non existing items
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     sd = script_rid2sd (st);
     if (itemdb_weight (nameid) * amount + sd->weight > sd->max_weight)
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
     else
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
 
     return 0;
@@ -2844,7 +2848,7 @@ int buildin_getitem (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data = itemdb_searchname (name);
@@ -2899,7 +2903,6 @@ int buildin_getitem2 (struct script_state *st)
 {
     int  nameid, amount, flag = 0;
     int  iden, ref, attr, c1, c2, c3, c4;
-    struct item_data *item_data;
     struct item item_tmp;
     struct map_session_data *sd;
     struct script_data *data;
@@ -2908,7 +2911,7 @@ int buildin_getitem2 (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data = itemdb_searchname (name);
@@ -2942,7 +2945,7 @@ int buildin_getitem2 (struct script_state *st)
     if (nameid > 0)
     {
         memset (&item_tmp, 0, sizeof (item_tmp));
-        item_data = itemdb_search (nameid);
+        struct item_data *item_data = itemdb_search (nameid);
         if (item_data->type == 4 || item_data->type == 5)
         {
             if (ref > 10)
@@ -2989,7 +2992,6 @@ int buildin_makeitem (struct script_state *st)
 {
     int  nameid, amount, flag = 0;
     int  x, y, m;
-    char *mapname;
     struct item item_tmp;
     struct map_session_data *sd;
     struct script_data *data;
@@ -2998,7 +3000,7 @@ int buildin_makeitem (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data = itemdb_searchname (name);
@@ -3010,7 +3012,7 @@ int buildin_makeitem (struct script_state *st)
         nameid = conv_num (st, data);
 
     amount = conv_num (st, &(st->stack->stack_data[st->start + 3]));
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 4]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 4]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 5]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 6]));
 
@@ -3055,7 +3057,7 @@ int buildin_delitem (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data = itemdb_searchname (name);
@@ -3124,11 +3126,11 @@ int buildin_readparam (struct script_state *st)
 
     if (sd == NULL)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
 
-    push_val (st->stack, C_INT, pc_readparam (sd, type));
+    push_val (st->stack, ScriptCode::INT, pc_readparam (sd, type));
 
     return 0;
 }
@@ -3150,17 +3152,17 @@ int buildin_getcharid (struct script_state *st)
         sd = script_rid2sd (st);
     if (sd == NULL)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
     if (num == 0)
-        push_val (st->stack, C_INT, sd->status.char_id);
+        push_val (st->stack, ScriptCode::INT, sd->status.char_id);
     if (num == 1)
-        push_val (st->stack, C_INT, sd->status.party_id);
+        push_val (st->stack, ScriptCode::INT, sd->status.party_id);
     if (num == 2)
-        push_val (st->stack, C_INT, sd->status.guild_id);
+        push_val (st->stack, ScriptCode::INT, sd->status.guild_id);
     if (num == 3)
-        push_val (st->stack, C_INT, sd->status.account_id);
+        push_val (st->stack, ScriptCode::INT, sd->status.account_id);
     return 0;
 }
 
@@ -3168,6 +3170,7 @@ int buildin_getcharid (struct script_state *st)
  *指定IDのPT名取得
  *------------------------------------------
  */
+static
 char *buildin_getpartyname_sub (int party_id)
 {
     struct party *p;
@@ -3194,9 +3197,9 @@ int buildin_getpartyname (struct script_state *st)
     party_id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     name = buildin_getpartyname_sub (party_id);
     if (name != 0)
-        push_str (st->stack, C_STR, name);
+        push_str (st->stack, ScriptCode::STR, name);
     else
-        push_str (st->stack, C_CONSTSTR, "null");
+        push_str (st->stack, ScriptCode::CONSTSTR, "null");
 
     return 0;
 }
@@ -3235,6 +3238,7 @@ int buildin_getpartymember (struct script_state *st)
  *指定IDのギルド名取得
  *------------------------------------------
  */
+static
 char *buildin_getguildname_sub (int guild_id)
 {
     struct guild *g = NULL;
@@ -3256,9 +3260,9 @@ int buildin_getguildname (struct script_state *st)
     int  guild_id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     name = buildin_getguildname_sub (guild_id);
     if (name != 0)
-        push_str (st->stack, C_STR, name);
+        push_str (st->stack, ScriptCode::STR, name);
     else
-        push_str (st->stack, C_CONSTSTR, "null");
+        push_str (st->stack, ScriptCode::CONSTSTR, "null");
     return 0;
 }
 
@@ -3266,6 +3270,7 @@ int buildin_getguildname (struct script_state *st)
  *指定IDのGuildMaster名取得
  *------------------------------------------
  */
+static
 char *buildin_getguildmaster_sub (int guild_id)
 {
     struct guild *g = NULL;
@@ -3288,9 +3293,9 @@ int buildin_getguildmaster (struct script_state *st)
     int  guild_id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     master = buildin_getguildmaster_sub (guild_id);
     if (master != 0)
-        push_str (st->stack, C_STR, master);
+        push_str (st->stack, ScriptCode::STR, master);
     else
-        push_str (st->stack, C_CONSTSTR, "null");
+        push_str (st->stack, ScriptCode::CONSTSTR, "null");
     return 0;
 }
 
@@ -3304,14 +3309,14 @@ int buildin_getguildmasterid (struct script_state *st)
     {
         if ((sd = map_nick2sd (master)) == NULL)
         {
-            push_val (st->stack, C_INT, 0);
+            push_val (st->stack, ScriptCode::INT, 0);
             return 0;
         }
-        push_val (st->stack, C_INT, sd->status.char_id);
+        push_val (st->stack, ScriptCode::INT, sd->status.char_id);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
     return 0;
 }
@@ -3332,25 +3337,25 @@ int buildin_strcharinfo (struct script_state *st)
         char *buf;
         buf = (char *) calloc (24, 1);
         strncpy (buf, sd->status.name, 23);
-        push_str (st->stack, C_STR, buf);
+        push_str (st->stack, ScriptCode::STR, buf);
     }
     if (num == 1)
     {
         char *buf;
         buf = buildin_getpartyname_sub (sd->status.party_id);
         if (buf != 0)
-            push_str (st->stack, C_STR, buf);
+            push_str (st->stack, ScriptCode::STR, buf);
         else
-            push_str (st->stack, C_CONSTSTR, "");
+            push_str (st->stack, ScriptCode::CONSTSTR, "");
     }
     if (num == 2)
     {
         char *buf;
         buf = buildin_getguildname_sub (sd->status.guild_id);
         if (buf != 0)
-            push_str (st->stack, C_STR, buf);
+            push_str (st->stack, ScriptCode::STR, buf);
         else
-            push_str (st->stack, C_CONSTSTR, "");
+            push_str (st->stack, ScriptCode::CONSTSTR, "");
     }
 
     return 0;
@@ -3383,13 +3388,13 @@ int buildin_getequipid (struct script_state *st)
     {
         item = sd->inventory_data[i];
         if (item)
-            push_val (st->stack, C_INT, item->nameid);
+            push_val (st->stack, ScriptCode::INT, item->nameid);
         else
-            push_val (st->stack, C_INT, 0);
+            push_val (st->stack, ScriptCode::INT, 0);
     }
     else
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
     }
     return 0;
 }
@@ -3421,7 +3426,7 @@ int buildin_getequipname (struct script_state *st)
     {
         sprintf (buf, "%s-[%s]", pos[num - 1], pos[10]);
     }
-    push_str (st->stack, C_STR, buf);
+    push_str (st->stack, ScriptCode::STR, buf);
 
     return 0;
 }
@@ -3451,7 +3456,7 @@ int buildin_getbrokenid (struct script_state *st)
         }
     }
 
-    push_val (st->stack, C_INT, id);
+    push_val (st->stack, ScriptCode::INT, id);
 
     return 0;
 }
@@ -3503,11 +3508,11 @@ int buildin_getequipisequiped (struct script_state *st)
     i = pc_checkequip (sd, equip[num - 1]);
     if (i >= 0)
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     return 0;
@@ -3532,11 +3537,11 @@ int buildin_getequipisenableref (struct script_state *st)
             || (sd->inventory_data[i]->def <= 0
                 && sd->inventory_data[i]->equip_script != NULL)))
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     return 0;
@@ -3555,9 +3560,9 @@ int buildin_getequipisidentify (struct script_state *st)
     sd = script_rid2sd (st);
     i = pc_checkequip (sd, equip[num - 1]);
     if (i >= 0)
-        push_val (st->stack, C_INT, sd->status.inventory[i].identify);
+        push_val (st->stack, ScriptCode::INT, sd->status.inventory[i].identify);
     else
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
 
     return 0;
 }
@@ -3575,9 +3580,9 @@ int buildin_getequiprefinerycnt (struct script_state *st)
     sd = script_rid2sd (st);
     i = pc_checkequip (sd, equip[num - 1]);
     if (i >= 0)
-        push_val (st->stack, C_INT, sd->status.inventory[i].refine);
+        push_val (st->stack, ScriptCode::INT, sd->status.inventory[i].refine);
     else
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
 
     return 0;
 }
@@ -3595,9 +3600,9 @@ int buildin_getequipweaponlv (struct script_state *st)
     sd = script_rid2sd (st);
     i = pc_checkequip (sd, equip[num - 1]);
     if (i >= 0 && sd->inventory_data[i])
-        push_val (st->stack, C_INT, sd->inventory_data[i]->wlv);
+        push_val (st->stack, ScriptCode::INT, sd->inventory_data[i]->wlv);
     else
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
 
     return 0;
 }
@@ -3615,10 +3620,10 @@ int buildin_getequippercentrefinery (struct script_state *st)
     sd = script_rid2sd (st);
     i = pc_checkequip (sd, equip[num - 1]);
     if (i >= 0)
-        push_val (st->stack, C_INT,
+        push_val (st->stack, ScriptCode::INT,
                   pc_percentrefinery (sd, &sd->status.inventory[i]));
     else
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
 
     return 0;
 }
@@ -3831,7 +3836,7 @@ int buildin_guildskill (struct script_state *st)
 int buildin_getskilllv (struct script_state *st)
 {
     int  id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
-    push_val (st->stack, C_INT, pc_checkskill (script_rid2sd (st), id));
+    push_val (st->stack, ScriptCode::INT, pc_checkskill (script_rid2sd (st), id));
     return 0;
 }
 
@@ -3849,7 +3854,7 @@ int buildin_getgdskilllv (struct script_state *st)
     int  guild_id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     int  skill_id = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     struct guild *g = guild_search (guild_id);
-    push_val (st->stack, C_INT,
+    push_val (st->stack, ScriptCode::INT,
               (g == NULL) ? -1 : guild_checkskill (g, skill_id));
     return 0;
 /*
@@ -3861,9 +3866,9 @@ int buildin_getgdskilllv (struct script_state *st)
 	sd=script_rid2sd(st);
 	if(sd && sd->status.guild_id > 0) g=guild_search(sd->status.guild_id);
 	if(sd && g) {
-		push_val(st->stack,C_INT, guild_checkskill(g,skill_id+9999) );
+		push_val(st->stack,ScriptCode::INT, guild_checkskill(g,skill_id+9999) );
 	} else {
-		push_val(st->stack,C_INT,-1);
+		push_val(st->stack,ScriptCode::INT,-1);
 	}
 	return 0;
 */
@@ -3875,7 +3880,7 @@ int buildin_getgdskilllv (struct script_state *st)
  */
 int buildin_basicskillcheck (struct script_state *st)
 {
-    push_val (st->stack, C_INT, battle_config.basic_skill_check);
+    push_val (st->stack, ScriptCode::INT, battle_config.basic_skill_check);
     return 0;
 }
 
@@ -3885,7 +3890,7 @@ int buildin_basicskillcheck (struct script_state *st)
  */
 int buildin_getgmlevel (struct script_state *st)
 {
-    push_val (st->stack, C_INT, pc_isGM (script_rid2sd (st)));
+    push_val (st->stack, ScriptCode::INT, pc_isGM (script_rid2sd (st)));
     return 0;
 }
 
@@ -3910,7 +3915,7 @@ int buildin_getopt2 (struct script_state *st)
 
     sd = script_rid2sd (st);
 
-    push_val (st->stack, C_INT, sd->opt2);
+    push_val (st->stack, ScriptCode::INT, sd->opt2);
 
     return 0;
 }
@@ -3950,11 +3955,11 @@ int buildin_checkoption (struct script_state *st)
 
     if (sd->status.option & type)
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     return 0;
@@ -3989,11 +3994,11 @@ int buildin_checkcart (struct script_state *st)
 
     if (pc_iscarton (sd))
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
     return 0;
 }
@@ -4025,11 +4030,11 @@ int buildin_checkfalcon (struct script_state *st)
 
     if (pc_isfalcon (sd))
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     return 0;
@@ -4062,11 +4067,11 @@ int buildin_checkriding (struct script_state *st)
 
     if (pc_isriding (sd))
     {
-        push_val (st->stack, C_INT, 1);
+        push_val (st->stack, ScriptCode::INT, 1);
     }
     else
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     return 0;
@@ -4093,9 +4098,8 @@ int buildin_setriding (struct script_state *st)
 int buildin_savepoint (struct script_state *st)
 {
     int  x, y;
-    char *str;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     pc_setsavepoint (script_rid2sd (st), str, x, y);
@@ -4127,18 +4131,18 @@ int buildin_gettimetick (struct script_state *st)   /* Asgard Version */
 
             time (&timer);
             t = gmtime (&timer);
-            push_val (st->stack, C_INT,
+            push_val (st->stack, ScriptCode::INT,
                       ((t->tm_hour) * 3600 + (t->tm_min) * 60 + t->tm_sec));
             break;
         }
         /* Seconds since Unix epoch. */
         case 2:
-            push_val (st->stack, C_INT, (int) time (NULL));
+            push_val (st->stack, ScriptCode::INT, (int) time (NULL));
             break;
         /* System tick (unsigned int, and yes, it will wrap). */
         case 0:
         default:
-            push_val (st->stack, C_INT, gettick ());
+            push_val (st->stack, ScriptCode::INT, gettick ());
             break;
     }
     return 0;
@@ -4165,28 +4169,28 @@ int buildin_gettime (struct script_state *st)   /* Asgard Version */
     switch (type)
     {
         case 1:                //Sec(0~59)
-            push_val (st->stack, C_INT, t->tm_sec);
+            push_val (st->stack, ScriptCode::INT, t->tm_sec);
             break;
         case 2:                //Min(0~59)
-            push_val (st->stack, C_INT, t->tm_min);
+            push_val (st->stack, ScriptCode::INT, t->tm_min);
             break;
         case 3:                //Hour(0~23)
-            push_val (st->stack, C_INT, t->tm_hour);
+            push_val (st->stack, ScriptCode::INT, t->tm_hour);
             break;
         case 4:                //WeekDay(0~6)
-            push_val (st->stack, C_INT, t->tm_wday);
+            push_val (st->stack, ScriptCode::INT, t->tm_wday);
             break;
         case 5:                //MonthDay(01~31)
-            push_val (st->stack, C_INT, t->tm_mday);
+            push_val (st->stack, ScriptCode::INT, t->tm_mday);
             break;
         case 6:                //Month(01~12)
-            push_val (st->stack, C_INT, t->tm_mon + 1);
+            push_val (st->stack, ScriptCode::INT, t->tm_mon + 1);
             break;
         case 7:                //Year(20xx)
-            push_val (st->stack, C_INT, t->tm_year + 1900);
+            push_val (st->stack, ScriptCode::INT, t->tm_year + 1900);
             break;
         default:               //(format error)
-            push_val (st->stack, C_INT, -1);
+            push_val (st->stack, ScriptCode::INT, -1);
             break;
     }
     return 0;
@@ -4199,18 +4203,17 @@ int buildin_gettime (struct script_state *st)   /* Asgard Version */
 int buildin_gettimestr (struct script_state *st)
 {
     char *tmpstr;
-    char *fmtstr;
     int  maxlen;
     time_t now = time (NULL);
 
-    fmtstr = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *fmtstr = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     maxlen = conv_num (st, &(st->stack->stack_data[st->start + 3]));
 
     tmpstr = (char *) calloc (maxlen + 1, 1);
     strftime (tmpstr, maxlen, fmtstr, gmtime (&now));
     tmpstr[maxlen] = '\0';
 
-    push_str (st->stack, C_STR, tmpstr);
+    push_str (st->stack, ScriptCode::STR, tmpstr);
     return 0;
 }
 
@@ -4239,7 +4242,7 @@ int buildin_guildopenstorage (struct script_state *st)
     int  ret;
     st->state = STOP;
     ret = storage_guild_storageopen (sd);
-    push_val (st->stack, C_INT, ret);
+    push_val (st->stack, ScriptCode::INT, ret);
     return 0;
 }
 
@@ -4250,12 +4253,11 @@ int buildin_guildopenstorage (struct script_state *st)
 int buildin_itemskill (struct script_state *st)
 {
     int  id, lv;
-    char *str;
     struct map_session_data *sd = script_rid2sd (st);
 
     id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     lv = conv_num (st, &(st->stack->stack_data[st->start + 3]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 4]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 4]));
 
     // 詠唱中にスキルアイテムは使用できない
     if (sd->skilltimer != -1)
@@ -4293,18 +4295,18 @@ int buildin_getexp (struct script_state *st)
 int buildin_monster (struct script_state *st)
 {
     int  mob_class, amount, x, y;
-    char *str, *map, *event = "";
+    const char *event = "";
 
-    map = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 5]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 5]));
     mob_class = conv_num (st, &(st->stack->stack_data[st->start + 6]));
     amount = conv_num (st, &(st->stack->stack_data[st->start + 7]));
     if (st->end > st->start + 8)
         event = conv_str (st, &(st->stack->stack_data[st->start + 8]));
 
-    mob_once_spawn (map_id2sd (st->rid), map, x, y, str, mob_class, amount,
+    mob_once_spawn (map_id2sd (st->rid), mapname, x, y, str, mob_class, amount,
                     event);
     return 0;
 }
@@ -4316,20 +4318,20 @@ int buildin_monster (struct script_state *st)
 int buildin_areamonster (struct script_state *st)
 {
     int  mob_class, amount, x0, y0, x1, y1;
-    char *str, *map, *event = "";
+    const char *event = "";
 
-    map = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y0 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
     y1 = conv_num (st, &(st->stack->stack_data[st->start + 6]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 7]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 7]));
     mob_class = conv_num (st, &(st->stack->stack_data[st->start + 8]));
     amount = conv_num (st, &(st->stack->stack_data[st->start + 9]));
     if (st->end > st->start + 10)
         event = conv_str (st, &(st->stack->stack_data[st->start + 10]));
 
-    mob_once_spawn_area (map_id2sd (st->rid), map, x0, y0, x1, y1, str, mob_class,
+    mob_once_spawn_area (map_id2sd (st->rid), mapname, x0, y0, x1, y1, str, mob_class,
                          amount, event);
     return 0;
 }
@@ -4338,6 +4340,7 @@ int buildin_areamonster (struct script_state *st)
  * モンスター削除
  *------------------------------------------
  */
+static
 int buildin_killmonster_sub (struct block_list *bl, va_list ap)
 {
     char *event = va_arg (ap, char *);
@@ -4361,10 +4364,9 @@ int buildin_killmonster_sub (struct block_list *bl, va_list ap)
 
 int buildin_killmonster (struct script_state *st)
 {
-    char *mapname, *event;
     int  m, allflag = 0;
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
     if (strcmp (event, "All") == 0)
         allflag = 1;
 
@@ -4375,6 +4377,7 @@ int buildin_killmonster (struct script_state *st)
     return 0;
 }
 
+static
 int buildin_killmonsterall_sub (struct block_list *bl, va_list ap)
 {
     mob_delete ((struct mob_data *) bl);
@@ -4383,9 +4386,8 @@ int buildin_killmonsterall_sub (struct block_list *bl, va_list ap)
 
 int buildin_killmonsterall (struct script_state *st)
 {
-    char *mapname;
     int  m;
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
 
     if ((m = map_mapname2mapid (mapname)) < 0)
         return 0;
@@ -4400,8 +4402,7 @@ int buildin_killmonsterall (struct script_state *st)
  */
 int buildin_doevent (struct script_state *st)
 {
-    char *event;
-    event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     npc_event (map_id2sd (st->rid), event, 0);
     return 0;
 }
@@ -4412,8 +4413,7 @@ int buildin_doevent (struct script_state *st)
  */
 int buildin_donpcevent (struct script_state *st)
 {
-    char *event;
-    event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     npc_event_do (event);
     return 0;
 }
@@ -4424,10 +4424,9 @@ int buildin_donpcevent (struct script_state *st)
  */
 int buildin_addtimer (struct script_state *st)
 {
-    char *event;
     int  tick;
     tick = conv_num (st, &(st->stack->stack_data[st->start + 2]));
-    event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
     pc_addeventtimer (script_rid2sd (st), tick, event);
     return 0;
 }
@@ -4438,8 +4437,7 @@ int buildin_addtimer (struct script_state *st)
  */
 int buildin_deltimer (struct script_state *st)
 {
-    char *event;
-    event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     pc_deleventtimer (script_rid2sd (st), event);
     return 0;
 }
@@ -4450,9 +4448,8 @@ int buildin_deltimer (struct script_state *st)
  */
 int buildin_addtimercount (struct script_state *st)
 {
-    char *event;
     int  tick;
-    event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     tick = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     pc_addeventtimercount (script_rid2sd (st), event, tick);
     return 0;
@@ -4537,7 +4534,7 @@ int buildin_getnpctimer (struct script_state *st)
             val = nd->u.scr.timeramount;
             break;
     }
-    push_val (st->stack, C_INT, val);
+    push_val (st->stack, ScriptCode::INT, val);
     return 0;
 }
 
@@ -4566,9 +4563,8 @@ int buildin_setnpctimer (struct script_state *st)
  */
 int buildin_announce (struct script_state *st)
 {
-    char *str;
     int  flag;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     flag = conv_num (st, &(st->stack->stack_data[st->start + 3]));
 
     if (flag & 0x0f)
@@ -4586,6 +4582,7 @@ int buildin_announce (struct script_state *st)
  * 天の声アナウンス(特定マップ)
  *------------------------------------------
  */
+static
 int buildin_mapannounce_sub (struct block_list *bl, va_list ap)
 {
     char *str;
@@ -4599,11 +4596,10 @@ int buildin_mapannounce_sub (struct block_list *bl, va_list ap)
 
 int buildin_mapannounce (struct script_state *st)
 {
-    char *mapname, *str;
     int  flag, m;
 
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 3]));
     flag = conv_num (st, &(st->stack->stack_data[st->start + 4]));
 
     if ((m = map_mapname2mapid (mapname)) < 0)
@@ -4620,19 +4616,18 @@ int buildin_mapannounce (struct script_state *st)
  */
 int buildin_areaannounce (struct script_state *st)
 {
-    char *map, *str;
     int  flag, m;
     int  x0, y0, x1, y1;
 
-    map = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y0 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
     y1 = conv_num (st, &(st->stack->stack_data[st->start + 6]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 7]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 7]));
     flag = conv_num (st, &(st->stack->stack_data[st->start + 8]));
 
-    if ((m = map_mapname2mapid (map)) < 0)
+    if ((m = map_mapname2mapid (mapname)) < 0)
         return 0;
 
     map_foreachinarea (buildin_mapannounce_sub,
@@ -4659,7 +4654,7 @@ int buildin_getusers (struct script_state *st)
             val = map_getusers ();
             break;
     }
-    push_val (st->stack, C_INT, val);
+    push_val (st->stack, ScriptCode::INT, val);
     return 0;
 }
 
@@ -4669,15 +4664,14 @@ int buildin_getusers (struct script_state *st)
  */
 int buildin_getmapusers (struct script_state *st)
 {
-    char *str;
     int  m;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     if ((m = map_mapname2mapid (str)) < 0)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
-    push_val (st->stack, C_INT, map[m].users);
+    push_val (st->stack, ScriptCode::INT, map[m].users);
     return 0;
 }
 
@@ -4685,12 +4679,15 @@ int buildin_getmapusers (struct script_state *st)
  * エリア指定ユーザー数所得
  *------------------------------------------
  */
+static
 int buildin_getareausers_sub (struct block_list *bl, va_list ap)
 {
     int *users = va_arg (ap, int *);
     (*users)++;
     return 0;
 }
+
+static
 int buildin_getareausers_living_sub (struct block_list *bl, va_list ap)
 {
     int *users = va_arg (ap, int *);
@@ -4701,9 +4698,8 @@ int buildin_getareausers_living_sub (struct block_list *bl, va_list ap)
 
 int buildin_getareausers (struct script_state *st)
 {
-    char *str;
     int  m, x0, y0, x1, y1, users = 0;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y0 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
@@ -4716,12 +4712,12 @@ int buildin_getareausers (struct script_state *st)
     }
     if ((m = map_mapname2mapid (str)) < 0)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
     map_foreachinarea (living ? buildin_getareausers_living_sub: buildin_getareausers_sub,
                        m, x0, y0, x1, y1, BL_PC, &users);
-    push_val (st->stack, C_INT, users);
+    push_val (st->stack, ScriptCode::INT, users);
     return 0;
 }
 
@@ -4729,6 +4725,7 @@ int buildin_getareausers (struct script_state *st)
  * エリア指定ドロップアイテム数所得
  *------------------------------------------
  */
+static
 int buildin_getareadropitem_sub (struct block_list *bl, va_list ap)
 {
     int  item = va_arg (ap, int);
@@ -4741,6 +4738,7 @@ int buildin_getareadropitem_sub (struct block_list *bl, va_list ap)
     return 0;
 }
 
+static
 int buildin_getareadropitem_sub_anddelete (struct block_list *bl, va_list ap)
 {
     int  item = va_arg (ap, int);
@@ -4757,11 +4755,10 @@ int buildin_getareadropitem_sub_anddelete (struct block_list *bl, va_list ap)
 
 int buildin_getareadropitem (struct script_state *st)
 {
-    char *str;
     int  m, x0, y0, x1, y1, item, amount = 0, delitems = 0;
     struct script_data *data;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y0 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
@@ -4769,7 +4766,7 @@ int buildin_getareadropitem (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 7]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         struct item_data *item_data = itemdb_searchname (name);
@@ -4785,7 +4782,7 @@ int buildin_getareadropitem (struct script_state *st)
 
     if ((m = map_mapname2mapid (str)) < 0)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
     if (delitems)
@@ -4795,7 +4792,7 @@ int buildin_getareadropitem (struct script_state *st)
         map_foreachinarea (buildin_getareadropitem_sub,
                            m, x0, y0, x1, y1, BL_ITEM, item, &amount);
 
-    push_val (st->stack, C_INT, amount);
+    push_val (st->stack, ScriptCode::INT, amount);
     return 0;
 }
 
@@ -4805,8 +4802,7 @@ int buildin_getareadropitem (struct script_state *st)
  */
 int buildin_enablenpc (struct script_state *st)
 {
-    char *str;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     npc_enable (str, 1);
     return 0;
 }
@@ -4817,8 +4813,7 @@ int buildin_enablenpc (struct script_state *st)
  */
 int buildin_disablenpc (struct script_state *st)
 {
-    char *str;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     npc_enable (str, 0);
     return 0;
 }
@@ -4855,8 +4850,7 @@ int buildin_disablearena (struct script_state *st)  // Added by RoVeRT
  */
 int buildin_hideoffnpc (struct script_state *st)
 {
-    char *str;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     npc_enable (str, 2);
     return 0;
 }
@@ -4867,8 +4861,7 @@ int buildin_hideoffnpc (struct script_state *st)
  */
 int buildin_hideonnpc (struct script_state *st)
 {
-    char *str;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     npc_enable (str, 4);
     return 0;
 }
@@ -4950,7 +4943,7 @@ int buildin_sc_check (struct script_state *st)
         && ((struct map_session_data *) bl)->state.potionpitcher_flag)
         bl = map_id2bl (((struct map_session_data *) bl)->skilltarget);
 
-    push_val (st->stack, C_INT, skill_status_change_active (bl, type));
+    push_val (st->stack, ScriptCode::INT, skill_status_change_active (bl, type));
 
     return 0;
 }
@@ -4989,7 +4982,7 @@ int buildin_getscrate (struct script_state *st)
         sc_def = sc_def_luk2;
 
     rate = rate * sc_def / 100;
-    push_val (st->stack, C_INT, rate);
+    push_val (st->stack, ScriptCode::INT, rate);
 
     return 0;
 
@@ -5111,7 +5104,7 @@ int buildin_changesex (struct script_state *st)
  */
 int buildin_waitingroom (struct script_state *st)
 {
-    char *name, *ev = "";
+    const char *name, *ev = "";
     int  limit, trigger = 0, pub = 1;
     name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     limit = conv_num (st, &(st->stack->stack_data[st->start + 3]));
@@ -5122,7 +5115,7 @@ int buildin_waitingroom (struct script_state *st)
     {
         struct script_data *data = &(st->stack->stack_data[st->start + 5]);
         get_val (st, data);
-        if (data->type == C_INT)
+        if (data->type == ScriptCode::INT)
         {
             // 新Athena仕様(旧Athena仕様と互換性あり)
             ev = conv_str (st, &(st->stack->stack_data[st->start + 4]));
@@ -5166,6 +5159,7 @@ int buildin_delwaitingroom (struct script_state *st)
  * npcチャット全員蹴り出す
  *------------------------------------------
  */
+static
 int buildin_waitingroomkickall (struct script_state *st)
 {
     struct npc_data *nd;
@@ -5247,7 +5241,7 @@ int buildin_getwaitingroomstate (struct script_state *st)
     if (nd == NULL
         || (cd = (struct chat_data *) map_id2bl (nd->chat_id)) == NULL)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
 
@@ -5273,16 +5267,16 @@ int buildin_getwaitingroomstate (struct script_state *st)
             break;
 
         case 4:
-            push_str (st->stack, C_CONSTSTR, cd->title);
+            push_str (st->stack, ScriptCode::CONSTSTR, cd->title);
             return 0;
         case 5:
-            push_str (st->stack, C_CONSTSTR, cd->pass);
+            push_str (st->stack, ScriptCode::CONSTSTR, cd->pass);
             return 0;
         case 16:
-            push_str (st->stack, C_CONSTSTR, cd->npc_event);
+            push_str (st->stack, ScriptCode::CONSTSTR, cd->npc_event);
             return 0;
     }
-    push_val (st->stack, C_INT, val);
+    push_val (st->stack, ScriptCode::INT, val);
     return 0;
 }
 
@@ -5293,7 +5287,6 @@ int buildin_getwaitingroomstate (struct script_state *st)
 int buildin_warpwaitingpc (struct script_state *st)
 {
     int  x, y, i, n;
-    char *str;
     struct npc_data *nd = (struct npc_data *) map_id2bl (st->oid);
     struct chat_data *cd;
 
@@ -5302,7 +5295,7 @@ int buildin_warpwaitingpc (struct script_state *st)
         return 0;
 
     n = cd->trigger & 0x7f;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
 
@@ -5339,7 +5332,7 @@ int buildin_warpwaitingpc (struct script_state *st)
 int buildin_attachrid (struct script_state *st)
 {
     st->rid = conv_num (st, &(st->stack->stack_data[st->start + 2]));
-    push_val (st->stack, C_INT, (map_id2sd (st->rid) != NULL));
+    push_val (st->stack, ScriptCode::INT, (map_id2sd (st->rid) != NULL));
     return 0;
 }
 
@@ -5359,7 +5352,7 @@ int buildin_detachrid (struct script_state *st)
  */
 int buildin_isloggedin (struct script_state *st)
 {
-    push_val (st->stack, C_INT,
+    push_val (st->stack, ScriptCode::INT,
               map_id2sd (conv_num
                          (st,
                           &(st->stack->stack_data[st->start + 2]))) != NULL);
@@ -5381,10 +5374,9 @@ enum
 int buildin_setmapflagnosave (struct script_state *st)
 {
     int  m, x, y;
-    char *str, *str2;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    str2 = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str2 = conv_str (st, &(st->stack->stack_data[st->start + 3]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 5]));
     m = map_mapname2mapid (str);
@@ -5402,9 +5394,8 @@ int buildin_setmapflagnosave (struct script_state *st)
 int buildin_setmapflag (struct script_state *st)
 {
     int  m, i;
-    char *str;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     i = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     m = map_mapname2mapid (str);
     if (m >= 0)
@@ -5474,9 +5465,8 @@ int buildin_setmapflag (struct script_state *st)
 int buildin_removemapflag (struct script_state *st)
 {
     int  m, i;
-    char *str;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     i = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     m = map_mapname2mapid (str);
     if (m >= 0)
@@ -5547,10 +5537,9 @@ int buildin_removemapflag (struct script_state *st)
 int buildin_pvpon (struct script_state *st)
 {
     int  m, i;
-    char *str;
     struct map_session_data *pl_sd = NULL;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     m = map_mapname2mapid (str);
     if (m >= 0 && !map[m].flag.pvp && !map[m].flag.nopvp)
     {
@@ -5584,10 +5573,9 @@ int buildin_pvpon (struct script_state *st)
 int buildin_pvpoff (struct script_state *st)
 {
     int  m, i;
-    char *str;
     struct map_session_data *pl_sd = NULL;
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     m = map_mapname2mapid (str);
     if (m >= 0 && map[m].flag.pvp && map[m].flag.nopvp)
     {
@@ -5622,9 +5610,7 @@ int buildin_pvpoff (struct script_state *st)
 int buildin_gvgon (struct script_state *st)
 {
     int  m;
-    char *str;
-
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     m = map_mapname2mapid (str);
     if (m >= 0 && !map[m].flag.gvg)
     {
@@ -5638,9 +5624,7 @@ int buildin_gvgon (struct script_state *st)
 int buildin_gvgoff (struct script_state *st)
 {
     int  m;
-    char *str;
-
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     m = map_mapname2mapid (str);
     if (m >= 0 && map[m].flag.gvg)
     {
@@ -5666,6 +5650,7 @@ int buildin_emotion (struct script_state *st)
     return 0;
 }
 
+static
 int buildin_maprespawnguildid_sub (struct block_list *bl, va_list ap)
 {
     int  g_id = va_arg (ap, int);
@@ -5699,7 +5684,7 @@ int buildin_maprespawnguildid_sub (struct block_list *bl, va_list ap)
 
 int buildin_maprespawnguildid (struct script_state *st)
 {
-    char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     int  g_id = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     int  flag = conv_num (st, &(st->stack->stack_data[st->start + 4]));
 
@@ -5746,9 +5731,9 @@ int buildin_agitcheck (struct script_state *st)
     if (cond == 0)
     {
         if (agit_flag == 1)
-            push_val (st->stack, C_INT, 1);
+            push_val (st->stack, ScriptCode::INT, 1);
         if (agit_flag == 0)
-            push_val (st->stack, C_INT, 0);
+            push_val (st->stack, ScriptCode::INT, 0);
     }
     else
     {
@@ -5774,7 +5759,7 @@ int buildin_flagemblem (struct script_state *st)
 
 int buildin_getcastlename (struct script_state *st)
 {
-    char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     struct guild_castle *gc;
     int  i;
     char *buf = NULL;
@@ -5791,17 +5776,17 @@ int buildin_getcastlename (struct script_state *st)
         }
     }
     if (buf)
-        push_str (st->stack, C_STR, buf);
+        push_str (st->stack, ScriptCode::STR, buf);
     else
-        push_str (st->stack, C_CONSTSTR, "");
+        push_str (st->stack, ScriptCode::CONSTSTR, "");
     return 0;
 }
 
 int buildin_getcastledata (struct script_state *st)
 {
-    char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     int  index = conv_num (st, &(st->stack->stack_data[st->start + 3]));
-    char *event = NULL;
+    const char *event = NULL;
     struct guild_castle *gc;
     int  i, j;
 
@@ -5831,95 +5816,95 @@ int buildin_getcastledata (struct script_state *st)
                             guild_castledataload (gc->castle_id, j);
                         break;  // Initialize[AgitInit]
                     case 1:
-                        push_val (st->stack, C_INT, gc->guild_id);
+                        push_val (st->stack, ScriptCode::INT, gc->guild_id);
                         break;
                     case 2:
-                        push_val (st->stack, C_INT, gc->economy);
+                        push_val (st->stack, ScriptCode::INT, gc->economy);
                         break;
                     case 3:
-                        push_val (st->stack, C_INT, gc->defense);
+                        push_val (st->stack, ScriptCode::INT, gc->defense);
                         break;
                     case 4:
-                        push_val (st->stack, C_INT, gc->triggerE);
+                        push_val (st->stack, ScriptCode::INT, gc->triggerE);
                         break;
                     case 5:
-                        push_val (st->stack, C_INT, gc->triggerD);
+                        push_val (st->stack, ScriptCode::INT, gc->triggerD);
                         break;
                     case 6:
-                        push_val (st->stack, C_INT, gc->nextTime);
+                        push_val (st->stack, ScriptCode::INT, gc->nextTime);
                         break;
                     case 7:
-                        push_val (st->stack, C_INT, gc->payTime);
+                        push_val (st->stack, ScriptCode::INT, gc->payTime);
                         break;
                     case 8:
-                        push_val (st->stack, C_INT, gc->createTime);
+                        push_val (st->stack, ScriptCode::INT, gc->createTime);
                         break;
                     case 9:
-                        push_val (st->stack, C_INT, gc->visibleC);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleC);
                         break;
                     case 10:
-                        push_val (st->stack, C_INT, gc->visibleG0);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG0);
                         break;
                     case 11:
-                        push_val (st->stack, C_INT, gc->visibleG1);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG1);
                         break;
                     case 12:
-                        push_val (st->stack, C_INT, gc->visibleG2);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG2);
                         break;
                     case 13:
-                        push_val (st->stack, C_INT, gc->visibleG3);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG3);
                         break;
                     case 14:
-                        push_val (st->stack, C_INT, gc->visibleG4);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG4);
                         break;
                     case 15:
-                        push_val (st->stack, C_INT, gc->visibleG5);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG5);
                         break;
                     case 16:
-                        push_val (st->stack, C_INT, gc->visibleG6);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG6);
                         break;
                     case 17:
-                        push_val (st->stack, C_INT, gc->visibleG7);
+                        push_val (st->stack, ScriptCode::INT, gc->visibleG7);
                         break;
                     case 18:
-                        push_val (st->stack, C_INT, gc->Ghp0);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp0);
                         break;
                     case 19:
-                        push_val (st->stack, C_INT, gc->Ghp1);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp1);
                         break;
                     case 20:
-                        push_val (st->stack, C_INT, gc->Ghp2);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp2);
                         break;
                     case 21:
-                        push_val (st->stack, C_INT, gc->Ghp3);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp3);
                         break;
                     case 22:
-                        push_val (st->stack, C_INT, gc->Ghp4);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp4);
                         break;
                     case 23:
-                        push_val (st->stack, C_INT, gc->Ghp5);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp5);
                         break;
                     case 24:
-                        push_val (st->stack, C_INT, gc->Ghp6);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp6);
                         break;
                     case 25:
-                        push_val (st->stack, C_INT, gc->Ghp7);
+                        push_val (st->stack, ScriptCode::INT, gc->Ghp7);
                         break;
                     default:
-                        push_val (st->stack, C_INT, 0);
+                        push_val (st->stack, ScriptCode::INT, 0);
                         break;
                 }
                 return 0;
             }
         }
     }
-    push_val (st->stack, C_INT, 0);
+    push_val (st->stack, ScriptCode::INT, 0);
     return 0;
 }
 
 int buildin_setcastledata (struct script_state *st)
 {
-    char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     int  index = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     int  value = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     struct guild_castle *gc;
@@ -6027,7 +6012,7 @@ int buildin_setcastledata (struct script_state *st)
 int buildin_requestguildinfo (struct script_state *st)
 {
     int  guild_id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
-    char *event = NULL;
+    const char *event = NULL;
 
     if (st->end > st->start + 3)
         event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
@@ -6052,7 +6037,7 @@ int buildin_getequipcardcnt (struct script_state *st)
     i = pc_checkequip (sd, equip[num - 1]);
     if (sd->status.inventory[i].card[0] == 0x00ff)
     {                           // 製造武器はカードなし
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
         return 0;
     }
     do
@@ -6061,12 +6046,12 @@ int buildin_getequipcardcnt (struct script_state *st)
             (sd->status.inventory[i].card[c - 1] < 5000))
         {
 
-            push_val (st->stack, C_INT, (c));
+            push_val (st->stack, ScriptCode::INT, (c));
             return 0;
         }
     }
     while (c--);
-    push_val (st->stack, C_INT, 0);
+    push_val (st->stack, ScriptCode::INT, 0);
     return 0;
 }
 
@@ -6217,16 +6202,14 @@ int buildin_failedremovecards (struct script_state *st)
 int buildin_mapwarp (struct script_state *st)   // Added by RoVeRT
 {
     int  x, y, m;
-    char *str;
-    char *mapname;
     int  x0, y0, x1, y1;
 
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = 0;
     y0 = 0;
     x1 = map[map_mapname2mapid (mapname)].xs;
     y1 = map[map_mapname2mapid (mapname)].ys;
-    str = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 3]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 5]));
 
@@ -6240,10 +6223,8 @@ int buildin_mapwarp (struct script_state *st)   // Added by RoVeRT
 
 int buildin_cmdothernpc (struct script_state *st)   // Added by RoVeRT
 {
-    char *npc, *command;
-
-    npc = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    command = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *npc = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *command = conv_str (st, &(st->stack->stack_data[st->start + 3]));
 
     npc_command (map_id2sd (st->rid), npc, command);
     return 0;
@@ -6269,6 +6250,7 @@ int buildin_stoptimer (struct script_state *st) // Added by RoVeRT
     return 0;
 }
 
+static
 int buildin_mobcount_sub (struct block_list *bl, va_list ap)    // Added by RoVeRT
 {
     char *event = va_arg (ap, char *);
@@ -6281,36 +6263,35 @@ int buildin_mobcount_sub (struct block_list *bl, va_list ap)    // Added by RoVe
 
 int buildin_mobcount (struct script_state *st)  // Added by RoVeRT
 {
-    char *mapname, *event;
     int  m, c = 0;
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 3]));
 
     if ((m = map_mapname2mapid (mapname)) < 0)
     {
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
         return 0;
     }
     map_foreachinarea (buildin_mobcount_sub,
                        m, 0, 0, map[m].xs, map[m].ys, BL_MOB, event, &c);
 
-    push_val (st->stack, C_INT, (c - 1));
+    push_val (st->stack, ScriptCode::INT, (c - 1));
 
     return 0;
 }
 
 int buildin_marriage (struct script_state *st)
 {
-    char *partner = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *partner = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     struct map_session_data *sd = script_rid2sd (st);
     struct map_session_data *p_sd = map_nick2sd (partner);
 
     if (sd == NULL || p_sd == NULL || pc_marriage (sd, p_sd) < 0)
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
         return 0;
     }
-    push_val (st->stack, C_INT, 1);
+    push_val (st->stack, ScriptCode::INT, 1);
     return 0;
 }
 
@@ -6334,11 +6315,11 @@ int buildin_divorce (struct script_state *st)
 
     if (sd == NULL || pc_divorce (sd) < 0)
     {
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
         return 0;
     }
 
-    push_val (st->stack, C_INT, 1);
+    push_val (st->stack, ScriptCode::INT, 1);
     return 0;
 }
 
@@ -6359,26 +6340,26 @@ int buildin_strmobinfo (struct script_state *st)
     {
         char *buf;
         buf = mob_db[mob_class].name;
-        push_str (st->stack, C_STR, buf);
+        push_str (st->stack, ScriptCode::STR, buf);
         return 0;
     }
     else if (num == 2)
     {
         char *buf;
         buf = mob_db[mob_class].jname;
-        push_str (st->stack, C_STR, buf);
+        push_str (st->stack, ScriptCode::STR, buf);
         return 0;
     }
     else if (num == 3)
-        push_val (st->stack, C_INT, mob_db[mob_class].lv);
+        push_val (st->stack, ScriptCode::INT, mob_db[mob_class].lv);
     else if (num == 4)
-        push_val (st->stack, C_INT, mob_db[mob_class].max_hp);
+        push_val (st->stack, ScriptCode::INT, mob_db[mob_class].max_hp);
     else if (num == 5)
-        push_val (st->stack, C_INT, mob_db[mob_class].max_sp);
+        push_val (st->stack, ScriptCode::INT, mob_db[mob_class].max_sp);
     else if (num == 6)
-        push_val (st->stack, C_INT, mob_db[mob_class].base_exp);
+        push_val (st->stack, ScriptCode::INT, mob_db[mob_class].base_exp);
     else if (num == 7)
-        push_val (st->stack, C_INT, mob_db[mob_class].job_exp);
+        push_val (st->stack, ScriptCode::INT, mob_db[mob_class].job_exp);
     return 0;
 }
 
@@ -6389,19 +6370,19 @@ int buildin_strmobinfo (struct script_state *st)
 int buildin_guardian (struct script_state *st)
 {
     int  mob_class = 0, amount = 1, x = 0, y = 0, guardian = 0;
-    char *str, *map, *event = "";
+    const char *event = "";
 
-    map = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
-    str = conv_str (st, &(st->stack->stack_data[st->start + 5]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 5]));
     mob_class = conv_num (st, &(st->stack->stack_data[st->start + 6]));
     amount = conv_num (st, &(st->stack->stack_data[st->start + 7]));
     event = conv_str (st, &(st->stack->stack_data[st->start + 8]));
     if (st->end > st->start + 9)
         guardian = conv_num (st, &(st->stack->stack_data[st->start + 9]));
 
-    mob_spawn_guardian (map_id2sd (st->rid), map, x, y, str, mob_class, amount,
+    mob_spawn_guardian (map_id2sd (st->rid), mapname, x, y, str, mob_class, amount,
                         event, guardian);
 
     return 0;
@@ -6418,23 +6399,23 @@ int buildin_guardianinfo (struct script_state *st)
     struct guild_castle *gc = guild_mapname2gc (map[sd->bl.m].name);
 
     if (guardian == 0 && gc->visibleG0 == 1)
-        push_val (st->stack, C_INT, gc->Ghp0);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp0);
     if (guardian == 1 && gc->visibleG1 == 1)
-        push_val (st->stack, C_INT, gc->Ghp1);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp1);
     if (guardian == 2 && gc->visibleG2 == 1)
-        push_val (st->stack, C_INT, gc->Ghp2);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp2);
     if (guardian == 3 && gc->visibleG3 == 1)
-        push_val (st->stack, C_INT, gc->Ghp3);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp3);
     if (guardian == 4 && gc->visibleG4 == 1)
-        push_val (st->stack, C_INT, gc->Ghp4);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp4);
     if (guardian == 5 && gc->visibleG5 == 1)
-        push_val (st->stack, C_INT, gc->Ghp5);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp5);
     if (guardian == 6 && gc->visibleG6 == 1)
-        push_val (st->stack, C_INT, gc->Ghp6);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp6);
     if (guardian == 7 && gc->visibleG7 == 1)
-        push_val (st->stack, C_INT, gc->Ghp7);
+        push_val (st->stack, ScriptCode::INT, gc->Ghp7);
     else
-        push_val (st->stack, C_INT, -1);
+        push_val (st->stack, ScriptCode::INT, -1);
 
     return 0;
 }
@@ -6451,7 +6432,7 @@ int buildin_getitemname (struct script_state *st)
 
     data = &(st->stack->stack_data[st->start + 2]);
     get_val (st, data);
-    if (data->type == C_STR || data->type == C_CONSTSTR)
+    if (data->type == ScriptCode::STR || data->type == ScriptCode::CONSTSTR)
     {
         const char *name = conv_str (st, data);
         i_data = itemdb_searchname (name);
@@ -6468,38 +6449,32 @@ int buildin_getitemname (struct script_state *st)
     else
         strncpy (item_name, "Unknown Item", 23);
 
-    push_str (st->stack, C_STR, item_name);
+    push_str (st->stack, ScriptCode::STR, item_name);
 
     return 0;
 }
 
 int buildin_getspellinvocation (struct script_state *st)
 {
-    char *name;
-    char *invocation;
-
-    name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
 
-    invocation = magic_find_invocation (name);
+    const char *invocation = magic_find_invocation (name);
     if (!invocation)
         invocation = "...";
 
-    push_str (st->stack, C_STR, strdup (invocation));
+    push_str (st->stack, ScriptCode::STR, strdup (invocation));
     return 0;
 }
 
 int buildin_getanchorinvocation (struct script_state *st)
 {
-    char *name;
-    char *invocation;
-
-    name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
 
-    invocation = magic_find_anchor_invocation (name);
+    const char *invocation = magic_find_anchor_invocation (name);
     if (!invocation)
         invocation = "...";
 
-    push_str (st->stack, C_STR, strdup (invocation));
+    push_str (st->stack, ScriptCode::STR, strdup (invocation));
     return 0;
 }
 
@@ -6507,7 +6482,7 @@ int buildin_getpartnerid (struct script_state *st)
 {
     struct map_session_data *sd = script_rid2sd (st);
 
-    push_val (st->stack, C_INT, sd->status.partner_id);
+    push_val (st->stack, ScriptCode::INT, sd->status.partner_id);
     return 0;
 }
 
@@ -6698,7 +6673,7 @@ int buildin_check_pool_skill (struct script_state *st)
     struct map_session_data *sd = script_rid2sd (st);
     int  skill_id = conv_num (st, &(st->stack->stack_data[st->start + 2]));
 
-    push_val (st->stack, C_INT, skill_pool_is_activated (sd, skill_id));
+    push_val (st->stack, ScriptCode::INT, skill_pool_is_activated (sd, skill_id));
 
     return 0;
 }
@@ -6752,7 +6727,7 @@ int buildin_misceffect (struct script_state *st)
 {
     int  type;
     int  id = 0;
-    char *name = NULL;
+    const char *name = NULL;
     struct block_list *bl = NULL;
 
     type = conv_num (st, &(st->stack->stack_data[st->start + 2]));
@@ -6763,7 +6738,7 @@ int buildin_misceffect (struct script_state *st)
 
         get_val (st, sdata);
 
-        if (sdata->type == C_STR || sdata->type == C_CONSTSTR)
+        if (sdata->type == ScriptCode::STR || sdata->type == ScriptCode::CONSTSTR)
             name = conv_str (st, sdata);
         else
             id = conv_num (st, sdata);
@@ -6799,10 +6774,9 @@ int buildin_misceffect (struct script_state *st)
 int buildin_soundeffect (struct script_state *st)
 {
     struct map_session_data *sd = script_rid2sd (st);
-    char *name;
     int  type = 0;
 
-    name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     type = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     if (sd)
     {
@@ -6920,10 +6894,9 @@ int buildin_unequip_by_id (struct script_state *st)
 int buildin_gmcommand (struct script_state *st)
 {
     struct map_session_data *sd;
-    char *cmd;
 
     sd = script_rid2sd (st);
-    cmd = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *cmd = conv_str (st, &(st->stack->stack_data[st->start + 2]));
 
     is_atcommand (sd->fd, sd, cmd, 99);
 
@@ -6938,15 +6911,14 @@ int buildin_gmcommand (struct script_state *st)
 int buildin_movenpc (struct script_state *st)
 {
     struct map_session_data *sd;
-    char *map, *npc;
     int  x, y;
 
     sd = script_rid2sd (st);
 
-    map = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 4]));
-    npc = conv_str (st, &(st->stack->stack_data[st->start + 5]));
+    const char *npc = conv_str (st, &(st->stack->stack_data[st->start + 5]));
 
     return 0;
 }
@@ -6959,12 +6931,11 @@ int buildin_movenpc (struct script_state *st)
 int buildin_npcwarp (struct script_state *st)
 {
     int  x, y;
-    char *npc;
     struct npc_data *nd = NULL;
 
     x = conv_num (st, &(st->stack->stack_data[st->start + 2]));
     y = conv_num (st, &(st->stack->stack_data[st->start + 3]));
-    npc = conv_str (st, &(st->stack->stack_data[st->start + 4]));
+    const char *npc = conv_str (st, &(st->stack->stack_data[st->start + 4]));
     nd = npc_name2id (npc);
 
     if (!nd)
@@ -6995,11 +6966,10 @@ int buildin_npcwarp (struct script_state *st)
 
 int buildin_message (struct script_state *st)
 {
-    char *msg, *player;
     struct map_session_data *pl_sd = NULL;
 
-    player = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    msg = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *player = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *msg = conv_str (st, &(st->stack->stack_data[st->start + 3]));
 
     if ((pl_sd = map_nick2sd ((char *) player)) == NULL)
         return 1;
@@ -7016,11 +6986,10 @@ int buildin_message (struct script_state *st)
 
 int buildin_npctalk (struct script_state *st)
 {
-    char *str;
     char message[255];
 
     struct npc_data *nd = (struct npc_data *) map_id2bl (st->oid);
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
 
     if (nd)
     {
@@ -7051,12 +7020,12 @@ int buildin_hasitems (struct script_state *st)
     {
         if (sd->status.inventory[i].amount)
         {
-            push_val (st->stack, C_INT, 1);
+            push_val (st->stack, ScriptCode::INT, 1);
             return 0;
         }
     }
 
-    push_val (st->stack, C_INT, 0);
+    push_val (st->stack, ScriptCode::INT, 0);
 
     return 0;
 }
@@ -7103,7 +7072,7 @@ int buildin_getlook (struct script_state *st)
             break;
     }
 
-    push_val (st->stack, C_INT, val);
+    push_val (st->stack, ScriptCode::INT, val);
     return 0;
 }
 
@@ -7128,13 +7097,13 @@ int buildin_getsavepoint (struct script_state *st)
         case 0:
             mapname = (char*)calloc (24, 1);
             strncpy (mapname, sd->status.save_point.map, 23);
-            push_str (st->stack, C_STR, mapname);
+            push_str (st->stack, ScriptCode::STR, mapname);
             break;
         case 1:
-            push_val (st->stack, C_INT, x);
+            push_val (st->stack, ScriptCode::INT, x);
             break;
         case 2:
-            push_val (st->stack, C_INT, y);
+            push_val (st->stack, ScriptCode::INT, y);
             break;
     }
     return 0;
@@ -7144,6 +7113,7 @@ int buildin_getsavepoint (struct script_state *st)
  *     areatimer
  *------------------------------------------
  */
+static
 int buildin_areatimer_sub (struct block_list *bl, va_list ap)
 {
     int  tick;
@@ -7157,17 +7127,15 @@ int buildin_areatimer_sub (struct block_list *bl, va_list ap)
 int buildin_areatimer (struct script_state *st)
 {
     int  tick, m;
-    char *event;
-    char *mapname;
     int  x0, y0, x1, y1;
 
-    mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *mapname = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x0 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y0 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
     y1 = conv_num (st, &(st->stack->stack_data[st->start + 6]));
     tick = conv_num (st, &(st->stack->stack_data[st->start + 7]));
-    event = conv_str (st, &(st->stack->stack_data[st->start + 8]));
+    const char *event = conv_str (st, &(st->stack->stack_data[st->start + 8]));
 
     if ((m = map_mapname2mapid (mapname)) < 0)
         return 0;
@@ -7184,10 +7152,9 @@ int buildin_areatimer (struct script_state *st)
 int buildin_isin (struct script_state *st)
 {
     int  x1, y1, x2, y2;
-    char *str;
     struct map_session_data *sd = script_rid2sd (st);
 
-    str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *str = conv_str (st, &(st->stack->stack_data[st->start + 2]));
     x1 = conv_num (st, &(st->stack->stack_data[st->start + 3]));
     y1 = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     x2 = conv_num (st, &(st->stack->stack_data[st->start + 5]));
@@ -7196,7 +7163,7 @@ int buildin_isin (struct script_state *st)
     if (!sd)
         return 1;
 
-    push_val (st->stack, C_INT,
+    push_val (st->stack, ScriptCode::INT,
               (sd->bl.x >= x1 && sd->bl.x <= x2)
               && (sd->bl.y >= y1 && sd->bl.y <= y2)
               && (!strcmp (str, map[sd->bl.m].name)));
@@ -7230,7 +7197,7 @@ int buildin_isdead (struct script_state *st)
 {
     struct map_session_data *sd = script_rid2sd (st);
 
-    push_val (st->stack, C_INT, pc_isdead (sd));
+    push_val (st->stack, ScriptCode::INT, pc_isdead (sd));
     return 0;
 }
 
@@ -7240,12 +7207,11 @@ int buildin_isdead (struct script_state *st)
  */
 int buildin_fakenpcname (struct script_state *st)
 {
-    char *name, *newname;
     int  newsprite;
     struct npc_data *nd;
 
-    name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
-    newname = conv_str (st, &(st->stack->stack_data[st->start + 3]));
+    const char *name = conv_str (st, &(st->stack->stack_data[st->start + 2]));
+    const char *newname = conv_str (st, &(st->stack->stack_data[st->start + 3]));
     newsprite = conv_num (st, &(st->stack->stack_data[st->start + 4]));
     nd = npc_name2id (name);
     if (!nd)
@@ -7270,7 +7236,7 @@ int buildin_getx (struct script_state *st)
 {
     struct map_session_data *sd = script_rid2sd (st);
 
-    push_val (st->stack, C_INT, sd->bl.x);
+    push_val (st->stack, ScriptCode::INT, sd->bl.x);
     return 0;
 }
 
@@ -7282,7 +7248,7 @@ int buildin_gety (struct script_state *st)
 {
     struct map_session_data *sd = script_rid2sd (st);
 
-    push_val (st->stack, C_INT, sd->bl.y);
+    push_val (st->stack, ScriptCode::INT, sd->bl.y);
     return 0;
 }
 
@@ -7293,82 +7259,58 @@ int buildin_gety (struct script_state *st)
  * コマンドの読み取り
  *------------------------------------------
  */
-static int unget_com_data = -1;
-int get_com (unsigned char *script, int *pos)
-{
-    int  i, j;
-    if (unget_com_data >= 0)
-    {
-        i = unget_com_data;
-        unget_com_data = -1;
-        return i;
-    }
-    if (script[*pos] >= 0x80)
-    {
-        return C_INT;
-    }
-    i = 0;
-    j = 0;
-    while (script[*pos] >= 0x40)
-    {
-        i = script[(*pos)++] << j;
-        j += 6;
-    }
-    return i + (script[(*pos)++] << j);
-}
-
-/*==========================================
- * コマンドのプッシュバック
- *------------------------------------------
- */
-void unget_com (int c)
+static
+ScriptCode get_com (const ScriptCode *script, int *pos_)
 {
-    if (unget_com_data != -1)
+    if (static_cast<uint8_t>(script[*pos_]) >= 0x80)
     {
-        if (battle_config.error_log)
-            printf ("unget_com can back only 1 data\n");
+        return ScriptCode::INT;
     }
-    unget_com_data = c;
+    return script[(*pos_)++];
 }
 
 /*==========================================
  * 数値の所得
  *------------------------------------------
  */
-int get_num (unsigned char *script, int *pos)
+static
+int get_num (const ScriptCode *scr, int *pos_)
 {
+    const uint8_t *script = reinterpret_cast<const uint8_t *>(scr);
     int  i, j;
     i = 0;
     j = 0;
-    while (script[*pos] >= 0xc0)
+    while (script[*pos_] >= 0xc0)
     {
-        i += (script[(*pos)++] & 0x7f) << j;
+        i += (script[(*pos_)++] & 0x7f) << j;
         j += 6;
     }
-    return i + ((script[(*pos)++] & 0x7f) << j);
+    return i + ((script[(*pos_)++] & 0x7f) << j);
 }
 
 /*==========================================
  * スタックから値を取り出す
  *------------------------------------------
  */
+static
 int pop_val (struct script_state *st)
 {
     if (st->stack->sp <= 0)
         return 0;
     st->stack->sp--;
     get_val (st, &(st->stack->stack_data[st->stack->sp]));
-    if (st->stack->stack_data[st->stack->sp].type == C_INT)
+    if (st->stack->stack_data[st->stack->sp].type == ScriptCode::INT)
         return st->stack->stack_data[st->stack->sp].u.num;
     return 0;
 }
 
-#define isstr(c) ((c).type==C_STR || (c).type==C_CONSTSTR)
+#define isstr(c) ((c).type==ScriptCode::STR || (c).type==ScriptCode::CONSTSTR)
 
 /*==========================================
  * 加算演算子
  *------------------------------------------
  */
+static
 void op_add (struct script_state *st)
 {
     st->stack->sp--;
@@ -7381,7 +7323,7 @@ void op_add (struct script_state *st)
         conv_str (st, &(st->stack->stack_data[st->stack->sp]));
         conv_str (st, &(st->stack->stack_data[st->stack->sp - 1]));
     }
-    if (st->stack->stack_data[st->stack->sp].type == C_INT)
+    if (st->stack->stack_data[st->stack->sp].type == ScriptCode::INT)
     {                           // ii
         st->stack->stack_data[st->stack->sp - 1].u.num +=
             st->stack->stack_data[st->stack->sp].u.num;
@@ -7395,11 +7337,11 @@ void op_add (struct script_state *st)
                     1);
         strcpy (buf, st->stack->stack_data[st->stack->sp - 1].u.str);
         strcat (buf, st->stack->stack_data[st->stack->sp].u.str);
-        if (st->stack->stack_data[st->stack->sp - 1].type == C_STR)
-            free (st->stack->stack_data[st->stack->sp - 1].u.str);
-        if (st->stack->stack_data[st->stack->sp].type == C_STR)
-            free (st->stack->stack_data[st->stack->sp].u.str);
-        st->stack->stack_data[st->stack->sp - 1].type = C_STR;
+        if (st->stack->stack_data[st->stack->sp - 1].type == ScriptCode::STR)
+            free(const_cast<char *>(st->stack->stack_data[st->stack->sp - 1].u.str));
+        if (st->stack->stack_data[st->stack->sp].type == ScriptCode::STR)
+            free(const_cast<char *>(st->stack->stack_data[st->stack->sp].u.str));
+        st->stack->stack_data[st->stack->sp - 1].type = ScriptCode::STR;
         st->stack->stack_data[st->stack->sp - 1].u.str = buf;
     }
 }
@@ -7408,30 +7350,31 @@ void op_add (struct script_state *st)
  * 二項演算子(文字列)
  *------------------------------------------
  */
-void op_2str (struct script_state *st, int op, int sp1, int sp2)
+static
+void op_2str (struct script_state *st, ScriptCode op, int sp1, int sp2)
 {
-    char *s1 = st->stack->stack_data[sp1].u.str,
-        *s2 = st->stack->stack_data[sp2].u.str;
+    const char *s1 = st->stack->stack_data[sp1].u.str;
+    const char *s2 = st->stack->stack_data[sp2].u.str;
     int  a = 0;
 
     switch (op)
     {
-        case C_EQ:
+        case ScriptCode::EQ:
             a = (strcmp (s1, s2) == 0);
             break;
-        case C_NE:
+        case ScriptCode::NE:
             a = (strcmp (s1, s2) != 0);
             break;
-        case C_GT:
+        case ScriptCode::GT:
             a = (strcmp (s1, s2) > 0);
             break;
-        case C_GE:
+        case ScriptCode::GE:
             a = (strcmp (s1, s2) >= 0);
             break;
-        case C_LT:
+        case ScriptCode::LT:
             a = (strcmp (s1, s2) < 0);
             break;
-        case C_LE:
+        case ScriptCode::LE:
             a = (strcmp (s1, s2) <= 0);
             break;
         default:
@@ -7439,85 +7382,87 @@ void op_2str (struct script_state *st, int op, int sp1, int sp2)
             break;
     }
 
-    push_val (st->stack, C_INT, a);
+    push_val (st->stack, ScriptCode::INT, a);
 
-    if (st->stack->stack_data[sp1].type == C_STR)
-        free (s1);
-    if (st->stack->stack_data[sp2].type == C_STR)
-        free (s2);
+    if (st->stack->stack_data[sp1].type == ScriptCode::STR)
+        free(const_cast<char *>(s1));
+    if (st->stack->stack_data[sp2].type == ScriptCode::STR)
+        free(const_cast<char *>(s2));
 }
 
 /*==========================================
  * 二項演算子(数値)
  *------------------------------------------
  */
-void op_2num (struct script_state *st, int op, int i1, int i2)
+static
+void op_2num (struct script_state *st, ScriptCode op, int i1, int i2)
 {
     switch (op)
     {
-        case C_SUB:
+        case ScriptCode::SUB:
             i1 -= i2;
             break;
-        case C_MUL:
+        case ScriptCode::MUL:
             i1 *= i2;
             break;
-        case C_DIV:
+        case ScriptCode::DIV:
             i1 /= i2;
             break;
-        case C_MOD:
+        case ScriptCode::MOD:
             i1 %= i2;
             break;
-        case C_AND:
+        case ScriptCode::AND:
             i1 &= i2;
             break;
-        case C_OR:
+        case ScriptCode::OR:
             i1 |= i2;
             break;
-        case C_XOR:
+        case ScriptCode::XOR:
             i1 ^= i2;
             break;
-        case C_LAND:
+        case ScriptCode::LAND:
             i1 = i1 && i2;
             break;
-        case C_LOR:
+        case ScriptCode::LOR:
             i1 = i1 || i2;
             break;
-        case C_EQ:
+        case ScriptCode::EQ:
             i1 = i1 == i2;
             break;
-        case C_NE:
+        case ScriptCode::NE:
             i1 = i1 != i2;
             break;
-        case C_GT:
+        case ScriptCode::GT:
             i1 = i1 > i2;
             break;
-        case C_GE:
+        case ScriptCode::GE:
             i1 = i1 >= i2;
             break;
-        case C_LT:
+        case ScriptCode::LT:
             i1 = i1 < i2;
             break;
-        case C_LE:
+        case ScriptCode::LE:
             i1 = i1 <= i2;
             break;
-        case C_R_SHIFT:
+        case ScriptCode::R_SHIFT:
             i1 = i1 >> i2;
             break;
-        case C_L_SHIFT:
+        case ScriptCode::L_SHIFT:
             i1 = i1 << i2;
             break;
     }
-    push_val (st->stack, C_INT, i1);
+    push_val (st->stack, ScriptCode::INT, i1);
 }
 
 /*==========================================
  * 二項演算子
  *------------------------------------------
  */
-void op_2 (struct script_state *st, int op)
+static
+void op_2 (struct script_state *st, ScriptCode op)
 {
     int  i1, i2;
-    char *s1 = NULL, *s2 = NULL;
+    const char *s1 = NULL, *s2 = NULL;
 
     i2 = pop_val (st);
     if (isstr (st->stack->stack_data[st->stack->sp]))
@@ -7541,7 +7486,7 @@ void op_2 (struct script_state *st, int op)
     {
         // si,is => error
         printf ("script: op_2: int&str, str&int not allow.");
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 }
 
@@ -7549,23 +7494,24 @@ void op_2 (struct script_state *st, int op)
  * 単項演算子
  *------------------------------------------
  */
-void op_1num (struct script_state *st, int op)
+static
+void op_1num (struct script_state *st, ScriptCode op)
 {
     int  i1;
     i1 = pop_val (st);
     switch (op)
     {
-        case C_NEG:
+        case ScriptCode::NEG:
             i1 = -i1;
             break;
-        case C_NOT:
+        case ScriptCode::NOT:
             i1 = ~i1;
             break;
-        case C_LNOT:
+        case ScriptCode::LNOT:
             i1 = !i1;
             break;
     }
-    push_val (st->stack, C_INT, i1);
+    push_val (st->stack, ScriptCode::INT, i1);
 }
 
 /*==========================================
@@ -7577,7 +7523,7 @@ int run_func (struct script_state *st)
     int  i, start_sp, end_sp, func;
 
     end_sp = st->stack->sp;
-    for (i = end_sp - 1; i >= 0 && st->stack->stack_data[i].type != C_ARG;
+    for (i = end_sp - 1; i >= 0 && st->stack->stack_data[i].type != ScriptCode::ARG;
          i--);
     if (i == 0)
     {
@@ -7592,8 +7538,8 @@ int run_func (struct script_state *st)
     st->end = end_sp;
 
     func = st->stack->stack_data[st->start].u.num;
-    if (st->stack->stack_data[st->start].type != C_NAME
-        || str_data[func].type != C_FUNC)
+    if (st->stack->stack_data[st->start].type != ScriptCode::NAME
+        || str_data[func].type != ScriptCode::FUNC)
     {
         printf ("run_func: not function and command! \n");
 //      st->stack->sp=0;
@@ -7610,18 +7556,18 @@ int run_func (struct script_state *st)
         {
             switch (st->stack->stack_data[i].type)
             {
-                case C_INT:
+                case ScriptCode::INT:
                     printf (" int(%d)", st->stack->stack_data[i].u.num);
                     break;
-                case C_NAME:
+                case ScriptCode::NAME:
                     printf (" name(%s)",
                             str_buf +
                             str_data[st->stack->stack_data[i].u.num].str);
                     break;
-                case C_ARG:
+                case ScriptCode::ARG:
                     printf (" arg");
                     break;
-                case C_POS:
+                case ScriptCode::POS:
                     printf (" pos(%d)", st->stack->stack_data[i].u.num);
                     break;
                 default:
@@ -7641,7 +7587,7 @@ int run_func (struct script_state *st)
         if (battle_config.error_log)
             printf ("run_func : %s? (%d(%d))\n", str_buf + str_data[func].str,
                     func, str_data[func].type);
-        push_val (st->stack, C_INT, 0);
+        push_val (st->stack, ScriptCode::INT, 0);
     }
 
     pop_stack (st->stack, start_sp, end_sp);
@@ -7650,11 +7596,10 @@ int run_func (struct script_state *st)
     {
         // ユーザー定義関数からの復帰
         int  olddefsp = st->defsp;
-        int  i;
 
         pop_stack (st->stack, st->defsp, start_sp); // 復帰に邪魔なスタック削除
         if (st->defsp < 4
-            || st->stack->stack_data[st->defsp - 1].type != C_RETINFO)
+            || st->stack->stack_data[st->defsp - 1].type != ScriptCode::RETINFO)
         {
             printf
                 ("script:run_func(return) return without callfunc or callsub!\n");
@@ -7663,7 +7608,7 @@ int run_func (struct script_state *st)
         }
         i = conv_num (st, &(st->stack->stack_data[st->defsp - 4])); // 引数の数所得
         st->pos = conv_num (st, &(st->stack->stack_data[st->defsp - 1]));   // スクリプト位置の復元
-        st->script = (char *) conv_num (st, &(st->stack->stack_data[st->defsp - 2]));   // スクリプトを復元
+        st->script = (ScriptCode *) conv_num (st, &(st->stack->stack_data[st->defsp - 2]));   // スクリプトを復元
         st->defsp = conv_num (st, &(st->stack->stack_data[st->defsp - 3])); // 基準スタックポインタを復元
 
         pop_stack (st->stack, olddefsp - 4 - i, olddefsp);  // 要らなくなったスタック(引数と復帰用データ)削除
@@ -7678,10 +7623,11 @@ int run_func (struct script_state *st)
  * スクリプトの実行メイン部分
  *------------------------------------------
  */
-int run_script_main (unsigned char *script, int pos, int rid, int oid,
-                     struct script_state *st, unsigned char *rootscript)
+static
+int run_script_main (const ScriptCode *script, int pos_, int rid, int oid,
+                     struct script_state *st, const ScriptCode *rootscript)
 {
-    int  c, rerun_pos;
+    int rerun_pos;
     int  cmdcount = script_config.check_cmdcount;
     int  gotocount = script_config.check_gotocount;
     struct script_stack *stack = st->stack;
@@ -7692,9 +7638,9 @@ int run_script_main (unsigned char *script, int pos, int rid, int oid,
     rerun_pos = st->pos;
     for (st->state = 0; st->state == 0;)
     {
-        switch (c = get_com (script, &st->pos))
+        switch (ScriptCode c = get_com (script, &st->pos))
         {
-            case C_EOL:
+            case ScriptCode::EOL:
                 if (stack->sp != st->defsp)
                 {
                     if (battle_config.error_log)
@@ -7704,22 +7650,22 @@ int run_script_main (unsigned char *script, int pos, int rid, int oid,
                 }
                 rerun_pos = st->pos;
                 break;
-            case C_INT:
-                push_val (stack, C_INT, get_num (script, &st->pos));
+            case ScriptCode::INT:
+                push_val (stack, ScriptCode::INT, get_num (script, &st->pos));
                 break;
-            case C_POS:
-            case C_NAME:
+            case ScriptCode::POS:
+            case ScriptCode::NAME:
                 push_val (stack, c, (*(int *) (script + st->pos)) & 0xffffff);
                 st->pos += 3;
                 break;
-            case C_ARG:
+            case ScriptCode::ARG:
                 push_val (stack, c, 0);
                 break;
-            case C_STR:
-                push_str (stack, C_CONSTSTR, script + st->pos);
-                while (script[st->pos++]);
+            case ScriptCode::STR:
+                push_str (stack, ScriptCode::CONSTSTR, reinterpret_cast<const char *>(script + st->pos));
+                while (script[st->pos++] != ScriptCode::NOP);
                 break;
-            case C_FUNC:
+            case ScriptCode::FUNC:
                 run_func (st);
                 if (st->state == GOTO)
                 {
@@ -7734,43 +7680,43 @@ int run_script_main (unsigned char *script, int pos, int rid, int oid,
                 }
                 break;
 
-            case C_ADD:
+            case ScriptCode::ADD:
                 op_add (st);
                 break;
 
-            case C_SUB:
-            case C_MUL:
-            case C_DIV:
-            case C_MOD:
-            case C_EQ:
-            case C_NE:
-            case C_GT:
-            case C_GE:
-            case C_LT:
-            case C_LE:
-            case C_AND:
-            case C_OR:
-            case C_XOR:
-            case C_LAND:
-            case C_LOR:
-            case C_R_SHIFT:
-            case C_L_SHIFT:
+            case ScriptCode::SUB:
+            case ScriptCode::MUL:
+            case ScriptCode::DIV:
+            case ScriptCode::MOD:
+            case ScriptCode::EQ:
+            case ScriptCode::NE:
+            case ScriptCode::GT:
+            case ScriptCode::GE:
+            case ScriptCode::LT:
+            case ScriptCode::LE:
+            case ScriptCode::AND:
+            case ScriptCode::OR:
+            case ScriptCode::XOR:
+            case ScriptCode::LAND:
+            case ScriptCode::LOR:
+            case ScriptCode::R_SHIFT:
+            case ScriptCode::L_SHIFT:
                 op_2 (st, c);
                 break;
 
-            case C_NEG:
-            case C_NOT:
-            case C_LNOT:
+            case ScriptCode::NEG:
+            case ScriptCode::NOT:
+            case ScriptCode::LNOT:
                 op_1num (st, c);
                 break;
 
-            case C_NOP:
+            case ScriptCode::NOP:
                 st->state = END;
                 break;
 
             default:
                 if (battle_config.error_log)
-                    printf ("unknown command : %d @ %d\n", c, pos);
+                    printf ("unknown command : %d @ %d\n", c, pos_);
                 st->state = END;
                 break;
         }
@@ -7825,23 +7771,23 @@ int run_script_main (unsigned char *script, int pos, int rid, int oid,
  * スクリプトの実行
  *------------------------------------------
  */
-int run_script (unsigned char *script, int pos, int rid, int oid)
+int run_script (const ScriptCode *script, int pos_, int rid, int oid)
 {
-    return run_script_l (script, pos, rid, oid, 0, NULL);
+    return run_script_l (script, pos_, rid, oid, 0, NULL);
 }
 
-int run_script_l (unsigned char *script, int pos, int rid, int oid,
+int run_script_l (const ScriptCode *script, int pos_, int rid, int oid,
                   int args_nr, argrec_t * args)
 {
     struct script_stack stack;
     struct script_state st;
     struct map_session_data *sd = map_id2sd (rid);
-    unsigned char *rootscript = script;
+    const ScriptCode *rootscript = script;
     int  i;
-    if (script == NULL || pos < 0)
+    if (script == NULL || pos_ < 0)
         return -1;
 
-    if (sd && sd->npc_stackbuf && sd->npc_scriptroot == (char *) rootscript)
+    if (sd && sd->npc_stackbuf && sd->npc_scriptroot == rootscript)
     {
         // 前回のスタックを復帰
         script = sd->npc_script;
@@ -7863,7 +7809,7 @@ int run_script_l (unsigned char *script, int pos, int rid, int oid,
             calloc (stack.sp_max, sizeof (stack.stack_data[0]));
     }
     st.stack = &stack;
-    st.pos = pos;
+    st.pos = pos_;
     st.rid = rid;
     st.oid = oid;
     for (i = 0; i < args_nr; i++)
@@ -7873,7 +7819,7 @@ int run_script_l (unsigned char *script, int pos, int rid, int oid,
         else
             pc_setreg (sd, add_str (args[i].name), args[i].v.i);
     }
-    run_script_main (script, pos, rid, oid, &st, rootscript);
+    run_script_main (script, pos_, rid, oid, &st, rootscript);
 
     free (stack.stack_data);
     stack.stack_data = NULL;
@@ -8046,7 +7992,7 @@ static int set_posword (char *p)
     return 0;
 }
 
-int script_config_read (char *cfgName)
+int script_config_read (const char *cfgName)
 {
     int  i;
     char line[1024], w1[1024], w2[1024];
diff --git a/src/map/script.hpp b/src/map/script.hpp
index a96bc5a..6b345c4 100644
--- a/src/map/script.hpp
+++ b/src/map/script.hpp
@@ -2,13 +2,48 @@
 #ifndef SCRIPT_HPP
 #define SCRIPT_HPP
 
+// values are private, but gcc < 4.6 doesn't
+// support forward-declared enums
+enum class ScriptCode : uint8_t
+#ifdef RECENT_GCC
+;
+#else
+{
+    // types and specials
+    NOP, POS, INT, PARAM, FUNC, STR, CONSTSTR, ARG,
+    NAME, EOL, RETINFO,
+
+    // unary and binary operators
+    LOR, LAND, LE, LT, GE, GT, EQ, NE,
+    XOR, OR, AND, ADD, SUB, MUL, DIV, MOD, NEG, LNOT,
+    NOT, R_SHIFT, L_SHIFT,
+
+    // really nasty workaround for gcc < 4.6
+
+    x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x2a, x2b, x2c, x2d, x2e, x2f,
+    x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x3a, x3b, x3c, x3d, x3e, x3f,
+    x40, x41, x42, x43, x44, x45, x46, x47, x48, x49, x4a, x4b, x4c, x4d, x4e, x4f,
+    x50, x51, x52, x53, x54, x55, x56, x57, x58, x59, x5a, x5b, x5c, x5d, x5e, x5f,
+    x60, x61, x62, x63, x64, x65, x66, x67, x68, x69, x6a, x6b, x6c, x6d, x6e, x6f,
+    x70, x71, x72, x73, x74, x75, x76, x77, x78, x79, x7a, x7b, x7c, x7d, x7e, x7f,
+    x80, x81, x82, x83, x84, x85, x86, x87, x88, x89, x8a, x8b, x8c, x8d, x8e, x8f,
+    x90, x91, x92, x93, x94, x95, x96, x97, x98, x99, x9a, x9b, x9c, x9d, x9e, x9f,
+    xa0, xa1, xa2, xa3, xa4, xa5, xa6, xa7, xa8, xa9, xaa, xab, xac, xad, xae, xaf,
+    xb0, xb1, xb2, xb3, xb4, xb5, xb6, xb7, xb8, xb9, xba, xbb, xbc, xbd, xbe, xbf,
+    xc0, xc1, xc2, xc3, xc4, xc5, xc6, xc7, xc8, xc9, xca, xcb, xcc, xcd, xce, xcf,
+    xd0, xd1, xd2, xd3, xd4, xd5, xd6, xd7, xd8, xd9, xda, xdb, xdc, xdd, xde, xdf,
+    xe0, xe1, xe2, xe3, xe4, xe5, xe6, xe7, xe8, xe9, xea, xeb, xec, xed, xee, xef,
+    xf0, xf1, xf2, xf3, xf4, xf5, xf6, xf7, xf8, xf9, xfa, xfb, xfc, xfd, xfe, xff,
+};
+#endif
+
 struct script_data
 {
-    int  type;
+    ScriptCode type;
     union
     {
         int  num;
-        char *str;
+        const char *str;
     } u;
 };
 
@@ -17,33 +52,38 @@ struct script_stack
     int  sp, sp_max;
     struct script_data *stack_data;
 };
+
 struct script_state
 {
     struct script_stack *stack;
     int  start, end;
     int  pos, state;
     int  rid, oid;
-    char *script, *new_script;
+    const ScriptCode *script, *new_script;
     int  defsp, new_pos, new_defsp;
 };
 
-unsigned char *parse_script (unsigned char *, int);
+const ScriptCode *parse_script (const char *, int);
 typedef struct argrec
 {
-    char *name;
-    union
+    const char *name;
+    union _aru
     {
         int  i;
-        char *s;
+        const char *s;
+
+        _aru() = default;
+        _aru(int n) : i(n) {}
+        _aru(const char *z) : s(z) {}
     } v;
 } argrec_t;
-int  run_script_l (unsigned char *, int, int, int, int, argrec_t * args);
-int  run_script (unsigned char *, int, int, int);
+int  run_script_l (const ScriptCode *, int, int, int, int, argrec_t * args);
+int  run_script (const ScriptCode *, int, int, int);
 
 struct dbt *script_get_label_db (void);
 struct dbt *script_get_userfunc_db (void);
 
-int  script_config_read (char *cfgName);
+int  script_config_read (const char *cfgName);
 int  do_init_script (void);
 int  do_final_script (void);
 
diff --git a/src/map/skill-pools.cpp b/src/map/skill-pools.cpp
index 6ab6ea5..204036d 100644
--- a/src/map/skill-pools.cpp
+++ b/src/map/skill-pools.cpp
@@ -27,7 +27,7 @@
 int  skill_pool_skills[MAX_POOL_SKILLS];
 int  skill_pool_skills_size = 0;
 
-extern void skill_pool_register (int id)
+void skill_pool_register(int id)
 {
     if (skill_pool_skills_size + 1 >= MAX_POOL_SKILLS)
     {
@@ -39,7 +39,7 @@ extern void skill_pool_register (int id)
     skill_pool_skills[skill_pool_skills_size++] = id;
 }
 
-char *skill_name (int skill)
+const char *skill_name (int skill)
 {
     if (skill > 0 && skill < MAX_SKILL_DB)
         return skill_names[skill].desc;
diff --git a/src/map/skill.cpp b/src/map/skill.cpp
index 779af98..dfacf8c 100644
--- a/src/map/skill.cpp
+++ b/src/map/skill.cpp
@@ -830,6 +830,7 @@ int skill_get_mhp (int id, int lv)
     return (lv <= 0) ? 0 : skill_db[id].mhp[lv - 1];
 }
 
+static
 int skill_get_castnodex (int id, int lv)
 {
     return (lv <= 0) ? 0 : skill_db[id].castnodex[lv - 1];
@@ -840,9 +841,6 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
                                             int skillid, int skilllv, int x,
                                             int y, int flag);
 int  skill_check_condition (struct map_session_data *sd, int type);
-int  skill_castend_damage_id (struct block_list *src, struct block_list *bl,
-                              int skillid, int skilllv, unsigned int tick,
-                              int flag);
 int  skill_frostjoke_scream (struct block_list *bl, va_list ap);
 int  skill_status_change_timer_sub (struct block_list *bl, va_list ap);
 int  skill_attack_area (struct block_list *bl, va_list ap);
@@ -1533,6 +1531,7 @@ int skill_additional_effect (struct block_list *src, struct block_list *bl,
 /*=========================================================================
  スキル攻撃吹き飛ばし処理
 -------------------------------------------------------------------------*/
+static
 int skill_blown (struct block_list *src, struct block_list *target, int count)
 {
     int  dx = 0, dy = 0, nx, ny;
@@ -2091,6 +2090,7 @@ int skill_attack (int attack_type, struct block_list *src,
 static int skill_area_temp[8];  /* 一時変数。必要なら使う。 */
 typedef int (*SkillFunc) (struct block_list *, struct block_list *, int, int,
                           unsigned int, int);
+static
 int skill_area_sub (struct block_list *bl, va_list ap)
 {
     struct block_list *src;
@@ -2237,6 +2237,7 @@ int skill_check_unit_range2 (int m, int x, int y, int range)
  * 範囲スキル使用処理小分けここから
  */
 /* 対象の数をカウントする。(skill_area_temp[0]を初期化しておくこと) */
+static
 int skill_area_sub_count (struct block_list *src, struct block_list *target,
                           int skillid, int skilllv, unsigned int tick,
                           int flag)
@@ -2250,7 +2251,7 @@ int skill_area_sub_count (struct block_list *src, struct block_list *target,
  *
  *------------------------------------------
  */
-static void skill_timerskill (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
+static void skill_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct map_session_data *sd = NULL;
     struct mob_data *md = NULL;
@@ -2433,7 +2434,7 @@ int skill_addtimerskill (struct block_list *src, unsigned int tick,
             if (sd->skilltimerskill[i].timer == -1)
             {
                 sd->skilltimerskill[i].timer =
-                    add_timer (tick, skill_timerskill, src->id, i);
+                    add_timer (tick, skill_timer, src->id, i);
                 sd->skilltimerskill[i].src_id = src->id;
                 sd->skilltimerskill[i].target_id = target;
                 sd->skilltimerskill[i].skill_id = skill_id;
@@ -2458,7 +2459,7 @@ int skill_addtimerskill (struct block_list *src, unsigned int tick,
             if (md->skilltimerskill[i].timer == -1)
             {
                 md->skilltimerskill[i].timer =
-                    add_timer (tick, skill_timerskill, src->id, i);
+                    add_timer (tick, skill_timer, src->id, i);
                 md->skilltimerskill[i].src_id = src->id;
                 md->skilltimerskill[i].target_id = target;
                 md->skilltimerskill[i].skill_id = skill_id;
@@ -2496,7 +2497,7 @@ int skill_cleartimerskill (struct block_list *src)
         {
             if (sd->skilltimerskill[i].timer != -1)
             {
-                delete_timer (sd->skilltimerskill[i].timer, skill_timerskill);
+                delete_timer (sd->skilltimerskill[i].timer, skill_timer);
                 sd->skilltimerskill[i].timer = -1;
             }
         }
@@ -2509,7 +2510,7 @@ int skill_cleartimerskill (struct block_list *src)
         {
             if (md->skilltimerskill[i].timer != -1)
             {
-                delete_timer (md->skilltimerskill[i].timer, skill_timerskill);
+                delete_timer (md->skilltimerskill[i].timer, skill_timer);
                 md->skilltimerskill[i].timer = -1;
             }
         }
@@ -2532,7 +2533,6 @@ int skill_castend_damage_id (struct block_list *src, struct block_list *bl,
                              int flag)
 {
     struct map_session_data *sd = NULL;
-    int  i;
 
     nullpo_retr (1, src);
     nullpo_retr (1, bl);
@@ -2687,7 +2687,7 @@ int skill_castend_damage_id (struct block_list *src, struct block_list *bl,
                               flag);
                 if (sd)
                 {
-                    for (i = 1; i < sd->spiritball_old; i++)
+                    for (int i = 1; i < sd->spiritball_old; i++)
                         skill_addtimerskill (src, tick + i * 200, bl->id, 0,
                                              0, skillid, skilllv, BF_WEAPON,
                                              flag);
@@ -3173,7 +3173,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
     struct map_session_data *dstsd = NULL;
     struct mob_data *md = NULL;
     struct mob_data *dstmd = NULL;
-    int  i;
     int  sc_def_vit, sc_def_mdef, strip_fix, strip_time, strip_per;
     int  sc_dex, sc_luk;
     //クラスチェンジ用ボスモンスターID
@@ -3727,7 +3726,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                     map_freeblock_unlock ();
                     return 1;
                 }
-                for (i = 0; i < skilllv; i++)
+                for (int i = 0; i < skilllv; i++)
                 {
                     if (!sd->dev.val1[i])
                     {           // 空きがあったら入れる
@@ -3764,7 +3763,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
             if (sd)
             {
                 clif_skill_nodamage (src, bl, skillid, skilllv, 1);
-                for (i = 0; i < 5; i++)
+                for (int i = 0; i < 5; i++)
                     pc_addspiritball (sd, skill_get_time (skillid, skilllv),
                                       5);
             }
@@ -3776,7 +3775,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                                        skill_get_time (skillid, skilllv), 0);
             break;
         case MO_ABSORBSPIRITS: // 気奪
-            i = 0;
+        {
+            int i = 0;
             if (sd && dstsd)
             {
                 if (sd == dstsd || map[sd->bl.m].flag.pvp
@@ -3811,6 +3811,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
             else
                 clif_skill_nodamage (src, bl, skillid, skilllv, 0);
             break;
+        }
 
         case AC_MAKINGARROW:   /* 矢作成 */
 /*		if(sd) {
@@ -4334,7 +4335,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                                            skilllv, 0, 0, 0, strip_time, 0);
                 if (dstsd)
                 {
-                    for (i = 0; i < MAX_INVENTORY; i++)
+                    for (int i = 0; i < MAX_INVENTORY; i++)
                     {
                         if (dstsd->status.inventory[i].equip
                             && dstsd->status.inventory[i].equip & 0x0002)
@@ -4364,7 +4365,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                                            skilllv, 0, 0, 0, strip_time, 0);
                 if (dstsd)
                 {
-                    for (i = 0; i < MAX_INVENTORY; i++)
+                    for (int i = 0; i < MAX_INVENTORY; i++)
                     {
                         if (dstsd->status.inventory[i].equip
                             && dstsd->status.inventory[i].equip & 0x0020)
@@ -4394,7 +4395,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                                            skilllv, 0, 0, 0, strip_time, 0);
                 if (dstsd)
                 {
-                    for (i = 0; i < MAX_INVENTORY; i++)
+                    for (int i = 0; i < MAX_INVENTORY; i++)
                     {
                         if (dstsd->status.inventory[i].equip
                             && dstsd->status.inventory[i].equip & 0x0010)
@@ -4423,7 +4424,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                                            skilllv, 0, 0, 0, strip_time, 0);
                 if (dstsd)
                 {
-                    for (i = 0; i < MAX_INVENTORY; i++)
+                    for (int i = 0; i < MAX_INVENTORY; i++)
                     {
                         if (dstsd->status.inventory[i].equip
                             && dstsd->status.inventory[i].equip & 0x0100)
@@ -4956,7 +4957,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
             {
                 struct skill_unit *su = NULL;
                 struct item item_tmp;
-                int  flag;
                 if ((bl->type == BL_SKILL) &&
                     (su = (struct skill_unit *) bl) &&
                     (su->group->src_id == src->id || map[bl->m].flag.pvp
@@ -4969,7 +4969,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                     {
                         if (battle_config.skill_removetrap_type == 1)
                         {
-                            for (i = 0; i < 10; i++)
+                            for (int i = 0; i < 10; i++)
                             {
                                 if (skill_db[su->group->skill_id].itemid[i] >
                                     0)
@@ -4979,14 +4979,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                                         skill_db[su->group->
                                                  skill_id].itemid[i];
                                     item_tmp.identify = 1;
+                                    int item_flag;
                                     if (item_tmp.nameid
-                                        && (flag =
+                                        && (item_flag =
                                             pc_additem (sd, &item_tmp,
                                                         skill_db[su->
                                                                  group->skill_id].amount
                                                         [i])))
                                     {
-                                        clif_additem (sd, 0, 0, flag);
+                                        clif_additem (sd, 0, 0, item_flag);
                                         map_addflooritem (&item_tmp,
                                                           skill_db[su->
                                                                    group->skill_id].amount
@@ -5003,10 +5004,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
                             memset (&item_tmp, 0, sizeof (item_tmp));
                             item_tmp.nameid = 1065;
                             item_tmp.identify = 1;
+                            int item_flag;
                             if (item_tmp.nameid
-                                && (flag = pc_additem (sd, &item_tmp, 1)))
+                                && (item_flag = pc_additem (sd, &item_tmp, 1)))
                             {
-                                clif_additem (sd, 0, 0, flag);
+                                clif_additem (sd, 0, 0, item_flag);
                                 map_addflooritem (&item_tmp, 1, sd->bl.m,
                                                   sd->bl.x, sd->bl.y, NULL,
                                                   NULL, NULL, 0);
@@ -5143,6 +5145,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl,
  * スキル使用(詠唱完了、ID指定)
  *------------------------------------------
  */
+static
 void skill_castend_id (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct map_session_data *sd = map_id2sd (id) /*,*target_sd=NULL */ ;
@@ -5414,7 +5417,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid,
 
         case WZ_METEOR:        //メテオストーム
         {
-            int  flag = 0;
+            int flag_ = 0;
             for (i = 0; i < 2 + (skilllv >> 1); i++)
             {
                 int  j = 0, c;
@@ -5436,21 +5439,21 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid,
                        && j < 100);
                 if (j >= 100)
                     continue;
-                if (flag == 0)
+                if (flag_ == 0)
                 {
                     clif_skill_poseffect (src, skillid, skilllv, tmpx, tmpy,
                                           tick);
-                    flag = 1;
+                    flag_ = 1;
                 }
                 if (i > 0)
                     skill_addtimerskill (src, tick + i * 1000, 0, tmpx, tmpy,
                                          skillid, skilllv, (x1 << 16) | y1,
-                                         flag);
+                                         flag_);
                 x1 = tmpx;
                 y1 = tmpy;
             }
             skill_addtimerskill (src, tick + i * 1000, 0, tmpx, tmpy, skillid,
-                                 skilllv, -1, flag);
+                                 skilllv, -1, flag_);
         }
             break;
 
@@ -5534,7 +5537,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid,
  *------------------------------------------
  */
 int skill_castend_map (struct map_session_data *sd, int skill_num,
-                       const char *map)
+                       const char *mapname)
 {
     int  x = 0, y = 0;
 
@@ -5563,16 +5566,16 @@ int skill_castend_map (struct map_session_data *sd, int skill_num,
 
     if (battle_config.pc_skill_log)
         printf ("PC %d skill castend skill =%d map=%s\n", sd->bl.id,
-                skill_num, map);
+                skill_num, mapname);
     pc_stop_walking (sd, 0);
 
-    if (strcmp (map, "cancel") == 0)
+    if (strcmp (mapname, "cancel") == 0)
         return 0;
 
     switch (skill_num)
     {
         case AL_TELEPORT:      /* テレポート */
-            if (strcmp (map, "Random") == 0)
+            if (strcmp (mapname, "Random") == 0)
                 pc_randomwarp (sd, 3);
             else
                 pc_setpos (sd, sd->status.save_point.map,
@@ -5611,7 +5614,7 @@ int skill_castend_map (struct map_session_data *sd, int skill_num,
 
             for (i = 0; i < sd->skilllv; i++)
             {
-                if (strcmp (map, p[i]->map) == 0)
+                if (strcmp (mapname, p[i]->map) == 0)
                 {
                     x = p[i]->x;
                     y = p[i]->y;
@@ -5646,8 +5649,8 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
                                             int y, int flag)
 {
     struct skill_unit_group *group;
-    int  i, count = 1, limit = 10000, val1 = 0, val2 = 0;
-    int  target = BCT_ENEMY, interval = 1000, range = 0;
+    int  i, count = 1, limit_ = 10000, val1_ = 0, val2_ = 0;
+    int  target = BCT_ENEMY, interval = 1000, range_ = 0;
     int  dir = 0, aoe_diameter = 0; // -- aoe_diameter (moonsoul) added for sage Area Of Effect skills
 
     nullpo_retr (0, src);
@@ -5656,8 +5659,8 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
     {                           /* 設定 */
 
         case MG_SAFETYWALL:    /* セイフティウォール */
-            limit = skill_get_time (skillid, skilllv);
-            val2 = skilllv + 1;
+            limit_ = skill_get_time (skillid, skilllv);
+            val2_ = skilllv + 1;
             interval = -1;
             target = (battle_config.defnotenemy) ? BCT_NOENEMY : BCT_ALL;
             break;
@@ -5671,13 +5674,13 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
                 count = 5;
             else
                 count = 3;
-            limit = skill_get_time (skillid, skilllv);
-            val2 = 4 + skilllv;
+            limit_ = skill_get_time (skillid, skilllv);
+            val2_ = 4 + skilllv;
             interval = 1;
             break;
 
         case AL_PNEUMA:        /* ニューマ */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             interval = -1;
             target = (battle_config.defnotenemy) ? BCT_NOENEMY : BCT_ALL;
             count = 9;
@@ -5685,81 +5688,81 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
 
         case AL_WARP:          /* ワープポータル */
             target = BCT_ALL;
-            val1 = skilllv + 6;
+            val1_ = skilllv + 6;
             if (flag == 0)
-                limit = 2000;
+                limit_ = 2000;
             else
-                limit = skill_get_time (skillid, skilllv);
+                limit_ = skill_get_time (skillid, skilllv);
             break;
 
         case PR_SANCTUARY:     /* サンクチュアリ */
             count = 21;
-            limit = skill_get_time (skillid, skilllv);
-            val1 = skilllv + 3;
-            val2 = (skilllv > 6) ? 777 : skilllv * 100;
+            limit_ = skill_get_time (skillid, skilllv);
+            val1_ = skilllv + 3;
+            val2_ = (skilllv > 6) ? 777 : skilllv * 100;
             target = BCT_ALL;
-            range = 1;
+            range_ = 1;
             break;
 
         case PR_MAGNUS:        /* マグヌスエクソシズム */
             count = 33;
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             interval = 3000;
             break;
 
         case WZ_FIREPILLAR:    /* ファイアーピラー */
             if (flag == 0)
-                limit = skill_get_time (skillid, skilllv);
+                limit_ = skill_get_time (skillid, skilllv);
             else
-                limit = 1000;
+                limit_ = 1000;
             interval = 2000;
-            val1 = skilllv + 2;
-            range = 1;
+            val1_ = skilllv + 2;
+            range_ = 1;
             break;
 
         case MG_THUNDERSTORM:  /* サンダーストーム */
-            limit = 500;
-            range = 1;
+            limit_ = 500;
+            range_ = 1;
             break;
 
         case WZ_FROSTNOVA:     /* フロストノヴァ */
-            limit = 500;
-            range = 5;
+            limit_ = 500;
+            range_ = 5;
             break;
         case WZ_HEAVENDRIVE:   /* ヘヴンズドライブ */
-            limit = 500;
-            range = 2;
+            limit_ = 500;
+            range_ = 2;
             break;
 
         case WZ_METEOR:        /* メテオストーム */
-            limit = 500;
-            range = 3;
+            limit_ = 500;
+            range_ = 3;
             break;
 
         case WZ_SIGHTRASHER:
-            limit = 500;
+            limit_ = 500;
             count = 41;
             break;
 
         case WZ_VERMILION:     /* ロードオブヴァーミリオン */
-            limit = 4100;
+            limit_ = 4100;
             interval = 1000;
-            range = 6;
+            range_ = 6;
             break;
 
         case WZ_ICEWALL:       /* アイスウォール */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             count = 5;
             break;
 
         case WZ_STORMGUST:     /* ストームガスト */
-            limit = 4600;
+            limit_ = 4600;
             interval = 450;
-            range = 5;
+            range_ = 5;
             break;
 
         case WZ_QUAGMIRE:      /* クァグマイア */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             interval = 200;
             count = 25;
             break;
@@ -5773,45 +5776,45 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
         case HT_FREEZINGTRAP:  /* フリージングトラップ */
         case HT_BLASTMINE:     /* ブラストマイン */
         case HT_CLAYMORETRAP:  /* クレイモアートラップ */
-            limit = skill_get_time (skillid, skilllv);
-            range = 1;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 1;
             break;
 
         case HT_TALKIEBOX:     /* トーキーボックス */
-            limit = skill_get_time (skillid, skilllv);
-            range = 1;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 1;
             target = BCT_ALL;
             break;
 
         case HT_SHOCKWAVE:     /* ショックウェーブトラップ */
-            limit = skill_get_time (skillid, skilllv);
-            range = 1;
-            val1 = skilllv * 15 + 10;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 1;
+            val1_ = skilllv * 15 + 10;
             break;
 
         case AS_VENOMDUST:     /* ベノムダスト */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             interval = 1000;
             count = 5;
             break;
 
         case CR_GRANDCROSS:    /* グランドクロス */
             count = 29;
-            limit = 1000;
+            limit_ = 1000;
             interval = 300;
             break;
 
         case SA_VOLCANO:       /* ボルケーノ */
         case SA_DELUGE:        /* デリュージ */
         case SA_VIOLENTGALE:   /* バイオレントゲイル */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             count = skilllv <= 2 ? 25 : (skilllv <= 4 ? 49 : 81);
             target = BCT_ALL;
             break;
 
         case SA_LANDPROTECTOR: /* グランドクロス */
-            limit = skill_get_time (skillid, skilllv);  // changed to get duration from cast_db (moonsoul)
-            val1 = skilllv * 15 + 10;
+            limit_ = skill_get_time (skillid, skilllv);  // changed to get duration from cast_db (moonsoul)
+            val1_ = skilllv * 15 + 10;
             aoe_diameter = skilllv + skilllv % 2 + 5;
             target = BCT_ALL;
             count = aoe_diameter * aoe_diameter;    // -- this will not function if changed to ^2 (moonsoul)
@@ -5821,8 +5824,8 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
         case BD_ETERNALCHAOS:  /* エターナルカオス */
         case BD_ROKISWEIL:     /* ロキの叫び */
             count = 81;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_ALL;
             break;
         case BD_RICHMANKIM:
@@ -5831,165 +5834,165 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
         case BD_INTOABYSS:     /* 深淵の中に */
         case BD_SIEGFRIED:     /* 不死身のジークフリード */
             count = 81;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_PARTY;
             break;
 
         case BA_WHISTLE:       /* 口笛 */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_NOENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     (pc_checkskill
                      ((struct map_session_data *) src,
                       BA_MUSICALLESSON) + 1) >> 1;
-            val2 = ((battle_get_agi (src) / 10) & 0xffff) << 16;
-            val2 |= (battle_get_luk (src) / 10) & 0xffff;
+            val2_ = ((battle_get_agi (src) / 10) & 0xffff) << 16;
+            val2_ |= (battle_get_luk (src) / 10) & 0xffff;
             break;
         case DC_HUMMING:       /* ハミング */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_NOENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     (pc_checkskill
                      ((struct map_session_data *) src,
                       DC_DANCINGLESSON) + 1) >> 1;
-            val2 = battle_get_dex (src) / 10;
+            val2_ = battle_get_dex (src) / 10;
             break;
 
         case BA_DISSONANCE:    /* 不協和音 */
         case DC_UGLYDANCE:     /* 自分勝手なダンス */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_ENEMY;
             break;
 
         case DC_DONTFORGETME:  /* 私を忘れないで… */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_ENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     (pc_checkskill
                      ((struct map_session_data *) src,
                       DC_DANCINGLESSON) + 1) >> 1;
-            val2 = ((battle_get_str (src) / 20) & 0xffff) << 16;
-            val2 |= (battle_get_agi (src) / 10) & 0xffff;
+            val2_ = ((battle_get_str (src) / 20) & 0xffff) << 16;
+            val2_ |= (battle_get_agi (src) / 10) & 0xffff;
             break;
         case BA_POEMBRAGI:     /* ブラギの詩 */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_NOENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     pc_checkskill ((struct map_session_data *) src,
                                    BA_MUSICALLESSON);
-            val2 = ((battle_get_dex (src) / 10) & 0xffff) << 16;
-            val2 |= (battle_get_int (src) / 5) & 0xffff;
+            val2_ = ((battle_get_dex (src) / 10) & 0xffff) << 16;
+            val2_ |= (battle_get_int (src) / 5) & 0xffff;
             break;
         case BA_APPLEIDUN:     /* イドゥンの林檎 */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_NOENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     ((pc_checkskill
                       ((struct map_session_data *) src,
                        BA_MUSICALLESSON)) & 0xffff) << 16;
             else
-                val1 = 0;
-            val1 |= (battle_get_vit (src)) & 0xffff;
-            val2 = 0;           //回復用タイムカウンタ(6秒毎に1増加)
+                val1_ = 0;
+            val1_ |= (battle_get_vit (src)) & 0xffff;
+            val2_ = 0;           //回復用タイムカウンタ(6秒毎に1増加)
             break;
         case DC_SERVICEFORYOU: /* サービスフォーユー */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_PARTY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     (pc_checkskill
                      ((struct map_session_data *) src,
                       DC_DANCINGLESSON) + 1) >> 1;
-            val2 = battle_get_int (src) / 10;
+            val2_ = battle_get_int (src) / 10;
             break;
         case BA_ASSASSINCROSS: /* 夕陽のアサシンクロス */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_NOENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     (pc_checkskill
                      ((struct map_session_data *) src,
                       BA_MUSICALLESSON) + 1) >> 1;
-            val2 = battle_get_agi (src) / 20;
+            val2_ = battle_get_agi (src) / 20;
             break;
         case DC_FORTUNEKISS:   /* 幸運のキス */
             count = 49;
-            limit = skill_get_time (skillid, skilllv);
-            range = 5;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = 5;
             target = BCT_NOENEMY;
             if (src->type == BL_PC)
-                val1 =
+                val1_ =
                     (pc_checkskill
                      ((struct map_session_data *) src,
                       DC_DANCINGLESSON) + 1) >> 1;
-            val2 = battle_get_luk (src) / 10;
+            val2_ = battle_get_luk (src) / 10;
             break;
         case AM_DEMONSTRATION: /* デモンストレーション */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             interval = 1000;
-            range = 1;
+            range_ = 1;
             target = BCT_ENEMY;
             break;
         case WE_CALLPARTNER:   /* あなたに逢いたい */
-            limit = skill_get_time (skillid, skilllv);
-            range = -1;
+            limit_ = skill_get_time (skillid, skilllv);
+            range_ = -1;
             break;
 
         case HP_BASILICA:      /* バジリカ */
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             target = BCT_ALL;
-            range = 3;
+            range_ = 3;
             //Fix to prevent the priest from walking while Basilica is up.
             battle_stopwalking (src, 1);
-            skill_status_change_start (src, SC_ANKLE, skilllv, 0, 0, 0, limit,
+            skill_status_change_start (src, SC_ANKLE, skilllv, 0, 0, 0, limit_,
                                        0);
             break;
         case PA_GOSPEL:        /* ゴスペル */
             count = 49;
             target = BCT_PARTY;
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             break;
         case PF_FOGWALL:       /* フォグウォール */
             count = 15;
-            limit = skill_get_time (skillid, skilllv);
+            limit_ = skill_get_time (skillid, skilllv);
             break;
         case RG_GRAFFITI:      /* Graffiti */
             count = 1;          // Leave this at 1 [Valaris]
-            limit = 600000;     // Time length [Valaris]
+            limit_ = 600000;     // Time length [Valaris]
             break;
     };
 
     nullpo_retr (NULL, group =
                  skill_initunitgroup (src, count, skillid, skilllv,
                                       skill_get_unit_id (skillid, flag & 1)));
-    group->limit = limit;
-    group->val1 = val1;
-    group->val2 = val2;
+    group->limit = limit_;
+    group->val1 = val1_;
+    group->val2 = val2_;
     group->target_flag = target;
     group->interval = interval;
-    group->range = range;
+    group->range = range_;
     if (skillid == HT_TALKIEBOX || skillid == RG_GRAFFITI)
     {
         CREATE (group->valstr, char, 80);
@@ -6087,8 +6090,6 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
 
             case WZ_ICEWALL:   /* アイスウォール */
             {
-                static const int dirx[8] = { 0, -1, -1, -1, 0, 1, 1, 1 };
-                static const int diry[8] = { 1, 1, 0, -1, -1, -1, 0, 1 };
                 if (skilllv <= 1)
                     val1 = 500;
                 else
@@ -6261,6 +6262,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src,
  * スキルユニットの発動イベント
  *------------------------------------------
  */
+static
 int skill_unit_onplace (struct skill_unit *src, struct block_list *bl,
                         unsigned int tick)
 {
@@ -6721,6 +6723,7 @@ int skill_unit_onplace (struct skill_unit *src, struct block_list *bl,
  * スキルユニットから離脱する(もしくはしている)場合
  *------------------------------------------
  */
+static
 int skill_unit_onout (struct skill_unit *src, struct block_list *bl,
                       unsigned int tick)
 {
@@ -6850,6 +6853,7 @@ int skill_unit_onout (struct skill_unit *src, struct block_list *bl,
  * スキルユニットの削除イベント
  *------------------------------------------
  */
+static
 int skill_unit_ondelete (struct skill_unit *src, struct block_list *bl,
                          unsigned int tick)
 {
@@ -6907,6 +6911,7 @@ int skill_unit_ondelete (struct skill_unit *src, struct block_list *bl,
  * スキルユニットの限界イベント
  *------------------------------------------
  */
+static
 int skill_unit_onlimit (struct skill_unit *src, unsigned int tick)
 {
     struct skill_unit_group *sg;
@@ -6987,6 +6992,7 @@ int skill_unit_ondamaged (struct skill_unit *src, struct block_list *bl,
  * スキル使用(詠唱完了、場所指定)
  *------------------------------------------
  */
+static
 void skill_castend_pos (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     struct map_session_data *sd = map_id2sd (id) /*,*target_sd=NULL */ ;
@@ -7345,7 +7351,7 @@ static int skill_check_condition_mob_master_sub (struct block_list *bl,
  */
 int skill_check_condition (struct map_session_data *sd, int type)
 {
-    int  i, hp, sp, hp_rate, sp_rate, zeny, weapon, state, spiritball, skill,
+    int hp, sp, hp_rate, sp_rate, zeny, weapon, state, spiritball, skill,
         lv, mhp;
     int  index[10], itemid[10], amount[10];
 
@@ -7418,7 +7424,7 @@ int skill_check_condition (struct map_session_data *sd, int type)
     state = skill_db[skill].state;
     spiritball = (lv <= 0) ? 0 : skill_db[skill].spiritball[lv - 1];
     mhp = skill_get_mhp (skill, lv);    /* 消費HP */
-    for (i = 0; i < 10; i++)
+    for (int i = 0; i < 10; i++)
     {
         itemid[i] = skill_db[skill].itemid[i];
         amount[i] = skill_db[skill].amount[i];
@@ -7738,7 +7744,7 @@ int skill_check_condition (struct map_session_data *sd, int type)
             break;
     }
 
-    for (i = 0; i < 10; i++)
+    for (int i = 0; i < 10; i++)
     {
         int  x = lv % 11 - 1;
         index[i] = -1;
@@ -7771,7 +7777,7 @@ int skill_check_condition (struct map_session_data *sd, int type)
     {
         if (skill == AL_WARP && !(type & 2))
             return 1;
-        for (i = 0; i < 10; i++)
+        for (int i = 0; i < 10; i++)
         {
             if (index[i] >= 0)
                 pc_delitem (sd, index[i], amount[i], 0);    // アイテム消費
@@ -7910,7 +7916,7 @@ int skill_use_id (struct map_session_data *sd, int target_id,
                   int skill_num, int skill_lv)
 {
     unsigned int tick;
-    int  casttime = 0, delay = 0, skill, range;
+    int  casttime = 0, delay = 0, skill, range_;
     struct map_session_data *target_sd = NULL;
     int  forcecast = 0;
     struct block_list *bl;
@@ -8093,10 +8099,10 @@ int skill_use_id (struct map_session_data *sd, int target_id,
         return 0;
 
     /* 射程と障害物チェック */
-    range = skill_get_range (skill_num, skill_lv);
-    if (range < 0)
-        range = battle_get_range (&sd->bl) - (range + 1);
-    if (!battle_check_range (&sd->bl, bl, range))
+    range_ = skill_get_range (skill_num, skill_lv);
+    if (range_ < 0)
+        range_ = battle_get_range (&sd->bl) - (range_ + 1);
+    if (!battle_check_range (&sd->bl, bl, range_))
         return 0;
 
     if (bl->type == BL_PC)
@@ -8182,10 +8188,10 @@ int skill_use_id (struct map_session_data *sd, int target_id,
                 return 0;
             target_id = p_sd->bl.id;
             //rangeをもう1回検査
-            range = skill_get_range (skill_num, skill_lv);
-            if (range < 0)
-                range = battle_get_range (&sd->bl) - (range + 1);
-            if (!battle_check_range (&sd->bl, &p_sd->bl, range))
+            range_ = skill_get_range (skill_num, skill_lv);
+            if (range_ < 0)
+                range_ = battle_get_range (&sd->bl) - (range_ + 1);
+            if (!battle_check_range (&sd->bl, &p_sd->bl, range_))
             {
                 return 0;
             }
@@ -8978,6 +8984,7 @@ int skill_landprotector (struct block_list *bl, va_list ap)
  * イドゥンの林檎の回復処理(foreachinarea)
  *------------------------------------------
  */
+static
 int skill_idun_heal (struct block_list *bl, va_list ap)
 {
     struct skill_unit *unit;
@@ -11331,6 +11338,7 @@ int skill_unitgrouptickset_delete (struct block_list *bl, int group_id)
  * スキルユニットタイマー発動処理用(foreachinarea)
  *------------------------------------------
  */
+static
 int skill_unit_timer_sub_onplace (struct block_list *bl, va_list ap)
 {
     struct block_list *src;
@@ -11385,6 +11393,7 @@ int skill_unit_timer_sub_ondelete (struct block_list *bl, va_list ap)
  * スキルユニットタイマー処理用(foreachobject)
  *------------------------------------------
  */
+static
 int skill_unit_timer_sub (struct block_list *bl, va_list ap)
 {
     struct skill_unit *unit;
@@ -11475,6 +11484,7 @@ int skill_unit_timer_sub (struct block_list *bl, va_list ap)
  * スキルユニットタイマー処理
  *------------------------------------------
  */
+static
 void skill_unit_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t data)
 {
     map_freeblock_lock ();
@@ -11488,6 +11498,7 @@ void skill_unit_timer (timer_id tid, tick_t tick, custom_id_t id, custom_data_t
  * スキルユニット移動時処理用(foreachinarea)
  *------------------------------------------
  */
+static
 int skill_unit_out_all_sub (struct block_list *bl, va_list ap)
 {
     struct skill_unit *unit;
@@ -11543,6 +11554,7 @@ int skill_unit_out_all (struct block_list *bl, unsigned int tick, int range)
  * スキルユニット移動時処理用(foreachinarea)
  *------------------------------------------
  */
+static
 int skill_unit_move_sub (struct block_list *bl, va_list ap)
 {
     struct skill_unit *unit;
@@ -11601,6 +11613,7 @@ int skill_unit_move (struct block_list *bl, unsigned int tick, int range)
  * スキルユニット自体の移動時処理(foreachinarea)
  *------------------------------------------
  */
+static
 int skill_unit_move_unit_group_sub (struct block_list *bl, va_list ap)
 {
     struct skill_unit *unit;
@@ -11814,14 +11827,13 @@ static int scan_stat (char *statname)
     return 0;
 }
 
-extern void skill_pool_register (int id);   // [Fate] Remember that a certain skill ID belongs to a pool skill
-
 /*==========================================
  * スキル関係ファイル読み込み
  * skill_db.txt スキルデータ
  * skill_cast_db.txt スキルの詠唱時間とディレイデータ
  *------------------------------------------
  */
+static
 int skill_readdb (void)
 {
     int  i, j, k, l;
@@ -11933,14 +11945,15 @@ int skill_readdb (void)
 
         skill_db[i].stat = scan_stat (split[16]);
 
-        skill_names[i].desc = strdup (split[17]);
+        char *tmp = strdup (split[17]);
+        skill_names[i].desc = tmp;
         {                       // replace "_" by " "
-            char *s = skill_names[i].desc;
+            char *s = tmp;
             while ((s = strchr (s, '_')))
                 *s = ' ';
-            if ((s = strchr (skill_names[i].desc, '\t'))
-                || (s = strchr (skill_names[i].desc, ' '))
-                || (s = strchr (skill_names[i].desc, '\n')))
+            if ((s = strchr (tmp, '\t'))
+                || (s = strchr (tmp, ' '))
+                || (s = strchr (tmp, '\n')))
                 *s = '\000';
         }
     }
diff --git a/src/map/skill.hpp b/src/map/skill.hpp
index e2aaba5..3dea4d3 100644
--- a/src/map/skill.hpp
+++ b/src/map/skill.hpp
@@ -881,11 +881,12 @@ void skill_pool_empty (struct map_session_data *sd);    // Deactivate all pool s
 int  skill_pool_activate (struct map_session_data *sd, int skill);  // Skill into skill pool.  Return is zero iff okay.
 int  skill_pool_is_activated (struct map_session_data *sd, int skill);  // Skill into skill pool.  Return is zero when activated.
 int  skill_pool_deactivate (struct map_session_data *sd, int skill);    // Skill out of skill pool.  Return is zero iff okay.
-char *skill_name (int skill);   // Yield configurable skill name
+const char *skill_name(int skill);   // Yield configurable skill name
 int  skill_stat (int skill);    // Yields the stat associated with a skill.  Returns zero if none, or SP_STR, SP_VIT, ... otherwise
 int  skill_power (struct map_session_data *sd, int skill);  // Yields the power of a skill.  This is zero if the skill is unknown or if it's a pool skill that is outside of the skill pool,
                              // otherwise a value from 0 to 255 (with 200 being the `normal maximum')
 int  skill_power_bl (struct block_list *bl, int skill); // Yields the power of a skill.  This is zero if the skill is unknown or if it's a pool skill that is outside of the skill pool,
                              // otherwise a value from 0 to 255 (with 200 being the `normal maximum')
 
+void skill_pool_register (int id);   // [Fate] Remember that a certain skill ID belongs to a pool skill
 #endif
diff --git a/src/map/storage.cpp b/src/map/storage.cpp
index d1d3cb0..7d54343 100644
--- a/src/map/storage.cpp
+++ b/src/map/storage.cpp
@@ -485,6 +485,7 @@ struct guild_storage *guild2storage (int guild_id)
     return gs;
 }
 
+static
 struct guild_storage *guild2storage2 (int guild_id)
 {                               //For just locating a storage without creating one. [Skotlex]
     return (struct guild_storage *) numdb_search (guild_storage_db, guild_id);
diff --git a/src/map/tmw.cpp b/src/map/tmw.cpp
index 7506270..4b1831b 100644
--- a/src/map/tmw.cpp
+++ b/src/map/tmw.cpp
@@ -30,7 +30,7 @@
 #include "storage.hpp"
 #include "trade.hpp"
 
-int tmw_CheckChatSpam (struct map_session_data *sd, char *message)
+int tmw_CheckChatSpam (struct map_session_data *sd, const char *message)
 {
     nullpo_retr (1, sd);
     time_t now = time (NULL);
@@ -86,16 +86,14 @@ int tmw_CheckChatSpam (struct map_session_data *sd, char *message)
         (sd->chat_lines_in >= battle_config.chat_spam_warn
          || sd->chat_total_repeats >= battle_config.chat_spam_warn))
     {
-        /* "WARNING: You are about to be automatically banned for spam!" */
-        clif_displaymessage (sd->fd, msg_txt (506));
-        /* "WARNING: Please slow down, do not repeat, and do not SHOUT!" */
-        clif_displaymessage (sd->fd, msg_txt (507));
+        clif_displaymessage (sd->fd, "WARNING: You are about to be automatically banned for spam!");
+        clif_displaymessage (sd->fd, "WARNING: Please slow down, do not repeat, and do not SHOUT!");
     }
 
     return 0;
 }
 
-void tmw_AutoBan(struct map_session_data *sd, char *reason, int length)
+void tmw_AutoBan(struct map_session_data *sd, const char *reason, int length)
 {
     char anotherbuf[512];
 
@@ -111,8 +109,7 @@ void tmw_AutoBan(struct map_session_data *sd, char *reason, int length)
             map[sd->bl.m].name, sd->bl.x, sd->bl.y,
             sd->status.name, length, reason);
 
-    /* "You have been banned for %s spamming. Please do not spam." */
-    snprintf (anotherbuf, 511, msg_txt (508), reason);
+    snprintf (anotherbuf, 511, "You have been banned for %s spamming. Please do not spam.", reason);
 
     clif_displaymessage (sd->fd, anotherbuf);
     /* type: 2 - ban (year, month, day, hour, minute, second) */
@@ -121,7 +118,7 @@ void tmw_AutoBan(struct map_session_data *sd, char *reason, int length)
 }
 
 // Compares the length of two strings and returns that of the shorter
-int tmw_ShorterStrlen (char *s1, char *s2)
+int tmw_ShorterStrlen (const char *s1, const char *s2)
 {
     int  s1_len = strlen (s1);
     int  s2_len = strlen (s2);
@@ -129,7 +126,7 @@ int tmw_ShorterStrlen (char *s1, char *s2)
 }
 
 // Returns true if more than 50% of input message is caps or punctuation
-int tmw_CheckChatLameness (struct map_session_data *sd, char *message)
+int tmw_CheckChatLameness (struct map_session_data *sd, const char *message)
 {
     int  count, lame;
 
diff --git a/src/map/tmw.hpp b/src/map/tmw.hpp
index 5b20a6c..71de462 100644
--- a/src/map/tmw.hpp
+++ b/src/map/tmw.hpp
@@ -4,11 +4,12 @@
 
 #include "map.hpp"
 
-int  tmw_CheckChatSpam (struct map_session_data *sd, char *message);
-int  tmw_ShorterStrlen (char *s1, char *s2);
-int  tmw_CheckChatLameness (struct map_session_data *sd, char *message);
+int  tmw_CheckChatSpam (struct map_session_data *sd, const char *message);
+int  tmw_ShorterStrlen (const char *s1, const char *s2);
+int  tmw_CheckChatLameness (struct map_session_data *sd, const char *message);
+__attribute__((format(printf, 1, 2)))
 void tmw_GmHackMsg (const char *fmt, ...);
-void tmw_AutoBan (struct map_session_data *sd, char *reason, int length);
+void tmw_AutoBan (struct map_session_data *sd, const char *reason, int length);
 void tmw_TrimStr (char *str);
 
 #endif /* TMW_H_ */
diff --git a/src/tool/GNUmakefile b/src/tool/GNUmakefile
index 2efc93b..24ee766 100644
--- a/src/tool/GNUmakefile
+++ b/src/tool/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. tools
+	${MAKE} -C ../.. eathena-monitor
 clean:
 	rm -r ../../obj/tool/
 %::
-	make -C ../.. obj/tool/$@
+	${MAKE} -C ../.. obj/tool/$@
diff --git a/src/tool/eathena-monitor.cpp b/src/tool/eathena-monitor.cpp
index 1b1abd5..e070c8a 100644
--- a/src/tool/eathena-monitor.cpp
+++ b/src/tool/eathena-monitor.cpp
@@ -73,6 +73,7 @@ const char *config = CONFIG;
 
 pid_t pid_login, pid_map, pid_char;
 
+static
 const char* make_path (const char* base, const char* path) {
     size_t base_len = strlen(base);
     size_t path_len = strlen(path);
@@ -84,6 +85,7 @@ const char* make_path (const char* base, const char* path) {
     return out;
 }
 
+static
 void parse_option (char *name, char *value) {
     if (!strcasecmp(name, "login_server")) {
         login_server = strdup(value);
@@ -100,6 +102,7 @@ void parse_option (char *name, char *value) {
     }
 }
 
+static
 void read_config(const char *filename) {
     FILE *input;
     char string[1000];
@@ -138,6 +141,7 @@ void read_config(const char *filename) {
     fclose (input);
 }
 
+static
 pid_t start_process(const char *exec) {
     const char *args[2] = {exec, NULL};
     pid_t pid = fork();
@@ -155,6 +159,7 @@ pid_t start_process(const char *exec) {
 }
 
 // Kill all children with the same signal we got, then ourself.
+static
 void stop_process(int sig) {
     if (pid_map) kill(pid_map, sig);
     if (pid_login) kill(pid_login, sig);
diff --git a/src/webserver/GNUmakefile b/src/webserver/GNUmakefile
index 9635381..0520440 100644
--- a/src/webserver/GNUmakefile
+++ b/src/webserver/GNUmakefile
@@ -1,7 +1,7 @@
 .SUFFIXES:
 all:
-	make -C ../.. webserver
+	${MAKE} -C ../.. webserver
 clean:
 	rm -r ../../obj/webserver/
 %::
-	make -C ../.. obj/webserver/$@
+	${MAKE} -C ../.. obj/webserver/$@
diff --git a/warnings b/warnings
index 68be903..b9ff330 100644
--- a/warnings
+++ b/warnings
@@ -1,14 +1,12 @@
 -Werror=all
 -Werror=implicit-function-declaration
 -Wextra
--Werror=c++-compat
 -Werror=write-strings
 -Wunused
 -Wshadow
--Wbad-function-cast
 -Werror=strict-prototypes
 -Werror=old-style-definition
--Wno-missing-declarations
+-Werror=missing-declarations
 -Wvla
 -Wstack-protector
 -Wno-conversion
@@ -22,8 +20,8 @@
 -Wtrampolines
 -Wfloat-equal
 -Wmissing-format-attribute
--Wno-redundant-decls
--Wnested-externs
+-Werror=redundant-decls
 -Wno-sign-compare
 
 -Wno-switch
+-Wno-format-zero-length
-- 
cgit v1.2.3-70-g09d2