go4game의 게임 규칙
By SeukWon Kang
AI 만이 아니고 게임을 구성하기 위해선 게임의 룰도 정리되어야 하기에 적어봅니다. ( 아주 사무적인 문서라 말이 짧습니다. ^^;; _
설명:업데이트된 게임 상태창.
설명:새로 추가된 AICloud의 동작모습
한개의 gameservice 에는 실제 team간 interactaction 이 발생하는 여러개의 World 가 존재
각각의 world에는 team들이 소속 team은 tcp client , websocket client , ai client 가 존재 world는 60 frame / sec 로 각 팀에게 frame action을 요청 각 팀의 frame action은 goroutine을 사용 concurrent 하게 진행. data racing을 방지하기 위해 각 frame 시작시 world data serialize 와 spatialpartition data를 생성 serialize data는 tcp/websocket client 에게 전달용 , spatial partition data는 AI client용 각 client 들은 이 복사된 data를 기반으로 action을 선택 서버에 전달 서버는 client action과 timely action, collision check를 진행 - 자신의 실 data 수정
game world는 3d space로 좌표 (-500,-500,-500) ~ ( 500,500,500) 의 1000^3 공간 , 실수 좌표계
팀은 client와 연결점(conninfo) 을 가지고 통신을 하며 이와 별개로 gameobject들을 소유 이중 mainobj가 각 팀의 주인공(actor)이고 팀당 하나만 존재 가능 나머지는 mainobject가 만들어낸 shield, bullet들 client는 mainobject만 제어 가능 mainobject가 할수 있는 행동은 5가지 accel , bullet , superbullet, hommingbullet , burstshot accel을 mainobject의 accel vector를 지정(위치나 이동 vector가 아니고 ) 나머지는 지정된 탄환을 발사 모든 action에는 actionpoint(AP)가 소비되며 AP는 매 프레임마다 서버가 팀에 추가 해줌 즉 모아서 큰 AP 소모 action을 하는 것이 가능 client가 Action을 하려고 해도 AP가 부족하면 서버가 거부
AP를 팀에 제공하는 룰은 팀별 home position 으로 부터의 거리가 가까울수록 많이 제공. (원래는 (0,0,0) 이었는데 게임의 재미를 위해 팀별로 다르게 만듬) 매 프레임 마다 서버는 이 homepos를 무작위로 이동 ( position jump가아니고 random vector 를 add 하는 형태 ) 따라서 각 팀의 home pos가 교차 되는 경우도 존재 자신의 팀의 homepos는 매 frame 마다 서버가 팀별로 전달
모든 gameobject는 pos vector, move vector , accel vector 를 가지고 이를 이용 매 프레임 자동 이동 각 object는 object type별로 move limit (속도 ) 가 걸려 있음, 그 이상의 속도를 내려고 하면 서버가 자동으로 normalize 해버림 world boundary 에 도달하면 mainobj 반사, shield, homming bullet 영향 없음 나머지는 disable됨 ( 다음프레임에 없어짐 )
game object는 구형이며 radius를 가짐, 이를 기준으로 충돌 검사를 진행.
gameobject type 은 서로 interaction 가능성 table을 사용 충돌 여부를 검사. 충돌시 동작은 interaction하는 object는 disable 형태를 사용. object 별 HP를 가지게 하는 것도 생각해 봤지만 다음 버전에 고려해볼 생각.