머드클럽
머드게임이란?
게임은 어떤 환경에서?
본격적으로 게임해 볼까?
배너교환
머드강좌
일반 머드강좌
성천사님의 머드강좌
혼님의 머드강좌
방울꽃님의 머드강좌
리트님의 머드강좌
2Soo님의 머드강좌
내머드소개하기
접속가능머드
내머드소개하기
자료실
접속 프로그램
머드소스
머드 유틸리티
기타
커뮤니티
공지사항
등업신청
머드클럽에바란다
자유 게시판
질문 AND 답변
머드클럽 갤러리
구인구직
머드게임소개
사신전(死神戰)
사신전 소개
사신전 맵
사신전 명령어 모음집
천명(天命)
천명 소개
천명 맵
천명 명령어 모음집
마이페이지
로그인
회원가입
계정찾기
로그인
회원가입
계정찾기
텍스트머드클럽
검색
[circle]단땅 20(존 제작)
머드짱
0
3,343
0
0
2004-11-04 18:39:41
겨우 짬이 나서 몇자 적습니다. <br /> <br />왜이리도 할일이 많은지 말입니다. <br /> <br />가끔 그런게 있죠 일만할땐는 취미생활만 하고 평생 살았으면 싶다가도.. <br /> <br />그 취미생활이 일이 되어버리면 다시 다른걸 하고 싶은것말입니다. <br /> <br />다음 강좌부터는 머리말이라도 사용해야 겠군요.. <br /> <br />다들 곡해(?)를 하시는듯 한데.... <br /> <br />-------------------------------------------------------------- <br />단땅처럼 돌아가는 머드제작 강좌 <br />강좌를 적는이 : 머드짱(머드아이디 : 칼의노래) <br />서클머드 한글화 도와주신이 : 미르 <br />단땅의 존 구조를 분석해서 본인은 알지못하지만 도와주신셈이 되는 : 레이 <br />-------------------------------------------------------------- <br /> <br />저의 수준은.. 하급이라고 감히 말할수 있습니다. <br />책은 안녕하세요 씨언어.. 한권 독파했습니다. 독학 <br />말하자면.. 학교나 교육기관에서 배운적도 없습니다. 즉... 아는게 없습니다. <br />기대는 금물입니다. <br />그럼에도 불구하고 강좌를 적어나가는건 취미기 때문이죠 ^^ <br /> <br />------------------------------------------------------------------- <br /> <br /> <br />오늘은.. 제 20강입니다. <br />존과 여러 가지에 대해서 이야기를 하고 싶습니다. <br /> <br />서클머드 존 에디터는 구하기 힘든데요(물론 자료실에 있습니다.) <br />그 오랜세월이 흘렀는데 왜 변변찬은 형태인지 모르겠습니다. <br />아마도 머드 제작자들은 다들 리눅스 시스템에 익숙하다보니 GUI적인 툴을 만들 실력보다는 <br />생각을 하지 않은듯 싶습니다. <br /> <br />현재 강좌에 사용되고 있는 머드는 suntzu 9월 30일자 인데요. <br />이건 확장 128bit 데이타 처리가 되어 있는것입니다. <br /> <br />즉 한마디로.. 원래의 <br />서클과는 다른단 이야기 입니다. <br /> <br />이것땜에 암것도 모르고 고생했습니다. <br />나중에 열심히 공부를 좀 하다보니 convert가 어떻고.. 하던데.. <br />그거 믿고 또 한번 피봤습니다. <br /> <br />이넘의 자동 컨버터(suntzu를 가지고 그냥 예전 서클머드 데이타를 넣고 실행하면 자동으로 변경된다.) <br />를 믿고 했지요.. <br />덕분에 하루종일 열받았습니다. <br /> <br />믿지 마시기 바랍니다. <br />룸/배치/몹/오브젝 의 4개 변환이 다 되는데요.. <br />룸이 제일 쓸만하게 변환되고 나머지는 올바르지 않습니다. <br /> <br />룸의 경우도 변환이(원조형태 서클 3.1에서 ----> 128bit 처리된것) <br />완벽이 아니라 대충이라고 생각하시기 바랍니다. <br />변환될때 연결된 방이 존재하지 않는다고 판단되면(즉 먼저 읽어지지 않은상태라면.) <br />그 연결고리가 -1로 설정되거나 해서 끊어집니다. 수작업 해야 되지요... <br /> <br />비 추천입니다. <br /> <br />한참을 열받았습니다. <br />mudmagic이고 cwg고 사이트를 뒤져도 없더군요. <br />아차차 있긴 있습니다... 좀 어렵게 적혀진 사이트가 <br />http://builderacademy.net/Oasis_DG_pages/contents/area_download.jsp <br />이 사이트에 설명서가 있죠. <br /> <br />결국 영문 해석에 두손을 들고.. 그냥 소스분석을 했습니다. 이게 잴 쉬운거고 잴 빠르더군요. <br /> <br />소스 분석은 DB.c를 보셔야 합니다. <br /> <br />함수는 parse_xxxxx 입니다. <br /> <br />미국애들이 프로그래밍 하는건 항상 동사가 먼저 옵니다. <br />해석해 룸 --> 룸 해석해 <br />이런 차이겠지요.. <br /> <br />parse_room 함수를 봅시다. <br />/* load the rooms */ <br />void parse_room(FILE *fl, int virtual_nr) <br />{ <br /> static int room_nr = 0, zone = 0; <br /> int t[10], i, retval; <br /> char line[READ_SIZE], flags[128], flags2[128], flags3[128]; <br /> char flags4[128], buf2[MAX_STRING_LENGTH], buf[128]; <br /> struct extra_descr_data *new_descr; <br /> char letter; <br /> <br /> /* This really had better fit or there are other problems. */ <br /> snprintf(buf2, sizeof(buf2), "room #%d", virtual_nr); <br /> <br /> if (virtual_nr < zone_table[zone].bot) { <br /> log("SYSERR: Room #%d is below zone %d.", virtual_nr, zone); <br /> exit(1); <br /> } <br /> while (virtual_nr > zone_table[zone].top) <br /> if (++zone > top_of_zone_table) { <br /> log("SYSERR: Room %d is outside of any zone.", virtual_nr); <br /> exit(1); <br /> } <br /> world[room_nr].zone = zone; <br /> world[room_nr].number = virtual_nr; <br /> world[room_nr].name = fread_string(fl, buf2); <br /> world[room_nr].description = fread_string(fl, buf2); <br /> <br /> if (!get_line(fl, line)) { <br /> log("SYSERR: Expecting roomflags/sector type of room #%d but file ended!", <br /> virtual_nr); <br /> exit(1); <br /> } <br /> <br /> if (((retval = sscanf(line, " %d %s %s %s %s %d ", t, flags, flags2, flags3, flags4, t + 2)) == 3) && (bitwarning == TRUE)) { <br /> log("WARNING: Conventional worldfiles detected. Please read 128bit.readme."); <br /> exit(1); <br /> } else if ((retval == 3) && (bitwarning == FALSE)) { <br /> /* <br /> * Looks like the implementor is ready, so let's load the worldfiles. We <br /> * load the extra three flags as 0, since they won't be anything anyway. We <br /> * will save the entire world later on, when every room, mobile, and object <br /> * is converted. <br /> 그러니까 옛날형태의 존이면.. 돌려주는값이 retval ---> returen value 가.. 3이 되고.. 그러면 변환한다 이말이다. <br /> */ <br /> <br /> log("Converting room #%d to 128bits..", virtual_nr); <br /> world[room_nr].room_flags[0] = asciiflag_conv(flags); <br /> world[room_nr].room_flags[1] = 0; <br /> world[room_nr].room_flags[2] = 0; <br /> world[room_nr].room_flags[3] = 0; <br /> <br /> world[room_nr].sector_type = atoi(flags2); <br /> <br /> sprintf(flags, "room #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */ <br /> <br /> /* No need to scan the other three sections; they're 0 anyway */ <br /> check_bitvector_names(world[room_nr].room_flags[0], room_bits_count, flags, "room"); <br /> <br /> if(bitsavetodisk) { /* Maybe the implementor just wants to look at the 128bit files */ <br /> add_to_save_list(zone_table[real_zone_by_thing(virtual_nr)].number, 3); <br /> converting = TRUE; <br /> } <br /> <br /> log(" done."); <br /> } else if (retval == 6) { <br /> int taeller; // 아마도 retval 리턴벨류가 6라면 이런뜻 같네... 칼의노래 <br /> <br /> world[room_nr].room_flags[0] = asciiflag_conv(flags); <br /> world[room_nr].room_flags[1] = asciiflag_conv(flags2); <br /> world[room_nr].room_flags[2] = asciiflag_conv(flags3); <br /> world[room_nr].room_flags[3] = asciiflag_conv(flags4); <br /> <br /> world[room_nr].sector_type = t[2]; <br /> sprintf(flags, "object #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */ <br /> for(taeller=0; taeller < AF_ARRAY_MAX; taeller++) <br /> check_bitvector_names(world[room_nr].room_flags[taeller], room_bits_count, flags, "room"); <br /> } else { <br /> log("SYSERR: Format error in roomflags/sector type of room #%d", virtual_nr); <br /> exit(1); <br /> } <br /> <br /> world[room_nr].func = NULL; <br /> world[room_nr].contents = NULL; <br /> world[room_nr].people = NULL; <br /> world[room_nr].light = 0; /* Zero light sources */ <br /> world[room_nr].timed = -1; <br /> <br /> for (i = 0; i < NUM_OF_DIRS; i++) <br /> world[room_nr].dir_option[i] = NULL; <br /> <br /> world[room_nr].ex_description = NULL; <br /> <br /> snprintf(buf, sizeof(buf), "SYSERR: Format error in room #%d (expecting D/E/S)", virtual_nr); <br /> <br /> for (;;) { <br /> if (!get_line(fl, line)) { <br /> log("%s", buf); <br /> exit(1); <br /> } <br /> switch (*line) { <br /> case 'D': <br /> setup_dir(fl, room_nr, atoi(line + 1)); <br /> break; <br /> case 'E': <br /> CREATE(new_descr, struct extra_descr_data, 1); <br /> new_descr->keyword = fread_string(fl, buf2); <br /> new_descr->description = fread_string(fl, buf2); <br /> /* fix for crashes in the editor when formatting <br /> * - e-descs are assumed to end with a \r\n <br /> * -- Welcor 09/03 <br /> */ <br /> { <br /> char *t = strchr(new_descr->description, '\0'); <br /> if (t > new_descr->description && *(t-1) != '\n') { <br /> CREATE(t, char, strlen(new_descr->description)+3); <br /> sprintf(t, "%s\r\n", new_descr->description); /* sprintf ok : size checked above*/ <br /> free(new_descr->description); <br /> new_descr->description = t; <br /> } <br /> } <br /> new_descr->next = world[room_nr].ex_description; <br /> world[room_nr].ex_description = new_descr; <br /> break; <br /> case 'S': /* end of room */ <br /> /* DG triggers -- script is defined after the end of the room */ <br /> letter = fread_letter(fl); <br /> ungetc(letter, fl); <br /> while (letter=='T') { <br /> dg_read_trigger(fl, &world[room_nr], WLD_TRIGGER); <br /> letter = fread_letter(fl); <br /> ungetc(letter, fl); <br /> } <br /> top_of_world = room_nr++; <br /> return; <br /> default: <br /> log("%s", buf); <br /> exit(1); <br /> } <br /> } <br />} <br /> <br />---------------------------------------------------------------------------- <br />아마도 소스를 좀 해석해 보시면.. <br />재미있습니다. <br /> <br />제가 이 소스를 보고 땅을 쳤지요... <br />젠장 초기에 볼껄.. <br />이것도 모르고 혼자 삽질했네 싶더군요... <br /> <br />저도 올바르게는 몰라도.. 이넘의 소스들은 재미난 부분이 많습니다. <br /> <br />가끔씩 룸제작에서 에러가 나는게 있던데 그런건 거의 "~ " 이렇게 된 경우더군요. <br /> <br />즉 ~ 기호가 끝이란 표기인데 뒷쪽에 공간이 있을때 입니다. 혹시나 이런경우가 생기면 에러가 납니다. <br /> <br />왜냐면 서클은 "~" 랑 뒷쪽에 LF값을 가진(LF값이란 줄넘김을 의미한다. 윈도우에서는 CRLF값을 쓴다.) <br />넘을 체크하는데요.. ~ 뒷쪽에 공간이 들어가면.. 줄 넘김을 파악하지 못해서 에러가 나는거죠. <br /> <br />이거 몰라서 한참 피봤습니다. 밑줄 끄으시고~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`` <br /> <br />그리고 잘 보시다 보면.. 인수의 개수를 가지고 예전것이냐 아니냐를 판단해서 컨버터 합니다. <br /> <br />예전 서클머드라데이타라면 그냥 인수만 늘려주시면 되기도 합니다. <br /> <br />저야 단땅을 변환하는 툴부터 시작했으니 변환툴에 인수 몇개 증가 시켜 주면 되더군요. <br /> <br /> <br />인수는... <br />bit vector가.. 4개의 형태로 표현됩니다. <br />즉 32비트 처리라면.. abcdef 로 끝나는데.. 여기에서 더 많은 특성치를 주기 위해서.. <br />abcdef 0 0 0 이렇게 4자리 32 --> 128bit로.. 128개나 되는 특성치를 설정할수 있다는 이야기 입니다. <br />즉 저런 비트벡터 자리는 모두.. 128bit로.. 3개의 더 설정란을 비워주셔야 됩니다. 그게 변환의 핵심이더군요. <br /> <br />abcd abcde abcd abfe 이런씩으로.. 설정이 4배나 늘었으니 엄청납니다. <br /> <br />물론 몹/오브젝도 동일하죠.... <br /> <br /> <br />하여간 좋은것 같은데 변환할때는 몰라서 꽤 애먹었습니다. <br /> <br />이경우는 128bit 패치가 된 서클에 한해서 입니다. <br /> <br />자 이제 잡담은 그만하고 핵심 요약 하고 끝내죠.. <br /> <br />---------------------------------------------- <br />요약 <br />"~" 뒷쪽에 공간이 있으면 데이타는 에러가 난다. <br />128bit처리는 자동변환되지만 그리 좋지는 않다. <br />서클의 존을 제작후 체크하는 명령어는 ./circle -c <br />옵션이다. <br />그러면 존을 checking 하는 루틴이 돌아간다(위의 소스) <br />----------------------------------------------------- <br /> <br />다음 강좌 예고.. <br />다음강좌는.. 심풀한것부터 하겠습니다. <br />일단 눈에 먼저 보이는 동서남북 표기 부터.. <br /> <br />
0
0
새글
답변
수정
삭제
최신목록
전체목록
단땅 21
단땅 19
0
Comments
-표시할 내용이 없습니다.-
코멘트를 삭제할 비밀번호를 입력하세요.
비밀번호:
댓글에 답하기
입력
닫기
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 107개 / 검색된 게시물: 107개
누구든지 머드 강의를 올리수 있는 곳입니다...^^
[circle]
전투시스템 기초와 실전테크
0
3651
0
0
사비
2004-11-24
[기타]
HanLP 지도명령 mudos 버젼으로 바꾸기.
0
3051
0
0
천유
2004-11-21
[circle]
단땅 프로젝트 ^^*
4
3724
0
0
사비
2004-11-19
[circle]
단땅 공지 3 .(사비님 미르님...~~)
2
3271
0
0
머드짱
2004-11-17
[circle]
단땅 21
6
3285
0
0
머드짱
2004-11-15
[hanlp]
input_to 사용에 대한 제 생각.
0
2966
0
0
추리소설
2004-11-13
[circle]
단땅 공지 2
7
2846
0
0
머드짱
2004-11-05
[circle]
단땅 21
1
3243
0
0
머드짱
2004-11-05
[circle]
단땅 20(존 제작)
0
3344
0
0
머드짱
2004-11-04
[circle]
단땅 19
0
2931
0
0
머드짱
2004-10-30
[circle]
단땅 18 / 몹 변환된 모습
0
3323
0
0
머드짱
2004-10-30
[circle]
단땅 17 / 아이템 변환모습
0
2905
0
0
머드짱
2004-10-27
[circle]
단땅 아래소스 설명 16-1
0
3118
0
0
머드짱
2004-10-27
[circle]
단땅 16
0
2952
0
0
머드짱
2004-10-27
[circle]
단땅 15
1
3226
0
0
머드짱
2004-10-26
[circle]
단땅 강좌 공지
1
3111
0
0
머드짱
2004-10-25
[circle]
suntzu 9월 30일버젼 한글아이디 저장시키기
0
2965
0
0
미르
2004-10-24
[기타]
패치파일 제작하기
1
2867
0
0
미르
2004-09-27
[기타]
윈도우에서 리눅스버전 머드 돌려보기.
1
3544
0
0
손문
2004-09-25
[mordor]
사전딜레이.
1
2821
0
0
GrayRese
2004-09-06
이전
1
2
3
4
5
6
다음
검색
글쓰기
최신목록
전체목록
시작일
종료일
분류별 검색
전체보기
기타
circle
hanlp
mordor
소스분석
흑염
천무혼
검색어
이름
제목
내용
검색
닫기
로그인
회원가입
계정찾기
개인정보처리방침
이용약관
PC화면
Copyright (c) 텍스트머드클럽. All rights reserved.
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
닉네임으로 입력
내용
쪽지가 도착하였습니다.
쪽지함
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--