Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.

Servant of the Lord

Member Since 24 Sep 2005
Online Last Active Today, 10:26 PM

#5078516 XNA to C++

Posted by Servant of the Lord on 17 July 2013 - 01:04 PM

It's also important to note that "XNA" isn't a language, it's an API.


C# is the language usually used with XNA, and C# support hasn't ended. Just because one API of your language has been feature-frozen, that doesn't mean you need to abandon the entire language. You could switch to the open-source replacement for XNA, called MonoGame, or you could switch to something like Unity Engine, which is heavily used and heavily supported, and continues to be developed.


As for as developing your skills go, it'll be more beneficial to use the tools available to you to complete projects, than to switch languages whenever it seems like the language is being ill-supported. Until two years ago, it seemed like Microsoft had abandoned C++ to support C#. Now it seems (at the surface level) like Microsoft has abandoned C# to support C++. Chances are they'll release XNA 2.0 shortly after the XBox One launches.


Ironically, I had a similar 'crisis of faith' in C++ about two years ago, as all the programming news I was hearing was shouting "C#, C#, C#!".

A good tool is a good tool, and it's sometimes confusing when the winds of media hype for different technologies blows counter to the direction you were heading in.


I ended up deciding to stick with my current language, because I realized it's more important to actually finish a project, then it is to make sure that that project uses Company X's favorite language of the week. C# isn't dead, even if XNA has been sunsetted. XNA != C#

#5078378 Death and Mining in a 2D Top Down RPG

Posted by Servant of the Lord on 16 July 2013 - 11:36 PM

I've thought about that with death, but I feel that doesn't fit so well when you're exceedingly deep in a cave, for one example.

Waking up at the mouth of the cave vs waking up in a graveyard? =)

The problem with the mining idea you have is that it's a top-down 2D game, and I was planning on only simulating varying heights on the map (think Pokemon?), and allowing only a small amount of terrain adjustment in the overworld. Creating caves that had to be entered like a dungeon was an easy way in my opinion to overcome that, though I'm not sure how the rest of the gaming world feels about that.

I'm sure entering caves in that manner is fine - I certainly wouldn't mind it.

My suggestion was with 2D in mind - it's equally applicable to 2D or 3D - in fact, aside from differentiating between minable and unmineable terrain, I wouldn't bother visually distinguishing any of it. You don't have to show the resources decreasing in the area, because no resources were originally visible.

Like the 2D zelda games, where you dig with a shovel. [video] Either you find something or you don't. Zelda keeps the dug holes visible until you exit the screen and come back, but you don't even need to do that. You can make the liklihood of finding something dependant on how many times you've dug in the past 10 minutes (with more digging = you're more worn out = you chance of finding stuff decreases). Then you (the map maker) can mark the probabilities of different resources in different areas (on a large scale, not per-tile, unless you want to), and say, make one area high in sapphires but poor in iron ore, or vise-versa, as well as mark an area (with a single integer) as "overmined" by incrementing the integer for every dig, and only decrementing it once every 20 seconds, and using that integer to multiply against your other probabilities.


Slightly sleepy, but the general idea:

PlayerWornOut = (numberOfTimesDugInPastTenMinutes / MaxDiggingAllowedInTenMinutes);
AreaOverminingMultiplyer = (numberOfTimesAreaWasMined / MaxAreaMiningAllowedInFiveHours);

ChanceOfFindingSomething = (PlayerWornOut * AreaOverminingMultiplyer * AreaIsGoodMiningArea * PlayerEquipmentBonus);

#5078369 Death and Mining in a 2D Top Down RPG

Posted by Servant of the Lord on 16 July 2013 - 10:12 PM

Another option for death is that you never really "die". Instead, when close to death, you fall unconscious. When you come-to, you find bandits have stripped all your gear. Maybe you awake in a villager's house, who found you and tended you back to health.
For ore, one possibility is letting players mine almost anywhere where rock is exposed, whether it's marked as a good mining location or not. As the player mines, his character gets worn out, so the longer he mines the less he finds until he goes and rests.
Further, different spots are better, and have different resources and higher chances of finding ore. But as players gather to those locations to mine, the mine slowly gets depleted, forcing the player to move to new locations.
However, the mining spots gradually regenerate over long periods of time so the player can eventually revisit it for more resources.

#5078200 Proper usage of branching in [hg]mercurial

Posted by Servant of the Lord on 16 July 2013 - 12:28 PM

Hey, so, after years and years of avoiding revision control software because of the (admittedly minor) learning curve and misunderstandings on my part, I started using Mercurial earlier this year, and really find it easy to use, easy to understand, and overall really pleasant and friendly. That is, the command-line interface. The TortiousHG interface got in my way too much and I kept stumbling over it*.


I've committed 113 times already (Woot!) I commit at least once a day, but sometimes twice or more, whenever I come to logical points to commit.


Where I've had trouble is with the idea of branching. I understand the concept, and I understand why it would be useful, but suppose I have several development branches: "Development" (or 'trunk' or 'main' or whatever the correct term is) , "ExperimentalFeatureX" and "UnfinishedFeatureY".


Suppose I'm currently in UnfinishedFeatureY working on it. If I fix a bug that's unrelated to FeatureY, I want to make sure that bug is fixed in Development. How can I merge just that one bug fix (or just that one file) into Development?


Here's another situation that worries me. I have all my art assets in the revision control system also. What if I'm working in ExperimentalFeatureX, add some new art, then cancel the experimental branch and close it, forgetting my art assets are in there? Is there a way I can add certain files to every active branch at the same time?


*I always have a weird relationship with tools - I want X amount of control, but don't want Y amount of complexity. Many tools dumb things down so much that the control I want either is blocked (with the tool taking control for itself), or hidden behind dozens of GUI commands that make it more complex to accomplish what should be (and is) an easy task.

#5077704 Culling 'not on screen' Entites

Posted by Servant of the Lord on 14 July 2013 - 04:00 PM

I am currently working on a 2D RTS game (tiled based and oblique projection). I wanted a way to only draw the entities that are currently on screen, my first instinct was to store the entities in an array, then check through that array, to see if any entities where inside the camera view, and if they where draw them.

Seems reasonable.

However, this will become taxing to do if...

Do I detect a hint of premature optimization? smile.png

...if there is a large amount of units and/or players (enemy), as it would have to sort through the hundreds(ish) of times...

Hundreds doesn't sound bad at all. It's a simple collision: Does sprite rect collide with camera rect? 3D games do way more advanced collision than that - it shouldn't be too slow.

...it would have to sort through the hundreds(ish) of times a second.

If it does become a slowdown (when testing in release mode and after profiling, ofcourse), you could make it not check every entity every frame. Batch them - do 1/3rd of the checks one frame, the second 1/3rd the next frame, do the final 1/3rd the third frame.


An every simpler solution would be to just draw the 100-ish sprites continually. Seriously, 100 sprites should render very quickly. A single 3D model can be 100,000 polygons or more. 100 or even 1000 sprites shouldn't pose too much of a problem.

#5077411 Games for Tournaments

Posted by Servant of the Lord on 13 July 2013 - 02:23 PM

SpyParty has intense 1v1 matches of subterfuge and psychological battle of wits, and has been played tournament style, and is a featured indie game of the hardcore Fighter Game tournament EVO (but wasn't a part of the tournament itself).

#5077263 Needed non tiled based Level editor 2D

Posted by Servant of the Lord on 12 July 2013 - 10:28 PM

Try GLEED2D - I haven't used it personally, but it looks like it might have potential.

#5077014 Protect my game from Memory editing

Posted by Servant of the Lord on 11 July 2013 - 09:27 PM

Consider they could be running your game in a special VM to have even more control over it, perhaps bypassing the operating system completely.


@Kyl3: This is not at all unusual. One of the most famous cheat tools can be ran as, basically, friendly rootkits on your own machine to keep the cheat tool from even showing up in the list of running processes and is, if ran in that mode, almost impossible to detect. This cheat tool is widespread and very popular. Not everyone runs it in that rootkit mode, but when they do, I don't think there's anything you can do about it.


Another cheat method is, for online games, setting up a network node (either physical or virtual) between the game client and server, and reading and modifying values in the packets on the fly. The very advanced ones remember the previous packets and built a virtual imitation of a surprising amount of the knowledge the server has to display things like player positions on the map, or the amount of health a certain boss has, or where, statistically, the best places for certain items are. This information is even crowdsourced and used to dump the stats of enemies and the probability chances of drops on wikis and things like that.


Don't lose too much sleep over it, and instead cater to those who pay you. If a paying customer wants to cheat, and it doesn't affect the other paying customers, let him! He might even have a good reason for doing so (his save file getting corrupted or something, so he's trying to return to where he was).


[Edit:] But one trick is to only use the sensitive memory locations for a mere fraction of a second, and then wipe them clean.


Another trick (in theory) might be to, if the player knows they are looking for value "230" because their health is that amount, always get and set that value with a bitshift or a ^= scramble with a magic value (XORing with a known value can be undone by XORing with the same value), so they can't Ctrl+F the values. This won't stop people, but it's a tiny trick to just make it slightly more annoying and require slightly more technical knowledge. It might hinder script kiddies with a memory editor until someone intelligent releases a custom-made tool for your game.

#5076985 What Easy-To-Use and Free Program Should I Use For Level Design?

Posted by Servant of the Lord on 11 July 2013 - 05:32 PM

There's Tiled - which now does more than just tile-based maps. There's also another editor, I can't remember the name of, where you can freely place and rotate images.

[Edit:] Ah, right, it's called GLEED2D.

#5076915 Composer looking for help.

Posted by Servant of the Lord on 11 July 2013 - 11:08 AM

[programmer perspective]


Even if you put yourself out cheaper than you're worth, you should still charge something. At the very least, it might help ward off developers that won't actually finish their game.

Also, I like cheap! I like free! But nsmadsen is absolutely correct that you shouldn't sell yourself short, and you shouldn't devalue your own time and effort. Be reasonable, but don't be cheap without a very good reason.


If a "studio" doesn't have enough to pay you at least a semi-decent wage, what's the liklihood they have a big enough budget to pay for enough advertising, legal advice, and other assets like art, that the game will become a big enough hit to actually get you any kind of attention whatsoever?


Games like Bastion and Minecraft and Braid would get you alot of attention. But they are 1 in 10,000, so that is hoping for the lottery.

Instead, you should get paid (upfront) and get credit. Now if the project really interests you, and you personally believe the project will get you exposure, then you could reduce your price. Or if a project won't be successful, has little funds, but you want to contribute charitably to it because it's open source or something.


But don't let people pay you in promises - they don't have guarantees that their game will get recognition, so how can they promise to pay you in exposure they don't have?


[/programmer perspective]

#5076781 Patent trolls attacking small indie developers

Posted by Servant of the Lord on 10 July 2013 - 08:32 PM

Free Software Foundation might be a good company to contact. They are most open-source supporters, but they are pro little-guy and against software patents in general and might be willing lend you a lawyer or give you some legal advice. There was also a small game-development law firm in the internet news a half-dozen months ago that was providing free or cheap legal assistance for studios - I don't remember the details though; anyone know who I'm talking about?.

#5076718 Better Debugging Tools; C++/MinGW/Dwarf

Posted by Servant of the Lord on 10 July 2013 - 04:09 PM

Did you get that working successfully with MinGW? I've been trying to find a decent MinGW debugger for Windows. QtCreator's embedded GDB doesn't always cut it for me.

#5076660 Any good resources on creating isometric tilesets?

Posted by Servant of the Lord on 10 July 2013 - 11:28 AM

No prob, and it wasn't a bad idea, it just (like any idea) has side-effects to take into consideration.

Speculation on solutions is very valuable - it's how innovation occurs.

#5076366 Manipulating metadata in files

Posted by Servant of the Lord on 09 July 2013 - 10:12 AM

I'm kinda facing the same problem. The route I'm taking (and still implementing - working on it right now) is having the editor "import" the the resources, and then it manages the resources in its own folder, and has a metadata file alongside each file imported. Then, creating a package for the game will (ideally) be as simple as having the editor .zip the resource folder up. The added benefit is all files can then be referred to by a single 32 bit ID instead of a filepath, and I can have things like "images" which are really just metadata files that refer to a subportion of a spritesheet.


(Some of my 'metadata' files describe actual files next to them, and some are standalone but reference other metadata files by ID).


This route might lead me into tar pits later, I don't know.

#5076247 C/C++ Refresher

Posted by Servant of the Lord on 08 July 2013 - 06:39 PM

I'm curious about the part where you mentioned that programs that run in the background don't need a graphics API. What would I need for such a program? Just a simple program running in the system tray.


Programs running in the system tray need to use Win32 or a library like Qt.


Programs that don't require any visuals serve many purposes. If you're on a Windows operating system, do Ctrl+Shift+Esc and switch over to the 'Processes' and 'Services' tab. How many of those programs do you see actually visible on-screen? smile.png


Many programs you can run from the command line, and some are very powerful. Microsoft, Linux, and Mac all have many programs built in that don't have any interface. ImageMagick is a famous one (downloadable) that lets you manipulate image files in-bulk. Many webservers have it pre-installed, but I use it on rare occasions on my Windows machine.


Here's another example of one: Open a command prompt (Start -> Run -> cmd.exe), and type in 'ping www.google.com' to have your computer send a network packet to Google's webservers, and measure the amount of time it takes to go there and back. 'ping' is a program built into almost every operating system. Non-visual tools like these often do one thing, and do it well, and people chain the output and input of multiple "command-line" programs to run complex tasks on bulk files. Some can be dangerous to use, though, if you accidentally ask them to delete files you didn't want deleted - I almost did that the other day. happy.png


Game-wise, these kinds of programs don't serve much purpose... but game servers don't have visual interfaces, and so don't need graphics APIs (They all use other kinds of APIs, though - like the built-in networking APIs most machines have, or file-access APIs, or etc...).