31 Temmuz 2010

Counter-Strike: Source harita yapımı anlatımı

Umarım harita yapmak isteyen arkadaşlara yardımcı olabilirim ;)

Harita yapmak için Steam'dan tools'ta Source SDK'yı indirmemiz gerekiyor. İndirdikten sonra açıyoruz zaten artık ayarları falan kendisi otomatik yapıyor, o kısımları atlıyorum. Alttan oyun olarak Counter-Strike: Source'u seçiyoruz ve harita yaptığımız program olan "Hammer Editor"u çalıştırıyoruz.

Hammer'i açtık... File>New dedik. 4 tane penceremiz var. Bunlardan biri haritamızı 3 boyutlu görmek için, diğer üçü ise çizimleri yapacağımız ve haritamızın 3 tarafından çizimlerini gösteren pencereler.

CSS haritaları temel olarak iki tür parçalardan oluşur, "brush"lar ve "entity"ler. Brush'lar, kutu şeklinde yarattığımız ve sonradan şekillendirebildiğimiz yüzeylerdir. Yerler, duvarlar, ışınlanmamızı sağlayan görünmez duvarlar, silah satın aldığımız ve bomba kurduğumuz yerleri belirleyen görünmez duvarlar vs bunların hepsi brushtır. Entity'ler ise nokta şeklinde haritaya konur. Oyuncuların başlama noktaları, çeşitli 3 boyutlu eşyalar(Sokak lambası, kapı kolu, devrilen bidonlar, süsler vs), ışığın geldiği nokta gibi şeyler entitylerdir.

Hadi başlayalım!
Anlatacağım harita, fy_iceworld'a benzeyen basit bir harita olacak.

Önce bir zemin çizelim


Sol tarafta, gri kutulu düğmeye basalım[1-A]. Bununla brush'ları çizeceğiz. Sağ tarafta, desenleri seçtiğimiz bir bölüm var[1-B]. Oradan "Browse"ye basıp bir çimen deseni seçelim. "Filter" yazan yere grass yazıp herhangi birini seçebilirsiniz. Sonra sağ üstteki pencerede 1024x1024 boyutlarında bir kutu oluşturalım. Kutuyu yaratmak için klavyeden entera basabilir, veya fare ile sağ tıklatıp "Create object"i seçebiliriz. İptal etmek için klavyeden esc'ye basabiliriz.

Sol üstteki pencerede beyaz "camera" yazısına[1-C] sağ tıklayıp "3D textured"i seçelim. Kamera penceremizde gezinmek için faremizi kamera penceresine götürdükten sonra, space tuşuna basılı tutup normal oyunda gezindiğimiz gibi WASD tuşlarıyla geziniyoruz. Etrafa bakınmak için fareyle tıklayıp hareket ettirmeniz yeterli. Aynı şekilde diğer üç çizim penceresini kaydırmak için de space'ye basıp fareyle sürükleyebiliyoruz.

Haritamıza duvar ekleyelim

Yine gri kutuya basıp bir duvar deseni seçelim. Ben tuğla deseni seçtim. Bu seferki ilk yaptığımızdan biraz daha farklı olacak. İlk brush'ımızda yüksekliği ihmal ettik çünkü(varsayılan olarak 64 olmuş olması lazım). İlk resimde gördüğünüz şekilde, herhangi bir pencerede duvarı çizin. Yüksekliği 128 girebilirsiniz, kalınlık için de 64 iyidir. Eğer duvarı yine sağ üstteki pencerede çizdiyseniz yüksekliği alttaki pencerelerde girmeniz gerekecek. İsterseniz benim yaptığım gibi duvarı yukarı çekebilirsiniz, bir sorun yaratmaz. Aynı işlemi geri kalan 3 duvar için de yapın.

İlk entity'lerimizi koyalım


Iceworld'dan farklı olarak, ortaya 4 tane duvar yerine 4 tane konteyner koyalım. Konteyner şeklinde bir kutu yapıp ona desen de verebiliriz, ama entity olarak koyarsak çok daha kaliteli olur. ;) Solda gri ampullü düğmeye[2-A] basalım.

