// seg004:08C3 void __pascal far check_guard_bumped() { short var_2; if ( word_1F950 == 0 && Char.action == actions_1_run_jump && Char.alive < 0 && Char.sword >= sword_2_drawn ) { if ( get_tile_at_char() == tiles_20_wall || curr_tile2 == tiles_7_doortop_with_floor || (curr_tile2 == tiles_4_gate && can_bump_into_gate()) || (Char.direction >= dir_0_right && ( get_tile(curr_room, --tile_col, tile_row) == tiles_7_doortop_with_floor || (curr_tile2 == tiles_4_gate && can_bump_into_gate()) )) ) { load_frame_to_obj(); set_char_collision(); if (is_obstacle()) { var_2 = dist_from_wall_behind(curr_tile2); if (var_2 < 0 && var_2 > -13) { Char.x = char_dx_forward(-var_2); seqtbl_offset_char(65); // pushed to wall with sword (Guard) play_seq(); load_fram_det_col(); } } } } }
// seg004:07BF void __pascal far chomped() { curr_room_modif[curr_tilepos] |= 0x80; // put blood if (Char.frame != 178 && Char.room == curr_room) { Char.x = x_bump[tile_col + 5] + 7; Char.x = char_dx_forward(7 - !Char.direction); Char.y = y_land[Char.curr_row + 1]; take_hp(100); play_sound(sound_46_chomped); // something chomped seqtbl_offset_char(54); // chomped play_seq(); } }
// seg004:04E4 void __pascal far bumped_fall() { short action; action = Char.action; Char.x = char_dx_forward(-4); if (action == actions_4_in_freefall) { Char.fall_x = 0; } else { seqtbl_offset_char(45); // fall after bumped play_seq(); } bumped_sound(); }
// seg002:0BCD void __pascal far hurt_by_sword() { short distance; if (Char.alive >= 0) return; if (Char.sword != sword_2_drawn) { // Being hurt when not in fighting pose means death. take_hp(100); seqtbl_offset_char(seq_85_stabbed_to_death); // dying (stabbed unarmed) loc_4276: if (get_tile_behind_char() != 0 || (distance = distance_to_edge_weight()) < 4 ) { seqtbl_offset_char(seq_85_stabbed_to_death); // dying (stabbed) if (Char.charid != charid_0_kid && Char.direction < dir_0_right && // looking left (curr_tile2 == tiles_4_gate || get_tile_at_char() == tiles_4_gate) ) { Char.x = x_bump[tile_col - (curr_tile2 != tiles_4_gate) + 5] + 7; Char.x = char_dx_forward(10); } Char.y = y_land[Char.curr_row + 1]; Char.fall_y = 0; } else { Char.x = char_dx_forward(distance - 20); load_fram_det_col(); inc_curr_row(); seqtbl_offset_char(seq_81_kid_pushed_off_ledge); // Kid/Guard is killed and pushed off the ledge } } else { // You can't hurt skeletons if (Char.charid != charid_4_skeleton) { if (take_hp(1)) goto loc_4276; } seqtbl_offset_char(seq_74_hit_by_sword); // being hit with sword Char.y = y_land[Char.curr_row + 1]; Char.fall_y = 0; } // sound 13: Kid hurt (by sword), sound 12: Guard hurt (by sword) play_sound(Char.charid == charid_0_kid ? sound_13_kid_hurt : sound_12_guard_hurt); play_seq(); }
// seg004:0520 void __pascal far bumped_floor(sbyte push_direction) { short frame; short seq_index; if (Char.sword != sword_2_drawn && (word)(y_land[Char.curr_row + 1] - Char.y) >= (word)15) { bumped_fall(); } else { Char.y = y_land[Char.curr_row + 1]; if (Char.fall_y >= 22) { Char.x = char_dx_forward(-5); } else { Char.fall_y = 0; if (Char.alive) { if (Char.sword == sword_2_drawn) { if (push_direction == Char.direction) { seqtbl_offset_char(65); // pushed forward with sword (Kid) play_seq(); Char.x = char_dx_forward(1); return; } else { seq_index = 64; // pushed back with sword } } else { frame = Char.frame; if (frame == 24 || frame == 25 || (frame >= 40 && frame < 43) || (frame >= 102 && frame < 107) ) { seq_index = 46; // bump into wall after run-jump (crouch) } else { seq_index = 47; // bump into wall } } seqtbl_offset_char(seq_index); play_seq(); bumped_sound(); } } } }
// seg004:07BF void __pascal far chomped() { #ifdef FIX_SKELETON_CHOMPER_BLOOD if (!(fixes->fix_skeleton_chomper_blood && Char.charid == charid_4_skeleton)) #endif curr_room_modif[curr_tilepos] |= 0x80; // put blood if (Char.frame != frame_178_chomped && Char.room == curr_room) { Char.x = x_bump[tile_col + 5] + 7; Char.x = char_dx_forward(7 - !Char.direction); Char.y = y_land[Char.curr_row + 1]; take_hp(100); play_sound(sound_46_chomped); // something chomped seqtbl_offset_char(seq_54_chomped); // chomped play_seq(); } }
// seg004:08C3 void __pascal far check_guard_bumped() { if ( Char.action == actions_1_run_jump && Char.alive < 0 && Char.sword >= sword_2_drawn ) { if ( #ifdef FIX_PUSH_GUARD_INTO_WALL // Should also check for a wall BEHIND the guard, instead of only the current tile (fixes->fix_push_guard_into_wall && get_tile_behind_char() == tiles_20_wall) || #endif get_tile_at_char() == tiles_20_wall || curr_tile2 == tiles_7_doortop_with_floor || (curr_tile2 == tiles_4_gate && can_bump_into_gate()) || (Char.direction >= dir_0_right && ( get_tile(curr_room, --tile_col, tile_row) == tiles_7_doortop_with_floor || (curr_tile2 == tiles_4_gate && can_bump_into_gate()) )) ) { load_frame_to_obj(); set_char_collision(); if (is_obstacle()) { short delta_x; delta_x = dist_from_wall_behind(curr_tile2); if (delta_x < 0 && delta_x > -13) { Char.x = char_dx_forward(-delta_x); seqtbl_offset_char(seq_65_bump_forward_with_sword); // pushed to wall with sword (Guard) play_seq(); load_fram_det_col(); } } } } }