From bef788512441f629e68bfc98b25f6ae56c925144 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 2 Jun 2020 15:49:46 +0200 Subject: [PATCH] wild mouse and no brakes --- TouchyTickets/Attractions/Attraction.cs | 15 ++------ TouchyTickets/Attractions/AttractionType.cs | 33 +++++++++++++++--- .../Content/Localization/Localization.json | 17 +++++---- .../Content/Textures/Attractions.aseprite | Bin 1518 -> 1992 bytes .../Content/Textures/Attractions.png | Bin 2541 -> 3593 bytes TouchyTickets/Content/Textures/Ui.aseprite | Bin 1619 -> 1683 bytes TouchyTickets/Content/Textures/Ui.png | Bin 2536 -> 2646 bytes TouchyTickets/GameImpl.cs | 2 +- TouchyTickets/ParkMap.cs | 12 ++++--- TouchyTickets/Ui.cs | 4 +-- TouchyTickets/Upgrade.cs | 3 +- 11 files changed, 53 insertions(+), 33 deletions(-) diff --git a/TouchyTickets/Attractions/Attraction.cs b/TouchyTickets/Attractions/Attraction.cs index 6ffd768..b2a8ead 100644 --- a/TouchyTickets/Attractions/Attraction.cs +++ b/TouchyTickets/Attractions/Attraction.cs @@ -25,21 +25,12 @@ namespace TouchyTickets.Attractions { this.Type = type; } - public IEnumerable GetCoveredTiles() { - for (var x = 0; x < this.Type.Width; x++) { - for (var y = 0; y < this.Type.Height; y++) { - if (this.Type.Area[y, x]) - yield return new Point(x, y); - } - } - } - public float Update(GameTime time, TimeSpan passed, ParkMap map, Point position) { var genRate = this.Type.GetGenerationRate(); - // only apply dynamic upgrades here, static ones go into the type! + // only apply dynamic upgrades here, static ones go into the type if (Upgrade.FoodCourtModifier.IsActive() && this.GetSurrounding(map, position, AttractionType.FoodCourt).Any()) - genRate *= 3; + genRate *= 2; this.ticketPercentage += genRate * (float) passed.TotalSeconds; var amount = this.ticketPercentage.Floor(); @@ -52,7 +43,7 @@ namespace TouchyTickets.Attractions { } public IEnumerable GetSurrounding(ParkMap map, Point position, AttractionType type) { - foreach (var tile in this.GetCoveredTiles()) { + foreach (var tile in this.Type.GetCoveredTiles()) { foreach (var dir in Direction2Helper.Adjacent) { var other = map.GetAttractionAt(position + tile + dir.Offset()); if (other != null && other != this && other.Type == type) diff --git a/TouchyTickets/Attractions/AttractionType.cs b/TouchyTickets/Attractions/AttractionType.cs index f97007e..d0b1c67 100644 --- a/TouchyTickets/Attractions/AttractionType.cs +++ b/TouchyTickets/Attractions/AttractionType.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Microsoft.Xna.Framework; using MLEM.Textures; using Newtonsoft.Json; @@ -8,9 +9,10 @@ namespace TouchyTickets.Attractions { public class AttractionType { public static readonly Dictionary Attractions = new Dictionary(); - public static readonly AttractionType Carousel = Register(new AttractionType("Carousel", new[,] {{true}}, Attraction.Texture[0, 0, 1, 1], 0.5F, 50)); - public static readonly AttractionType FoodCourt = Register(new AttractionType("FoodCourt", new[,] {{true, true}}, Attraction.Texture[1, 0, 2, 1], 1.1F, 300)); - public static readonly AttractionType FerrisWheel = Register(new AttractionType("FerrisWheel", new[,] {{true, true}, {true, true}}, Attraction.Texture[0, 1, 2, 2], 3.5F, 2000)); + public static readonly AttractionType Carousel = Register(new AttractionType("Carousel", RectArea(1, 1), Attraction.Texture[0, 0, 1, 1], 0.5F, 50)); + public static readonly AttractionType FoodCourt = Register(new AttractionType("FoodCourt", RectArea(2, 1), Attraction.Texture[1, 0, 2, 1], 1.1F, 300)); + public static readonly AttractionType FerrisWheel = Register(new AttractionType("FerrisWheel", RectArea(2, 2), Attraction.Texture[0, 1, 2, 2], 3.5F, 2000)); + public static readonly AttractionType WildMouse = Register(new AttractionType("WildMouse", RectArea(3, 2), Attraction.Texture[2, 1, 3, 2], 10, 5000)); public readonly string Name; public readonly bool[,] Area; @@ -36,18 +38,39 @@ namespace TouchyTickets.Attractions { public float GetGenerationRate() { var genRate = this.generationPerSecond; - + if (this == FerrisWheel && Upgrade.FerrisWheelModifier.IsActive()) genRate *= 4; - + // this should contain all car-based coasters + if ((this == Carousel || this == WildMouse) && Upgrade.RollerCoasterModifier.IsActive()) + genRate *= 2; + return genRate; } + public IEnumerable GetCoveredTiles() { + for (var x = 0; x < this.Width; x++) { + for (var y = 0; y < this.Height; y++) { + if (this.Area[y, x]) + yield return new Point(x, y); + } + } + } + private static AttractionType Register(AttractionType type) { Attractions.Add(type.Name, type); return type; } + private static bool[,] RectArea(int width, int height) { + var ret = new bool[height, width]; + for (var x = 0; x < width; x++) { + for (var y = 0; y < height; y++) + ret[y, x] = true; + } + return ret; + } + public delegate Attraction Constructor(AttractionType type); public class Converter : JsonConverter { diff --git a/TouchyTickets/Content/Localization/Localization.json b/TouchyTickets/Content/Localization/Localization.json index 53bf7e2..49d40c0 100644 --- a/TouchyTickets/Content/Localization/Localization.json +++ b/TouchyTickets/Content/Localization/Localization.json @@ -6,18 +6,21 @@ "Carousel": "Carousel", "FoodCourt": "Food Court", "FerrisWheel": "Ferris Wheel", + "WildMouse": "Wild Mouse", "MapSize1": "Big Park", - "MapSize1Description": "Increases your park's buildable area", + "MapSize1Description": "Increases your park's buildable area.", "MapSize2": "Bigger Park", - "MapSize2Description": "Increases your park's buildable area more", + "MapSize2Description": "Increases your park's buildable area more.", "MapSize3": "Biggest Park", - "MapSize3Description": "Increases your park's buildable area even more", + "MapSize3Description": "Increases your park's buildable area even more.", "MapSize4": "Biggester Park", - "MapSize4Description": "Increases your park's buildable area even more", + "MapSize4Description": "Increases your park's buildable area even more.", "MapSize5": "Biggestest Park", - "MapSize5Description": "Increases your park's buildable area to the maximum", + "MapSize5Description": "Increases your park's buildable area to the maximum.", "FoodCourtModifier": "Tasty Treats", - "FoodCourtModifierDescription": "Triples ticket sales for all attractions adjacent to food courts", + "FoodCourtModifierDescription": "Doubles ticket sales for all attractions adjacent to food courts.", "FerrisWheelModifier": "Crowded Pods", - "FerrisWheelModifierDescription": "Quadruples ticket sales for ferris wheels. Who cares about fire safety?" + "FerrisWheelModifierDescription": "Quadruples ticket sales for ferris wheels. Who cares about fire safety?", + "RollerCoasterModifier": "No Brakes", + "RollerCoasterModifierDescription": "Increases the speed of all car-based attractions, doubling their ticket sales." } \ No newline at end of file diff --git a/TouchyTickets/Content/Textures/Attractions.aseprite b/TouchyTickets/Content/Textures/Attractions.aseprite index d53c33f2096c42deff87e22cb24208e8ef1cf551..442fb40532b131fa2ec933611ba60b4f15f9746e 100644 GIT binary patch delta 1500 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 Hu0mjfRw>Kf delta 2217 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 diff --git a/TouchyTickets/Content/Textures/Ui.png b/TouchyTickets/Content/Textures/Ui.png index 77eef692096d922029a4d19bfbd8b9859f04789d..d14ab4f614b01f227120794f25b8d577b7fd1782 100644 GIT binary patch delta 2437 zcmV;033~SE6V?=vFnwAe)qDZR9YU-?_PFJvKhD#6lMVV zr*)bMoORie|9>>RiCb>EG5NvP{)lM*^ACUgizhprrK%uGpZ$R%JrH9@$0DM#9TD-+w+G_BZyw6NZ~gv>!r)KS{eMzvd0h6+J0l|E^Ym zi3kk=kVR&MX5sK0aG_!>ju`BceJ3 z$OnEz#AWZiGiF|SEFvPx<*BOU%jHUDp&@{p3}C_f`z^|9X9OB$0O?adBH|Z22IKZG zjK(i^41d<8|9kg$MMT8=*Uv<$v^-{Bd8{t*BPzk4){Us&4;Pz`i0YC5h=uF#H!3Uj z_0^39w8{Wh_jShc@!9ONs2lL}ANC|^BM?yu`26?1`@7jhBKl+N_fN!@FRd#4EE)s2t{7@}x0QMaDPxN2a6XnT?X7v}uo|-AaN-(EWd+mPKOGp3nPy2jU@ciyM z3xgo1std5c=U-8toQMau_h%Kp_2sd;gC5x4ANOp2Db{p1USspX_Wr_SkDN^6%HzFJ zo`0EH@TI}&)4w*=PaA;QIyQZNV{PyLuEKu)9rsRkr2Bw3 z)hz{%h^i-hJ{xG}f$jb0J>YBIaqm<|qkev~eQ>eL8i3k0ciC0Uw=NR^ZovZhcB;c93CFNJo}#SLagadvSU-F zE~z*y1%+b(?Z`jz)9p0iYX=8w>jFzd;TS-X+91vcdAhGQ3rM%qY@yk#0dW3h(|{2X z{U3aD9l){aj#$&3WS>Q4wfiEf8-}8KM@}a3wiheQ5Bx$9EUs)J(9P@D#m*O>%YW@k z;>gMTXHi-8zKFy_|127N>i?3=a@Rj4ei+L}=c~QOKKieJ$KFFP3w~Gv>V6Vz?D#7& zF*#XRv8b$_{rU2hy~Y?|DXD7!I)6J?L`+6>u5RxgfOgFuAIr`SEDd!Hz^YPrynO6< zL_~D;l-fSgC2uqy)H^ZrdfmB!#aGw`$eVff)rJRmU2;i8RD%Dtxz}4>toGc%;%e9h z$Xix0WcNnRoWbiWO7WIc<#>HXLDukEx#78i#Z&h#z^YRBIlI`oJU4LWT7Px{&cw>z z;xU7nsk1*fu<+_KfX>bp^E%P0&enD2dv4&|XgUi}WcIbnVBcGpzon{tVzS)wVrBtg zX*uIAK<8U4fj^%?KwSV>S{AGe&<9v5x z)e%t%$ZOtldCT?w3uR?*Z+{#-`cfPk_cPtFn5xDAysQHkm#hI;+1-OOS)o?z(Ht=tI=9ziV z-T!8AFgw>LM@OvzfF+_Z7>C!cO(G)J^z=kT#IdQ$y#3~pkuwh7-wX~W8#Zr_h=`S| zR>f1>wiPx4zrE{*Gk?l7KK_$E8WK25O@k>D1= z>TKLFkbL7SUw@8>h(G=Mr*Yji*F;3b(+3YmL_~gH`aQn4J$Yi^p{ncG-qY%pjbCw| zo}FuT>u|wao)7+=Lqo|gPk+w`f4(uOt>35-_~htl$4_?bNIv)b-`9-+JaX%;ao53v z*>O+oJJj)wh`L7TLs!48;f<%kU)y-)@2S+)c;S);0DmHuADf!08STHcu2Q}+sITAH z+qZ3tM{d0}KDK2`Oq@6ogPS(h1%K)@5AKSHh`R&u3!Bs`S;<&ao53v9lzVUHU7L~N5kOH zn?5yH^?$u~yVmBBk&Z_9RO(vM@DDgW2C#W#q$8d3OQlc!qH%zBga4kdezhYaS_XY( z4Zy3h;j`TlaYfvn?YSZ%qH6o@h}ieD>4+O{Nb+j|YVT=!c21fPEo5_UY4FU<%tk!& zOw)tTB>3C$-^rPHdv8~})w5%o-P2PCUg~)F;9<2%ch@Dc_qhYvzM?X?STzlTbbzhh zWx(?Z{?wzNzCJ14*xq5~za$m`!2)Qw6gVAJOPy)jKOevR(fit3U+}5B|0ek1TpC`x zHc8(GtQ{XH^6-NXdTS6aB*SahwiW!75edH-u-N_wXD$~tVyo2S00000NkvXXu0mjf DqcjB% delta 2341 zcmV+=3EKA76zCI>Fn-`nyGC15Fcbyl5?Y zQBVoh7B3>yA_&DwD*jVT6;i3WNU0@i4eg?~P!QCbi_j{F7Sf^^ywKW23t4JvqKRuw zHfDD=>&EEm#dwZqX3oq`b|=}bJ`aR5=li~M&gA0#&inn$Mt=ZbT5Uyzx1E1(ax5P9 z&|A9;p9jp2_IeeUFJIQu2feWU&6eJ;8Eu>H+=Vf&le`E<)JU%sqiW^v_ZmnKJZoXQ(p<|W3?Tou zPBVcSm+g74?thoK^0G^l2iNsQMDxdI|N5dgJIqi;5T$Sbywb=>L_~D=_O_(#h3#(^ z&INql2}JzzckS`BA0KJ>#cy9b9Q8VZ^zEO0kJ6Da6o6Va89*Ae&6LliEH4fI>uw&3 zhwkf-;l0BVQ9h4|c<8?Vxb5e=vd`-tI8Ye;X}aIt-G3gZo_#|^M11h>V^JOo97!TV zM*ullFyzPQ7oT-T)?n*rse7x-sqkU9zHuO~yLl)c z-#Ac{{(rx^eL+M-T(o>5y1UzB;=?Cu0zaZ0{At^W+Isl1X^W_w`HyJbc)wm*cW-aa zT) zPQ?&ld)M1h8XJv!H}qu+i9-cSB#{wR;XGan}BxC{0YX ze1B_j`u49*_0vuu!sH+1Wjg`$OLe!bdB5T~UHc9l-&lKf`+~x8{`I$xx21K!=W4bB zM?}S&J)aFUa_@$|;~wzUuD^A>t=>4lQ5}3)WgS5ExIC550;+>N?Htk}!NY^6$G$^t zS$TS%ZyOO&nwV(ee*u`TtOKa`>%V+Z=YPlj4-cMR(K$RkczX6ZKZID)nPk_dx)(^r zVJ;|~187G6jh~*U0be~iSlt$w8w%$Dic|-2KFHI$>MS5VPqT$as|LXFmn{QEMD%_0 z^L+sO4z|0MMOFHKR)uwln<-EH!!>E4gvD! z6-?QETD4~I$^7m(;czKFnO~4Kd|aw~Z(#P+{1#wQcjqyC*s;7faP+1e0)HHhg+0Y{ z1{32mzc-1ZKiu~;Mi!m3Q%P7QVma`qGYM!20CP*rh5*el1c13E>j3(DyOM~R&D1aK>5fGmQS&dA-aCC3FuU3! z$^m)anWs;=-@jEB_VmQgy?^h=t`UEx8)j3*9DpC|z?Vzb0W9onVjU0oLdjC_{@$+S z!VAtlE)RYE-@B#%Fb7lw;qjWB6Z|kYRLlV^>FGS?^8lk`W3g*w{FpuiXio930V85^ z@^IaC`$lzBw()B~m@^8u0!Ks)PadwjC!kT?RBdbphPk8RR^UckcYmAN)@$o8%x!gt z0M({S`wJTQiC$A5ehZ-;MJ{T|WKA6?z&tD%Nk1JO6o0x^%s_iS_&2RwnLPQ~=X~(zJA>->^*VuThKAZ6*|;(J z(KFA~%mF-l)m3rh&YjtH&u`n+c27i2C-kjzPp zowj~`JbKkt@!hp+WAwm*7+AHcCiqi7xPNm*MBLaPv48ok$UaxsrJsSBo401ij<%v@ zzQcPDRUA`kn|tltEwK1MpF-_+e*6oDnx=HD^RbRGi-w5!?Q7DB|La z6MF$*W`D9Zw=|$9CMF{ueXZd|M-%+b`0v<6oYu3T+2+|bz|1rZ(saVF*=@kn3I5b$ z*It-(U)tPdr56*MfS?8HZUs&!`cg-m_D{!?zx{es>-*oo=^uh0j-|n+OOy21fYtK@ zMIOHYew%aPi)3)=(x!qR0000000000000000F#ahuo?gWX50S&L8!w6&-fJe00000 LNkvXXu0mjf+6BTd diff --git a/TouchyTickets/GameImpl.cs b/TouchyTickets/GameImpl.cs index b702fcb..b16cc3a 100644 --- a/TouchyTickets/GameImpl.cs +++ b/TouchyTickets/GameImpl.cs @@ -78,7 +78,7 @@ namespace TouchyTickets { } public BigInteger GetStarPrice() { - return BigInteger.Pow(1000000, this.TimesRestarted / 2 + 1); + return 1000000 * BigInteger.Pow(10, this.TimesRestarted / 2); } } diff --git a/TouchyTickets/ParkMap.cs b/TouchyTickets/ParkMap.cs index ae574e3..9d5e58d 100644 --- a/TouchyTickets/ParkMap.cs +++ b/TouchyTickets/ParkMap.cs @@ -90,7 +90,9 @@ namespace TouchyTickets { if (this.draggingAttraction) { // move the current placing position var nextPos = (camera.ToWorldPos(drag.Position + drag.Delta) / Attraction.TileSize).ToPoint(); - if (this.PlacingAttraction.GetCoveredTiles().Select(p => nextPos + p).All(p => p.X >= 0 && p.Y >= 0 && p.X < this.Width && p.Y < this.Height)) + // drag the center of the attraction + nextPos -= new Point(this.PlacingAttraction.Type.Width / 2, this.PlacingAttraction.Type.Height / 2); + if (this.PlacingAttraction.Type.GetCoveredTiles().Select(p => nextPos + p).All(p => p.X >= 0 && p.Y >= 0 && p.X < this.Width && p.Y < this.Height)) this.PlacingPosition = nextPos; } else { // move the camera @@ -102,7 +104,7 @@ namespace TouchyTickets { continue; // when first pressing down, go into attraction drag mode if we're touching the place location var offset = (camera.ToWorldPos(touch.Position) / Attraction.TileSize).ToPoint(); - this.draggingAttraction = this.PlacingAttraction.GetCoveredTiles() + this.draggingAttraction = this.PlacingAttraction.Type.GetCoveredTiles() .Any(p => this.PlacingPosition + p == offset); } } @@ -137,14 +139,14 @@ namespace TouchyTickets { // placing attraction if (this.PlacingAttraction != null) { var placingPos = position + this.PlacingPosition.ToVector2() * tileSize; - foreach (var pos in this.PlacingAttraction.GetCoveredTiles()) + foreach (var pos in this.PlacingAttraction.Type.GetCoveredTiles()) batch.Draw(batch.GetBlankTexture(), new RectangleF(placingPos + pos.ToVector2() * tileSize, tileSize), Color.Black * 0.15F * alpha); batch.Draw(this.PlacingAttraction.Type.TextureRegion, placingPos, Color.White * alpha * 0.5F, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } } public bool CanPlace(Point position, Attraction attraction) { - foreach (var offset in attraction.GetCoveredTiles()) { + foreach (var offset in attraction.Type.GetCoveredTiles()) { if (this.GetAttractionAt(position + offset) != null) return false; } @@ -152,7 +154,7 @@ namespace TouchyTickets { } public void Place(Point position, Attraction attraction) { - foreach (var (x, y) in attraction.GetCoveredTiles()) + foreach (var (x, y) in attraction.Type.GetCoveredTiles()) this.attractionGrid[position.X + x, position.Y + y] = attraction; this.attractions.Add((position, attraction)); } diff --git a/TouchyTickets/Ui.cs b/TouchyTickets/Ui.cs index a964621..c8a6651 100644 --- a/TouchyTickets/Ui.cs +++ b/TouchyTickets/Ui.cs @@ -46,7 +46,7 @@ namespace TouchyTickets { if (rainingTickets[i].Update()) rainingTickets.RemoveAt(i); } - while (rainingTickets.Count < Math.Min(GameImpl.Instance.Map.TicketsPerSecond / 10, 500)) + while (rainingTickets.Count < Math.Min(GameImpl.Instance.Map.TicketsPerSecond / 10, 200)) rainingTickets.Add(new RainingTicket()); }, OnDrawn = (e, time, batch, alpha) => { @@ -120,7 +120,7 @@ namespace TouchyTickets { map.PlacingAttraction = attraction.Value.Create(); // set placing position to center of camera's view var (posX, posY) = (GameImpl.Instance.Camera.LookingPosition / Attraction.TileSize).ToPoint(); - map.PlacingPosition = new Point(MathHelper.Clamp(posX, 0, map.Width), MathHelper.Clamp(posY, 0, map.Height)); + map.PlacingPosition = new Point(MathHelper.Clamp(posX, 0, map.Width - attraction.Value.Width), MathHelper.Clamp(posY, 0, map.Height - attraction.Value.Height)); var yesNoUi = new Group(Anchor.BottomLeft, new Vector2(1)); yesNoUi.AddChild(new Button(Anchor.AutoInlineIgnoreOverflow, new Vector2(0.5F, 40), Localization.Get("Back")) { diff --git a/TouchyTickets/Upgrade.cs b/TouchyTickets/Upgrade.cs index 879d2f0..cc69405 100644 --- a/TouchyTickets/Upgrade.cs +++ b/TouchyTickets/Upgrade.cs @@ -11,7 +11,8 @@ namespace TouchyTickets { public static readonly Upgrade[] MapSize = RegisterTiers("MapSize", 5, 1, 0.5F, Ui.Texture[0, 3]); public static readonly Upgrade FoodCourtModifier = Register(new Upgrade("FoodCourtModifier", 1, Ui.Texture[1, 3])); public static readonly Upgrade FerrisWheelModifier = Register(new Upgrade("FerrisWheelModifier", 1, Ui.Texture[2, 3])); - + public static readonly Upgrade RollerCoasterModifier = Register(new Upgrade("RollerCoasterModifier", 1, Ui.Texture[3, 3])); + public readonly string Name; public readonly int Price; public readonly TextureRegion Texture;