Posts tagged ‘programming’

November 16, 2017

Lisp Adventures 4: Drawing in McCLIM (and a Snake Game)

The making of a snake game in McCLIM…

November 9, 2017

Lisp Adventures 3: Making Our Own McCLIM Application

In this video I go through the process of making something a little closer to a real-world application using McCLIM. More particularly, I use the text editor gadget to put together a simple, tab-enabled text editor.

October 31, 2017

Lisp Adventures 1: Jeremiah Learns McCLIM

In which I begin making videos of myself playing around with programming languages for YouTube…

September 21, 2017

Casus part I: planning the game

Before jumping into writing a program, I like to have at least a general idea of where I’m going. The amount of detail depends on the particulars of a project, but I generally don’t start without at least some sort of goal. For my asteroid game, due to its simplicity, my pre-planning consisted essentially of “a spaceship will navigate around asteroids.” Casus, on the other hand, is intended to be a role-playing game with at least a few hours of playability. It therefore required a little more detail in its planning. The caveat is that these details may undergo significant changes during development, but they at least provide a general road map for development.

“Casus” is Latin for “the fall.” As mentioned, the game is originally going to be written in Latin; an English translation of the game will be provided on the App stores, but at a small price since I’d rather encourage use of the original game. This is an RPG taking place in a Latin-speaking world, and I think Latin is part of the uniqueness and charm of the game. (In any case, if you get through this blog series, you’ll probably be able to figure out what’s going on in the game!) The overall story goes thus:

Carathusiæ rex Matthæus, homo boni cordis non autem paucæ stultitiæ, populo bonam fortunam petens tulit inopiam. Jacobus magus regis debilitatem videns Matthæi fidem obtinuit regeque ignorante populum ad res novas egit. Ut rex exercitús mitteret ad regni finem ad bellum gerendum cum barbaris persuasit. Interea, scelerum grex a Jacobo convocatus est. Jurejurando accepto, gregales in palatium intraverunt regem necatum.

Regis autem uxor magorum erat artis perita, et cantamine maritum servavit. Grex qui non potuit regem necare in carcerem cum uxore ejecerunt. Regis reginæque vero filius a grege non inventus est nam servus regis cum infante egressus ex palatio procul puerum aluit. Die natali XVI pueri servus omnia eum docuit et puer novum facinus cœpit ad patres liberandos…

An English translation might be along these lines:

Matthew, king of Carathusia, was a good-hearted but incompetent man. He sought for the good of his people, but only managed to leave them in poverty. Jacob the sorceror saw the weakness of the king and obtained his trust. Meanwhile, unbeknownst to the king, he urged the people to insurrection. Jacob persuaded the king to send off his armies to the borders of the kingdom to fight with foreigners, while the sorcerer gathered a band of rogues and bound them in an oath to kill the king.

The king’s wife was also skilled in sorcery, and protected her husband with a spell. The band realized that the king could not be killed and threw him and his wife into the dungeon instead. The king and queen, however, had a son who was not found by the conspirators. A servant of the king absconded from the palace with the infant and carried him to a faraway place. On the boy’s sixteenth birthday, the servant recounted the events to the boy, who then began a new undertaking to free his parents…

I love JRPGs, and the Dragon Quest series in particular, and I took some inspiration from the original Dragon Quest (“Dragon Warrior” on my NES) game. Nonetheless, I decided to follow more closely RPGs such as Ultima and Wizardry. In particular, the plan is to have some amount of player control over character creation and development.

Upon starting a new game, the player will be able to set up some initial character attributes. At least, the player will enter a name and select a profession. Currently contemplated professions are eques/caballarius (“knight”; probably “eques” will be the term in the game, but the medieval term “caballarius” is being considered); magus (“sorcerer”); fur (“thief”); monachus (“monk”); and scelus (“rogue”). The profession will determine the avatar and initial attributes, but the player will be able to develop the character in different ways during the game.

