diff --git a/src/game.c b/src/game.c index 18395f1c8e..ff3af3dc75 100644 --- a/src/game.c +++ b/src/game.c @@ -2386,136 +2386,6 @@ static void game_load_or_quit() } -/** -* -* rct2: 0x0069ED0B -*/ -static void sub_69ED0B(rct_peep* sprite, int cl) -{ - if (sprite->var_08 == 0) - return; - - int ebx = sprite->var_08; - int ax = sprite->next; - - if (sprite->previous != 0xFFFF) { - g_sprite_list[sprite->previous].peep.next = ax; - } - else { - RCT2_ADDRESS(RCT2_ADDRESS_SPRITES_NEXT_INDEX, uint16)[ebx] = ax; - } - - sprite->previous = 0xFFFF; - sprite->var_08 = cl; - - // set next sprite to the delimiter - int tmp_ax = RCT2_ADDRESS(RCT2_ADDRESS_SPRITES_NEXT_INDEX, uint16)[cl]; - RCT2_ADDRESS(RCT2_ADDRESS_SPRITES_NEXT_INDEX, uint16)[cl] = sprite->sprite_index; - sprite->next = tmp_ax; - - if (tmp_ax != 0xFFFF) { - g_sprite_list[tmp_ax].peep.previous = ax; - } - - RCT2_ADDRESS(0x013573C8, uint16)[ebx]--; - RCT2_ADDRESS(0x013573C8, uint16)[cl]++; -} - -/** -* -* rct2: 0x0069EC6B -* bl -* return: new peep sprite (esi) -*/ -static rct_peep* create_peep_sprite(short bl) -{ - int ecx = 0; - rct_peep* newSprite; - - if (!(bl & 2)) { - if (RCT2_GLOBAL(0x013573C8, short) < 0) - return NULL; - - *newSprite = g_sprite_list[RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_NEXT_INDEX, uint16)].peep; - ecx = 10; - } - else { - if (0x12C - RCT2_GLOBAL(0x0013573CE, short) >= RCT2_GLOBAL(0x013573C8, short)) - return NULL; - - *newSprite = g_sprite_list[RCT2_GLOBAL(RCT2_ADDRESS_SPRITES_NEXT_INDEX, uint16)].peep; - ecx = 6; - } - - sub_69ED0B(newSprite, ecx); - - newSprite->x = 0x8000; - newSprite->y = 0x8000; - newSprite->z = 0; - newSprite->var_02 = previousPeepSpriteIndex; - previousPeepSpriteIndex = newSprite->sprite_index; - newSprite->name_string_idx = 0; - newSprite->var_14 = 10; - newSprite->var_09 = 0x14; - newSprite->var_15 = 10; - newSprite->var_0C = 10; - newSprite->var_16 = 0x8000; - - return newSprite; -} - -static void sub_6C42AC(uint16 name_string_idx) -{ - if (name_string_idx < 0x8000 || name_string_idx >= 0x9000) - return; - - RCT2_ADDRESS(0x0095AFB8, uint32)[(name_string_idx + 0x3FF) * 20] = 0; -} - -static void sub_69EDB6(rct_peep* peep) { - sub_69ED0B(peep, 0); - sub_6C42AC(peep->name_string_idx); - peep->sprite_identifier = 0; - - int x = peep->x; - if (x == 0x8000) - x = 0x10000; - x &= 0x1FE0; - - uint32* edi = RCT2_ADDRESS(0xF1EF60, uint32)[(x << 3) | (peep->y >> 5)]; - - rct_peep* peepSprite = NULL; - while (peepSprite != peep) { - peepSprite = g_sprite_list + (*edi << 8); - *edi = peepSprite->var_02; - } - peepSprite->sprite_identifier = peep->var_02; -} - -/** -* -* rct2: 0x0069E9D3 -*/ -static void sub_69E9D3(rct_peep* peep, int ax) { - -} - -/** -* -* rct2: 0x006EC473 -*/ -static void sub_6EC473(rct_peep* peep) { - -} - -/** -* -* rct2: 0x00699115 -*/ -static void sub_699115(rct_peep* peep) { - -} - /** * * rct2: 0x006BEFA1 @@ -2523,10 +2393,6 @@ static void sub_699115(rct_peep* peep) { static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp) { - //RCT2_CALLFUNC_X(0x006BEFA1, eax, ebx, ecx, edx, esi, edi, ebp); - //return; - - uint8 _bl = *ebx & 0xFF, tabIndex = (*ebx & 0xFF00) >> 8; uint16 _ax = *eax & 0xFFFF, _cx = *ecx & 0xFFFF, _dx = *edx & 0xFFFF; @@ -2558,18 +2424,13 @@ static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, int _eax, _ebx, _ecx = _cx, _edx, _esi, _edi, _ebp; _esi = 0; _ebx = _bl; - RCT2_CALLFUNC_X(0x0069EC6B, &_eax, &_bl, &_ecx, &_edx, &_esi, &_edi, &_ebp); + RCT2_CALLFUNC_X(0x0069EC6B, &_eax, &_ebx, &_ecx, &_edx, &_esi, &_edi, &_ebp); rct_peep* newPeep = (rct_peep*)_esi; //if ((newPeep = create_peep_sprite(_bl)) == NULL) if (_esi == 0) { - #ifdef _MSC_VER - __asm mov ebx, 0x80000000 - #else - __asm__("mov ebx, 0x80000000 "); - #endif - + *ebx = 0x80000000; RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, uint16) = STR_TOO_MANY_PEOPLE_IN_GAME; return; } @@ -2585,13 +2446,7 @@ static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, newPeep->var_14 = 8; newPeep->sprite_direction = 0; - _eax = _ax; - _edx = _dx; - _ecx = *ecx; - // ax (cmp ax, 8000h) - // esi (peep) - // cx (shr cx, 5) - RCT2_CALLPROC_X(0x0069E9D3, _eax, 0, _ecx, *edx, (int)newPeep, 0, 0); + RCT2_CALLPROC_X(0x0069E9D3, _ax, 0, *ecx, _dx, (int)newPeep, 0, 0); newPeep->state = PEEP_STATE_PICKED; if (newPeep->x != -32768) { @@ -2614,11 +2469,11 @@ static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, newPeep->paid_on_souvenirs = 0; newPeep->var_C6 = 0; - /*if (tabIndex == 0) { + if (tabIndex == 0) { newPeep->var_C6 = 7; } else if (tabIndex == 1) { newPeep->var_C6 = 3; - }*/ + } newPeep->staff_type = 0xFF; @@ -2658,9 +2513,7 @@ static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, newPeep->var_09 = *((int*)(_edx + 1)); newPeep->var_15 = *((int*)(_edx + 2)); - //sub_69E9D3(newPeep); RCT2_CALLPROC_X(0x0069E9D3, newPeep->x, 0, newPeep->y, newPeep->z, (int)newPeep, 0, 0); - //sub_6EC473(newPeep); RCT2_CALLPROC_X(0x006EC473, *eax, 0, 0, 0, (int)newPeep, 0, 0); newPeep->var_AD = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint8); @@ -2670,15 +2523,12 @@ static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, newPeep->tshirt_colour = colour; newPeep->trousers_colour = colour; - _eax = (uint32)ebp & 0xFFFFFF3F; - _ebp = (*ebp << 25) | (*ebp >> 6); - newPeep->energy = 0x60; newPeep->energy_growth_rate = 0x60; newPeep->var_E2 = 0; - //sub_699115(newPeep); - RCT2_CALLPROC_X(0x00699115, _eax, 0, 0, 0, (int)newPeep, 0, _ebp); + RCT2_CALLPROC_X(0x00699115, (uint32)ebp & 0xFFFFFF3F, 0, 0, 0, (int)newPeep, 0, + (*ebp << 25) | (*ebp >> 6)); newPeep->var_C5 = newStaffId; @@ -2694,7 +2544,6 @@ static void game_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx, *edi = newPeep->sprite_index; } - /** * * rct2: 0x00669E55 @@ -3053,7 +2902,7 @@ static uint32 game_do_command_table[58] = { 0x006E66A0, 0x006E6878, 0x006C5AE9, - 0, //0x006BEFA1, // 0, + 0, // use new_game_command_table, original: 0x006BEFA1, 29 0x006C09D1, // 30 0x006C0B83, 0x006C0BB5,