Sağdan[2-B] entity'mizin cinsini seçeceğiz. "Objects:" yazan kısmın altına "prop_static" yazalım. prop_static hareket etmeyen, süs amaçlı 3D objeler için. Haritamızda herhangi bir yere tıklayıp entera basarak entitymizi yaratalım, daha sonra hareket ettiririz. Entity'mizin üzerine sağ tuşla tıklayıp "proporties"i seçelim. Listede "world model"[2-C] i seçtikten sonra, sağda "browse"ye basalım.


Filter kısmına "cargo" yazıp düzgün bir konteyner seçelim.[3. resim] OK'a bastıktan sonra apply diyelim ve işte konteynerimiz! Özellikler penceresini kapatıp onu düzgün bir şekilde yerleştirelim. Solda kırmızı oka[3-A] bastıktan sonra konteynerimizi seçelim. Önizleme penceresinde herhangi bir yere, diğer pencerelerde cismin ortasındaki çarpıya basarak seçimi yapabiliriz. Tabii hareket ettirmek için çizim pencerelerini kullanmamız gerekecek. Konteyneri uygun bir yere koyduktan sonra çizim pencerelerinden birinde cisme sağ tıklayıp "copy" dedikten sonra hemen yanına "paste" diyelim, sonra bu işlemi bir daha tekrarlayalım. 3 konteyneri dördüncü resimdeki üçlülerden biri gibi yerleştirdikten sonra, bu sefer üçünü birden seçmek için CTRL ye basılı tutarak üçünü de seçip dördüncü resimdeki gibi hepsini yerleştirelim.


Şimdi eğer dikkat ederseniz, biraz yakınlaşırsak konteynerlerin az da olsa uçtuğunu göreceksiniz. Işık olunca gölgeleri çirkin görünebilir. Ama özellikle yere gömmedim. Çünkü şimdi yere daha gerçekçi bir görünüm kazandıracağız.

Yer şekilleri


Solda grikutunun altındaki mavili yeşilli kutuya tıklayın[5-A]. Sonra önizleme penceresinde çimenlerin üst kısmına tıklayın. Şimdi bu düğmeyi bir brush'ın seçtiğimiz yüzeyindeki desenini değiştirmek için de kullanabiliriz, ama biz yer şekilleri yapmak için kullanacağız. Açılan pencerede yukarıdan "Displacement"e[5-B] basın. Ardından "Create" düğmesine tıklayın[5-C]. Gelen pencerede "Power"i 4 yapıp onaylayın. Bundan sonra "Noise"ye[5-D] basıp "min" değerini 0, "max" değerini 16 yapın. Bu şekilde çimen en fazla 16 birim yükselecek, en az 0 birim yükselecek. "Ok"a basın ve diğer pencereyi kapatın. Şimdi daha gerçekçi bir zeminimiz oldu.

Oyuncuların başlangıç noktaları

Bunun için info_player_terrorist ve info_player_counterterrorist adında iki entity kullanacağız. Bu entity'leri harita yaparken çevredeki cisimlerin ne kadar büyük olduğunu anlamak için de kullanabilirsiniz. Bu entity'leri koyarken dikkat etmeniz gereken ne fazla aşağıda ne de fazla yukarıda olmamaları. Zeminimizi bozduğumuz için bazı yerleri normalden daha yüksek, eğer oyuncumuz başlangıçta yer ile iç içe girerse oyun başladığında kımıldayamaz. Eğer fazla yukarı koyarsanız da oyun başladığında rahatsız edici olabilir.

Şu anda çizim pencerelerimizin kareleri çok büyük, hassas olarak yerleştiremeyiz. Yukarıdan "Map>Grid Settings>Smaller Grid"e basarak daha hassas konumlandırma yapabilirsiniz. İki takımdan birinin oyuncularının sırtı dönük olduğunu fark edeceksiniz. Onları ters döndürmek için sağ tıklayıp "Flip objects>Horizontally" diyebilirsiniz. Daha hassas bir çekilde çevirmek istiyorsanız seçim modundayken plan pencerelerinde entity'e bir kere daha tıklayın, 4 kenarında halkalar olduğunu göreceksiniz. Bu halkalara tıklayarak oyuncularınızın başladıklarında bakacağı yönü belirleyebilirsiniz.


