2008년 12월 16일 화요일
비프스테이크
돈가스(포크 커틀릿)니,비후가스니(비프 커틀릿),함박(햄버거스테이크)을 한계로 삼는 이들에게 정통 양식당의 메뉴판은 야속한 존재가 아닐 수 없다.아무리 들쳐봐도 즐겨 먹는 양식 삼총사의 이름이 쉽사리 눈에 띄지 않을뿐더러 비프스테이크의 경우만 하더라도 부위별로 세밀하게 나뉘어져 다양한 이름으로 나열되어 있기 때문이다.갈비살로 만드는 립아이스테이크(rib eye steak)나 등심살로 만드는 설로인스테이크(sirloin eye steak),등심살과 안심살을 뼈에 붙은 상태로 잘라 구워내는 티본스테이크(T-bone steak)와 안심살을 뼈째 잘라 굽는 포터하우스스테이크(porterhouse steak)는 그래도 나은 편이다.섬유질이 없고 육질이 부드러워 텐더로인(tender loin)으로 불리는 안심에 이르면 사정은 더욱 복잡해진다.소 한 마리를 잡아봐야 고작 60cm의 길이에 가장 두꺼운 쪽의 직경이라야 12cm에 불과한 다듬이 방망이 모양의 것이 두 개가 나올 뿐인 안심은 놀랍게도 무려 6종의 스테이크로 세분되어 제공된다.안심의 부위별 명칭을 쇠머리쪽에서부터 차례대로 살펴보면 프티필레(petit filet)-필레미뇽(filet mignon)-투른느도(tournedos)-필레(filet)-샤토브리앙(Ch teaubriand)-테트(t te)의 순으로 이루어져 있다.국제화 시대엔 서양인의 주식인 비프스테이크에 관한 이만한 상식쯤은 최소한 지니고 있어야 하지 않을까? 더군다나 한국인은 지구 가족중 쇠고기를 부위별로 가장 철저하게 가려먹은 민족중의 하나가 아닌가.우리나라 사람들은 자고로 쇠고기를 쇠머리,장정(목),등심,채끝살,우둔,갈비,쐬악지,안심,홍두깨살(궁둥이),양지,업진(배),대접살,중치살,사태,차돌박이,제비추리,안꺼미로 세분해 먹었을뿐더러 양,간,곱창,염통,콩팥,선지(피)와 같은 내장은 말할 것도 없고 심지어 우랑,우신,우설(혓바닥)과 쟁반고기로 통하는 젖통살에 쇠꼬리(소꼬리탕),쇠발톱(우족탕)까지 가려먹었다니 놀라지 않을 수 없다.내친 김에 스테이크와 관련된 상식과 매너를 간추려 소개한다.첫째,샤토브리앙 등 안심은 주로 나이가 지긋한 이들이 즐기는 부위이다.최상등급의 고기일뿐더러 무엇보다 육질이 연하기 때문이다.둘째,티본스테이크나 뉴욕컷스테이크는 젊은이들에게 어울리는 야성적인 스테이크다.적당히 질길 뿐더러 지방이 맛을 돋우기 때문이다.셋째,세계 어디를 가더라도 뼈째 나오는 음식은 우리나라의 갈비와 티본스테이크가 고작일 정도로 드물다.비위가 약한 일본인(?)들이 뼈째 나오는 고기를 보면 충격을 받는다는 사실은 흥미롭다.넷째,스테이크를 먹을 때는 왼손에 든 포크로 고기를 고정시키고 오른손의 나이프로 고기의 결을 따라 잘라가며 먹으면 된다.스테이크를 왼쪽부터 먹는 것은 특별한 의미가 있는 것은 아니고 단지 왼손에 포크를 쥐고 있기 때문이다.다섯째,고기를 썰 때는 접시의 왼쪽부터 안쪽으로 잘라 들어가되,나이프 날(톱니) 부분으로 당기듯이 자르면 된다.여섯째,스테이크를 먹을 때는 아무리 편리성을 중시하더라도 고기를 한꺼번에 잘라 놓아선 안 된다.미리 썰어두면 고기가 쉽게 식을뿐더러 육즙이 흘러나와 맛이 떨어지기 때문이다./손일락(청주대 호텔경영학과 교수)
2008년 10월 8일 수요일
2008년 8월 1일 금요일
Unix Domain Socket
Unix Domain Socket(이하 UDS) 는 socket API를 수정없이 이용며,
port 기반의 Inernet Domain Socket에 비해서 로컬 시스템의 파일시스템을
이용해서 내부프로세스간의 통신을 위해 사용한다는 점이 다르다고 할수 있다.
ls 를 이용해서 통신을 위해서 만들어진 파일을 보면 다음과 같은 모습을
보인다.
[yundream@localhost tmp]$ ls -al
srwx------ 1 root nobody 0 12월 14 21:16 .fam_socket
보면 파일타입에 "s" 가 붙어 있는걸 알수 있으며, 파일사이즈가 0으로 되어 있는
걸 알수 있다. 왜냐하면 FIFO와 마찬가지로 메시지가 파일로 쌓이지 않고
커널로 전달되어서 커널에서 처리하기 때문이다.
파일을 통해서 통신을 하며, 커널내부에서 메시지를 관리한다는 점에서
FIFO와 매우 유사한면을 보여주지만, FIFO와는 달리 양방향 통신이 가능하다는
특징을 가지고 있다. 그러므로 다중의 클라이언트를 받아들이는 서버/클라이언트
모델을 만들기가 매우 쉽다.
또한 Inet 소켓을 통한 외부통신에 비해서 2배 이상의 효율을 보여준다라는
장점을 가지고 있다.
많은 경우 약간 복잡한 내부프로세스간 통신을 해야된다고 했을때 UDS을 많이
사용한다. INET 계층에서의 통신이 TCP/IP 4계층을 모두 거치는것과는
다르게, UDS 은 어플리케이션 계층에서 TCP 계층까지만 메시지가 전달되고,
다시 곧바로 어플리케이션 계층으로 메시지가 올라가게 된다. TCP/IP 계층에 대한
자세한 내용은 TCP/IP 개요(2)를 참고 하기 바란다.
위에서 INET 소켓보다 2배이상의 효율을 가진다고 했는데,
4계층의 레이어를 모두 거쳐야하는 INET 소켓에 비해서 단지 2개의 레이어만
사용한다는 점도 그 이유중 하나로 작용한다.
쏘쓰 코드는 다중연결서버 만들기(1)의 zipcode_multi.c 와
셈플로 알아보는 소켓프로그래밍(1)의 zipcode_cli.c 를 사용하도록할것이다.
예제: zipcode_local.c
1.
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int server_sockfd, client_sockfd;
int state, client_len;
pid_t pid;
FILE *fp;
struct sockaddr_un clientaddr, serveraddr;
char buf[255];
char line[255];
if (argc != 2)
{
printf("Usage : ./zipcode [file_name]\n");
printf("예 : ./zipcode /tmp/mysocket\n");
exit(0);
}
memset(line, '0', 255);
state = 0;
if (access(argv[1], F_OK) == 0)
{
unlink(argv[1]);
}
// 주소 파일을 읽어들인다.
client_len = sizeof(clientaddr);
if((fp = fopen("zipcode.txt", "r")) == NULL)
{
perror("file open error : ");
exit(0);
}
// internet 기반의 스트림 소켓을 만들도록 한다.
if ((server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
{
perror("socket error : ");
exit(0);
}
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, argv[1]);
state = bind(server_sockfd , (struct sockaddr *)&serveraddr,
sizeof(serveraddr));
if (state == -1)
{
perror("bind error : ");
exit(0);
}
state = listen(server_sockfd, 5);
if (state == -1)
{
perror("listen error : ");
exit(0);
}
printf("accept : \n");
while(1)
{
client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,
&client_len);
printf("test test\n");
pid = fork();
if (pid == 0)
{
if (client_sockfd == -1)
{
perror("Accept error : ");
exit(0);
}
while(1)
{
memset(buf, '0', 255);
if (read(client_sockfd, buf, 255) <= 0)
{
close(client_sockfd);
fclose(fp);
exit(0);
}
if (strncmp(buf, "quit",4) == 0)
{
write(client_sockfd, "bye bye\n", 8);
close(client_sockfd);
fclose(fp);
break;
}
while(fgets(line,255,fp) != NULL)
{
if (strstr(line, buf) != NULL)
write(client_sockfd, line, 255);
memset(line, '0', 255);
}
write(client_sockfd, "end", 255);
printf("send end\n");
rewind(fp);
}
}
}
close(client_sockfd);
}
}
다음은 클라이언트 프로그램이다.
예제: zipcode_cli_local.c
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int client_len;
int client_sockfd;
FILE *fp_in;
char buf_in[255];
char buf_get[255];
struct sockaddr_un clientaddr;
if (argc != 2)
{
printf("Usage : ./zipcode_cl [file_name]\n");
printf("예 : ./zipcode_cl /tmp/mysocket\n");
exit(0);
}
client_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (client_sockfd == -1)
{
perror("error : ");
exit(0);
}
bzero(&clientaddr, sizeof(clientaddr));
clientaddr.sun_family = AF_UNIX;
strcpy(clientaddr.sun_path, argv[1]);
client_len = sizeof(clientaddr);
if (connect(client_sockfd, (struct sockaddr *)&clientaddr, client_len) < 0)
{
perror("Connect error: ");
exit(0);
}
while(1)
{
printf("지역이름 입력 : ");
fgets(buf_in, 255,stdin);
buf_in[strlen(buf_in) - 1] = '0';
write(client_sockfd, buf_in, 255);
if (strncmp(buf_in, "quit", 4) == 0)
{
close(client_sockfd);
exit(0);
}
while(1)
{
read(client_sockfd, buf_get, 255);
if (strncmp(buf_get, "end", 3) == 0)
break;
printf("%s", buf_get);
}
}
close(client_sockfd);
exit(0);
}
기존의 INET 버젼의 프로그램과 비교해 보면 고작 3줄 정도만 수정되었음을
알수 있을것이다. 단지 소켓 구조체가 sockaddr_un 으로 바뀌고,
AF_INET 대신 AF_UNIX 를 그리고 port 번호대신에 파일명을 사용했음을
알수 있다.
나머지의 모든 코드는 INET 코드와 완전히 같다. 그러므로
Unix Domain Socket 를 사용하면 Inet Domain Socket 와 코드 일관성을
유지할수 있으며, 동일한 기술을 사용해서 프로그래밍을 할수 있다.
또한 다른 대부분의 IPC 설비들이, 범용적으로 사용하기에는 부족한 여러가지
단점들을 가진반면(단방향 이거나, 읽기만 가능하다거나, 제어하기가 어려운)
UDS는 매우 범용적인 IPC 로써 사용가능하다라는 장점을 가지고 있다.
실제로 X 서버 같은경우에 외부에서의 접근시에는 INET 연결을 내부에서의
연결을 위해서는 UDS 를 사용한다. 이밖에도 mysql, pgsql, KDE, Gnome 과 같은
대부분의 서버프로그램이 내부통신을 위해서 UDS 를 사용한다.
port 기반의 Inernet Domain Socket에 비해서 로컬 시스템의 파일시스템을
이용해서 내부프로세스간의 통신을 위해 사용한다는 점이 다르다고 할수 있다.
ls 를 이용해서 통신을 위해서 만들어진 파일을 보면 다음과 같은 모습을
보인다.
[yundream@localhost tmp]$ ls -al
srwx------ 1 root nobody 0 12월 14 21:16 .fam_socket
보면 파일타입에 "s" 가 붙어 있는걸 알수 있으며, 파일사이즈가 0으로 되어 있는
걸 알수 있다. 왜냐하면 FIFO와 마찬가지로 메시지가 파일로 쌓이지 않고
커널로 전달되어서 커널에서 처리하기 때문이다.
파일을 통해서 통신을 하며, 커널내부에서 메시지를 관리한다는 점에서
FIFO와 매우 유사한면을 보여주지만, FIFO와는 달리 양방향 통신이 가능하다는
특징을 가지고 있다. 그러므로 다중의 클라이언트를 받아들이는 서버/클라이언트
모델을 만들기가 매우 쉽다.
또한 Inet 소켓을 통한 외부통신에 비해서 2배 이상의 효율을 보여준다라는
장점을 가지고 있다.
많은 경우 약간 복잡한 내부프로세스간 통신을 해야된다고 했을때 UDS을 많이
사용한다. INET 계층에서의 통신이 TCP/IP 4계층을 모두 거치는것과는
다르게, UDS 은 어플리케이션 계층에서 TCP 계층까지만 메시지가 전달되고,
다시 곧바로 어플리케이션 계층으로 메시지가 올라가게 된다. TCP/IP 계층에 대한
자세한 내용은 TCP/IP 개요(2)를 참고 하기 바란다.
위에서 INET 소켓보다 2배이상의 효율을 가진다고 했는데,
4계층의 레이어를 모두 거쳐야하는 INET 소켓에 비해서 단지 2개의 레이어만
사용한다는 점도 그 이유중 하나로 작용한다.
쏘쓰 코드는 다중연결서버 만들기(1)의 zipcode_multi.c 와
셈플로 알아보는 소켓프로그래밍(1)의 zipcode_cli.c 를 사용하도록할것이다.
예제: zipcode_local.c
1.
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int server_sockfd, client_sockfd;
int state, client_len;
pid_t pid;
FILE *fp;
struct sockaddr_un clientaddr, serveraddr;
char buf[255];
char line[255];
if (argc != 2)
{
printf("Usage : ./zipcode [file_name]\n");
printf("예 : ./zipcode /tmp/mysocket\n");
exit(0);
}
memset(line, '0', 255);
state = 0;
if (access(argv[1], F_OK) == 0)
{
unlink(argv[1]);
}
// 주소 파일을 읽어들인다.
client_len = sizeof(clientaddr);
if((fp = fopen("zipcode.txt", "r")) == NULL)
{
perror("file open error : ");
exit(0);
}
// internet 기반의 스트림 소켓을 만들도록 한다.
if ((server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
{
perror("socket error : ");
exit(0);
}
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, argv[1]);
state = bind(server_sockfd , (struct sockaddr *)&serveraddr,
sizeof(serveraddr));
if (state == -1)
{
perror("bind error : ");
exit(0);
}
state = listen(server_sockfd, 5);
if (state == -1)
{
perror("listen error : ");
exit(0);
}
printf("accept : \n");
while(1)
{
client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,
&client_len);
printf("test test\n");
pid = fork();
if (pid == 0)
{
if (client_sockfd == -1)
{
perror("Accept error : ");
exit(0);
}
while(1)
{
memset(buf, '0', 255);
if (read(client_sockfd, buf, 255) <= 0)
{
close(client_sockfd);
fclose(fp);
exit(0);
}
if (strncmp(buf, "quit",4) == 0)
{
write(client_sockfd, "bye bye\n", 8);
close(client_sockfd);
fclose(fp);
break;
}
while(fgets(line,255,fp) != NULL)
{
if (strstr(line, buf) != NULL)
write(client_sockfd, line, 255);
memset(line, '0', 255);
}
write(client_sockfd, "end", 255);
printf("send end\n");
rewind(fp);
}
}
}
close(client_sockfd);
}
}
다음은 클라이언트 프로그램이다.
예제: zipcode_cli_local.c
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int client_len;
int client_sockfd;
FILE *fp_in;
char buf_in[255];
char buf_get[255];
struct sockaddr_un clientaddr;
if (argc != 2)
{
printf("Usage : ./zipcode_cl [file_name]\n");
printf("예 : ./zipcode_cl /tmp/mysocket\n");
exit(0);
}
client_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (client_sockfd == -1)
{
perror("error : ");
exit(0);
}
bzero(&clientaddr, sizeof(clientaddr));
clientaddr.sun_family = AF_UNIX;
strcpy(clientaddr.sun_path, argv[1]);
client_len = sizeof(clientaddr);
if (connect(client_sockfd, (struct sockaddr *)&clientaddr, client_len) < 0)
{
perror("Connect error: ");
exit(0);
}
while(1)
{
printf("지역이름 입력 : ");
fgets(buf_in, 255,stdin);
buf_in[strlen(buf_in) - 1] = '0';
write(client_sockfd, buf_in, 255);
if (strncmp(buf_in, "quit", 4) == 0)
{
close(client_sockfd);
exit(0);
}
while(1)
{
read(client_sockfd, buf_get, 255);
if (strncmp(buf_get, "end", 3) == 0)
break;
printf("%s", buf_get);
}
}
close(client_sockfd);
exit(0);
}
기존의 INET 버젼의 프로그램과 비교해 보면 고작 3줄 정도만 수정되었음을
알수 있을것이다. 단지 소켓 구조체가 sockaddr_un 으로 바뀌고,
AF_INET 대신 AF_UNIX 를 그리고 port 번호대신에 파일명을 사용했음을
알수 있다.
나머지의 모든 코드는 INET 코드와 완전히 같다. 그러므로
Unix Domain Socket 를 사용하면 Inet Domain Socket 와 코드 일관성을
유지할수 있으며, 동일한 기술을 사용해서 프로그래밍을 할수 있다.
또한 다른 대부분의 IPC 설비들이, 범용적으로 사용하기에는 부족한 여러가지
단점들을 가진반면(단방향 이거나, 읽기만 가능하다거나, 제어하기가 어려운)
UDS는 매우 범용적인 IPC 로써 사용가능하다라는 장점을 가지고 있다.
실제로 X 서버 같은경우에 외부에서의 접근시에는 INET 연결을 내부에서의
연결을 위해서는 UDS 를 사용한다. 이밖에도 mysql, pgsql, KDE, Gnome 과 같은
대부분의 서버프로그램이 내부통신을 위해서 UDS 를 사용한다.
2008년 6월 18일 수요일
2008년 6월 12일 목요일
2008년 6월 10일 화요일
Bubble Bobble Passwords
Bubble Bobble Passwords
Level Passwords
| Password | Effect |
|---|---|
| BBAAB | Level 01 |
| GGJBI | Level 96 |
| BIIIB | Level 04 |
| BIFFB | Level 05 |
| BFFFB | Level 06 |
| BFIIG | Level 07 |
| BJJJB | Level 08 |
| BJCCB | Level 09 |
| BCCCB | Level 10 |
| BCJJI | Level 11 |
| AFFFB | Level 20 |
| AJJJI | Level 26 |
| AGJJJ | Level 30 |
| IFIIG | Level 35 |
| IABBG | Level 39 |
| IEJJJ | Level 43 |
| FGJJJ | Level 58 |
| FCGGJ | Level 61 |
| FJEEJ | Level 63 |
| JIAAI | Level 77 |
| CCJJI | Level 81 |
| GEJJJ | Level 99 |
| BAAAB | Level 02 |
| AAAAB | Level 16 |
| BABBI | Level 03 |
| IIIIB | Level 32 |
| IGEEB | Level 41 |
| IEEEB | Level 42 |
| IJGGG | Level 44 |
| IJEEG | Level 45 |
| ICEEG | Level 46 |
| ICGGJ | Level 47 |
| FFFFB | Level 48 |
| FFIIG | Level 49 |
| FFIFG | Level 50 |
| FIIIG | Level 51 |
| FAAAJ | Level 52 |
| FABBG | Level 53 |
| FBBBG | Level 54 |
| FBAAG | Level 55 |
| FEEEB | Level 56 |
| FEJJJ | Level 57 |
| FGCCJ | Level 59 |
| FCEEG | Level 60 |
| CAJFI | Level 89 |
| GGJBI | Level 96 |
| EECJJ | Level B2 |
| GHCCB | Level C6 |
| HBGBD | Level E6 |
| HJFAB | Level F5 |
| IAAAJ | Level 38 |
| IBAAJ | Level 37 |
| IBBBJ | Level 36 |
| IFFFB | Level 34 |
| IIFFB | Level 33 |
| AGCCJ | Level 31 |
| AEJJJ | Level 29 |
| AEEEB | Level 28 |
| AJCCI | Level 27 |
| ACJJI | Level 25 |
| ACCCB | Level 24 |
| AIFFG | Level 23 |
| AIIIG | Level 22 |
| AFIIG | Level 21 |
| ABAAI | Level 19 |
| ABBBI | Level 18 |
| AABBI | Level 17 |
| BEJJJ | Level 15 |
| BEEEB | Level 14 |
| BGEEB | Level 13 |
| BGGGB | Level 12 |
| CJGEG | Level A0 |
| GJEGJ | Level A1 |
| GCEGJ | Level A2 |
| GCGEJ | Level A3 |
| GIBAI | Level A4 |
| GIABJ | Level A5 |
| GFABJ | Level A6 |
| GFBAJ | Level A7 |
| GBIFG | Level A8 |
| GBFIJ | Level A9 |
| GAFIJ | Level B0 |
| GAIFJ | Level B1 |
| CAFFI | Level 88 |
| CBIIB | Level 90 |
| CBFFB | Level 91 |
| CFAAI | Level 92 |
| CJBBJ | Level 93 |
| CIBBJ | Level 94 |
| CIAAJ | Level 95 |
| GGEEB | Level 97 |
| GEEEB | Level 98 |
| IGGGB | Level 40 |
| FJGGJ | Level 62 |
| JJJJB | Level 64 |
| JJCCB | Level 65 |
| JCCCB | Level 66 |
| JCJJI | Level 67 |
| JGGGB | Level 68 |
| JGEEB | Level 69 |
| JEEEB | Level 70 |
| JEJJJ | Level 71 |
| JBIII | Level 72 |
| JBFFI | Level 73 |
| JAFFI | Level 74 |
| JAIIB | Level 75 |
| JIBBI | Level 76 |
| CJJJI | Level 82 |
| CJCCI | Level 83 |
| CEEEB | Level 84 |
| CEJJJ | Level 85 |
| CGJJJ | Level 86 |
| CGCCJ | Level 87 |
| JFAAI | Level 78 |
| JFBBJ | Level 79 |
| CCCCB | Level 80 |
Other Passwords
| Password | Effect |
|---|---|
| EECFG | Skip to End |
| HEAGD | Stage Select (Super Bubble Bobble) |
| DDFFI | Stage Select (select 1/2p continue to make C9 appear, press A to raise level/B to lower) |
| BACCF | Start with 99 Lives |
Level Codes -- 99 and Ending
Enter at the screen where you select which game mode you want to play. There is a password field there.
| Password | Effect |
|---|---|
| GEJJJ | Level 99 (regular bubble bobble) |
| GEJIJ | Level 99 (super bubble bobble) |
| EGJJJ | Level B4 (last stage, regular bubble bobble) |
| EGJIJ | Level B4 (last stage, super bubble bobble) |
Super Bubble Bobble Round Passwords
Enter these passwords in the same place you normally enter round passwords on the mode select screen.
| Password | Effect |
|---|---|
| BBAJI | Round 01 |
| BAAJI | Round 02 |
| BABCI | Round 03 |
| BIIEB | Round 04 |
| BIAJJ | Round 05 |
| BFAJJ | Round 06 |
| BFBCJ | Round 07 |
| BJGFI | Round 08 |
| BJEIB | Round 09 |
| BCEIB | Round 10 |
| BCGFB | Round 11 |
| BGJAI | Round 12 |
| BGCBJ | Round 13 |
| BECBJ | Round 14 |
| BEJAJ | Round 15 |
| AAAJI | Round 16 |
| AABCI | Round 17 |
| ABBCI | Round 18 |
| ABFGG | Round 19 |
| AFAJJ | Round 20 |
| AFBCJ | Round 21 |
| AIBCJ | Round 22 |
| AIAJG | Round 23 |
| ACEIB | Round 24 |
| ACGFB | Round 25 |
| AJGFB | Round 26 |
| AJEIG | Round 27 |
| AECBJ | Round 28 |
| AEJAJ | Round 29 |
| AGJAJ | Round 30 |
| AGCBG | Round 31 |
| IIIEB | Round 32 |
| IIAJJ | Round 33 |
| IFAJJ | Round 34 |
| IFBCJ | Round 35 |
| IBIEG | Round 36 |
| IBFGJ | Round 37 |
| IAFGJ | Round 38 |
| IAIEJ | Round 39 |
| IGJAI | Round 40 |
| IGCBJ | Round 41 |
| IECBJ | Round 42 |
| IEJAJ | Round 43 |
| IJGFG | Round 44 |
| IJEIJ | Round 45 |
| ICEIJ | Round 46 |
| ICGFJ | Round 47 |
| FFAJJ | Round 48 |
| FFBCJ | Round 49 |
| FIBCJ | Round 50 |
| FIAJG | Round 51 |
| FAFGJ | Round 52 |
| FAIEJ | Round 53 |
| FBIEJ | Round 54 |
| FBFGI | Round 55 |
| FECBJ | Round 56 |
| FEJAJ | Round 57 |
| FGJAJ | Round 58 |
| FGCBG | Round 59 |
| FCEIJ | Round 60 |
| FCGFJ | Round 61 |
| FJGFJ | Round 62 |
| FJAJJ | Round 63 |
| JJGFI | Round 64 |
| JJEIB | Round 65 |
| JCEIB | Round 66 |
| JCGFB | Round 67 |
| JGJAI | Round 68 |
| JGCBJ | Round 69 |
| JECBJ | Round 70 |
| JEJAJ | Round 71 |
| JBIEI | Round 72 |
| JBFGB | Round 73 |
| JAFGB | Round 74 |
| JAIEB | Round 75 |
| JIBCI | Round 76 |
| JIEII | Round 77 |
| JFEII | Round 78 |
| JFGFI | Round 79 |
| CCEIB | Round 80 |
| CCGFB | Round 81 |
| CJGFB | Round 82 |
| CJEIG | Round 83 |
| CECBJ | Round 84 |
| CEJAJ | Round 85 |
| CGJAJ | Round 86 |
| CGCBG | Round 87 |
| CAFGB | Round 88 |
| CAIEB | Round 89 |
| CBIEB | Round 90 |
| CBCBB | Round 91 |
| CFEII | Round 92 |
| CFGFI | Round 93 |
| CIGFI | Round 94 |
| CIEIB | Round 95 |
| GGJAI | Round 96 |
| GGCBJ | Round 97 |
| GECBJ | Round 98 |
| GEJAJ | Round 99 |
| GJGBG | Round A0 |
| GJEAG | Round A1 |
| GCEAG | Round A2 |
| GCBGG | Round A3 |
| GIGBB | Round A4 |
| GIEAB | Round A5 |
| GFEAB | Round A6 |
| GFGBI | Round A7 |
| GBJIB | Round A8 |
| GBCFB | Round A9 |
| GACFB | Round B0 |
| GAJIG | Round B1 |
| EECFG | Round B2 |
Bubble Bobble Unlockables
Unlockables
| Unlockable | How to Unlock |
|---|---|
| Sound Test | Beat Super Bubble Bobble Mode and get happy ending |
Bubble Bobble Secrets
Add in the 2nd Player
During gameplay, pause the game and press Select to activate the 2nd Player.
Steal Lives
If you die in a two-player game, hit Start to pause the game, then hit Select to steal a life from your partner.
Happy Ending
Take the Crystal (found in Room 99) to Room A0. At the final boss (Room B3), fire at him until he is encased in a bubble. Now, instead of popping it right away, first hit Start to summon Player 2 (you must have at least one life left). Now pop the bubble for the ''good'' ending.
Secret diamond room
To gain access to a secret room worth 400,000 points, survive 20 rounds with your first dinosaur.
피드 구독하기:
글 (Atom)


