Tuesday, October 27, 2009

Battle System 02


Tahapan selanjutnya yang telah dibuat adalah:

+ memberikan dialog UI untuk menunjukkan statistik dari pemain.

+ dialog UI untuk melakukan attack/defense/escape dari pertarungan.

+ schedule sistem utk mengecek status kemenangan dari pemain.

+ penambahan experience dan level dari pemain.

+ world yang lebih baik.

+ karakter pemain dan musuh yang lebih baik (mempergunakan art dari cubeecraft.com).

+ animasi menyerang dari karakter pemain dan musuh.

Friday, October 23, 2009

Battle System 01


Saya akan mengambil sistem pertarungan ala RPG klasik pada umumnya. Pemain akan berhadapan dengan musuh dimana bisa terdiri dari 1-3 musuh saja. Berikut adalah mekanisme untuk pertarungan:

1. Untuk penentuan siapa yang akan melakukan serangan terlebih dahulu dilakukan dengan sistem random, dengan tujuan praktikan akan dapat mengetahui penggunaan random pada torquescript.
2. Musuh akan di-spawn pada lokasi spawn point yang telah ditentukan.
3. Hero akan di-spawn pada lokasi spawn point yang telah ditentukan.
4. Untuk spawn point musuh dilakukan mekanisme khusus dengan pemberian flag agar musuh tidak di-spawn pada posisi yang sama (bertumpuk).
5. Untuk penentuan hit damage dilakukan secara sederhana yaitu dengan mengurangi nilai attack dari hero dengan nilai defense dari musuh.
6. Untuk penentuan hit/miss dilakukan dengan sederhana yaitu dengan melakukan random antara nilai 0 atau 1. Belum dilakukan prosentasi kemungkinan miss dengan nilai agility.

Masalah yang masih dihadapi:
> scheduling untuk penentuan hit belum dilakukan. sehingga masih dilakukan manual dengan script melalui console.
> arah hadap musuh dan hero yang belum tepat.
> penentuan langkah selanjutnya bila musuh atau hero kalah.
> kemampuan untuk escape/lari dari battle.

Wednesday, October 21, 2009

Membuat demo RPG games dengan TGE

Posting dlm bahasa indonesia aja ah.. kebetulan saya sedang diminta membantu salah satu jurusan di universitas untuk membuat materi praktikum pengembangan games. Maka diputuskan pada rapat bahwa untuk praktikum menggunakan TGE sebagai game engine yang akan dipelajari. Dan terlihat dari antusiasme sang pimpinan bahwa dia suka games yang ber-genre RPG, maka ya sekalian saja coba-coba buat demo RPG sekalian untuk materi praktikum nanti.

Karena cukup banyak maka saya bagi menjadi beberapa lapisan yang akan coba saya buat secara sederhana saja.. krn ya utk membuat sebuah game bukan "one man show" saja. Jadi ya kira-kira ini yang akan dibahas pada praktikum nanti:
1. BIG Map -> RPG World
2. City/dungeon -> sub RPG World
3. Battle System
4. Inventory System
5. Story and RPG Dialog

Yah sepertinya itu dulu untuk materi praktikum, itupun sudah sangat padat sepertinya apalagi bagi praktikan yang belum pernah menggunakan TGE sebelumnya.

Jadi posting2 selanjutnya akan coba saya bahas mengenai kemajuan dari masing2 subsistem ini. :)

Tuesday, March 17, 2009

My 5'th resource @ Garagegames "3D Arrow aiming to objective target"


This resource will give you a 3D arrow (or any object you like) aiming to the target object you want.

This is the preview of how this works.


you can download it here www.geocities.com/herrudarmadi/3darrow.zip
place it on data/shapes/direction/arrow.dts

first add this to your server/game.cs

$aimTarget = 0;

function GameConnection::AimTarget( %this )
{
if($aimTarget)
{
%player = %this.player;
%target = $aimTarget;

%playerTrans = (%player.getTransform());
%xPlayer = getWord(%playerTrans, 0);
%yPlayer = getWord(%playerTrans, 1);
%zRot = getWord(%playerTrans, 5);
%playerRot = getWord(%playerTrans, 6);

%targetPosition = (%target.getPosition());
%xTarget = getWord(%targetPosition, 0);
%yTarget = getWord(%targetPosition, 1);

%xDiff = %xTarget - %xPlayer;
%yDiff = %yTarget - %yPlayer;

// dont have to change it to degrees
// torque engine automatically change it to degrees
%rotToTarget = mAtan(%xDiff, %yDiff);

if(%zRot < 0)
%playerRot = (2 * 22/7) - %playerRot;

// multiply by -1 because the rotation in 3dspace is
// oppositing the guiobjectview rotation
%rotation = -1 * (%rotToTarget - %playerRot);

commandToClient(%this, 'SetDirection', %rotation);
}
%this.schedule(100, AimTarget);
}

on the client/ui/playgui.gui add

new GuiObjectView(direction) {
canSaveDynamicFields = "0";
Profile = "GuiDefaultProfile";
HorizSizing = "center";
VertSizing = "bottom";
position = "244 94";
Extent = "149 149";
MinExtent = "8 2";
canSave = "1";
Visible = "1";
hovertime = "1000";
applyFilterToChildren = "1";
cameraZRot = "0";
forceFOV = "0";
lightDirection = "-0.57735 -0.57735 -0.57735";
lightColor = "0.6 0.58 0.5 1";
ambientColor = "0.3 0.3 0.3 1";
emapAmount = "1";
};


and on the client/playgui.cs add

function PlayGui::onWake(%this)
{
// Turn off any shell sounds...
// alxStop( ... );
$enableDirectInput = "1";
activateDirectInput();
direction.setObject("gb","mod/data/shapes/direction/arrow.dts","","");

// Activate the game's action map
moveMap.push();
}

function clientCmdSetDirection(%rotation)
{
direction.setRotation(0, %rotation );
}

how to use it ?

just set the $aimTarget to any object id in your mission.
then call the gameConnection method aimTarget().

that's it, hope this resource usefull. cheers!