The Dungeon, Gameplay!

This is my first live game play video, it includes lots of awkward talking!

It is about a dungeon-crawler I made for 7drl in 2015. The Dungeon is a dungeon crawler that you control the dungeon itself instead of an adventurer. And your objective is killing the adventurer.

Enjoy!

Bloodworks

Bloodworks is an indie game that I am working on for last few months. It is an open-source (GPL-3.0) game and it will be completely free once it is released. Here is a gameplay video.

It is a top-down shooter/survival game. Main objective of game is achieving a high score, which is only possible by surviving more. Game gets harder and harder as it goes so I assume it will be impossible at some point.

There are various power-ups, weapons and bonuses that help players. It also has a leveling system that gives permanent perks to player.

I programmed the engine in C++ and gameplay in Lua. Engine is highly modified (and simplified version) of my previous work, bifrost, it uses OpenGL to render stuff, SDL to make things cross-platform, soloud for sounds. I also coded some lower level gameplay code in C++ to increase program performance.

Gameplay is programmed in Lua. Weapons, perks, monsters, bonuses etc all programmed in Lua side. Even missions are programmed in Lua. Currently only mission is Survival, which spawns stronger enemies as game progresses but it will be possible to add new modes in future. This makes the development process much faster. I am using sol2 for C++ and Lua interaction. It is an amazing library that handles communication between those two in a very easy way.

My main objective was making it very easy to mod the game. In future I will add a mod system that can upload, search or download various mods that other players develop.

It is (highly) inspired by Crimsonland. I am planning to add more content as the game grows, and hopefully make the gameplay more distinct than Crimsonland.

Crypto – NES game

So I haven’t written anything for a long time. I decided to fill my blog more with my personal projects and cool things I learned about programming. I will start writing one of the most satisfactory projects I did.

It is Crypto, it is a NES game me and my other 3 friends developed for NES platform (Yes, that NES platform) in GGJ 2016. I had prior NES programming experience and some tools ready before GGJ but whole programming took 2 days to complete. So here is a gameplay video.

This video is one of the older versions, some of the textures are changed but it is pretty much final other than that. We bringed a CRT TV and a famiclone to GGJ event, which made it even cooler!

Gameplay is coop. There are four magical objects (Potion, scroll, book and hourglass) scattered around a maze and objective of players are carrying them all to center of the maze. Subject of GGJ was “Ritual”, so players carries objects, make a ritual and escape the maze.

There are also enemies though, so gameplay is usually one player carrying the object and other one is defending him. However it is much slower when only single player holds an object. Second play can decide to help in carrying but this time it is much harder to control. To move down, both player must hit down at the same time. This makes it both annoying and fun at the same time! Once all objects are connected, players advance the level which makes the enemies stronger.

The coolest part was after the jam, we posted the game on Reddit and it got kinda popular. We sold some games on itch.io, made a deal with stoneagegamer which bundled our game in the cartridges they sold (for all we know, Crypto is the best selling NES game on 2016) and even made it into a indie game bundle!

The Dungeon

7drl için yaptığım bir rogue like. Diğer roguelike lardan farklı olarak adventurer ı kontrol etmiyoruz, onun yerine adventurer ı durdurmaya çalışan zindanız.
ss

Screenshot baya bir kaotik oldu. @ işareti adventurer, g ler goblin b ler ise butterfly. Kelebeklerler adventurer tarafından ‘Summon butterflies’ scroll u ile yaratıldı. Adventurer etrafındaki tehditlere göre item ya da skill kullanmaya çalışıyor. Çok kalabalık olduğu için önce charm scroll unu kullandı ve goblinlerden birini geçici olarak ally yaptı, sonrada butterfly çağırararak dikkat dağıtmaya çalıştı. Goblinler kelebeklere saldırırken o da onları kesiyor. HP si azalınca muhtemelen potion içmeye başlayacak. Savaş raporu şöyle bir şey:

ssfight

