From 83fda8fc5604d0dc87297c519f625b6620ab7830 Mon Sep 17 00:00:00 2001 From: Robert Jordan Date: Fri, 5 Jun 2015 12:38:52 -0400 Subject: [PATCH 1/2] Clear scenery tool now as options Can now choose to clear small scenery, large scenery, and/or footpaths. --- data/language/english_uk.txt | 5 +- resources/g2/14.png | Bin 0 -> 912 bytes resources/g2/15.png | Bin 0 -> 720 bytes resources/g2/16.png | Bin 0 -> 446 bytes resources/g2/17.png | Bin 0 -> 725 bytes src/sprites.h | 3 + src/windows/clear_scenery.c | 39 +++++++++++-- src/world/map.c | 107 +++++++++++++++++++++-------------- src/world/map.h | 4 ++ 9 files changed, 109 insertions(+), 49 deletions(-) create mode 100644 resources/g2/14.png create mode 100644 resources/g2/15.png create mode 100644 resources/g2/16.png create mode 100644 resources/g2/17.png diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 2106e1e777..f0c4a29ad1 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3604,4 +3604,7 @@ STR_5267 :{SMALLFONT}{BLACK}Culture and Units STR_5268 :{SMALLFONT}{BLACK}Audio STR_5269 :{SMALLFONT}{BLACK}Controls STR_5270 :{SMALLFONT}{BLACK}Miscellaneous -STR_5271 :{SMALLFONT}{BLACK}Twitch \ No newline at end of file +STR_5271 :{SMALLFONT}{BLACK}Twitch +STR_5272 :{SMALLFONT}{BLACK}Small Scenery +STR_5273 :{SMALLFONT}{BLACK}Large Scenery +STR_5274 :{SMALLFONT}{BLACK}Footpaths \ No newline at end of file diff --git a/resources/g2/14.png b/resources/g2/14.png new file mode 100644 index 0000000000000000000000000000000000000000..39d0aae67906f2e047c40538ee59aadea4293987 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr z;4JWnEM{QfI|Ravq8eTeARQ&H5hcO-X(i=}MX3x0iJ5sNdU>fO3MP66dZwwZMyU)8 z%zU0Mjv*f2Tdz!XUY#g%{Nul7?q=?Ttq%?a5N-> za7cltDWO1-qlvp&frH)g$DQxR*CKDnR_M>MeSh!!ocrJB-2c4iy_e?G{l_l#UUggh zro`&$pKYOL-}g`7JK60ef4P!b^w&=oa>q+|U+>-{uil=z`syk#@lvBl>3eVLWcRvl zRBMRX9jkr&Zq-gn`6;V^|CL-&evv2eC+DkgzvnkSa%Vblee2el77xp|OKLmDM*Hi3 zKmFvZ>5(fb46$?PyPWYCZ4kLWu|k4Z*>ltD=^r&*S~=Iu6ZD)=wfg_`>(>o03ORgd z=<-e6D?5+fMR7&8KsHxe?+bpmix=KI<_jutKKYTL?!YCypn)qlT}&>& zKT=hH_b3;V3G zz?h-%;=NyDjFX64lA_N|Cp0syzQl5Ti>Nc2amoB+41YrFA2GL|NbSNdnRxOm@{j5 zL|;-msI-{r!|aCNMNfWxcxl4tSX#pz;Ct(3j1JSa?bjCtEDByy{6BK3_1)$F-&rRX z?U~b8SXbY2=guEV1=i1dHg~Mwd2(0qiDQxvY(Lp5>h*`(Tb~v9FS6i(X#;18tbS-| zmmM>Q@Db@aSFZFU{YvvTaVRvZJt*9_m7!@t+M3S`>*8Y0FkD`@{Jy+cBZufO3MP66dZwwZMyU)8 zOn#m&jv*f2d#5feV=@$Qy&f8(ASlY=!kWa&v~f`qD^sIGNQgpMn1Xyg%BE92f4*%9Cb1YAuQTu*2rEKA@(-LReIJ38Pf4OC|?C)!h^UniaS3iGzWsO>9 zam2FA-|fz~Kem$fpS>rpWb>ape^VbQe6WyA`H*I)GkZ~?#EIL>bPJwooGAW2J&}RA z??QpysnDb8Aqk=qPGJH^@5Hw;@>qx^OB^`pJ@sG*Lr{yUQb?mf;khY|$?^uPHV7TH zFqvih^e_XXa*8NdVqCCfoV#`9iG*1_{xXfbvbip}8CAyy9(hyEv_goX?v7vnK1Z35 z1HZ$399JitooQs@&~V0n*YkM|kzCiybFck4u=s@N|7gYs(V`3w{$(1mMJP5LV5ttZ zWxU7W@TEa(#>dxBHB4VWztjCulI_mTHOb%hxN;?i|9RSVBV{rp^U|FR)7wkU_LU@u zEs{uh_&@BxRffKT1!sOleBXK6xbWe*1B}W(m%{%nWuL*sV0b-E{yG=a=T#Ah6(7d2 znzfbR>-XJZu)0fBVmrSY!QO>>pXSbiwHv0YjySMzA zTV69dBU$&I-Ny8AFIP?XqpuMM;}`Bo(|^84sYT$xd(I0YasoZI9Z7;ZG7D}NGdHw; zXK6{UY0D&uUEIW z%>JLYZmM9jL*vo^Pj}^hj+%c{;h5q3=9mOu6{1-oD!MfO3MP66dZwwZMyU)8 zj5eMwjv*f2d#76S9dh7tsa5WCaP;)_JjtkG!NeZ_%d9&B`AOBQcZ#TU*?7?%k_RE<&_HcgC=c>tn5HSB%cWGA0Ou^5=tabSe zJQrsq8?*k)eb9U7`KpCN-}k@b+@s6CzN+Eg9oqwIR_T4%=CjTV!Z literal 0 HcmV?d00001 diff --git a/resources/g2/17.png b/resources/g2/17.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1554de45d25aeff2cfe90ad2f3af132da2e824 GIT binary patch literal 725 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr z;4JWnEM{QfI|Ravq8eTeARQ&H5hcO-X(i=}MX3x0iJ5sNdU>fO3MP66dZwwZMyU)8 zOu?Qmjv*f2d#5UvOF4?PUUv;qP?{jT~=hjO#kv7 zAEynD2PE$8%GvFA&2Ck?Yofq|xpnuA9?XATdi2C&{`-w)$0eDMNM)YwR6S$x!)|Vv zua@#BY1VFQ0h=qQ3Yl2_#Lvvr`EfTZu}!qu@%x!tKYL4~3->k%AIRi<_OzxbvtZst zpA#RA-BNsP>^zU%e7Gyo=*`wUE2`hE>#kd&xK@xMk5Az4qOXq^SKrFh{`AA1jYHyf zRcmbNAc#XyoWUWJ+FErDOK`35SAYb9{b2+w;8w2d=d8luVz! zr1Co(^XWB)55CNhk=$@$&do0q8yEC=oqxqNdB0Ra6{qkk-yrsswDY{lDMlBo6+;+& z*q?m2ayXE?B~|?K%>z6tdxf1?cRiT3>Em8L0ofJYe!gt$J}wZ@Qs{lYm`|nQ*Vkjq z-4!1xeYRQ3%*iZ$c_rKOJBxNTd}h7=TJh1NmD@Y)r~Pwidgets = window_clear_scenery_widgets; - window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT) | (1 << WIDX_PREVIEW); + window->enabled_widgets = (1 << WIDX_CLOSE) | (1 << WIDX_INCREMENT) | (1 << WIDX_DECREMENT) | (1 << WIDX_PREVIEW) | + (1 << WIDX_SMALL_SCENERY) | (1 << WIDX_LARGE_SCENERY) | (1 << WIDX_FOOTPATH); window_init_scroll_widgets(window); window_push_others_below(window); RCT2_GLOBAL(0x00F1AD62, uint32) = MONEY32_UNDEFINED; + + gClearSmallScenery = true; + gClearLargeScenery = false; + gClearFootpath = false; } /** @@ -164,6 +176,18 @@ static void window_clear_scenery_mouseup() case WIDX_PREVIEW: window_clear_scenery_inputsize(w); break; + case WIDX_SMALL_SCENERY: + gClearSmallScenery ^= 1; + window_invalidate(w); + break; + case WIDX_LARGE_SCENERY: + gClearLargeScenery ^= 1; + window_invalidate(w); + break; + case WIDX_FOOTPATH: + gClearFootpath ^= 1; + window_invalidate(w); + break; } } @@ -220,7 +244,10 @@ static void window_clear_scenery_invalidate() colour_scheme_update(w); // Set the preview image button to be pressed down - w->pressed_widgets |= (1 << WIDX_PREVIEW); + w->pressed_widgets = (1 << WIDX_PREVIEW) | + (gClearSmallScenery ? (1 << WIDX_SMALL_SCENERY) : 0) | + (gClearLargeScenery ? (1 << WIDX_LARGE_SCENERY) : 0) | + (gClearFootpath ? (1 << WIDX_FOOTPATH) : 0); // Update the preview image window_clear_scenery_widgets[WIDX_PREVIEW].image = SPR_LAND_TOOL_SIZE_0 + RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16); @@ -242,7 +269,7 @@ static void window_clear_scenery_paint() // Draw cost amount x = (window_clear_scenery_widgets[WIDX_PREVIEW].left + window_clear_scenery_widgets[WIDX_PREVIEW].right) / 2 + w->x; - y = window_clear_scenery_widgets[WIDX_PREVIEW].bottom + w->y + 5; + y = window_clear_scenery_widgets[WIDX_PREVIEW].bottom + w->y + 5 + 27; if (RCT2_GLOBAL(0x00F1AD62, uint32) != MONEY32_UNDEFINED && RCT2_GLOBAL(0x00F1AD62, uint32) != 0) gfx_draw_string_centred(dpi, 986, x, y, 0, (void*)0x00F1AD62); } diff --git a/src/world/map.c b/src/world/map.c index b9852b9eb1..3d507f5b28 100644 --- a/src/world/map.c +++ b/src/world/map.c @@ -49,6 +49,9 @@ rct_xy16 *gMapSelectionTiles = (rct_xy16*)0x009DE596; bool LandPaintMode; bool LandRightsMode; +bool gClearSmallScenery; +bool gClearLargeScenery; +bool gClearFootpath; int _sub_6A876D_save_x; int _sub_6A876D_save_y; @@ -1173,50 +1176,70 @@ restart_from_beginning: type = map_element_get_type(mapElement); switch (type) { case MAP_ELEMENT_TYPE_PATH: -#ifdef CLEAR_SCENERY_REMOVES_PATHS - cost = sub_6A67C0(x, y, mapElement->base_height, flags); - if (cost == MONEY32_UNDEFINED) - return MONEY32_UNDEFINED; + if (gClearFootpath) { + cost = sub_6A67C0(x, y, mapElement->base_height, flags); + if (cost == MONEY32_UNDEFINED) + return MONEY32_UNDEFINED; - totalCost += cost; - if (flags & 1) - goto restart_from_beginning; -#endif + totalCost += cost; + if (flags & 1) + goto restart_from_beginning; + } break; + case MAP_ELEMENT_TYPE_SCENERY: + if (gClearSmallScenery) { + int eax = x * 32; + int ebx = (mapElement->type << 8) | flags; + int ecx = y * 32; + int edx = (mapElement->properties.scenery.type << 8) | (mapElement->base_height); + int esi, edi, ebp; + game_command_remove_scenery(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); + cost = ebx; + + if (cost == MONEY32_UNDEFINED) + return MONEY32_UNDEFINED; + + totalCost += cost; + if (flags & 1) + goto restart_from_beginning; + + } break; + case MAP_ELEMENT_TYPE_FENCE: + if (gClearSmallScenery) { + int eax = x * 32; + int ebx = flags; + int ecx = y * 32; + int edx = (mapElement->base_height << 8) | (mapElement->type & MAP_ELEMENT_DIRECTION_MASK); + int esi, edi, ebp; + game_command_remove_fence(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); + cost = ebx; + + if (cost == MONEY32_UNDEFINED) + return MONEY32_UNDEFINED; + + totalCost += cost; + if (flags & 1) + goto restart_from_beginning; + + } break; + case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: + if (gClearLargeScenery) { + int eax = x * 32; + int ebx = flags | ((mapElement->type & MAP_ELEMENT_DIRECTION_MASK) << 8); + int ecx = y * 32; + int edx = mapElement->base_height | ((mapElement->properties.scenerymultiple.type >> 10) << 8); + int esi, edi, ebp; + game_command_remove_large_scenery(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); + cost = ebx; + + if (cost == MONEY32_UNDEFINED) + return MONEY32_UNDEFINED; + + totalCost += cost; + if (flags & 1) + goto restart_from_beginning; + + } break; break; - case MAP_ELEMENT_TYPE_SCENERY:{ - int eax = x * 32; - int ebx = (mapElement->type << 8) | flags; - int ecx = y * 32; - int edx = (mapElement->properties.scenery.type << 8) | (mapElement->base_height); - int esi, edi, ebp; - game_command_remove_scenery(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); - cost = ebx; - - if (cost == MONEY32_UNDEFINED) - return MONEY32_UNDEFINED; - - totalCost += cost; - if (flags & 1) - goto restart_from_beginning; - - }break; - case MAP_ELEMENT_TYPE_FENCE:{ - int eax = x * 32; - int ebx = flags; - int ecx = y * 32; - int edx = (mapElement->base_height << 8) | (mapElement->type & MAP_ELEMENT_DIRECTION_MASK); - int esi, edi, ebp; - game_command_remove_fence(&eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); - cost = ebx; - - if (cost == MONEY32_UNDEFINED) - return MONEY32_UNDEFINED; - - totalCost += cost; - if (flags & 1) - goto restart_from_beginning; - - }break; } } while (!map_element_is_last_for_tile(mapElement++)); diff --git a/src/world/map.h b/src/world/map.h index 7d9337fa12..f91d8f31fe 100644 --- a/src/world/map.h +++ b/src/world/map.h @@ -246,6 +246,10 @@ extern rct_xy16 *gMapSelectionTiles; extern bool LandPaintMode; // Used in the land rights tool window to either buy land rights or construction rights extern bool LandRightsMode; +// Used in the clear scenery tool +extern bool gClearSmallScenery; +extern bool gClearLargeScenery; +extern bool gClearFootpath; void map_init(int size); void map_update_tile_pointers(); From cf61f68c8680398de0199e38716e4ccef6d6c6c9 Mon Sep 17 00:00:00 2001 From: Robert Jordan Date: Fri, 5 Jun 2015 12:39:40 -0400 Subject: [PATCH 2/2] Removed unused resource --- resources/g2/17.png | Bin 725 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 resources/g2/17.png diff --git a/resources/g2/17.png b/resources/g2/17.png deleted file mode 100644 index 8b1554de45d25aeff2cfe90ad2f3af132da2e824..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSkfJR9T^xl_H+M9WMyDr z;4JWnEM{QfI|Ravq8eTeARQ&H5hcO-X(i=}MX3x0iJ5sNdU>fO3MP66dZwwZMyU)8 zOu?Qmjv*f2d#5UvOF4?PUUv;qP?{jT~=hjO#kv7 zAEynD2PE$8%GvFA&2Ck?Yofq|xpnuA9?XATdi2C&{`-w)$0eDMNM)YwR6S$x!)|Vv zua@#BY1VFQ0h=qQ3Yl2_#Lvvr`EfTZu}!qu@%x!tKYL4~3->k%AIRi<_OzxbvtZst zpA#RA-BNsP>^zU%e7Gyo=*`wUE2`hE>#kd&xK@xMk5Az4qOXq^SKrFh{`AA1jYHyf zRcmbNAc#XyoWUWJ+FErDOK`35SAYb9{b2+w;8w2d=d8luVz! zr1Co(^XWB)55CNhk=$@$&do0q8yEC=oqxqNdB0Ra6{qkk-yrsswDY{lDMlBo6+;+& z*q?m2ayXE?B~|?K%>z6tdxf1?cRiT3>Em8L0ofJYe!gt$J}wZ@Qs{lYm`|nQ*Vkjq z-4!1xeYRQ3%*iZ$c_rKOJBxNTd}h7=TJh1NmD@Y)r~P