ww w.oyun yapali.co m xfabs x acknexturk.co m

103
3D Game Studio FUNCTĐONLAR: 1-)TEXT font resim_font=<system.pcx>,10,12;//özel font resim olarak font arial="arial",1,20;//standart font text yazi()//text objesi tanımlanıyor { pos_x=10;//x koordinat teki başlangıç adresi pos_y=10;//y koordinattaki başlangıç yeri font= arial;//yada “resim_font” yazarak resim fontu seçeriz string=" a=\n b=\n c=\n";//yazi /n alt satıra geçer alpha=100;//parlaklık layer=2;//daha önce panel ya da yazı varsa hangisi hangisinin //üzerine geçeceğini belirten bir hiyareşi flags=visible , outline , transparent; } Burada önemeli olan “flags” aldığı parametreler. Bunlar: condensed –yazıyı yatay olarak sıkıştırır. narrow -yazıyı sıkıştırır. transparent – arka planı gösterir. visible – yazının görünmesi ya da göstermemek.

Upload: guestbfa62eb

Post on 26-Jun-2015

1.118 views

Category:

Entertainment & Humor


2 download

TRANSCRIPT

Page 1: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

3D Game Studio

FUNCTĐONLAR: 1-)TEXT font resim_font=<system.pcx>,10,12;//özel font resim olarak font arial="arial",1,20;//standart font text yazi()//text objesi tanımlanıyor { pos_x=10;//x koordinat teki başlangıç adresi pos_y=10;//y koordinattaki başlangıç yeri font= arial;//yada “resim_font” yazarak resim fontu seçeriz string=" a=\n b=\n c=\n";//yazi /n alt satıra geçer alpha=100;//parlaklık

layer=2;//daha önce panel ya da yazı varsa hangisi hangisinin //üzerine geçeceğini belirten bir hiyareşi flags=visible , outline , transparent; } Burada önemeli olan “flags” aldığı parametreler. Bunlar:

condensed –yazıyı yatay olarak sıkıştırır. narrow -yazıyı sıkıştırır. transparent – arka planı gösterir. visible – yazının görünmesi ya da göstermemek.

Page 2: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

shadow – TTF gölgelendirme yapar. outline- TTF yazıları belirgin hale getirir.

Text function unda “string” rakam atayamıyor.

Page 3: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

2-) PANEL Ön panelle ilgili yazı resim koyabilmek için bir function. bmap fatih=<fatih.pcx>;//resim değişkeni PANEL ekran_panel() { pos_x=10;//yazının başlangıç kordinati pos_y=10; /*---------------------------------------------------------------------------------- Ekrana resim yerleştirmek için Windows özelliğini kullanırız bu özelliğin ilk 2 parametre (x,y) pos_x ve pos_y belirten koordinattan başlayarak verdiğiniz x,y koordinattan resim başlayacak. Diğer 2 parametre sırasıyla genişlik ve yükseklik resmin. Diğer parametre resmin değişkeni. Son 2 parametre (x,y) ise resmin neresinden başlayarak ekrana yerleştirelecegini ifade eder. ----------------------------------------------------------------------------------*/ window(200,200,400,400,fatih,500,500); /*---------------------------------------------------------------------------------- Digits özelligi ise kordinatı verilen yere sadece rakam yerleştirmeye yarar. Aldığı ilk 2 parametre ekranın neresinden başlanacağını kordinatıdır. Diğer parametre yazının uzunluğunu verir yazıdan daha uzun bir değer verirseniz sağa tarafa yanaşmış olarak yazılır. Diğer parametre font değişkeni diğer parametre çarpan değeridir. Son parametre ise bir ekrana yazdırmak istediğimiz rakam, değişkendir. ----------------------------------------------------------------------------------*/ digits=0,0,9,arial,1,b; digits=0,20,9,arial,1,a;

Page 4: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

/*---------------------------------------------------------------------------------- Visibile= rakamın görünmesi ya da göstermemek. overlay = Tam siyah olan bölgeleri yok sayması şeffaf yapar arka planı gösterir. transparent= arka plan resmi harmanlayarak gösterir. Not: bu ayarları iyi görebilmek için main functionun içine” screen_color.red = 255;” parametrelerinide ekleyin. ----------------------------------------------------------------------------------*/ layer=1;//hiyareşi üsteki text adlı örnekte bakarsınız layer onda2 //bunda 1 oldu için bu altta kalacak flags=visible; }

Page 5: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ÖRNEKLER: 1-)

Page 6: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

2-)

Page 7: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M
Page 8: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

3-)BUTTON Bu çalışmada buton yapmayı ve butona estetik kazandırmak için buton basıldığında şeklinin değişmesini sağlayacaz butona basıldığında bir “function” çağıracaz bazı işlemler yaptıracaz. Buttonu oluşturmak için panel functiondan faydalanıyoruz buton yapısına bakalım.

BUTTON = x, y, bmapOn, bmapOff, bmapOver, functionOn, functionOff, functionOver;

Parametreler=

x – pos_x verdiğimiz koordinattan başlayarak x kordinatına gider. y – pos_y verdiğimiz koordinattan başlayarak y kordinatına

Page 9: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

gider.

bmapOn – Butona tıklanınca alacağı resim.

bmapOff - Butona tıklanmayınca alacağı resim.

bmapOver – Farenin imleci butonun üzerine gelince butonun alacağı resim.

functionOn- Butona tıklanınca çalışacak olan function.

functionOff- Butona tıklanmayınca çalışacak function.

functionOver - Farenin imleci butonun üzerine gelince çalışacak function.

Ör:

Page 10: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

4-) YATAY VE DĐKEY KAYDĐRMA ÇUBUKLARI

Kaydırma çubuklarına aldıgı parametrelere batkımızda=

Page 11: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

VSLIDER = x, y, len, bmap, min, max, var;

HSLIDER = x, y, len, bmap, min, max, var;

x - X posizyonundaki sol üst kordinatı.

y - Y posizyonundaki sol üst kordinatı. len –Kaydırmaının ekrandaki genişligi. bmap- resim dosyası. min – minumum alabilecegi deger. max - maxsumum alabilecegi deger. var – kaydırma çubugun degişimdeki degerini buraya yansıtacak.

Ör:

Page 12: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M
Page 13: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

5-) ENTITY

Şimdi tanıtacağımız fonksiyon camera görüntemize bir model yada bir resim eklememize sağlayacaz. Đleriki aşamalarda silah gösterimdede kullanacagız. Ufak bir hatırlatma 3d dünyasında kameraya bir silah eklemek o silahın 3d dünyasında varlıgını ifade etmez sadece bizim kameramızda gözükür. Genellikle Wolfenstein zamanlarında çıkan oyunlarda gözüken bir kullanımdır bu. Bu kullanım Wolfensteinda da kullanılmıştır. Desteklenen dosya formatları pcx, bmp, tga, dds, vede mdl dir.

Page 14: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Resimdende anlaşılacağı üzere type özelliğine modelimizin dosyasını ismini veriyoruz. Flags ise bu varlıgımıza ait özellikleri buradan ayarlıyoruz visible diyerek silahı görünür hale yapıyoruz. x y z ile de ekranımıza yerleşimini yapıyoruz bu yerleşimi daha iyi anlamak için aşşagıdaki resme bakınız.

Page 15: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Resimdeki kordinat sistemini bizim pc ekranımız olrak kabul ederek düşünüz .Bu arada bişey hatırlatıyım peki ekrana yarleştirecegimiz modelin baz alınacagı yeri nasıl belirleyecez ☺ burada da modelimizin orjinini baz almakta ama her modelde orjin modelin ortası olmayabilir bunun için mdl dosyamızı med ile açarsak aşşagıdaki resme göre modelimizi yerini ayarlarsak artık modelimizin döndürdügümüzde veya taşıdıgımızda artık modelin ortası baz alınacaktır. Varlıgımıza diger fonksiyonlardan ulaşmak için ise silah.x gibi varlıgımızın ismini yazdıktan sonra nokta ile alt özelliklerini ulaşarak degiştirebiliyoruz yada öğrenebiliyoruz.

Page 16: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Resim yada animasyonlu resim ekleyebeliriz. Sprites örnek olması için aşşagıda bir uygulama var.

Page 17: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Bu bize ekrannımaza objeyi yerleştirmemize yardımcı olacak ama animasyonunu başka yerde ya bunun frame özelliğine ulaşarak yapacaz yada ent_animate yle yapacaz. Sprite ismini dikkat edersiniz. Explo+11 denilmiş ordaki +11 resimde 11 tane framenin animasyonun oldugunu bildirmekte.Flags daki overlay ise renk kodu 0,0,0 yani tam siyah olanları ekrana yansıtma demektir.

Entity özelliğini çoğu şeyde kullancaz 3d li boş kovanlarda olsun silahın ucundan çıkan duman olsun ekrana 3 boyutlu bişey yerleştirmekten tutun çoğu yerde faydalanacaz.

Layerlara deginilecek.

6-) VĐEW

View ekranda haritada bir yeri göstermek için kullanılmaktadır.

Page 18: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Bu ayarları yaptıktan sonra ekranıza sol üst köşesinden bir alan gelmiştir sanırım bu görüntünün ayarları için artık remote den faydalanacaz. Not:içinden verdigim kordinatları kabul etmiyor dişaridan ulaşılarak degiştirilmeli.

Üsteki resimlede bu actionu atadıgımız varlığı bir nevi kamera gibi düşünüp onun kordinatlarını alarak remote görüntüye yansıttık.

Veya bir tv gibi bir varlığa o görüntüde olmasını istiyorsak bu actionunada o varlıga eklemeliyiz.

Panellerde falan resmini degiştirmek için bmap kullanılır. Sonra roketin giderken nasıl gittiginide burada gösterebiliriz.

6-) SKY

Page 19: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Bakacam sonra. Flagslardan CUBE , DOME, SCENE incelenecek. Layerlara değinilecek.

SKY creates a sky entity. Otherwise it's a view entity.

DOME 360 degrees half dome texture

CUBE six sided cube texture

CYLINDER 360 degrees cylinder texture

SCENE don't use the z buffer (sky models only)

5-)POĐNTER

Pointer bir function yada degişken yada entity memory adresini saklamak için kullanır bu adreslede varlıga ulaşılabilir.

entity* the_player;

function* check_status;

string* my_name;

panel* game_over;

bmap* health_picture;

Ör:

entity* p_adam;//burada bir varlık pointer degişken tanımlıyoz.

action adam{p_adam=me;//pointer degişkene bu //action verdigimiz adam yada varlıgı hafıza adresini //aktarıyoz.}

function kl_up(){p_adam.x+=1;

Page 20: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

wait(1);}

on_anykey = kl_up;//burada bir tuşa basıp çektikten sonra kl_up fonksiyonuna git diyoz. Đstersek on_X buradaki X hangi tuş ise onun ismini temsil ediyor.

Ör:on_q=kl_up Q harfine basıp çekince kl_up fonksiyonunu çagırıyor.

6-)KLAVYE

Bir tuşa basıldıgını anlamak için

“key_X” buradaki x hangi tuş ise onu temsil ediyor yalnız burada tuşa basılınca aktif oluyor biz tuşa basılıp çekince aktif olmasını istiyorsak yukardada anlattım kod gövdelerin dişinda “on_a=function_ismi” diyerek a tuşuna basılıp çekilince function_ismini belirtimiz functiona zipliyor.

7-)FARE

Farenin tuşlarının basılıp basılmadını “mouse_left==1” veya “mouse_right==1” olarak ögrenebiliriz. Mousun ekranda gözükmesi için

Sonsuz bir döngüde mousun x,y kordinatlarını ve mousun mode ayarlamalıyız vede mousun imleci atamalıyız.

Page 21: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

8-)BREAKPOINT VE BREAKPOINT_ON

