mirror of https://github.com/OpenRCT2/OpenRCT2.git
Finalize hire-staff-command
This commit is contained in:
parent
6112668bcc
commit
1b3f98362f
167
src/game.c
167
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,
|
||||
|
|
Loading…
Reference in New Issue