From ad3e6258daa0ee91dabd8fa384d8ad120e63e759 Mon Sep 17 00:00:00 2001 From: mumra Date: Sun, 23 Feb 2025 07:30:31 +0000 Subject: [PATCH] connected rendering both types of lichen (WIP) --- crawl-ref/source/rltiles/dc-mon.txt | 17 ++- .../rltiles/mon/fungi_plants/wolf_lichen.png | Bin 0 -> 3403 bytes .../mon/fungi_plants/wolf_lichen_n_s.png | Bin 0 -> 2897 bytes .../mon/fungi_plants/wolf_lichen_ne_sw.png | Bin 0 -> 3826 bytes .../mon/fungi_plants/wolf_lichen_nw_se.png | Bin 0 -> 3841 bytes .../mon/fungi_plants/wolf_lichen_w_e.png | Bin 0 -> 2785 bytes crawl-ref/source/tilecell.h | 10 +- crawl-ref/source/tiledgnbuf.cc | 25 ++-- crawl-ref/source/view.cc | 122 +++++++++++++----- 9 files changed, 122 insertions(+), 52 deletions(-) create mode 100644 crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen.png create mode 100644 crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_n_s.png create mode 100644 crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_ne_sw.png create mode 100644 crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_nw_se.png create mode 100644 crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_w_e.png diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt index 7f5a3c837c3..442725fb3ce 100644 --- a/crawl-ref/source/rltiles/dc-mon.txt +++ b/crawl-ref/source/rltiles/dc-mon.txt @@ -1214,15 +1214,20 @@ wandering_mushroom MONS_WANDERING_MUSHROOM deathcap MONS_DEATHCAP sleepcap MONS_SLEEPCAP +wolf_lichen MONS_WOLF_LICHEN +wolf_lichen_n_s MONS_WOLF_LICHEN_N_S +wolf_lichen_w_e MONS_WOLF_LICHEN_W_E +wolf_lichen_nw_se MONS_WOLF_LICHEN_NW_SE +wolf_lichen_ne_sw MONS_WOLF_LICHEN_NE_SW + %rim 1 -%sdir misc -mold_glowing1 MONS_WOLF_LICHEN -mold_glowing2 -mold_glowing3 -mold_glowing4 +wolf_lichen MONS_WOLF_LICHEN_MASK +wolf_lichen_n_s MONS_WOLF_LICHEN_N_S_MASK +wolf_lichen_w_e MONS_WOLF_LICHEN_W_E_MASK +wolf_lichen_nw_se MONS_WOLF_LICHEN_NW_SE_MASK +wolf_lichen_ne_sw MONS_WOLF_LICHEN_NE_SW_MASK %rim 0 -%sdir mon/fungi_plants cobalt_lichen MONS_COBALT_LICHEN cobalt_lichen_n_s MONS_COBALT_LICHEN_N_S cobalt_lichen_w_e MONS_COBALT_LICHEN_W_E diff --git a/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen.png b/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen.png new file mode 100644 index 0000000000000000000000000000000000000000..b488e9e173a005c41a2fc89180572e20d39743cb GIT binary patch literal 3403 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 h(yB~Iz^cOaH4`04-v literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_ne_sw.png b/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_ne_sw.png new file mode 100644 index 0000000000000000000000000000000000000000..72ce2cb2216baacae065aae694e35b3b6094c625 GIT binary patch literal 3826 zcmbVPc{r478|N!a)+j_W)5w}Ji^0rTV=QASA*LvenRl2NGiG7PsqD*_2&GVnlqF?N zNRccNC!#1@l4Q+N*}rj4o$veOT<4GPz25g(@89pfpL@BU>y33dY$YzDAi~GTCyuwq zIr4h&)+a2;Ygxg;i@Z*rZ9!l=(JAaeA`{>{M5cQJU_6cJ1vmmka*%&3V93X}Er9Aw zU=!@^up~N7o46&T&80DTXg)qe6E1^D@&VXjPr!@nX9St8c>)1b$wm-YU3<7a!yNFY zS_d-$r{KfRq+lNsh72(=1{-p*JOUcPCW5&%Uq2R>YXtd&7t0%OEyEz-KSbC*Mvy;^ zBG@~C&FM@4tgnrPlHhPSSRbQ}@YK^K>SH`nT3{p`iG;!RUkuFh_tz=P*gUkWiF=fqCxxXGL3rJZrE=m{eX|h`u;Fi9-YY*m#@~ zgtwzjrjoIG7>phoh4O^zkT57H9EBo6i2#}mg(E2d#*;$P=k5OD`8&M6xj7Pp(nnds z_016o3rmcJC9l=RAy8)!82x!<9KfUo0Ax!hod*8H$yn;&7=R`M`np6t z0E$7Oc^=S5QJ_SWJ`qasM4^#rI7SE1LqmSz$^WnOU_7H>Tbc4dne%IjmyTP*ze<5O z`Ky=!KVAhfd8OiQ^2nW!PgEL@JLJsmcXt(~EB452%(PE+)cM}eoNVszv-ef|NJ|zp z3(IzPP>9Ql>5>z`iKf^b(~x$22Xe@DIg_vH{Mx4Wb(EJBDsp?+Q&Vt6MB>{Z%%#31 zgL5?BSs#j5VBWZ*n)4THm-6IC-)}D5m<<`PIkU+%D7Do#e(&~l`ul;M$o{NC;nI$s znuExxB=OA7=spcmmqGJVgSZQWVc!Rp8ktQNofZ7-`(MgrZLQ!YPPnQQ;d%UN65B&K z=<@-xYatt8$Fh{pXG?91_6=G8wv%m6q{$ck? zODr>KxVYAskNebZvwifY6-jt+AuyU`5MA<0_$oa*M&=KE>`0+P3%h0*_(u>rb0X4y8hgUreDg#(}KnK8qk|w zh5kn9*>`~5uMsW{sjG-Md{occeqYMV+4JN=*RLYiI_>I9j4aM_7o225R{W%f>eL!$ zchY_b?EAi^(1PBsYVDuSR}(z~5c((UqiCw_S!S&0L&wMGk~3$o zCjBT^pPo)`*Of8rz)Tu#Hr|~#>=NwhSE&-=ZZ3t*nSoiUK8E2MCZK<8#M2d4s|=NJ-V?JUjGE67ag2{aSxABlPKWj$1`HI}ZdATdzv|Pe6wgqurQ`zcXRZw&+OU(v7$5g`fXFRGWzw>u;h*?fB z0T}PrRcgOI)KXeo!XD^F?|5oY)x7rlO5qtF`}L=hzLv4URW8*a5Z&Bm+qlgoZlTORF*8W z-Ats<;(OuXSpWR$^X0e@lAA=CA^x~$K0HZ1#c4uPBIBw=zC-%T#8CSOfiPo;!=0${ zqX(pXW>F8~7eBt3{MYG^L#wX*{U1{Sh%HWn{E9HqEu%7OeLUmGoM*=sIw5gSN$rA4 z+!ci4YRfGdLG)z^P<+tja*t{4h=Q4y)RB!Dc$ARhj*SL_0BHS=u`}a~AhO(SsTvdRHOd-XfmoDz7OhsjH;F6AvkU^4UNAm{h3# zcU6Iz+g*IfvP!npLfm)Z#GCIKR@U6cAtvN~UP>;FArAGDs4h;vbZ~0p+(Ce7Q-i)O zVy6?)IaoHQcV)EBqk_m*kFQo8uq_r3-z;sD-B`Di*c&WDEks^!@v?=St_cuASnWIZ z?rzR+9BYcmLj$!DA5A9>)W{8@H!)&O;p&2puq*YNqFbWGaOC?WrwIXR^_D!j)I7)c zL-$Iwi;V<6IL%`TiIgDpuc;3!ti=R}Hp{ez2}CsZ6%PJj=D~ z=pdUSr*9bg+Foc+h>|@iUqVo>H;Lq0=``JmBIjToo6DMote5{)G^C}s+xd9PWTe;X z?SntE#R*b~LpRvtodvmy?~M!xefHKiCSk(#Z+2wg>0Iok#}!U2a?^UQa`H58wPABU zjGgWhZN8BzXDB6a?0Nr94NZApPTTf{{hDJFpI_KSMN1O8x~*cehL))jv3IK;_HBb7 zx!Y4qaQ7;~pZ``I8BUid3&PL;?&IC-l;WKvD1R}rr0G`G%OaLdh8U>hs4O#g(#gx= zjdy9m?abwMch8rCpx*N@akaNaL9?r7mPLo-R=zkLKQ-#lXV!H|6Oc>o-p)#Lun~B6 zA}MOhwe{6&JLaRtM8m+l&*K77Y4kdD=yvh_8y8kN*vF90=^Mtr161ksXA!1}VLQOC z84b2aDE0h^j2v@`8E%#(`@)OspTe>F%gN2g<+x+6oYmj=6gGYEbP4;B)Gm=@9$Fvs zT>KTwPu@6jx9!q^!hG<3U8$^AIV9GhfPA_}XK}#dE6eafz^1y^ibH!%)k1ynigxHO zwZobPCiZw(>$Xe#JK9}v0h4KQVQ>>WQ(5ewxo8sp^w&K~S{g4brRp1A*!u?V{pM`*X$I`xYM(k z`IRLyF0G~Liy7f&o_lH3+?7_&fE!}~8oy_6rG-wF*xE%04D4d6)PdZfya$q1Yj>6*-8jIIXAfK9A znEbelrD^2+jmu1$%9EqK-!71rw=H?<-0k?yS>j3m{4=tmlHz)4dGjY@X9Syu?^Lc0 z>*b0`WhdbC8<%$?ORvGS&TiCdr6UTjms^;5uZkbiQ=@8cOTGN02JO1P=V08Rhc^Fg zCvu+$sfAuSow0NCNxg$dFUL6JzQ;m@Dc$3O&uwAV1pCipy|iF@_zKGJsO(!efILvQ>WfBA4JN26+}N{w*v+0YZE z3a`@6>=6@v)_VC;M%pfQd~3vo5VTdt8=bmpgs)@w8NDmEaUWfZWDY8Mw0@gy9sLA~ z$QM=YOK7WR9@qJ~AIoaJsEKV?jp}DtRWGJ{h1%07-9T4ftXHP- ziPFr?QNw`2w-;9mmSVaDuBw4kXQH1JU6uAv&{;EdtFq83`v_~d)Ph1s7KgX5e5b%e gG}XG+Jop9qU@JXdbt4P!w*Er#7Kd@gW~amc1AXqUYybcN literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_nw_se.png b/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_nw_se.png new file mode 100644 index 0000000000000000000000000000000000000000..a214b8c55b0ed913184f0f887aa19037dc593bb9 GIT binary patch literal 3841 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 literal 0 HcmV?d00001 diff --git a/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_w_e.png b/crawl-ref/source/rltiles/mon/fungi_plants/wolf_lichen_w_e.png new file mode 100644 index 0000000000000000000000000000000000000000..23106576f78b13468b8c09e11cf3d789701c5f16 GIT binary patch literal 2785 zcmbVOc{o&iA0MS5UfFW3WoAfMIkTC}g2p_&uQmNQH-GiC;ZB3CKdLQy?eWZ%=x zk|??*L{Y?5DTO2rGqfLU|Im^2GW=jAswIz1hO%VP4yCb zIXaLS++ZYa4TBT~^Tccj#Dpy3(HKWSA&d?NusNoPnZ{-WjLkGfc$PJP0`?suJYtIY(gjQEB9co1TRd?t(J zW<~j-PP{Wk1PX;b5(*U_9*zt*L~{87C=8KEM4_=LEEW(W06_#tND~1ZfzG-FD^S4T zvw1=`mjhdqNTYK@g{BCxv446I%yV@7OE5?9BUa+5p+qzu3WG$Wf`ivw`;Ha}-N65v z@waFJHG&7C+&}?0l+O^Sgr&1i7KiVj6|Diq){va}Y;j&_K~`KwXfVhT+F6+*#5YJL zn@KVv5{(Er933!Z5ODw+hob>BkiZ1cSQbd6vsifX?Yf-5Xdr$M%?JdDID$9= zcpM9$;qWwoMaL1a1T@hQG$J5=@R|Q_@K9o-P-~U)Kb5n7BreCb1zq1*73w8d#c5i%B@Ns06S6P97L{1Ql_BQE@(wJ1!H7X zH_P~NZ9F32?aSU5te%*Ps!JC4Yu!Pt zR6w@;D)Oyr=(f3YomgV~T+t1ictAP<=j*L7+l9tmdEA!Y-)a~~m|c>#zynP;cdmRZ z^k>308eS}FkqCWoQKTK*lPV}~d^!PKL?{q1$h*y*a@ zt%VC8ChhYl^vU;68S*@Q<17t(_jHFM5Wc*w1axeP#LeVd7BDHRacK zvTXNg((#Qpy8j!RIKZCKo5Q2J5E z5Tp;sef}L3MZeoT(fI^zqGl1^CglEZVahDR|`P;ZNF+h)A9^Pq1>^`&6D z9b@)+k;kgM=W53f_nGD#N*Eh_r9AXHr#;>JOK)jg^|zB@AC}VKkx}Gx0b5#KYH%sG ze^BmPawLBWVe7e4sfg~&A5>FK1e%bf=#NVZyB>JDwzzI;DfetqNpjIwAATsQ$nqX3 zk(*Wyc5l=zUv8hADPJKS+<ycmL&jdKq#}eqtF&#gp>rY|Q4T?k*hf5bLMgEl|_hw`bqQlCkq8K!djiecZ~Ud zZi#CIXd^(_6cz`y{`v`(?L@yD$7x#LujCiqfAz$LJZyPcsD8HZ?ZCY1KJ&bq$4B)N zWZR-#>sw8=k7w~8e5O1(*kha76tO=gUPPtyMrD3kjOW*GjM8&yxW5_M_9Rc`hUhmH zLpW4M>zTIe3>xyX>4t$Ui@yIn{QBrD``(tm*VQ92kk9ks3ag8R`Ej)eo+Q^^v)%e0 z`P9j_L&@n07rdG~T6!C06C~tgLw0}Z#l|x^$;T3@;?(*#eH}6IG<4e3?)%T6({j)a)J$FNrWj=Di}Pj=Hc6l>Rm!v9 zH#+WQ;pdFY72DyRh09JuX4dmB=D?@OJi^JUDx}aCyD5vax*xA+1FWoigmdM4lk$+70RVM2smN9n^T#oaSP&x4acT)o`Or z0bi6?xD*5T;vwE-b``e9snmNZCDf6OENGA`L9TQZoN*?!G z6lM4XlHmj~vPJf?Q+QoiSM*GPVl zPvL3Yknan^p-pKWvTe%0IPcSUfvIhME@Y2wbF#|7HO>}k-%7gMyqX$YT^oILSE}2jV3z?VKuerde1da`4rp5JOgk0iDylK1Yo{cT0(Qx@42 z*sJ04^jF?Opf9gO<=mFs<|t0k$Ql2zucp(xw>MLI1&}!$Z-$&71(|+3&y|2ec5VXT UI#bc`wVzHqYbUEJ3;$pK15PZf icons; - // Four tiles to use as border connectors; they correspond to NE,E,SE,S in - // order (the other 4 borders are handled by tiles to the north and/or west). - FixedVector fg_underlay = {0,0,0,0}; + + + // Four tiles to use to render around the edges and corners; they correspond + // to S-SE-E-NE in order. For performance each tile only deals with 4 edges, + // the other 4 are handled by the tiles to the N, NW, W and SW. + FixedVector edges = {0,0,0,0}; + FixedVector edge_masks = {0,0,0,0}; bool operator ==(const packed_cell &other) const; bool operator !=(const packed_cell &other) const { return !(*this == other); } diff --git a/crawl-ref/source/tiledgnbuf.cc b/crawl-ref/source/tiledgnbuf.cc index 21601e88519..ad145041e05 100644 --- a/crawl-ref/source/tiledgnbuf.cc +++ b/crawl-ref/source/tiledgnbuf.cc @@ -50,12 +50,12 @@ void DungeonCellBuffer::add_glyph(const char32_t &g, const VColour &col, const V m_buf_glyphs.get_font_wrapper().store(m_buf_glyphs, sx, sy, g, col, bg); } -static const struct coord_def _buf_offset_coords[] = { - {0,16}, {16,16}, {16,0}, {16,-16}, -}; - void DungeonCellBuffer::add(const packed_cell &cell, int x, int y) { + static const coord_def edge_offsets[] = { + {0,16}, {16,16}, {16,0}, {16,-16}, + }; + pack_background(x, y, cell); const tileidx_t fg_idx = cell.fg & TILE_FLAG_MASK; @@ -69,14 +69,17 @@ void DungeonCellBuffer::add(const packed_cell &cell, int x, int y) for (int n=0; n < 4; n++) { - if (cell.fg_underlay[n]) + if (cell.edges[n]) + { + m_buf_doll.add(cell.edges[n], x, y, 1, false, false, + edge_offsets[n].x, edge_offsets[n].y); + } + if (cell.edge_masks[n]) { - m_buf_doll.add(cell.fg_underlay[n], x, y, 1, false, false, - _buf_offset_coords[n].x, _buf_offset_coords[n].y); - // Mask layer at lower z-index (to add rim around the connector) - m_buf_doll.add(cell.fg_underlay[n] + TILEP_MONS_COBALT_LICHEN_MASK - - TILEP_MONS_COBALT_LICHEN, x, y, -2, false, false, - _buf_offset_coords[n].x, _buf_offset_coords[n].y); + // Add mask layer at lower z-index. This allows us to build up an + // outline for a shape that is made up of several tiles and edges. + m_buf_doll.add(cell.edge_masks[n], x, y, -2, false, false, + edge_offsets[n].x, edge_offsets[n].y); } } diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc index 69fe3a97c5f..59ce9f3959a 100644 --- a/crawl-ref/source/view.cc +++ b/crawl-ref/source/view.cc @@ -1696,41 +1696,99 @@ crawl_view_buffer view_dungeon(animation *a, bool anim_updates, view_renderer *r return vbuf; } -static void _pack_underlays(coord_def gc, packed_cell& cell, const monster_info& mon) +static bool _has_edge_tiles(monster_type type) { - if (!in_bounds(gc)) + switch (mons_species(type)) + { + case MONS_WOLF_LICHEN: + case MONS_COBALT_LICHEN: + return true; + default: + return false; + } +} + +static int _determine_edge_tile(const monster_info& origin, + const monster_info& connected, int dx, int dy) +{ + auto species = mons_species(connected.type); + if (species != mons_species(origin.type)) + return 0; + + switch (species) + { + case MONS_WOLF_LICHEN: + return dx == 0 ? TILEP_MONS_WOLF_LICHEN_N_S + : dy == 0 ? TILEP_MONS_WOLF_LICHEN_W_E + : dy == 1 ? TILEP_MONS_WOLF_LICHEN_NW_SE + : TILEP_MONS_WOLF_LICHEN_NE_SW; + case MONS_COBALT_LICHEN: + return dx == 0 ? TILEP_MONS_COBALT_LICHEN_N_S + : dy == 0 ? TILEP_MONS_COBALT_LICHEN_W_E + : dy == 1 ? TILEP_MONS_COBALT_LICHEN_NW_SE + : TILEP_MONS_COBALT_LICHEN_NE_SW; + // Shouldn't get here unless _has_edge_tiles is wrong + default: + return 0; + } +} + +static int _mask_tile_for(int tile_idx) +{ + if (tile_idx >= TILEP_MONS_WOLF_LICHEN && tile_idx <= TILEP_MONS_WOLF_LICHEN_NE_SW) + return tile_idx + (TILEP_MONS_WOLF_LICHEN_NE_SW - TILEP_MONS_WOLF_LICHEN) + 1; + + if (tile_idx >= TILEP_MONS_COBALT_LICHEN && tile_idx <= TILEP_MONS_COBALT_LICHEN_NE_SW) + return tile_idx + (TILEP_MONS_COBALT_LICHEN_NE_SW - TILEP_MONS_COBALT_LICHEN) + 1; + + // Special cobalt units all just use the base mask + if (tile_idx >= TILEP_MONS_COBALT_LICHEN_EYESTALK + && tile_idx <= TILEP_MONS_COBALT_LICHEN_SAC) + { + return TILEP_MONS_COBALT_LICHEN_MASK; + } + + return 0; +} + +static void _pack_edges(coord_def gc, packed_cell& cell, const monster_info& mon) +{ + if (!in_bounds(gc) || !_has_edge_tiles(mon.type)) return; - if (mons_species(mon.type) == MONS_COBALT_LICHEN) + int edge_num = -1; + for (adjacent_iterator ri(gc, true); ri; ++ri) { - int underlay_num = -1; - for (adjacent_iterator ri(gc, true); ri; ++ri) - { - int dx = ri->x - gc.x; - if (dx < 0) - continue; - int dy = ri->y - gc.y; - if (dy < 0 && dx < 1) - continue; - underlay_num++; - cell.fg_underlay[underlay_num] = 0; + // Get the delta to this tile + int dx = ri->x - gc.x; + // Not interested in NW, W, or SW - those edges are handled by the + // tiles in that direction + if (dx < 0) + continue; + int dy = ri->y - gc.y; + // We also let N edge be handled by tile to the N + if (dy < 0 && dx < 1) + continue; + // Now this is one of the 4 edges we handle + edge_num++; + cell.edges[edge_num] = 0; - if (!map_bounds(*ri)) - continue; - const map_cell& adj_knowledge = env.map_knowledge(*ri); - if (!adj_knowledge.seen() && !adj_knowledge.mapped()) - continue; - // Now we know this is a connection we *might* want to check, see if - // there's an applicable monster there first - if (!adj_knowledge.monsterinfo() - || mons_species(adj_knowledge.monsterinfo()->type) != MONS_COBALT_LICHEN) - { - continue; - } - cell.fg_underlay[underlay_num] = dx == 0 ? TILEP_MONS_COBALT_LICHEN_N_S - : dy == 0 ? TILEP_MONS_COBALT_LICHEN_W_E - : dy == 1 ? TILEP_MONS_COBALT_LICHEN_NW_SE - : TILEP_MONS_COBALT_LICHEN_NE_SW; - } + if (!in_bounds(*ri)) + continue; + const map_cell& adj_knowledge = env.map_knowledge(*ri); + if (!adj_knowledge.seen() && !adj_knowledge.mapped()) + continue; + // Now we know this is a connection we *might* want to check, see if + // there's an applicable monster there first + auto connected = adj_knowledge.monsterinfo(); + if (!connected) + continue; + int edge = _determine_edge_tile(mon, *connected, dx, dy); + if (!edge) + continue; + cell.edges[edge_num] = edge; + // Add mask layer at lower z-index. This allows us to build up an + // outline for a shape that is made up of several tiles and edges. + cell.edge_masks[edge_num] = _mask_tile_for(cell.edges[edge_num]); } } @@ -1763,7 +1821,7 @@ void draw_cell(screen_cell_t *cell, const coord_def &gc, cell->flash_colour = BLACK; cell->flash_alpha = 0; if (cell->tile.map_knowledge.monsterinfo()) - _pack_underlays(gc, cell->tile, *cell->tile.map_knowledge.monsterinfo()); + _pack_edges(gc, cell->tile, *cell->tile.map_knowledge.monsterinfo()); #endif // Don't hide important information by recolouring monsters.