Oyun esnasında değişkenlerimiz görmek için bir kırılım noktası ayarlamak için kullanacağız 2 çeşit kullanımı var bunlardan birincisi nerde kırılma yapmak istiyorsak o yere “breakpoint; diyerek orda kırılma oluşacak ve kodlar oyun ekranının sol üst köşesinde gözükecektir. Boşluk tuşuyla kod kaldığı yerden adım adım ilerlemesi

Page 22: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

sağlanabilir.

Đkinci yolumuz “breakpoint_on();” dur bu kodumuz özelliği parantez içerisine koşul yazıyoz koşul gerçekleştiğinde kırılma gerçekleşmesidir.

breakpoint_on (my.pan > 357);

Page 23: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

9-)ELLE ADAM OLUŞTURMAK

Haritaya daha sonradan adam sprite gibi araçlar varlık koymak için “ent_create” özelliginden yaralanıyoz bu özelligin prototipi

ent_create (string filename, vector Position, function);

Page 24: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

10-)Camera

Camera.aspect //camerayı tersini alma veya sündürme. Yani yatay dikey piksel boyut oranını belirleme.

Page 25: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M
Page 26: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

10-)MODEL YÜRÜTME Varlığımızı haraket ettirmek için kullancağımız 2 fonksiyon vardır. Bunlar ent_move ve c_move dir. Bu 2 fonksiyonda birbirinin çok benzemektedir yalnız c_move sonradan eklenmiş olup daha yeni mode özelliklerine sahiptir sadece aralarındaki fark budur. Tanımlama ve aldığı parametreler aşağıdadır. 1-)c_move(ENTITY* entity,VECTOR* reldist,VECTOR* absdist,var mode) 2-)ent_move (vector reldist, vector absdist); move_mode =GLIDE; Aşağıda ent_move ile bir örnek yapılmıştır c_movede bunun gibidir hiçbir farkı yoktur sadece move_mode ile ent_move birleştirmiştirler .

Page 27: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ent_move(move,nullvector);//ilk parametre yerel kordinata göre adam yönlendirken(adamın kendi x y sine göre) 2 ci parametresi ise global kordinat sistemine (haritanın kordinatı) göre hareket ettirir.(yukaridaki resme bakınız) Tabiki bu yönlendirme şu vektöre (x y z) git değil daha çok x bir verirsek adam her fps 1 piksel öne yada y 1 verirsek 1 piksel yana z 1 verirsek bir piksel yukarı gibi kaydırmayla çalışmakta .

Move_mode = GLIDE; Yürümeye bazi özellikler katmak için move_mode kullanıyoz. Aldığı degişken parametreler aşşagıdadır:

Page 28: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

IGNORE_YOU //sürtüşmeyi ve/veya çarpışmayı diğer varlıklar (model entity) yok say. IGNORE_PASSABLE//bütün yol , duvar, model lerin passable bayrağı seçiliyse çarpışmaları aldırma. Bu özellik daha çok su gibi varlıklar için kullanılmakta.(bakınız aşağıdaki resme)

IGNORE_PASSENTS // passable bayrağı işaretli olan model ve sprite aldırma. Bu özellik ignore_passable geliştirilmiş halidir. Ignore_passents aktif edilmiş ise bize 3 tane bayrağı kullanarak bize bilgi vermektedir. in_passable=modelin içindeysek bu bayrak 1 olur içinde değilsek 0 dır. on_passable= modelin diş kenarındaysak bu bayrak 1 olur diş kenarında değilsek 0 dır. in_solid=Bakılacak . bu özellik sadece ent_move için geçerli sanırım.

Page 29: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Not : Bu özellik move de kullanılıdığı için yukaridaki bayrakların degişimi bizim hareketimize bağlı olarak değişmekte haraket etmiyorsak 0 olarak döner. IGNORE_MAPS //Harita varlıklarını (map entity) yoksay. (aşşagıdaki resme bakınız)

IGNORE_MODELS //bütün modellere aldırma. IGNORE_SPRITES //bütün sprite aldırma. ACTIVATE_PUSH //Bir varlığa çarptığımızda karşıdakinden geçemediysek bu olay meydana gelmiş olur çarpişma alğılamak için kullanıyoz. Çarptığımız engele bu olayı tetiklemek için event_mode activate_push eklenmesi gerektiğinide unutmayın. Ör: function engel

Page 30: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

{ if(event_type==EVENT_PUSH) //tetiklenen olayın türünü sorğulayoruz. {beep(); }//bip sesi çıkarmak için } action beni_itiyorlar { my.push = -2; //ignore_push a bakın. my.ENABLE_PUSH = ON; //tetiklemeyi aktif yaptık my.event=engel; //fonksiyonu çağırdık. } IGNORE_PUSH //kendi push degerinden(my.push) düşük olan varlıkları aldırmadan içinden geçiyor yalnız tetikleme meydana geliyor. Sadece içinden geçmesini enğelemiyor . my.push default olarak 0 dır -100 … ile 100 arası bir değer alabiliyor. Mesala bir kayanın “you.push = -2;” oldugunu ama bizim playerimizin “my.push=10;” kabul edersek 10>-2 büyük olduğu için kahramanımız kaynın içinden geçebilecek ama tetikleme yinedemeydana gelecek tabiî ki biz move_mode a activate_push eklediysek tetikleme meydana gelecektir aksi halde tetikleme gerçekleşmez. Kendimezden düşük push olan varlıkları algılama. ACTIVATE_TRIGGER - Hareket esnasında tetik olayları muktedir kıl. Ör: function engel { if(event_type==EVENT_TRIGGER) //tetiklenen olayın türünü sorğulayıyoruz.

Page 31: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

{beep(); }}//bip sesi çıkarmak için } action beni_itiyorlar { my.trigger_range = 500; //yaklaşma mesafesi my.ENABLE_TRIGGER = ON; //tetiklemeyi aktif yaptık my.event = engel; //fonksiyonu çağırdık. } Bu özellik daha çok belli mesafelerden varlığa yaklaşıldığında çalışması için kullanılır yaklaşma mesafesini belirlemek için my.trigger_range verdigimiz değer kadar uzaktan tetikleme meydana gelir default değeri 0 dir. ACTIVATE_SHOOT , ACTIVATE_SONAR Birbirlerinen aynısı sayılır bunlar bir nevi kapan ğibi düşünebilirsiniz bir varlığın üzerine çıkmak bir varlığa dokunmak gibi olaylarla tetiklenir. Ör: function func_kapan { if(event_type==EVENT_SONAR) {beep(); } } action kapan { my.ENABLE_SONAR = ON;

Page 32: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

my.event = func_kapan; } USE_AABB= Düzene sokulmuş eksen ifade etmekte. Bunun anlamıda çarpışma algılamalarında bir varlığı sanki bir kutu çerçeveliyor gibi kullanılmasıdır bunda esas amaç verimli ve hızlı olmasıdır ama ne yazikki varlığın gerçek yüzeyleri yok sayılmakta. Çevrelen kutuyu görmek için oyun motorunda çalıştırdıktan sonra F11 ile görebilirsiniz. Bu çevreleyen kutunun büyüklüklerini min_x, min_y, min_z max_x, max_y, max_z den ayarlayabilirsiniz. Ör: vec_set(my.min_x,vector(-50,-50,-50)); vec_set(my.max_x,vector(50,50,50)); GLIDE // kaymayı aktif eder. You= Bir olay gerçekliştiğinde kimin tarafından gerçekleştirdiğini bellekteki adresini buradan ögrenileiliriz. Örnek vermek gerekirse bir çarpışma olayı ayarladık ve geldi biri bize çarptı o anda you degişkeninde bize çarpan kişinin bellek adresini geri döndürürek kimin çarptıgını algılatabiliriz eger bir olay yoksa null döndürür. Target= çarpışmanın gerçekleştigi yerin posizyonunu verir. Genel bir örnek: action adam_yuru() { player=me; while(player!=NULL) {

Page 33: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

//klavye sag sol yön tuşuna göre atama x=key_cud-key_cuu; move.x=x; y=key_cur-key_cul;/y ekseninde adam move.y=y; z=key_a-key_z; move.z=z; move_mode=glide; ent_move(move,nullvector);//adamı hareket ettiriyoz wait(1); } } key_cur=klavye yön tuşundan sol key_cul=klavye yön tuşundan sağ key_cud=klavye yön tuşundan aşağı key_cuu= klavye yön tuşundan yukarı key_force.x // klavyedeki sag sol ok yönleri temsil etmekte olup sağ 1 sol -1 dir hiçbir tuşa basılmadıgında 0 olmaktadır. key_force.y // klavyedeki yukarı aşşağı ok yönleri temsil etmekte olup yukarı 1 aşşağı -1 dir hiçbir tuşa basılmadıgında 0 olmaktadır. Adamımızı döndürmek içinse pan özelligini kullanıyoz.

Page 34: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Adam kendi yönünde saat yönünde dönmekte pan değeri 0 ile 360 derece arasında bir deger almakta.

Page 35: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M
Page 36: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

11-)KAMERA

Varlıgımızla gözüyle dünyayı görmek için varlıgımızla beraber kameranında haraket etmesi gerekiyor . vec_set(camera.x,player.x); camera.z+=27; vec_set(camera.pan,player.pan); player varlığımızın sürekli tekrarlayan yerine bu kodu yazarsanız adamızla beraber camerada gidecektir yalnız adamımız gözekecektir eğer adamımızı bir merkez olarak ele alarak haraket etmesini istiyorsanız örek vermek gerekirse quake3

Page 37: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

oyununda player göremezsiniz sadece silah vardır adamı görmek için aynaya bakmanız gerekir Bu gibi görünte eldetmelere first person denilmekte bir bevi ilk bizim görmemiz gibi. Bunun gibi bişeyi yapmak isityorsanız cameramıza adamı bağlamamız gerekir bunun içinde camera.genius=player; koduyla adamımızı bağlıyoruz adamı göremiyorsanız kamerayla ama kahramanımız orda hiçbir yere gitmedi isterseniz ben bunun gibi bişey yazarım derseniz tabiki yapabilirsiniz sadece işler biraz karışırı onun içinde sin ve cos faydalanarakta yapabilirsiniz. camera.x=player.x +(200 * cos(camera.pan) ); camera.y=player.y + (200 *sin(camera.pan) );

12-)MODEL ANĐMASYON ent_animate(player,"run",run%100,ANM_CYCLE); player =ent_animate fonksiyonunu aldığı ilk parametre adamın değişken ismi "run"=run ise mdl formattaki modelin animasyondaki ismi olmalı bu çok önemlidir eğer ismini yazmazsanız adam istediginiz animasyonu yapmayacaktır . run%100= animasyon 0…100 kadar aralıkta tanımlanmış olup run isminde bir degişken tanımlanıp bu degişeken 1 er 1 er artırılıyor ve %100 ile 100 klanı olan modunu alıyor.

Page 38: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ANM_CYCLE=animasyonun modlarını ayarlıyor aldıgı parametreler 3 tane bunlar: ANM_CYCLE //tekrarlı animasyon ANM_SKIP //atlamalı animasyon ANM_ADD //eklemeli animasyon Vec_set( 1vec, 2 vec);// 2 vectörü 1 vectörü kopyalar. Camera.pan //camera sag sol dönme Camera.tilt //camera aşagı yukarı dönüş

13-)YER ÇEKĐMĐ

Şimdide modelimizi yüretecez vede merdivenden ve/veya aşyaların üzerine çıkmasını sağlayacaz bunu için kullanacamız fonksiyon c_trace isimli fonksiyon olacak bu fonksiyon modelimiz ile varlık harita objeler v.b. karşılaştırma yapar C_trace use_box seçilmemişse her zaman işin kullanır. Use_box seçilmişse çok köşeli polygonlarda elipsoid bir biçim test eder. C_trace aslında bir nevi tarama dır ileride görecegimiz c_scan dan önce çıkan bir özellik olup yönlendirme açı veremiyoz c_scan özellikleri daha çok olup ama c_trace kendine özgü özellikleri mevcuttur. Aşşagıdaki resme bakarsanız. C_trace çalışmasını daha iyi anlayacaksınız.