Zindan olarak ben de geçici olarak Goblin Priest#29 u kontrolüm altına aldım, henüz goblinler level 1 olduğu için pek bir skillleri yok, elimde olan heal skill i ile goblinlerden birini healladım. Genel olarak oynanış bu şekilde olacak, adventurer masum goblinlerimizi keserken biz de onu durdurmaya çalışıyoruz.

Bir hafta gibi bir süre limiti olduğundan oynanabirlik adına pek bir şey ekleyemedim. Zindan olarak yapabildiklerimizi yaratık yaratma ve kontrol etmeden ibaret. Daha çok kendi kendine oynayabilen bir roguelike oldu. Adventurer (ve istenirse minionlarımız) savaşıyor, büyü atıyor, item kullanıyor, eqipment kullanabiliyor vs vs. Ortalama bir roguelike da ne varsa basit te olsa implement etmeye çalıştım.

Link: http://enginmercan.com/TheDungeon.exe
Github: https://github.com/shultays/crawler/

Visual Studio 2013 runtime dll leri yoksa o da lazım (http://www.microsoft.com/en-us/download/details.aspx?id=40784)

Muhtemelen devam etmeyeceğim projeye, eğlenceli ama çok fazla zaman istiyor. Beklemede olan bi yığın şey var zaten 🙂

Tao of Programming

The Master was explaining the nature of Tao to one of his novices.
“The Tao is embodied in all software — regardless of how insignificant,” said the Master.
“Is the Tao in a hand-held calculator?” asked the novice.
“It is,” came the reply.
“Is the Tao in a video game?” asked the novice.
“It is even in a video game,” said the Master.
“Is the Tao in the DOS for a personal computer?” asked the novice.
The Master coughed and shifted his position slightly. “The lesson is over for today,” he said.

http://www.mit.edu/~xela/tao.html

Stonehenge

Burayı görme fırsatı da yakalamış olduk

Lakin malesef taşlara pek yaklaştırmıyorlar, uzaktan izliyorsun öyle. Baya fazla hırpalanmış sanırım, bu yıldan itibaren yakınına gidemiyormuşuz. Doğrusu biraz hayal kırıklığı yaşattı, yakından görmeyi gerçekten çok istiyordum.


Buda bayadır göremediğim bir sahne. Resimde seçemeyenler için bu bir gök kuşağı 🙂

Roma zamanında kalma bir şehirmiş. Adındanda anlaşılacağı banyoları ile meşhur 🙂 Şehirde bir çok halka açık banyolar bulunuyor, fakat malesef gezide test etme imkanımız yoktu. Başka bir bahara artık

Geocities

Acımız büyük, bu gün geocities kapanıyor. Kapanmadan önce bir bakayım nelerim varmış diye 5 yıl önceki çalışmaları mı görüp hüzünlendim =) Ama maalesef bir çoğu 7host’ta duruyordu fakat 7host kullanmıyorum diye hesabımı silmiş =(

misal şu resme tıklayıp 4 yıl öncesinden bir oyun görün.

erman

Sağ sol yukarı ve boşluk tuşları ile oynanıyor. Amaç mümkün olduğu kadar adam öldürmek =)

Bu da UO vaktinden kalma bi resim

tlmcikler

Bu gemiyi bir şekilde çalmıştık 😀 sanırım birisi anahtarı (veya her ne ile kontrol ediliyorsa) üzerine unutmuştu anında atlayıp götürmüştüm 😀 Sonrada lorac ben ve raistlin balık tutmaya gitmişiz ve gemide biraz uzanıyoruz (ayrıca ata dikkatinizi çekerim =D)

Düşünüyorum da bu UO’da pk lar ve diğerleri bir birine girmişken, ortalıkda katliam oluyorken biz üçümüz milletten bandajdır iksir malzemesidir çalmaya çalışırken aldığım zevki başka bir oyunda almamışım. Hey gidi günler hey

Bir küçük açıp geocities ile karşılıklı içesim geldi.

