Files
tdkpin/original/reconstructed/tdkpin_gameplay_helpers.h
T
ddidderr 742b8b7981 fix(physics): use predicted magnetic gate bounds
Correct the readable 1000:9b69 reconstruction to read DGROUP 07db/07df and name the helper for its predicted-position role. Rust magnetic rectangles now enter only from an old position inside the record and deactivate when the recomputed prediction exits any edge, replacing the prior swept approximation.

Test Plan:
- bash original/tools/test_reconstructed_c.sh
- python3 original/tools/audit_reconstruction.py --require-complete
- cargo test --all-targets
- cargo clippy --all-targets --all-features -- -D warnings
- rumdl check original/C_RECONSTRUCTION_FINAL_AUDIT.md tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md tdkpin-rs/README.md
- git diff --check
2026-08-23 18:25:23 +02:00

90 lines
3.0 KiB
C

#ifndef TDKPIN_GAMEPLAY_HELPERS_H
#define TDKPIN_GAMEPLAY_HELPERS_H
#include "tdkpin_render.h"
void tdkpin_blit_bitmap_and_present(
HBITMAP16 bitmap,
INT16 height,
INT16 width,
INT16 y,
INT16 x,
HDC16 dc); /* 1000:635c */
void tdkpin_restore_bounds_overlay_a(
uint16_t ignored_static_link,
INT16 bottom,
INT16 right,
INT16 top,
INT16 left,
HDC16 dc); /* 1000:b2c8 */
void tdkpin_restore_bounds_overlay_b(
uint16_t ignored_static_link,
INT16 bottom,
INT16 right,
INT16 top,
INT16 left,
HDC16 dc); /* 1000:b3b0 */
void tdkpin_draw_score_from_caller_frame(
uint16_t caller_bp,
uint16_t value_low,
uint16_t value_high); /* 1000:bda2 */
void tdkpin_set_gameplay_transition_flags(
uint16_t caller_bp); /* 1000:a70e */
uint16_t tdkpin_receiver_point_in_bounds(
uint16_t caller_bp,
int32_t maximum_y,
int32_t maximum_x,
int32_t minimum_y,
int32_t minimum_x); /* 1000:9ae0 */
uint16_t tdkpin_predicted_ball_in_bounds(
uint16_t ignored_static_link,
int32_t maximum_y,
int32_t maximum_x,
int32_t minimum_y,
int32_t minimum_x); /* 1000:9b69 */
void tdkpin_update_dynamic_ball_record(
uint16_t ignored_static_link,
int32_t record_displacement); /* 1000:bdde */
void tdkpin_restore_record_or_item_a(
uint16_t caller_bp, uint16_t id); /* 1000:b30b */
void tdkpin_restore_record_b(
uint16_t caller_bp, uint16_t id); /* 1000:b3f3 */
void tdkpin_refresh_collision_record(
uint16_t caller_bp, uint16_t id); /* 1000:7e12 */
void tdkpin_refresh_player_item(
uint16_t caller_bp, uint16_t item); /* 1000:7e92 */
void tdkpin_load_ball_slot(
uint16_t caller_bp, uint16_t slot); /* 1000:c36b */
void tdkpin_save_ball_slot(
uint16_t caller_bp, uint16_t slot); /* 1000:c426 */
void tdkpin_draw_board_decoration_row(
uint16_t caller_bp, INT16 y); /* 1000:6b37 */
void tdkpin_draw_board_decoration_row_on_dc(
INT16 y, HDC16 dc); /* semantic core used by 1000:6bf8 */
void tdkpin_render_ball_from_caller_frame(
uint16_t caller_bp); /* 1000:9bca */
void tdkpin_reset_ball_state(
uint16_t caller_bp); /* 1000:9e85 */
void tdkpin_refresh_player_progress_markers(
uint16_t caller_bp); /* 1000:a604 */
void tdkpin_composite_player_sprite(
uint16_t sprite_index, HDC16 reference_dc); /* 1000:0002 */
void tdkpin_add_score_from_caller_frame(
uint16_t caller_bp, int32_t delta); /* 1000:bc36 */
void tdkpin_restore_previous_ball_region(
uint16_t caller_bp, uint8_t suppress_present); /* 1000:a38e */
void tdkpin_render_ball_swept_region(
uint16_t caller_bp); /* 1000:9f73 */
void tdkpin_move_ball_and_render(
uint16_t caller_bp,
int32_t delta_x,
int32_t delta_y); /* 1000:beff */
extern uint8_t g_player_count; /* 1028:07d0 */
extern uint8_t g_gameplay_transition_pending; /* 1028:07c9 */
extern int32_t g_ball_x_milli; /* 1028:07d3..07d6 */
extern int32_t g_ball_y_milli; /* 1028:07d7..07da */
extern uint8_t g_current_player; /* 1028:07d1 */
#endif