Page 39: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Level çarpişmalarda her zaman elipsoid kullanılmakta.

c_trace(VECTOR* from, VECTOR* to, var mode)

// trace fonksiyonun aldıgı ilk parametre modelimiz x konumu 2 ci parametre ise hedef vektorümüz 3cü parametremizde trace ilgili ayarlar. Daha sonra c_trace fonksiyonun kullanacagız ama c_trace geçmeden istisnalar v.b. modunu tanımlayalım. mode= IGNORE_ME // Benim varlığımı görmezlikten gel. IGNORE_YOU //sürtüşmeyi ve/veya çarpışmayı diğer varlıklar (model entity) yok say. IGNORE_PASSABLE//bütün yol , duvar, model lerin passable bayrağı seçiliyse çarpışmaları aldırma. Bu özellik daha çok su gibi varlıklar için kullanılmakta.(bakınız aşağıdaki resme)

Page 40: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

IGNORE_PASSENTS // passable bayrağı işaretli olan model ve sprite aldırma. Bu özellik ignore_passable geliştirilmiş halidir. Ignore_passents aktif edilmiş ise bize 3 tane bayrağı kullanarak bize bilgi vermektedir. in_passable=modelin içindeysek bu bayrak 1 olur içinde değilsek 0 dır. on_passable= modelin diş kenarındaysak bu bayrak 1 olur diş kenarında değilsek 0 dır. in_solid=Bakılacak . bu özellik sadece ent_move için geçerli sanırım. IGNORE_MAPS //Harita varlıklarını (map entity) yoksay. (aşşagıdaki resme bakınız)

Page 41: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

IGNORE_MODELS //bütün modellere aldırma. IGNORE_SPRITES //bütün sprite aldırma. IGNORE_PUSH //kendi push degerinden(my.push) düşük olan varlıkları aldırmadan içinden geçiyor yalnız tetikleme meydana geliyor. Sadece içinden geçmesini enğelemiyor . my.push default olarak 0 dır -100 … ile 100 arası bir değer alabiliyor. Mesala bir taşın “you.push = -2;” oldugunu ama bizim playerimizin “my.push=10;” kabul edersek 10>-2 büyük olduğu için kahramanımız taşın içinden geçebilecek ama tetikleme yinedemeydana gelecek tabiî ki biz move_mode a activate_push eklediysek tetikleme meydana gelecektir aksi halde tetikleme gerçekleşmez. Kendimezden düşük push olan varlıkları algılama. IGNORE_WORLD//Görmezlikten gel level terrain ve level block larını.

Page 42: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

IGNORE_FLAG2 //Bayrak 2 seçiliyse aldırma.

USE_BOX //(MIN_X, MAX_X ) b_box bayrağı seçiliyken yada seçili degilken kahramanımızın kaplayan çerçeveyi kullanrak f11 gözüken çerçeveyi kullanarak tara bu taramada kahramanımızın orgini degilde kutunun altından başla taramaya. Polyğon bayragı seçiliyse poligana göre tara bu taramada kahramanımızın orjininden başlayarak tara (aşşağıdaki resme bakınız). ACTIVATE_SHOOT //varlığa vurulmayı sağla. ACTIVATE_SONAR //varlığa sonar olayını sağla. ACTIVATE_SHOOT , ACTIVATE_SONAR Birbirlerinen aynısı sayılır bunlar bir nevi kapan ğibi düşünebilirsiniz bir varlığın üzerine çıkmak bir varlığa dokunmak gibi olaylarla tetiklenir. SCAN_TEXTURE //textureyi tarmayı aktifle. Bu özellik c_trace taranan textureler hakkında bize bilgi verecek önceden tanımlanmış değişkenler var taranan texturelerin bilgilerini buralara yazmakta bu tanımlanmış değişkenler şunlardır :

Page 43: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

tex_name // taranan texturenin ismini yazar. Aşşagıdaki iki resme bakarsanız bir uygulama ile taranan resim ismini ekrana yazdırdım.

Đsterseniz direkte karşılaştırma yapabiliriz eger karşılaştırma yanı ise dönen deger 1 iken degilse 0 dönecektir. str_cmp (tex_name

Page 44: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

,”linesblackyell”); Yazi (string) ile uygulamalarımız biraz zahmetli olacaktır kullandıgımız dil itabiriyle biraz c ye biraz delphiye benzemekte string karşılaştırmalarda oyun motorun sunduğu hizmetlerden faydalanacağız. Yeri geldikce strinğ karşılaştırmalara deginecegim. Hitvertex// bu özellik use_polygon aktif edildiği zaman çalışmaktadır taranan varlığın en yakın vertex numarasını vermektedir ki gerçekçi uygulamalarımızda çok faydalı olacaktır. Bu özellik modellerde vertex oldu için model varlıklarda tarama yapmalısınız. tex_flag1..tex_flag8// Bu özellik ile tarama yaptıgımız texturelerin flag seçili olup olmadığını algılatmak için.

Page 45: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

tex_light // Texturenin üzerine düşen işigın şiddetini vermektedir. (0..255)

tex_color// vertex rengini veriri 3 boyutludur RGB tex_fog// texturenin bulanıklığını verir.

Not: Scan_tex in gördügümüz degişkenlerinden sadece tex_name string iken diger degişkenler numeriktir. C_trace özellikleri gördükten sonra genel bir örnekle işin pekişmesini sağlayacaz.

Page 46: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Şimdi öncelikle geçici bir vektör tanımlayalım vede bu vektöre modelimizin konumunu aktaralım. var temp_move[3]=0,0,0;//vektör tanımladık. vec_set(temp_move,player.x);//player.x player.y player.z konumunu temp_move adlı vektöre kopyaladık. temp_move.z-=200;//playerin konumundan z ekseninden – 200 düştük z= -(c_trace(player.x,temp_vector,use_box +ignore_me ) ); //trace fark pozitif degil negatif dir çünkü use_box kullandımız için kahramanı çevreleyen tel kafesten başladı için kendisine göre negatiftir (aşşagıdaki resme bakınız).

Page 47: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

USE_AABB ve USE_POLYGON // bu seçenekler tarama modelin orjininden başlarken use_box kendisini çevreleyen çerçevenin en altından başlayarak taramaya başlar. Use_polygon modellerin girintli çıkıntılı grçek yüzeylerini algilayabilirken use_aabb algılayamamakta. Use_aabb f11 gördügümüz çerçeveyi degilde wed de modelin özelliklerine girdigimizde b_box ve polygon seeçilmediginde f11 çıkan küçük kutucukla ilgilenmekte. Bu özelikler yeni özellik olduğu için daha geliştirilmekte olup tamamen oturmamıştır geniş bir bilgi neyazikki yoktur. Bu özellikler çarpışmayla ilgili yeni özelliklerdir aşşağıdaki resme bakınız.

Page 48: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M
Page 49: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

MODĐFĐYELER: target= Çarpişmanın gerçekleştigi yerin posizyonunu verir. You= bir olay gerçekliştiginde kimin tarafından gerçekleştirdiğini ögrenmek için bellekteki adresini buradan ögrenileiliriz. Örnek vermek gerekirse bir çarpışma olayı ayarladık ve geldi biri bize çarptı o anda you degişkeninde bize çarpan kişinin bellek adresini geri döndürürek kimin çarptıgını algılatabiliriz eger bir olay yoksa null döndürür. trace_hit = c_trace bir şeyi yakaladıgı zaman 1 döndürürken hiçbirşey algılamadıgında 0 döndürür.

14-)VARLIK ALGILAMA TARAMA

Şimdide bir nesneye veya varlığa yaklaşan modelleri algılatacaz buna bir örnek vermek gerekirsek bir modelin kapıya yaklaştığında otomatik olarak açılması veya modelimiz bir kapının karşısındayken bir tuşa basarak o kapıyı açtırmak yada bir güvenlik kamerasının düşmanı alğılaması veya bir düşmanın yaklaştıgını algılayarak yapacamız stratejiyi belirlemek . Bunun için kullanacamız fonksiyon c_scan foksiyonu dur.

C_SCAN

c_scan yapısını aşşagıda görebiliriz.

c_scan (VECTOR* pos, ANGLE* dir, VECTOR* sector, var mode);

Page 50: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Pos Taramanın başlayacagı

noktayı orjinin noktası Dir Taramanın yönü sector.x Yatay tarama koni

şeklinde veya 360 derece verilerse daire .

sector.y Dikey tarama koni şeklinde veya 360 derece verilerse daire .

sector.z Taramanın uzaklık mesafesi .

Mode Tarama modları özellikleri.

C_scanın tarama mantıgını ve tarama mesafesini şeklini daha iyi anlamak için alttaki resme bakınız.

C_trace ile c_scan görsel olarak karşilaştırısak aşşagıdaki resimle daha iyi anlayacaksınız.

Page 51: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Mode özelliklerin aldığı değerler. IGNORE_ME Görmemizlikten gel beni.

IGNORE_YOU Görmemizlikten gel diğer modelleri .

SCAN_ENTS Varlıkları tara ve olayları incele bu özellik ile bir varlık yakalandığı zaman tetiklendigi zaman event_scan olayı gerçekleşir.

SCAN_POS Camera tarar cameraya olan uzaklığıda geri döndürür.

SCAN_PATHS Path veya Türkçesi ile yolun başlangiç konumunu dikkat sıfırıncı dügümü başlangıç noktasını uzaklıgını geri döndürür.

SCAN_NODES Path in vaya Türkçesi yolun dügüm noktalarını tarar buldugunun arasındaki mesafeyi geri döndürür.

SCAN_LIGHTS Durağan işikları tarar kendine olan uzaklığı geri döndürür.

SCAN_LIMIT SCAN_ENTS ve SCAN_LIGHTS birlikte çalışıyor gibi davranır.

Page 52: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

C_scan taramada biri yakalanırsa kendisine olan uzaklığını geri döndürmektedir.

Modifies:

you Yakaldıgı varlıgın bellek adresini verir.

result Taranan yere en yakın samimi olan yerin bize olan uzaklıgını verir.

target Taranan yere en yakın samimi olan yerin posizyonunu verir.

bounce Çarpışmanın yerinin açısal olarak çarptıktan sonra ziplayacagi yere yönlendirir.

Normal

Çarpışmanın eksenlerdeki yerinin dikmi yatıkmı oldugunu algılamakta kullanılmakta. Ör: kurşun çarptıktan sonraki ziplayacagi yeri. Bunla yönlendiriz. z de tavan -1 zemin 1 dir egere çarpma yan yüzeylerde gerçekleşmişse x,y yüzeylerine z deki gibi 1 yada -1 deger almakta. Örnek duvara mermi çarpmasının izini bırakmakta kullanırız . Aşşagıdaki resme bakınız.

tex_color Duragan işik şiddeti.

SCAN_ENTITY Bildiniz üzere bir kapıyı açtırmak için bir tuşa basarak modelin önündeki kapıyı açtıracaz böylelikle sürekli konturoldan kurtarırak sistemin kasılmasından kurtaracaz . Öncelikle bir fonkisyon tanımlayalım function calis() { scan_entity(player.x,vector(100,0,100));

Page 53: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

} Sonra bu fonksiyonu çagırmak için ya main blogun içine yada bütün blogların dışında boş bir alana on_key=calis; //burada on_key deki key anlamı klavyedeki tuşların ismi yerine ör: on_a dersem a tuşuna basılıp çekildikten sonra gösterdigim fonksiyona ziplayacak. Ben bu örnegimizde on_q=calis;//q hrfini kullandım. Q harfine bastıgımda scan_entity modelimizin konumndan başlayarak taramaya başlayacak karşı modelimizde harita varlıgında my.enable_scan=on; diyerek kendisinin taramaya aktif oldugunu taramadan geçtiginde my.event aktarılan fonksiyonu çağıracak. Buradaki önemli olan şey my.enable_scan=on; diyerek varlık olayı tanımlıyoz yani bir kapıyı birisi taradıgında my.event aktarılan fonksiyonu çalıştırır. Şimdi bu varlık olaylarını aşşagıda anlatıyım.

