-
void_17
имя: имя
- Ветеран
-
- Сообщения: 548
- Зарегистрирован: 25 апр 2021, 15:05
- Откуда: Оттуда
- Пол:
- Поблагодарили: 132 раз.
|
void_17 » 30 ноя 2021, 02:37
Нашёл 0x514 поле army. Очень похоже на ?remove_aura@army@@QAAXXZ sub_448A40, убирает ауру. Но такая функция уже есть в базе Смотрите на это: - Код: Выделить всё
.text:0005A3C2 mov.l #army::remove_aura(void), r0 ; end of block .text:0005A3C2 ; end of block .text:0005A3C4 jsr @r0 ; ?remove_aura@army@@QAAXXZ .text:0005A3C6 mov r8, r4 .text:0005A3C8 mov.l #army::remove_binding(void), r0 .text:0005A3CA jsr @r0 ; ?remove_binding@army@@QAAXXZ .text:0005A3CC mov r8, r4 .text:0005A3CE mov.w #h'274, r0 .text:0005A3D0 mov.l @(r0,r8), r3 .text:0005A3D2 tst r3, r3 .text:0005A3D4 bf loc_5A420 .text:0005A3D6 mov.l #Random(int,int), r0 .text:0005A3D8 mov #100, r5 .text:0005A3DA jsr @r0 ; ?Random@@YAHHH@Z .text:0005A3DC mov #1, r4 .text:0005A3DE mov #60, r2 .text:0005A3E0 cmp/gt r0, r2 .text:0005A3E2 bf loc_5A3FA .text:0005A3E4 mov.l #army::get_owning_side(void), r0 .text:0005A3E6 jsr @r0 ; ?get_owning_side@army@@QBAHXZ .text:0005A3E8 mov r8, r4 .text:0005A3EA mov #1, r3 .text:0005A3EC mov.l #combatManager * gpCombatManager, r1 .text:0005A3EE mov.w #21484, r2 .text:0005A3F0 mov.l @r1, r1 .text:0005A3F2 add r2, r1 .text:0005A3F4 mov.b r3, @(r0,r1) .text:0005A3F6 bra loc_5A420 ; end of block .text:0005A3F8 nop .text:0005A3FA ; --------------------------------------------------------------------------- .text:0005A3FA .text:0005A3FA loc_5A3FA: ; CODE XREF: army::ProcessDeath(int)+42↑j .text:0005A3FA mov.l #Random(int,int), r0 .text:0005A3FC mov #100, r5 .text:0005A3FE jsr @r0 ; ?Random@@YAHHH@Z .text:0005A400 mov #1, r4 .text:0005A402 mov #80, r2 .text:0005A404 cmp/gt r0, r2 .text:0005A406 bf loc_5A420 .text:0005A408 mov.l #army::get_owning_side(void), r0 .text:0005A40A jsr @r0 ; ?get_owning_side@army@@QBAHXZ .text:0005A40C mov r8, r4 .text:0005A40E mov #1, r3 .text:0005A410 mov.l #combatManager * gpCombatManager, r1 .text:0005A412 sub r0, r3 .text:0005A414 mov.l @r1, r1 .text:0005A416 mov r3, r0 .text:0005A418 mov.w #h'53EE, r2 .text:0005A41A add r2, r1 .text:0005A41C mov #1, r2 .text:0005A41E mov.b r2, @(r0,r1) .text:0005A420 .text:0005A420 loc_5A420: ; CODE XREF: army::ProcessDeath(int)+34↑j .text:0005A420 ; army::ProcessDeath(int)+56↑j ... .text:0005A420 bsr army::CancelAllSpells(void) ; end of block
и это: - Код: Выделить всё
sub_00448A40(iArmy->_f_514); army::remove_binding(iArmy); if ( !iArmy->activeSpellDuration[SPL_HYPNOTIZE] ) { if ( Random(1, 100) >= 60 ) { if ( Random(1, 100) < 80 ) *(&gpCombatManager->field_53DF - iArmy->side) = 1; } else { *(&gpCombatManager->heroSpellPower[2] + iArmy->side) = 1; } } v11 = 0; activeSpellDuration = iArmy->activeSpellDuration; do { if ( *activeSpellDuration > 0 ) army::CancelIndividualSpell(iArmy, v11); ++v11; ++activeSpellDuration; } while ( v11 < 81 );
army::CancelAllSpells(void) здесь инлайн. А Ваша, похоже, инлайн и выше. С другой стороны, какой-то короткой она получается. Может, в SoD разбили на две части? Лучше не берите не себя это дело. Займитесь пока другими функциями. Я приеду и посмотрю, исправлю. Я все кучу раз перепроверял, но мог все-таки где-то ошибиться.
|