void fronttorture_update(void) { if (torture_state.action != 0) { if ( torture_sprite_frame != torture_end_sprite ) torture_sprite_frame += torture_sprite_direction; } int i; for (i = 0; i < TORTURE_DOORS_COUNT; i++) { struct DoorDesc * door; struct DoorSoundState * doorsnd; door = &doors[i]; doorsnd = &door_sound_state[i]; if ( doorsnd->field_4 ) { int volume; volume = doorsnd->field_4 + doorsnd->field_0; if (volume <= 0) { volume = 0; doorsnd->field_4 = 0; StopSample(0, door->field_28); } else if (volume >= 127) { volume = 127; doorsnd->field_4 = 0; } doorsnd->field_0 = volume; if (volume > 0) { SetSampleVolume(0, door->field_28, volume, 0); } } } }
void DoAutofire(TUnit *unit) { int cyc, i, ca, oldcw, oldtu, oldtu2; TPoint poz; TUnit *u; int su, uu; ConAF_used = FALSE; if (ConAF_unit != unit) memset(ConAF_table, 0, sizeof(ConAF_table)); if (!AF_Reseted) return; for (i = 0; i < UNITS_TOP; i++) if (AF_Units[i]) AF_Units[i] = (Units[i] != NULL) && (Units[i]->X != -1); DAF_found_units = 0; for (cyc = 0; cyc < 1680 /*snek pro r=20*/; cyc++) { poz = CartezianSnail(cyc); poz.x += unit->X, poz.y += unit->Y; if ((poz.x < 0) || (poz.y < 0) || (poz.x >= MapSizeX) || (poz.y >= MapSizeY)) continue; uu = GetField(poz.x, poz.y)->Unit; if ((uu != NO_UNIT) && (AF_Units[uu])) DAF_founds[DAF_found_units++] = uu; if (GetAircraftAt(poz.x, poz.y) != NULL) DAF_founds[DAF_found_units++] = GetAircraftAt(poz.x, poz.y)->ID; } StopSample(SampleMoving); SampleMoving = INVALID_SAMPLE_HANDLE; for (cyc = 0; cyc < DAF_found_units; cyc++) { i = DAF_founds[cyc]; if (AF_Units[i]) { u = (TUnit*)Units[i]; uu = unit->ID; ca = ChooseAttack(u, unit); if (ca != -1) { oldcw = u->CurWpn; oldtu = u->TimeUnits; u->CurWpn = ca; su = SelectedUnit->ID; u->Select(); poz = GetRozptyl(unit->X, unit->Y, u); if ((u->ID >= BADLIFE) || (ConfirmAF(u, unit))) u->Attack(unit->X + poz.x, unit->Y + poz.y); u->CurWpn = oldcw; if (Units[su]) Units[su]->Select(); else { int aID = su, oldID = su; if (su < BADLIFE) { while (++aID != oldID) { if (aID >= BADLIFE) aID = 0; if ((Units[aID] != NULL) && (Units[aID]->HitPoints > 0) && (Units[aID]->X != -1)) break; } } else { while (++aID != oldID) { if (aID >= UNITS_TOP) aID = BADLIFE; if ((Units[aID] != NULL) && (Units[aID]->HitPoints > 0) && (Units[aID]->X != -1)) break; } } SelectedUnit = NULL; if (oldID != aID) Units[aID]->Select(); } if (!Units[i]) AF_Units[i] = FALSE; else { AF_Units[i] = UnitCanShoot(u); if (!AF_Units[i]) { oldtu2 = u->TimeUnits; u->TimeUnits = oldtu; AF_RemoveUnit(u); u->TimeUnits = oldtu2; } } if (!Units[uu]) break; } } } }