I have a number of stats and effects in game that are subject to change, they have some kind of base value and the current value. For stats, I implemented this in a dynamic way, but for less important things, like buffs that is too much work. For buffs I have 2 properties - current and base value. For example, the shield buff action takes the base value and copies it into the current value at the start of each turn.  What is a good way to implement having the current value and base value for effects?  Right now I have a base property defined along with the modified value.  +(BuffBase*)buffWithEffectType:(kEffectType)effectType intensity:(int)intensity {     BuffBase* buff = [[BuffBase alloc] init];     buff.intensity = intensity;     buff.baseIntensity = intensity;      return buff; }   Should I refactor such code early on and replace it with some kind of tuple, like EffectValue(current,Base) where x is current and y is base?   +(BuffBase*)buffWithEffectType:(kEffectType)effectType intensity:(int)intensity {     BuffBase* buff = [[BuffBase alloc] init];     buff.intensityTuple = EffectValue(intensity, intensity);     return buff; }   Or should I start with a dictionary/map right from the start? This seems to be the easiest to expand later on, although I have to remember string keys:  +(BuffBase*)buffWithEffectType:(kEffectType)effectType intensity:(int)intensity {     BuffBase* buff = [[BuffBase alloc] init];     NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];     [dictionary setObject:@(intensity) forKey:@"base"];     [dictionary setObject:@(intensity) forKey:@"current"];      //optional parameters for potential future expansion     [dictionary setObject:@(1) forKey:@"decay"];     [dictionary setObject:@(4) forKey:@"maxHitsBlocked"];     buff.valueDictionary = dictionary;      return buff; }
Overview:  Lots of games with RPG-like statistics allow for character "buffs", ranging from simple "Deal 25% extra damage" to more complicated things like "Deal 15 damage back to attackers when hit."  The specifics of each type of buff aren't really relevant.  I'm looking for a (presumably object-oriented) way to handle arbitrary buffs.  Details:  In my particular case, I have multiple characters in a turn-based battle environment, so I envisioned buffs being tied to events like "OnTurnStart", "OnReceiveDamage", etc.  Perhaps each buff is a subclass of a main Buff abstract class, where only the relevant events are overloaded.  Then each character could have a vector of buffs currently applied.  Does this solution make sense?  I can certainly see dozens of event types being necessary, it feels like making a new subclass for each buff is overkill, and it doesn't seem to allow for any buff "interactions".  That is, if I wanted to implement a cap on damage boosts so that even if you had 10 different buffs which all give 25% extra damage, you only do 100% extra instead of 250% extra.  And there's more complicated situations that ideally I could control.  I'm sure everyone can come up with examples of how more sophisticated buffs can potentially interact with each other in a way that as a game developer I may not want.  As a relatively inexperienced C++ programmer (I generally have used C in embedded systems), I feel like my solution is simplistic and probably doesn't take full advantage of the object-oriented language.  Thoughts?  Has anyone here designed a fairly robust buff system before?  Edit: Regarding Answer(s):  I selected an answer primarily based on good detail and a solid answer to the question I asked, but reading the responses gave me some more insight.  Perhaps unsurprisingly, the different systems or tweaked systems seem to apply better to certain situations.  What system works best for my game will depend on the types, variance, and number of buffs I intend to be able to apply.  For a game like Diablo 3 (mentioned below), where nearly any bit of equipment can change a buff's strength, the buffs are just character stats system seems like a good idea whenever possible.  For the turn-based situation I'm in, the event-based approach may be more suitable.  In any case, I'm still hoping someone comes along with a fancy "OO" magic bullet which will allow for me to apply a +2 move distance per turn buff, a deal 50% of damage taken back to the attacker buff, and a automatically teleport to a nearby tile when attacked from 3 or more tiles away buff in a single system without turning a +5 strength buff into its own subclass.  I think the closest thing is the answer I marked, but the floor is still open.  Thanks to everyone for the input.
Covering map between orientable compact connected surfaces without boundary with genus $g$ Similar to a previous question I asked, this is the other question that I couldn't answer in an exam I gave for my Topology course:  Suppose $g_1,g_2$ are non-negative integers such that $2-2g_2$ divideds $2-2g_1$. I have to construct a covering map $S_{g_1} \rightarrow S_{g_2}$, where $S_g$ is denotes an orientable compact connected surface without boundary with genus $g$.  Now, I attempted to try this problem for surfaces with smaller genera, for example a 2-torus and a 2-sphere. Clearly $2-2g$ is the Euler Characteristic of the said surface, and by classification of surfaces we have to only consider connected sum of 2-tori. So, I have $\chi(S^2)=2$, and $\chi(T^2) = 0$, here we have $2$ dividing $0$, hence I have to construct a covering map from $T^2 \rightarrow S^2$, and I have no idea how to move forward.  Addendum: I have to got great answers to my question here but I had a doubt when it comes to the points being mapped, specifically in Giulio Bresciani's answer. Clearly the handles of the figure is mapped to the handles in the figure above, but I'm unable to understand the mapping of the twist of the cover (above figure) to the extreme handles of the base (the figure below). Any help? How to print all printable ASCII chars in CLI? I have to format my entire disk and reinstall Ubuntu.  I have installed a lot of software on my current system. And I will have to reinstall all those updates, drivers and applications too.  Is there any way I can make an .iso image of my installed Ubuntu along with all the software, preferences, drivers etc in it ?  Is there any way I can back up my whole OS along with all its software, drives, updates and all ? Is there a way to start over?  No spoilers here, but after a certain point in the game I wish I had done something different, so I'd like to perhaps start over and make some different decisions based on my current game play experience. Who was the colleague that Erik was going to contact for help? After S.H.I.E.L.D confiscates Jane's work in Thor, the researchers discuss what they'll do next.  Erik mentions two colleagues. The first is reasonably implied to be Bruce Banner, but who is the second colleague he mentions? Transcribed from the film:  Jane Who are these people? Erik I knew this scientist... a pioneer in gamma radiation. S.H.I.E.L.D showed up and... umm. He wasn't heard from again. Jane They're not going to do that to us. I'm going to get everything back. Erik mumbles Please. Let me contact one of my colleagues. He's had some dealings with these people before. I'll email him and maybe he can help. Darcy They took your laptop, too. What is the size of this microcontroller? Having trouble reading a data sheet I am trying to find a small enough microcontroller for a project, but I am not familiar with the notation used to denote the sizes in this image:  What does that mean when it says 12,20/11,80 SQ and 7,50 TYP.  The image is from .  OR is this not where I find the physical dimensions? If these do not denote the physical dimensions of the part, then where in the datasheet is that written? How to find the sum of this series?  $$\sum_{k=0}^{\infty}\cfrac{{2}^{k}}{\binom{2k+1}{k}}$$  It seems very easy. But I still can not work it out, can anyone help? I have noticed after deleting an original page in WordPress with lets say a permalink of your_domain.com/contact/ and then trying to recreate the same page with the same name/slug, my WP is generating a "-2" at the end of the link, like: your_domain.com/contact-2/.  I don't understand why, since the original page was deleted. Why is WordPress treating new pages as if the original still exists? How to I clean WP caches, if such a thing even exists?Thank you ahead of time for clearing this up for me. Why did the texture I painted in texture paint mode disappear? Can I open Microsoft Word and Excel files? Can I open Microsoft Word and Excel files with Ubuntu? Prove that $\sum_{n=0}^\infty \frac{(-1)^n}{3n+1} = \frac{\pi}{3\sqrt{3}}+\frac{\log 2}{3}$ Prove that $$\sum_{n=0}^\infty \frac{(-1)^n}{3n+1} = \frac{\pi}{3\sqrt{3}}+\frac{\log 2}{3}$$   I tried to look at $$ f_n(x) = \sum_{n=0}^\infty \frac{(-1)^n}{3n+1} x^n $$  And maybe taking it's derivative but it didn't work out well.  Any ideas? I'm setting up a new server and want to support UTF-8 fully in my web application. I have tried this in the past on existing servers and always seem to end up having to fall back to ISO-8859-1.  Where exactly do I need to set the encoding/charsets? I'm aware that I need to configure Apache, MySQL, and PHP to do this — is there some standard checklist I can follow, or perhaps troubleshoot where the mismatches occur?  This is for a new Linux server, running MySQL 5, PHP, 5 and Apache 2. Is it normal for focal length to change while focusing? When I change the focus distance on my Pentax 55-300mm lens, the focal length appears to change.  More specifically, the lens appears to zoom in as I focus towards the minimum focusing distance.  This is most noticeable at the 55mm end of the lens.  Is this normal? I am looking for a book that goes through the mathematical aspects of neural networks, from simple forward passage of multilayer perceptron in matrix form or differentiation of activation functions, to back propagation in CNN or RNN (to mention some of the topics).  Do you know any book that goes in depth into this theory? I've had a look at a couple (such as Pattern Recognition and Machine Learning by Bishop or Deep Learning by Goodfellow, Bengio and Courville) but still have not found a rigorous one (with exercises would be a plus). Do you have any suggestions? Book about mages who can harvest magical energy from the environment I have a vague recollection of a book I devoured while in college; it was from the late 80's or early 90's. I remember that there were two 'classes' of mages, the ones who could harvest magical energy from the environment and supply that power to the other 'class' of mages.  The main character learned that he could reverse the flow and sap the other mage of his/her power. I also seem to remember that there was a lot of technological warfare and travel to the planets moon(s)? High p-values for logistic regression variable that perfectly separates? I'm using R to run some logistic regression. My variables were continuous, but I used cut to bucket the data. Some particular buckets for these variables always result in dependent variable being equal to 1. As expcted, the coefficient estimate for this bucket is very high, but the p-value is also high. There are about ~90 observations in either these buckets, and around 800 total observations, so I don't think it's a problem of sample size. Also, this variable should not be related to other variables, which would naturally reduce their p-values.  Are there any other plausible explanations for the high p-value?  Example:  myData &lt;- read.csv("application.csv", header = TRUE) myData$FICO &lt;- cut(myData$FICO, c(0, 660, 680, 700, 720, 740, 780, Inf), right = FALSE) myData$CLTV &lt;- cut(myData$CLTV, c(0, 70, 80, 90, 95, 100, 125, Inf), right = FALSE) fit &lt;- glm(Denied ~ CLTV + FICO, data = myData, family=binomial())   Results are something like this:  Deviance Residuals:       Min        1Q    Median        3Q       Max   -1.53831  -0.77944  -0.62487   0.00027   2.09771    Coefficients:                 Estimate Std. Error z value Pr(&gt;|z|)     (Intercept)     -1.33630    0.23250  -5.747 9.06e-09 *** CLTV(70,80]     -0.54961    0.34864  -1.576 0.114930     CLTV(80,90]     -0.51413    0.31230  -1.646 0.099715 .   CLTV(90,95]     -0.74648    0.37221  -2.006 0.044904 *   CLTV(95,100]     0.38370    0.37709   1.018 0.308906     CLTV(100,125]   -0.01554    0.25187  -0.062 0.950792     CLTV(125,Inf]   18.49557  443.55550   0.042 0.966739     FICO[0,660)     19.64884 3956.18034   0.005 0.996037     FICO[660,680)    1.77008    0.47653   3.715 0.000204 *** FICO[680,700)    0.98575    0.30859   3.194 0.001402 **  FICO[700,720)    1.31767    0.27166   4.850 1.23e-06 *** FICO[720,740)    0.62720    0.29819   2.103 0.035434 *   FICO[740,780)    0.31605    0.23369   1.352 0.176236     --- Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  (Dispersion parameter for binomial family taken to be 1)      Null deviance: 1037.43  on 810  degrees of freedom Residual deviance:  803.88  on 798  degrees of freedom AIC: 829.88  Number of Fisher Scoring iterations: 16   FICO in the range [0, 660) and CLTV in the range (125, Inf] indeed always results in Denial = 1, so their coefficients are very large, but why are they also "insignificant"? Let $q: \mathbb{N} \to \mathbb{Q}$ be a bijection and denote the image of $k \in \mathbb{N}$ by $q_k$.  Let $f: \mathbb{R} \to (0,1)$, $$ f(x) = \underset{q_k \leq x}{\sum_{k \in \mathbb{N}}} 2^{-k} $$  Show that:  1) $f$ is strictly increasing  2) $f$ is continuous at $x$ iff $x \in \mathbb{R} \setminus \mathbb{Q}$.  My work:  Let $x, y \in \mathbb{R}$, $x &lt; y$. Then there exists $q_n \in \mathbb{Q}$ s.t. $x &lt; q_n &lt; y$. Now $$ f(x) = \underset{q_k \leq x}{\sum_{k \in \mathbb{N}}} 2^{-k} &lt; \underset{q_k \leq x}{\sum_{k \in \mathbb{N}}} 2^{-k} + 2^{-n} \leq \underset{q_k \leq y}{\sum_{k \in \mathbb{N}}} 2^{-n} = f(y) $$ so $f$ is strictly increasing.  I think my proof of 1) is ok, but how can I prove 2)? I want my intent to be launched when the user goes to a certain url: for example, the android market does this with  urls. so does youtube. I want mine to do that too. I have a MacBook Pro Retina (2015). After updating to OS Mojave, Bluetooth has stopped working. I get an error message that "No Bluetooth Hardware Found".  I have already tried to do the following:   Go to the /Library/Preferences and delete the com.apple.Bluetooth.plist file Successfully resetting SMC. (pressing Shift+ctrl+alt + power button) Removing the Bluetooth icon from the menu bar    None of the above solutions has worked for me. How do you effectively study physics? How does one read a physics book instead or just staring at it for hours?   (Apologies in advance if the question is ill-posed or too subjective in its current form to meet the requirements of the FAQ; I'd certainly appreciate any suggestions for its modification if need be.)