Page 54: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

VARLIK OLAYLARI

• Event_block – varlıgımız hareket halindeyken biri tarafından durdurulması halinde veya wed deki block lari çarpmasıyla gerçekleşir. c_move veya fizik hareketleriyle tetiklenir . Passable ve push degerlerinide dikkate alarak gerçekleşir. Bounce degeri ile çarpişilan varlıgın çarpışmadan sonra ziplayıp gidecegi açıyı geri döndürür. Normal degeri ile ise çarpışılan varlıgın yüzeyini belirlemekte kullanılır eger z -1 ise üstü 1 ise altı gibi x,y -1 yüzeyi diger yüzeyi x,y 1 ise diger yüzeyin çarpıştıgını geri bildirir.

• Event_entity – varlığın başka bir varlıkla çarpışma algılar. c_move ve fizik hareketlerinde tetiklenir. EVENT_PUSH ve EVENT_IMPACT te etkilenir. You değişkeniyle bize çarpan kişini bellek adresini geri bildirir. Bounce degeri ile çarpişilan varlıgın çarpışmadan sonra ziplayıp gidecegi açıyı geri döndürür. Normal degeri ile ise çarpışılan varlıgın yüzeyini belirlemekte kullanılır eger z -1 ise üstü, 1 ise altı gibi diger yüzeyler içinde geçerlidir x,y -1 yüzeyi diger yüzeyi, x,y 1 ise diger yüzeyin çarpıştıgını geri bildirir.

• Event_friction – sürtüşme anlamındadır fizik ve c_move ile gerçekleşir sürtüşme anında geçerli olur her iki objedede gerçekleşir olay. Geçen yazımızdaki c_move activate_push bakınız. Target degişkeniyle çarpışmanın gerçekleştigi yerin kordinatı geri bildirir. Bounce degeri ile çarpişilan varlıgın çarpışmadan sonra ziplayıp gidecegi açıyı geri döndürür. Normal degeri ile ise çarpışılan varlıgın yüzeyini belirlemekte kullanılır eger z -1 ise üstü 1 ise altı gibi x,y -1 yüzeyi diger yüzeyi x,y 1 ise diger yüzeyin çarpıştıgını geri bildirir.

• Event_impact –çarpma anlamında kullanılmaktadır haraket eden obje bize çarptıgında gerçekleşir. C_move ile tetiklenmektedir. You ile kendisine çarpan kişinin bellek adresini verir. Geçen yazımızdaki c_move activate_push ve ignore_push bakınız. Bounce degeri ile çarpişilan varlıgın çarpışmadan sonra ziplayıp gidecegi açıyı geri döndürür. Normal degeri ile ise çarpışılan varlıgın yüzeyini belirlemekte kullanılır eger z -1 ise üstü 1 ise altı gibi x,y -1 yüzeyi diger yüzeyi x,y 1 ise diger yüzeyin çarpıştıgını geri bildirir.

• Event_push – c_move de activate push yaparak karşısındaki kişiye push olayını gerçekleştirmeye yarar bize çarpanın kişinin bellek adresini you değişkeniyle bildirir. . Geçen yazımızdaki c_move activate_push ve ignore_push a bakınız.

• Event_click – farenin sol tuşuyla varlığa tıklamak. • Event_rightclick – farenin sağ tuşuyla varlığa tıklamak • Event_release – bu özellik fare okunun varlığımızın üzerinde çıktığı zaman tetiklenir. ( no

longer touching) • Event_touch- bu özellik mousun okunun varlığımızın üzerinde girdiği zaman tetiklenir.

Page 55: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

• Event_scan – varlığın c_scan ile taranması ile tetiklenmektedir. Bizi biri üzerimizden scan geçirmesiyle olur. You değişkeniyle bizi tarayan varlığın ram adresini döndürürken result değişkeniyle tarayan ile taranan arasındaki mesafeyi geri döndürmektedir.

• Event_detect – c_scan ile tetiklenmektedir yalnız karşı tarafın değil kendimizde yani c_scan herhangi birşeyi algıladığında bizde bu olay gerçekleşir. (event_scan bakınız) You ile karşı kişinin hafızadaki adresini geri döndürür bize, result değişkeni ile ise bize algılanan kişini ile bizim aramızdaki mesafesini geri döndürür.

• Event_trigger – bu özellik c_move de mode özelliğine ACTIVATE_TRIGGER eklenmesiyle ancak tetiklenir.

• Event_shoot – c_trace ve c_move mode özelliğinde activate_shoot varsa, c_trace tarandığında yada c_move ile çarpışmasıyla bu olay meydana gelir. You değişkeniyle bizi tarayan ya da çarpan kişinin ram adresini geri döndürür.

• Event_sonar – c_trace ve c_move mode özelliğinde activate_sonar varsa, c_trace tarandığında ya da c_move ile çarpışılmasıyla bu olay meydana gelir. You değişkeniyle bizi tarayan ya da çarpan kişinin ram adresini geri döndürür.

• Event_disconnect – çoklu oyuncular(multi player) için kullanılmakta bağlantı kurulamamağında gerçekleşir. (comm. pro versions vardır bu özellik)

• Event_receive – bu özellik send_skil1 (entity. skill, var mode) fonksiyonun kullanılmasıyla bize bir data gelmesiyle tetiklenir. ( multi player comm, pro versions için kullanılır.)

EVENT_BLOCK: c_move ile veya fiziksel olarak hareket etmekteyken, bir wed bloğu tarafından durdurulduğu zaman tetiklenir. EVENT_ENTITY: c_move ile veya fiziksel olarak hareket etmekteyken başka bir entity ile temas edildiğinde tetiklenir. EVENT_FIRICTION: fiziksel bir entity herhangi birşeye dokunduğunda, sürtünme esnasında tetiklernir. Đki fiziksel obje birbirine dokunursa, ikisininki birden tetiklenir. EVENT_PUSH: push değeri kendinden daha büyük bir entity ile temasda tetiklenir. EVENT_IMPACT: Hareket eden başka bir objenin çarpması sonucu tetiklernir. Biz bini

Page 56: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

kullanacağız, karakterimiz(hareket eden obje) paraya çarpması sonucu tetiklenecek. EVENT_SHOOT: c_trace + ACTIVATE_SHOOT ile taranma sonucunda tetiklenir. EVENT_SONAR: c_trace + ACTIVATE_SONAR ile taranma sonucunda tetiklenir. (ACTIVATE_SHOOT ve ACTIVATE_SONAR, c_trace'ın son parametresi olan moda yazılarak etkinleştirilir.) EVENT_SCAN: c_scan tarafından taranma sonucu tetiklenir. EVENT_DEDECT: c_scan ile taranma yapıldığında en az bir obje bulunursa, taramayı yapan obje için tetiklenir. EVENT_TRIGGER: Tetiklenme yarıçapı içinde, ACTIVATE_TRIGGER ile c_move kullanan bir obje algılanırsa tetiklenir. EVENT_TOUCH: objeye mouse ile dokunulursa tetiklenir. EVENT_RELEASE: mouse objenin üzerinden çekilirse tetiklenir. EVENT_CLICK: objeye mouse ile tıklanırsa tetiklenir. EVENT_RIGHTCLICK : objeye farenin sağ tuşu ile tıklanırsa tetiklenir. EVENT_RECIEVE: obje send_skill ile gönderilen bir skill alırsa tetiklenir(multiplayerde) EVENT_DISCONNECT: objenin istemcisi(objeyi kullanan client) oyundan ayrılırsa tetiklenir.(multiplayer,server)

15-)AŞAMALAR ARASI DEGĐŞĐM

Kahramanımız verilen görevi tamamladıktan sonra aşmamamızı degiştirip kahramanımıza yeni görevler vermememiz gerekir bunu yapmak için öncelikle oyun motorumuzu donduracaz daha sonra aşamamızı degiştirip oyun motorumuzu serbest bırakacaz. Tabiî ki bu degişim kahramanamız görevi tamamladıgında yada kahramanımız belli bir kapıyı açtıgında bu degişim gerçekleşecek bunuda yukarıda biraz anlatımız yöntem olan kagramanımızın yaptıgı olayları algılayarak ya kapıya çarptında yada bir kapıyı açmak istedeginde gerçekleşecek . Oyun motorumuzu durdurmak için freeze_mode özelligini kullanacaz aldıgı parametreler= 0 – bütün fonksiyonlar çalışıyor (default) 1 – varlık fonksiyonlarını (my != NULL // freze mode kullanırken adamımızı kaldırmamız gerekiyor bunu uygulamayı unutmayın) ve parça fonksiyonları askıya al , diger bütün fonksiyonlar çalışıyor. 2 – bütün fonksiyonları askıya al. Şimdi bir örnek yapalım: function level_change()

Page 57: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

{ wait(1); if (EVENT_TYPE == event_impact) { my = NULL; freeze_mode = 1; level_load(“TLlevel2.wmb”); wait(2); freeze_mode = 0; } } action zone_block { my.enable_impact = on; my.event = level_change; } Amacımız zone_block action ile verdigimiz bir kapıya enable_impact olayını gerçekleştirmek yani bir şeyin çarpması sonucunda my.event=level_change; fonksiyonuna ziplayarak level_change fonksiyonunu işletecez level_change fonksiyonunda olayın ne oldugunu ögrenmek için if (EVENT_TYPE == event_impact) olay tipinin event_impact yani kapıya bir şeyin çarpması olayı olup olmadını eger olay bu ise my = NULL; ile adamamızı oyun motorundan kaldırıyoz ve freeze_mode = 1; diyrek varlık fonksiyonlarını donduruyoz level_load(“TLlevel2.wmb”); ile ise diger aşamamızı yüklüyor ve bu işlemden sonra oyun motoruna 2 fps diger işleri yapması için izin veriyom (wait(2);) son olarakta freeze_mode = 0; diyerek bütün fonksiyonları serbest bırakarak kaldımız yerden devam ediyoz. :)

ASANSÖR VEYA YÜRÜYEN MERDĐVEN

Kahramanımız artık merdivenden çıkmasını gerek kalmadan asansörle yukarıya çıkaracaz .

Page 58: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Kodlamalarda siz okuyucumların rahat anlaması için kodları fazla karışık yapmaktan kaçınıyom ama büsüferde çok fonksiyonlu bişey çıkmıyor ama siz okuyucularımızın hayal gücünü kullanarak bu eksikleri gidermesini bekliyom böylelikle kitaba baglı kalmadan istediginiz kodlamayı yapmayı kazandıracaktır. function yukariya()//kahramanımızı yukarıya çıkrayoz. { my.skill2=my.z+5;//asansörümüzün ilk konumunu ve çıkacagı yüksegi ayarlıyoz sleep(2);//2 sn bekle while (my.skill1==0) { my.z+=time; if(my.z>my.skill2) {my.skill1=1; } wait(1); } } action asansor { my.enable_sonar=on;//sonar taraması başlanıyor my.event=yukariya;//yukariya fonksiyonunu çagırıyor; } Sonarı aktif ettik ama tetikleyecigi koymadık bunun için trace_mode = ACTIVATE_SONAR; trace_mode ya activate_sonar eklemeyi unutmayın. Varsa bir kapıyı yatay şeklilde döndürün ve kapı olayına asansor seçin kahramanımız kapının üzerini çıktıktan 2 sn sonar yukarıya çıkacaktır.

VARLIK DEGĐŞKENLERĐ

