sharksym's MSX World

sharksym.egloos.com

포토로그 마이가든



ASO 리메이크 - 첫판 BOSS 완성 by sharksym

커피 한잔하면서 글 하나 올려봅니다~ ㅋ

지난 연휴때, 여가시간을 full 활용해서 구현해보았습니다.

아래는 오리지날 ASO의 보스 모습인데, 한번 보시죵...




다리가 셋 달린 놈이 나옵니다.

흐느적거리는 다리가 포인트라고 할수 있습지요. ㅋ


MSX 리메이크판에서는 100% 똑같이 만드는건 불가능했고요...

CPU,VDP가 버텨주는 정도에서 타협을 해보니,

좌우 다리는 관절 4개씩, 뒷다리(꼬리?)는 관절 3개로 만들수가 있었네요.


사진은 퇴근 후, 추가하겠습니다.

참고로 동영상은 정식 릴리즈(물론 AREA 1만.. ㅋ)할때 올릴 생각입니다.

(기대치를 높이기 위한 뭐..그런 ㅡ.ㅡ;;;)



보스 몸통 및 다리 관절은 스프라이트가 아닌 모두 비트맵 그래픽입니다.

두개의 색은 팔레트 애니메이션으로 보스의 체력 상태(빨강/노랑 점멸) 표시도 됩니다.

원판과 거의 비슷한 느낌이에요.


이제 남은건 점수판이랑 주인공 죽었을 때, 리셋 지점부터 다시 시작하는 루틴인데...

주말에 잘하면 완성할 수 있을 듯 하네요. 아... TITLE 화면도 그려야겠네요.ㅋ



지난 5월부터 계획하고 조금씩 만드느라 시간이 꽤 걸렸네요.

비록 터보알 전용이지만, 원판이랑 비슷하게 구현이 되서 아주 즐겁습니다. ㅎ.ㅎ


PS. 실기에서 구동되는 모습입니다.

디카 플래쉬 켜면 어둡게 나오고, 끄면 잔상이 생기네요. ㅎ.ㅎㅋ

대충 보셔요...



ASO 리메이크 - 그래픽 작업 by sharksym

ASO 리메이크에서 사용되는 그래픽입니다.
모두 DD 구락부에서 작업된 것이구요.

스프라이트는 게임 진행 상황에 따라, 수시로 패턴 테이블에 로딩됩니다.


ASO 리메이크 - Armor 완성 by sharksym

2012년 새해가 밝았습니다.
올해도 즐거운 한해 되시길 바라겠습니다요~~ ㅎ.ㅎ

ASO 리메이크 진행상황입니다.
지난 크리스마스 때 릴리즈하려던 계획은 실패(!)로 돌아갔네요. (도저히 개인 시간이 안난다능... ㅜ.ㅜ)
1월말 쯤엔 가능하겠죠? ㅎ.ㅎ;

현재까지 AREA1에서 사용가능한 Armor 처리가 완료되었습니다.
아... 진짜 오리지날 ASO 분위기가 나네요. ㅋ

동영상은 귀찮아서 못찍었고요... 그냥 스크린 샷 몇개로 대신합니다.

위 사진은 2번 보호막 아머를 모으는 장면이네요.
아머는 3조각으로 분리되어있고, 3조각 모두 모으면 하단의 아이콘으로 등록됩니다.
에너지 바가 7이상(노란색 게이지)이 되면 아머 합체가 가능하지요.


위 사진은 보호막 아머를 사용하는 모습입니다.
적 유닛 또는 총알 부딛혔을때 일정 에너지를 소모하게 됩니다.



위 사진은 화염 방사기(?) 아머군요.
지상 및 공중 유닛 모두에게 타격이 됩니다.
대신 아머 사용중에는 레이저, 미사일 발사가 불가능하지요.
워낙 쌘 무기라서 밸런스를 위해, 약간의 패널티를 준게 아닐까 생각해봅니다.


위 사진은 6방향으로 레이져를 발사하는 아머의 모습입니다.
오리지날 ASO에서는 OCTO 라고해서 8방향으로 쏘는건데... 제 맘데로 6방향으로 줄였어요..ㅋ



위 사진은 캐논 아머의 모습입니다.
장착하면 기체의 레이져 레벨과는 상관없이 6발짜리 레이저가 발사됩니다.
잘만 쓰면 보스전에서 아주 유용하지요.


