Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LONG __cdecl ProcessActorAnimation2(CHActorInfo *arg_actor, int a2, int arg_zero1, CHActorInfo *arg_zero2)
- {
- CHActorInfo *actor; // ebx
- CHActorInfo *var_zero; // esi
- AMSeg3Decoded *palettePtr; // eax
- AMStruct *animation; // edi
- CHSegment7Entry *v8; // eax
- unsigned __int32 v9; // eax
- int v10; // eax
- LONG result; // eax
- int v12; // ecx
- bool v13; // zf
- int v14; // edi
- AMSeg1 *seg1Ptr; // edi
- unsigned int v16; // ecx
- AMSeg2 *v17; // esi
- AMSeg2 *amSeg2; // esi
- int v19; // edx
- int v20; // esi
- int v21; // edx
- AMStruct *v22; // edx
- unsigned __int16 *v23; // ecx
- int v24; // esi
- float v25; // ST50_4
- double v26; // st7
- float v27; // ST50_4
- float v28; // ST50_4
- float v29; // ST50_4
- long double v30; // st7
- float v31; // ST50_4
- int v32; // eax
- double v33; // st7
- __int16 v34; // ax
- unsigned __int16 v35; // ax
- double v36; // st7
- int v37; // eax
- int v38; // eax
- int v39; // eax
- AMStruct *v40; // ecx
- double scaledAnimationDelay; // st7
- unsigned __int64 delay; // rax
- signed __int16 offsetOx; // ax
- signed int deltaOy; // edx
- double ox; // st7
- double oy; // st6
- CHActorInfo *linkedActor; // eax
- CHActorInfo *linkedActor2; // ecx
- CHActorInfo *zeroableActor2; // eax
- double v50; // st7
- signed int v51; // edi
- unsigned __int32 v52; // eax
- bool v53; // cf
- AMImageFrame *v54; // ecx
- AMImageFrame *v55; // edx
- int v56; // ecx
- float v57; // ecx
- int v58; // eax
- int v59; // ecx
- LONG v60; // edi
- LONG v61; // esi
- int v62; // edi
- int v63; // esi
- int v64; // ecx
- int v65; // eax
- CHSegment7Entry *v66; // eax
- CHFileHeader *v67; // ecx
- int v68; // edx
- int v69; // esi
- long double v70; // st7
- long double v71; // st6
- long double v72; // st5
- double v73; // st7
- long double v74; // st7
- double v75; // st7
- void *v76; // ecx
- signed int v77; // ST28_4
- signed int v78; // ST24_4
- signed int v79; // ST20_4
- WORD v80; // ax
- double v81; // st7
- long double v82; // st6
- long double v83; // st5
- signed int v84; // ST28_4
- signed int v85; // ST24_4
- signed int v86; // ST20_4
- WORD v87; // ax
- long double v88; // rt2
- long double v89; // st5
- long double v90; // st7
- signed int v91; // ST28_4
- signed int v92; // ST24_4
- signed int v93; // ST20_4
- WORD v94; // ax
- double v95; // st5
- char v96; // cl
- double v97; // st5
- AMStruct *v98; // ecx
- int *v99; // eax
- int v100; // edx
- char v101; // al
- int v102; // edx
- int v103; // ecx
- double v104; // st7
- int v105; // esi
- signed int v106; // eax
- int v107; // edi
- __int16 v108; // ax
- CHActorInfo *v109; // ecx
- CHActorInfo *v110; // eax
- int v111; // [esp+2Ch] [ebp-29Ch]
- float v112; // [esp+2Ch] [ebp-29Ch]
- int delta; // [esp+30h] [ebp-298h]
- int v114; // [esp+3Ch] [ebp-28Ch]
- double v115; // [esp+40h] [ebp-288h]
- int dvar1; // [esp+48h] [ebp-280h]
- AMStruct *animation2; // [esp+54h] [ebp-274h]
- long double someOx; // [esp+58h] [ebp-270h]
- CHActorInfo *zeroableActor; // [esp+64h] [ebp-264h]
- long double v120; // [esp+68h] [ebp-260h]
- int v121; // [esp+74h] [ebp-254h]
- long double v122; // [esp+78h] [ebp-250h]
- long double v123; // [esp+80h] [ebp-248h]
- double v124; // [esp+88h] [ebp-240h]
- int v125; // [esp+90h] [ebp-238h]
- int v126; // [esp+94h] [ebp-234h]
- long double v127; // [esp+98h] [ebp-230h]
- long double v128; // [esp+A0h] [ebp-228h]
- int v129; // [esp+ACh] [ebp-21Ch]
- POINT pt; // [esp+B0h] [ebp-218h]
- int v131; // [esp+B8h] [ebp-210h]
- int v132; // [esp+BCh] [ebp-20Ch]
- long double v133; // [esp+C0h] [ebp-208h]
- int v134; // [esp+D4h] [ebp-1F4h]
- CHActorInfo actor_clone; // [esp+D8h] [ebp-1F0h]
- char Dest; // [esp+2A4h] [ebp-24h]
- actor = arg_actor;
- var_zero = arg_zero2;
- while ( 1 )
- {
- while ( 1 )
- {
- palettePtr = actor->DecodedPalette;
- animation = actor->Animation;
- zeroableActor = var_zero;
- animation2 = animation;
- if ( palettePtr && !palettePtr->Sufix.field_24 )
- AMProcessDecodedPalette(palettePtr);
- if ( !dword_4AF280 )
- {
- if ( actor->SomeFlags & 4 )
- {
- if ( !dword_4AF2A0 && !g_skip_actor_animation && !actor->field_19C )
- {
- v8 = actor->chSeg7Ptr;
- if ( v8 )
- {
- if ( v8->field_D == 2 )
- {
- v9 = animation->seg1Count;
- if ( actor->AnimationSeg2IndexOffset < (signed int)*((unsigned __int16 *)animation->seg1ptr
- + 2
- * (19 * animation->seg1Count
- + actor->AnimationSeg2Index)
- - 15) )
- {
- qmemcpy(&actor_clone, actor, sizeof(actor_clone));
- actor_clone.SomeFlags &= 0xFFFFFFFB;
- actor_clone.AnimationSeg1Index = v9 - 1;
- actor_clone.field_60 = v9 - 1;
- dword_4AF2A0 = 1;
- actor_clone.field_198 = 2;
- actor_clone.field_19C = 12;
- ProcessActorAnimation2(&actor_clone, a2, 0, 0);
- var_zero = zeroableActor;
- dword_4AF2A0 = 0;
- }
- }
- }
- }
- }
- }
- if ( !var_zero )
- break;
- if ( actor->SomeFlags & 0x20 )
- actor->field_4C = var_zero->field_4C;
- v10 = actor->field_4C;
- actor->AnimationSeg1Index = actor->field_60;
- actor->AnimationSeg2Index = v10;
- result = (LONG)&var_zero->Animation->seg2ptr[var_zero->AnimationSeg2IndexOffset
- + var_zero->Animation->seg1ptr->Segment2Links[var_zero->AnimationSeg2Index
- + 19
- * var_zero->AnimationSeg1Index].Index];
- v12 = *(_DWORD *)actor->gap_8C;
- actor->posX = (double)(v12 + *(signed __int16 *)(result + 22) - (signed int)*(signed __int16 *)(result + 6))
- + var_zero->posX;
- actor->posY = var_zero->posY;
- actor->field_64 = -(double)(*(_DWORD *)&actor->gap_8C[4]
- + *(signed __int16 *)(result + 24)
- - (signed int)*(signed __int16 *)(result + 8));
- actor->field_30 = (double)(v12 + *(signed __int16 *)(result + 22) - (signed int)*(signed __int16 *)(result + 6))
- + var_zero->field_30;
- v13 = (actor->SomeFlags & 8) == 0;
- actor->field_34 = (double)(*(_DWORD *)&actor->gap_8C[4]
- + *(signed __int16 *)(result + 24)
- - (signed int)*(signed __int16 *)(result + 8))
- + var_zero->field_34;
- if ( !v13 )
- break;
- actor = actor->linkedActor2;
- if ( !actor )
- return result;
- }
- pt.x = g_some_ox + g_cursor_position.x;
- result = actor->AnimationSeg1Index;
- v14 = actor->AnimationSeg1Index;
- pt.y = g_some_oy + g_cursor_position.y;
- seg1Ptr = &animation2->seg1ptr[v14];
- v16 = (unsigned int)animation2->seg2ptr;
- v17 = animation2->seg2ptr;
- if ( actor->field_50 )
- {
- amSeg2 = &v17[actor->AnimationSeg2Index + seg1Ptr->Segment2Links[0].Index];
- goto LABEL_50;
- }
- v19 = actor->AnimationSeg2Index;
- if ( !seg1Ptr->Segment2Links[v19].Count )
- {
- v22 = animation2;
- LABEL_35:
- if ( v22->magicNumberOrAnimationId )
- v22->magicNumberOrAnimationId = 0;
- goto LABEL_37;
- }
- v20 = (int)&v17[seg1Ptr->Segment2Links[v19].Index];
- if ( *(_WORD *)(v20 + 18) )
- {
- v21 = *(_DWORD *)actor->gap_68;
- if ( v21 != 4 )
- {
- result += 4 - v21;
- seg1Ptr += 4 - v21;
- v20 = v16 + 26 * seg1Ptr->Segment2Links[actor->AnimationSeg2Index].Index;
- }
- }
- v22 = animation2;
- amSeg2 = (AMSeg2 *)(26 * actor->AnimationSeg2IndexOffset + v20);
- v16 = animation2->seg1Count;
- if ( result < v16 )
- {
- if ( seg1Ptr->Segment2Links[actor->AnimationSeg2Index].Count )
- goto LABEL_50;
- goto LABEL_35;
- }
- if ( animation2->magicNumberOrAnimationId )
- animation2->magicNumberOrAnimationId = 0;
- if ( actor->AnimationSeg1Index >= v16 )
- break;
- LABEL_37:
- seg1Ptr = &v22->seg1ptr[actor->AnimationSeg1Index];
- result = 0;
- v23 = &seg1Ptr->Segment2Links[0].Count;
- while ( !*v23 )
- {
- ++result;
- v23 += 2;
- if ( result >= 8 )
- goto LABEL_30;
- }
- if ( result >= 8 )
- break;
- v13 = actor->AnimationSeg2Index == actor->field_4C;
- actor->AnimationSeg2Index = result;
- if ( v13 )
- actor->field_4C = result;
- v24 = (int)&v22->seg2ptr[seg1Ptr->Segment2Links[result].Index];
- if ( actor->AnimationSeg2IndexOffset > (signed int)seg1Ptr->Segment2Links[result].Count )
- actor->AnimationSeg2IndexOffset = 0;
- if ( !actor->field_6C && actor->AnimationSeg2IndexOffset < 0 )
- actor->AnimationSeg2IndexOffset = 0;
- v16 = 26 * actor->AnimationSeg2IndexOffset;
- amSeg2 = (AMSeg2 *)(v16 + v24);
- LABEL_50:
- if ( !dword_4AF280 && actor->AnimationSeg2IndexOffset >= 0 && actor->SomeFlags & 8 && amSeg2->AMSeg2field_C & 1 )
- {
- dword_4AE9E0 = (int)&dword_4A3520;
- if ( zeroableActor )
- {
- v120 = zeroableActor->posX;
- v25 = actor->posY + 60.0 - zeroableActor->posY;
- v26 = v25;
- v27 = actor->posX - v120;
- sub_469F0A((void *)v16);
- v28 = v26;
- v122 = v28;
- v29 = cos(v28);
- v30 = v29 * 60.0 + v120;
- dword_4A3548 = (signed int)v30;
- dword_4A3520 = (signed int)v30;
- v31 = sin(v122);
- v32 = (signed int)(v31 * 36.0 + zeroableActor->posY);
- }
- else
- {
- v33 = actor->posX;
- dword_4A3548 = (signed int)v33;
- dword_4A3520 = (signed int)v33;
- v32 = (signed int)actor->posY + 60;
- }
- dword_4A3550 = 60;
- dword_4A3524 = v32;
- dword_4A354C = v32;
- }
- v34 = actor->AnimationSeg2IndexOffset;
- LODWORD(v115) = (unsigned __int16)actor->AnimationSeg2IndexOffset;
- if ( v34 >= 0 && amSeg2->AMSeg2field_C & 2 )
- actor->SomeFlags |= 2u;
- dvar1 = actor->field_6C;
- if ( !dvar1 && zeroableActor )
- actor->SomeFlags &= 0xFFFFFFF7;
- if ( !g_skip_actor_animation )
- {
- if ( !actor->field_50 )
- {
- v35 = seg1Ptr->Segment2Links[actor->AnimationSeg2Index].Count;
- LODWORD(someOx) = seg1Ptr->Segment2Links[actor->AnimationSeg2Index].Count;
- if ( (signed __int16)v35 <= 1 )
- {
- if ( dvar1 > 0 && a2 )
- actor->field_6C = dvar1 - 1;
- if ( LOWORD(v115) == -1 )
- {
- actor->AnimationSeg2IndexOffset = 0;
- ++amSeg2;
- }
- goto LABEL_105;
- }
- if ( dvar1 )
- {
- if ( LOWORD(v115) == -1 )
- actor->ScaledAnimationDelay = ElapsedGameTime;
- if ( actor->field_198 != 2 && SLOWORD(v115) >= 0 )
- {
- amSeg2 = &animation2->seg2ptr[SLOWORD(v115) + seg1Ptr->Segment2Links[actor->AnimationSeg2Index].Index];
- if ( actor->SomeFlags & 0x100000 )
- {
- v114 = amSeg2->FrameTime;
- v36 = (double)v114 * actor->AnimationTimeScale;
- }
- else
- {
- v114 = amSeg2->FrameTime;
- v36 = (double)v114;
- }
- if ( ElapsedGameTime + (signed __int16)(signed int)v36 < actor->ScaledAnimationDelay )
- actor->ScaledAnimationDelay = ElapsedGameTime;
- }
- if ( ElapsedGameTime >= actor->ScaledAnimationDelay )
- {
- v37 = ElapsedGameTime - LODWORD(actor->ScaledAnimationDelay);
- delta = LOWORD(v115);
- v114 = v37 <= 0 ? 0 : v37;
- LODWORD(someOx) = SLOWORD(someOx) - 1;
- if ( (signed int)SLOWORD(v115) < SLODWORD(someOx)
- || dvar1 <= 0
- || !a2
- || (v13 = dvar1 == 1, actor->field_6C = dvar1 - 1, !v13) )
- {
- if ( v114 >= 0 )
- {
- do
- {
- if ( (signed int)SLOWORD(v115) < SLODWORD(someOx) )
- {
- actor->AnimationSeg2IndexOffset = LOWORD(v115) + 1;
- ++amSeg2;
- }
- else
- {
- v38 = actor->field_6C;
- if ( v38 > 0 && a2 )
- actor->field_6C = v38 - 1;
- if ( !actor->field_6C )
- break;
- v39 = actor->AnimationSeg2Index;
- v40 = animation2;
- actor->AnimationSeg2IndexOffset = 0;
- amSeg2 = &v40->seg2ptr[seg1Ptr->Segment2Links[v39].Index];
- }
- if ( actor->SomeFlags & 0x100000 )
- {
- dvar1 = amSeg2->FrameTime;
- scaledAnimationDelay = (double)dvar1 * actor->AnimationTimeScale;
- }
- else
- {
- dvar1 = amSeg2->FrameTime;
- scaledAnimationDelay = (double)dvar1;
- }
- delay = ElapsedGameTime + (signed __int16)(signed int)scaledAnimationDelay;
- v114 -= (signed __int16)(signed int)scaledAnimationDelay;
- LODWORD(actor->ScaledAnimationDelay) = delay;
- LODWORD(delay) = (unsigned __int16)actor->AnimationSeg2IndexOffset;
- v13 = (_WORD)delay == (_WORD)delta;
- HIDWORD(actor->ScaledAnimationDelay) = HIDWORD(delay);
- LODWORD(v115) = delay;
- }
- while ( !v13 && v114 >= 0 );
- }
- }
- offsetOx = amSeg2->OffsetOX;
- if ( (offsetOx || amSeg2->OffsetOY) && a2 && actor->field_6C )
- {
- deltaOy = amSeg2->OffsetOY;
- delta = offsetOx;
- actor->SomeFlags |= 0x2000u;
- *(float *)&someOx = (double)delta;
- *(float *)&delta = (double)deltaOy;
- ox = *(float *)&someOx;
- actor->posX = actor->posX + *(float *)&someOx;
- oy = *(float *)δ
- actor->posY = actor->posY + *(float *)δ
- actor->field_30 = ox + actor->field_30;
- actor->field_34 = oy + actor->field_34;
- }
- }
- LABEL_105:
- if ( g_skip_actor_animation )
- goto LABEL_113;
- goto LABEL_106;
- }
- }
- LABEL_106:
- linkedActor = actor->linkedActor;
- if ( linkedActor )
- ProcessActorAnimation2(linkedActor, a2, arg_zero1, actor);
- linkedActor2 = actor->linkedActor2;
- if ( linkedActor2 && ((actor->AnimationSeg2Index + 1) & 7) < 3 )
- {
- zeroableActor2 = zeroableActor;
- if ( !zeroableActor )
- zeroableActor2 = actor;
- ProcessActorAnimation2(linkedActor2, a2, arg_zero1, zeroableActor2);
- }
- }
- LABEL_113:
- memset(&dword_4AF1D0, 0, 0x40u);
- word_4AF1EC = amSeg2->FlipImageFlags;
- if ( arg_zero1 )
- word_4AF1EC |= 4u;
- dword_4AF1E0 = (signed int)actor->posX;
- v50 = actor->posY;
- v51 = (signed int)v50;
- dword_4AF1E4 = (signed int)v50;
- if ( actor->field_198 != 2 )
- dword_4AF1E8 = (signed int)actor->field_64;
- v52 = amSeg2->FrameIndex;
- flt_4AF258 = actor->field_54;
- v53 = v52 < animation2->FrameCount;
- v54 = animation2->Frames;
- dword_4AF220 = (int)animation2->Frames;
- if ( !v53 )
- {
- result = (LONG)actor->Animation;
- *(_DWORD *)result = 0;
- return result;
- }
- v55 = &v54[v52];
- v56 = (int)&v54[(unsigned __int16)amSeg2->AMSeg2gap_10[1]];
- dword_4AF220 = (int)v55;
- dword_4AF1A4 = v56;
- if ( a2 )
- {
- v57 = actor->field_34;
- actor->posX = actor->field_30;
- actor->posY = v57;
- v51 = dword_4AF1E4;
- }
- v58 = amSeg2->MinusOX;
- v59 = dword_4AF1E0 - v58;
- dword_4AF260 = dword_4AF1E0 - v58;
- rect.left = dword_4AF1E0 - v58;
- if ( arg_zero1 )
- {
- delta = v55->Height;
- result = v51 + amSeg2->MinusOY - delta - dword_4AF1E8;
- }
- else
- {
- result = v51 - amSeg2->MinusOY - dword_4AF1E8;
- }
- rect.top = result;
- v60 = v59 + v55->Width;
- rect.right = v59 + v55->Width;
- v61 = result + v55->Height;
- dword_4AF264 = result;
- rect.bottom = v61;
- if ( v59 <= g_some_ox )
- rect.left = g_some_ox;
- if ( result <= g_some_oy )
- {
- result = g_some_oy;
- rect.top = g_some_oy;
- }
- if ( v60 >= g_some_ox + 640 )
- {
- v60 = g_some_ox + 640;
- rect.right = g_some_ox + 640;
- }
- if ( v61 >= g_some_oy + dword_4D161C )
- {
- v61 = g_some_oy + dword_4D161C;
- rect.bottom = g_some_oy + dword_4D161C;
- }
- if ( g_skip_actor_animation || (actor->SomeFlags >> 3) & 1 )
- {
- if ( rect.left >= v60 || result >= v61 )
- goto LABEL_271;
- actor->SomeFlags |= 0x4000u;
- v62 = 0;
- if ( !dword_4AF8D8
- && (actor->Animation->animationType != 2 || !dword_4AF890)
- && PtInRect(&rect, pt)
- && (*(_DWORD *)&actor->field_132 & 0x10000 || dword_4AF890)
- && (actor->chSeg7Ptr && (SLOBYTE(actor->SomeFlags) < 0 || dword_4AF890) || actor->field_198 == 1) )
- {
- v63 = dword_4DE4B4;
- dword_4DE4B4 = (int)actor;
- if ( dword_4AF890 )
- {
- if ( g_some_actor_info_indices[0] != -1
- && (actor == g_some_actor_infos[0] || actor == g_some_actorInfo2 || actor == g_some_actorInfo3)
- && (dword_4AF86C || dword_4AF868 && (actor->actorIndex == sub_408110(g_some_actor_info_indices[0]) || v63)) )
- {
- dword_4DE4B4 = v63;
- }
- }
- }
- if ( g_skip_actor_animation )
- {
- dword_4AF1D0 = 0;
- dword_4AF1F0 = 0;
- }
- else
- {
- if ( dword_4AF280 || (v64 = actor->field_78) == 0 || actor->field_54 >= 255.0 )
- {
- flt_4AF1F4 = 0.0;
- byte_4AF208 = -1;
- flt_4AF1F8 = 0.0;
- dword_4AF1D4 = 255;
- dword_4AF1D8 = 255;
- dword_4AF1DC = 255;
- dword_4AF1D0 = 0;
- }
- else
- {
- v65 = *(_DWORD *)(v64 + 20);
- if ( dword_4AEAA0 )
- {
- flt_4AF1F4 = 3.9269907;
- byte_4AF208 = -1;
- dword_4AF1D4 = 64;
- flt_4AF1F8 = 0.78539819;
- dword_4AF1D8 = 64;
- dword_4AF1DC = 64;
- }
- else
- {
- flt_4AF1F4 = *(double *)(v65 + 48);
- flt_4AF1F8 = *(double *)(v65 + 56);
- byte_4AF208 = *(_BYTE *)(v65 + 5);
- dword_4AF1D4 = *(unsigned __int8 *)(v65 + 8);
- dword_4AF1D8 = *(unsigned __int8 *)(v65 + 9);
- dword_4AF1DC = *(unsigned __int8 *)(v65 + 10);
- dword_4AF1FC = *(unsigned __int8 *)(v65 + 12);
- dword_4AF200 = *(unsigned __int8 *)(v65 + 13);
- dword_4AF204 = *(unsigned __int8 *)(v65 + 14);
- }
- if ( dword_4AF170 )
- {
- delta = *(unsigned __int8 *)(v65 + 1);
- actor->field_54 = (double)delta;
- }
- dword_4AF1D0 = dword_4AF1D4 != 255 || dword_4AF1D8 != 255 || dword_4AF1DC != 255;
- }
- if ( dword_4AF280 )
- {
- LABEL_171:
- dword_4AF1F0 = 0;
- goto LABEL_239;
- }
- if ( actor->field_198 == 2 )
- {
- dword_4AF1F0 = 3;
- dword_4AF1E8 = (signed int)actor->field_64;
- goto LABEL_239;
- }
- if ( !(actor->SomeFlags & 4) || actor->field_19C || actor->field_54 >= 255.0 )
- goto LABEL_171;
- v66 = actor->chSeg7Ptr;
- if ( !v66 )
- {
- dword_4AF1F0 = 1;
- goto LABEL_183;
- }
- LOBYTE(v66) = v66->field_D;
- if ( (_BYTE)v66 == 2 )
- {
- dword_4AF1F0 = 0;
- goto LABEL_239;
- }
- v66 = (CHSegment7Entry *)(unsigned __int8)v66;
- dword_4AF1F0 = (unsigned __int8)v66;
- if ( (_BYTE)v66 && v66 != (CHSegment7Entry *)3 )
- {
- v62 = 0;
- LABEL_183:
- if ( dword_4AE9DC || g_some_ch_header[1].seg11Ptr )
- {
- v67 = g_some_ch_header;
- v122 = 1.7e308;
- v68 = g_some_ch_header[1].seg11Ptr;
- v114 = 0;
- v111 = v68;
- dvar1 = -2;
- if ( dword_4AE9DC )
- {
- v62 = dword_4AE9DC;
- LODWORD(v115) = -1;
- LODWORD(v128) = dword_4AE9DC;
- }
- else
- {
- v62 = LODWORD(v128);
- LODWORD(v115) = 0;
- }
- if ( SLODWORD(v115) < v68 )
- {
- v69 = LODWORD(v127);
- do
- {
- if ( !LODWORD(v115) )
- {
- v67 = g_some_ch_header;
- v62 = g_some_ch_header[1].seg11Count;
- }
- if ( dword_4AF278 )
- sub_4452F0(v62);
- *(double *)&delta = actor->posX - (double)*(signed int *)v62;
- someOx = (actor->posY - actor->field_64 - (double)*(signed int *)(v62 + 4)) / 0.6;
- v70 = someOx;
- sub_469F0A(v67);
- v123 = v70;
- v71 = *(double *)(v62 + 24);
- v120 = v71;
- v72 = *(double *)(v62 + 32);
- v128 = v72;
- if ( fabs(v71 - v72) > 0.09 )
- {
- if ( v72 < v71 )
- {
- v128 = v72 + 6.283185482025146;
- if ( v71 > v70 )
- v123 = v70 + 6.283185307;
- }
- }
- else
- {
- *(double *)(v62 + 24) = -3.141592654;
- v120 = -3.141592654;
- *(double *)(v62 + 32) = 3.141592654;
- v128 = 3.141592654;
- }
- v127 = sqrt(someOx * someOx + *(double *)&delta * *(double *)&delta);
- someOx = cos(v123);
- *(double *)&delta = someOx * v127;
- v124 = sin(v123);
- v127 = sqrt(v124 * (v127 * 0.6) * (v124 * (v127 * 0.6)) + *(double *)&delta * *(double *)&delta);
- if ( v127 <= sqrt(
- someOx * *(double *)(v62 + 16) * (someOx * *(double *)(v62 + 16))
- + *(double *)(v62 + 16) * 0.6 * v124 * (*(double *)(v62 + 16) * 0.6 * v124))
- && v123 >= v120
- && v128 >= v123
- && v122 > v127 )
- {
- v122 = v127;
- v133 = v123;
- dvar1 = LODWORD(v115);
- v69 = v62;
- v114 = v62 == dword_4AE9DC;
- }
- v62 += 60;
- ++LODWORD(v115);
- }
- while ( SLODWORD(v115) < v111 );
- LODWORD(v128) = v62;
- LODWORD(v127) = v69;
- if ( dvar1 >= -1 )
- {
- *(double *)&dvar1 = *(double *)(v69 + 8);
- v124 = cos(v133);
- *(double *)&delta = v124 * *(double *)&dvar1;
- v120 = sin(v133);
- *(double *)&dvar1 = sqrt(
- v120 * (*(double *)&dvar1 * 0.6) * (v120 * (*(double *)&dvar1 * 0.6))
- + *(double *)&delta * *(double *)&delta);
- v73 = *(double *)(v69 + 16);
- *(double *)&delta = v124 * v73;
- someOx = v73 * 0.6 * v120;
- v120 = sqrt(*(double *)&delta * *(double *)&delta + someOx * someOx);
- if ( dword_4AF278 )
- {
- v62 = *(_DWORD *)v69 - g_some_ox;
- v121 = *(_DWORD *)(v69 + 4) - g_some_oy;
- v129 = v62;
- v126 = v62 + (signed int)*(double *)δ
- v125 = v121 + (signed int)someOx;
- }
- else
- {
- v62 = v129;
- }
- *(double *)&delta = (double)*(signed int *)(v69 + 40) - actor->posX;
- someOx = ((double)*(signed int *)(v69 + 44) - (actor->posY - actor->field_64)) / 0.6;
- v74 = someOx;
- sub_469F0A(v67);
- v123 = v74;
- v124 = (double)*(signed int *)(v69 + 48);
- v75 = v124;
- sub_469F0A(v76);
- v115 = v75;
- if ( v122 > *(double *)&dvar1 )
- {
- if ( v122 < v120 )
- {
- v112 = v123;
- *(float *)&someOx = v112;
- *(float *)&delta = flt_4AF1F4;
- v81 = sub_414570((float *)&someOx, (float *)&delta);
- v124 = v81;
- v82 = (v120 - v122) / (v120 - *(double *)&dvar1);
- v122 = v82;
- v83 = 1.0 - v82;
- v120 = 1.0 - v82;
- if ( v114 || fabs(v81) >= 1.570796327 )
- {
- v90 = v83;
- if ( dword_4AF278 )
- {
- v91 = v125;
- v92 = v126;
- v93 = v121;
- v94 = DD_MakeColor(0, 0, 0xFFu);
- sub_41DB60(v94, v62, v93, v92, v91);
- v90 = v120;
- v82 = v122;
- }
- if ( v82 < 0.5 )
- {
- if ( *(_BYTE *)(v69 + 59) )
- {
- *(float *)&delta = (v90 - 0.5 + v90 - 0.5) * flt_4AF1F8;
- v97 = *(float *)δ
- *(float *)&delta = v82 * 3.141592654;
- flt_4AF1F8 = v97 + *(float *)δ
- }
- }
- else
- {
- if ( *(_BYTE *)(v69 + 59) )
- {
- flt_4AF1F4 = v112;
- *(float *)&delta = (v82 - 0.5 + v82 - 0.5) * v115;
- v95 = *(float *)δ
- *(float *)&delta = v90 * 3.141592654;
- flt_4AF1F8 = v95 + *(float *)δ
- }
- else
- {
- v96 = *(_BYTE *)(v69 + 52);
- }
- byte_4AF208 = *(_BYTE *)(v69 + 52);
- }
- }
- else
- {
- if ( dword_4AF278 )
- {
- v84 = v125;
- v85 = v126;
- v86 = v121;
- v87 = DD_MakeColor(0, 0xFFu, 0);
- sub_41DB60(v87, v62, v86, v85, v84);
- v82 = v122;
- v83 = v120;
- v81 = v124;
- }
- if ( *(_BYTE *)(v69 + 59) )
- {
- v88 = v83;
- v89 = v123 - v81 * v83;
- v90 = v88;
- flt_4AF1F4 = v89;
- flt_4AF1F8 = v115 - (v115 - flt_4AF1F8) * v88;
- }
- else
- {
- v90 = v83;
- }
- delta = *(unsigned __int8 *)(v69 + 52);
- delta = (signed int)((double)delta - ((double)delta - (double)(unsigned __int8)byte_4AF208) * v90);
- byte_4AF208 = delta;
- }
- delta = *(unsigned __int8 *)(v69 + 53);
- dword_4AF1D4 = (signed int)((double)delta * v82 + (double)dword_4AF1D4 * v90);
- delta = *(unsigned __int8 *)(v69 + 54);
- dword_4AF1D8 = (signed int)((double)delta * v82 + (double)dword_4AF1D8 * v90);
- delta = *(unsigned __int8 *)(v69 + 55);
- dword_4AF1DC = (signed int)(v90 * (double)dword_4AF1DC + (double)delta * v82);
- delta = *(unsigned __int8 *)(v69 + 56);
- dword_4AF1FC = (signed int)((double)delta * v82);
- delta = *(unsigned __int8 *)(v69 + 57);
- dword_4AF200 = (signed int)((double)delta * v82);
- delta = *(unsigned __int8 *)(v69 + 58);
- dword_4AF204 = (signed int)(v82 * (double)delta);
- }
- }
- else
- {
- if ( *(_BYTE *)(v69 + 59) )
- {
- flt_4AF1F4 = v123;
- flt_4AF1F8 = v75;
- }
- dword_4AF1D4 = *(unsigned __int8 *)(v69 + 53);
- dword_4AF1D8 = *(unsigned __int8 *)(v69 + 54);
- dword_4AF1DC = *(unsigned __int8 *)(v69 + 55);
- dword_4AF1FC = *(unsigned __int8 *)(v69 + 56);
- dword_4AF200 = *(unsigned __int8 *)(v69 + 57);
- dword_4AF204 = *(unsigned __int8 *)(v69 + 58);
- byte_4AF208 = *(_BYTE *)(v69 + 52);
- if ( dword_4AF278 )
- {
- v77 = v125;
- v78 = v126;
- v79 = v121;
- v80 = DD_MakeColor(0xFFu, 0, 0);
- sub_41DB60(v80, v62, v79, v78, v77);
- }
- }
- if ( dword_4AF1D4 != 255 || dword_4AF1D8 != 255 || (dword_4AF1D0 = 0, dword_4AF1DC != 255) )
- dword_4AF1D0 = 1;
- }
- }
- }
- }
- }
- LABEL_239:
- v98 = animation2;
- if ( (unsigned __int16)actor->PaletteIndex >= animation2->PaletteCount )
- {
- if ( animation2->magicNumberOrAnimationId )
- animation2->magicNumberOrAnimationId = 0;
- actor->PaletteIndex = 0;
- }
- v99 = (int *)actor->DecodedPalette;
- if ( v99 )
- {
- v100 = v99[139];
- dword_4AF19C = (int)actor->DecodedPalette;
- if ( !v100 )
- {
- dword_4AF1C4 = *v99;
- LABEL_248:
- v101 = actor->field_19C;
- byte_4AF21D = actor->field_19D;
- v102 = (int)v98->ImageSegments;
- byte_4AF21E = v101;
- result = (LONG)v98->ImageLines;
- v103 = (int)v98->ImageContent;
- dword_4AF240 = result;
- dword_4AF244 = v102;
- dword_4AF248 = v103;
- dword_4AF24C = v103;
- if ( dword_4A351C )
- {
- if ( actor->SomeFlags & 8 )
- {
- dword_4AF20C = (int)actor;
- sub_424E60();
- result = dword_4AF274;
- if ( (*(_WORD *)&actor->gap_D0[6] || dword_4AF274 || dword_4AF27C)
- && actor->Animation != g_am_dialog_icons
- && !dword_4AF878
- && !dword_4AF85C
- && dword_4A2734 )
- {
- if ( dword_4AF274 )
- {
- v104 = actor->posY;
- v131 = (signed int)actor->posX;
- v132 = (signed int)v104;
- sub_405DF0(v62, (int)g_dd_surface04_lpVoid, &v131, 31775);
- v105 = (signed int)actor->posX - g_some_ox - 30;
- v106 = (signed int)actor->posY;
- v134 = dword_4D161C;
- v107 = v106 - g_some_oy + 5;
- if ( actor->field_164 )
- {
- if ( actor == g_some_actor_infos[0] || actor == g_some_actorInfo2 || actor == g_some_actorInfo3 )
- sprintf(&Dest, "%s:%de%0.2f", actor, (unsigned __int16)actor->IndexInSegment1, actor->field_54);
- else
- sprintf(
- &Dest,
- "%s:%de%d",
- actor,
- (unsigned __int16)actor->IndexInSegment1,
- (signed int)actor->field_54);
- }
- else
- {
- sprintf(&Dest, "%se%d", actor, (signed int)actor->field_54);
- }
- sub_4439C0(&Dest);
- v108 = DD_MakeColor(0xBEu, 0xBEu, 0xBEu);
- result = DrawTextInRect(
- g_dd_surface04_lpVoid,
- 2,
- 0,
- v105,
- v107,
- 640,
- v134,
- 0,
- v108,
- (unsigned __int8 *)&Dest,
- 0);
- }
- if ( actor->field_164
- && actor != g_some_actor_infos[0]
- && actor != g_some_actorInfo2
- && actor != g_some_actorInfo3 )
- {
- result = sub_4084B0((int)actor);
- }
- }
- }
- }
- LABEL_271:
- if ( g_skip_actor_animation )
- return result;
- goto LABEL_272;
- }
- }
- else
- {
- v100 = *(_DWORD *)&v98->Palettes->Data[560 * (unsigned __int16)actor->PaletteIndex];
- dword_4AF19C = (int)v98->Palettes + 560 * (unsigned __int16)actor->PaletteIndex;
- }
- dword_4AF1C4 = v100;
- goto LABEL_248;
- }
- LABEL_272:
- result = actor->field_84;
- var_zero = 0;
- if ( result )
- result = ProcessActorAnimation2((CHActorInfo *)result, a2, arg_zero1, actor);
- v109 = actor->linkedActor2;
- if ( v109 )
- {
- result = ((unsigned __int8)actor->AnimationSeg2Index + 1) & 7;
- if ( (char)result >= 3 )
- {
- v110 = zeroableActor;
- if ( !zeroableActor )
- v110 = actor;
- result = ProcessActorAnimation2(v109, a2, arg_zero1, v110);
- }
- }
- if ( actor->Animation->animationType != 1 || !(actor->SomeFlags & 8) )
- return result;
- dword_4D56A0 = LODWORD(actor->posX);
- dword_4D56A4 = LODWORD(actor->posY);
- dword_4D56B0 = LODWORD(actor->field_30);
- dword_4D56B4 = LODWORD(actor->field_34);
- arg_zero1 = 0;
- a2 = 0;
- actor = (CHActorInfo *)&dword_4D5680;
- }
- LABEL_30:
- if ( actor->field_6C > 0 )
- actor->field_6C = 0;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement