{"id":1,"date":"2009-10-17T01:21:40","date_gmt":"2009-10-17T08:21:40","guid":{"rendered":"http:\/\/www.paradicesoftware.com\/blog\/?p=1"},"modified":"2009-10-31T13:55:50","modified_gmt":"2009-10-31T00:55:50","slug":"hello-world","status":"publish","type":"post","link":"http:\/\/www.paradicesoftware.com\/blog\/2009\/10\/hello-world\/","title":{"rendered":"About Icefall"},"content":{"rendered":"<p>I am currently working on a new role playing game called Icefall, and to help maintain clear thinking, correct decisions, etc etc etc, I&#8217;ve decided to document the development journey on this website as a blog. That way, once Icefall is released and becomes hugely popular (:D), I will have a solid record of how it happened. As the game is currently about 25% complete, it&#8217;s a good opportunity to summarise the progress to-date and take a look at the &#8216;big&#8217; decisions, which have already been made:<\/p>\n<h3>Decision: Role Playing Game<\/h3>\n<p>Many of the very first games I got hooked on were RPGs: Moria, Ultima 5, Death Knights of Krynn) but each of them always had things I thought &#8220;if only it did&#8230;&#8221;, so creating my own game would be my opportunity to put that into practice. I&#8217;ve started to create many RPGs over the years, but I&#8217;ve never finished one or even got it largely playable. This was due to various different causes, either I&#8217;d hit a wall somewhere (pathfinding, AI, memory, and graphical speed have all defeated me over the years) or a new game (Halo, World of Warcraft) would come along and I&#8217;d abandon my development for long enough that I forgot the intricate workings of the code, and rather than dive back in I abandoned it.<\/p>\n<p>So I&#8217;ve still never made a role playing game. Time to fix this!<\/p>\n<p>Another good reason is that it&#8217;s within my ability. Making something like a first-person shooter (at least, a good one!) just wouldn&#8217;t be possible for me because having decent graphics is too large a part, and my graphical ability&#8230; well, let&#8217;s just call it &#8220;<a href=\"http:\/\/www.paradicesoftware.com\/gui\/launch.htm?http:\/\/en.wikipedia.org\/wiki\/Programmer_art\" target=\"_blank\">Programmer Art<\/a>&#8221; and move on.<\/p>\n<h3>Decision: Free Pascal<\/h3>\n<p>Having decided on the type of game I&#8217;m making, the next step is to choose the programming language. These days there are more languages than ever, and some of the new ones are really good. C# + XNA would be my &#8216;high level&#8217; choice, it makes it ridiculously easy to get graphics on the screen and a game up and running&#8230;<\/p>\n<p>But&#8230;<\/p>\n<p>I&#8217;m not just programming to make a game, I&#8217;m also doing this because I want to be challenged. I want to take fundamental, low-level control over everything my code does in every situation. Using a low-level language (C++, Pascal&#8230;) means there&#8217;s a lot more up-front effort involved (getting graphics on the screen isn&#8217;t one line of code anymore, it&#8217;s a couple of hundred) but, to me, also much more satisfaction when it works!<\/p>\n<p>When I want to add a function, I can&#8217;t just copy a C# code snippet from the internet, I&#8217;ve had to go away and install the DirectX SDK, read the documentation for each instruction, look at the example code, re-interpret it to suit what I&#8217;m trying to do, and play with it until I get it to compile. The reward (and the knowledge that is acquired as a consequence of having to research every call) is worth it. (This is the same reason I&#8217;m not using an existing &#8216;game engine&#8217;, I&#8217;m creating my own with LX7).<\/p>\n<p>Having decided to use a low-level language, my choices are C++ and Pascal (I don&#8217;t want to learn another language at the same time as creating a complex game, the game at the end would suffer too much as a result of my learning-while-doing). I chose Pascal because, I&#8217;m not really sure why, I just &#8220;like it&#8221;.It has all the language constructs I&#8217;m going to need (primarily Classes), and I like that it&#8217;s not quite as low-level as C++, which gives me a little bit more room to spend on game logic but without having to sacrifice anything.<\/p>\n<p>Finally, choosing between my Pascal options, FreePascal and Delphi&#8230; I think FreePascal is superior! It definately compiles faster and makes smaller executables. It doesn&#8217;t support Windows GUI very well, but Icefall like 99% of games will have custom UI anyway. It&#8217;s also free. Finally, the platform is far less common than C++, and there aren&#8217;t many games in development using it (especially on Windows), so when the game is done and LX7 (the graphics\/game engine I&#8217;m creating to support Icefall at the same time) is finished, I might have something to give back to the FreePascal community. So it&#8217;s settled!<\/p>\n<p>Next time, I will talk about the third key decision for Icefall: whether to make it real-time, or turn-based?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I am currently working on a new role playing game called Icefall, and to help maintain clear thinking, correct decisions, etc etc etc, I&#8217;ve decided to document the development journey on this website as a blog. That way, once Icefall is released and becomes hugely popular (:D), I will have a solid record of how<\/p>\n","protected":false},"author":2722,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[5,4,76],"class_list":["post-1","post","type-post","status-publish","format-standard","hentry","category-icefall","tag-decision","tag-freepascal","tag-icefall"],"_links":{"self":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts\/1","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/users\/2722"}],"replies":[{"embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/comments?post=1"}],"version-history":[{"count":12,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts\/1\/revisions"}],"predecessor-version":[{"id":101,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts\/1\/revisions\/101"}],"wp:attachment":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/media?parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/categories?post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/tags?post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}