From 2178c98a755020da46f6c08327a63ca0189fc960 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Fri, 17 Mar 2023 17:07:02 +0900 Subject: [PATCH] Apply K3 hack to the map area selection of Only You --- src/sys/nact.h | 1 + src/sys/nact_sys3.cpp | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/sys/nact.h b/src/sys/nact.h index aaa8797..94a3674 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -433,6 +433,7 @@ private: struct K3HackInfo; static const K3HackInfo yakata3cd_k3_hack_table[]; static const K3HackInfo yakata3fd_k3_hack_table[]; + static const K3HackInfo onlyyou_k3_hack_table[]; bool k3_hack(const K3HackInfo* info_table); }; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 23ea84a..7426cef 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -527,6 +527,10 @@ void NACT_Sys3::cmd_k() if (k3_hack(yakata3fd_k3_hack_table)) return; break; + case CRC32_ONLYYOU: + if (k3_hack(onlyyou_k3_hack_table)) + return; + break; } } @@ -1555,6 +1559,12 @@ const NACT_Sys3::K3HackInfo NACT_Sys3::yakata3fd_k3_hack_table[] = { { -1 } }; +const NACT_Sys3::K3HackInfo NACT_Sys3::onlyyou_k3_hack_table[] = { + //page, var, left, top, rows, cols, w, h, draw_win + { 7, 235, 392, 0, 2, 3, 48, 48, false }, // map area selection + { -1 } +}; + bool NACT_Sys3::k3_hack(const K3HackInfo* info_table) { const K3HackInfo* info; @@ -1581,6 +1591,10 @@ bool NACT_Sys3::k3_hack(const K3HackInfo* info_table) ags->box_line(0, left, info->top, left + info->w, info->top + info->h, ags->text_font_color); } + // Only You: Prevents the cursor from being locked due to unselectable cells. + static bool row_first; + row_first = !row_first; + while (!terminate) { int mx, my; get_cursor(&mx, &my); @@ -1591,13 +1605,15 @@ bool NACT_Sys3::k3_hack(const K3HackInfo* info_table) int current_row = (var[info->var] - 1) / info->cols; int current_col = (var[info->var] - 1) % info->cols; - if (target_row < current_row) { - RND = 1; // UP - break; - } - if (target_row > current_row) { - RND = 2; // DOWN - break; + if (row_first) { + if (target_row < current_row) { + RND = 1; // UP + break; + } + if (target_row > current_row) { + RND = 2; // DOWN + break; + } } if (target_col < current_col) { RND = 4; // LEFT @@ -1607,6 +1623,16 @@ bool NACT_Sys3::k3_hack(const K3HackInfo* info_table) RND = 8; // RIGHT break; } + if (!row_first) { + if (target_row < current_row) { + RND = 1; // UP + break; + } + if (target_row > current_row) { + RND = 2; // DOWN + break; + } + } } int key = get_key(); if (key) {