Page 59: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Varlıkların yaratılmasıyla standart degişkenler almaktadırki otomatik olrak bunlar kod yazarken bunlar degişken oluşturmaktan kurtarıyor bizi. Bunlardan bir tanesi skill1….100 1 den 100 kadar giderek 100 tane degişken 1..20 kadarı wed yani level editorde direk gözükür ki ellede degerlerini degiştirebilirsiniz. Bir digeride flag1…8 1 den 8 kadar olan bayraklardır bunlar alabilecegi deger 0 veya 1 dir bunların anlamı evet hayır gibi anlamlı degişkenlerimizdir burda 1 evet anlamında 0 ise hayır anlamındadır. Bunları kunllanırken örnegin my.skill1=10; Diyerek skill1 degişkenin degerini 10 yapmaktır ama bu skill ifadesi hiç bişey anlatmıyor kalıcı olmadıgı için “define deneme,skill1 “ diyerek my.deneme=10; dedigimzdede skill1 degeri 10 olacaktır buşekilde kullandıgımız degişkenlerin ne anlama geldigini basit bi şekilde anlarız wed de yani level editor de “define deneme,skill1 “ dememiz ordaki skill1 adlı degişkenin degerini degiştirmedigini görmüşsünüz bunu bir adım daha götürerek action başlıgın üzerinden açıklama yazar gibi //uses:deneme diyerek level editördede skill1 yerine artık deneme yazdıgını göreceksiniz.

Burdaki define ile tanımladıgımız kod editoründekini degiştirken uses ile ise level editördekini degiştirmiş olduk. Yalnız define ile tanımlama yapmadan uses eklerseniz uses anlamyacaktır hangi skillX degiştirecegini bilemeyecegi için level editorde bir degişkliklige gitmeyecektir.

Asansörü geliştirilmiş bir örnek

Page 60: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

wait(sayı); ve sleep(sayı); daha önceki derslerde belirtildiği gibi wait parantezler arasındaki kare(frame) kadar, sleep ise parantezler arasındaki saniye kadar bekletir.

Page 61: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

if (belirtec != 1) { return; }

PATH –YOL

Şimdide size 3d game studionun güzel özelliklerinden birinden bahsedecem. Path in türkçesi yol olrak tercüme edebilir peki bu yol nedir kafanızda bazı şeylerin canlanması için birkaç fikir verecem mesala bir asker nöbet tutuyor bir oyana bir buyana sürekli aynı şekilde vede yolda dolanıyor düşman tarıyor arıyor işte bu askerin güzergahını path yapabiliriz veya gölde yüzen balık havada uçan kuş kelebek ortalıkta dolaşan asker araba tren yolu v.b. birçok örnek çoogoltılabilir işte buralarda ve pekçok yerde kullanabilecigimiz path tanıtacam sizlere öncelikle path oluşturmak hakkında bilgi veriyim.

Page 62: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Resimdedende anlaşılacağı üzere oyun sahnemizde farenin sağ tuşuyla açılan popup menuden Add Path diyerek ilk yolumuzun node (düğüm) noktasını yerleştiriyoz daha sonra yolumuzu çizmek için resimdede siyah okla gösterdigim vertex move tolbar dügmesiyle yolumuzu çiziyoz.

Resimdende anlaşılacagı üzere siyah yuvarlakla aldıgım yerler yolumuzun düğüm (node) noktalarıdır buralar bizim için çook önemli .Dügümlere direk erişebiliriz ama edgelere direk erişeyemeyecez dügümler aracılıgıyla erişecez. Đlerleyen kısımlarda daha iyi anlayacaksınız. ☺☺☺☺

Page 63: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Siyah çizgeyle gösterdiğim alanlar ise iki dügüm arası yüzeylerimiz (edge) lerimiz.

Bu resimde de görülecegi üzere edge ve node özellikleri yer almakta edge özelliklere baktıgımızda direction 4 den 3 , 3 dende 4 de gidilecegibilini gösteriyor buurdan edge lerin trafigini ayarlayabilirsiniz ve diger özellikler yer alırken. Node de ise her bir nodenin dügümün skill özellikleri yer almakta.

Page 64: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Lite c scripit editor kodlarımıza baktığımızda gayet zengin bir koda sahibz bunları tek tek inceyelim.

---------------------------------------------------------------------------

path_scan

path_scan(ENTITY* ent, VECTOR* pos, ANGLE* dir, VECTOR* sector)

path_scan kodumuz kahramanımızın posizyonuna göre önene gelen path in node dügüm sırasını geri döndirmekte ayrıca yön seçebilmekteyiz ayrıca path_set gibi varlıgımıza buldugu path i eklememekte.(ayrıntılı bilgi için path_set bakın) Scan yaparken arada duvar varsa yok sayar . Şimdide aldığı parametrelere baktığımızda :

Parameters:

ent Varlığımızın özelliklerinin saklı tutulduğu ram adresi. pos Taramaya başlayacagımız merkez orgin. dir Tarama yönünü ( açı). sector.x Yatay tarama kısmın pozisyonu, yada sabit bir deger

girerek koninin genişliği. sector.y Dikey tarama kısmın pozisyonu, yada sabit bir deger

girerek koniye dönüşüm açısı. sector.z Tarama uzaklıgı. Ör: path_scan(me,my.x,my.pan,vector(180,180,50));

Page 65: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Fonksiyonun döndürdügü degerde buldugu dügümün (node) sıra numarasıdır. Not: path seçilmesine(path_set) demeye derek yoktur herhangi bir önene gelen dügümün sıra numarısını verir.

---------------------------------------------------------------------------

path_scannode

path_scannode(ENTITY*,var index)

path_scannode path_scan ile entegre(beraber) biçimde çalışır.

Parameters:

ENTITY* - Varlığımızın özelliklerinin saklı tutulduğu ram adresi. index – 0 tanımlı ilk dügümü gösterir, 1 ikincil dügümü gösterir bakış açısına göre ya 1 fazlası ya 1 eksigini dügüm yoksa ondan sonrası için 0 gösterir.

i1=path_scan(player,player.x,player.pan,vector(180,180,100) );

i2=path_scannode(player,1);

Döndürdügü degerde buldugu dügümün sıra numarası.

---------------------------------------------------------------------------

path_getnode

path_getnode(ENTITY*,var node,VECTOR* pos,var* skills)

Kısaca verediğimiz dügüm numarasının kordinatını ve dügümün özelliklerini ögrenebiliriz.

Parameters:

ENTITY* - Varlığımızın özelliklerinin saklı tutulduğu ram adresi.

Page 66: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

node – aranacak node dügüm numarası sırası. pos – node konumunu döndüreceği degişken vektor 3 boyutlu.

Skills- dügüm noktasının özelliklerini aktaracağımız 6 boyutlu dizi degişken kullanmak istemiyorsanız NULL yazarak boş odlunu bildirin.

Ör:

path_getnode(my,2,deneme,null);

Bu özelligin çalışması için ya path seçilmeli (path_set) yada path taranarak (path_scan) ilerlenmelidir path tarayarak ilerlemek bazen avantaj sağlar.

---------------------------------------------------------------------------

path_setnode

path_setnode(ENTITY*,var node,VECTOR* pos,var* skills)

path_setnode dügümün konumunu ve özelliklerini degiştirmeye yarar.

Parameters:

ENTITY* - Varlığımızın özelliklerinin saklı tutulduğu ram adresi. node – istenilecek node dügüm numarası. pos – konumunu degiştirecegimiz path yeni konumu 3 boyutlu degişken.

Skills- istedigimiz dügüm noktasının skill parametreleri degiştirmek için 6 boyutlu dizi degişkeni ile degişkenin içindeki veriyi node nin özelliklerine aktarıyoz, kullanmak istemiyorsanız NULL yazarak boş odlunu bildirin.

Page 67: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Bu özelligin çalışması için ya path seçilmeli (path_set) yada path taranarak (path_scan) ilerlenmelidir path tarayarak ilerlemek bazen avantaj sağlar.

---------------------------------------------------------------------------

path_getedge

path_getedge(ENTITY*,var node,var edge,var* skills)

ise dügüm ile edge arası uzaklık, agırlık ve sikll degerini veriyor. Bu özelligin çalışması için ya path seçilmeli (path_set) yada path taranarak (path_scan) ilerlenmelidir path tarayarak ilerlemek bazen avantaj sağlar.

Parameters:

ENTITY* Varlığımızın özelliklerinin saklı tutulduğu ram adresi. node – dügümün numarası edge – dügümün dallandıgı yüzeyin numarası (daha ayrıntılı bilgi için path_nextnode bakın)

skills – dügüm ile yüzeyin uzaklık mesafesinin agırlıgının ve skill degerinin aktarılması için 3 boyutlu dizi degişken.

skills[0] – yüzey uzaklıgı skills[1] –yüzey agırlıgı skills[2] – yüzeyin skill degeri

path_setedge(my,3,1,deneme);

path_getedge(my,3,1,deneme2);

Page 68: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

---------------------------------------------------------------------------

path_setedge

path_setedge(ENTITY*,var node,var edge,var* skills)

numarasını verdigimiz edgenin yüzeyinin özellikler parametresindeki yer alan bezier , weight , skill degerlerini degiştiriyor. Node numarasını vererek dallandıgı yüzeye söleyerek erişiyoz edgeye. (daha ayrıntılı bilgi için path_nextnode bakın) ☺☺☺☺ Bu özelligin çalışması için ya path seçilmeli (path_set) yada path taranarak (path_scan) ilerlenmelidir path tarayarak ilerlemek bazen avantaj sağlar.

Parameters:

ENTITY* Varlığımızın özelliklerinin saklı tutulduğu ram adresi. node – dügümün numarası edge – dügümün yüzeyin numarası

skills – bezier , weight , skill degerinin varlıktaki degerleri degiştirmek için 3 boyutlu dizi degişken.

skills[0] – yüzey bezier

skills[1] –yüzey weight

skills[2] – yüzeyin skill degeri

path_setedge(my,3,1,deneme);

path_getedge(my,3,1,deneme2);

path_length

path_length(ENTITY*)

Page 69: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Pathin bütün yüzey kısımlarının toplamlarını geri döndürür. Bu özelligin çalışması için ya path seçilmeli (path_set) yada path taranarak (path_scan) ilerlenmelidir path tarayarak ilerlemek bazen avantaj sağlar. ☺☺☺☺

path_next

path_next(ENTITY*);

Çalışması için path_scan a ihtiyaç duyar.

Seçili path in bir sonraki oluşturulmuş pathhin dügüm taranan sayıyı geri döndürür. Dönen degere 0 ise path yoktur. Bir sonraki path seçer.

path_nextnode

path_nextnode(ENTITY*,var node,var edge)

path seçtikten sonra işe yarar.

Bakınız path_set fonksiyonuna.

Path_nextnode biraz karışık bir fonksiyondur buradaki amaç verdigimiz node numarasından sonraki gelen ama dikkat edin sıra numarası degil numarası verdigimiz dügümden sonraki hangi dügüm geliyorsa onu verir. Ama işte sorunda burada başlıyor eger dügüm 2 , 3 hatta 4 yol gibi ayrılıyorsa hangi yol daki dügümün numarasını verecek ve o yola gitmeye yöne izni varmı işte bu sorunun cevabı path_nextnode fonksiyonun son olarak aldıgı parametre olan edge . edgeye verdigimiz degere göre bir sonraki node dügümün (o yola gitmeye iznimiz varsa tabi) numarasını verecektir.

Parameters:

ENTITY* - Varlığımızın özelliklerinin saklı tutulduğu ram adresi. node – bir sonraki düügümün ögrenmek istedigimz dügüm numarası önceki dügüm numarası.

Page 70: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

edge - işte olayın püf noktası burada hangi yola gidecez bunu burada belirliyoz .( saat yönünden başlayarak gider.)

Resimde dikkat ederseniz bi adamımız var şimdi ben node2 den sonraki yollara dallanacagımızı düşünelim.

numara=path_nextnode(my, 2,1);

diyerek node 2 den sonraki 1 ci edge yolundaki dügüm numarasını ver dedik. bize path_nexnode 3 degerini geri döndürecektrir.

numara=path_nextnode(my, 2,2);

