demo cua FaIRYTale

Thảo luận trong 'Demo - Project' bắt đầu bởi zubachi, 26/2/05.

  1. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    Phiên bản đầu tiên, mong bà con đừng chê quá. Tạm thời phần xử lý tìm đường của máy còn chậm dưới mức cho phép đối với một game real-time. Bachi đang cải tiến vấn đề.

    Điều khiển :
    Mũi tên - di chuyển
    Ctrl - Chém (trong lúc giữ Ctrl, bấm các nút mũi tên để đổi hướng chém).

    Ý tưởng của bachi là pha trộn loạn xạ giữa Zelda, Diablo, và RPG cổ điển. Bachi xin cảm ơn các ý kiến bổ sung.
     

    Các file đính kèm:

  2. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    cho hỏi tí sư huynh, 1 event đang di chuyển, ví dụ là mon, nếu đụng phải mình thì xuất hiện 1 trận đánh,<--- làm seo vậy chỉ dùm thanks nhìu nhìu
     
  3. buno

    buno Legend of Zelda

    Tham gia ngày:
    13/7/04
    Bài viết:
    996
    tui thấy phiên bản của ông hay đấy chứ...ông ráng phát triển cho nó đỉnh luôn nhé...cái demo tui chơi có cảm giác giống warcraft...:D:D
     
  4. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    TO Vo_Dich:
    Một nhân vật (player hoặc monster) có một biến xác nhận event. Bachi đặt là behavior. Sẽ có 2 function điều khiển hoạt động nhân vật.

    behavior gồm : BE_STAND, BE_MOVE (left, right, ...), BE_ATTACK, BE_DIE

    Function thứ nhất là Control_Character. Function này sẽ phân làm 2 phần đối với player và monster, và sẽ phân nữa trong trường hợp điều khiển NPC hoặc follower. Function này sẽ chuyển đổi giá trị behavior cho các nhân vật.

    Function thứ hai là Animate_Character. Function này chỉ có 1 phần. Nó sẽ kiểm tra giá trị của các trường hợp behavior để điều khiển nhân vật.

    Source của Control_Character: (Tất nhiên đố ai mà hiểu hết trong cái đám loạn xạ này, nhưng nắm ý chính của nó là được rồi).
    //test input to control player character
    void CCharacterManager::ControlPlayer() {
    if ((player->bDie) | (player->bAnimBehavior == ANI_DIE)) return;

    d = 0;
    if (iInput::GetKeyState(HGEK_UP)) d += 1;
    if (iInput::GetKeyState(HGEK_DOWN)) d += 18;
    if (iInput::GetKeyState(HGEK_RIGHT)) d += 9;
    if (iInput::GetKeyState(HGEK_LEFT)) d += 36;

    switch (d) {
    case 1:
    d = DIR_N;
    break;
    case 9:
    d = DIR_E;
    break;
    case 18:
    d = DIR_S;
    break;
    case 36:
    d = DIR_W;
    break;
    case 10:
    d = DIR_NE;
    break;
    case 27:
    d = DIR_SE;
    break;
    case 54:
    d = DIR_SW;
    break;
    case 37:
    d = DIR_NW;
    break;
    default:
    d = 255;
    break;
    }

    bool temp = true;

    if (iInput::GetKeyState(HGEK_CTRL)) {
    if ((d < 8) && (player->bAnimBehavior != ANI_ATTACK)) player->bCurrentDir = d;
    if ((player->bAnimBehavior == ANI_STAND) | ((player->bAnimBehavior == ANI_WALK) && (player->fDimX == player->fDestX) && (player->fDimY == player->fDestY))) {
    temp = false;
    player->SetBehavior(ANI_ATTACK);
    }
    }

    if (player->bAnimBehavior == ANI_ATTACK) temp = false;

    if (temp) {
    if (d < 8) {
    MovePlayer(d);
    }
    else {
    if ((player->bAnimBehavior != ANI_STAND) && (player->fDimX == player->fDestX) && (player->fDimY == player->fDestY)) {
    player->SetBehavior(ANI_STAND);
    }
    }
    }
    }

    //AI control monsters
    void CCharacterManager::ControlMonsters() {
    int i;
    BYTE b1, b2;

    FindWaypoint(monster[queue]);
    queue++;
    if (queue == iMonsterCount) queue = 0;

    for (i = 0; i < iMonsterCount; i++) {
    if ((!monster->bDie) && (monster->bAnimBehavior != ANI_DIE)) {
    b1 = b2 = 2;
    if (monster->iCellX < player->iCellX) b1 = 1;
    if (monster->iCellX > player->iCellX) b1 = 0;
    if (monster->iCellY < player->iCellY) b2 = 1;
    if (monster->iCellY > player->iCellY) b2 = 0;
    d = bDirConv[b1][b2];

    if (d < 255) {
    x1 = monster->iCellX + iDirDX[d];
    y1 = monster->iCellY + iDirDY[d];
    if ((x1 >= 0) && (x1 < pTileMap->iMapWidth) && (y1 >= 0) && (y1 < pTileMap->iMapHeight)) {
    if ((!player->bDie) && (bOccupacy[x1][y1] == 1)) { //player in attack range
    if ((d < 8) && (monster->bAnimBehavior != ANI_ATTACK)) monster->bCurrentDir = d;
    if ((monster->bAnimBehavior == ANI_STAND) | ((monster->bAnimBehavior == ANI_WALK) && (monster->fDimX == monster->fDestX) && (monster->fDimY == monster->fDestY))) {
    monster->SetBehavior(ANI_ATTACK);
    return;
    }
    }
    }

    if (monster->pWaypoint->size) {
    b1 = b2 = 2;
    if (monster->iCellX < monster->pWaypoint->head->data->x) b1 = 1;
    if (monster[i]->iCellX > monster[i]->pWaypoint->head->data->x) b1 = 0;
    if (monster[i]->iCellY < monster[i]->pWaypoint->head->data->y) b2 = 1;
    if (monster[i]->iCellY > monster[i]->pWaypoint->head->data->y) b2 = 0;
    d = bDirConv[b1][b2];
    monster[i]->pWaypoint->Delete();
    MoveCharacter(monster[i], d, i + 2);
    }
    }
    }
    }
    }

    Source của animate:
    //Animate a character c
    void CCharacterManager::AnimateCharacter(CCharacter *c) {
    if (!c->bDie) {
    if (c->bAnimBehavior == ANI_WALK) {
    c->NextFrame();
    if (c->fDimX < c->fDestX) {
    c->fDimX += c->fMoveRate;
    if (c->fDimX > c->fDestX) c->fDimX = c->fDestX;
    }
    else if (c->fDimX > c->fDestX) {
    c->fDimX -= c->fMoveRate;
    if (c->fDimX < c->fDestX) c->fDimX = c->fDestX;
    }

    if (c->fDimY < c->fDestY) {
    c->fDimY += c->fMoveRate;
    if (c->fDimY > c->fDestY) c->fDimY = c->fDestY;
    }
    else if (c->fDimY > c->fDestY) {
    c->fDimY -= c->fMoveRate;
    if (c->fDimY < c->fDestY) c->fDimY = c->fDestY;
    }
    }
    else if (c->bAnimBehavior == ANI_ATTACK) {
    if (!(c->iAnimFrame | c->iAnimCounter)) {
    iEffect::Play(c->cType->sound);
    }
    c->NextFrame();
    if (!(c->iAnimFrame | c->iAnimCounter)) {
    c->SetBehavior(ANI_STAND);
    x1 = c->iCellX + iDirDX[c->bCurrentDir];
    y1 = c->iCellY + iDirDY[c->bCurrentDir];
    if ((x1 >= 0) && (x1 < pTileMap->iMapWidth) && (y1 >= 0) && (y1 < pTileMap->iMapHeight)) {
    if (c == player) {
    if (bOccupacy[x1][y1] > 1) { //hit a monster
    i = bOccupacy[x1][y1] - 2;
    if ((!monster[i]->bDie) && (monster[i]->bAnimBehavior != ANI_DIE)) {
    //test "real" position of the monster (because
    //when moving, the position of the monster is
    //set to an "unactual" one.
    x1 = (int) (monster[i]->fDimX / HALF_TILE_WIDTH) >> 1;
    y1 = (int) (monster[i]->fDimY / HALF_TILE_HEIGHT) >> 1;
    if ((x1 == monster[i]->iCellX) && (y1 == monster[i]->iCellY)) {
    monster[i]->iHitPoint -= player->cType->iDamage; //damage the monster
    if (monster[i]->iHitPoint <= 0) monster[i]->SetBehavior(ANI_DIE);
    }
    }
    }
    }
    else {
    if (bOccupacy[x1][y1] == 1) { //hit the player
    if ((!player->bDie) && (player->bAnimBehavior != ANI_DIE)) {
    //test "real" position of the player (because
    //when moving, the position of the player is
    //set to an "unactual" one.
    x1 = (int) (player->fDimX / HALF_TILE_WIDTH) >> 1;
    y1 = (int) (player->fDimY / HALF_TILE_HEIGHT) >> 1;
    if ((x1 == player->iCellX) && (y1 == player->iCellY)) {
    player->iHitPoint -= monster[i]->cType->iDamage; //damage the player
    if (player->iHitPoint <= 0) player->SetBehavior(ANI_DIE);
    }
    }
    }
    }
    }
    }
    }
    else if (c->bAnimBehavior == ANI_STAND) {
    c->NextFrame();
    }
    else if (c->bAnimBehavior == ANI_DIE) {
    if (!(c->iAnimFrame | c->iAnimCounter)) iEffect::Play(c->cType->sound2);
    c->NextFrame();
    if (c->iAnimFrame == c->cType->iFrameCount[ANI_DIE] - 1) {
    bOccupacy[c->iCellX][c->iCellY] = 0;
    c->bRenderPriority = RENDER_LOW;
    c->bDie = true;
    c->fDimX += iUtils::Rnd(-4, 4);
    c->fDimY += iUtils::Rnd(-4, 4);
    }
    }
    }
    }[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
     
  5. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    TO buno:
    Cảm ơn sự ủng hộ. Bachi sẽ phát triển phần tìm đường của mấy thằng quái vật. Bachi đã nghĩ ra cách, nhưng cần thời gian.

    Hình ảnh rip từ RPG maker XP và Warcraft II. Demo thì rip vậy thôi chứ bản chính thức sẽ không. ;;)
     
  6. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    ông lấy sprite từ free craft phải ko, cảm ơn đã share source, đâu như mấy người khác, cũng toàn kiếm thui chứ có tự viết đâu, kêu share 1 tí cũng ko, đến cái screenshoot battlesystem cũng ko cho xem, hic, hic, zubachi coi dùm tui cái nì, demo thui, coi thử battlesystem ổn chưa thanks.
    http://zeroonea.freestarthost.com/CBS.rar
     
  7. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    :D không download được, chắc nhầm link hoặc die rồi.

    Bachi không biết nhiều về RGSS trong cái RPG maker XP. Nếu bạn hỏi về cái này là bachi chịu thua.

    Source của bachi là 100% tự chế, tự nghĩ. Không phải "hàng" copy. Tất nhiên vì code tự nghĩ ra nên có những chỗ "ngu" đột xuất, bachi đang cải thiện lại.

    Phần tìm đường đi là phần khó khăn nhất đối với thể loại game kiểu này. Vì là tìm đường realtime. Hiện tại bachi đang cố áp dụng thêm kỹ thuật Light-Of-Sight, nhưng gặp một số khó khăn do các đối tượng chạy nhảy nhiều quá (được cái này mất cái kia, chẳng biết làm thế nào :p , không khéo bỏ luôn cái vụ tìm đường thông minh).

    Nói thêm: Hình rip bằng Wardraft. Hiện tại Freecraft đang bị Blizzard kiện nên trang chính bị die. Bachi rất muốn xem qua mã nguồn của nó. Ai có hảo tâm xin cho bachi link.
     
  8. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    mình ko nói zubachi copy, mình nói mấy nhóm khác cơ
     
  9. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
  10. ken10

    ken10 Programmer

    Tham gia ngày:
    10/1/04
    Bài viết:
    2,341
    Nơi ở:
    Ho Chi Minh city
    :) Zubachi cũng hỗ trợ cho VM .Nên data của VM tui khổng thể tiếc lộ được .Đâu ông thông cảm , vì mai mốt còn đem đi đăng ký bản quyền mà...

    -Không không có chôm đào đâu đâu mà ông nói không tự viết .....

    _Vô địch ...ông cho tui xin các Y!M cái , (PM nhắn tin á) Tui muốn mời ông vào VM.... :)
     
  11. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
  12. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    @ken10 tui dốt lắm, ko bít gì đâu đừng mời, với lại mới từ box muonline wa đây, đang hoàn thiện trang hack nên ko ở ko.
     
  13. SVS

    SVS Mario & Luigi

    Tham gia ngày:
    27/6/03
    Bài viết:
    899
    Nơi ở:
    Graveyard of rusted uses
    Chà! Đã ra được Demo rồi hả đại ca Zubachi! Công nhận là đại ca giỏi thiệt. Hình như có mỗi mình đại ca làm thì phải? Về test thôi!
     
  14. doiloithoi

    doiloithoi Youtube Master Race

    Tham gia ngày:
    14/2/05
    Bài viết:
    44
    Uhm .. cái đó hay thiệt đó , huynh làm thế nào vậy Zubachi , có phải huynh dùng script ABS ko ?
     
  15. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    Bachi không dùng RPG maker XP. Hiện tại đang bí ở chỗ dò đường đi đó. Bachi đang đọc thêm một số tài liệu, hy vọng sẽ giải quyết được vấn đề theo hướng tốt nhất.

    Chương trình được làm bằng Visual C++ 6.0, công cụ hỗ trợ (vẽ map) được làm bằng Visual Basic 6. Engine đồ họa và âm thanh là HGE (hge.relishgames.com). Hình ảnh mượn đỡ từ Warcraft 2 và RPG maker XP.

    Demo này chỉ làm ra cho vui chứ không phải đề án hiện tại của FaIRYTale. Hiện tại FaIRYTale đang thiết kế lại đề án đã lập (thiết kế là một quá trình khó, ngay như StarCraft cũng phải thiết kế đi thiết kế lại mấy lượt, cho vô sọt rác bao nhiêu cái demo mới ra cái StarCraft nổi tiếng ngày nay).
     
  16. Alone Beast

    Alone Beast C O N T R A

    Tham gia ngày:
    14/1/04
    Bài viết:
    1,607
    Nơi ở:
    ...
    Đại ca Zubachi này , có phải đại ca vẽ map bằng cái map editor mà đại ca làm hồi trước ko ? Trông y hệt như rpg maker xp luôn ==> bái phục . Vậy đại ca có thể fix câu lệnh và chức năng của rpg maker xp ko ?
     
  17. >VoDich<

    >VoDich< Legend of Zelda

    Tham gia ngày:
    26/1/05
    Bài viết:
    919
    Nơi ở:
    Can Tho
    mới vọc cái RPGXP rùi làm ra cái nì, ai muốn thư gĩan down về chơi thử, nói trước có 1 bí mật nhỏ nhỏ, đảm bảo ko phí thời gian đâu, chơi thử rùi bít hi hi hi hi he he he he ke ke ke ke ac ac ac ac it it it it toi... rùi
    ai tìm ra được bí mật thì có thưởng, coi như là phần giải trí cho nhóm của mấy ông, ko cho chơi ăn gian nhé,
    à cảm ơn ông zubachi lắm lắm, cái link warcraft III viewer đó, hic, trước nay có bít có CT này đâu, ngồi chụp lại mấy ảnh trong war mệt wá chừng lun, cảm ơn nhìu nhé, với lại ông còn bít ct nào tương tự vậy nhưng xài cho Sc hay AoeII thì cho tui xin link lun nha
     
  18. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    RPG maker XP, mặc dù có nhiều điểm bất cập đến dễ sùng, nhưng nó vẫn là một công cụ rất linh hoạt. Giống như Game Maker hay các công cụ khác (Torque 2D, v.v...), nó cung cấp một cái khung sườn (frame work), và người làm game chỉ việc script chức năng.

    Phần khung sườn của RPG maker XP không thể thay đổi được, nhưng phần chức năng thì có thể. Tất cả nằm trong script của nó. Phần event nằm trong class Game_Interpreter và Game_BattleInterpreter.

    Bachi đang có kế hoạch làm một RAD như thế, nhưng ở mức độ thấp hơn Thấp hơn không phải là kém hơn, mà là phần frame work sẽ được lập trình sẵn, còn phần engine thì người làm game tự lập trình lấy. Những phần khó khăn nhưng dùng đi dùng lại ở rất nhiều game như là hiển thị map, A* v.v... sẽ được lập trình sẵn trong một bộ library. Người lập trình chỉ việc tính đến game logic. Và tất nhiên, bachi sẽ có thiết kế sao cho frame work của cái RAD có thể adjust theo ý muốn của người lập trình, hay ít ra nó cũng đạt được sự linh động. Tất cả là một tương lai phía trước của FaIRYTale.

    Hiện tại bachi đang chuẩn bị lập trình một engine đồ họa của riêng mình để có được những chức năng cần thiết mà engine HGE chưa có sự đáp ứng.
     
  19. ken10

    ken10 Programmer

    Tham gia ngày:
    10/1/04
    Bài viết:
    2,341
    Nơi ở:
    Ho Chi Minh city
    @Vo Dich : demo game của ông cũng hay , nhưng hông có bán Mp và bình life bới dậy là chết lun .Mà mỗi lần danh ma` cho co' 8 EXP , đánh hard cho co 6 EXp (ác wá )....
     
  20. zubachi

    zubachi Donkey Kong

    Tham gia ngày:
    5/11/04
    Bài viết:
    301
    Nơi ở:
    Tây phương
    không biết có nên post phần thưởng lên đây không ? Lần sau cố gắng kiếm cái phần thưởng nào hấp dẫn hơn nhé :D . Mà ông vodich học được đâu lời lẽ ngọt ngào quá chừng ?
     

Chia sẻ trang này