한손으로 디카들고 찍다보니 흔들린 사진이 많군요. ㅎ.ㅎ;

ASO 리메이크 - Test 9 (데모 디스크 릴리즈) by sharksym

AREA1 맵은 거의 완성이 되었습니다.
보스 처리가 완성되면, 적 유닛은 모두 구현되는 셈이네요. (스프라이트 그리기 힘듭니다요. ㅜ.ㅜ)

ASO의 가장 중요한 요소인 "아머"도 구현이 안되어 있는데,
아마도 Test 10 버전은 아머 구현으로 가게 될것 같아요~ㅋ

아래는 터보알 또는 에뮬(blueMSX 등)에서 실행가능한 데모 파일입니다.

ASO_test_9.zip

ASO_test_9_DSK.zip


ASO /M 으로 실행하면 문사운드로 소리가 나며,
ASO /A 는 필립스 뮤직모듈 등의 MSX-AUDIO로 소리를 들을 수 있습니다.

아래는 제 터보알에서 구동한 모습입니다.
이번엔 ASO /M /I 으로 실행해서, CPU idle 구간을 볼 수 있도록 캡쳐했습니다. 참고하셔요. ㅎ.ㅎ



ASO 리메이크 - Test 8 by sharksym

ASO에서 지상에서 움직이는 유닛이 몇종류가 있는데, 그 중 하나가 추가되었습니다.
SW 스프라이트를 이용하기 때문에, 풀컬러로 움직이는 모습을 볼수 있겠습니다.
참고로 공중 유닛은 HW 스프라이트라서 3색 정도만 표현가능합니다요...

공중유닛도 2가지가 추가되었습니다. (스프라이트 그리느라 힘들었어요. ㅎ.ㅎㅋ)

터보알 GT가 있으시면, 파일 받아서 한번 돌려보시고, (blueMSX 도 가능)
없으면 아래 동영상으로 감상해주세요~ ㅎ


ASO 리메이크 - 빠른 속도의 SW 스프라이트가 가능할까? by sharksym

사실, ASO 리메이크를 시작하면서 SW 스프라이트를 계획했었습니다.
느리게 움직이는 지상 유닛들은 가능하면 비트맵의 깔끔한 그래픽으로 보여주고 싶었지용... ㅎ.ㅎ
 
이걸 지난 주말에서야 구현해서 테스트를 해보았는데요.
60프레임으로 진행되는 게임에서 유닛 여러개 그려넣는데 부하가 심하네요. ㅎ.ㅎ
 
근데, 원본 게임을 자세히 보니, 지상 유닛이 2프레임에 1도트 움직이고 있더군요.
홀짝 프레임에 맞춰서 유닛들은 반반 나눠 처리하면 VDP 부하를 줄일수 있었지요. ㅋ
 
움직이는 지상 유닛 없을때, CPU IDLE 구간을 보면...
 
1. 공중 유닛이 없을때: 약 40%
2. 공중 유닛이 있을때: 약 30%
정도 됩니다. 
 
이 상태에서, 지상 유닛이 5개 정도 등장하면 거의 IDLE 구간이 0%가 되네요.
겨우 ASO 가 구현될만한 수준이었습니다. 흐...
 
 
여기서 ASO에서 구현된 지상군 SW 스프라이트는 아래 처럼 처리됩니다.
 
기본적으로 배경 화면은 스크린5의 페이지 한장에 그려지고,
그려진 배경을 다시 복구(유닛으로 덧칠된 부분 복구)하기 위해 다른 페이지 하나에 깨끗한 배경 화면이 또 있습니다.
 
실제 ASO에서는 페이지1이 보여주는 화면이 되고, 페이지2가 원본 배경 화면입니다.
참고로 페이지0 에는 스프라이트 패턴이랑 STATUS 창(에너지 미터 등등)이 그려지고,
페이지3은 배경 화면용 맵 타일 그래픽이 존재합니다.
 
 
원래 SW 스프라이트는 원본 배경에 유닛 비트맵을 덮어 씌우게 되는데,
이때 원본 배경이 복구 된 후 유닛 비트맵이 그려지는 순간이 순차적으로 보이게 되면
유닛이 깜박이는 것 처럼 보이게 됩니다.
 