The planned character attributes are common in the RPG world; they’ll be in English from now since they’re not made up from scratch but a part of the generic makeup of RPGs: hit points; magic points; strength; defense; agility; intelligence; alignment; and experience (which may be connected to a level). The player will also have a quantity of aureum (gold) or pecunia (money) in order to buy and sell with NPCs. Alignment can be good or evil; the eques and monachus start out with “good” alignment, fur and scelus start out as “evil,” and magus can go either way. The alignment is expected to have certain in-game effects. For example, it is planned that an “evil” character will not be permitted to trade with merchants, but fures (thieves), instead of attacking, will offer to trade with the player.

Weapons include the baculum (stick), clava (club), pugio (dagger), gladius (short sword), and spatha (long sword).

Armor includes lorica hamata (chain mail), lorica squamata (scale armor), and lorica squamata (segmented armor). Additionally, there are ocreæ (metal greaves), manicæ (gauntlets), caligæ (boots), and the galea and cassis (leather helmet and metal helmet, respectively). Shield options include the scutum (leather-covered wooden shield) and the clipeus (metal shield).

A number of magic spells are planned to be available to the player, including sanare (heal), nocere (hurt), curare (a stronger heal spell), lædere (a stronger hurt spell), debilitare (weaken), terrere (terrify), firmare (strengthen), and necare (kill; i.e. “Avada Kedavra”).

Enemies include the mus (mouse or rat), vespertilio (bat), vipera (snake), fur (thief), miles (footsoldier), spectrum (ghost), venefica (witch), veneficus (warlock), cyclops (hopefully you know this one), versipellis (werewolf), draco (dragon), and gorgo (gorgon/Medusa). This list is apart from Jacobus and possible other bosses.

There will be a number of kingdoms other than Carathusia (at least three), each with its own castle and two or more towns. Indeed, the player will start outside of Carathusia, away from the notice of the sorceror Jacobus. The player will have the opportunity, if he or she so desires, to visit each of the other kingdoms and seek the support of their kings before going up against Jacobus.

In the game, there will be three general location types: the overworld, in a top-down perspective; the towns, also in a top-down perspective; and dungeons, currently planned to be done in a 3D perspective. The 3D perspective of the dungeons Ultima and Wizardry will be updated somewhat with a nicer appearance, but I’m not an artist and don’t have a large budget, so don’t expect the Legend of Grimrock here. One side of me does want to change the plans somewhat and use 2D procedurally generated dungeons in the spirit of Nethack. These plans are guidelines, not set in stone. We’ll see what happens. In either case, the dungeons will provide ample opportunity for the grind, allowing the player to level up before fighting bosses.

With the above in mind, I began writing some code to try out displaying a map for the character to wander around. This served as sort of a “proof of concept” for the overworld. The next blog post will discuss the initial steps.

September 14, 2017

Asteroid Belt

Recently, instead of paying attention in Constitutional Law class I sloppily slapped together a simple game in order to reacquaint myself with the LibGDX framework. The result is a game of dodging and shooting relatively slow-moving asteroids.

I threw the game up (as a free app) on the Google Play Store and the Amazon App Store (the latter is an affiliate link, FYI). One of the draws of LibGDX is that it supports various platforms, one of which is Javascript/HTML5 using Google Web Toolkit. Because of this, you can also play “Asteroid Belt” online (left and right arrows move; spacebar shoots).

The “Asteroid Belt” game was preliminary practice in anticipation of a more ambitious project. This new project is a western-style computer RPG in the tradition of “Ultima” and “Wizardry.” The current plan is for the game itself, called “Casus,” to be available as a free download on Google Play and Amazon, but with the twist that it will be in Latin. An English version (perhaps eventually localized with other languages) will be available for a small price.

I’m a huge fan of free (in the GNU sense) software, so I would like to eventually provide Casus under the GPL. Nonetheless, I would like app store exclusivity for my games for at least a certain amount of time. I’m trying to figure out the best way to work this out. One option is an initial release as a proprietary app, and a later GPL release. Another is releasing the source code under the GPL from the start, but using a restrictive license for the assets (graphics, sound, possibly story line), at least initially.

For now, expect some upcoming blog posts discussing the development of the forthcoming game…