deseydik path_nexnode 6 degerini geri döndürecek.

numara=path_nextnode(my, 2,3);

deseydik path_nexnode 9 degerini geri döndürecek.

Page 71: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

numara=path_nextnode(my, 2,0);

deseydik path_nexnode 1 degerini geri döndürecektir.

Bu bize ileride path_getnode fonksiyonu ile birçok iş yaptıracaktır.

---------------------------------------------------------------------------

path_set

path_set(my, "path_011");

Varlıklarımızın ekler diye bir bölümü vardir resimdende görebileciginiz gibi yolumuzu varlıgımıza baglamak için 3 yolumuz var birincisi resimdede gözüktügü gibi path (yol) dügmesiyle varlıgımıza yolun özelliklerini direk erişim hakkı verebiliriz yada kod esnasında path_set(my, "path_001"); diyerek el ile varlıgımıza path ekleriz. Yada digerlerini göre daha avantajlı olan3 yol ise path a baglanmaksızın gördügünü kendisini ekleyen path_scan ile

Page 72: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

yaparız. (ayrıntılı bilgi için path_scan yada path_set a bakınız)

path_spline

path_spline(ENTITY*,VECTOR* pos,var dist)

Evet artık path fonksiyonunu bitirmek üzereyiz daha önceki örnek anlatımlarımla bir varlıga baglayarak el ile çok güzel yapay zekalar çıkarabiliriz ama 3dgs studionun sundugu bir kolaylıkta bu path bir adam baglayarak sadece bir satır kodlada yürütebiliriz. Path_spline path bagladıgımız insanı prüssüz titretmeden yürütmeye yarıyor aldıgı parametreler kısıtlı oldu için sadece o yolu sürekli doalşıyor. Nodeleri sırasıyla takip ediyor. Geri döndürdügü degerde ulaştıgı node oluyor şimdi aldıgı parametrelere bakalım.

Parameters:

ENTITY* - Varlığımızın özelliklerinin saklı tutulduğu ram adresi.

pos - Hesapladığı posizyon. dist - Posizyonun hızını degiştirdigimiz bir sürekli

artan bir degişken degişken çok hızlı artarsa varlıgımız o kadar hızlı olur.

Tabiî ki bu fonksiyonun çalışması için adamaıza path eklenmeli.yarıntılı bilgi için path_set bakınız.

Ör:

action aktor

{ var yurume;

while(1)

{

Page 73: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

temp= path_spline(my,my.x,yurume);

yurume+=time_step;

wait(1);

}

}

Page 74: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

VEKTORLER Vektor denince aklımaza gelen ilk şey uzayda yönü ve kuvveti olan bir büyüklük aklımıza gelmeli. Vektorun kuvet demekle istedigim uzantının büyüklügü iken yön is dünya kordinat sistemde ki açısıdır. Vektörlerde genellikle 3 degerden oluşmaktadır bunlar kullanıldıgı yere göre isim alır eger kordinat sistemde kullanıyorsak x,y,z ile isimlendirilirken eger açıda kullanıyorsak pan,tilt,roll olarak isimlendirilecektir renkte kullanırsak mavi,yeşik,kırmızı olarak isimlendirilmektedir. VECTOR, ANGLE, yada COLOR yapıları 3 boyutlu dizilerdir. Bu yapılar birbirlerinden farkı yoktur denebilir sadece farkları bu 3 boyutlu dizilerin tanımlanan degişken boyutları farklıdır mesala COLOR dizisi yada vektörü byte ile tanımlanımı hafızada 3 byte yer kaplarken 0-255 arası deger almaktadır. Sizin dikkat etmeniz gereken bir nokta büyük boyutlu bir diziye küçük bişey aktarırsak veri de kaybolma olmayacaktır ama sadece hafızada fazladan yer ayırmış oluruz ama küçük bir yere alamaycagından büyük bir deger atarsak deger kırpılır(yada hata verecektir). Mesala COLOR vektörüne ben 300 degerinin atarsam kırpacak ve 45 sayısını alacaktır vede veri kaybına neden olacaktır.

Accelerate

Hızlandırma yada ivmelendirmede kullanılmaktadır. Artırma yada düşüş saglanabilir. Bunu çalışması dönen sandalyelere benzemektedir. Tanımlanmasına bakarsak :

accelerate(var speed,var accel,var friction);

speed: Akışın hızını gösterir. Friction sıfır olursa yani sürtüşme olmazsa haliyle speed aynı degerde kalcak sıfıra çekmeyecek.

Accel: Aldıgı deger pozitif ise speed teki degişkeni arttırmakta, accel negatifse speedi azalttırmakta. Eger accel sıfır ise sürtüşmede varsa sürtüşme oranında speedi sıfıra çekmektedir.

Friction: sürtüşme büyüklügü.

Return: Dönen deger speed degerine baglı olrak belli bi oranda küçügüdür.(yaklaşık olararak %15 i dönen degeri yada 7de 1i)

Ör:

var aspeed; //Akışın hızı; vec_add(camera.pan,accelerate(aspeed,5*key_force.x,0.7))

// sag sol klavye tuşları ile kameranın yavaş ivmelenerek hızlanması klavyeden eli çekinceisede yavaşlayarak sıfıra çekilmesi.

Page 75: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Dikkat ederseniz key_force.x diyerek, klavye sag sol tuşlardan elin çekilmesiyle sıfır olacagından speed degişkenide sıfıra çekilecek( friction verilmişse ) eger key_force.x 1 olsaydı speed artırmakta yada tersi durumda -1 olsaydı speed azaltılacak. Burada anahtar konturol kısmımız accel olmalı.

vec_accelerate

Accelerate gibi dir tek farkı bunun degerleri vectorel (3lü x,y,z) degerler almasıdır. Tanımı:

vec_accelerate(vector distance,vector speed,vector accel,var friction);

Ör:

vec_accelerate(dist,speed,force,0.5); c_move(me,dist,nullvector,IGNORE_YOU|IGNORE_PASSABLE|USE_AABB);

vec_add

Vektörel toplamalarda kullanıyoz.

Tanımı :

vec_add ( VECTOR* vector1, VECTOR* vector2)

Aldıgı parametreler bir nevi düz toplama gibi:

vector1 = vector1 + vector2

Birinci ile ikinci toplanır sonuç birinciye aktarılır.

vec_diff

vec_diff ( VECTOR* vector, VECTOR* vector1, VECTOR* vector2)

vec_diff iki vektörü birbirinden çıkarıp vektöre atamaya yarıyor.

Başka kullanım tipide :

Page 76: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vector = vector1 - vector2;

Parameters:

vector - Sonucun yazılacağı vektor. vector1 Đlk vektör. vector2 - Đkinci vektör.

Ör:

var vec0[3]; var vec1[3] = { 10, 20, 30 }; var vec2[3] = { 1, 2, 3 };

vec_diff(vec0, vec1, vec2); // vec0 alacagı deger == 9, 18, 27

dikkat edilirse vec1 den vec2 çıkarılıp vect0 atanıyor.

vec_dist

Đki vector arasındaki uzaklıgı bulup geri döndürmekte. Hipotenus teoremi ile bulmakta.

Tanımı:

vec_dist (vector1, vector2);

Ör:

distance = vec_dist(my.x,your.x);//benim posizyonum ile karşı tarafın arasındaki en yakın uzakligi vermekte.

vec_dot

Đki vector arasındaki açıyı hesaplamakta. Buldugu açıyı geri döndürerek bildirmekte.

Tanımı:

vec_dot (VECTOR* vector1, VECTOR* vector2);

Page 77: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vec_for_angle

Verilen açının dünyadaki kordinatta hangi eksene geldigi bildirmekte. Hangi eksende ise o ekseni pozitifindeyse o ekseni 1 yapken negatifinde ise o ekseni -1 yapmakta.

Tanımı:

vec_for_angle(VECTOR* vec,ANGLE* ang)

ör:

var temp[3];

vec_for_angle(temp,vector(90,0,0));//temp artık 0,1,0

vec_for_min vec_for_min

B_Box (bounding box) yani varlıgı çevreleyen telkafesin ayarlanmasında kullanılmakta min ile max arasında tel kafes giydirilir varlıga bu giydirilen tel kafesin baz noktası modelin med deki orjinidir.

Tanımı:

vec_for_min (VECTOR*, ENTITY*); vec_for_max(VECTOR*, ENTITY*);

Page 78: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vec_for_mesh vec_to_mesh

Vec_for_mesh numarası verilen meshin kendi model içindeki yani meddeki orjinine göre olan en yakın noktasını pozisyonun local kordinatını vermekte.

Tanımı:

vec_for_mesh (VECTOR*, ENTITY*, var number);

vector: ile mesh numarası verilen meshin kordinatını aktarılacak vektör.

Entity: mesh ögrenilecek olan varlıgın hafızadaki adresi.

Number: mesh numarası

Page 79: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Vec_to_mesh ise mesh real time defarmasyonunu saglamaktadır. Numarasını verdigimiz meshin vektörününü vererek istenilen kordinata taşınmaktadır.

Tanımı:

vec_to_mesh (VECTOR*, ENTITY*, var number);

vector: taşınacak olan yerin kordinatı yine kendi local kordinatı.

Entity: mesh taşınılcak olan varlıgın hafızadaki adresi.

Number:taşınılacak olan mesh numarası.

vec_for_normal

Numarası verilen meshin dünyadaki x,y,z deki yüzey konumlarını vermekte. Evet biraz anlaması zor ama daha iyi anlamak için c_trace c_move den normal bakınız daha iyi anlayacaksınız.

Tanımı:

vec_for_normal (VECTOR* vector, ENTITY* entity, var number);

Page 80: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vec_for_screen

Ekranda kordinatı verilen noktanın dünyadaki kordinatını verir.

Tanımı:

vec_for_screen ( VECTOR*, VIEW*);

vector: Aldığı ilk parametre ekranın üzerindeki belli bir noktanın local kordinatı sonra bulunan sonuç tekrar buna yazılmakta.

View: hangi varlıkta bakılacaksa o varlık.

Ör:

temp.x = mouse_pos.x; temp.y = mouse_pos.y; temp.z = 200; //ekrandaki mousun x,y kordinatı ile 200 derinlikteki bir noktanın cameradanki dünya kordinatını vermekte vec_for_screen(temp,camera);

Page 81: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Vec_for_screen

vec_for_screen ( VECTOR*, VIEW*);

Bu fonksiyon 1 parametresi ile ekranımızdan belli bir konumundan vede belli bir uzaklıktaki vectorun konumunu vermekte 2 aldıgı aparametre ise bakış açımıza bakarak o yönde oluşturmakta.

Ör:

function silah_mermi_defarmasyonu()

{

temp.x=screen_size.x /2;

temp.y=screen_size.y /2;

temp.z=800;

vec_for_screen(temp,camera) ;

Page 82: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ent_create("silah_kursor.bmp",temp,null);

}

vec_for_uv vec_to_uv

Vec_for_uv skin editordeki uv map daki vertex numarası verilen vertexin skin texture üzerindeki konumunu verir . z ekseni haliyele yoktur zira texture 2d oldu için.

Tanımı: vec_for_uv (VECTOR*, ENTITY*, var number); vector: vertex numarası verilen yerin texturedeki x,y konumu. Entity: varlık ram adresi. Number: uv map daki vertex numarası. Vec_to_uv ise uv mapdaki vertex numarası verilen vertexin konumunu degiştirmeye yaramaktadır. Tanımı: vec_to_uv (VECTOR*, ENTITY*, var number); vector:numarası verilen vertexin yeni konumu.

Page 83: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Entity: varlık ram adresi. Number: uv mapdaki vertex numarası Ör: vec_for_uv(temp2,silah_el,340);//340 numaralı vertexin uv mapdaki konumu ögrenmek için temp2[0] += 0.1; // 340 numaralı uv map vertexin 1 piksel yana kaydırarak modelin texturesinin degiştirilmesi vec_to_uv(temp2,silah_el,340);//340 numaralı uv map vertexin yeni konumunu ayarlıyoruz.