Şimdi altıncı resimdeki gibi bir tarafa teröristleri bir tarafa da anti-teröristleri yerleştirin. Ben pencerelerdeki kareleri iki kere küçülttüm ve toplam 32 tane başlangıç noktası koydum. Eğer başlangıç noktalarının sayısı yeterli değilse, örnek olarak benim yaptığım haritanın olduğu sunucuda 40 kişi oynuyorsa oyun başladığında 8 kişi takım seçemeyecek, spectator olarak kalacaklar. O yüzden ileride harita yaparken her takım için 32 tane başlangıç noktası yapmak daha iyi.

Satın alma bölgesi


Iceworld'daki gibi ortaya bir satın alma noktası yapalım. Brush çizdiğimiz gri kutuya tıklayın. Desen seçtiğimiz bölümde, filter kısmına "tools" yazın. Buradakiler araç olarak kullandığımız desenler, gökyüzü, duman, merdiven vs bunlar ile yapılıyor. Buradan "trigger" yazanı seçin. Yedinci resimdeki gibi ortaya bir kutu çizin. Bu oyunda görünmeyecek, ama ayarları yaptığımızda oyuncumuz içinden geçtiğinde silah satın alabilecek.

Kutu seçiliyken ona sağ tıklayıp "Tie to Entity" demeliyiz. Şimdi kutumuz brush kökenli bir entity oldu. "Class" kısmından "func_buyzone"yi seçiniz. Listeden "Team Number"ı seçip, sağ taraftan teröristler için mi yoksa anti-teröristler için mi satın alma bölgesi olduğunu seçmelisiniz. Biz her iki takımın da satın alabilmesi için, önce teröristleri seçip apply diyeceğiz. Ardından kutuyu kopyalayıp yapıştırdıktan sonra onu anti-teröristler için ayarlayacağız ve diğer kutunun olduğu yere koyacağız. Yani üst üste binecekler. Yardım için yedinci resime bakabilirsiniz.

Silahlar

Şimdi bir de yere silah koyalım. Tahmin edeceğiniz üzere bunun için de entity koyacağız. weapon_ ile başlayan entity'ler silahlar. Çabuk olsun diye silahların hepsini MP5 yapacağım. Siz istediğinizi yapabilirsiniz. Haritamız biraz küçük olduğu için silahlar oyunculara yakın duracağı için başlar başlamaz ellerine gelebilir.

Gökyüzü

Gelelim en önemli kısımlardan birine, gökyüzü. Haritada açık kalan her yeri örtecek şekilde, toolsskybox desenini kullanarak bir tavan yapacağız. Bu tavan aynı zamanda oyuncuların birbirlerinin üzerine çıkarak duvarkara çıkarlarsa haritanın dışına düşerek sonsuz bir düşüşe geçmelerini de engelleyecek. İnanın haritada bu tür açıklıklar bırakmak istemezsiniz.


Bir düzeltme: oyuncular zıpladığında duvarların tepesini görmeleri için sekizinci resimdeki gibi birer kenardan uzattım, haritayı ilk yaparken bu kadar yüksek konteyner koyacağımı düşünmedim ve direk bir kutu halinde gökyüzünü kapatırım diye düşünmüştüm o yüzden kötü oldu. Siz de bunu yaptıktan sonra sekizinci resimdeki gibi haritamızı kapatalım. (Daha iyi görün diye geçici olarak bir tarafa skybox çizmedim.)

Işık


Son olarak haritamıza ışık koyalım, bunu yapmazsak her yer apaydınlık olur ve gerçekçi durmaz. Yukarıya bir yere, gökyüzümüzün dışına çıkmayacak şekilde "light_environment" adındaki entity'i koyalım. Şimdi önizleme penceremizde oluşturduğumuz entity'nin dibine gidip ona iki kere tıklayalım. Listede "Pitch Yaw Roll" zaten seçili, sağda "Point at"a basıp önizleme penceremizde ışığın hedefinin olmasını istediğimiz yeri seçiyoruz.[9. resim] Yani ışığın kaynağı entity'miz, yönü de demin tıkladığımız yer oluyor. "Apply"a basıp kapatıyoruz.

