static bool HitItemFunc(TTileItem *ti, void *data) { HitItemData *hData = data; if (!CanHit(hData->Obj->flags, hData->Obj->ActorUID, ti)) { goto bail; } int targetUID = -1; hData->HitType = GetHitType(ti, hData->Obj, &targetUID); Damage( hData->Obj->vel, hData->Obj->bulletClass->Power, hData->Obj->flags, hData->Obj->PlayerUID, hData->Obj->ActorUID, ti->kind, targetUID, hData->Obj->bulletClass->Special); if (hData->Obj->tileItem.SoundLock <= 0) { hData->Obj->tileItem.SoundLock += SOUND_LOCK_TILE_OBJECT; } if (ti->SoundLock <= 0) { ti->SoundLock += SOUND_LOCK_TILE_OBJECT; } if (hData->Obj->specialLock <= 0) { hData->Obj->specialLock += SPECIAL_LOCK; } bail: // Whether to produce multiple hits from the same TMobileObject return hData->MultipleHits; }
static bool HitItemFunc(TTileItem *ti, void *data) { HitItemData *hData = data; if (!CanHit(hData->Obj->flags, hData->Obj->ActorUID, ti)) { goto bail; } int targetUID = -1; switch (ti->kind) { case KIND_CHARACTER: hData->HitType = HIT_FLESH; targetUID = ((const TActor *)CArrayGet(&gActors, ti->id))->uid; break; case KIND_OBJECT: hData->HitType = HIT_OBJECT; targetUID = ((const TObject *)CArrayGet(&gObjs, ti->id))->uid; break; default: CASSERT(false, "cannot damage target kind"); break; } if (hData->Obj->soundLock > 0 || !HasHitSound( hData->Obj->bulletClass->Power, hData->Obj->flags, hData->Obj->PlayerUID, ti->kind, targetUID, hData->Obj->bulletClass->Special, true)) { hData->HitType = HIT_NONE; } Damage( hData->Obj->vel, hData->Obj->bulletClass->Power, hData->Obj->flags, hData->Obj->PlayerUID, hData->Obj->ActorUID, ti->kind, targetUID, hData->Obj->bulletClass->Special); if (hData->Obj->soundLock <= 0) { hData->Obj->soundLock += SOUND_LOCK_MOBILE_OBJECT; } if (hData->Obj->specialLock <= 0) { hData->Obj->specialLock += SPECIAL_LOCK; } bail: // Whether to produce multiple hits from the same TMobileObject return hData->MultipleHits; }