내가 만들었지만 더럽게 재미없고 졸립다..

많이 수정해야 할 듯.



SiegeMode_Android.apk

SiegeMode_PC.zip

PC버전 특정 pc에서 소리가 안나는 버그가 있다.

Posted by RPG만들기XP
,

일단은 테스트 목적으로 양쪽 플레이어를 번갈아 컨트롤하게 해둬서 엄청 불편하다.

Posted by RPG만들기XP
,

(클릭하면 잘보임)

그리고 지금은 궁수를 만드는 중이다.

투사체는 타겟팅으로 날아가게 할 작정이다. 클로얄 스타일.

Posted by RPG만들기XP
,


설명은 나중에..

Posted by RPG만들기XP
,
void Unit::changeState
class Unit :
	public Sprite
{
public:
	bool			init();
	CREATE_FUNC(Unit);
	virtual void		update(float delta);

	void				changeState(UnitState* state);

	CC_SYNTHESIZE(UnitState*, _state, State);
private:
};

유닛 구조를 대충 잡고

class Swordman :
    public Unit
{
public:
    bool    init();
    CREATE_FUNC(Swordman);
};

유닛 종류를 하나 만들어 주었다.

bool Swordman::init()
{
    if (!Unit::init())
        return false;
    _attackSpeed = 1.f;
    _moveSpeed = 30.0;
    
    this->setUnitName("swordman");
    this->initWithFile("SpriteSource/swordman/swordman_walk_1.png");
    AnimationManager::getInstance()->addAnimation(_unitName, "walk", 0.1f,{
        "SpriteSource/swordman/swordman_walk_1.png",
        "SpriteSource/swordman/swordman_walk_2.png",
        "SpriteSource/swordman/swordman_walk_3.png",
        "SpriteSource/swordman/swordman_walk_4.png",
        "SpriteSource/swordman/swordman_walk_5.png",
        "SpriteSource/swordman/swordman_walk_6.png"});
    this->changeState(UnitState_Walk::create());
    return true;
}

추가한 유닛 종류에 대해 셋팅도 해주고
(AnimationManager 클래스도 구현했는데, addAnimation클래스는 이미 있는지 검사해서 없으면 검사하는 클래스. 게임 시작할 때 한 번만 호출되게 바꿀 예정)


class UnitState : public Node
{
public:
    virtual void StartState(Unit* unit) = 0;
    virtual void RunState(Unit* unit) = 0;
    virtual void EndState(Unit* unit) = 0;
};

상태에 대한 인터페이스도 정해주었다.

class UnitState_Walk : public UnitState
{
public:
    CREATE_FUNC(UnitState_Walk);
    bool init() { return true; }
    void StartState(Unit* unit);
    void RunState(Unit* unit);
    void EndState(Unit* unit);
};

void UnitState_Walk::StartState(Unit* unit)
{
    auto animation = AnimationManager::getInstance()->getAnimation(unit->getUnitName(), "walk");
    auto animate = Animate::create(animation);
    unit->runAction(RepeatForever::create(animate));

    auto moveAction = MoveBy::create(1.f, Vec2(-unit->getMoveSpeed()*3, 0));
    unit->runAction(RepeatForever::create(moveAction));
}

void UnitState_Walk::RunState(Unit* unit)
{
    if (unit->getPositionX() < 10)
    {
        unit->removeFromParentAndCleanup(true);
    }
}

void UnitState_Walk::EndState(Unit* unit)
{

}

state 인터페이스를 상속받아 걷는 상태를 구현하였다. 


bool BattleScene::onSprTouchBegan(Touch* touch, Event* event)
{
    auto target = event->getCurrentTarget();
    Point pos = target->convertToNodeSpace(touch->getLocation());
    Rect rect = Rect(0, 100, target->getContentSize().width, 320);
    if (rect.containsPoint(pos))
    {
        auto swordman = Swordman::create();
        swordman->setPosition(pos);
        this->addChild(swordman,2);
        swordman->scheduleUpdate();
    }
    return false;
}

그 다음 클릭할 때마다 생성되게 해놓으면

autorelease pool도 잘 작동하고 있는 것을 볼 수 있다.

처음에는 std::unordered_map으로 짰다가 바로 버그를 여러개 만들었는데, cocos2d::Map으로 바꿔서 간단하게 해결하였다.

역시 엔진에서 정해놓은 대로 쓰는 것이 맘 편한 듯..


상태 머신을 처음으로 구현해본데다, 그냥 느낌 가는대로 만들어서 이렇게 만들어도 되는 것인지 잘 모르겠다.

기능 하나씩 추가하다 보면 분명 문제가 생기지 않을까?

그러면 그때 또 해결하는 것이 공부가 되겠지~

Posted by RPG만들기XP
,



3시간 걸려서 만들었다 ㅠㅠ...

