From 1c0ba6ec04716479e4bb05b1066eac523a34bc9b Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sun, 2 Jul 2023 01:29:29 +0800 Subject: [PATCH 01/10] tiles --- src/cata_tiles.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++ src/cata_tiles.h | 2 ++ 2 files changed, 67 insertions(+) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 88cee9d958c2d..95e667be502db 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -1658,6 +1658,12 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int // If no vpart drawn, revert height_3d changes p.height_3d = temp_height_3d; } + } else if( f == &cata_tiles::draw_critter_at ) { + // Draw + if( !( this->*f )( draw_loc, p.ll, p.height_3d, p.invisible ) && cur_zlevel == p.draw_min_z ) { + // Draw shadow of flying critters on bottom-most tile if no other critter drawn + draw_critter_above( draw_loc, p.ll, p.height_3d, p.invisible ); + } } else { // Draw ( this->*f )( draw_loc, p.ll, p.height_3d, p.invisible ); @@ -3777,6 +3783,65 @@ bool cata_tiles::draw_critter_at( const tripoint &p, lit_level ll, int &height_3 return result; } +bool cata_tiles::draw_critter_above( const tripoint &p, lit_level ll, int &height_3d, + const std::array & ) +{ + tripoint scan_p( p.xy(), p.z + 1 ); + map &here = get_map(); + Character &you = get_player_character(); + const Creature *pcritter = nullptr; + // Search for a creature above + while( pcritter == nullptr && !here.dont_draw_lower_floor( scan_p ) && scan_p.z - you.pos().z <= fov_3d_z_range ) { + pcritter = get_creature_tracker().creature_at( scan_p, true ); + scan_p.z++; + } + + // Abort if no creature found + if( pcritter == nullptr ) { + return false; + } + + + bool result = false; + bool is_player = false; + bool sees_player = false; + Creature::Attitude attitude = Creature::Attitude::ANY; + + const Creature &critter = *pcritter; + + const monster *m = dynamic_cast( &critter ); + if( m != nullptr ) { + result = draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, + 0, 0, ll, false, height_3d ); + sees_player = m->sees( you ); + attitude = m->attitude_to( you ); + } + + const Character *pl = dynamic_cast( &critter ); + if( pl != nullptr ) { + draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, + 0, 0, ll, false, height_3d ); + if( pl->is_avatar() ) { + is_player = true; + } else { + sees_player = pl->sees( you ); + attitude = pl->attitude_to( you ); + } + } + + if( result && !is_player ) { + std::string draw_id = "overlay_" + Creature::attitude_raw_string( attitude ); + if( sees_player && !you.has_trait( trait_INATTENTIVE ) ) { + draw_id += "_sees_player"; + } + if( tileset_ptr->find_tile_type( draw_id ) ) { + draw_from_id_string( draw_id, TILE_CATEGORY::NONE, empty_string, p, 0, 0, + lit_level::LIT, false, height_3d ); + } + } + return result; +} + bool cata_tiles::draw_zone_mark( const tripoint &p, lit_level ll, int &height_3d, const std::array &invisible ) { diff --git a/src/cata_tiles.h b/src/cata_tiles.h index 453f70190b713..754dbb990efd7 100644 --- a/src/cata_tiles.h +++ b/src/cata_tiles.h @@ -528,6 +528,8 @@ class cata_tiles const std::array &invisible ); bool draw_critter_at_below( const tripoint &p, lit_level ll, int &height_3d, const std::array &invisible ); + bool draw_critter_above( const tripoint &p, lit_level ll, int &height_3d, + const std::array &invisible ); bool draw_zone_mark( const tripoint &p, lit_level ll, int &height_3d, const std::array &invisible ); bool draw_zombie_revival_indicators( const tripoint &pos, lit_level ll, int &height_3d, From 82cdad6dac87235c4f8a5d725ae20918154673df Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sun, 2 Jul 2023 01:29:37 +0800 Subject: [PATCH 02/10] curses --- src/game.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/game.cpp b/src/game.cpp index 12eca4ecc0752..65a1006a440c4 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3941,6 +3941,11 @@ void game::draw_critter( const Creature &critter, const tripoint ¢er ) // TODO: Redraw this after weather etc. animations mvwputch( w_terrain, point( mx, my ), c_green_cyan, 'v' ); } + if( critter.posz() == center.z + 1 && + ( debug_mode || u.sees( critter ) ) && + m.valid_move( critter.pos(), critter.pos() + tripoint_below, false, true ) ) { + mvwputch( w_terrain, point( mx, my ), c_green_cyan, '^' ); + } return; } if( u.sees( critter ) || &critter == &u ) { From 61377c550e5578d9706ebe6c64f14a37dbe47480 Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sun, 2 Jul 2023 13:42:48 +0800 Subject: [PATCH 03/10] prevent shadow sprite fallback --- src/cata_tiles.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 95e667be502db..056296f090afd 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -1618,6 +1618,12 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int } }; + // Skip drawing shadow of critters above if there is no shadow sprite + bool do_draw_shadow = false; + if( find_tile_looks_like( "shadow", TILE_CATEGORY::NONE, "" ) ) { + do_draw_shadow = true; + } + if( max_draw_depth <= 0 ) { // Legacy draw mode for( int row = min_row; row < max_row; row ++ ) { @@ -1660,7 +1666,7 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int } } else if( f == &cata_tiles::draw_critter_at ) { // Draw - if( !( this->*f )( draw_loc, p.ll, p.height_3d, p.invisible ) && cur_zlevel == p.draw_min_z ) { + if( !( this->*f )( draw_loc, p.ll, p.height_3d, p.invisible ) && do_draw_shadow && cur_zlevel == p.draw_min_z ) { // Draw shadow of flying critters on bottom-most tile if no other critter drawn draw_critter_above( draw_loc, p.ll, p.height_3d, p.invisible ); } From f75a318b6d0d58ea20e5667e15f46e8e7244dca8 Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sun, 2 Jul 2023 14:12:59 +0800 Subject: [PATCH 04/10] optimization and formatting also remove some rogue code comments from my previous PRs --- src/cata_tiles.cpp | 86 ++++++++++++++++++++++++---------------------- src/cata_tiles.h | 2 +- src/game.cpp | 2 -- 3 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 056296f090afd..98455c4c2b7a0 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -1366,7 +1366,6 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int creature_tracker &creatures = get_creature_tracker(); std::map> draw_points; // Limit draw depth to vertical vision setting - // Disable multi z-level display on isometric tilesets until height_3d issues resolved const int max_draw_depth = fov_3d_z_range; for( int row = min_row; row < max_row; row ++ ) { draw_points[row].reserve( max_col ); @@ -1623,7 +1622,7 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int if( find_tile_looks_like( "shadow", TILE_CATEGORY::NONE, "" ) ) { do_draw_shadow = true; } - + if( max_draw_depth <= 0 ) { // Legacy draw mode for( int row = min_row; row < max_row; row ++ ) { @@ -1666,9 +1665,10 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int } } else if( f == &cata_tiles::draw_critter_at ) { // Draw - if( !( this->*f )( draw_loc, p.ll, p.height_3d, p.invisible ) && do_draw_shadow && cur_zlevel == p.draw_min_z ) { - // Draw shadow of flying critters on bottom-most tile if no other critter drawn - draw_critter_above( draw_loc, p.ll, p.height_3d, p.invisible ); + if( !( this->*f )( draw_loc, p.ll, p.height_3d, p.invisible ) && do_draw_shadow && + cur_zlevel == p.draw_min_z ) { + // Draw shadow of flying critters on bottom-most tile if no other critter drawn + draw_critter_above( draw_loc, p.ll, p.height_3d, p.invisible ); } } else { // Draw @@ -3790,14 +3790,15 @@ bool cata_tiles::draw_critter_at( const tripoint &p, lit_level ll, int &height_3 } bool cata_tiles::draw_critter_above( const tripoint &p, lit_level ll, int &height_3d, - const std::array & ) + const std::array & ) { tripoint scan_p( p.xy(), p.z + 1 ); map &here = get_map(); Character &you = get_player_character(); const Creature *pcritter = nullptr; // Search for a creature above - while( pcritter == nullptr && !here.dont_draw_lower_floor( scan_p ) && scan_p.z - you.pos().z <= fov_3d_z_range ) { + while( pcritter == nullptr && !here.dont_draw_lower_floor( scan_p ) && + scan_p.z - you.pos().z <= fov_3d_z_range ) { pcritter = get_creature_tracker().creature_at( scan_p, true ); scan_p.z++; } @@ -3806,46 +3807,49 @@ bool cata_tiles::draw_critter_above( const tripoint &p, lit_level ll, int &heigh if( pcritter == nullptr ) { return false; } - - - bool result = false; - bool is_player = false; - bool sees_player = false; - Creature::Attitude attitude = Creature::Attitude::ANY; - - const Creature &critter = *pcritter; - - const monster *m = dynamic_cast( &critter ); - if( m != nullptr ) { - result = draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, - 0, 0, ll, false, height_3d ); + + // Draw shadow + if( draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, + 0, 0, ll, false, height_3d ) ) { + + bool is_player = false; + bool sees_player = false; + Creature::Attitude attitude = Creature::Attitude::ANY; + const Creature &critter = *pcritter; + + // Get critter status disposition if monster + const monster *m = dynamic_cast( &critter ); + if( m != nullptr ) { sees_player = m->sees( you ); attitude = m->attitude_to( you ); } - - const Character *pl = dynamic_cast( &critter ); - if( pl != nullptr ) { - draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, - 0, 0, ll, false, height_3d ); - if( pl->is_avatar() ) { - is_player = true; - } else { - sees_player = pl->sees( you ); - attitude = pl->attitude_to( you ); - } - } - - if( result && !is_player ) { - std::string draw_id = "overlay_" + Creature::attitude_raw_string( attitude ); - if( sees_player && !you.has_trait( trait_INATTENTIVE ) ) { - draw_id += "_sees_player"; + + // Get critter status disposition if character + const Character *pl = dynamic_cast( &critter ); + if( pl != nullptr ) { + if( pl->is_avatar() ) { + is_player = true; + } else { + sees_player = pl->sees( you ); + attitude = pl->attitude_to( you ); + } } - if( tileset_ptr->find_tile_type( draw_id ) ) { - draw_from_id_string( draw_id, TILE_CATEGORY::NONE, empty_string, p, 0, 0, - lit_level::LIT, false, height_3d ); + + // Draw overlay for shadow owner + if( !is_player ) { + std::string draw_id = "overlay_" + Creature::attitude_raw_string( attitude ); + if( sees_player && !you.has_trait( trait_INATTENTIVE ) ) { + draw_id += "_sees_player"; + } + if( tileset_ptr->find_tile_type( draw_id ) ) { + draw_from_id_string( draw_id, TILE_CATEGORY::NONE, empty_string, p, 0, 0, + lit_level::LIT, false, height_3d ); + } } + return true; + } else { + return false; } - return result; } bool cata_tiles::draw_zone_mark( const tripoint &p, lit_level ll, int &height_3d, diff --git a/src/cata_tiles.h b/src/cata_tiles.h index 754dbb990efd7..9a36846f756f9 100644 --- a/src/cata_tiles.h +++ b/src/cata_tiles.h @@ -529,7 +529,7 @@ class cata_tiles bool draw_critter_at_below( const tripoint &p, lit_level ll, int &height_3d, const std::array &invisible ); bool draw_critter_above( const tripoint &p, lit_level ll, int &height_3d, - const std::array &invisible ); + const std::array &invisible ); bool draw_zone_mark( const tripoint &p, lit_level ll, int &height_3d, const std::array &invisible ); bool draw_zombie_revival_indicators( const tripoint &pos, lit_level ll, int &height_3d, diff --git a/src/game.cpp b/src/game.cpp index 65a1006a440c4..22c2d7a29697c 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3799,8 +3799,6 @@ void game::draw_async_anim_curses() const nc_color nccol = anim.second.second; mvwprintz( w_terrain, p.xy(), nccol, ncstr ); - //shared_ptr_fast hit_cb = make_shared_fast( [&]() { mvwprintz( w_terrain, p.xy(), nccol, ncstr ); } ); - //g->add_draw_callback( hit_cb ); } } From 8ca51e38f686261e8980664fbe860afa149e4bfd Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sun, 2 Jul 2023 17:01:14 +0800 Subject: [PATCH 05/10] prevent drawing overlay twice --- src/cata_tiles.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 98455c4c2b7a0..280374a285bdf 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -3810,7 +3810,7 @@ bool cata_tiles::draw_critter_above( const tripoint &p, lit_level ll, int &heigh // Draw shadow if( draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, - 0, 0, ll, false, height_3d ) ) { + 0, 0, ll, false, height_3d ) && scan_p.z - 1 > you.pos().z ) { bool is_player = false; bool sees_player = false; From 4d5bd424c80580c36cdbcbe599ae414fdb0ea7a6 Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Fri, 7 Jul 2023 20:30:17 +0800 Subject: [PATCH 06/10] blinking indicators for curses --- src/game.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- src/game.h | 11 +++++++++++ src/handle_action.cpp | 18 ++++++++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 22c2d7a29697c..45f0dd9b37bee 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -3807,6 +3807,37 @@ void game::void_async_anim_curses() async_anim_layer_curses.clear(); } +void game::init_draw_blink_curses( const tripoint &p, const std::string &ncstr, + const nc_color &nccol ) +{ + std::pair anim( ncstr, nccol ); + blink_layer_curses[p] = anim; +} + +void game::draw_blink_curses() +{ + // game::draw_blink_curses can be called multiple times, storing each animation to be played in blink_layer_curses + // Iterate through every animation in async_anim_layer + for( const auto &anim : blink_layer_curses ) { + const tripoint p = anim.first - u.view_offset + tripoint( POSX - u.posx(), POSY - u.posy(), + -u.posz() ); + const std::string ncstr = anim.second.first; + const nc_color nccol = anim.second.second; + + mvwprintz( w_terrain, p.xy(), nccol, ncstr ); + } +} + +void game::void_blink_curses() +{ + blink_layer_curses.clear(); +} + +bool game::has_blink_curses() +{ + return !blink_layer_curses.empty(); +} + void game::draw( ui_adaptor &ui ) { if( test_mode ) { @@ -3819,6 +3850,7 @@ void game::draw( ui_adaptor &ui ) m.update_visibility_cache( ter_view_p.z ); werase( w_terrain ); + void_blink_curses(); draw_ter(); for( auto it = draw_callbacks.begin(); it != draw_callbacks.end(); ) { shared_ptr_fast cb = it->lock(); @@ -3830,6 +3862,10 @@ void game::draw( ui_adaptor &ui ) } } draw_async_anim_curses(); + // Only draw blinking symbols when in active phase + if( blink_active_phase ) { + draw_blink_curses(); + } wnoutrefresh( w_terrain ); draw_panels( true ); @@ -3936,13 +3972,13 @@ void game::draw_critter( const Creature &critter, const tripoint ¢er ) // Monster is below // TODO: Make this show something more informative than just green 'v' // TODO: Allow looking at this mon with look command - // TODO: Redraw this after weather etc. animations - mvwputch( w_terrain, point( mx, my ), c_green_cyan, 'v' ); + init_draw_blink_curses( tripoint( critter.pos().xy(), center.z ), "v", c_green_cyan ); } if( critter.posz() == center.z + 1 && ( debug_mode || u.sees( critter ) ) && m.valid_move( critter.pos(), critter.pos() + tripoint_below, false, true ) ) { - mvwputch( w_terrain, point( mx, my ), c_green_cyan, '^' ); + // Monster is above + init_draw_blink_curses( tripoint( critter.pos().xy(), center.z ), "^", c_green_cyan ); } return; } diff --git a/src/game.h b/src/game.h index 5b5ce3a5cde29..279d1dbce726b 100644 --- a/src/game.h +++ b/src/game.h @@ -257,6 +257,17 @@ class game std::map> async_anim_layer_curses; // NOLINT(cata-serialize) + public: + void init_draw_blink_curses( const tripoint &p, const std::string &ncstr, + const nc_color &nccol ); + void draw_blink_curses(); + void void_blink_curses(); + bool has_blink_curses(); + bool blink_active_phase = true; + protected: + std::map> + blink_layer_curses; // NOLINT(cata-serialize) + public: // when force_redraw is true, redraw all panel instead of just animated panels // mostly used after UI updates diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 80c368ad3b212..a358a4e8194af 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -216,6 +216,18 @@ class user_turn return elapsed_ms.count() > get_option( "ANIMATION_DELAY" ); } + std::chrono::steady_clock::time_point last_blink_transition = std::chrono::steady_clock::now(); + bool blink_timeout() { + std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now(); + std::chrono::milliseconds elapsed_ms = + std::chrono::duration_cast( now - last_blink_transition ); + if( elapsed_ms.count() > get_option( "BLINK_SPEED" ) ) { + last_blink_transition = now; + return true; + } + return false; + } + }; input_context game::get_player_input( std::string &action ) @@ -397,6 +409,12 @@ input_context game::get_player_input( std::string &action ) #endif } + if( g->has_blink_curses() && current_turn.blink_timeout() ) { + // Toggle blink phase and redraw + g->blink_active_phase = !g->blink_active_phase; + g->invalidate_main_ui_adaptor(); + } + ui_manager::redraw_invalidated(); } while( handle_mouseview( ctxt, action ) && uquit != QUIT_WATCH && ( action != "TIMEOUT" || !current_turn.has_timeout_elapsed() ) ); From 741a54e33511cddc269b359eb25d8b46f024526d Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Fri, 7 Jul 2023 20:41:42 +0800 Subject: [PATCH 07/10] update docs and py --- doc/TILESET.md | 3 +++ tools/json_tools/generate_overlay_ids.py | 1 + 2 files changed, 4 insertions(+) diff --git a/doc/TILESET.md b/doc/TILESET.md index 2617ae85b430f..0b973857e8282 100644 --- a/doc/TILESET.md +++ b/doc/TILESET.md @@ -82,6 +82,9 @@ Bashing animations (handle_action.cpp): `bash_effective` Bash effective but target not yet destroyed. `bash_ineffective` Bash not effective. +Shadows (cata_tiles.cpp): +`shadow` Drawn when creature present in tiles above. + #### Complex IDs Special prefixes that are used include: diff --git a/tools/json_tools/generate_overlay_ids.py b/tools/json_tools/generate_overlay_ids.py index 63c1e9cb778a2..3bbb6ec42186c 100755 --- a/tools/json_tools/generate_overlay_ids.py +++ b/tools/json_tools/generate_overlay_ids.py @@ -33,6 +33,7 @@ 'infrared_creature', 'run_nw', 'run_n', 'run_ne', 'run_w', 'run_e', 'run_sw', 'run_s', 'run_se', 'bash_complete', 'bash_effective', 'bash_ineffective', + 'shadow', ) ATTITUDES = ('hostile', 'neutral', 'friendly', 'other') From 025db64068834b32e8722999b49d950f4346d5d7 Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Fri, 7 Jul 2023 22:12:48 +0800 Subject: [PATCH 08/10] check sees for overlay --- src/cata_tiles.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 280374a285bdf..bc2f885f90365 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -3807,15 +3807,15 @@ bool cata_tiles::draw_critter_above( const tripoint &p, lit_level ll, int &heigh if( pcritter == nullptr ) { return false; } + const Creature &critter = *pcritter; // Draw shadow if( draw_from_id_string( "shadow", TILE_CATEGORY::NONE, empty_string, p, - 0, 0, ll, false, height_3d ) && scan_p.z - 1 > you.pos().z ) { + 0, 0, ll, false, height_3d ) && scan_p.z - 1 > you.pos().z && you.sees( critter ) ) { bool is_player = false; bool sees_player = false; Creature::Attitude attitude = Creature::Attitude::ANY; - const Creature &critter = *pcritter; // Get critter status disposition if monster const monster *m = dynamic_cast( &critter ); From 881acde88b34fc6de96d2209cd7facf3d2e7b545 Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sat, 8 Jul 2023 01:36:54 +0800 Subject: [PATCH 09/10] merge fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Jianxiang Wang (王健翔) --- src/cata_tiles.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index eafb5f9b95dfd..16282adf63d3e 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -1771,9 +1771,9 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int } else if( f == &cata_tiles::draw_critter_at ) { // Draw if( !( this->*f )( draw_loc, var->ll, p.com.height_3d, var->invisible, false ) && do_draw_shadow && - cur_zlevel == p.draw_min_z ) { + cur_zlevel == p.com.draw_min_z ) { // Draw shadow of flying critters on bottom-most tile if no other critter drawn - draw_critter_above( draw_loc, p.ll, p.height_3d, p.invisible ); + draw_critter_above( draw_loc, var->ll, p.com.height_3d, var->invisible ); } } else { // Draw From 58fd17f9bd6a363f964dfd05b61f29947819747e Mon Sep 17 00:00:00 2001 From: Rewryte <129854247+Rewryte@users.noreply.github.com> Date: Sat, 8 Jul 2023 01:38:34 +0800 Subject: [PATCH 10/10] add NOLINT --- src/game.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game.h b/src/game.h index 279d1dbce726b..e631a35800078 100644 --- a/src/game.h +++ b/src/game.h @@ -263,7 +263,7 @@ class game void draw_blink_curses(); void void_blink_curses(); bool has_blink_curses(); - bool blink_active_phase = true; + bool blink_active_phase = true; // NOLINT(cata-serialize) protected: std::map> blink_layer_curses; // NOLINT(cata-serialize)