Lines Matching refs:pchr

78 static chr_t * resize_one_character( chr_t * pchr );
81 static bool_t chr_free( chr_t * pchr );
83 static chr_t * chr_config_ctor( chr_t * pchr );
84 static chr_t * chr_config_init( chr_t * pchr );
85 static chr_t * chr_config_deinit( chr_t * pchr );
86 static chr_t * chr_config_active( chr_t * pchr );
87 static chr_t * chr_config_dtor( chr_t * pchr );
91 bool_t apply_one_character_matrix( chr_t * pchr, matrix_cache_t * mcache );
100 static bool_t chr_upload_cap( chr_t * pchr, cap_t * pcap );
102 void cleanup_one_character( chr_t * pchr );
108 static fvec2_t chr_get_mesh_diff( chr_t * pchr, float test_pos[], float center_pressure );
109 static float chr_get_mesh_pressure( chr_t * pchr, float test_pos[] );
111 static egoboo_rv chr_invalidate_child_instances( chr_t * pchr );
130 bool_t chr_free( chr_t * pchr ) in chr_free() argument
134 if ( !ALLOCATED_PCHR( pchr ) ) in chr_free()
136 EGOBOO_ASSERT( NULL == pchr->inst.vrt_lst ); in chr_free()
141 disenchant_character( GET_REF_PCHR( pchr ) ); in chr_free()
144 BillboardList_free_one( REF_TO_INT( pchr->ibillboard ) ); in chr_free()
146 LoopedList_remove( pchr->loopedsound_channel ); in chr_free()
148 chr_instance_dtor( &( pchr->inst ) ); in chr_free()
149 BSP_leaf_dtor( &( pchr->bsp_leaf ) ); in chr_free()
150 ai_state_dtor( &( pchr->ai ) ); in chr_free()
152 EGOBOO_ASSERT( NULL == pchr->inst.vrt_lst ); in chr_free()
158 chr_t * chr_ctor( chr_t * pchr ) in chr_ctor() argument
168 if ( NULL == pchr ) return pchr; in chr_ctor()
171 pbase = POBJ_GET_PBASE( pchr ); in chr_ctor()
179 if ( ALLOCATED_PCHR( pchr ) ) in chr_ctor()
182 chr_free( pchr ); in chr_ctor()
184 EGOBOO_ASSERT( NULL == pchr->inst.vrt_lst ); in chr_ctor()
188 memset( pchr, 0, sizeof( *pchr ) ); in chr_ctor()
198 pchr->ibillboard = INVALID_BILLBOARD; in chr_ctor()
199 pchr->sparkle = NOSPARKLE; in chr_ctor()
200 pchr->loopedsound_channel = INVALID_SOUND_CHANNEL; in chr_ctor()
203 pchr->inwhich_slot = SLOT_LEFT; in chr_ctor()
204 pchr->hitready = btrue; in chr_ctor()
205 pchr->bore_timer = BORETIME; in chr_ctor()
206 pchr->careful_timer = CAREFULTIME; in chr_ctor()
209 pchr->firstenchant = ( ENC_REF ) MAX_ENC; in chr_ctor()
210 pchr->undoenchant = ( ENC_REF ) MAX_ENC; in chr_ctor()
211 pchr->missiletreatment = MISSILE_NORMAL; in chr_ctor()
214 pchr->turnmode = TURNMODE_VELOCITY; in chr_ctor()
215 pchr->alive = btrue; in chr_ctor()
218 pchr->jump_timer = JUMPDELAY; in chr_ctor()
221 pchr->attachedto = ( CHR_REF )MAX_CHR; in chr_ctor()
224 pchr->holdingwhich[cnt] = ( CHR_REF )MAX_CHR; in chr_ctor()
228 pchr->pack.next = ( CHR_REF )MAX_CHR; in chr_ctor()
231 pchr->inventory[cnt] = ( CHR_REF )MAX_CHR; in chr_ctor()
235 pchr->ori.map_facing_y = MAP_TURN_OFFSET; // These two mean on level surface in chr_ctor()
236 pchr->ori.map_facing_x = MAP_TURN_OFFSET; in chr_ctor()
239 chr_start_anim( pchr, ACTION_DA, btrue, btrue ); in chr_ctor()
245 pchr->dismount_timer = 0; in chr_ctor()
246 pchr->dismount_object = ( CHR_REF )MAX_CHR; in chr_ctor()
249 pchr->firstenchant = ( ENC_REF ) MAX_ENC; in chr_ctor()
250 pchr->undoenchant = ( ENC_REF ) MAX_ENC; in chr_ctor()
253 pchr->holdingwhich[cnt] = ( CHR_REF )MAX_CHR; in chr_ctor()
256 pchr->pack.next = ( CHR_REF )MAX_CHR; in chr_ctor()
259 pchr->inventory[cnt] = ( CHR_REF )MAX_CHR; in chr_ctor()
262 pchr->onwhichplatform_ref = ( CHR_REF )MAX_CHR; in chr_ctor()
263 pchr->onwhichplatform_update = 0; in chr_ctor()
264 pchr->targetplatform_ref = ( CHR_REF )MAX_CHR; in chr_ctor()
267 pchr->movement_bits = ( unsigned )( ~0 ); in chr_ctor()
270 pchr->is_which_player = MAX_PLAYER; in chr_ctor()
273 pchr->bsp_leaf.data = pchr; in chr_ctor()
274 pchr->bsp_leaf.data_type = BSP_LEAF_CHR; in chr_ctor()
275 pchr->bsp_leaf.index = GET_INDEX_PCHR( pchr ); in chr_ctor()
280 chr_instance_ctor( &( pchr->inst ) ); in chr_ctor()
283 ai_state_ctor( &( pchr->ai ) ); in chr_ctor()
286 BSP_leaf_ctor( &( pchr->bsp_leaf ), 3, pchr, BSP_LEAF_CHR ); in chr_ctor()
287 pchr->bsp_leaf.index = GET_INDEX_PCHR( pchr ); in chr_ctor()
290 phys_data_ctor( &( pchr->phys ) ); in chr_ctor()
292 return pchr; in chr_ctor()
296 chr_t * chr_dtor( chr_t * pchr ) in chr_dtor() argument
298 if ( NULL == pchr ) return pchr; in chr_dtor()
301 chr_free( pchr ); in chr_dtor()
305 POBJ_TERMINATE( pchr ); in chr_dtor()
307 return pchr; in chr_dtor()
376 void chr_set_enviro_grid_level( chr_t * pchr, float level ) in chr_set_enviro_grid_level() argument
378 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_enviro_grid_level()
380 if ( level != pchr->enviro.grid_level ) in chr_set_enviro_grid_level()
382 pchr->enviro.grid_level = level; in chr_set_enviro_grid_level()
384 apply_reflection_matrix( &( pchr->inst ), level ); in chr_set_enviro_grid_level()
418 CHR_BEGIN_LOOP_ACTIVE( cnt, pchr ) in keep_weapons_with_holders()
420 CHR_REF iattached = pchr->attachedto; in keep_weapons_with_holders()
427 if ( chr_matrix_valid( pchr ) ) in keep_weapons_with_holders()
429 chr_set_pos( pchr, mat_getTranslate_v( pchr->inst.matrix.v ) ); in keep_weapons_with_holders()
433 chr_set_pos( pchr, chr_get_pos_v( pattached ) ); in keep_weapons_with_holders()
436 pchr->ori.facing_z = pattached->ori.facing_z; in keep_weapons_with_holders()
439 if ( pattached->transferblend && pchr->isitem ) in keep_weapons_with_holders()
445 chr_set_alpha( pchr, SEEINVISIBLE ); in keep_weapons_with_holders()
450 if ( 255 == pchr->alpha_base ) in keep_weapons_with_holders()
452 chr_set_alpha( pchr, pattached->inst.alpha ); in keep_weapons_with_holders()
456 chr_set_alpha( pchr, pchr->alpha_base ); in keep_weapons_with_holders()
463 chr_set_light( pchr, SEEINVISIBLE ); in keep_weapons_with_holders()
470 chr_set_light( pchr, pattached->inst.light ); in keep_weapons_with_holders()
474 chr_set_light( pchr, pchr->light_base ); in keep_weapons_with_holders()
481 pchr->attachedto = ( CHR_REF )MAX_CHR; in keep_weapons_with_holders()
484 if ( !pchr->pack.is_packed ) in keep_weapons_with_holders()
486 PACK_BEGIN_LOOP( ipacked, pchr->pack.next ) in keep_weapons_with_holders()
488 chr_set_pos( ChrList.lst + ipacked, chr_get_pos_v( pchr ) ); in keep_weapons_with_holders()
491 ChrList.lst[ipacked].pos_old = pchr->pos_old; in keep_weapons_with_holders()
505 chr_t * pchr; in make_one_character_matrix() local
509 pchr = ChrList.lst + ichr; in make_one_character_matrix()
510 pinst = &( pchr->inst ); in make_one_character_matrix()
515 if ( pchr->is_overlay ) in make_one_character_matrix()
519 if ( INGAME_CHR( pchr->ai.target ) ) in make_one_character_matrix()
521 chr_t * ptarget = ChrList.lst + pchr->ai.target; in make_one_character_matrix()
523 chr_set_pos( pchr, chr_get_pos_v( ptarget ) ); in make_one_character_matrix()
534 if ( pchr->stickybutt ) in make_one_character_matrix()
536 pinst->matrix = ScaleXYZRotateXYZTranslate_SpaceFixed( pchr->fat, pchr->fat, pchr->fat, in make_one_character_matrix()
537 TO_TURN( pchr->ori.facing_z ), in make_one_character_matrix()
538 TO_TURN( pchr->ori.map_facing_x - MAP_TURN_OFFSET ), in make_one_character_matrix()
539 TO_TURN( pchr->ori.map_facing_y - MAP_TURN_OFFSET ), in make_one_character_matrix()
540 pchr->pos.x, pchr->pos.y, pchr->pos.z ); in make_one_character_matrix()
544 pinst->matrix = ScaleXYZRotateXYZTranslate_BodyFixed( pchr->fat, pchr->fat, pchr->fat, in make_one_character_matrix()
545 TO_TURN( pchr->ori.facing_z ), in make_one_character_matrix()
546 TO_TURN( pchr->ori.map_facing_x - MAP_TURN_OFFSET ), in make_one_character_matrix()
547 TO_TURN( pchr->ori.map_facing_y - MAP_TURN_OFFSET ), in make_one_character_matrix()
548 pchr->pos.x, pchr->pos.y, pchr->pos.z ); in make_one_character_matrix()
555 pinst->matrix_cache.self_scale.x = pchr->fat; in make_one_character_matrix()
556 pinst->matrix_cache.self_scale.y = pchr->fat; in make_one_character_matrix()
557 pinst->matrix_cache.self_scale.z = pchr->fat; in make_one_character_matrix()
559 pinst->matrix_cache.rotate.x = CLIP_TO_16BITS( pchr->ori.map_facing_x - MAP_TURN_OFFSET ); in make_one_character_matrix()
560 pinst->matrix_cache.rotate.y = CLIP_TO_16BITS( pchr->ori.map_facing_y - MAP_TURN_OFFSET ); in make_one_character_matrix()
561 pinst->matrix_cache.rotate.z = pchr->ori.facing_z; in make_one_character_matrix()
563 pinst->matrix_cache.pos = chr_get_pos( pchr ); in make_one_character_matrix()
573 chr_t * pchr; in chr_log_script_time() local
578 pchr = ChrList.lst + ichr; in chr_log_script_time()
580 if ( pchr->ai._clkcount <= 0 ) return; in chr_log_script_time()
589 update_wld, REF_TO_INT( ichr ), pchr->Name, pcap->classname, in chr_log_script_time()
590 pchr->ai._clktime, pchr->ai._clkcount ); in chr_log_script_time()
605 chr_t * pchr; in free_one_character_in_game() local
608 pchr = ChrList.lst + character; in free_one_character_in_game()
610 pcap = pro_get_pcap( pchr->profile_ref ); in free_one_character_in_game()
614 if ( pchr->StatusList_on ) in free_one_character_in_game()
618 pchr->StatusList_on = bfalse; in free_one_character_in_game()
641 CHR_BEGIN_LOOP_ACTIVE( cnt, pchr ) in free_one_character_in_game()
662 if ( pchr->alive && !pcap->invictus && TeamStack.lst[pchr->baseteam].morale > 0 ) in free_one_character_in_game()
664 TeamStack.lst[pchr->baseteam].morale--; in free_one_character_in_game()
667 if ( TeamStack.lst[pchr->team].leader == character ) in free_one_character_in_game()
669 TeamStack.lst[pchr->team].leader = NOLEADER; in free_one_character_in_game()
708 chr_t * pchr; in place_particle_at_vertex() local
716 pchr = ChrList.lst + character; in place_particle_at_vertex()
719 if ( pchr->pack.is_packed ) in place_particle_at_vertex()
725 if ( !chr_matrix_valid( pchr ) ) in place_particle_at_vertex()
727 chr_update_matrix( pchr, btrue ); in place_particle_at_vertex()
731 if ( chr_matrix_valid( pchr ) ) in place_particle_at_vertex()
738 …fvec3_t tmp_pos = VECT3( pchr->inst.matrix.CNV( 3, 0 ), pchr->inst.matrix.CNV( 3, 1 ), pchr->inst.… in place_particle_at_vertex()
747 vertex = (( int )pchr->inst.vrt_count ) - vertex_offset; in place_particle_at_vertex()
750 chr_instance_update_vertices( &( pchr->inst ), vertex, vertex, bfalse ); in place_particle_at_vertex()
753 point[0].x = pchr->inst.vrt_lst[vertex].pos[XX]; in place_particle_at_vertex()
754 point[0].y = pchr->inst.vrt_lst[vertex].pos[YY]; in place_particle_at_vertex()
755 point[0].z = pchr->inst.vrt_lst[vertex].pos[ZZ]; in place_particle_at_vertex()
767 TransformVertices( &( pchr->inst.matrix ), point, nupoint, 1 ); in place_particle_at_vertex()
774 prt_set_pos( pprt, chr_get_pos_v( pchr ) ); in place_particle_at_vertex()
792 CHR_BEGIN_LOOP_ACTIVE( ichr, pchr ) in update_all_character_matrices()
794 chr_update_matrix( pchr, btrue ); in update_all_character_matrices()
817 float chr_get_mesh_pressure( chr_t * pchr, float test_pos[] ) in chr_get_mesh_pressure() argument
822 if ( !DEFINED_PCHR( pchr ) ) return retval; in chr_get_mesh_pressure()
824 if ( CHR_INFINITE_WEIGHT == pchr->phys.weight ) return retval; in chr_get_mesh_pressure()
827 if ( NULL == test_pos ) test_pos = pchr->pos.v; in chr_get_mesh_pressure()
834 if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) in chr_get_mesh_pressure()
836 if ( PMesh->tmem.tile_list[ pchr->onwhichgrid ].inrenderlist ) in chr_get_mesh_pressure()
838 radius = pchr->bump_1.size; in chr_get_mesh_pressure()
847 retval = mesh_get_pressure( PMesh, test_pos, radius, pchr->stoppedby ); in chr_get_mesh_pressure()
856 fvec2_t chr_get_mesh_diff( chr_t * pchr, float test_pos[], float center_pressure ) in chr_get_mesh_diff() argument
861 if ( !DEFINED_PCHR( pchr ) ) return retval; in chr_get_mesh_diff()
863 if ( CHR_INFINITE_WEIGHT == pchr->phys.weight ) return retval; in chr_get_mesh_diff()
866 if ( NULL == test_pos ) test_pos = pchr->pos.v; in chr_get_mesh_diff()
873 if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) in chr_get_mesh_diff()
875 if ( PMesh->tmem.tile_list[ pchr->onwhichgrid ].inrenderlist ) in chr_get_mesh_diff()
877 radius = pchr->bump_1.size; in chr_get_mesh_diff()
886 retval = mesh_get_diff( PMesh, test_pos, radius, center_pressure, pchr->stoppedby ); in chr_get_mesh_diff()
895 BIT_FIELD chr_hit_wall( chr_t * pchr, const float test_pos[], float nrm[], float * pressure, mesh_w… in chr_hit_wall() argument
903 if ( !DEFINED_PCHR( pchr ) ) return 0; in chr_hit_wall()
905 if ( CHR_INFINITE_WEIGHT == pchr->phys.weight ) return 0; in chr_hit_wall()
908 if ( NULL == test_pos ) test_pos = pchr->pos.v; in chr_hit_wall()
915 if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) in chr_hit_wall()
917 if ( PMesh->tmem.tile_list[ pchr->onwhichgrid ].inrenderlist ) in chr_hit_wall()
919 radius = pchr->bump_1.size; in chr_hit_wall()
928 retval = mesh_hit_wall( PMesh, test_pos, radius, pchr->stoppedby, nrm, pressure, pdata ); in chr_hit_wall()
937 BIT_FIELD chr_test_wall( chr_t * pchr, const float test_pos[], mesh_wall_data_t * pdata ) in chr_test_wall() argument
945 if ( !ACTIVE_PCHR( pchr ) ) return EMPTY_BIT_FIELD; in chr_test_wall()
947 if ( CHR_INFINITE_WEIGHT == pchr->phys.weight ) return EMPTY_BIT_FIELD; in chr_test_wall()
954 if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) in chr_test_wall()
956 if ( PMesh->tmem.tile_list[ pchr->onwhichgrid ].inrenderlist ) in chr_test_wall()
958 radius = pchr->bump_1.size; in chr_test_wall()
963 if ( NULL == test_pos ) test_pos = pchr->pos.v; in chr_test_wall()
970 retval = mesh_test_wall( PMesh, test_pos, radius, pchr->stoppedby, pdata ); in chr_test_wall()
979 bool_t chr_is_over_water( chr_t *pchr ) in chr_is_over_water() argument
983 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in chr_is_over_water()
985 if ( !water.is_water || !mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) return bfalse; in chr_is_over_water()
987 return 0 != mesh_test_fx( PMesh, pchr->onwhichgrid, MPDFX_WATER ); in chr_is_over_water()
997 chr_t * pchr; in reset_character_accel() local
1001 pchr = ChrList.lst + character; in reset_character_accel()
1004 cleanup_character_enchants( pchr ); in reset_character_accel()
1007 ienc_now = pchr->firstenchant; in reset_character_accel()
1021 pchr->maxaccel_reset = 0; in reset_character_accel()
1025 pchr->maxaccel = pchr->maxaccel_reset = pcap->maxaccel[pchr->skin]; in reset_character_accel()
1029 cleanup_character_enchants( pchr ); in reset_character_accel()
1032 ienc_now = pchr->firstenchant; in reset_character_accel()
1054 chr_t * pchr, * pmount; in detach_character_from_mount() local
1058 pchr = ChrList.lst + character; in detach_character_from_mount()
1066 if ( !ignorekurse && pchr->iskursed && pmount->alive && pchr->isitem ) in detach_character_from_mount()
1068 SET_BIT( pchr->ai.alert, ALERTIF_NOTDROPPED ); in detach_character_from_mount()
1073 if ( !pchr->isitem ) pchr->dismount_timer = PHYS_DISMOUNT_TIME; in detach_character_from_mount()
1074 pchr->dismount_object = mount; in detach_character_from_mount()
1077 hand = pchr->inwhich_slot; in detach_character_from_mount()
1080 pchr->attachedto = ( CHR_REF )MAX_CHR; in detach_character_from_mount()
1087 if ( pchr->alive ) in detach_character_from_mount()
1090 chr_play_action( pchr, ACTION_JB + hand, bfalse ); in detach_character_from_mount()
1092 else if ( pchr->inst.action_which < ACTION_KA || pchr->inst.action_which > ACTION_KD ) in detach_character_from_mount()
1095 chr_play_action( pchr, ACTION_KA + generate_randmask( 0, 3 ), bfalse ); in detach_character_from_mount()
1096 chr_instance_set_action_keep( &( pchr->inst ), btrue ); in detach_character_from_mount()
1100 if ( chr_matrix_valid( pchr ) ) in detach_character_from_mount()
1102 chr_set_pos( pchr, mat_getTranslate_v( pchr->inst.matrix.v ) ); in detach_character_from_mount()
1106 chr_set_pos( pchr, chr_get_pos_v( pmount ) ); in detach_character_from_mount()
1110 if ( EMPTY_BIT_FIELD != chr_test_wall( pchr, NULL, NULL ) ) in detach_character_from_mount()
1116 pos_tmp.z = pchr->pos.z; in detach_character_from_mount()
1118 chr_set_pos( pchr, pos_tmp.v ); in detach_character_from_mount()
1120 chr_update_breadcrumb( pchr, btrue ); in detach_character_from_mount()
1131 pchr->hitready = btrue; in detach_character_from_mount()
1135 pchr->vel.x = 0; in detach_character_from_mount()
1136 pchr->vel.y = 0; in detach_character_from_mount()
1140 pchr->vel.x = pmount->vel.x; in detach_character_from_mount()
1141 pchr->vel.y = pmount->vel.y; in detach_character_from_mount()
1144 pchr->vel.z = DROPZVEL; in detach_character_from_mount()
1147 chr_instance_set_action_loop( &( pchr->inst ), bfalse ); in detach_character_from_mount()
1156 pchr->team = pchr->baseteam; in detach_character_from_mount()
1157 SET_BIT( pchr->ai.alert, ALERTIF_DROPPED ); in detach_character_from_mount()
1160 if ( pchr->isitem && pmount->transferblend ) in detach_character_from_mount()
1166 cleanup_character_enchants( pchr ); in detach_character_from_mount()
1169 ienc_now = pchr->firstenchant; in detach_character_from_mount()
1183 chr_set_alpha( pchr, pchr->alpha_base ); in detach_character_from_mount()
1184 chr_set_light( pchr, pchr->light_base ); in detach_character_from_mount()
1187 cleanup_character_enchants( pchr ); in detach_character_from_mount()
1190 ienc_now = pchr->firstenchant; in detach_character_from_mount()
1210 pchr->ori.map_facing_y = MAP_TURN_OFFSET; in detach_character_from_mount()
1211 pchr->ori.map_facing_x = MAP_TURN_OFFSET; in detach_character_from_mount()
1214 if ( pchr->life <= 0 ) in detach_character_from_mount()
1217 chr_play_action( pchr, ACTION_KA + generate_randmask( 0, 3 ), bfalse ); in detach_character_from_mount()
1218 chr_instance_set_action_keep( &( pchr->inst ), btrue ); in detach_character_from_mount()
1223 chr_play_action( pchr, ACTION_JA, btrue ); in detach_character_from_mount()
1224 chr_instance_set_action_keep( &( pchr->inst ), bfalse ); in detach_character_from_mount()
1227 chr_update_matrix( pchr, btrue ); in detach_character_from_mount()
1238 chr_t * pchr, * pmount; in reset_character_alpha() local
1242 pchr = ChrList.lst + character; in reset_character_alpha()
1249 if ( pchr->isitem && pmount->transferblend ) in reset_character_alpha()
1255 cleanup_character_enchants( pchr ); in reset_character_alpha()
1258 ienc_now = pchr->firstenchant; in reset_character_alpha()
1272 chr_set_alpha( pchr, pchr->alpha_base ); in reset_character_alpha()
1273 chr_set_light( pchr, pchr->light_base ); in reset_character_alpha()
1276 cleanup_character_enchants( pchr ); in reset_character_alpha()
1278 ienc_now = pchr->firstenchant; in reset_character_alpha()
1427 chr_t * pchr, * pitem; in inventory_add_item() local
1443 pchr = ChrList.lst + character; in inventory_add_item()
1446 if ( pchr->pack.is_packed || pchr->isequipped ) return bfalse; in inventory_add_item()
1463 if ( INGAME_CHR( pchr->holdingwhich[slot_count] ) ) in inventory_add_item()
1465 pchr->inventory[slot_count] = ( CHR_REF )MAX_CHR; in inventory_add_item()
1473 pchr->inventory[slot_count] = item; in inventory_add_item()
1482 chr_t * pchr; in inventory_get_item() local
1487 pchr = ChrList.lst + ichr; in inventory_get_item()
1489 if ( pchr->pack.is_packed || pchr->isitem || MAX_CHR == pchr->pack.next ) in inventory_get_item()
1492 if ( 0 == pchr->pack.count ) return ( CHR_REF )MAX_CHR; in inventory_get_item()
1501 if ( pchr->inventory[cnt] == iitem ) in inventory_get_item()
1503 pchr->inventory[cnt] = iitem; in inventory_get_item()
1650 chr_t * pchr, * pitem; in chr_add_pack_item() local
1655 pchr = ChrList.lst + character; in chr_add_pack_item()
1656 pchr_pack = &( pchr->pack ); in chr_add_pack_item()
1665 if ( pitem_pack->is_packed || pchr_pack->is_packed || pchr->isitem ) in chr_add_pack_item()
1708 SET_BIT( pchr->ai.alert, ALERTIF_TOOMUCHBAGGAGE ); in chr_add_pack_item()
1716 SET_BIT( pchr->ai.alert, ALERTIF_TOOMUCHBAGGAGE ); in chr_add_pack_item()
1750 chr_t * pchr; in chr_remove_pack_item() local
1756 pchr = ChrList.lst + ichr; in chr_remove_pack_item()
1757 pchr_pack = &( pchr->pack ); in chr_remove_pack_item()
1780 chr_t * pchr, * pfound_item, *pfound_item_parent; in chr_get_pack_item() local
1785 pchr = ChrList.lst + character; in chr_get_pack_item()
1786 pchr_pack = &( pchr->pack ); in chr_get_pack_item()
1789 if ( pchr_pack->is_packed || pchr->isitem ) return ( CHR_REF )MAX_CHR; in chr_get_pack_item()
1882 chr_t * pchr; in drop_keys() local
1895 pchr = ChrList.lst + character; in drop_keys()
1898 if ( pchr->pos.z <= ( PITDEPTH >> 1 ) ) return; in drop_keys()
1905 pparent = &( pchr->pack.next ); in drop_keys()
1906 PACK_BEGIN_LOOP( ipacked, pchr->pack.next ) in drop_keys()
1952 pchr->pack.count--; in drop_keys()
1957 pkey->dismount_object = GET_REF_PCHR( pchr ); in drop_keys()
1958 pkey->onwhichplatform_ref = pchr->onwhichplatform_ref; in drop_keys()
1959 pkey->onwhichplatform_update = pchr->onwhichplatform_update; in drop_keys()
1976 chr_set_pos( pkey, chr_get_pos_v( pchr ) ); in drop_keys()
1978 chr_set_floor_level( pkey, pchr->enviro.floor_level ); in drop_keys()
1990 chr_t * pchr; in drop_all_items() local
1993 pchr = ChrList.lst + character; in drop_all_items()
1995 detach_character_from_mount( pchr->holdingwhich[SLOT_LEFT], btrue, bfalse ); in drop_all_items()
1996 detach_character_from_mount( pchr->holdingwhich[SLOT_RIGHT], btrue, bfalse ); in drop_all_items()
1997 if ( pchr->pack.count > 0 ) in drop_all_items()
1999 direction = pchr->ori.facing_z + ATK_BEHIND; in drop_all_items()
2000 diradd = 0x00010000 / pchr->pack.count; in drop_all_items()
2002 while ( pchr->pack.count > 0 ) in drop_all_items()
2015 pitem->dismount_object = GET_REF_PCHR( pchr ); in drop_all_items()
2016 pitem->onwhichplatform_ref = pchr->onwhichplatform_ref; in drop_all_items()
2017 pitem->onwhichplatform_update = pchr->onwhichplatform_update; in drop_all_items()
2031 chr_set_pos( pitem, chr_get_pos_v( pchr ) ); in drop_all_items()
2033 chr_set_floor_level( pitem, pchr->enviro.floor_level ); in drop_all_items()
2414 chr_t * pchr, * pweapon; in character_swipe() local
2427 pchr = ChrList.lst + ichr; in character_swipe()
2429 iweapon = pchr->holdingwhich[slot]; in character_swipe()
2442 action = pchr->inst.action_which; in character_swipe()
2475 …ithrown = spawn_one_character( pchr->pos, pweapon->profile_ref, chr_get_iteam( iholder ), 0, pchr-… in character_swipe()
2483 velocity = pchr->strength / ( pthrown->phys.weight * THROWFIX ); in character_swipe()
2487 turn = TO_TURN( pchr->ori.facing_z + ATK_BEHIND ); in character_swipe()
2518 …iparticle = spawn_one_particle( pweapon->pos, pchr->ori.facing_z, pweapon->profile_ref, pweapon_ca… in character_swipe()
2534 float bumpdampen = exp( -1.8e-4 * ( pchr->strength - 2611 ) ); in character_swipe()
2562 tmp_pos.x = pchr->pos.x; in character_swipe()
2563 tmp_pos.y = pchr->pos.y; in character_swipe()
2569 pprt->damage.base += ( pchr->strength * pweapon_cap->str_bonus ); in character_swipe()
2570 pprt->damage.base += ( pchr->wisdom * pweapon_cap->wis_bonus ); in character_swipe()
2571 pprt->damage.base += ( pchr->intelligence * pweapon_cap->int_bonus ); in character_swipe()
2572 pprt->damage.base += ( pchr->dexterity * pweapon_cap->dex_bonus ); in character_swipe()
2600 chr_t * pchr; in drop_money() local
2604 pchr = ChrList.lst + character; in drop_money()
2606 fvec3_base_copy( loc_pos.v, chr_get_pos_v( pchr ) ); in drop_money()
2620 pchr->money -= money; in drop_money()
2623 loc_pos.z += ( pchr->chr_min_cv.maxs[OCT_Z] + pchr->chr_min_cv.mins[OCT_Z] ) * 0.5f; in drop_money()
2627 pchr->damage_timer = DAMAGETIME; in drop_money()
2655 CHR_BEGIN_LOOP_ACTIVE( cnt, pchr ) in call_for_help()
2657 if ( cnt != character && !team_hates_team( pchr->team, team ) ) in call_for_help()
2659 SET_BIT( pchr->ai.alert, ALERTIF_CALLEDFORHELP ); in call_for_help()
2694 chr_t * pchr; in do_level_up() local
2698 pchr = ChrList.lst + character; in do_level_up()
2704 curlevel = pchr->experiencelevel + 1; in do_level_up()
2709 xpcurrent = pchr->experience; in do_level_up()
2714 pchr->experiencelevel++; in do_level_up()
2716 SET_BIT( pchr->ai.alert, ALERTIF_LEVELUP ); in do_level_up()
2719 if ( VALID_PLA( pchr->is_which_player ) ) in do_level_up()
2721 …debug_printf( "%s gained a level!!!", chr_get_name( GET_REF_PCHR( pchr ), CHRNAME_ARTICLE | CHRNAM… in do_level_up()
2726 pchr->fat_goto += pcap->size_perlevel * 0.25f; // Limit this? in do_level_up()
2727 pchr->fat_goto_time += SIZETIME; in do_level_up()
2731 number += pchr->strength; in do_level_up()
2733 pchr->strength = number; in do_level_up()
2737 number += pchr->wisdom; in do_level_up()
2739 pchr->wisdom = number; in do_level_up()
2743 number += pchr->intelligence; in do_level_up()
2745 pchr->intelligence = number; in do_level_up()
2749 number += pchr->dexterity; in do_level_up()
2751 pchr->dexterity = number; in do_level_up()
2755 number += pchr->lifemax; in do_level_up()
2757 pchr->life += ( number - pchr->lifemax ); in do_level_up()
2758 pchr->lifemax = number; in do_level_up()
2762 number += pchr->manamax; in do_level_up()
2764 pchr->mana += ( number - pchr->manamax ); in do_level_up()
2765 pchr->manamax = number; in do_level_up()
2769 number += pchr->manareturn; in do_level_up()
2771 pchr->manareturn = number; in do_level_up()
2775 number += pchr->manaflow; in do_level_up()
2777 pchr->manaflow = number; in do_level_up()
2789 chr_t * pchr; in give_experience() local
2793 pchr = ChrList.lst + character; in give_experience()
2801 if ( !pchr->invictus || override_invictus ) in give_experience()
2803 float intadd = ( FP8_TO_INT( pchr->intelligence ) - 10.0f ) / 200.0f; in give_experience()
2804 float wisadd = ( FP8_TO_INT( pchr->wisdom ) - 10.0f ) / 400.0f; in give_experience()
2820 pchr->experience += newamount; in give_experience()
2829 CHR_BEGIN_LOOP_ACTIVE( cnt, pchr ) in give_team_experience()
2831 if ( pchr->team == team ) in give_team_experience()
2840 chr_t * resize_one_character( chr_t * pchr ) in resize_one_character() argument
2852 if ( NULL == pchr ) return pchr; in resize_one_character()
2854 ichr = GET_REF_PCHR( pchr ); in resize_one_character()
2857 if ( pchr->fat_goto_time < 0 ) return pchr; in resize_one_character()
2859 if ( pchr->fat_goto != pchr->fat ) in resize_one_character()
2863 bump_increase = ( pchr->fat_goto - pchr->fat ) * 0.10f * pchr->bump.size; in resize_one_character()
2867 if ( pchr->fat_goto > pchr->fat ) in resize_one_character()
2869 pchr->bump.size += bump_increase; in resize_one_character()
2871 if ( EMPTY_BIT_FIELD != chr_test_wall( pchr, NULL, NULL ) ) in resize_one_character()
2876 pchr->bump.size -= bump_increase; in resize_one_character()
2883 pchr->fat_goto_time--; in resize_one_character()
2885 newsize = pchr->fat_goto; in resize_one_character()
2886 if ( pchr->fat_goto_time > 0 ) in resize_one_character()
2888 newsize = ( pchr->fat * 0.90f ) + ( newsize * 0.10f ); in resize_one_character()
2892 chr_set_fat( pchr, newsize ); in resize_one_character()
2896 pchr->phys.weight = CHR_INFINITE_WEIGHT; in resize_one_character()
2900 Uint32 itmp = pcap->weight * pchr->fat * pchr->fat * pchr->fat; in resize_one_character()
2901 pchr->phys.weight = MIN( itmp, CHR_MAX_WEIGHT ); in resize_one_character()
2906 return pchr; in resize_one_character()
2950 bool_t chr_upload_cap( chr_t * pchr, cap_t * pcap ) in chr_upload_cap() argument
2963 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in chr_upload_cap()
2968 pcap->content_override = pchr->ai.content; in chr_upload_cap()
2969 pcap->state_override = pchr->ai.state; in chr_upload_cap()
2970 pcap->money = pchr->money; in chr_upload_cap()
2971 pcap->skin_override = pchr->skin; in chr_upload_cap()
2972 pcap->level_override = pchr->experiencelevel; in chr_upload_cap()
2975 ints_to_range( pchr->experience, 0, &( pcap->experience ) ); in chr_upload_cap()
2978 pcap->life_spawn = CLIP( pchr->life, 0, pchr->lifemax ); in chr_upload_cap()
2979 pcap->mana_spawn = CLIP( pchr->mana, 0, pchr->manamax ); in chr_upload_cap()
2982 pcap->anim_speed_sneak = pchr->anim_speed_sneak; in chr_upload_cap()
2983 pcap->anim_speed_walk = pchr->anim_speed_walk; in chr_upload_cap()
2984 pcap->anim_speed_run = pchr->anim_speed_run; in chr_upload_cap()
2987 pcap->size = pchr->fat_goto; in chr_upload_cap()
2988 pcap->bumpdampen = pchr->phys.bumpdampen; in chr_upload_cap()
2989 if ( CHR_INFINITE_WEIGHT == pchr->phys.weight ) in chr_upload_cap()
2995 Uint32 itmp = pchr->phys.weight / pchr->fat / pchr->fat / pchr->fat; in chr_upload_cap()
3000 pcap->flyheight = pchr->flyheight; in chr_upload_cap()
3001 pcap->alpha = pchr->alpha_base; in chr_upload_cap()
3002 pcap->light = pchr->light_base; in chr_upload_cap()
3003 pcap->flashand = pchr->flashand; in chr_upload_cap()
3004 pcap->dampen = pchr->phys.dampen; in chr_upload_cap()
3007 pcap->jump = pchr->jump_power; in chr_upload_cap()
3008 pcap->jumpnumber = pchr->jumpnumberreset; in chr_upload_cap()
3011 pcap->stickybutt = pchr->stickybutt; in chr_upload_cap()
3012 pcap->canopenstuff = pchr->openstuff; in chr_upload_cap()
3013 pcap->transferblend = pchr->transferblend; in chr_upload_cap()
3014 pcap->waterwalk = pchr->waterwalk; in chr_upload_cap()
3015 pcap->platform = pchr->platform; in chr_upload_cap()
3016 pcap->canuseplatforms = pchr->canuseplatforms; in chr_upload_cap()
3017 pcap->isitem = pchr->isitem; in chr_upload_cap()
3018 pcap->invictus = pchr->invictus; in chr_upload_cap()
3019 pcap->ismount = pchr->ismount; in chr_upload_cap()
3020 pcap->cangrabmoney = pchr->cangrabmoney; in chr_upload_cap()
3023 pcap->attachedprt_reaffirm_damagetype = pchr->reaffirm_damagetype; in chr_upload_cap()
3024 pcap->damagetarget_damagetype = pchr->damagetarget_damagetype; in chr_upload_cap()
3027 ints_to_range( pchr->strength , 0, &( pcap->strength_stat.val ) ); in chr_upload_cap()
3028 ints_to_range( pchr->wisdom , 0, &( pcap->wisdom_stat.val ) ); in chr_upload_cap()
3029 ints_to_range( pchr->intelligence, 0, &( pcap->intelligence_stat.val ) ); in chr_upload_cap()
3030 ints_to_range( pchr->dexterity , 0, &( pcap->dexterity_stat.val ) ); in chr_upload_cap()
3033 pcap->lifecolor = pchr->lifecolor; in chr_upload_cap()
3034 pcap->manacolor = pchr->manacolor; in chr_upload_cap()
3035 ints_to_range( pchr->lifemax , 0, &( pcap->life_stat.val ) ); in chr_upload_cap()
3036 ints_to_range( pchr->manamax , 0, &( pcap->mana_stat.val ) ); in chr_upload_cap()
3037 ints_to_range( pchr->manareturn , 0, &( pcap->manareturn_stat.val ) ); in chr_upload_cap()
3038 ints_to_range( pchr->manaflow , 0, &( pcap->manaflow_stat.val ) ); in chr_upload_cap()
3041 pcap->gender = pchr->gender; in chr_upload_cap()
3044 pcap->ammomax = pchr->ammomax; in chr_upload_cap()
3045 pcap->ammo = pchr->ammo; in chr_upload_cap()
3048 idsz_map_copy( pchr->skills, SDL_arraysize( pchr->skills ), pcap->skills ); in chr_upload_cap()
3051 pcap->see_invisible_level = pchr->see_invisible_level; in chr_upload_cap()
3054 pcap->kursechance = pchr->iskursed ? 100 : 0; in chr_upload_cap()
3057 pcap->stoppedby = pchr->stoppedby; in chr_upload_cap()
3058 pcap->life_heal = pchr->life_heal; in chr_upload_cap()
3059 pcap->manacost = pchr->manacost; in chr_upload_cap()
3060 …pcap->nameknown = pchr->nameknown || pchr->ammoknown; // make sure that identified items … in chr_upload_cap()
3061 pcap->draw_icon = pchr->draw_icon; in chr_upload_cap()
3066 pcap->sound_index[tnc] = pchr->sound_index[tnc]; in chr_upload_cap()
3073 bool_t chr_download_cap( chr_t * pchr, cap_t * pcap ) in chr_download_cap() argument
3079 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in chr_download_cap()
3086 pchr->sound_index[tnc] = pcap->sound_index[tnc]; in chr_download_cap()
3090 pchr->stoppedby = pcap->stoppedby; in chr_download_cap()
3091 pchr->life_heal = pcap->life_heal; in chr_download_cap()
3092 pchr->manacost = pcap->manacost; in chr_download_cap()
3093 pchr->nameknown = pcap->nameknown; in chr_download_cap()
3094 pchr->ammoknown = pcap->nameknown; in chr_download_cap()
3095 pchr->draw_icon = pcap->draw_icon; in chr_download_cap()
3101 pchr->iskursed = ( generate_irand_pair( loc_rand ) <= pcap->kursechance ); in chr_download_cap()
3105 pchr->see_invisible_level = pcap->see_invisible_level; in chr_download_cap()
3108 idsz_map_copy( pcap->skills, SDL_arraysize( pcap->skills ), pchr->skills ); in chr_download_cap()
3109 pchr->darkvision_level = chr_get_skill( pchr, MAKE_IDSZ( 'D', 'A', 'R', 'K' ) ); in chr_download_cap()
3110 pchr->see_invisible_level = pcap->see_invisible_level; in chr_download_cap()
3113 pchr->ammomax = pcap->ammomax; in chr_download_cap()
3114 pchr->ammo = pcap->ammo; in chr_download_cap()
3117 pchr->gender = pcap->gender; in chr_download_cap()
3118 …if ( pchr->gender == GENDER_RANDOM ) pchr->gender = generate_randmask( GENDER_FEMALE, GENDER_MALE… in chr_download_cap()
3121 pchr->lifecolor = pcap->lifecolor; in chr_download_cap()
3122 pchr->manacolor = pcap->manacolor; in chr_download_cap()
3123 pchr->lifemax = generate_irand_range( pcap->life_stat.val ); in chr_download_cap()
3124 pchr->life_return = pcap->life_return; in chr_download_cap()
3125 pchr->manamax = generate_irand_range( pcap->mana_stat.val ); in chr_download_cap()
3126 pchr->manaflow = generate_irand_range( pcap->manaflow_stat.val ); in chr_download_cap()
3127 pchr->manareturn = generate_irand_range( pcap->manareturn_stat.val ); in chr_download_cap()
3130 pchr->strength = generate_irand_range( pcap->strength_stat.val ); in chr_download_cap()
3131 pchr->wisdom = generate_irand_range( pcap->wisdom_stat.val ); in chr_download_cap()
3132 pchr->intelligence = generate_irand_range( pcap->intelligence_stat.val ); in chr_download_cap()
3133 pchr->dexterity = generate_irand_range( pcap->dexterity_stat.val ); in chr_download_cap()
3136 pchr->skin = 0; in chr_download_cap()
3139 pchr->skin = pcap->spelleffect_type % MAX_SKIN; in chr_download_cap()
3143 pchr->skin = pcap->skin_override % MAX_SKIN; in chr_download_cap()
3147 pchr->defense = pcap->defense[pchr->skin]; in chr_download_cap()
3148 pchr->reaffirm_damagetype = pcap->attachedprt_reaffirm_damagetype; in chr_download_cap()
3149 pchr->damagetarget_damagetype = pcap->damagetarget_damagetype; in chr_download_cap()
3152 pchr->damage_modifier[tnc] = pcap->damage_modifier[tnc][pchr->skin]; in chr_download_cap()
3156 pchr->stickybutt = pcap->stickybutt; in chr_download_cap()
3157 pchr->openstuff = pcap->canopenstuff; in chr_download_cap()
3158 pchr->transferblend = pcap->transferblend; in chr_download_cap()
3159 pchr->waterwalk = pcap->waterwalk; in chr_download_cap()
3160 pchr->platform = pcap->platform; in chr_download_cap()
3161 pchr->canuseplatforms = pcap->canuseplatforms; in chr_download_cap()
3162 pchr->isitem = pcap->isitem; in chr_download_cap()
3163 pchr->invictus = pcap->invictus; in chr_download_cap()
3164 pchr->ismount = pcap->ismount; in chr_download_cap()
3165 pchr->cangrabmoney = pcap->cangrabmoney; in chr_download_cap()
3168 pchr->jump_power = pcap->jump; in chr_download_cap()
3169 pchr->jumpnumberreset = pcap->jumpnumber; in chr_download_cap()
3172 pchr->flyheight = pcap->flyheight; in chr_download_cap()
3173 pchr->maxaccel = pchr->maxaccel_reset = pcap->maxaccel[pchr->skin]; in chr_download_cap()
3174 pchr->alpha_base = pcap->alpha; in chr_download_cap()
3175 pchr->light_base = pcap->light; in chr_download_cap()
3176 pchr->flashand = pcap->flashand; in chr_download_cap()
3177 pchr->phys.dampen = pcap->dampen; in chr_download_cap()
3180 pchr->life = CLIP( pcap->life_spawn, LOWSTAT, pchr->lifemax ); in chr_download_cap()
3181 pchr->mana = CLIP( pcap->mana_spawn, 0, pchr->manamax ); in chr_download_cap()
3183 pchr->phys.bumpdampen = pcap->bumpdampen; in chr_download_cap()
3186 pchr->phys.weight = CHR_INFINITE_WEIGHT; in chr_download_cap()
3191 pchr->phys.weight = MIN( itmp, CHR_MAX_WEIGHT ); in chr_download_cap()
3195 pchr->uoffvel = pcap->uoffvel; in chr_download_cap()
3196 pchr->voffvel = pcap->voffvel; in chr_download_cap()
3199 pchr->anim_speed_sneak = pcap->anim_speed_sneak; in chr_download_cap()
3200 pchr->anim_speed_walk = pcap->anim_speed_walk; in chr_download_cap()
3201 pchr->anim_speed_run = pcap->anim_speed_run; in chr_download_cap()
3204 pchr->money = pcap->money; in chr_download_cap()
3208 pchr->experience = MIN( iTmp, MAXXP ); in chr_download_cap()
3209 pchr->experiencelevel = pcap->level_override; in chr_download_cap()
3212 pchr->reaffirm_damagetype = pcap->attachedprt_reaffirm_damagetype; in chr_download_cap()
3215 chr_init_size( pchr, pcap ); in chr_download_cap()
3226 chr_t * pchr; in export_one_character_profile_vfs() local
3233 pchr = ChrList.lst + character; in export_one_character_profile_vfs()
3235 pcap = pro_get_pcap( pchr->profile_ref ); in export_one_character_profile_vfs()
3242 chr_upload_cap( pchr, &cap_tmp ); in export_one_character_profile_vfs()
3352 chr_t * pchr, *pchr_h; in heal_character() local
3356 pchr = ChrList.lst + character; in heal_character()
3363 if ( !pchr->alive || ( pchr->invictus && !ignore_invictus ) ) return bfalse; in heal_character()
3366 pchr->life = CLIP( pchr->life, pchr->life + ABS( amount ), pchr->lifemax ); in heal_character()
3371 SET_BIT( pchr->ai.alert, ALERTIF_HEALED ); in heal_character()
3372 pchr->ai.attacklast = healer; in heal_character()
3379 void cleanup_one_character( chr_t * pchr ) in cleanup_one_character() argument
3386 if ( !ALLOCATED_PCHR( pchr ) ) return; in cleanup_one_character()
3387 ichr = GET_REF_PCHR( pchr ); in cleanup_one_character()
3389 pchr->sparkle = NOSPARKLE; in cleanup_one_character()
3392 pchr->team = pchr->baseteam; in cleanup_one_character()
3393 if ( TeamStack.lst[pchr->team].morale > 0 ) TeamStack.lst[pchr->team].morale--; in cleanup_one_character()
3395 if ( TeamStack.lst[pchr->team].leader == ichr ) in cleanup_one_character()
3398 TeamStack.lst[pchr->team].leader = NOLEADER; in cleanup_one_character()
3409 if ( INGAME_CHR( pchr->attachedto ) ) in cleanup_one_character()
3415 itmp = pchr->holdingwhich[SLOT_LEFT]; in cleanup_one_character()
3422 itmp = pchr->holdingwhich[SLOT_RIGHT]; in cleanup_one_character()
3429 cleanup_character_enchants( pchr ); in cleanup_one_character()
3432 if ( pchr->life >= 0 ) in cleanup_one_character()
3443 cleanup_character_enchants( pchr ); in cleanup_one_character()
3446 ienc_now = pchr->firstenchant; in cleanup_one_character()
3473 chr_t * pchr; in kill_character() local
3480 pchr = ChrList.lst + ichr; in kill_character()
3483 if ( !pchr->alive || ( pchr->invictus && !ignore_invictus ) ) return; in kill_character()
3485 pcap = pro_get_pcap( pchr->profile_ref ); in kill_character()
3490 pchr->alive = bfalse; in kill_character()
3491 pchr->waskilled = btrue; in kill_character()
3493 pchr->life = -1; in kill_character()
3494 pchr->platform = btrue; in kill_character()
3495 pchr->canuseplatforms = btrue; in kill_character()
3496 pchr->phys.bumpdampen = pchr->phys.bumpdampen / 2.0f; in kill_character()
3500 chr_play_action( pchr, action, bfalse ); in kill_character()
3501 chr_instance_set_action_keep( &( pchr->inst ), btrue ); in kill_character()
3504 experience = pcap->experience_worth + ( pchr->experience * pcap->experience_exchange ); in kill_character()
3510 pchr->ai.target = killer; in kill_character()
3511 if ( killer_team == TEAM_DAMAGE || killer_team == TEAM_NULL ) pchr->ai.target = ichr; in kill_character()
3514 if ( team_hates_team( killer_team, pchr->team ) ) in kill_character()
3530 SET_BIT( pchr->ai.alert, ALERTIF_KILLED ); in kill_character()
3537 …team_hates_team( plistener->team, killer_team ) && team_hates_team( plistener->team, pchr->team ) ) in kill_character()
3543 if ( TeamStack.lst[pchr->team].leader == ichr && chr_get_iteam( tnc ) == pchr->team ) in kill_character()
3558 cleanup_one_character( pchr ); in kill_character()
3561 if ( VALID_PLA( pchr->is_which_player ) ) local_stats.revivetimer = ONESECOND; // 1 second in kill_character()
3564 pchr->ai.timer = update_wld + 1; // Prevent IfTimeOut in scr_run_chr_script() in kill_character()
3568 … if ( pchr->loopedsound_channel != INVALID_SOUND ) sound_stop_channel( pchr->loopedsound_channel ); in kill_character()
3570 pchr->loopedsound_channel = INVALID_SOUND; in kill_character()
3586 chr_t * pchr; in damage_character() local
3595 pchr = ChrList.lst + character; in damage_character()
3597 pcap = pro_get_pcap( pchr->profile_ref ); in damage_character()
3601 damage_modifier = ( damagetype >= DAMAGE_COUNT ) ? 0 : pchr->damage_modifier[damagetype]; in damage_character()
3605 if ( !pchr->alive || 0 == max_damage ) return 0; in damage_character()
3633 if ( pchr->StatusList_on || VALID_PLA( pchr->is_which_player ) ) in damage_character()
3646 if ( damagetype == DAMAGE_ZAP && chr_is_over_water( pchr ) ) in damage_character()
3649 if ( pchr->pos.z <= water.surface_level ) in damage_character()
3657 manadamage = MAX( pchr->mana - actual_damage, 0 ); in damage_character()
3658 pchr->mana = manadamage; in damage_character()
3660 if ( pchr->ai.index != attacker ) in damage_character()
3662 SET_BIT( pchr->ai.alert, ALERTIF_ATTACKED ); in damage_character()
3663 pchr->ai.attacklast = attacker; in damage_character()
3670 pchr->mana += actual_damage; in damage_character()
3671 if ( pchr->mana > pchr->manamax ) in damage_character()
3673 pchr->mana = pchr->manamax; in damage_character()
3683 pchr->ai.damagetypelast = damagetype; in damage_character()
3684 pchr->ai.directionlast = direction; in damage_character()
3687 …immune_to_damage = ( actual_damage > 0 && actual_damage <= pchr->damage_threshold ) || HAS_SOME_BI… in damage_character()
3696 spawn_defense_ping( pchr, attacker ); in damage_character()
3706 if ( 0 == pchr->damage_timer || ignore_invictus ) in damage_character()
3709 …if ( cfg.difficulty >= GAME_HARD && VALID_PLA( pchr->is_which_player ) && !VALID_PLA( ChrList.lst[… in damage_character()
3714 …if ( VALID_PLA( ChrList.lst[attacker].is_which_player ) && !VALID_PLA( pchr->is_which_player ) ) a… in damage_character()
3715 …if ( !VALID_PLA( ChrList.lst[attacker].is_which_player ) && VALID_PLA( pchr->is_which_player ) ) … in damage_character()
3722 actual_damage *= pchr->defense * INV_FF; in damage_character()
3725 pchr->life -= actual_damage; in damage_character()
3732 … spawn_one_particle( pchr->pos, pchr->ori.facing_z + direction, pchr->profile_ref, pcap->blud_lpip, in damage_character()
3733 … ( CHR_REF )MAX_CHR, GRIP_LAST, pchr->team, character, ( PRT_REF )MAX_PRT, 0, ( CHR_REF )MAX_CHR ); in damage_character()
3742 pchr->ai.attacklast = ( CHR_REF )MAX_CHR; in damage_character()
3747 if ( 0 == pchr->careful_timer ) in damage_character()
3752 SET_BIT( pchr->ai.alert, ALERTIF_ATTACKED ); in damage_character()
3753 pchr->ai.attacklast = attacker; in damage_character()
3754 pchr->careful_timer = CAREFULTIME; in damage_character()
3761 if ( pchr->life <= 0 ) in damage_character()
3771 chr_play_action( pchr, action, bfalse ); in damage_character()
3776 pchr->damage_timer = DAMAGETIME; in damage_character()
3800 tmpstr = describe_damage( actual_damage, pchr->lifemax, &rank ); in damage_character()
3803 tmpstr = describe_wounds( pchr->lifemax, pchr->life ); in damage_character()
3839 pchr->ai.attacklast = ( CHR_REF )MAX_CHR; in damage_character()
3865 void spawn_defense_ping( chr_t *pchr, const CHR_REF attacker ) in spawn_defense_ping() argument
3868 if ( 0 != pchr->damage_timer ) return; in spawn_defense_ping()
3870 spawn_one_particle_global( pchr->pos, pchr->ori.facing_z, PIP_DEFEND, 0 ); in spawn_defense_ping()
3872 pchr->damage_timer = DEFENDTIME; in spawn_defense_ping()
3873 SET_BIT( pchr->ai.alert, ALERTIF_BLOCKED ); in spawn_defense_ping()
3874 pchr->ai.attacklast = attacker; // For the ones attacking a shield in spawn_defense_ping()
3886 chr_t * pchr; in spawn_poof() local
3890 pchr = ChrList.lst + character; in spawn_poof()
3895 origin = pchr->ai.owner; in spawn_poof()
3896 facing_z = pchr->ori.facing_z; in spawn_poof()
3899 spawn_one_particle( pchr->pos_old, facing_z, profile, pcap->gopoofprt_lpip, in spawn_poof()
3900 … ( CHR_REF )MAX_CHR, GRIP_LAST, pchr->team, origin, ( PRT_REF )MAX_PRT, cnt, ( CHR_REF )MAX_CHR ); in spawn_poof()
3909 chr_t * pchr; in ai_state_spawn() local
3916 pchr = ChrList.lst + index; in ai_state_spawn()
3945 bool_t chr_get_environment( chr_t * pchr ) in chr_get_environment() argument
3947 if ( NULL == pchr ) return bfalse; in chr_get_environment()
3949 move_one_character_get_environment( pchr ); in chr_get_environment()
3956 chr_t * chr_config_do_init( chr_t * pchr ) in chr_config_do_init() argument
3966 if ( NULL == pchr ) return NULL; in chr_config_do_init()
3967 ichr = GET_INDEX_PCHR( pchr ); in chr_config_do_init()
3970 pcap = pro_get_pcap( pchr->spawn_data.profile ); in chr_config_do_init()
3979 icap = pro_get_icap( pchr->spawn_data.profile ); in chr_config_do_init()
3982 POBJ_ACTIVATE( pchr, pcap->name ); in chr_config_do_init()
3985 pos_tmp = pchr->spawn_data.pos; in chr_config_do_init()
3988 chr_download_cap( pchr, pcap ); in chr_config_do_init()
3991 loc_team = pchr->spawn_data.team; in chr_config_do_init()
3997 pchr->missilehandler = ichr; in chr_config_do_init()
4000 pchr->profile_ref = pchr->spawn_data.profile; in chr_config_do_init()
4001 pchr->basemodel_ref = pchr->spawn_data.profile; in chr_config_do_init()
4011 pchr->iskursed = ( generate_irand_pair( loc_rand ) <= kursechance ); in chr_config_do_init()
4015 ai_state_spawn( &( pchr->ai ), ichr, pchr->profile_ref, TeamStack.lst[loc_team].morale ); in chr_config_do_init()
4018 pchr->team = loc_team; in chr_config_do_init()
4019 pchr->baseteam = loc_team; in chr_config_do_init()
4020 if ( !pchr->invictus ) TeamStack.lst[loc_team].morale++; in chr_config_do_init()
4033 pchr->spawn_data.skin = pchr->skin; in chr_config_do_init()
4035 if ( pchr->spawn_data.skin >= ProList.lst[pchr->spawn_data.profile].skins ) in chr_config_do_init()
4042 pchr->spawn_data.skin = 0; in chr_config_do_init()
4043 if ( 0 != ProList.lst[pchr->spawn_data.profile].skins ) in chr_config_do_init()
4045 pchr->spawn_data.skin = irand % ProList.lst[pchr->spawn_data.profile].skins; in chr_config_do_init()
4048 pchr->skin = pchr->spawn_data.skin; in chr_config_do_init()
4052 if ( pchr->spawn_data.skin != pchr->skin ) in chr_config_do_init()
4054 pchr->skin = pchr->spawn_data.skin; in chr_config_do_init()
4056 pchr->defense = pcap->defense[pchr->skin]; in chr_config_do_init()
4059 pchr->damage_modifier[tnc] = pcap->damage_modifier[tnc][pchr->skin]; in chr_config_do_init()
4062 chr_set_maxaccel( pchr, pcap->maxaccel[pchr->skin] ); in chr_config_do_init()
4068 pchr->life = pchr->lifemax; in chr_config_do_init()
4069 pchr->mana = pchr->manamax; in chr_config_do_init()
4073 pchr->fat_goto = pchr->fat; in chr_config_do_init()
4074 pchr->fat_goto_time = 0; in chr_config_do_init()
4077 chr_get_environment( pchr ); in chr_config_do_init()
4079 chr_set_pos( pchr, pos_tmp.v ); in chr_config_do_init()
4081 pchr->pos_stt = pos_tmp; in chr_config_do_init()
4082 pchr->pos_old = pos_tmp; in chr_config_do_init()
4084 pchr->ori.facing_z = pchr->spawn_data.facing; in chr_config_do_init()
4085 pchr->ori_old.facing_z = pchr->ori.facing_z; in chr_config_do_init()
4088 if ( CSTR_END == pchr->spawn_data.name[0] ) in chr_config_do_init()
4091 …snprintf( pchr->Name, SDL_arraysize( pchr->Name ), "%s", pro_create_chop( pchr->spawn_data.profile… in chr_config_do_init()
4100 pchr->Name[tnc] = pchr->spawn_data.name[tnc]; in chr_config_do_init()
4104 pchr->Name[tnc] = CSTR_END; in chr_config_do_init()
4110 … spawn_one_particle( pchr->pos, pchr->ori.facing_z, pchr->profile_ref, pcap->attachedprt_lpip, in chr_config_do_init()
4111 … ichr, GRIP_LAST + tnc, pchr->team, ichr, ( PRT_REF )MAX_PRT, tnc, ( CHR_REF )MAX_CHR ); in chr_config_do_init()
4115 if ( pchr->isitem ) in chr_config_do_init()
4120 pchr->isshopitem = bfalse; in chr_config_do_init()
4126 …if ( object_is_in_passage( ShopStack.lst[ishop].passage, pchr->pos.x, pchr->pos.y, pchr->bump_1.si… in chr_config_do_init()
4128 pchr->isshopitem = btrue; // Full value in chr_config_do_init()
4129 pchr->iskursed = bfalse; // Shop items are never kursed in chr_config_do_init()
4130 pchr->nameknown = btrue; in chr_config_do_init()
4144 chr_instance_spawn( &( pchr->inst ), pchr->spawn_data.profile, pchr->spawn_data.skin ); in chr_config_do_init()
4145 chr_update_matrix( pchr, btrue ); in chr_config_do_init()
4148 chr_update_hide( pchr ); in chr_config_do_init()
4150 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, btrue ); in chr_config_do_init()
4153 …if ( DEFINED_CHR( pchr->attachedto ) && CHR_INFINITE_WEIGHT != pchr->phys.weight && !pchr->safe_va… in chr_config_do_init()
4156 pchr->pos.x, pchr->pos.y, nrm.x, nrm.y ); in chr_config_do_init()
4160 return pchr; in chr_config_do_init()
4164 chr_t * chr_config_do_active( chr_t * pchr ) in chr_config_do_active() argument
4171 if ( NULL == pchr ) return pchr; in chr_config_do_active()
4172 ichr = GET_REF_PCHR( pchr ); in chr_config_do_active()
4175 chr_update_hide( pchr ); in chr_config_do_active()
4178 if ( pchr->pack.is_packed ) return pchr; in chr_config_do_active()
4180 pcap = pro_get_pcap( pchr->profile_ref ); in chr_config_do_active()
4181 if ( NULL == pcap ) return pchr; in chr_config_do_active()
4195 …if ( !pchr->is_hidden && pchr->pos.z < water_level && ( 0 != mesh_test_fx( PMesh, pchr->onwhichgri… in chr_config_do_active()
4198 if ( !pchr->enviro.inwater ) in chr_config_do_active()
4201 fvec3_t vtmp = VECT3( pchr->pos.x, pchr->pos.y, water_level + RAISE ); in chr_config_do_active()
4207 SET_BIT( pchr->ai.alert, ALERTIF_INWATER ); in chr_config_do_active()
4213 …AME_CHR( pchr->attachedto ) && pcap->ripple && pchr->pos.z + pchr->chr_min_cv.maxs[OCT_Z] + RIPPLE… in chr_config_do_active()
4218 ripple_suppression = water_level - ( pchr->pos.z + pchr->chr_min_cv.maxs[OCT_Z] ); in chr_config_do_active()
4223 ripple_suppression -= (( int )pchr->vel.x != 0 ) | (( int )pchr->vel.y != 0 ); in chr_config_do_active()
4234 …if ( 0 == (( update_wld + pchr->obj_base.guid ) & ripand ) && pchr->pos.z < water_level && pchr->a… in chr_config_do_active()
4236 fvec3_t vtmp = VECT3( pchr->pos.x, pchr->pos.y, water_level ); in chr_config_do_active()
4244 pchr->jumpready = btrue; in chr_config_do_active()
4245 pchr->jumpnumber = 1; in chr_config_do_active()
4249 pchr->enviro.inwater = btrue; in chr_config_do_active()
4253 pchr->enviro.inwater = bfalse; in chr_config_do_active()
4257 if ( 0 == update_wld ) return pchr; in chr_config_do_active()
4262 if ( pchr->reload_timer > 0 ) pchr->reload_timer--; in chr_config_do_active()
4265 if ( pchr->dismount_timer > 0 ) pchr->dismount_timer--; in chr_config_do_active()
4267 if ( 0 == pchr->dismount_timer ) in chr_config_do_active()
4269 pchr->dismount_object = ( CHR_REF )MAX_CHR; in chr_config_do_active()
4273 if ( pchr->damage_timer > 0 ) pchr->damage_timer--; in chr_config_do_active()
4276 if ( pchr->careful_timer > 0 ) pchr->careful_timer--; in chr_config_do_active()
4279 pchr->inst.uoffset += pchr->uoffvel; in chr_config_do_active()
4280 pchr->inst.voffset += pchr->voffvel; in chr_config_do_active()
4289 if ( pchr->alive ) in chr_config_do_active()
4293 get_chr_regeneration( pchr, &liferegen, &manaregen ); in chr_config_do_active()
4295 pchr->mana += manaregen; in chr_config_do_active()
4296 pchr->mana = MAX( 0, MIN( pchr->mana, pchr->manamax ) ); in chr_config_do_active()
4298 pchr->life += liferegen; in chr_config_do_active()
4299 pchr->life = MAX( 1, MIN( pchr->life, pchr->lifemax ) ); in chr_config_do_active()
4303 if ( pchr->grog_timer > 0 ) in chr_config_do_active()
4305 pchr->grog_timer--; in chr_config_do_active()
4308 if ( pchr->daze_timer > 0 ) in chr_config_do_active()
4310 pchr->daze_timer--; in chr_config_do_active()
4317 pchr = resize_one_character( pchr ); in chr_config_do_active()
4320pchr->see_kurse_level = MAX( pchr->see_kurse_level, chr_get_skill( pchr, MAKE_IDSZ( 'C', 'K', 'U… in chr_config_do_active()
4321pchr->darkvision_level = MAX( pchr->darkvision_level, chr_get_skill( pchr, MAKE_IDSZ( 'D', 'A', 'R… in chr_config_do_active()
4323 return pchr; in chr_config_do_active()
4328 chr_t * chr_config_construct( chr_t * pchr, int max_iterations ) in chr_config_construct() argument
4333 if ( NULL == pchr ) return NULL; in chr_config_construct()
4335 pbase = POBJ_GET_PBASE( pchr ); in chr_config_construct()
4341 chr_t * tmp_chr = chr_config_deconstruct( pchr, max_iterations ); in chr_config_construct()
4342 if ( tmp_chr == pchr ) return NULL; in chr_config_construct()
4346 while ( NULL != pchr && pbase->state <= ego_object_constructing && iterations < max_iterations ) in chr_config_construct()
4348 chr_t * ptmp = chr_run_config( pchr ); in chr_config_construct()
4349 if ( ptmp != pchr ) return NULL; in chr_config_construct()
4353 return pchr; in chr_config_construct()
4357 chr_t * chr_config_initialize( chr_t * pchr, int max_iterations ) in chr_config_initialize() argument
4362 if ( NULL == pchr ) return NULL; in chr_config_initialize()
4364 pbase = POBJ_GET_PBASE( pchr ); in chr_config_initialize()
4370 chr_t * tmp_chr = chr_config_deconstruct( pchr, max_iterations ); in chr_config_initialize()
4371 if ( tmp_chr == pchr ) return NULL; in chr_config_initialize()
4375 while ( NULL != pchr && pbase->state <= ego_object_initializing && iterations < max_iterations ) in chr_config_initialize()
4377 chr_t * ptmp = chr_run_config( pchr ); in chr_config_initialize()
4378 if ( ptmp != pchr ) return NULL; in chr_config_initialize()
4382 return pchr; in chr_config_initialize()
4386 chr_t * chr_config_activate( chr_t * pchr, int max_iterations ) in chr_config_activate() argument
4391 if ( NULL == pchr ) return NULL; in chr_config_activate()
4393 pbase = POBJ_GET_PBASE( pchr ); in chr_config_activate()
4399 chr_t * tmp_chr = chr_config_deconstruct( pchr, max_iterations ); in chr_config_activate()
4400 if ( tmp_chr == pchr ) return NULL; in chr_config_activate()
4404 while ( NULL != pchr && pbase->state < ego_object_active && iterations < max_iterations ) in chr_config_activate()
4406 chr_t * ptmp = chr_run_config( pchr ); in chr_config_activate()
4407 if ( ptmp != pchr ) return NULL; in chr_config_activate()
4414 ChrList_add_used( GET_INDEX_PCHR( pchr ) ); in chr_config_activate()
4417 return pchr; in chr_config_activate()
4421 chr_t * chr_config_deinitialize( chr_t * pchr, int max_iterations ) in chr_config_deinitialize() argument
4426 if ( NULL == pchr ) return NULL; in chr_config_deinitialize()
4428 pbase = POBJ_GET_PBASE( pchr ); in chr_config_deinitialize()
4434 return pchr; in chr_config_deinitialize()
4442 … while ( NULL != pchr && pbase->state <= ego_object_deinitializing && iterations < max_iterations ) in chr_config_deinitialize()
4444 chr_t * ptmp = chr_run_config( pchr ); in chr_config_deinitialize()
4445 if ( ptmp != pchr ) return NULL; in chr_config_deinitialize()
4449 return pchr; in chr_config_deinitialize()
4453 chr_t * chr_config_deconstruct( chr_t * pchr, int max_iterations ) in chr_config_deconstruct() argument
4458 if ( NULL == pchr ) return NULL; in chr_config_deconstruct()
4460 pbase = POBJ_GET_PBASE( pchr ); in chr_config_deconstruct()
4466 return pchr; in chr_config_deconstruct()
4475 while ( NULL != pchr && pbase->state <= ego_object_destructing && iterations < max_iterations ) in chr_config_deconstruct()
4477 chr_t * ptmp = chr_run_config( pchr ); in chr_config_deconstruct()
4478 if ( ptmp != pchr ) return NULL; in chr_config_deconstruct()
4482 return pchr; in chr_config_deconstruct()
4487 chr_t * chr_run_config( chr_t * pchr ) in chr_run_config() argument
4491 if ( NULL == pchr ) return NULL; in chr_run_config()
4493 pbase = POBJ_GET_PBASE( pchr ); in chr_run_config()
4511 pchr = NULL; in chr_run_config()
4515 pchr = chr_config_ctor( pchr ); in chr_run_config()
4519 pchr = chr_config_init( pchr ); in chr_run_config()
4523 pchr = chr_config_active( pchr ); in chr_run_config()
4527 pchr = chr_config_deinit( pchr ); in chr_run_config()
4531 pchr = chr_config_dtor( pchr ); in chr_run_config()
4540 if ( NULL == pchr ) in chr_run_config()
4549 return pchr; in chr_run_config()
4553 chr_t * chr_config_ctor( chr_t * pchr ) in chr_config_ctor() argument
4562 if ( NULL == pchr ) return NULL; in chr_config_ctor()
4563 pbase = POBJ_GET_PBASE( pchr ); in chr_config_ctor()
4566 if ( !STATE_CONSTRUCTING_PBASE( pbase ) ) return pchr; in chr_config_ctor()
4568 pchr = chr_ctor( pchr ); in chr_config_ctor()
4569 if ( NULL == pchr ) return pchr; in chr_config_ctor()
4572 pchr->obj_base.state = ego_object_initializing; in chr_config_ctor()
4574 return pchr; in chr_config_ctor()
4578 chr_t * chr_config_init( chr_t * pchr ) in chr_config_init() argument
4582 if ( NULL == pchr ) return NULL; in chr_config_init()
4583 pbase = POBJ_GET_PBASE( pchr ); in chr_config_init()
4585 if ( !STATE_INITIALIZING_PBASE( pbase ) ) return pchr; in chr_config_init()
4587 pchr = chr_config_do_init( pchr ); in chr_config_init()
4588 if ( NULL == pchr ) return NULL; in chr_config_init()
4592 pchr->obj_base.on = btrue; in chr_config_init()
4596 ChrList_add_activation( GET_INDEX_PPRT( pchr ) ); in chr_config_init()
4601 return pchr; in chr_config_init()
4605 chr_t * chr_config_active( chr_t * pchr ) in chr_config_active() argument
4611 if ( NULL == pchr ) return NULL; in chr_config_active()
4613 pbase = POBJ_GET_PBASE( pchr ); in chr_config_active()
4616 if ( !STATE_ACTIVE_PBASE( pbase ) ) return pchr; in chr_config_active()
4618 POBJ_END_SPAWN( pchr ); in chr_config_active()
4620 pchr = chr_config_do_active( pchr ); in chr_config_active()
4622 return pchr; in chr_config_active()
4626 chr_t * chr_config_deinit( chr_t * pchr ) in chr_config_deinit() argument
4632 if ( NULL == pchr ) return NULL; in chr_config_deinit()
4634 pbase = POBJ_GET_PBASE( pchr ); in chr_config_deinit()
4635 if ( !STATE_DEINITIALIZING_PBASE( pbase ) ) return pchr; in chr_config_deinit()
4637 POBJ_END_SPAWN( pchr ); in chr_config_deinit()
4642 return pchr; in chr_config_deinit()
4646 chr_t * chr_config_dtor( chr_t * pchr ) in chr_config_dtor() argument
4652 if ( NULL == pchr ) return NULL; in chr_config_dtor()
4654 pbase = POBJ_GET_PBASE( pchr ); in chr_config_dtor()
4655 if ( !STATE_DESTRUCTING_PBASE( pbase ) ) return pchr; in chr_config_dtor()
4657 POBJ_END_SPAWN( pchr ); in chr_config_dtor()
4659 return chr_dtor( pchr ); in chr_config_dtor()
4671 chr_t * pchr; in spawn_one_character() local
4711 pchr = ChrList.lst + ichr; in spawn_one_character()
4713 POBJ_BEGIN_SPAWN( pchr ); in spawn_one_character()
4716 pchr->spawn_data.pos = pos; in spawn_one_character()
4717 pchr->spawn_data.profile = profile; in spawn_one_character()
4718 pchr->spawn_data.team = team; in spawn_one_character()
4719 pchr->spawn_data.skin = skin; in spawn_one_character()
4720 pchr->spawn_data.facing = facing; in spawn_one_character()
4721 strncpy( pchr->spawn_data.name, name, SDL_arraysize( pchr->spawn_data.name ) ); in spawn_one_character()
4722 pchr->spawn_data.override = override; in spawn_one_character()
4725 pchr = chr_config_activate( pchr, 100 ); in spawn_one_character()
4728 if ( NULL != pchr ) in spawn_one_character()
4730 POBJ_END_SPAWN( pchr ); in spawn_one_character()
4751 chr_t * pchr; in respawn_character() local
4755 pchr = ChrList.lst + character; in respawn_character()
4762 spawn_poof( character, pchr->profile_ref ); in respawn_character()
4765 pchr->alive = btrue; in respawn_character()
4766 pchr->bore_timer = BORETIME; in respawn_character()
4767 pchr->careful_timer = CAREFULTIME; in respawn_character()
4768 pchr->life = pchr->lifemax; in respawn_character()
4769 pchr->mana = pchr->manamax; in respawn_character()
4770 chr_set_pos( pchr, pchr->pos_stt.v ); in respawn_character()
4771 pchr->vel.x = 0; in respawn_character()
4772 pchr->vel.y = 0; in respawn_character()
4773 pchr->vel.z = 0; in respawn_character()
4774 pchr->team = pchr->baseteam; in respawn_character()
4775 pchr->canbecrushed = bfalse; in respawn_character()
4776 pchr->ori.map_facing_y = MAP_TURN_OFFSET; // These two mean on level surface in respawn_character()
4777 pchr->ori.map_facing_x = MAP_TURN_OFFSET; in respawn_character()
4778 … if ( NOLEADER == TeamStack.lst[pchr->team].leader ) TeamStack.lst[pchr->team].leader = character; in respawn_character()
4779 if ( !pchr->invictus ) TeamStack.lst[pchr->baseteam].morale++; in respawn_character()
4782 chr_start_anim( pchr, ACTION_DA, btrue, btrue ); in respawn_character()
4786 float old_fat = pchr->fat; in respawn_character()
4787 chr_init_size( pchr, pcap ); in respawn_character()
4788 chr_set_fat( pchr, old_fat ); in respawn_character()
4791 pchr->platform = pcap->platform; in respawn_character()
4792 pchr->canuseplatforms = pcap->canuseplatforms; in respawn_character()
4793 pchr->flyheight = pcap->flyheight; in respawn_character()
4794 pchr->phys.bumpdampen = pcap->bumpdampen; in respawn_character()
4796 pchr->ai.alert = ALERTIF_CLEANEDUP; in respawn_character()
4797 pchr->ai.target = character; in respawn_character()
4798 pchr->ai.timer = 0; in respawn_character()
4800 pchr->grog_timer = 0; in respawn_character()
4801 pchr->daze_timer = 0; in respawn_character()
4804 PACK_BEGIN_LOOP( ipacked, pchr->pack.next ) in respawn_character()
4815 chr_instance_spawn( &( pchr->inst ), pchr->profile_ref, pchr->skin ); in respawn_character()
4816 chr_update_matrix( pchr, btrue ); in respawn_character()
4819 chr_update_hide( pchr ); in respawn_character()
4821 if ( !pchr->is_hidden ) in respawn_character()
4827 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, btrue ); in respawn_character()
4833 chr_t * pchr; in chr_change_skin() local
4840 pchr = ChrList.lst + character; in chr_change_skin()
4841 pinst = &( pchr->inst ); in chr_change_skin()
4845 pmad = pro_get_pmad( pchr->profile_ref ); in chr_change_skin()
4853 chr_update_collision_size( pchr, btrue ); in chr_change_skin()
4861 pchr->skin = 0; in chr_change_skin()
4887 pchr->skin = skin; in chr_change_skin()
4898 return pchr->skin; in chr_change_skin()
4911 chr_t * pchr; in change_armor() local
4914 pchr = ChrList.lst + character; in change_armor()
4917 cleanup_character_enchants( pchr ); in change_armor()
4920 ienc_now = pchr->firstenchant; in change_armor()
4945 pchr->defense = pcap->defense[skin]; in change_armor()
4949 pchr->damage_modifier[iTmp] = pcap->damage_modifier[iTmp][skin]; in change_armor()
4953 chr_set_maxaccel( pchr, pcap->maxaccel[skin] ); in change_armor()
4956 cleanup_character_enchants( pchr ); in change_armor()
4961 ienc_now = pchr->firstenchant; in change_armor()
5093 chr_t * pchr; in change_character() local
5102 pchr = ChrList.lst + ichr; in change_character()
5113 item_ref = pchr->holdingwhich[SLOT_LEFT]; in change_character()
5119 if ( pchr->ismount ) in change_character()
5133 item_ref = pchr->holdingwhich[SLOT_RIGHT]; in change_character()
5139 if ( pchr->ismount ) in change_character()
5156 cleanup_character_enchants( pchr ); in change_character()
5162 if ( MAX_ENC != pchr->firstenchant ) in change_character()
5167 ienc_now = EncList.lst[pchr->firstenchant].nextenchant_ref; in change_character()
5188 pchr->profile_ref = profile_new; in change_character()
5189 pchr->stoppedby = pcap_new->stoppedby; in change_character()
5190 pchr->life_heal = pcap_new->life_heal; in change_character()
5191 pchr->manacost = pcap_new->manacost; in change_character()
5194 pchr->ammomax = pcap_new->ammomax; in change_character()
5195 pchr->ammo = pcap_new->ammo; in change_character()
5200 pchr->gender = pcap_new->gender; in change_character()
5206 pchr->sound_index[tnc] = pcap_new->sound_index[tnc]; in change_character()
5210 chr_set_ai_state( pchr, 0 ); in change_character()
5211 pchr->ai.type = pobj_new->iai; in change_character()
5212 pchr->ai.timer = 0; in change_character()
5213 pchr->turnmode = TURNMODE_VELOCITY; in change_character()
5215 latch_init( &( pchr->latch ) ); in change_character()
5218 pchr->stickybutt = pcap_new->stickybutt; in change_character()
5219 pchr->openstuff = pcap_new->canopenstuff; in change_character()
5220 pchr->transferblend = pcap_new->transferblend; in change_character()
5221 pchr->platform = pcap_new->platform; in change_character()
5222 pchr->canuseplatforms = pcap_new->canuseplatforms; in change_character()
5223 pchr->isitem = pcap_new->isitem; in change_character()
5224 pchr->invictus = pcap_new->invictus; in change_character()
5225 pchr->ismount = pcap_new->ismount; in change_character()
5226 pchr->cangrabmoney = pcap_new->cangrabmoney; in change_character()
5227 pchr->jump_timer = JUMPDELAY; in change_character()
5228 pchr->alpha_base = pcap_new->alpha; in change_character()
5229 pchr->light_base = pcap_new->light; in change_character()
5232 idsz_map_copy( pcap_new->skills, SDL_arraysize( pcap_new->skills ), pchr->skills ); in change_character()
5233 pchr->darkvision_level = chr_get_skill( pchr, MAKE_IDSZ( 'D', 'A', 'R', 'K' ) ); in change_character()
5234 pchr->see_invisible_level = pcap_new->see_invisible_level; in change_character()
5246 float old_fat = pchr->fat; in change_character()
5249 if ( 0.0f == pchr->bump.size ) in change_character()
5255 new_fat = ( pcap_new->bump_size * pcap_new->size ) / pchr->bump.size; in change_character()
5259 if ( pchr->profile_ref == SPELLBOOK ) new_fat = old_fat = 1.00f; in change_character()
5262 chr_init_size( pchr, pcap_new ); in change_character()
5267 chr_set_fat( pchr, new_fat ); in change_character()
5268 pchr->fat_goto = old_fat; in change_character()
5269 pchr->fat_goto_time = SIZETIME; in change_character()
5273 chr_set_fat( pchr, old_fat ); in change_character()
5274 pchr->fat_goto = old_fat; in change_character()
5275 pchr->fat_goto_time = 0; in change_character()
5280 pchr->phys.bumpdampen = pcap_new->bumpdampen; in change_character()
5284 pchr->phys.weight = CHR_INFINITE_WEIGHT; in change_character()
5288 Uint32 itmp = pcap_new->weight * pchr->fat * pchr->fat * pchr->fat; in change_character()
5289 pchr->phys.weight = MIN( itmp, CHR_MAX_WEIGHT ); in change_character()
5293 pchr->uoffvel = pcap_new->uoffvel; in change_character()
5294 pchr->voffvel = pcap_new->voffvel; in change_character()
5297 pchr->anim_speed_sneak = pcap_new->anim_speed_sneak; in change_character()
5298 pchr->anim_speed_walk = pcap_new->anim_speed_walk; in change_character()
5299 pchr->anim_speed_run = pcap_new->anim_speed_run; in change_character()
5302 chr_instance_spawn( &( pchr->inst ), profile_new, skin ); in change_character()
5303 chr_update_matrix( pchr, btrue ); in change_character()
5306 chr_instance_set_action_ready( &( pchr->inst ), bfalse ); in change_character()
5307 chr_instance_set_action_keep( &( pchr->inst ), bfalse ); in change_character()
5308 chr_instance_set_action_loop( &( pchr->inst ), bfalse ); in change_character()
5309 if ( pchr->alive ) in change_character()
5311 chr_play_action( pchr, ACTION_DA, bfalse ); in change_character()
5315 chr_play_action( pchr, ACTION_KA + generate_randmask( 0, 3 ), bfalse ); in change_character()
5316 chr_instance_set_action_keep( &( pchr->inst ), btrue ); in change_character()
5323 if ( INGAME_CHR( pchr->attachedto ) ) in change_character()
5325 set_weapongrip( ichr, pchr->attachedto, slot_to_grip_offset( pchr->inwhich_slot ) ); in change_character()
5328 item = pchr->holdingwhich[SLOT_LEFT]; in change_character()
5335 item = pchr->holdingwhich[SLOT_RIGHT]; in change_character()
5343 chr_update_hide( pchr ); in change_character()
5346 pchr->reaffirm_damagetype = pcap_new->attachedprt_reaffirm_damagetype; in change_character()
5350 ai_state_set_changed( &( pchr->ai ) ); in change_character()
5352 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, btrue ); in change_character()
5365 chr_t * pchr; in cost_mana() local
5368 pchr = ChrList.lst + character; in cost_mana()
5371 mana_final = pchr->mana - amount; in cost_mana()
5377 pchr->mana = 0; in cost_mana()
5379 if ( pchr->canchannel ) in cost_mana()
5381 pchr->life -= mana_debt; in cost_mana()
5383 if ( pchr->life <= 0 && cfg.difficulty >= GAME_HARD ) in cost_mana()
5395 pchr->mana = mana_final; in cost_mana()
5397 if ( mana_final > pchr->manamax ) in cost_mana()
5399 mana_surplus = mana_final - pchr->manamax; in cost_mana()
5400 pchr->mana = pchr->manamax; in cost_mana()
5404 if ( pchr->canchannel && mana_surplus > 0 ) in cost_mana()
5407 heal_character( GET_REF_PCHR( pchr ), killer, mana_surplus << 1, btrue ); in cost_mana()
5421 chr_t *pchr; in switch_team() local
5424 pchr = ChrList.lst + character; in switch_team()
5427 if ( !pchr->invictus ) in switch_team()
5446 pchr->baseteam = team; in switch_team()
5447 pchr->team = team; in switch_team()
5450 if ( INGAME_CHR( pchr->attachedto ) ) in switch_team()
5452 chr_t *pmount = ChrList.lst + pchr->attachedto; in switch_team()
5456 if ( INGAME_CHR( pchr->attachedto ) ) in switch_team()
5458 chr_t *pmount = ChrList.lst + pchr->attachedto; in switch_team()
5463 if ( INGAME_CHR( pchr->holdingwhich[SLOT_LEFT] ) ) in switch_team()
5465 ChrList.lst[pchr->holdingwhich[SLOT_LEFT]].team = team; in switch_team()
5467 if ( INGAME_CHR( pchr->holdingwhich[SLOT_RIGHT] ) ) in switch_team()
5469 ChrList.lst[pchr->holdingwhich[SLOT_RIGHT]].team = team; in switch_team()
5472 if ( INGAME_CHR( pchr->holdingwhich[SLOT_LEFT] ) ) in switch_team()
5474 ChrList.lst[pchr->holdingwhich[SLOT_LEFT]].team = team; in switch_team()
5476 if ( INGAME_CHR( pchr->holdingwhich[SLOT_RIGHT] ) ) in switch_team()
5478 ChrList.lst[pchr->holdingwhich[SLOT_RIGHT]].team = team; in switch_team()
5499 CHR_BEGIN_LOOP_ACTIVE( cnt, pchr ) in issue_clean()
5503 if ( !pchr->alive ) in issue_clean()
5505 pchr->ai.timer = update_wld + 2; // Don't let it think too much... in issue_clean()
5508 SET_BIT( pchr->ai.alert, ALERTIF_CLEANEDUP ); in issue_clean()
5522 chr_t * pchr; in restock_ammo() local
5525 pchr = ChrList.lst + character; in restock_ammo()
5541 int chr_get_skill( chr_t *pchr, IDSZ whichskill ) in chr_get_skill() argument
5547 if ( !ACTIVE_PCHR( pchr ) ) return bfalse; in chr_get_skill()
5555 …if ( NULL != idsz_map_get( pchr->skills, SDL_arraysize( pchr->skills ), MAKE_IDSZ( 'C', 'O', 'D', … in chr_get_skill()
5563 if ( chr_get_idsz( pchr->ai.index, IDSZ_SKILL ) == whichskill ) in chr_get_skill()
5569 pskill = idsz_map_get( pchr->skills, SDL_arraysize( pchr->skills ), whichskill ); in chr_get_skill()
5578 …pskill = idsz_map_get( pchr->skills, SDL_arraysize( pchr->skills ), MAKE_IDSZ( 'C', 'K', 'U', 'R' … in chr_get_skill()
5579 if ( pskill != NULL && pchr->see_invisible_level > 0 ) in chr_get_skill()
5581 return pchr->see_invisible_level + pskill->level; in chr_get_skill()
5603 chr_t * pchr; in update_chr_darkvision() local
5606 pchr = ChrList.lst + character; in update_chr_darkvision()
5609 cleanup_character_enchants( pchr ); in update_chr_darkvision()
5613 ienc_now = pchr->firstenchant; in update_chr_darkvision()
5624 …if ( EncList.lst[ienc_now].owner_ref == pchr->ai.index ) life_regen += EncList.lst[ienc_now].owner… in update_chr_darkvision()
5634 …int tmp_level = ( 10 * -life_regen ) / pchr->lifemax; //Darkvision gained b… in update_chr_darkvision()
5635 … int base_level = chr_get_skill( pchr, MAKE_IDSZ( 'D', 'A', 'R', 'K' ) ); //Natural darkvision in update_chr_darkvision()
5638 pchr->darkvision_level = MAX( base_level, tmp_level ); in update_chr_darkvision()
5667 void move_one_character_get_environment( chr_t * pchr ) in move_one_character_get_environment() argument
5675 if ( !ACTIVE_PCHR( pchr ) ) return; in move_one_character_get_environment()
5676 penviro = &( pchr->enviro ); in move_one_character_get_environment()
5680 if ( INGAME_CHR( pchr->onwhichplatform_ref ) ) in move_one_character_get_environment()
5682 pplatform = ChrList.lst + pchr->onwhichplatform_ref; in move_one_character_get_environment()
5686 grid_level = get_mesh_level( PMesh, pchr->pos.x, pchr->pos.y, bfalse ); in move_one_character_get_environment()
5687 water_level = get_mesh_level( PMesh, pchr->pos.x, pchr->pos.y, btrue ); in move_one_character_get_environment()
5690 chr_set_enviro_grid_level( pchr, grid_level ); in move_one_character_get_environment()
5692 penviro->grid_lerp = ( pchr->pos.z - grid_level ) / PLATTOLERANCE; in move_one_character_get_environment()
5696 penviro->water_lerp = ( pchr->pos.z - water_level ) / PLATTOLERANCE; in move_one_character_get_environment()
5706 penviro->floor_level = pchr->waterwalk ? water_level : grid_level; in move_one_character_get_environment()
5719 if ( 0 != mesh_test_fx( PMesh, pchr->onwhichgrid, MPDFX_WATER ) ) in move_one_character_get_environment()
5730 penviro->zlerp = ( pchr->pos.z - penviro->level ) / PLATTOLERANCE; in move_one_character_get_environment()
5733 penviro->grounded = ( 0 == pchr->flyheight ) && ( penviro->zlerp < 0.25f ); in move_one_character_get_environment()
5737 if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) in move_one_character_get_environment()
5739 penviro->grid_twist = PMesh->gmem.grid_list[pchr->onwhichgrid].twist; in move_one_character_get_environment()
5744 …penviro->is_slippy = !penviro->is_watery && ( 0 != mesh_test_fx( PMesh, pchr->onwhichgrid, MPDFX_S… in move_one_character_get_environment()
5748 if ( 0 != pchr->flyheight ) in move_one_character_get_environment()
5771 else if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) ) in move_one_character_get_environment()
5795 if ( 0 != pchr->flyheight ) in move_one_character_get_environment()
5797 if ( pchr->platform ) in move_one_character_get_environment()
5808 if ( mesh_grid_is_valid( PMesh, pchr->onwhichgrid ) && penviro->is_slippy ) in move_one_character_get_environment()
5818 if ( 0 != pchr->flyheight ) in move_one_character_get_environment()
5821 pchr->jumpready = bfalse; in move_one_character_get_environment()
5826 pchr->jumpready = penviro->grounded; in move_one_character_get_environment()
5829 …if (( INGAME_CHR( pchr->attachedto ) || pchr->jumpready || pchr->jumpnumber > 0 ) && pchr->jump_ti… in move_one_character_get_environment()
5832 if ( penviro->grounded && pchr->vel.z < -STOPBOUNCING && pchr->hitready ) in move_one_character_get_environment()
5834 SET_BIT( pchr->ai.alert, ALERTIF_HITGROUND ); in move_one_character_get_environment()
5835 pchr->hitready = bfalse; in move_one_character_get_environment()
5844 if ( penviro->grounded && 0 == pchr->jump_timer ) in move_one_character_get_environment()
5846 pchr->jumpnumber = pchr->jumpnumberreset; in move_one_character_get_environment()
5850 else if ( penviro->grounded && 0 == pchr->jump_timer ) in move_one_character_get_environment()
5853 pchr->jumpnumber = pchr->jumpnumberreset; in move_one_character_get_environment()
5870 void move_one_character_do_floor_friction( chr_t * pchr ) in move_one_character_do_floor_friction() argument
5878 if ( !ACTIVE_PCHR( pchr ) ) return; in move_one_character_do_floor_friction()
5879 penviro = &( pchr->enviro ); in move_one_character_do_floor_friction()
5881 if ( 0 != pchr->flyheight ) return; in move_one_character_do_floor_friction()
5889 if ( INGAME_CHR( pchr->onwhichplatform_ref ) ) in move_one_character_do_floor_friction()
5891 chr_t * pplat = ChrList.lst + pchr->onwhichplatform_ref; in move_one_character_do_floor_friction()
5897 else if ( !pchr->alive || pchr->isitem ) in move_one_character_do_floor_friction()
5917 floor_acc = fvec3_sub( penviro->floor_speed.v, pchr->vel.v ); in move_one_character_do_floor_friction()
5927 mat_getChrForward( pchr->inst.matrix.v, vfront.v ); in move_one_character_do_floor_friction()
5974 fvec3_self_sum( pchr->vel.v, fric_floor.v ); in move_one_character_do_floor_friction()
5977 pchr->vel.x += -pchr->vel.x * ( 1.0f - penviro->fluid_friction_hrz ); in move_one_character_do_floor_friction()
5978 pchr->vel.y += -pchr->vel.y * ( 1.0f - penviro->fluid_friction_hrz ); in move_one_character_do_floor_friction()
5979 pchr->vel.z += -pchr->vel.z * ( 1.0f - penviro->fluid_friction_vrt ); in move_one_character_do_floor_friction()
5983 void move_one_character_do_voluntary( chr_t * pchr ) in move_one_character_do_voluntary() argument
5994 if ( !ACTIVE_PCHR( pchr ) ) return; in move_one_character_do_voluntary()
5996 ichr = GET_REF_PCHR( pchr ); in move_one_character_do_voluntary()
5998 if ( !pchr->alive ) return; in move_one_character_do_voluntary()
6000 fvec2_base_copy( pchr->enviro.new_v.v, pchr->vel.v ); in move_one_character_do_voluntary()
6002 if ( INGAME_CHR( pchr->attachedto ) ) return; in move_one_character_do_voluntary()
6008 dvx = pchr->latch.x; in move_one_character_do_voluntary()
6009 dvy = pchr->latch.y; in move_one_character_do_voluntary()
6012 if ( pchr->daze_timer > 0 ) in move_one_character_do_voluntary()
6019 if ( pchr->grog_timer > 0 ) in move_one_character_do_voluntary()
6025 maxspeed = pchr->maxaccel * airfriction / ( 1.0f - airfriction ); in move_one_character_do_voluntary()
6028 if ( VALID_PLA( pchr->is_which_player ) ) in move_one_character_do_voluntary()
6031 player_t * ppla = PlaStack.lst + pchr->is_which_player; in move_one_character_do_voluntary()
6040 pchr->enviro.new_v.x = pchr->enviro.new_v.y = 0.0f; in move_one_character_do_voluntary()
6043 PLA_REF ipla = pchr->is_which_player; in move_one_character_do_voluntary()
6062 pchr->enviro.new_v.x = maxspeed * dvx / dv; in move_one_character_do_voluntary()
6063 pchr->enviro.new_v.y = maxspeed * dvy / dv; in move_one_character_do_voluntary()
6076 pchr->enviro.new_v.x = dvx * maxspeed * scale; in move_one_character_do_voluntary()
6077 pchr->enviro.new_v.y = dvy * maxspeed * scale; in move_one_character_do_voluntary()
6084 pchr->maxaccel = pchr->maxaccel_reset * 0.33f; in move_one_character_do_voluntary()
6085 pchr->movement_bits = CHR_MOVEMENT_BITS_SNEAK | CHR_MOVEMENT_BITS_STOP; in move_one_character_do_voluntary()
6090 pchr->movement_bits = ( unsigned )( ~CHR_MOVEMENT_BITS_SNEAK ); in move_one_character_do_voluntary()
6091 pchr->maxaccel = pchr->maxaccel_reset; in move_one_character_do_voluntary()
6095 if ( INGAME_CHR( pchr->onwhichplatform_ref ) ) in move_one_character_do_voluntary()
6097 chr_t * pplat = ChrList.lst + pchr->onwhichplatform_ref; in move_one_character_do_voluntary()
6099 new_ax += ( pplat->vel.x + pchr->enviro.new_v.x - pchr->vel.x ); in move_one_character_do_voluntary()
6100 new_ay += ( pplat->vel.y + pchr->enviro.new_v.y - pchr->vel.y ); in move_one_character_do_voluntary()
6104 new_ax += ( pchr->enviro.new_v.x - pchr->vel.x ); in move_one_character_do_voluntary()
6105 new_ay += ( pchr->enviro.new_v.y - pchr->vel.y ); in move_one_character_do_voluntary()
6108 new_ax *= pchr->enviro.traction; in move_one_character_do_voluntary()
6109 new_ay *= pchr->enviro.traction; in move_one_character_do_voluntary()
6111 new_ax = CLIP( new_ax, -pchr->maxaccel, pchr->maxaccel ); in move_one_character_do_voluntary()
6112 new_ay = CLIP( new_ay, -pchr->maxaccel, pchr->maxaccel ); in move_one_character_do_voluntary()
6115 if ( 0 != pchr->maxaccel ) in move_one_character_do_voluntary()
6116 switch ( pchr->turnmode ) in move_one_character_do_voluntary()
6124 if ( VALID_PLA( pchr->is_which_player ) ) in move_one_character_do_voluntary()
6127pchr->ori.facing_z += terp_dir( pchr->ori.facing_z, vec_to_facing( dvx , dvy ), 2 ); in move_one_character_do_voluntary()
6132pchr->ori.facing_z += terp_dir( pchr->ori.facing_z, vec_to_facing( dvx , dvy ), 8 ); in move_one_character_do_voluntary()
6143pchr->ori.facing_z += terp_dir( pchr->ori.facing_z, vec_to_facing( dvx , dvy ), 8 ); in move_one_character_do_voluntary()
6151 if ( ichr != pchr->ai.target ) in move_one_character_do_voluntary()
6153pchr->ori.facing_z += terp_dir( pchr->ori.facing_z, vec_to_facing( ChrList.lst[pchr->ai.target].po… in move_one_character_do_voluntary()
6161 pchr->ori.facing_z += SPINRATE; in move_one_character_do_voluntary()
6167 if ( chr_get_framefx( pchr ) & MADFX_STOP ) in move_one_character_do_voluntary()
6174 pchr->vel.x += new_ax; in move_one_character_do_voluntary()
6175 pchr->vel.y += new_ay; in move_one_character_do_voluntary()
6180 bool_t chr_do_latch_attack( chr_t * pchr, slot_t which_slot ) in chr_do_latch_attack() argument
6192 if ( !ACTIVE_PCHR( pchr ) ) return bfalse; in chr_do_latch_attack()
6193 ichr = GET_REF_PCHR( pchr ); in chr_do_latch_attack()
6200 iweapon = pchr->holdingwhich[which_slot]; in chr_do_latch_attack()
6233 if ( !chr_get_skill( pchr, chr_get_idsz( iweapon, IDSZ_SKILL ) ) ) in chr_do_latch_attack()
6244 test_weapon = pchr->holdingwhich[which_slot == SLOT_LEFT ? SLOT_RIGHT : SLOT_LEFT]; in chr_do_latch_attack()
6257 if ( pchr->StatusList_on || cfg.dev_mode ) in chr_do_latch_attack()
6260 …debug_printf( "%s can't use this item...", chr_get_name( GET_REF_PCHR( pchr ), CHRNAME_ARTICLE | C… in chr_do_latch_attack()
6278 CHR_REF mount = pchr->attachedto; in chr_do_latch_attack()
6298 pchr->ai.lastitemused = mount; in chr_do_latch_attack()
6310 if ( pchr->inst.action_ready && action_valid ) in chr_do_latch_attack()
6320 pchr->life += pweapon->life_heal; in chr_do_latch_attack()
6321 if ( pchr->life > pchr->lifemax ) pchr->life = pchr->lifemax; in chr_do_latch_attack()
6335 chr_play_action( pchr, action, btrue ); in chr_do_latch_attack()
6339 float chr_dex = FP8_TO_INT( pchr->dexterity ); in chr_do_latch_attack()
6341 chr_play_action( pchr, action, bfalse ); in chr_do_latch_attack()
6357 pchr->inst.rate = 0.25f; //base attack speed in chr_do_latch_attack()
6358pchr->inst.rate += chr_dex / 20; //+0.25f for every 5 dexterity in chr_do_latch_attack()
6381 pchr->ai.lastitemused = iweapon; in chr_do_latch_attack()
6395 pchr->bore_timer = BORETIME; in chr_do_latch_attack()
6402 bool_t chr_do_latch_button( chr_t * pchr ) in chr_do_latch_button() argument
6412 if ( !ACTIVE_PCHR( pchr ) ) return bfalse; in chr_do_latch_button()
6413 ichr = GET_REF_PCHR( pchr ); in chr_do_latch_button()
6415 pai = &( pchr->ai ); in chr_do_latch_button()
6417 if ( !pchr->alive || 0 == pchr->latch.b ) return btrue; in chr_do_latch_button()
6419 if ( HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_JUMP ) && 0 == pchr->jump_timer ) in chr_do_latch_button()
6425 if ( INGAME_CHR( pchr->attachedto ) ) in chr_do_latch_button()
6432 pchr->jump_timer = JUMPDELAY; in chr_do_latch_button()
6433 if ( 0 != pchr->flyheight ) in chr_do_latch_button()
6435 pchr->vel.z += DISMOUNTZVELFLY; in chr_do_latch_button()
6439 pchr->vel.z += DISMOUNTZVEL; in chr_do_latch_button()
6442 tmp_pos = chr_get_pos( pchr ); in chr_do_latch_button()
6443 tmp_pos.z += pchr->vel.z; in chr_do_latch_button()
6444 chr_set_pos( pchr, tmp_pos.v ); in chr_do_latch_button()
6446 if ( pchr->jumpnumberreset != JUMPINFINITE && 0 != pchr->jumpnumber ) in chr_do_latch_button()
6447 pchr->jumpnumber--; in chr_do_latch_button()
6450 pcap = pro_get_pcap( pchr->profile_ref ); in chr_do_latch_button()
6453 ijump = pro_get_pcap( pchr->profile_ref )->sound_index[SOUND_JUMP]; in chr_do_latch_button()
6456 sound_play_chunk( pchr->pos, chr_get_chunk_ptr( pchr, ijump ) ); in chr_do_latch_button()
6463 else if ( 0 != pchr->jumpnumber && 0 == pchr->flyheight ) in chr_do_latch_button()
6465 if ( 1 != pchr->jumpnumberreset || pchr->jumpready ) in chr_do_latch_button()
6469 pchr->hitready = btrue; in chr_do_latch_button()
6470 if ( pchr->enviro.inwater || pchr->enviro.is_slippy ) in chr_do_latch_button()
6472 pchr->jump_timer = JUMPDELAY * 4; //To prevent 'bunny jumping' in water in chr_do_latch_button()
6473 pchr->vel.z += WATERJUMP; in chr_do_latch_button()
6477 pchr->jump_timer = JUMPDELAY; in chr_do_latch_button()
6478 pchr->vel.z += pchr->jump_power * 1.5f; in chr_do_latch_button()
6481 pchr->jumpready = bfalse; in chr_do_latch_button()
6482 if ( pchr->jumpnumberreset != JUMPINFINITE ) pchr->jumpnumber--; in chr_do_latch_button()
6485 if ( pchr->inst.action_ready ) in chr_do_latch_button()
6487 chr_play_action( pchr, ACTION_JA, btrue ); in chr_do_latch_button()
6491 pcap = pro_get_pcap( pchr->profile_ref ); in chr_do_latch_button()
6497 sound_play_chunk( pchr->pos, chr_get_chunk_ptr( pchr, ijump ) ); in chr_do_latch_button()
6504 …if ( HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_ALTLEFT ) && pchr->inst.action_ready && 0 == pchr->… in chr_do_latch_button()
6508 pchr->reload_timer = GRABDELAY; in chr_do_latch_button()
6509 if ( !INGAME_CHR( pchr->holdingwhich[SLOT_LEFT] ) ) in chr_do_latch_button()
6512 chr_play_action( pchr, ACTION_ME, bfalse ); in chr_do_latch_button()
6517 chr_play_action( pchr, ACTION_MA, bfalse ); in chr_do_latch_button()
6520 …if ( HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_ALTRIGHT ) && pchr->inst.action_ready && 0 == pchr-… in chr_do_latch_button()
6524 pchr->reload_timer = GRABDELAY; in chr_do_latch_button()
6525 if ( !INGAME_CHR( pchr->holdingwhich[SLOT_RIGHT] ) ) in chr_do_latch_button()
6528 chr_play_action( pchr, ACTION_MF, bfalse ); in chr_do_latch_button()
6533 chr_play_action( pchr, ACTION_MB, bfalse ); in chr_do_latch_button()
6536 …if ( HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_PACKLEFT ) && pchr->inst.action_ready && 0 == pchr-… in chr_do_latch_button()
6540 pchr->reload_timer = PACKDELAY; in chr_do_latch_button()
6541 item = pchr->holdingwhich[SLOT_LEFT]; in chr_do_latch_button()
6551 if ( VALID_PLA( pchr->is_which_player ) ) in chr_do_latch_button()
6576 chr_play_action( pchr, ACTION_MG, bfalse ); in chr_do_latch_button()
6578 …if ( HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_PACKRIGHT ) && pchr->inst.action_ready && 0 == pchr in chr_do_latch_button()
6582 pchr->reload_timer = PACKDELAY; in chr_do_latch_button()
6583 item = pchr->holdingwhich[SLOT_RIGHT]; in chr_do_latch_button()
6593 if ( VALID_PLA( pchr->is_which_player ) ) in chr_do_latch_button()
6618 chr_play_action( pchr, ACTION_MG, bfalse ); in chr_do_latch_button()
6623 …if ( !attack_handled && HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_LEFT ) && 0 == pchr->reload_time… in chr_do_latch_button()
6626 attack_handled = chr_do_latch_attack( pchr, SLOT_LEFT ); in chr_do_latch_button()
6628 …if ( !attack_handled && HAS_SOME_BITS( pchr->latch.b, LATCHBUTTON_RIGHT ) && 0 == pchr->reload_tim… in chr_do_latch_button()
6632 attack_handled = chr_do_latch_attack( pchr, SLOT_RIGHT ); in chr_do_latch_button()
6639 void move_one_character_do_z_motion( chr_t * pchr ) in move_one_character_do_z_motion() argument
6641 if ( !ACTIVE_PCHR( pchr ) ) return; in move_one_character_do_z_motion()
6644 if ( 0 != pchr->flyheight ) in move_one_character_do_z_motion()
6646 pchr->vel.z += ( pchr->enviro.fly_level + pchr->flyheight - pchr->pos.z ) * FLYDAMPEN; in move_one_character_do_z_motion()
6649 pchr->enviro.is_slippy && ( pchr->enviro.grid_twist != TWIST_FLAT ) && in move_one_character_do_z_motion()
6650 …( CHR_INFINITE_WEIGHT != pchr->phys.weight ) && ( pchr->enviro.grid_lerp <= pchr->enviro.zlerp ) ) in move_one_character_do_z_motion()
6658 float loc_zlerp = pchr->enviro.grid_lerp; in move_one_character_do_z_motion()
6660 gpara.x = map_twistvel_x[pchr->enviro.grid_twist]; in move_one_character_do_z_motion()
6661 gpara.y = map_twistvel_y[pchr->enviro.grid_twist]; in move_one_character_do_z_motion()
6662 gpara.z = map_twistvel_z[pchr->enviro.grid_twist]; in move_one_character_do_z_motion()
6668 pchr->vel.x += gpara.x * ( 1.0f - loc_zlerp ) + gperp.x * loc_zlerp; in move_one_character_do_z_motion()
6669 pchr->vel.y += gpara.y * ( 1.0f - loc_zlerp ) + gperp.y * loc_zlerp; in move_one_character_do_z_motion()
6670 pchr->vel.z += gpara.z * ( 1.0f - loc_zlerp ) + gperp.z * loc_zlerp; in move_one_character_do_z_motion()
6674 pchr->vel.z += pchr->enviro.zlerp * gravity; in move_one_character_do_z_motion()
6679 bool_t chr_update_safe_raw( chr_t * pchr ) in chr_update_safe_raw() argument
6686 if ( !ALLOCATED_PCHR( pchr ) ) return bfalse; in chr_update_safe_raw()
6688 hit_a_wall = chr_hit_wall( pchr, NULL, NULL, &pressure, NULL ); in chr_update_safe_raw()
6691 pchr->safe_valid = btrue; in chr_update_safe_raw()
6692 pchr->safe_pos = chr_get_pos( pchr ); in chr_update_safe_raw()
6693 pchr->safe_time = update_wld; in chr_update_safe_raw()
6694 pchr->safe_grid = mesh_get_grid( PMesh, pchr->pos.x, pchr->pos.y ); in chr_update_safe_raw()
6703 bool_t chr_update_safe( chr_t * pchr, bool_t force ) in chr_update_safe() argument
6709 if ( !ALLOCATED_PCHR( pchr ) ) return bfalse; in chr_update_safe()
6711 if ( force || !pchr->safe_valid ) in chr_update_safe()
6717 new_grid = mesh_get_grid( PMesh, pchr->pos.x, pchr->pos.y ); in chr_update_safe()
6721 if ( ABS( pchr->pos.x - pchr->safe_pos.x ) > GRID_FSIZE || in chr_update_safe()
6722 ABS( pchr->pos.y - pchr->safe_pos.y ) > GRID_FSIZE ) in chr_update_safe()
6727 else if ( new_grid != pchr->safe_grid ) in chr_update_safe()
6735 retval = chr_update_safe_raw( pchr ); in chr_update_safe()
6742 bool_t chr_get_safe( chr_t * pchr, fvec3_base_t pos_v ) in chr_get_safe() argument
6747 if ( !ALLOCATED_PCHR( pchr ) ) return bfalse; in chr_get_safe()
6754 fvec3_base_copy( pos_v, chr_get_pos_v( pchr ) ); in chr_get_safe()
6761 if ( !found && pchr->safe_valid ) in chr_get_safe()
6763 if ( !chr_hit_wall( pchr, NULL, NULL, NULL, NULL ) ) in chr_get_safe()
6766 memmove( pos_v, pchr->safe_pos.v, sizeof( fvec3_base_t ) ); in chr_get_safe()
6774 bc = breadcrumb_list_last_valid( &( pchr->crumbs ) ); in chr_get_safe()
6786 …oh! We could not find a valid non-wall position for %s!\n", chr_get_pcap( pchr->ai.index )->name ); in chr_get_safe()
6793 bool_t chr_update_breadcrumb_raw( chr_t * pchr ) in chr_update_breadcrumb_raw() argument
6798 if ( !ALLOCATED_PCHR( pchr ) ) return bfalse; in chr_update_breadcrumb_raw()
6800 breadcrumb_init_chr( &bc, pchr ); in chr_update_breadcrumb_raw()
6804 retval = breadcrumb_list_add( &( pchr->crumbs ), &bc ); in chr_update_breadcrumb_raw()
6811 bool_t chr_update_breadcrumb( chr_t * pchr, bool_t force ) in chr_update_breadcrumb() argument
6818 if ( !ALLOCATED_PCHR( pchr ) ) return bfalse; in chr_update_breadcrumb()
6820 bc_ptr = breadcrumb_list_last_valid( &( pchr->crumbs ) ); in chr_update_breadcrumb()
6825 breadcrumb_init_chr( bc_ptr, pchr ); in chr_update_breadcrumb()
6834 new_grid = mesh_get_grid( PMesh, pchr->pos.x, pchr->pos.y ); in chr_update_breadcrumb()
6838 if ( ABS( pchr->pos.x - bc_ptr->pos.x ) > GRID_FSIZE || in chr_update_breadcrumb()
6839 ABS( pchr->pos.y - bc_ptr->pos.y ) > GRID_FSIZE ) in chr_update_breadcrumb()
6852 retval = chr_update_breadcrumb_raw( pchr ); in chr_update_breadcrumb()
6859 breadcrumb_t * chr_get_last_breadcrumb( chr_t * pchr ) in chr_get_last_breadcrumb() argument
6861 if ( !ALLOCATED_PCHR( pchr ) ) return NULL; in chr_get_last_breadcrumb()
6863 if ( 0 == pchr->crumbs.count ) return NULL; in chr_get_last_breadcrumb()
6865 return breadcrumb_list_last_valid( &( pchr->crumbs ) ); in chr_get_last_breadcrumb()
6869 bool_t move_one_character_integrate_motion_attached( chr_t * pchr ) in move_one_character_integrate_motion_attached() argument
6873 if ( !ACTIVE_PCHR( pchr ) ) return bfalse; in move_one_character_integrate_motion_attached()
6876 chr_update = pchr->obj_base.guid + update_wld; in move_one_character_integrate_motion_attached()
6880 chr_update_safe( pchr, btrue ); in move_one_character_integrate_motion_attached()
6887 bool_t move_one_character_integrate_motion( chr_t * pchr ) in move_one_character_integrate_motion() argument
6900 if ( !ACTIVE_PCHR( pchr ) ) return bfalse; in move_one_character_integrate_motion()
6902 if ( ACTIVE_CHR( pchr->attachedto ) ) in move_one_character_integrate_motion()
6904 return move_one_character_integrate_motion_attached( pchr ); in move_one_character_integrate_motion()
6907 tmp_pos = chr_get_pos( pchr ); in move_one_character_integrate_motion()
6909 pai = &( pchr->ai ); in move_one_character_integrate_motion()
6912 bumpdampen = CLIP( pchr->phys.bumpdampen, 0.0f, 1.0f ); in move_one_character_integrate_motion()
6919 float grid_level = pchr->enviro.grid_level + vert_offset; in move_one_character_integrate_motion()
6921 tmp_pos.z += pchr->vel.z; in move_one_character_integrate_motion()
6925 if ( ABS( pchr->vel.z ) < STOPBOUNCING ) in move_one_character_integrate_motion()
6927 pchr->vel.z = 0.0f; in move_one_character_integrate_motion()
6932 if ( pchr->vel.z < 0.0f ) in move_one_character_integrate_motion()
6936 pchr->vel.z *= -pchr->phys.bumpdampen; in move_one_character_integrate_motion()
6937 diff *= -pchr->phys.bumpdampen; in move_one_character_integrate_motion()
6950 if ( 0.0f != pchr->flyheight ) in move_one_character_integrate_motion()
6970 new_x = old_x + pchr->vel.x; LOG_NAN( new_x ); in move_one_character_integrate_motion()
6971 new_y = old_y + pchr->vel.y; LOG_NAN( new_y ); in move_one_character_integrate_motion()
6976 if ( EMPTY_BIT_FIELD == chr_test_wall( pchr, tmp_pos.v, &wdata ) ) in move_one_character_integrate_motion()
6986 chr_hit_wall( pchr, tmp_pos.v, nrm.v, &pressure, &wdata ); in move_one_character_integrate_motion()
7006 if ( !found_diff && pchr->safe_valid ) in move_one_character_integrate_motion()
7011 safe_pos = pchr->safe_pos; in move_one_character_integrate_motion()
7014 diff.x = pchr->safe_pos.x - pchr->pos.x; in move_one_character_integrate_motion()
7015 diff.y = pchr->safe_pos.y - pchr->pos.y; in move_one_character_integrate_motion()
7026 bc = chr_get_last_breadcrumb( pchr ); in move_one_character_integrate_motion()
7033 safe_pos = pchr->safe_pos; in move_one_character_integrate_motion()
7036 diff.x = bc->pos.x - pchr->pos.x; in move_one_character_integrate_motion()
7037 diff.y = bc->pos.y - pchr->pos.y; in move_one_character_integrate_motion()
7051 diff = chr_get_mesh_diff( pchr, tmp_pos.v, pressure ); in move_one_character_integrate_motion()
7066 diff.x = pchr->vel.x; in move_one_character_integrate_motion()
7067 diff.y = pchr->vel.y; in move_one_character_integrate_motion()
7091 bc = chr_get_last_breadcrumb( pchr ); in move_one_character_integrate_motion()
7096 safe_pos = pchr->safe_pos; in move_one_character_integrate_motion()
7104 safe_pos = pchr->pos_stt; in move_one_character_integrate_motion()
7148 pressure_old = chr_get_mesh_pressure( pchr, save_pos.v ); in move_one_character_integrate_motion()
7149 pressure_new = chr_get_mesh_pressure( pchr, tmp_pos.v ); in move_one_character_integrate_motion()
7162 dot = fvec2_dot_product( pchr->vel.v, nrm.v ); in move_one_character_integrate_motion()
7166 cap_t * pcap = chr_get_pcap( GET_REF_PCHR( pchr ) ); in move_one_character_integrate_motion()
7176 pchr->vel.x += - ( 1.0f + bumpdampen ) * v_perp.x * pressure; in move_one_character_integrate_motion()
7177 pchr->vel.y += - ( 1.0f + bumpdampen ) * v_perp.y * pressure; in move_one_character_integrate_motion()
7184 chr_set_pos( pchr, tmp_pos.v ); in move_one_character_integrate_motion()
7191 Uint32 chr_update = pchr->obj_base.guid + update_wld; in move_one_character_integrate_motion()
7198 chr_update_safe( pchr, needs_test ); in move_one_character_integrate_motion()
7205 bool_t chr_handle_madfx( chr_t * pchr ) in chr_handle_madfx() argument
7213 if ( NULL == pchr ) return bfalse; in chr_handle_madfx()
7215 framefx = chr_get_framefx( pchr ); in chr_handle_madfx()
7218 ichr = GET_REF_PCHR( pchr ); in chr_handle_madfx()
7253 detach_character_from_mount( pchr->holdingwhich[SLOT_LEFT], bfalse, btrue ); in chr_handle_madfx()
7258 detach_character_from_mount( pchr->holdingwhich[SLOT_RIGHT], bfalse, btrue ); in chr_handle_madfx()
7261 if ( HAS_SOME_BITS( framefx, MADFX_POOF ) && !VALID_PLA( pchr->is_which_player ) ) in chr_handle_madfx()
7263 pchr->ai.poof_time = update_wld; in chr_handle_madfx()
7269 cap_t * pcap = pro_get_pcap( pchr->profile_ref ); in chr_handle_madfx()
7275 sound_play_chunk( pchr->pos, chr_get_chunk_ptr( pchr, ifoot ) ); in chr_handle_madfx()
7324 float set_character_animation_rate( chr_t * pchr ) in set_character_animation_rate() argument
7348 if ( NULL == pchr ) return 1.0f; in set_character_animation_rate()
7349 pinst = &( pchr->inst ); in set_character_animation_rate()
7350 ichr = GET_REF_PCHR( pchr ); in set_character_animation_rate()
7357 if ( character_is_attacking( pchr ) ) return pinst->rate; in set_character_animation_rate()
7360 …if ( INGAME_CHR( pchr->attachedto ) && (( ACTION_MI == pinst->action_which ) || ( ACTION_MH == pin… in set_character_animation_rate()
7363 pinst->rate = ChrList.lst[pchr->attachedto].inst.rate; in set_character_animation_rate()
7386 if ( !pchr->enviro.grounded && 0 == pchr->flyheight ) return pinst->rate; in set_character_animation_rate()
7394 anim_info[CHR_MOVEMENT_SNEAK].speed = pchr->anim_speed_sneak; in set_character_animation_rate()
7395 anim_info[CHR_MOVEMENT_WALK ].speed = pchr->anim_speed_walk; in set_character_animation_rate()
7396 anim_info[CHR_MOVEMENT_RUN ].speed = pchr->anim_speed_run; in set_character_animation_rate()
7398 if ( 0 != pchr->flyheight ) in set_character_animation_rate()
7424 anim_info[cnt].allowed = HAS_SOME_BITS( pchr->movement_bits, 1 << cnt ); in set_character_animation_rate()
7433 if ( HAS_SOME_BITS( pchr->movement_bits, CHR_MOVEMENT_BITS_SNEAK ) ) in set_character_animation_rate()
7468 if ( 0 != pchr->flyheight ) in set_character_animation_rate()
7471 speed = ABS( pchr->vel.x ) + ABS( pchr->vel.y ) + ABS( pchr->vel.z ); in set_character_animation_rate()
7477 if ( pchr->enviro.is_slipping ) in set_character_animation_rate()
7481 speed = fvec2_length_abs( pchr->enviro.new_v.v ); in set_character_animation_rate()
7486 speed = fvec2_length_abs( pchr->enviro.new_v.v ); in set_character_animation_rate()
7490 if ( pchr->fat != 0.0f ) speed /= pchr->fat; in set_character_animation_rate()
7549 pframe_nxt = chr_instnce_get_frame_nxt( &( pchr->inst ) ); in set_character_animation_rate()
7556 pchr->bore_timer--; in set_character_animation_rate()
7557 if ( pchr->bore_timer < 0 ) in set_character_animation_rate()
7561 SET_BIT( pchr->ai.alert, ALERTIF_BORED ); in set_character_animation_rate()
7562 pchr->bore_timer = BORETIME; in set_character_animation_rate()
7567 chr_start_anim( pchr, tmp_action, btrue, btrue ); in set_character_animation_rate()
7578 chr_start_anim( pchr, tmp_action, btrue, btrue ); in set_character_animation_rate()
7589 …chr_set_anim( pchr, tmp_action, pmad->frameliptowalkframe[lip][pframe_nxt->framelip], btrue, btrue… in set_character_animation_rate()
7603 bool_t character_is_attacking( chr_t *pchr ) in character_is_attacking() argument
7605 return pchr->inst.action_which >= ACTION_UA && pchr->inst.action_which <= ACTION_FD; in character_is_attacking()
7609 void move_one_character_do_animation( chr_t * pchr ) in move_one_character_do_animation() argument
7619 if ( NULL == pchr ) return; in move_one_character_do_animation()
7620 ichr = GET_REF_PCHR( pchr ); in move_one_character_do_animation()
7621 pinst = &( pchr->inst ); in move_one_character_do_animation()
7636 chr_handle_madfx( pchr ); in move_one_character_do_animation()
7641 if ( rv_success != chr_increment_frame( pchr ) ) in move_one_character_do_animation()
7668 chr_handle_madfx( pchr ); in move_one_character_do_animation()
7673 if ( rv_success != chr_increment_frame( pchr ) ) in move_one_character_do_animation()
7687 set_character_animation_rate( pchr ); in move_one_character_do_animation()
7691 void move_one_character( chr_t * pchr ) in move_one_character() argument
7693 if ( !ACTIVE_PCHR( pchr ) ) return; in move_one_character()
7695 if ( pchr->pack.is_packed ) return; in move_one_character()
7698 pchr->enviro.vel = fvec3_sub( pchr->pos.v, pchr->pos_old.v ); in move_one_character()
7699 pchr->enviro.acc = fvec3_sub( pchr->vel.v, pchr->vel_old.v ); in move_one_character()
7702 pchr->pos_old = chr_get_pos( pchr ); in move_one_character()
7703 pchr->vel_old = pchr->vel; in move_one_character()
7704 pchr->ori_old.facing_z = pchr->ori.facing_z; in move_one_character()
7706 fvec2_base_copy( pchr->enviro.new_v.v, pchr->vel.v ); in move_one_character()
7708 move_one_character_get_environment( pchr ); in move_one_character()
7711 move_one_character_do_floor_friction( pchr ); in move_one_character()
7713 move_one_character_do_voluntary( pchr ); in move_one_character()
7715 chr_do_latch_button( pchr ); in move_one_character()
7717 move_one_character_do_z_motion( pchr ); in move_one_character()
7719 move_one_character_integrate_motion( pchr ); in move_one_character()
7721 move_one_character_do_animation( pchr ); in move_one_character()
7724 if ( pchr->stickybutt || !pchr->alive ) in move_one_character()
7726 float fkeep = ( 7 + pchr->enviro.zlerp ) / 8.0f; in move_one_character()
7727 float fnew = ( 1 - pchr->enviro.zlerp ) / 8.0f; in move_one_character()
7731pchr->ori.map_facing_x = pchr->ori.map_facing_x * fkeep + map_twist_x[pchr->enviro.grid_twist] * f… in move_one_character()
7732pchr->ori.map_facing_y = pchr->ori.map_facing_y * fkeep + map_twist_y[pchr->enviro.grid_twist] * f… in move_one_character()
7745 CHR_BEGIN_LOOP_ACTIVE( cnt, pchr ) in move_all_characters()
7748 pchr->enviro.air_friction = air_friction; in move_all_characters()
7749 pchr->enviro.ice_friction = ice_friction; in move_all_characters()
7751 move_one_character( pchr ); in move_all_characters()
7769 chr_t * pchr; in cleanup_all_characters() local
7773 pchr = ChrList.lst + cnt; in cleanup_all_characters()
7775 time_out = ( pchr->ai.poof_time >= 0 ) && ( pchr->ai.poof_time <= ( Sint32 )update_wld ); in cleanup_all_characters()
7776 if ( !WAITING_PBASE( POBJ_GET_PBASE( pchr ) ) && !time_out ) continue; in cleanup_all_characters()
7779 cleanup_one_character( pchr ); in cleanup_all_characters()
7810 chr_t * pchr; in is_invictus_direction() local
7817 pchr = ChrList.lst + character; in is_invictus_direction()
7826 if ( pchr->invictus ) return btrue; in is_invictus_direction()
7832 if ( HAS_SOME_BITS( chr_get_framefx( pchr ), MADFX_INVICTUS ) ) in is_invictus_direction()
7840 if ( ACTION_IS_TYPE( pchr->inst.action_which, P ) ) in is_invictus_direction()
7842 bool_t parry_left = ( pchr->inst.action_which < ACTION_PC ); in is_invictus_direction()
7848 cap_t * pcap_tmp = chr_get_pcap( pchr->holdingwhich[SLOT_LEFT] ); in is_invictus_direction()
7858 cap_t * pcap_tmp = chr_get_pcap( pchr->holdingwhich[SLOT_RIGHT] ); in is_invictus_direction()
7955 chr_t * pchr; in chr_add_billboard() local
7958 pchr = ChrList.lst + ichr; in chr_add_billboard()
7960 if ( INVALID_BILLBOARD != pchr->ibillboard ) in chr_add_billboard()
7962 BillboardList_free_one( REF_TO_INT( pchr->ibillboard ) ); in chr_add_billboard()
7963 pchr->ibillboard = INVALID_BILLBOARD; in chr_add_billboard()
7966 pchr->ibillboard = BillboardList_get_free( lifetime_secs ); in chr_add_billboard()
7969 if ( INVALID_BILLBOARD != pchr->ibillboard ) in chr_add_billboard()
7971 billboard_data_t * pbb = BillboardList.lst + pchr->ibillboard; in chr_add_billboard()
7976 return pchr->ibillboard; in chr_add_billboard()
7982 chr_t * pchr; in chr_make_text_billboard() local
7989 pchr = ChrList.lst + ichr; in chr_make_text_billboard()
7995 pbb = BillboardList_get_ptr( pchr->ibillboard ); in chr_make_text_billboard()
8002 pchr->ibillboard = INVALID_BILLBOARD; in chr_make_text_billboard()
8072 chr_t * pchr = ChrList.lst + ichr; in chr_get_name() local
8073 cap_t * pcap = pro_get_pcap( pchr->profile_ref ); in chr_get_name()
8075 if ( pchr->nameknown ) in chr_get_name()
8077 snprintf( szName, SDL_arraysize( szName ), "%s", pchr->Name ); in chr_get_name()
8131 chr_t * pchr; in chr_get_dir_name() local
8136 pchr = ChrList.lst + ichr; in chr_get_dir_name()
8138 if ( !LOADED_PRO( pchr->profile_ref ) ) in chr_get_dir_name()
8145 strncpy( buffer, pchr->obj_base._name, SDL_arraysize( buffer ) ); in chr_get_dir_name()
8155 pro_t * ppro = ProList.lst + pchr->profile_ref; in chr_get_dir_name()
8165 egoboo_rv chr_update_collision_size( chr_t * pchr, bool_t update_matrix ) in chr_update_collision_size() argument
8186 if ( !DEFINED_PCHR( pchr ) ) return rv_error; in chr_update_collision_size()
8189 oct_bb_ctor( &( pchr->chr_min_cv ) ); in chr_update_collision_size()
8190 oct_bb_ctor( &( pchr->chr_max_cv ) ); in chr_update_collision_size()
8193 oct_bb_ctor( pchr->slot_cv + cnt ); in chr_update_collision_size()
8196 pcap = pro_get_pcap( pchr->profile_ref ); in chr_update_collision_size()
8199 pmad = chr_get_pmad( GET_REF_PCHR( pchr ) ); in chr_update_collision_size()
8206 if ( rv_error == chr_update_matrix( pchr, bfalse ) ) in chr_update_collision_size()
8213 if ( rv_error == chr_instance_update_bbox( &( pchr->inst ) ) ) in chr_update_collision_size()
8220 memcpy( &bsrc, &( pchr->inst.bbox ), sizeof( bsrc ) ); in chr_update_collision_size()
8226 TransformVertices( &( pchr->inst.matrix ), src, dst, vcount ); in chr_update_collision_size()
8232 oct_bb_copy( &( pchr->chr_min_cv ), &bdst ); in chr_update_collision_size()
8233 oct_bb_copy( &( pchr->chr_max_cv ), &bdst ); in chr_update_collision_size()
8235 oct_bb_set_bumper( &bmin, pchr->bump ); in chr_update_collision_size()
8240 oct_bb_self_intersection_index( &( pchr->chr_min_cv ), &bmin, OCT_X ); in chr_update_collision_size()
8241 oct_bb_self_intersection_index( &( pchr->chr_min_cv ), &bmin, OCT_Y ); in chr_update_collision_size()
8243 oct_bb_self_union_index( &( pchr->chr_max_cv ), &bmin, OCT_X ); in chr_update_collision_size()
8244 oct_bb_self_union_index( &( pchr->chr_max_cv ), &bmin, OCT_Y ); in chr_update_collision_size()
8250 oct_bb_self_intersection_index( &( pchr->chr_min_cv ), &bmin, OCT_XY ); in chr_update_collision_size()
8251 oct_bb_self_intersection_index( &( pchr->chr_min_cv ), &bmin, OCT_YX ); in chr_update_collision_size()
8253 oct_bb_self_union_index( &( pchr->chr_max_cv ), &bmin, OCT_XY ); in chr_update_collision_size()
8254 oct_bb_self_union_index( &( pchr->chr_max_cv ), &bmin, OCT_YX ); in chr_update_collision_size()
8260 oct_bb_self_intersection_index( &( pchr->chr_min_cv ), &bmin, OCT_Z ); in chr_update_collision_size()
8262 oct_bb_self_union_index( &( pchr->chr_max_cv ), &bmin, OCT_Z ); in chr_update_collision_size()
8276 chr_calc_grip_cv( pchr, GRIP_LEFT, pchr->slot_cv + cnt, NULL, NULL, bfalse ); in chr_update_collision_size()
8278 oct_bb_self_union( &( pchr->chr_max_cv ), pchr->slot_cv + cnt ); in chr_update_collision_size()
8282 oct_bb_downgrade( &bdst, pchr->bump_stt, pchr->bump, &( pchr->bump_1 ), NULL ); in chr_update_collision_size()
8541 chr_t * pchr; in chr_teleport() local
8547 pchr = ChrList.lst + ichr; in chr_teleport()
8552 pos_old = chr_get_pos( pchr ); in chr_teleport()
8553 facing_old = pchr->ori.facing_z; in chr_teleport()
8560 if ( chr_hit_wall( pchr, pos_new.v, NULL, NULL, NULL ) ) in chr_teleport()
8563 chr_set_pos( pchr, pos_old.v ); in chr_teleport()
8564 pchr->ori.facing_z = facing_old; in chr_teleport()
8573 pchr->pos_old = pos_new; in chr_teleport()
8574 pchr->ori_old.facing_z = facing_new; in chr_teleport()
8577 chr_set_pos( pchr, pos_new.v ); in chr_teleport()
8578 pchr->ori.facing_z = facing_new; in chr_teleport()
8583 chr_update_matrix( pchr, btrue ); in chr_teleport()
8605 chr_t * chr_update_hide( chr_t * pchr ) in chr_update_hide() argument
8613 if ( !DEFINED_PCHR( pchr ) ) return pchr; in chr_update_hide()
8616 pcap = chr_get_pcap( GET_REF_PCHR( pchr ) ); in chr_update_hide()
8622 pchr->is_hidden = bfalse; in chr_update_hide()
8623 if ( hide != NOHIDE && hide == pchr->ai.state ) in chr_update_hide()
8625 pchr->is_hidden = btrue; in chr_update_hide()
8628 return pchr; in chr_update_hide()
8656 bool_t chr_matrix_valid( chr_t * pchr ) in chr_matrix_valid() argument
8660 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in chr_matrix_valid()
8663 return pchr->inst.matrix_cache.valid && pchr->inst.matrix_cache.matrix_valid; in chr_matrix_valid()
8723 bool_t chr_get_matrix_cache( chr_t * pchr, matrix_cache_t * mc_tmp ) in chr_get_matrix_cache() argument
8731 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in chr_get_matrix_cache()
8732 ichr = GET_REF_PCHR( pchr ); in chr_get_matrix_cache()
8741 mc_tmp->self_scale.x = mc_tmp->self_scale.y = mc_tmp->self_scale.z = pchr->fat; in chr_get_matrix_cache()
8744 if ( !handled && pchr->is_overlay && ichr != pchr->ai.target && INGAME_CHR( pchr->ai.target ) ) in chr_get_matrix_cache()
8748 chr_t * ptarget = ChrList.lst + pchr->ai.target; in chr_get_matrix_cache()
8765 itarget = GET_REF_PCHR( pchr ); in chr_get_matrix_cache()
8768 if ( DEFINED_CHR( pchr->attachedto ) ) in chr_get_matrix_cache()
8770 chr_t * pmount = ChrList.lst + pchr->attachedto; in chr_get_matrix_cache()
8782 mc_tmp->grip_chr = pchr->attachedto; in chr_get_matrix_cache()
8783 mc_tmp->grip_slot = pchr->inwhich_slot; in chr_get_matrix_cache()
8784 … get_grip_verts( mc_tmp->grip_verts, pchr->attachedto, slot_to_grip_offset( pchr->inwhich_slot ) ); in chr_get_matrix_cache()
8786 itarget = pchr->attachedto; in chr_get_matrix_cache()
8950 bool_t apply_one_character_matrix( chr_t * pchr, matrix_cache_t * mc_tmp ) in apply_one_character_matrix() argument
8960 pchr->inst.matrix_cache.matrix_valid = bfalse; in apply_one_character_matrix()
8962 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in apply_one_character_matrix()
8964 if ( pchr->stickybutt ) in apply_one_character_matrix()
8966pchr->inst.matrix = ScaleXYZRotateXYZTranslate_SpaceFixed( mc_tmp->self_scale.x, mc_tmp->self_scal… in apply_one_character_matrix()
8972pchr->inst.matrix = ScaleXYZRotateXYZTranslate_BodyFixed( mc_tmp->self_scale.x, mc_tmp->self_scale… in apply_one_character_matrix()
8977 memcpy( &( pchr->inst.matrix_cache ), mc_tmp, sizeof( matrix_cache_t ) ); in apply_one_character_matrix()
8979 pchr->inst.matrix_cache.matrix_valid = btrue; in apply_one_character_matrix()
9014 bool_t apply_matrix_cache( chr_t * pchr, matrix_cache_t * mc_tmp ) in apply_matrix_cache() argument
9021 if ( !DEFINED_PCHR( pchr ) ) return bfalse; in apply_matrix_cache()
9028 applied = apply_one_weapon_matrix( pchr, mc_tmp ); in apply_matrix_cache()
9032 matrix_cache_t * mcache = &( pchr->inst.matrix_cache ); in apply_matrix_cache()
9035 make_one_character_matrix( GET_REF_PCHR( pchr ) ); in apply_matrix_cache()
9046 mcache->self_scale.z = pchr->fat; in apply_matrix_cache()
9050 mcache->rotate.x = CLIP_TO_16BITS( pchr->ori.map_facing_x - MAP_TURN_OFFSET ); in apply_matrix_cache()
9051 mcache->rotate.y = CLIP_TO_16BITS( pchr->ori.map_facing_y - MAP_TURN_OFFSET ); in apply_matrix_cache()
9052 mcache->rotate.z = pchr->ori.facing_z; in apply_matrix_cache()
9054 mcache->pos = chr_get_pos( pchr ); in apply_matrix_cache()
9062 applied = apply_one_character_matrix( pchr, mc_tmp ); in apply_matrix_cache()
9067 apply_reflection_matrix( &( pchr->inst ), pchr->enviro.grid_level ); in apply_matrix_cache()
9184 egoboo_rv matrix_cache_needs_update( chr_t * pchr, matrix_cache_t * pmc ) in matrix_cache_needs_update() argument
9191 if ( !DEFINED_PCHR( pchr ) ) return rv_error; in matrix_cache_needs_update()
9196 chr_get_matrix_cache( pchr, pmc ); in matrix_cache_needs_update()
9199 needs_cache_update = ( 0 != cmp_matrix_cache( pmc, &( pchr->inst.matrix_cache ) ) ); in matrix_cache_needs_update()
9205 egoboo_rv chr_update_matrix( chr_t * pchr, bool_t update_size ) in chr_update_matrix() argument
9218 if ( !DEFINED_PCHR( pchr ) ) return rv_error; in chr_update_matrix()
9219 pchr_mc = &( pchr->inst.matrix_cache ); in chr_update_matrix()
9222 if ( DEFINED_CHR( pchr->attachedto ) ) in chr_update_matrix()
9226 attached_update = chr_update_matrix( ChrList.lst + pchr->attachedto, btrue ); in chr_update_matrix()
9244 retval = matrix_cache_needs_update( pchr, &mc_tmp ); in chr_update_matrix()
9268 applied = apply_matrix_cache( pchr, &mc_tmp ); in chr_update_matrix()
9274 chr_update_collision_size( pchr, bfalse ); in chr_update_matrix()
9309 chr_t * pchr; in chr_has_inventory_idsz() local
9312 pchr = ChrList.lst + ichr; in chr_has_inventory_idsz()
9319 *pack_last = GET_REF_PCHR( pchr ); in chr_has_inventory_idsz()
9321 PACK_BEGIN_LOOP( ipacked, pchr->pack.next ) in chr_has_inventory_idsz()
9345 chr_t * pchr; in chr_holding_idsz() local
9348 pchr = ChrList.lst + ichr; in chr_holding_idsz()
9356 tmp_item = pchr->holdingwhich[SLOT_RIGHT]; in chr_holding_idsz()
9368 tmp_item = pchr->holdingwhich[SLOT_LEFT]; in chr_holding_idsz()
9389 chr_t * pchr; in chr_has_item_idsz() local
9392 pchr = ChrList.lst + ichr; in chr_has_item_idsz()
9418 bool_t chr_can_see_invis( const chr_t * pchr, const chr_t * pobj ) in chr_can_see_invis() argument
9424 if ( NULL == pchr || NULL == pobj ) return bfalse; in chr_can_see_invis()
9427 if ( pchr->invictus ) return btrue; in chr_can_see_invis()
9430 if ( 0 != pchr->see_invisible_level ) in chr_can_see_invis()
9432 alpha = get_alpha( alpha, exp( 0.32f * ( float )pchr->see_invisible_level ) ); in chr_can_see_invis()
9440 bool_t chr_can_see_dark( const chr_t * pchr, const chr_t * pobj ) in chr_can_see_dark() argument
9448 if ( NULL == pchr || NULL == pobj ) return bfalse; in chr_can_see_dark()
9454 if ( 0 != pchr->darkvision_level ) in chr_can_see_dark()
9456 light *= exp( 0.32f * ( float )pchr->darkvision_level ); in chr_can_see_dark()
9462 pcap = pro_get_pcap( pchr->profile_ref ); in chr_can_see_dark()
9476 chr_t * pchr, * pobj; in chr_can_see_object() local
9481 pchr = ChrList.lst + ichr; in chr_can_see_object()
9486 too_dark = !chr_can_see_dark( pchr, pobj ); in chr_can_see_object()
9487 too_invis = !chr_can_see_invis( pchr, pobj ); in chr_can_see_object()
9501 chr_t * pchr; in chr_get_price() local
9505 pchr = ChrList.lst + ichr; in chr_get_price()
9508 if ( pchr->profile_ref == SPELLBOOK ) in chr_get_price()
9510 icap = pro_get_icap( pchr->basemodel_ref ); in chr_get_price()
9515 icap = pro_get_icap( pchr->profile_ref ); in chr_get_price()
9516 iskin = pchr->skin; in chr_get_price()
9525 if ( !pchr->isshopitem ) price *= 0.5f; in chr_get_price()
9530 price *= pchr->ammo; in chr_get_price()
9532 else if ( pcap->isranged && pchr->ammo < pchr->ammomax ) in chr_get_price()
9534 if ( 0 != pchr->ammo ) in chr_get_price()
9536 price *= ( float ) pchr->ammo / ( float ) pchr->ammomax; in chr_get_price()
9544 void chr_set_floor_level( chr_t * pchr, float level ) in chr_set_floor_level() argument
9546 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_floor_level()
9548 if ( level != pchr->enviro.floor_level ) in chr_set_floor_level()
9550 pchr->enviro.floor_level = level; in chr_set_floor_level()
9555 void chr_set_redshift( chr_t * pchr, int rs ) in chr_set_redshift() argument
9557 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_redshift()
9559 pchr->inst.redshift = rs; in chr_set_redshift()
9561 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, bfalse ); in chr_set_redshift()
9565 void chr_set_grnshift( chr_t * pchr, int gs ) in chr_set_grnshift() argument
9567 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_grnshift()
9569 pchr->inst.grnshift = gs; in chr_set_grnshift()
9571 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, bfalse ); in chr_set_grnshift()
9575 void chr_set_blushift( chr_t * pchr, int bs ) in chr_set_blushift() argument
9577 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_blushift()
9579 pchr->inst.blushift = bs; in chr_set_blushift()
9581 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, bfalse ); in chr_set_blushift()
9585 void chr_set_sheen( chr_t * pchr, int sheen ) in chr_set_sheen() argument
9587 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_sheen()
9589 pchr->inst.sheen = sheen; in chr_set_sheen()
9591 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, bfalse ); in chr_set_sheen()
9595 void chr_set_alpha( chr_t * pchr, int alpha ) in chr_set_alpha() argument
9597 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_alpha()
9599 pchr->inst.alpha = CLIP( alpha, 0, 255 ); in chr_set_alpha()
9601 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, bfalse ); in chr_set_alpha()
9605 void chr_set_light( chr_t * pchr, int light ) in chr_set_light() argument
9607 if ( !DEFINED_PCHR( pchr ) ) return; in chr_set_light()
9609 pchr->inst.light = CLIP( light, 0, 255 ); in chr_set_light()
9612 if ( VALID_PLA( pchr->is_which_player ) ) pchr->inst.light = MAX( 128, pchr->inst.light ); in chr_set_light()
9614 chr_instance_update_ref( &( pchr->inst ), pchr->enviro.grid_level, bfalse ); in chr_set_light()
9805 Uint32 chr_get_framefx( chr_t * pchr ) in chr_get_framefx() argument
9807 if ( !DEFINED_PCHR( pchr ) ) return 0; in chr_get_framefx()
9809 return chr_instance_get_framefx( &( pchr->inst ) ); in chr_get_framefx()
9813 egoboo_rv chr_invalidate_child_instances( chr_t * pchr ) in chr_invalidate_child_instances() argument
9817 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_invalidate_child_instances()
9822 CHR_REF iitem = pchr->holdingwhich[cnt]; in chr_invalidate_child_instances()
9833 egoboo_rv chr_set_action( chr_t * pchr, int action, bool_t action_ready, bool_t override_action ) in chr_set_action() argument
9837 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_set_action()
9839 …retval = ( egoboo_rv )chr_instance_set_action( &( pchr->inst ), action, action_ready, override_act… in chr_set_action()
9843 if ( !pchr->inst.save.valid ) in chr_set_action()
9845 chr_invalidate_child_instances( pchr ); in chr_set_action()
9852 egoboo_rv chr_start_anim( chr_t * pchr, int action, bool_t action_ready, bool_t override_action ) in chr_start_anim() argument
9856 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_start_anim()
9858 …retval = ( egoboo_rv )chr_instance_start_anim( &( pchr->inst ), action, action_ready, override_act… in chr_start_anim()
9862 if ( !pchr->inst.save.valid ) in chr_start_anim()
9864 chr_invalidate_child_instances( pchr ); in chr_start_anim()
9871 egoboo_rv chr_set_anim( chr_t * pchr, int action, int frame, bool_t action_ready, bool_t override_a… in chr_set_anim() argument
9875 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_set_anim()
9877 …retval = ( egoboo_rv )chr_instance_set_anim( &( pchr->inst ), action, frame, action_ready, overrid… in chr_set_anim()
9881 if ( !pchr->inst.save.valid ) in chr_set_anim()
9883 chr_invalidate_child_instances( pchr ); in chr_set_anim()
9890 egoboo_rv chr_increment_action( chr_t * pchr ) in chr_increment_action() argument
9894 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_increment_action()
9896 retval = ( egoboo_rv )chr_instance_increment_action( &( pchr->inst ) ); in chr_increment_action()
9900 if ( !pchr->inst.save.valid ) in chr_increment_action()
9902 chr_invalidate_child_instances( pchr ); in chr_increment_action()
9909 egoboo_rv chr_increment_frame( chr_t * pchr ) in chr_increment_frame() argument
9917 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_increment_frame()
9918 imount = pchr->attachedto; in chr_increment_frame()
9920 pmad = chr_get_pmad( GET_REF_PCHR( pchr ) ); in chr_increment_frame()
9934 … if ( INGAME_CHR( pchr->holdingwhich[SLOT_LEFT] ) || INGAME_CHR( pchr->holdingwhich[SLOT_RIGHT] ) ) in chr_increment_frame()
9939 mount_action = mad_get_action_ref( pchr->inst.imad, ACTION_MH ); in chr_increment_frame()
9949 mount_action = mad_get_action_ref( pchr->inst.imad, ACTION_MI ); in chr_increment_frame()
9958 … retval = ( egoboo_rv )chr_instance_increment_frame( &( pchr->inst ), pmad, imount, mount_action ); in chr_increment_frame()
9969 if ( !pchr->inst.save.valid ) in chr_increment_frame()
9971 chr_invalidate_child_instances( pchr ); in chr_increment_frame()
9978 egoboo_rv chr_play_action( chr_t * pchr, int action, bool_t action_ready ) in chr_play_action() argument
9982 if ( !ACTIVE_PCHR( pchr ) ) return rv_error; in chr_play_action()
9984 retval = ( egoboo_rv )chr_instance_play_action( &( pchr->inst ), action, action_ready ); in chr_play_action()
9988 if ( !pchr->inst.save.valid ) in chr_play_action()
9990 chr_invalidate_child_instances( pchr ); in chr_play_action()
9999 chr_t * pchr; in chr_get_imad() local
10002 pchr = ChrList.lst + ichr; in chr_get_imad()
10005 if ( !LOADED_MAD( pchr->inst.imad ) ) in chr_get_imad()
10007 MAD_REF imad_tmp = pro_get_imad( pchr->profile_ref ); in chr_get_imad()
10010 if ( chr_instance_set_mad( &( pchr->inst ), imad_tmp ) ) in chr_get_imad()
10012 chr_update_collision_size( pchr, btrue ); in chr_get_imad()
10015 if ( !LOADED_MAD( pchr->inst.imad ) ) return ( MAD_REF )MAX_MAD; in chr_get_imad()
10018 return pchr->inst.imad; in chr_get_imad()
10024 chr_t * pchr; in chr_get_pmad() local
10027 pchr = ChrList.lst + ichr; in chr_get_pmad()
10030 if ( !LOADED_MAD( pchr->inst.imad ) ) in chr_get_pmad()
10032 MAD_REF imad_tmp = pro_get_imad( pchr->profile_ref ); in chr_get_pmad()
10035 chr_instance_set_mad( &( pchr->inst ), imad_tmp ); in chr_get_pmad()
10039 if ( !LOADED_MAD( pchr->inst.imad ) ) return NULL; in chr_get_pmad()
10041 return MadStack.lst + pchr->inst.imad; in chr_get_pmad()
10046 bool_t chr_update_pos( chr_t * pchr ) in chr_update_pos() argument
10048 if ( !ALLOCATED_PCHR( pchr ) ) return bfalse; in chr_update_pos()
10050 pchr->onwhichgrid = mesh_get_grid( PMesh, pchr->pos.x, pchr->pos.y ); in chr_update_pos()
10051 pchr->onwhichblock = mesh_get_block( PMesh, pchr->pos.x, pchr->pos.y ); in chr_update_pos()
10054 chr_update_safe( pchr, bfalse ); in chr_update_pos()
10057 chr_update_breadcrumb( pchr, bfalse ); in chr_update_pos()
10063 bool_t chr_set_pos( chr_t * pchr, fvec3_base_t pos ) in chr_set_pos() argument
10067 if ( !ALLOCATED_PCHR( pchr ) ) return retval; in chr_set_pos()
10071 …if (( pos[kX] != pchr->pos.v[kX] ) || ( pos[kY] != pchr->pos.v[kY] ) || ( pos[kZ] != pchr->pos.v[k… in chr_set_pos()
10073 memmove( pchr->pos.v, pos, sizeof( fvec3_base_t ) ); in chr_set_pos()
10075 retval = chr_update_pos( pchr ); in chr_set_pos()
10082 bool_t chr_set_maxaccel( chr_t * pchr, float new_val ) in chr_set_maxaccel() argument
10087 if ( !ALLOCATED_PCHR( pchr ) ) return retval; in chr_set_maxaccel()
10089 ftmp = pchr->maxaccel / pchr->maxaccel_reset; in chr_set_maxaccel()
10090 pchr->maxaccel_reset = new_val; in chr_set_maxaccel()
10091 pchr->maxaccel = ftmp * pchr->maxaccel_reset; in chr_set_maxaccel()
10097 chr_t * chr_set_ai_state( chr_t * pchr, int state ) in chr_set_ai_state() argument
10099 if ( !DEFINED_PCHR( pchr ) ) return pchr; in chr_set_ai_state()
10101 pchr->ai.state = state; in chr_set_ai_state()
10103 chr_update_hide( pchr ); in chr_set_ai_state()
10105 return pchr; in chr_set_ai_state()