느낌 괜찮은가..

내가 만들어 놓으니 내 눈에는 이쁘다.

이 느낌으로 가도 될런지...

Posted by RPG만들기XP
,

지금까지의 기획을 SiegeMode! PC버전으로 빼두고(언젠가 만들 날이 올 거라 믿으며...),

모바일 버전은 전쟁시대나 팔라독 느낌의 사이드뷰로 만드는 것이 최적일 것 같다.

조작문제(가장 크다), 화면크기 문제가 생각보다 중요하다는 것을 느낀다.

전쟁시대

팔라독




후딱 새로 기획서 써야지..

Posted by RPG만들기XP
,

Fortress under Siege 라는 게임(모바일임)과 거의 비슷한 느낌의 모바일 게임을 만들려고 함. - 영상보기(영상 잘못돼서 다시 링크함)

근데 이 게임은 디펜스 게임이고, 나는 공격과 수비 다 플레이할 수 있게 만들고 싶음.

어떤 느낌이냐면 Stronghold라는 게임 느낌. - 영상보기(중반부터 전투나옴)


게임 이름 : SiegeMode!


고민해야 할 문제

  1. 성을 함락시키다(혹은 지켜내다)의 조건은 어떻게 하는 것이 좋을까?

    1. 농성전(굶기기) - 안넣는다.(일단은)

      1. 백성이 피해를 입는다.

      2. 포위한 뒤 굶기는 요소를 꼭 넣고 싶지만, 인게임을 만든 다음에 토탈워 느낌의 캠페인맵에서 압박하는 식으로 넣는 것이 좋을 것 같다.

    2. 왕 스트레스

      1. 미나스티리스(반지의제왕) 공성전처럼.

      2. 왕타워가 가장 안쪽에 있다.

      3. 왕 스트레스 수치가 얼마 이상 올라가면 왕이 투신자살한다.

    3. 왕을 죽인다

      1. 왕을 죽이면 투항하는게 맞지 않을까?

      2. 왕이 죽어도 충성도가 높은 병사들은 투항하지 않게?

    4. 몰살 조건(전멸)

      1. 성 안의 모든 사람을 죽인다.

        1. 모든사람보다는 “저항하는 사람”

        2. 저항하지않는 민간인은 추후 나의 자원이 될수도있으니까

        3. 항복한 병사들 가운데서도 아군으로 만들수있다면...

      2. 성 안의 모든 건물을 파괴한다.

        1. 이건 별로다

        2. 점령과정중에 부수적인 피해. 어차피 점령하면내껀데

    5. 점령느낌

      1. 성의 가장 안쪽에 나의 깃발을 게양한다.

      2. 성의 특별 장소에서 특정 시간 이상 버티면 점령한다.

    6. 부족전쟁 느낌

      1. 일반 병력으로는 상대의 병력을 무력화 할 수 있지만, 점령은 못한다.

      2. 귀족으로 공격하면 상대 성의 충성도가 낮아진다.(귀족의 스탯은 낮음)

  2. 시점 문제

    1. Isometric

      1. 구현이 복잡하다.

      2. 리소스를 만들고 구하기가 쉽지 않다.

      3. 3D게임만큼은 아니지만, 입체감이 있고 보기에 좋다.

    2. Orthogonal

      1. 구현이 비교적 단순하다.

      2. 리소스를 만들기도 쉽다.

      3. isometric에 비해 보기에 좋지 않다.

    3. iso로 만들 수밖에 없다!

    4. 겹치는 부분은?

      1. 덮고 투명도 처리가 가장 일반적.

  3. 자원으로서의 민간인, 적으로서의 민간인

    1. 민간인 학살은 공격측에게 쾌감을 제공하는가?

    2. 민간인을 “지켜야 하는 소중한 대상”으로 설정하는 것을 방어측의 동기부여, 자원 개념으로 사용할 수 있는가?



확정 사항만 다시 적어보자.

