| 6721 | } |
| 6722 | |
| 6723 | int16 cFodder::Sprite_Handle_Civilian_Within_Range_OpenCloseDoor(sSprite* pSprite) { |
| 6724 | |
| 6725 | if (!mSprite_OpenCloseDoor_Ptr) |
| 6726 | return -1; |
| 6727 | |
| 6728 | if (pSprite->field_4C) { |
| 6729 | --pSprite->field_4C; |
| 6730 | return 0; |
| 6731 | } |
| 6732 | |
| 6733 | sSprite* Data28 = mSprite_OpenCloseDoor_Ptr; |
| 6734 | |
| 6735 | int16 Data0 = pSprite->field_0; |
| 6736 | int16 Data4 = pSprite->field_4; |
| 6737 | int16 Data8 = Data28->field_0; |
| 6738 | int16 DataC = Data28->field_4; |
| 6739 | |
| 6740 | pSprite->field_26 = Data8; |
| 6741 | pSprite->field_28 = DataC; |
| 6742 | |
| 6743 | mSprite_Civilian_Tmp_X = Data0; |
| 6744 | mSprite_Civilian_Tmp_Y = Data4; |
| 6745 | word_3B481 = Data8; |
| 6746 | word_3B483 = DataC; |
| 6747 | int16 Data10 = 0x20; |
| 6748 | |
| 6749 | Map_Get_Distance_BetweenPoints(Data0, Data4, Data8, Data10, DataC); |
| 6750 | if (Data0 <= 3) { |
| 6751 | Sprite_Destroy_Wrapper(pSprite); |
| 6752 | mSprite_Civilian_GotHome = -1; |
| 6753 | return 1; |
| 6754 | } |
| 6755 | |
| 6756 | if (Data0 < 6) { |
| 6757 | Data28->field_2A = 0x0A; |
| 6758 | return 0; |
| 6759 | } |
| 6760 | |
| 6761 | Data0 = mSprite_Civilian_Tmp_X; |
| 6762 | Data4 = mSprite_Civilian_Tmp_Y; |
| 6763 | Data8 = word_3B481; |
| 6764 | DataC = word_3B483; |
| 6765 | |
| 6766 | if (!Map_PathCheck_CalculateTo(Data0, Data4, Data8, DataC)) |
| 6767 | return 0; |
| 6768 | |
| 6769 | // Move toward top left |
| 6770 | Data0 = tool_RandomGet() & 0x3F; |
| 6771 | if (Data0) |
| 6772 | return 0; |
| 6773 | |
| 6774 | pSprite->field_26 = pSprite->field_0; |
| 6775 | pSprite->field_28 = pSprite->field_4; |
| 6776 | pSprite->field_26 -= 0x10; |
| 6777 | pSprite->field_28 -= 0x20; |
| 6778 | pSprite->field_4C = 0x1E; |
| 6779 | |
| 6780 | return 0; |
nothing calls this directly
no outgoing calls
no test coverage detected