Tebrikler! İlk haritanızı yaptınız. Haritayı kaydettikten sonra "File>Run Map..."a veya direk F9'a basın. Ayarlarla oynamanıza gerek yok, direk OK'e basın ve oyun yaptığınız harita ile açılsın!

Anlatımda yaptığım haritayı örnek olarak aşağıdaki linkten indirebilirsiniz:
http://www.megaupload.com/?d=7N5M036D

Bu anlatımın "Antarktikalı" tarafından yazıdğınını belittiğiniz sürece istediğiniz yerde paylaşabişirsiniz.

26 Temmuz 2010

Python ile test şıklarını sallamak

Python ile bu sene yazdığım test sorusu sallayıcısı. Javascript, PHP ve C'de(hatta Sony PSP'de çalışıyor :D) versiyonları da mevcut. Javascript ve PHP için http://lys01.0fees.net/salla/ adresine de bakabilirsiniz. Programlamaya başlayan arkadaşlar için kullanışlı bir programcık; else if, while döngüleri, değişkenler, girdi-çıktı vs...

import random
import sys
n=input("Kac soru?:")
i=1
k=1
if (300 >= n > 0):
while (i <= n):
a = random.randint(1,5)
while (k < 6):
if k==a:
sys.stdout.write("#")
else:
sys.stdout.write("-")
k = k+1
print
k = 1
i = i+1
else:
print "Soru sayisi yalnizca 1-300 arasinda olabilir."

25 Temmuz 2010

Youtube erişimi için yapmanız gerekenler

Biliyorsunuz artık DNS değiştirmek Youtube'a girmeye yetmiyor... Erişim için hosts dosyanızı değiştirmeniz lazım. Bu yazıyı herkese yardımcı olabilecek şekilde yazmaya çalıştım.

Linux:
/etc/hosts dosyasının sonuna eklemeniz lazım. Çoğu işletim sisteminde bunu terminal(konsol) açıp nano ile yapabilirsiniz. Veya root yetkili herhangi bir metin düzenleyici. Ama nano daha kolay. Konsola:
sudo nano /etc/hosts
yazdıktan sonra aşağıdakileri kopyalayıp dosyanın sonuna yapıştırıyoruz,
ctrl+o ile kaydediyoruz. Ctrl+x ile çıkıyoruz...

Mac:
Mac kullanmıyorum, yanlışsa kusura bakmayın. Linux için yaptığımız gibi yapabiliriz. Terminal'i utilities'in altında veya applications'ta bulabiliriz. Açıp root yetkisi kazanmak için "su root" yazıyoruz. (Mac terminalinde sudo yapamayabiliriz çünkü, emin değilim) Ve aşağıdaki komutu giriyoruz:
nano /etc/hosts (çalışmazsa nano yerine pico yazın)
Gerisi Linux'la aynı.

Windows:
Vista veya Windows 7 kullanıyorsanız start menüsünden Notepad'ı bulup "Run as administrator" demeniz gerekmektedir(Admin yetkiniz varsa örn. Windows XP bunu yapmanıza gerek yok direk açabilirsiniz). Sonra notepad'dan C:\WINDOWS\system32\drivers\etc\hosts dosyasını açıp yine aşağıdakileri dosyanın sonuna ekliyoruz ve kaydediyoruz.

72.14.221.100 translate.google.com docs.google.com maps.google.com www.google-analytics.com tools.google.com clients.google.com