Geocities’in kapanışı üzerine xkcd.com un yaptığı bir tasarım var ki gözlerimden yaş getirdi. İlerde kapanabileceği ihtimali üzerine şuradan da ulaşabilirsiniz.

In These Stones Horizons Sing

Wales gezisinde gördüğümüz gayet ihtişamlı bir binada yazan söz bu.

Daha doğrusu yazılış şekli şöyle

in_these_stones_wmc

Crew Gwir In These Stones
Fel Gwydir Horizons
O Ffwrnais Awen Sing

Yarı ingilizce yarı welsh dilinde yazılmış. Wales’te bu iki dil de konuşuyormuş (ama sanırım gençler arasında artık welsh pek fazla tutulmuyor). Tabi bu şekilde karışık olunca gittiğimizde çözememiştik =) Sonradan Erhan araştırdı ve ne anlama geldiğini öğrendik. Welsh dilinde yazılan kısmın ingilizce çevirisi de şuymuş “Creating truth like glass from the furnace of inspiration” veya türkçe çevirisi “İlham fırınında cam yapar gibi gerçeği oluşturmak”

Neyse, işin özü ilginç bir mekan. Cardiff kalesi görülmeye değer bir yer.

Geziden bir kaç hatıra.

dsc00839dsc00922

dsc00903

dsc00839

dsc00871

dsc00870

2 ilginç olay

Uzun süredir yazamıyorum, tatil gibi bir şey yaptık bu gün bitti.

Bu gün iki tane ilginç şey öğrendim.

Birincisi integer (ve benzer 1 byte dan büyük değişken tipleri) hafıza da ters tutuluyormuş. Mesela integer 4 byte ise

[sourcecode=”cpp”]
int a = 0x04030201;
char *c = (char*)&a;
printf(“%d %d %d %dn”, *c, *(c+1), *(c+2), *(c+3));
[/sourcecode]

ekrana 1 2 3 4 basıyor. Yani a integer’ı hafıza 04 03 02 01 olarak değil de 01 02 03 04 diye tutuluyormuş. Niye böyle bir şeye gerek duydular bilmiyorum.

Bir diğer şey ise her data tipi her adrese yazılamayabiliyormuş. Mesela 4 byte olan bir integer sadece 4 ve katı olan adreslerde olabiliyor, 2 byte olan short ise sadece 2 ve katına konulabiliyor, 1 byte char ise her adreste olabiliyor.

Mesela bir structure oluşturursak

struct test{
char a;
int b;
char c;
};

bu structure adres 0x1000 de allocate edilirse o adresteki şu şekilde oluyor

a***bbbbc***

ilk önce byte olan a koyuluyor, ama ondan sonra b konulamıyor çünkü 4 ve katı adrese denk gelmiyor, 3 tane boş byte bırakılıyor ve sonra 4 bytelık b integer ı geliyor. daha sonra c geliyor ve ondan sonraki 3 byte gene kullanılamıyor.

ve sonuçta bu structure hafıza’da 12 byte kaplıyor. Eğer biz şu şekilde değiştirirsek

struct test{
char a;
char c;
int b;
};

bu sefer hafızada tutulan yapı şöyle oluyor.

ac**bbbb

ve toplam 8 byte lık yer kaplıyor.

Bu compiler a bağlı bir durum tabi. Akıllı compiler lar structure ları ikincisi gibi düzenleyebiliyormuş, fakat dev cpp bu konuyu atlamış gibi =) Bu olayın ismi struct padding miş.

Adreslendirme de bu şekilde bir zorunluluk yok, niye compiler lar böyle bir şey yapıyor bilemiyorum, eğer kodumuzun başına
#pragma pack(1)
yazarsak compiler bu olayı iptal ediyor ve bizim yazdığımız sırada ve gerçek boyutlarında hazırlıyor structure ları. Ama bir kötü yanı var ki kullanılıyor demek (belki de her mimaride çalışmıyordur)