Потому что
Цитата
_byte_ second_skill[28]; // +201
char - это _byte_
char - это не символ. Просто символы ASCII умещаются в 1 байт. И решили так назвать.
В ассемблере всё проще, нет signed и unsigned, char и прочих "высокоуровневых" типов, есть
db - байт, dw - слово (два байта в архитектуре x86), dd - двойное слово (четыре байта) и т.д. Даже float - тот же dd. Типы придуманы для контроля типов

Чтобы уменьшить вероятность ошибки при написании кода человеком.
* * *
Цитата
1>.\dllmain.cpp(268) : error C2065: 'с' : undeclared identifier
1>.\dllmain.cpp(268) : error C2227: left of '->ebp' must point to class/struct/union/generic type
1> type is ''unknown-type''
1>.\dllmain.cpp(270) : warning C4244: '*=' : conversion from 'float' to 'int', possible loss of data
Warning понятно откуда. Можете использовать floor() здесь:
Код
(int)c->eax *= Mod;
Код
(int)c->eax = floor((int)c->eax * Mod);
Но не уверен, что floor() быстрее.
Но остальное интересно.
Цитата
1>.\dllmain.cpp(268) : error C2065: 'с' : undeclared identifier
c точно в английской раскладке набрали?
Если да, попробуйте просто присвоить:
Код
int Value = (int)c->ebp;
будет работать?
Кстати, если пишете в Visual Studio, используйте __int8, __int16, __int32, __int64, когда работаете с "сырым кодом", если стандартные типы путают.
Например,
Код
__int8 diplomacyLevel = *(__int8*)(c->ebx + 56 + 4);