74.125.43.103 docs.google.com
74.125.43.103 translate.google.com
74.125.43.103 code.google.com
74.125.43.103 pages.google.com
74.125.43.103 video.google.com
74.125.43.103 translate.google.com.tr
74.125.43.103 docs.google.com
74.125.43.103 sites.google.com
74.125.43.103 books.google.com
74.125.43.103 chrome.google.com
74.125.43.103 sketchup.google.com
74.125.43.103 froogle.google.com
74.125.43.103 labs.google.com
74.125.43.103 mars.google.com
74.125.43.103 moon.google.com
74.125.43.103 notebook.google.com
74.125.43.103 toolbar.google.com
74.125.43.103 browsersync.google.com
74.125.43.103 catalog.google.com
74.125.43.103 codesearch.google.com
74.125.43.103 dir.google.com
74.125.43.103 earth.google.com
74.125.43.103 groups.google.com.tr
74.125.43.103 shopping.google.com
74.125.43.103 sky.google.com
74.125.43.103 support.google.com
74.125.43.103 tools.google.com
74.125.43.103 wap.google.com
74.125.43.103 answers.google.com
74.125.43.103 google-analystics.com
74.125.43.103 clients2.google.com
74.125.43.103 youtube.com
74.125.43.103 www.youtube.com
74.125.43.103 docs.google.com
209.85.229.99 youtube.com
209.85.229.99 www.youtube.com
209.85.227.101 translate.google.com
209.85.227.105 maps.google.com
209.85.227.101 code.google.com
209.85.227.113 pages.google.com
209.85.227.100 video.google.com
209.85.227.138 docs.google.com
209.85.227.101 sites.google.com
209.85.227.100 books.google.com
209.85.227.101 chrome.google.com
209.85.227.113 sketchup.google.com
209.85.227.102 froogle.google.com
209.85.227.102 labs.google.com
209.85.227.102 mars.google.com
209.85.227.139 moon.google.com
209.85.227.113 notebook.google.com
209.85.227.101 toolbar.google.com
209.85.227.102 catalog.google.com
209.85.227.113 codesearch.google.com
209.85.227.113 dir.google.com
209.85.227.138 earth.google.com
209.85.227.139 groups.google.com
209.85.227.100 groups.google.com.tr
209.85.227.139 shopping.google.com
209.85.227.138 sky.google.com
209.85.227.139 support.google.com
209.85.227.139 tools.google.com
209.85.227.102 wap.google.com
209.85.227.100 answers.google.com

Diplomamla adam öldürüyorum!



Can sıkıntısı... Uzun bir aradan sonra, bu yeni bir skin(11 Temmuz 2010). Mezuniyetimde verilen diplomayı CS:S'ye bıçak olarak modladım. :D Daha güzel dursun diye gerçeğinden farklı olarak okul logosunu ters çevirdim.

-Phong
-Normal map
-Yeni sesler
-Dünya modeli(diğer oyuncuların elinde gördüğünüz)


Model: Antarktikalı
Desenler: Antarktikalı
UV haritası: Antarktikalı
Derleme: Antarktikalı
Animasyon: Xero
Seslser: B.A.$witch

İndirmek için:
http://www.megaupload.com/?d=W5VFPQ4J

CS:S için döner bıçağı!!!




11 Eylül 2007 tarihinde yapmışım. İlk tam biten ve tamamen benim yaptığım skin'imdi.

İndirmek için:
http://www.megaupload.com/?d=J2WJYKVW

Dark Messiah dagger for CSS convert






25 Mayıs 2007, Dark Messiah: Might and Magic oyunundaki Shadowsteel Dagger'larını Counter-Strike:Source'a çevirdim. 2 elli animasyon vs... Videoyu izleyerek daha ayrıntılı görebilirsiniz ;)

İndirmek için:
http://www.megaupload.com/?d=L3ES9V2F

CS:S deagle skin: "Desert Evil"






17 Mayıs 2007, ilk yaptığım derleme. Tutacak kısmı karbon fiber, üst parçada ton farklı, dürbün ve lazer.(Lazerin çıktığı yerin aslında dürbünün pil kısmı olduğunu o zaman bilmiyordum, ama yine de güzel duruyor :D) Render için poz veren kişinin Sergün olduğunu da hala hatırlıyorum :P

İndirmek için:
http://www.megaupload.com/?d=J9MVJMZU