이걸 해결하려면,
1. 배경 전체를 더블 버퍼링.
2. 유닛이 다시 그려질 부분만 다른 페이지에 미리 그린 후, 복구될 배경과 함께 원본 배경에 덮어 그려줌.
3. VDP에서 현재 출력 스캔라인과 유닛 그려질 라인이 만나지 않도록 조절해서 처리.
하면 됩니다.
 
근데 60프레임 슈팅겜에서 전체 더블 버퍼링은 속도상 불가능하겠고요.
(ASO에서 지상 유닛은 30프레임 업데이트이긴 하지만, 이것도 힘들겠지요. ㅋ)
 
VDP의 출력 스캔라인을 비켜 가려면,
 그려질 비트맵의 수직 위치랑 현재 스캔라인 간 차이가 많이 나도록 하면 됩니다.
 V-blank 구간에서 비트맵을 그리면 가장 안전하지만, 짧은 구간에 많이 그리진 못하겠지요.
 
참고로, V-blank 구간은 아래처럼 됩니다. (ASO는 60Hz 오버스캔 240라인 모드입니다. )
 
V sync 60Hz 출력일때 
 수직 192 해상도 V-blank 구간: 262 - 192 = 70 라인
 수직 212 해상도 V-blank 구간: 262 - 212 = 50 라인
 오버스캔 모드의 V-blank 구간: 262 - 240 = 22 라인
 
V sync 50Hz 출력일때 
 수직 192 해상도 V-blank 구간: 312 - 192 = 120 라인
 수직 212 해상도 V-blank 구간: 312 - 212 = 100 라인
 오버스캔 모드의 V-blank 구간: 312 - 240 = 72 라인
 
여담이지만, 25프레임 등의 애니메이션을 구현한다면 50Hz 모드가 훨씬 여유가 있다는걸 볼수 있어요.
(더블 버퍼링을 안하는 경우에 한해서...ㅎ.ㅎㅋ)
 
 
그럼, ASO에서는 어떻게 할까요?
 
처음엔 2번의 배경과 유닛 비트맵을 미리 계산(페이지 0 활용)해서 그려보았는데,
비트맵 세번 복사 하는데 시간이 꽤 걸려서 사용이 힘들더군요.
1. 별도 페이지에 원본 배경 복사 (복구될 영역과 유닛 이동 후의 영역만큼 18 x 18 사이즈)
2. VDP의 논리연산 COPY를 써서 배경에 유닛을 덮어씌움 (투명색은 배경이 그대로 보이겠죠?)
3. 완성된 비트맵을 실제 배경 페이지에 복사
 
최종으론, 3번 방법처럼 적절하게 VDP의 스캔라인과 그리는 부분이 겹치지 않게 처리하고 있습니다.
이 경우는 비트맵 두번만 복사하면 되서 1.5배 빠릅니다.
1. 원본 배경을 원본 페이지에 바로 복사(복구)
2. 새로운 위치에 유닛 비트맵 논리연산 COPY
 
지상 유닛은 한 프레임 처리에서 가장 마지막에 이루어집니다.
VDP의 라인인터럽트를 이용해서 스캔라인이 화면 아래쪽에 도달하면, 게임의 한프레임 처리가 시작되는데요.
이것 저것 다 끝내면, 스캔라인이 화면 중앙정도에 옵니다. 남은 CPU 시간이 반정도 남은거지요.
 
이때 지상 유닛을 처리하면서 화면에 다시 그리게 되면,
화면 아래쪽에 나타나는 경우가 아니라면, 눈으로 깜박임을 느낄수 없게 됩니다.
 
글로만 쓰니까, 잘 이해안되실수도 있겠습니다. ㅎ.ㅎ;;
 
암튼, 실제 구현해보니, 지상 유닛이 화면 하단 1/3 정도에선 깜빡이지만, 전체적으로 쓸만했습니다.
뻥 좀 보태면, 거의 원본 ASO의 유닛 움직임과 흡사합니다. ㅋ 
 
유닛의 수직 위치를 소팅해서 스캐라인과 잘 어긋나도록 그리면, 깜박이는 경계선을 더 낮출 수 있을 것 같네요.
이번 주중에 완료해서 동영상으로 보여드리겠습니다~
 
가능하면, 중간 보스도 등장 할 예정...


1 2 3 4 5 6 7 8 9 10 다음