Jump to content
  • Advertisement

Thiago Monteiro

Member
  • Content count

    33
  • Joined

  • Last visited

Community Reputation

18 Neutral

About Thiago Monteiro

  • Rank
    Member

Personal Information

  • Industry Role
    Game Designer
    Programmer
  • Interests
    DevOps
    Education
    Production
    Programming
    QA

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Thiago Monteiro

    I Know Nothing and I want to change that

    Not sure if mentioned in the thread, but: I tend to make a distinction between learning a programming language and learning programming in general. I believe learning how to approach problems with a programmer mindset will take you further than simply learning to code, although through a bit more difficult/longer path. In this sense, I'd actually suggest that you start looking into algorithms, and how the solution to problems are thought out. Even if you don't go through the mathematical analysis of them, you will benefit greatly to see how the approach 'identify the problem -> divide into manageable chunks -> solve each chunk' is applied in many domains. Programming languages are simply tools, and you should at one point be able to choose one based on what you want to tackle, not the other way around. A series of steps from the top of my mind, which might be outdated, you could do is (there is actually a lot in between each step to help you to learn in depth, but I suppose college you help with this also): 1) Program a simple calculator 2) Program a hanged man (I guess that's the name in English, at least) text game 3) Program 2 cars crossing an intersection (again, text, but think car speed, waiting, and so on. Requirements can be what you want, as long as it is 'Real time') -- You can try some other similar programs/problems to get comfortable with the concepts --- 4) Learn some sorting algorithms 5) Binary search trees and then B* trees (search, insert, delete) 7) Matrix multiplication 8.) Average Blur of an Image (or any other kernel based operator, but this one is simple enough) 9) Simple collision detection 9.1) Collision with space partitioning for optimization This list is by no means exhaustive, but should give you a good idea on how to go about. I also suggest I implement (or re-implement) them in a couple of languages to get a feeling for what they do well or not. In terms of book you could use, if I recall correctly, I used Deitel & Deitel How to Program (for the coding stuff) and Cormen's Introduction to Algorithms (for the maddening algorithms part, save this for waaaaayyyy later). Hope this helps
  2. Thiago Monteiro

    Action points or not?

    Changing AP makes sense if you can save some to use on the following round. One game that popped into my mind just now that you could study a bit is Underrail, which was fairly well received. It's rather modern, but uses a very classical style system. Take a look at what people said about it (also in forums to see what people are doing in such a system) and play for some good hours to see where it hits and where it falls short (it take some hours until it does). For a first prototype, I'd try to iterate over that and see how it comes out. Test it and see where it needs improvements. I believe this would be a very sensible way to go about.
  3. Thiago Monteiro

    Action points or not?

    Do you mean for a hybrid system? I thought the point of the one-two system is forgo the whole action point thing. I suppose you could still use attributes to influence action extent (how far you can walk, maybe which abilities you can take). Personally, I don't much like to have the "AP attribute", as it becomes kind of a dump stat that you pump until you can use X and Y in the same round. Have you thought about reducing the required AP for actions based on related attribute (strong guys can swing the hammer more, bot not necessarily run more)? It perhaps just need to be as simple and transparent as possible (e.g. every 2 STR = -1AP or something like it) to avoid becoming overwhelming.
  4. Thiago Monteiro

    Pay What You Want Model

    Lot's of good points here, thank you all for your answers. I think it's worth adding that, besides the support part of paying more money and gaining an edge over the competition, collectibles seem to be another driving force towards higher expenditure. Or at least that is what the number of special editions lead me to believe. In an ideal world, you'd get a good chunk of people to buy in the price range you consider the game worth, and all the rest (non payers, or very low payers) as marketing expense to bring more attention to the game. The problem seems to be how cause the maximum amount of people to actually put up the cash. While there are moderate successful cases, it does seems that is very risky and only perhaps worth if one cannot otherwise draw attention to the game .
  5. Thiago Monteiro

    Pay What You Want Model

    There is a fair amount of people who actually feel like they should pay for receiving something. In the end, it sounds to me that pay what you want is more a marketing strategy than anything else. Of course, in the end, if I set the price of a game, I wouldn't include only the costs to produce it, but also to produce the next one. I suppose that is why more and more it seems that a price tag along the lines of $20 seems to make more business sense. In this sense, the question would be: how to convince more people to hover around this sweet spot? (if you look at Joost's results, you'll see that the amount sold for $20 to $29.99 was not by far leading in sales, but is still relevant in revenue)
  6. Thiago Monteiro

    Pay What You Want Model

    [Note: this is related to PC games, so I wouldn't thing ads to be something to add here] Hello all, I've been reading a bit about the pay what you want model and how viable it is. According to one detailed account (1), it doesn't seem to actually increase profit, although some points could be improved (2). Different than physical products, digitally distributed games under the pay what you want model show a disproportionate amount of people paying $0 (upwards of 95% of non-paying for games vs. about 25% in more traditional physical products).Also, game consumers have a very strong reference frame for pricing points, which seems to further work against this model (3). On the other hand, tweaking the model a bit seems to help. Interestingly, charity helps (4). Perhaps, so does having easy payment methods and some added value (sound track and such). In any case, it seems to be a viable strategy to reach consumers (5), but not sustainable in the long run (6). So, my questions in relation to this are: 1) Do any of you have/have had experience trying to market/sell your game with this strategy? 2) Would you add a minimum value or maybe this would just defeat the purpose of the pay what you want? 3) How would you convince people to spend more? If anybody is interested in reading further: (1) http://joostdevblog.blogspot.be/2011/10/proun-is-big-success-pay-what-you-want.html (2) https://www.techdirt.com/articles/20111003/15253616190/lessons-learned-pay-what-you-want.shtml (3) https://www.sciencedirect.com/science/article/pii/S0148296312002524 (4) http://science.sciencemag.org/content/329/5989/325 (5) https://pubsonline.informs.org/doi/abs/10.1287/mnsc.2014.1946 (6) http://www.bbc.com/news/uk-england-33609867
  7. Thiago Monteiro

    Action points or not?

    I agree with SomeoneRichards here that it is not laziness really. In both in pen & paper and video games, I believe, there has been a shift away from certain forms of complexity. The problem with that was that, in the most egregious cases, you'd be kept away from the game in order to search something in a manual to understand what 1 out of dozens of small stats actually mean in terms of game. With more streamlined modern games, you can focus more on the gaming aspect of your game (say, which power is most efficient in a given situation instead of, If I use this item, this will give me 2 AP, which I can save, walk less and then use a powerful shot against enemy B). So, people got used to clutter-free games and need a reason to invest time on it. One important distinction to make is between being complex and being opaque. Your game can be mechanically simple and still provide complex strategies to reach victory. Simply having complex mechanics does not prevent the existence of only one or two viable playing options (rendering the whole thing meaningless). In short, if you want to be more appealing to more people, use the one-two system. If you have a good reason for using AP (which one-two system absolutely cannot do), go for it, but bear in mind that it has more potential caveats.
  8. Thiago Monteiro

    Action points or not?

    This could also work, but if you perform all your actions at once, it might not help. A variation on this could be: you have a fixed set of actions before the opposing faction can perform their actions, so you'd need to choose between many small actions or less actions with potentially higher impact. The difficult thing to adjust here is how many actions does each team get (due to number of squad members and so on), but it could be interesting anyhow. Another positive point about this is that you can have an unified action bar and visually represent how much an action costs and how much this leaves you with. By only have 2 or 3 different costs, it becomes easy to identify how much you can do (which can be also marked in such a visual representation).
  9. Thiago Monteiro

    Action points or not?

    Well, my favorite turn-based game uses AP system (Jagged Alliance II), so I'm biased here perhaps. I don't think either system is inherently better than the other. That being said, I'd say having AP gives you a more straightforward mechanism to provide flexibility in comparison to a one-two system. To give an example, in Jagged Alliance you could use extra points to aim better, or maybe save it a bit to shoot twice in the next turn, or shoot and run. Adding abilities on top of that gives a lot of possibilities to explore. I find that the one-two system streamlines things a bit, which is not inherently bad and might remove unnecessary complexity, all things considered. The bottom line, for me, is this: ask yourself the reason to add AP and how much complexity it will add (and you want in your game). If it is not providing nothing really different or if its use takes a lot to learn, the one-two system is familiar to players and works well. Otherwise, AP is a great option to mix up things a bit every now and then.
  10. Thiago Monteiro

    Highlight in Unity

    OBJECTIVE Implement an outline system that would be active when mouse is over an object. The effect should be slightly blurred like the picture below from Diablo 3. Fig 1. Highlight in Diablo 3 WHAT'S OUT THERE There are many ways to implement this feature, and this site is a good starting point to see the different ways of implementing it (http://twiik.net/resources/outline-effects). Out of those, the one shown in http://xroft666.blogspot.be/2015/07/glow-highlighting-in-unity.html comes closer to what I wanted to achieve. It makes use of CommandBuffer, which I thought was slightly more advanced than my current knowledge in Unity. It looks 'cleaner' and likely more optimized than what I ended up with, so I might come back to it if I ever try to optimize my code. WHAT I DID In the end, I have implemented an overlay effect which is a bit more convoluted than what I would hope for. In summary: 1. Set up a second camera that will render a single layer before the main camera (i.e. lower depth) 2. Camera 2 render: 2.1. Render objects and save this for later (will be used for CutOut) 2.2. Dilate objects -> this is the solid outline 2.3. Blur the image 2.4. Apply cutout on resulting image 2.5. Pass result to MainCamera 3. Render Camera 1 and tehn overlay Camera 2's result over it There are some more details that will be covered in the in-depth description of the steps below. Fig 2. My own highlight effect DETAILS 1. Second Camera The second camera is a child of the first camera and its duplicate. Clear Flags must be set to Solid Color, black with Alpha = 0. Depth must be lower than main camera's. 2. Rendering the Outline The bulk of the effect happens in this part. I have created the OutlineEffectScript and attached it to the second camera. All the code below is implemented in the OnRenderImage methods. 2.1 Getting the cutout The first step is to copy render to a temporary RenderTexture. When implementing this, I have run into a couple of issues with the RenderTexture formats. It is working as it is, but I am still reading to understand better why it is so. RenderTexture tmp_Cut = RenderTexture.GetTemporary(Screen.width, Screen.height, 0, RenderTextureFormat.ARGB32); Graphics.Blit(source, tmp_Cut); 2.2 Creating the Solid Outline The solid outline is based on the code for the blur, which comes from this excellent tutorial (http://catlikecoding.com/unity/tutorials/advanced-rendering/bloom/). The idea is simple: Sample the neighbourhood of a pixel. If any pixel in the mask is larger than 0, then the current pixel is set to 1, 0 otherwise. This is done iteration times. One possible future test here is, instead of iterating multiple times on the dilate, try to increase the search space. Might help making thick outlines more regular. RenderTexture dst; if (dilateSize == 1) { dst = RenderTexture.GetTemporary(Screen.width, Screen.height, -2, source.format); } else { dst = RenderTexture.GetTemporary(Screen.width, Screen.height, -2, RenderTextureFormat.ARGB32); } // Objects that are to be highlighted are rendered in solid color and dilated Graphics.Blit(source, dst,_dilateMaterial); RenderTexture src = dst; Graphics.Blit(src, dst); RenderTexture.ReleaseTemporary(src); src = dst; for (int k = 0; k < dilateSize-1; k++) { dst = RenderTexture.GetTemporary(Screen.width, Screen.height, -2, source.format); Graphics.Blit(src, dst, _dilateMaterial); src.Release(); src = dst; } if (dilateSize > 1) { RenderTexture.ReleaseTemporary(dst); } Fig. 3 Solid outline with 1, 2 and 3 iterations 2.3 Blurring the outline This one comes directly from the tutorial I mentioned in 2.2, so I will skip the explanation here. Fig. 4 Outline with 2 solid and 1, 2 and 3 blurring iterations. 2.4 Apply cutout In order to actually have an outline, the original should be cut off. Luckily, this is simple enough to do. _cutoutMat.SetTexture("_CutTex", tmp_Cut); Graphics.Blit(currentDestination, currentDestination, _cutoutMat); RenderTexture.ReleaseTemporary(tmp_Cut); _cutoutMat is a shader that sets any non-zero pixel in the cutout mask to 0. fixed4 frag (v2f i) : COLOR { half4 pix = tex2D(_MainTex, i.uv); half4 pixCut = tex2D(_CutTex, i.uv); if (pix.r == 0 && pix.g == 0 && pix.b == 0 ) { pixCut.r = 0; pixCut.gb = 0; } return pixCut; } 3. Overlay outline on main camera result The last step is to render the resulting outline on top of the scene. So first we render the scene and then render the outline on top of it with the appropriate transparency. In the main camera: RenderTexture rt = RenderTexture.GetTemporary(Screen.width, Screen.height, 0, RenderTextureFormat.ARGB32); Graphics.Blit(source, rt); // Camera result Graphics.Blit(_overlayImage, rt, _cutoutMat); // Outline Graphics.Blit(rt, destination); // Out to screen // Release temporary Texture. // Probably not the best to do it. Need to check it would be better suited. RenderTexture.ReleaseTemporary(rt); _overlayImage.Release(); And the _cutoutMat with the shader (the _OccTex I explain below): float4 frag(v2f_img i) : COLOR { float4 c = tex2D(_MainTex, i.uv); float4 msk = tex2D(_OccTex, i.uv); c.a = c.r*.3 + c.g*.59 + c.b*.11; c.rgb = _Color.rgb; if (msk.r > 0) { c.a = 0; } return c; } Final Details Overlay As is, the outline would render on top of everything. The way I found to go around this is to set up a third camera which is responsible for rendering occluder objects in solid color. For me, it was enough to have the player always above the outline. The third camera moves the player to a occluder layer, render in solid color, pass the result to the main camera and returns the player to whatever layer it was before. This is the _OccTex that mask the outline Conclusion I'm pleased with the visual result. It seems to work well with a variety of models without breaking. I haven't detected any performance impact. The code and solution feels a bit messy to me, or I at least think there are more elegant ways of solving this. I do find convenient the objects themselves know nothing about the highlighting procedure (other than the mouse over detection). Once I finish the clean up, I'll upload the sample project.
  11. Thiago Monteiro

    Text Based Combat

    You have two ways to go here. The first one is a more "mechanistic" approach. That is, you'd look for key words in what the player types to adjust some stats/mechanics (like reputation). Similarly, the NPCs could understand a fixed set of key words and they would say that they don't understand what was typed, otherwise. A second possibility is that you try to go fancy. You will not be able to have true natural conversation, but you might try to combine text speech emotion recognition (see link below from number 14 on) with some keyword identification to create some interesting interactions. Whether it's worth to go through so much trouble for that, entirely depends on your game. If the game is mostly combat with the occasional talk, it's likely not worth it. If there are a lot of interactions, you might be able to build some interesting mechanics on top of them. https://nordicapis.com/20-emotion-recognition-apis-that-will-leave-you-impressed-and-concerned/
  12. Thiago Monteiro

    Text Based Combat

    Not text based, but mildly related: http://www.epistorygame.com
  13. Thiago Monteiro

    Text Based Combat

    Problem is, if you have the same strategy over and over, it will become repetitive. If you're not thinking about a dungeon crawler, perhaps a good idea is to use combat more sparingly and try to give players as much options as possible to make combat feels unique (observe enemy, circle, look at environment, items, this kind of thing). Why take this information from the player? It is very hard to judge combat strategies without such information, and I'd say it is only worth doing it if it doesn't feel gimmicky. The one example that comes to mind right now is Bushido Blade, which had no HP bar, but the fights were more often than not about the right strike rather than multiple ones. In a text based game, I can imagine describing the current situation of the player and letting them evaluate how bad things are, but if they need to do this often, it's possible that it becomes an annoyance much more than immersion.
  14. Thiago Monteiro

    Little ideas. What can be really interesting?

    In terms of being fun, I don't think real time or turn-based is really key, both have potential to be fun. Actually being fun though, goes quite beyond the idea. Match length, good balance between complexity and possibility in terms deck building and strategies and match dynamics are what ultimately heavily influences the fun factor of the game. Nailing down the specifics of those is the crucial part that will define whether your idea is fun or not.
  15. Thiago Monteiro

    Little ideas. What can be really interesting?

    This could be fun, but as is, it sounds fairly passive. You could have a more or less real time cue, including movement to add some strategic variations. Perhaps preparation and release time could also help creating a type of back and forth (say, you first need to charge up your mega beam with an action and then you have 3 actions before it overheats, and then overheating which would lead to losing an action, but maybe you could then activate some overheat related ability). All in all, in my mind, this has the potential to be a fairly fast paced deck building game. Another good point here is that it is straightforward to make a paper prototype and fine tune the fun factor. For your second idea, take a look at Toribash. It might give some good ideas for this kind of slow motion game http://www.toribash.com
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!