struct Thing *create_and_control_creature_as_controller(struct PlayerInfo *player, long breed, struct Coord3d *pos) { struct CreatureStats *crstat; struct CreatureControl *cctrl; struct Dungeon *dungeon; struct Thing *thing; struct Camera *cam; struct InitLight ilght; SYNCDBG(6,"Request for model %ld at (%d,%d,%d)",breed,(int)pos->x.val,(int)pos->y.val,(int)pos->z.val); //return _DK_create_and_control_creature_as_controller(player, a2, pos); thing = create_creature(pos, breed, player->id_number); if (thing_is_invalid(thing)) return INVALID_THING; dungeon = get_dungeon(thing->owner); dungeon->num_active_creatrs--; dungeon->owned_creatures_of_model[thing->model]--; if (is_my_player(player)) { toggle_status_menu(0); turn_off_roaming_menus(); } cam = player->acamera; player->controlled_thing_idx = thing->index; player->field_31 = thing->creation_turn; player->field_4B5 = cam->field_6; thing->alloc_flags |= TAlF_IsControlled; thing->field_4F |= 0x01; cctrl = creature_control_get_from_thing(thing); cctrl->flgfield_2 |= 0x02; cctrl->max_speed = calculate_correct_creature_maxspeed(thing); set_player_mode(player, PVT_CreatureContrl); set_start_state(thing); // Preparing light object LbMemorySet(&ilght, 0, sizeof(struct InitLight)); ilght.mappos.x.val = thing->mappos.x.val; ilght.mappos.y.val = thing->mappos.y.val; ilght.mappos.z.val = thing->mappos.z.val; ilght.field_2 = 36; ilght.field_3 = 1; ilght.is_dynamic = 1; ilght.field_0 = 2560; thing->light_id = light_create_light(&ilght); if (thing->light_id != 0) { light_set_light_never_cache(thing->light_id); } else { ERRORLOG("Cannot allocate light to new hero"); } if (is_my_player_number(thing->owner)) { if (thing->class_id == TCls_Creature) { crstat = creature_stats_get_from_thing(thing); setup_eye_lens(crstat->eye_effect); } } return thing; }
Sint32 vbutton::do_call(Sint32 whatfunc, Sint32 arg) { switch (whatfunc) { case BEGINMENU: return beginmenu(arg); case CREATE_TEAM_MENU: return create_team_menu(arg); case SET_PLAYER_MODE: return set_player_mode(arg); case QUIT_MENU: quit(arg); return 1; case CREATE_VIEW_MENU: return create_view_menu(arg); case CREATE_EDIT_MENU: return create_edit_menu(arg); case CREATE_BUY_MENU: return create_buy_menu(arg); case CREATE_LOAD_MENU: return create_load_menu(arg); case CREATE_SAVE_MENU: return create_save_menu(arg); case GO_MENU: return go_menu(arg); case RETURN_MENU: return arg; case CYCLE_TEAM_GUY: return cycle_team_guy(arg); case DECREASE_STAT: return decrease_stat(arg); case INCREASE_STAT: return increase_stat(arg); case EDIT_GUY: return edit_guy(arg); case CYCLE_GUY: return cycle_guy(arg); case ADD_GUY: return add_guy(arg); case DO_SAVE: return do_save(arg); case DO_LOAD: return do_load(arg); case NAME_GUY: // name some guy return name_guy(arg); case CREATE_DETAIL_MENU: return create_detail_menu(NULL); case DO_SET_SCEN_LEVEL: return do_set_scen_level(arg); case SET_DIFFICULTY: return set_difficulty(); case CHANGE_TEAM: return change_teamnum(arg); case CHANGE_HIRE_TEAM: return change_hire_teamnum(arg); case ALLIED_MODE: return change_allied(); case YES_OR_NO: return yes_or_no(arg); default: return 4; } }
Sint32 vbutton::do_call(Sint32 whatfunc, Sint32 arg) { switch (whatfunc) { case BEGINMENU: return beginmenu(arg); case CREATE_TEAM_MENU: return create_team_menu(arg); case SET_PLAYER_MODE: return set_player_mode(arg); case QUIT_MENU: quit(arg); return 1; case CREATE_VIEW_MENU: return create_view_menu(arg); case CREATE_TRAIN_MENU: return create_train_menu(arg); case CREATE_HIRE_MENU: return create_hire_menu(arg); case CREATE_LOAD_MENU: return create_load_menu(arg); case CREATE_SAVE_MENU: return create_save_menu(arg); case GO_MENU: return go_menu(arg); case RETURN_MENU: return arg; case CYCLE_TEAM_GUY: return cycle_team_guy(arg); case DECREASE_STAT: return decrease_stat(arg); case INCREASE_STAT: return increase_stat(arg); case EDIT_GUY: return edit_guy(arg); case CYCLE_GUY: return cycle_guy(arg); case ADD_GUY: return add_guy(arg); case DO_SAVE: return do_save(arg); case DO_LOAD: return do_load(arg); case NAME_GUY: // name some guy return name_guy(arg); case CREATE_DETAIL_MENU: return create_detail_menu(NULL); case DO_SET_SCEN_LEVEL: return do_set_scen_level(arg); case DO_PICK_CAMPAIGN: return do_pick_campaign(arg); case SET_DIFFICULTY: return set_difficulty(); case CHANGE_TEAM: return change_teamnum(arg); case CHANGE_HIRE_TEAM: return change_hire_teamnum(arg); case ALLIED_MODE: return change_allied(); case DO_LEVEL_EDIT: return level_editor(); case YES_OR_NO: return yes_or_no(arg); case MAIN_OPTIONS: return main_options(); case TOGGLE_SOUND: toggle_effect("sound", "sound"); return REDRAW; case TOGGLE_RENDERING_ENGINE: toggle_rendering_engine(); return REDRAW; case TOGGLE_FULLSCREEN: toggle_effect("graphics", "fullscreen"); myscreen->set_fullscreen(cfg.is_on("graphics", "fullscreen")); return REDRAW; case OVERSCAN_ADJUST: return overscan_adjust(arg); case TOGGLE_MINI_HP_BAR: toggle_effect("effects", "mini_hp_bar"); return REDRAW; case TOGGLE_HIT_FLASH: toggle_effect("effects", "hit_flash"); return REDRAW; case TOGGLE_HIT_RECOIL: toggle_effect("effects", "hit_recoil"); return REDRAW; case TOGGLE_ATTACK_LUNGE: toggle_effect("effects", "attack_lunge"); return REDRAW; case TOGGLE_HIT_ANIM: toggle_effect("effects", "hit_anim"); return REDRAW; case TOGGLE_DAMAGE_NUMBERS: toggle_effect("effects", "damage_numbers"); return REDRAW; case TOGGLE_HEAL_NUMBERS: toggle_effect("effects", "heal_numbers"); return REDRAW; case TOGGLE_GORE: toggle_effect("effects", "gore"); return REDRAW; case RESTORE_DEFAULT_SETTINGS: restore_default_settings(); cfg.load_settings(); return REDRAW; default: return OK; } }