vec_for_vertex

Bu fonksiyonumuz bir modeldeki belli bir vertex numarasının dünya kordinat sistemindeki posizyonunu vermektedir.

Vertex kısaca poligonların dügüm noktaları desek yanlış olmayacaktır. Tanımı:

Page 84: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vec_for_vertex (VECTOR* vector, ENTITY* entity, var number); vector: numarası verilen vertexin konumunu atayacagı degişken. Entity: varlık ram adresi. Number: posizyonunu ögrenmek istedigimiz vertexin numarası.

vec_inverse

Vektörü negatiflemeye yarmaktadır. Tanımı: vec_inverse ( VECTOR* vector); ör: var i[3]={10,20,30}; vec_inverse(i);//artıki içindeki degerler -10,-20,-30

vec_length Verilen vektörün dünya kordinat sistemindeki orjine olan uzaklıgını geri döndürerek verir.

Tanımı: vec_length (vector);

Page 85: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ör: uzaklik = vec_length(my.x);

vec_lerp

interpalosyon ne ? � acaba tanımı: vec_lerp( VECTOR* v,VECTOR* v1,VECTOR* v2,var f); v = (1-f)*v1 + f*v2

vec_normalize

Verilen bir büyüklük ile vektörel uzunlugu orantılıyarak scalalıyor. Ama tam olarak ne işe yaradıgını bilmiyommm �?. Tanımı: vec_normalize (VECTOR* vector, var length); vector[0] *= length / vec_length(vector); vector[1] *= length / vec_length(vector); vector[2] *= length / vec_length(vector);

vec_rotate

vec_rotate (VECTOR* Dir, VECTOR* Angle);

Vektörümüzü kordinatını orjinden başladığını kabul ederek döndürmeye ve yeni kordinatını aktarmaya yaramaktadır. Aldigi ilk paramtere vectorün büyüklüğü yani kordinattaki yeri başlangiç yeri olrak orjin kabul edilmekte, 2 parametre ise angle döndürülecek yerdir x parametresi pan , y parametresi tilt, z parametresi ise roll anlamına gelmektedir. Vecrotate ile orjini baz alarak döndürerek dünya kordinat sistemine göre yeni konumunu vermektedir.

Ör:

Page 86: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

var direction[3] = 7.07, 0, 0;//vektörümüzün büyüklüğü kordinatteki yeri.

var angle[3] = 45, 0, 0; //döndürülecek açı ve yönü

vec_rotate(direction,angle);

Sonucu tekrar direction içine yazmaktadır. Yeni konumu olmaktadır döndürme işleminin sonunda.

Page 87: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vec_scale

Vectorü scale ediyoz yan belli bi oranda küçültüp yada büyütüyoruz. Tanımı: vec_scale ( VECTOR* vector, var factor); vector:işleme tabi tutulacak vector. Factor: 1 orjinal büyüklügüdür 1 den büyük verirsek büyütürkenken 1 den küçük bi rakam verirsek küçültürürüz.

Ör: var v[3] = { 10, 20, 30 }; vec_scale(v,5);//v nin degeri artık 50,100,150 oldu

Page 88: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vec_set

vec_set ( VECTOR* vector1, VECTOR* vector2)

Bu fonksiyonumuz birden fazla boyutlu degişkenleri birbirine kopylamaktır.

Parameters:

vector1 Hedef vector. vector2 Kaynak vector.

Kısaca bu işe yarıyor.

vector1[0] = vector2[0]; vector1[1] = vector2[1]; vector1[2] = vector2[2]; boşluk tuşundan elini çekince çalışması while (key_space == off) {wait (1);} while (key_space == on) {wait (1);} my.shadow = on;//normal gölge ekler render_shadows(); //yumuşak gölge ekler.

vec_sub vec_sub ( VECTOR* vector1, VECTOR* vector2);

Buda vec_diff gibi vektorler arası çıkarım işine yarıyor sadece farkı çıkarttığı vektorü sonucu onun

Page 89: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

içineyazar.vector1 i vector 2 den çıkardıktan sonra sonucu tekrar vector1 yazması. Kısaca şu işi yapıyor:

vector1 = vector1 - vector2;

vec_to_angle

vec_to_angle (ANGLE* ang, VECTOR* dir);

Bu fonksiyonumuz verdigimiz vektörü açıya çeviriyor.

Döndürdüğü değer bir üçgen gibi düşünürsek hipotenusun uzunlugu ilk aldıgı parametre ise buldugu açıyı aktaracağı degişken. Bu fonksiyonu genellikle varlığımız ilerlerken yönünü o yöne dönmesi için kullanıyoz.

Ör:

adam2=vec_to_angle(adam,vector(10,10,0));//adam=45 bulunur adam2 ise 14.14 (10 kök2)döndürür değer olarak. vector(10,10,0) diyerek x 10 , y 10 bir ikiz kenar dik üçgenin yaptığı açı ve hipotenus degerini buldurmak yaptıgımız iş.

vec_to_screen

Cameranın görüş alanına giren bir kordinatta yada vectorde, monitörün hangi x,y çözünürlük yerine geldigini verir. Dikkat ederseniz mutlaka cameranın görüş alanına girmesi gerekli pozisyonun bölelikle giren o pozisyonun monitörün hangi yerine geldigini verebilir.

Tanımı:

vec_to_screen ( VECTOR*, VIEW*);

Page 90: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

vector: bu vector input ve output olarak çalışmakta birincisi dünyakordinat sistemini verilen posizyonu vermek için ikincisi ise verilen kordinatta monitöre dek gelen pikselin konumunu almak için kullanılır.

View: bakış açısına giren yeri belli etmek için cameranın ram adresi.

Return: geri dönen deger eger view bakış açısında ise sonuç vektörü geri döndürürken bakış açısından dışında ise NULL geri döndürür.

Ör:

PANEL* panel_pan = { bmap = "fd.tga"; }//bir panel oluşturalım ve daha sonra diger bi fonksiyon içinden çagıralım

vec_set(temp,my.x); if (NULL != vec_to_screen(temp,camera)) //ekran bakış açısın içindemi posizyon eger içindeyse göster

degilse gösterme { panel_pan.pos_x = temp.x; panel_pan.pos_y = temp.y; panel_pan.VISIBLE = ON;//c-script set(panel_pan,VISIBLE);//lite c } else { panel_pan.VISIBLE = OFF;//c-script reset(panel_pan,VISIBLE);//lite c }

Page 91: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ANG()

Ang() ı açı eklme çıkarmada kullancaz. Genellikle açı farklarını veya eklemelerin bularak en yakın yerden döndürülmesinde kullanılır.

x = ang(0); // x degeri 0 x = ang(-350); // x degeri 10

x =ang (185); // x degeri -175

Uygulama:

Page 92: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Yukarıdaki resimdeki posizyonda haritamızda oldugunu varsayarsak askeri player yönünde döndürmek istiyoz.

Vec_to_angle(dunya_kordinat_acisi,player.x);

Asker.pan=dunya_kordinat_acisi.pan;

Diyerek döndürebiliriz ama bu bi anda gerçekleşecegi için estetik gözükmeyecektir. Bu yüzden askerinaçısını(askerin konumu önemli degil) , playeri açısına yavaş yavaş dönmeli vede bunu yaparkende en yakın yerden dönerek yaptırmalıyız.

Bunun için izleyecegimiz yol.

Vec_to_angle(dunya_kordinat_acisi,player.x);

Asker.pan=ang( dunya_kordinat_acisi.pan - asker.pan) * time_step /5;

Buradaki ang alma işlemini matematiksel ifade edersek.

-150 - 120 = -270 derece eder ang ilede bu açının pozitif yöndemi yoksa negatifmi dönecegini hesaplatacaz -270 ����90 derece ederki 90 derece askerin açısını artıracaz.

Page 93: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

PROC_KĐLL

Proc_kill fonksiyonu bize bazen ölümcül faydası olmaktadır. Bildiginiz gibi Windows her işi aynı anda yapamaz bu yüzden bi sıraya sokar. Đşte proc_kill fonksiyonuda burada devreye giriyor aşağıda detaya inecegim ama size biraz fikir olması için bir örnek anlatacağım. Mesala c_scan ile tarama yapacaz ve taramada aynı anda 2 şeyi tetiklamak istemiyoz mesala kapı açacaz ama tarama alanınada 2 kapı girmekte ama biz sadece birini açtırmak istiyoz işte burada proc_kill devreye gierrek aynı fonksiyonu Windows işleme kuyruguna soktugu an diger fonksiyonu yokkediyoz iptal ediyoz. Veya bi kapı açtıracaz oyuncu açma tuşuna 1 den fazla bastı ne olacak kapı açılacak ama kaç defa bastıysa onun kadar aynı anda çalıştıracagı için kapı çok hızlı açılacak işte sadece bir varlıkta bir fonksiyonun çalışmasını istedigimizde diger kopya fonksiyonların iptal olmasını istiyorsak proc_kill den faydalanacaz. Sonsuz döngülerde falan çok ölümcül kurtarıcımız olacak. proc_kill (var mode);

mode Aldığı parametreler:

Mode 1 Benim tarafından çagrılan bütün fonksiyonları sona erdir anlamındadır. 1 ve 2

bir fonksiyonla başka fonksiyonların çagırılmasıyla ilgiliyken 4 5 6 ise bir fonksiyonun hafızadaki birden fazla örnrkleme çagırmasıyla ilgilidir.

2 Karşı tarafın geçerli fonksiyonlarını iptal et demekti . Benim tarafımdan karşı tarafı tetikleyerek. Birazadaha açmak gerekirse mesala bir tarama yaparken you degişkeniyle dönen kişinin bütün fonksiyonlarını durdur demektir. Dikkat edilecek hususlardan bir tanesi proc_kill yeri çok önemlidir. Not: Bu olaylara dikkat edilmeli zira taramada 1 den fazla kişi oldugu zaman bize en yakın kişin you degişkeniyle ram adresi dönerken 2 ci şahsın ram adresini ögrenemedigimizden ilk adamımızda işe yararken 2 ci adamamızda işe yaramamaktadır.

4 4 numaralı seçenek bir fonksiyonu birden fazla varlık kullanıyorsa bile tüm fonksiyonlar diger varlıkların kullandığı fonkisuonlarını içere alarak sadece bir tanesi çalışır. Diger varlıklar daki fonksiyonlar tamamen duruken sadece herhangi bir varlıkta sadece çalışır 1 tane fonksiyon. Diger varlıklardaki fonksiyonların hepsi iptal edilmiştir.

5 Aynı çagırımda örneklemeden birden fazla çagırım varsa güncül durumda geçerli durumda olanların benim tarafımdan yapılan örneklemeleri iptal etmekte. 4 numaradan farkı vir fonksiyonu birden fazla varlık kullansa bile varlıklarda birertane fonksiyon çalışır . 4 numaradaki gibi diger varlıkların fonksiyonları hepsi öldürülmez diger varlıkların örneklemerinide 1 düşürülür.

6 Aynı çagırımda örneklemeden birden fazla çagırım varsa güncül durumda geçerli durumda olanların karşıtaraftan yapılan diger örneklemeleri sona erdirmekte.

Page 94: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

16 Leveldeki bütün fonksiyonları durdur. Proc_kill bir nevi olay katarlarında kendisinden önce gelen olayları iptal etmekte durdurmaktadır. Aşşagıdaki resimde ifade etmeye çalıştım.

Đnkey inkey (pass_str); // type the password if(result == 13) // if we press Enter { pass_txt.visible = off; // hide the text } eror timer Time since the last timer() call in microseconds (1/1000000 sec). file_var_read randomize(); // starts a initial value

x=random(100); // x becomes number between 0 and 99 time_factor

Page 95: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

d3d_lightres = 1; // improved dynamic lights high kalite

total_ticks

The time passed since start of the game, in ticks. Oyunun başlangıcından beri geçen süre.

New debug code

Let's take a look at the interesting values offered by the engine:

- num_actions, number of currently running actions;

- num_visents, number of visible entities;

- num_visentpolys, visible model and sprite polys;

- num_vismappolys, visible map and wmb polys;

- d3d_texskins, memory used by models and sprites;

- d3d_texbmaps, memory used by panels and "entity"

definitions;

- d3d_texsurfs, memory used by wmb entities;

- d3d_texsmaps, memory used by the shadow maps;

- d3d_texfree, available video memory.

-d3d_lightres haraketli işiklarda yüksek kalite. action flickering_light { d3d_lightres = on; while (1) { my.lightrange = 70 + random(30); my.lightred = 150 + random(100); my.lightgreen = 150; my.lightblue = 50; waitt (2); } }

Aum 16

Bunlar sistem hakkında bilgi veriyor mesala o anda çalışan

fonksiyon sayısı gibi ekran kartının aloabilecegi mb falan vb.

Breakable windows

Read this article and you will find out how to create a window that breaks when you shoot it or when the player passes through it. The player should loose a part of its health if it does that, right?

action breakable_glass { my.transparent = on; my.enable_impact = on; my.enable_entity = on; my.enable_shoot = on; my.event = glass_pieces; }

The action above will be attached to your window entity and it will make it transparent and sensitive to impact, shoot or other entities. When one of these events is detected, function glass_pieces will run:

function glass_pieces() {

Page 96: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

if (you == player) {player._health -= 20;} // decrease player's health if it breaks the window by passing through it my.passable = on; snd_play (breakglass_snd, 50, 0); my.skill10 = 0; my.invisible = on; while (my.skill10 < 15) { create (gibglass_mdl, my.pos, gib_glass); //kırık parça mdl dosyası animate var aum21 bak 2ci bi yöntemdaha var.

my.skill10 += 1; wait (1); } ent_remove (me); }

