Бессмертие: два уровня вместо тумблера
1 — только бой: удары мечом не отнимают HP (ветка в hurt_by_sword).
2 — плюс мелкий урон: не проходят «минус деление» от падения с двух
этажей и от падающей плиты (pop_take_hp гасит count < 100).
Мгновенная смерть остаётся на обоих: пики, чомпер, падение с трёх этажей
и удар вне боевой стойки приходят с count = 100. В коде ровно два
значения урона, 1 и 100, поэтому граница точная, а не эвристическая.
Заодно ушёл костыль «снять бессмертие на время вызова take_hp(100)» в
hurt_by_sword — он был нужен только потому, что прежний чит глушил и
смертельный урон.
Клавиша I идёт по кругу 0 -> 1 -> 2 -> 0; в отладочной метке число
красных палочек = уровень.
This commit is contained in:
@@ -85,7 +85,14 @@ void pop_guard_kill(void)
|
||||
uint8_t pop_take_hp(uint8_t count)
|
||||
{
|
||||
if (Char.charid == CHARID_0_KID) {
|
||||
if (pop_immortal) return 0;
|
||||
/* ЧИТ БЕССМЕРТИЯ, уровень 2 (pop_state.h): гасим ТОЛЬКО мелкий урон
|
||||
* — падение с двух этажей, придавливание плитой. Мгновенная смерть
|
||||
* (пики, чомпер, падение с трёх этажей, удар вне боевой стойки)
|
||||
* приходит с count = 100 и проходит всегда: у читa нет задачи
|
||||
* отменять смерть, у него задача отменить «минус одно деление».
|
||||
* Уровень 1 сюда не вмешивается вовсе — он живёт в hurt_by_sword и
|
||||
* гасит только удары мечом. */
|
||||
if (pop_immortal >= 2 && count < 100) return 0;
|
||||
if (count >= hitp_curr) { hitp_delta = (int8_t)-hitp_curr; return 1; }
|
||||
hitp_delta = (int8_t)-(int8_t)count;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user