(1차 목표 버전의 기획)


  1. 건물을 마음대로 짓고, 배치할 수 있다.

    1. 해자(공격측에서는 흙으로 메울 수도 있다.)

    2. 성벽(공격 측에서는 사다리로 타고 오를 수 있다. 사거리 가중치 방어율증가)

    3. 성문(부술 수 있다.보수할수있다.)

    4. 건물에 층 개념은 없다.

    5. 화살 타워(화살을 발사한다.)

  2. 유닛을 실시간으로 조작할 수 있다.

    1. 유닛을 클릭해서 선택, 목표 대상을 클릭해서 액션을 기본 조작법으로 한다.

    2. 하나의 유닛은 한 분대 규모를 기본으로 한다.
      (토탈워, 워해머4K 던오브워와 같다.)

    3. 네 방향 모두 움직일 수 있지만, 스프라이트는 양옆 스프라이트만 사용한다.

  3. 카메라를 실시간으로 조작할 수 있다.

    1. 뷰는 isometric(탑뷰)

    2. 드래그 해서 화면 슬라이드, 두 손가락으로 줌인, 줌아웃이 가능하다.

  4. 전투는 실시간을 기본으로 한다.

    1. /*공격 목표를 향해 걸어가다가, 공격은 유행하는(사실 내가 좋아하는) 통통이 느낌의 전투로 한다.


    2. ㄴ 통통이 느낌.

    3. https://youtu.be/dcIIMd4e0qQ
      ㄴ 이것도 통통이 느낌*/

    4. 통통이는 일단 보류하고, 평범한 RTS 스타일의 전투 버전으로 만든 후에 생각한다.

  5. 일단은 AI나 네트워크 대전은 생각하지 말고 플레이 가능한 버전을 만든다.

  6. 유닛 스탯

    1. 체력

    2. 공격력

    3. 이동 속도

    4. 사정거리

    5. 공격 속도

    6. 방어력은 없다

  7. 1차로 만들 유닛과 건물

    1. 건물

      1. 그냥 성벽(유닛이 올라갈 수 있다.)

      2. 성문(파괴 가능. 열면 유닛이 지나갈 수 있다.)

      3. 해자(메우거나 다리를 놓기 전에는 건너갈 수 없다.)

    2. 유닛

      1. 투창병

        1. 이동속도가 빠르고 체력이 적다.

        2. 투창 3~4자루를 소지하고 있으며, 선두에서 가지고 있는 투창을 다 던진 후 중보병들에게 자리를 내어주고 뒤로 빠진다.

        3. 전열 뒤에 투창을 재충전 할 수 있는 방법을 만들어 둔다.

      2. 중보병

        1. 스쿠툼(로마방패)과 글라디우스(로마단검)를 들고 싸운다.

        2. 필룸(대형 투창)을 한 발 장착할 수 있다.

      3. 궁병

        1. 화살을 쏜다.

      4. 발리스타

        1. 설치해야 공격 가능. 궁병보다 사거리가 길고 강력하다.

        2. 아주 천천히 이동할 수 있다.

      5. 사다리

        1. 성벽을 오르는 데에 사용한다.

  8. 나중에 만들 유닛과 건물

    1. 공성탑

    2. 충차(ram)






목표로 할 버전의 기능

  1. 전투 시작 전 준비 기능

    1. 건물을 짓는다.

      1. 해자도 팔 수 있다.

    2. 유닛을 배치한다.

    3. 해자를 판다.

  2. 전투 기능

    1. 유닛을 선택해서 이동, 공격할 수 있다.

    2. 일단 부대단위 전투로 해보자. (토탈워의 부대단위 유닛이나, 워해머4K 던오브워의 분대단위 유닛처럼)

일단 여기까지 구현한다.


이정도면 일단 코딩 들어갈 수는 있겠다.


Posted by RPG만들기XP
,

2D게임은 성벽 뒤 같은 곳에 유닛이 가려지면 보이지 않는다.

이 문제를 어떻게 해결했는지 보고자 stronghold라는 게임을 구매해서 플레이해 보았다.


성벽 뒤에 유닛을 이동시키니, 역시 가려진다.



이 문제를 stronghold는 2가지 방법으로 해결했는데, 다음과 같다.


평면 보기 모드를 선택하면 높낮이를 무시하고 전부 평면으로 보인다.

성벽 뒤에 가려져 있던 유닛까지 보임.

플레이하면서 깜짝 놀랐던 부분인데, 마치 롤러코스터 타이쿤 1,2처럼 카메라를 네 방향으로 돌릴 수 있다.(이 스크린샷의 좌상단쪽이 위 두장 스크린샷의 좌하단쪽임.)

하지만 조작도 불편하고, 실 플레이에 별 도움이 안된다고 느꼈다...




어떻게 해결해야할까 !!!


Posted by RPG만들기XP
,

C++ 공부를 위해 진행하는 프로젝트니까, 기획이고 뭐고 필요 없고 자꾸 코딩부터 하려고 해 보니까 결국은 지금처럼 다 갈아엎게 되었다.

내일중으로 구조설계까지 꼭 끝내야지.

그리고 내일모레부터는 C++ 연습 프로젝트답게 코딩코딩코딩좀 하고 싶다.

'개발일지 > SiegeMode!' 카테고리의 다른 글

SiegeMode! 1차 기획 완료  (1) 2016.04.09
Stronghold를 플레이 해보았다.  (0) 2016.04.09
1차 기획 과정  (0) 2016.04.08
계획을 세우자  (0) 2016.04.04
문제해결 - cocos2d-x 스프라이트 외곽선 넣기  (0) 2016.04.04
Posted by RPG만들기XP
,