snd_tune (engine_handle, 25, 100, 0); // original frequency (100%)

aum21 tank var onda yumuşak düşüş mermi rocket ve yumaşak dönme var.

asker.pan+= ang(temp.pan-asker.pan)* time_step *0.2;

BONE

Bone Türkçede kemik anlamına gelmektedir. Yarattıgımız modelleri gerçek bir insan gibi kullanmak için bir çok yöntem vardır bunlardanda biri de modele kemik eklemektir. Kemigin birçok avantajı vardır bunlara deginirsek oyun zamanında kemiklere hitap ederek yönlendirme şansımızdır. Zira daha önceki örneklerimize bakarsanız hep modellerde hazır animasyonları kullanmıştık artık oyun zamanında real time modele hükmederek modelin istedigimiz bir uznunu kullanabilecegiz. Kemik oyun zamanında gözükmezler vede model tasarlarken sanki o kemigin etki edecegi yerleri ve şiddeti ayarlayarak model derisini gayet güzel şekilde hareket ettirtmekteyiz.

ent_bonemove

Page 97: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Ent_bonemove c_move gibi verdigimiz yöne boneyi hareket ettirmekte kullnıyoruz. Bone hareket ettirdigimizde ismini verdigimiz bone hareket ederken digerleri hareket etmemekte ve bu yüzden hareket edenle hareket etmeyen arasındaki deri sünmekte.

ent_bonemove(ENTITY*, STRING* name, VECTOR* offset)

ent_bonename

Sıra numarası verdigimiz bonenin bize gerçek ismini vermekte.

ent_bonename(ENTITY*,STRING*,var num)

Ör:

STRING* den;

ent_bonename(my,den,0);

error(den);

ent_bonereset

ent_bonereset(ENTITY*,STRING* name)

Đsmi verilen bonenin orijinal haline dönmesinde kullanılır.

ent_bonereset_branch(ENTITY*,STRING* name)

Branch ise çocuk alt dallarının da resetlenmesinde kullanılır.

ent_bonereset_all(ENTITY*)

Varlığa ait tüm boneleri resetler.

ent_bonerotate

Boneleri döndürmekte kullanıyoz. Verdigimiz bone isminden sonrakileride döndürür ve döndürmeye bonenin dügüm noktasını baz alarak onun etrafında döndürür.

ent_bonerotate(entity,string name,vector angle)

Page 98: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ent_bonerotate_parent

ent_bonerotate den farkı ent_bonerotate_parent boneyui döndürüken dügüm noktasından degilde bonenin gövdesini alarak döndürür bu yuzden kendi etrafında degilde yarı çapı bonenin gövde uzunluğu olan daire gibi döndürür.

ent_bonerotate_parent(entity,string name,vector angle)

ent_bones

Varlıktaki bone dügüm sayısını geri döndürmekte.

ent_bones (entity);

ent_bonescale

Bonenin büyüklügünü degiştirmekte kullanıyoruz bonenin büyüklügünü degiştirdigimizde haliyle dışındaki deride ona baglı olarak büyükmektedir.

Page 99: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

ent_bonescale(entity,string name,vector scale)

Vector scale sırasıyla x,y,z nin büyüklüklerine hitap etmektedir.

ang_for_bone

Đsmini verdigimiz bonenin açısal degerlerini pan tilt ve roll degerlerini sırasıyla ögrenmemizi saglamaktadır.

ang_for_bone(ANGLE*,ENTITY*,STRING*)

ANGLE degeri sırasıyla pan tilt ve roll degerlerini geri döndürmekte.

vec_for_bone

Bonenin dünya daki kordinatlarını ögrenmemize saglamaktadır.

vec_for_bone(VECTOR*,ENTITY*,STRING*)

Vector ismini verdigimiz bonenin dünya kordinatlarını geri döndürmekte.

Page 100: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

PARTĐCLE BAŞLAGIÇ

Particel diyince aklımıza ne gelmeli? Particel diyince aklıma gelmesi gereken ilk şey uçan küçük zerrecikler olmalı. Particel genellikle bu zerreciklerin birleşmesiyle meydana gelmektedir. Şöle nerelerde kullanabiliriz diye düşünürsek yagmur yapımında duman, ateş, füzenin kuyrugu, patlamalarda oluşan küçük zerrecilker vb. yerlerde 3d olarak kullanabiliriz. Şimdi bi particel oluşturmak için elimizde bu particeldan üretecemiz bir resim olması gerekli oluşturmak için mecbur tutulmamışsada güzel görünmesi için bu gerekli.

effect (function, var number, VECTOR* pos, VECTOR* vel);

function: Her framede (FPS) çagrılan fonksiyon.

Number: üretilecek partical sayısı.

Pos: üretilecek olan zerreciklerin posizyonları.

Vel: vectorel ilk hızları yada beam uzunlugu. (MOVE aktifse hızı beam aktifse boyu olmaktadır)

Şimdide bu fonksiyonun aldıgı parametrelere bakalım.

Lifespan : particelin yaşam süresi karesi belirler. Zerre girilen sayı kadar fps yaşayacak. Dikkat: çagrılan fonksiyon sürekli çagrıldıgı için azalttıkça yeniden atayacak lifespani

Page 101: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

buyüzden yaşam süresinin o fonksiyondan çıkılmalı bunun içinde çocuk fonksiyon çagırarak diyer function ile zerre yaşadıkça her fps tekrarlayacagından tekrar lifespan deger almayacak bu yöntem ile ilk çagrılan fonksiyon birden fazla çalışacak(1-10) ama diger fonksiyona geçince çalışmayı bırakcak ve bölelikle sürekli boşuna tekrarlanmaycak hız kanacaz.

vel_x: zerrenin hızı çabuklugu yada beam aktifse beam uzunlugu. (MOVE aktifse hızı beam aktifse boyu olmaktadır)

vel_y: zerrenin hızı çabuklugu yada beam aktifse beam uzunlugu. (MOVE aktifse hızı beam aktifse boyu olmaktadır)

vel_z: zerrenin hızı çabuklugu yada beam aktifse beam uzunlugu. (MOVE aktifse hızı beam aktifse boyu olmaktadır)

Page 102: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Gravity: particelin yer çekimini aktif etmek için kullanılır default olarak 0 dır hızını ayarlamaya yarar. vel_z degiştirerek ilerlemekte .Hareket etmesi için particelin Move aktifleyin.

Size: piksel yada siprite particelları boyutunu ayarlamak için kullanılır. Note: sonradan boyutlandırılan particiler çok yavaşlatmakta. Default olarak 4 tür.

Bmap: particelin resmini atamakta kullanılır.

Move: eger bu bayrak seçilmişse velocity(vel_x, vel_y, vel_z) vektör yönünde hareket yada gravity ile yarçekimi aktif olur böylelikle harekete geçer.

Function(c-script) event(lite-c): bu işlev particelin davranışlarını yani özelliklerini ayarlamakta kullanılır.

Beam: zerrelerin bir laser şeklinde velocity vektör yönünde oluşturulur bir düzene sokar

Streak: Beam benzemektedir beamdan hızlıdır ama bakış birazdaha farklıdır sanki hareket bulanıklıgı vermektedir vede başka kullanım yeride benzer patlamalarda vermelerde kullanılır.

Skills: 7 tane sikil vardır.

Red: particalda kırmızı rengin kuvveti.

Blue: particalda mavi rengin kuvveti.

Page 103: Ww W.Oyun Yapali.Co M Xfabs X Acknexturk.Co M

Gren: particalda yeşil rengin kuvveti. Bu renkler genellikle ortama gökyüzüne uygun hale getirmek için kullanılır.

Alpha: alpha transparancy miktarı.

Transparent, TRANSLUCENT: bu bayrak Transparent aktif pasifligini ayarlar.

Overlay: Bu bayrak açık ise bir resimdeki alpha kanalındaki rgb (0 0 0) olan renkleri yok etmekte ve siyahın tonajına göre denk gelen yerleri şefaflaştırmakta. Overlayı kullanabikmek için resim dosyanında bir alpha kanalı olmasi gerekmektedir.

Flare: Eger bir zerrenin perinin yada modelin TITREK-ĐŞĐK bayrağı, da koyulunur , varlık alfa saydamlığını varsayacak. Daha karanlık bölümler, daha parlak bölümlerden daha saydamdır. Bu yol patlamaları ışık etkileri yada kamera titrek ışıkları, üretilebilir. Eğer SAYDAM da ayarlanırsa aynı zamana , saydamlık tersine çevirilir i.e., daha parlak bölümler siyah duman için benzer, daha karanlık bölümlerden daha saydamdır. 16-dizgin yada 32-bit modlarında, ve sadece peri varlıkları için sadece valid. TITREK-ĐŞĐK bayrağı, varlığın ilk olarak eyleminin başlamasında açılmalı. Bütün varlıklar paylaşır aynı dosyasa sahip olmalı aynı alfasa saydamlığı. Eğer varlık dokusu bir alfa kanalını içerse , titrek ışık bayrağı varsayılan değer olarak bahse girilir.NOT:Flare c-script da vardir lite-c de yok.

BRIGHT: Arka palanle kendisini harmanlar vede işik kaynagı varsa ona duyarlı şekilde davranır alpha kanalıda varsa onuda şefaflaştırır siyahın tonuna görevede resimde de olan siyah yerleri şefaflaştırır. Her ikiyi karıştırmanın yerine arka plan üzerinde varlık yada zerre harmanlar, alfa kanal dokular yada saydamlığı ile birleşimde. Renkler ilave etmesi bu yol ve varlık, benzer yangın yada kıvılcımlar, aydınlatılan sanar. Varlık KARANLĐK ile birleşimde, düzeyde normal güneş ışığı ile diği gibi bir ortalama ortam ışığını alır. Bright kullanabikmek için resim dosyanında bir alpha kanalı olmasi gerekmektedir. Bright en büyük özelligi arka plana göre kendisini adepte etmesi sanki arkaplanla bütünleşiyor.

Fikret DURU

[email protected]

[email protected]

www.oyunyapali.com

www.acknexturk.com