요즘은 시간과 공간의 제약으로 최신 게임을 즐길 엄두가 나지 않아 주로 고전게임을 즐기고 있습니다. 

저는 어린시절 IBM-PC를 이용한 게임을 주로 했었기에 즐기는 고전게임도 IBM-PC용이 대부분입니다.

불편함을 좀 감수한다면 안드로이드에서도 DOS게임을 즐길 수 있기에 더욱 좋습니다.


이번에 시작했던 게임은 많은 사람들의 기억에 명작으로 남아있는 울티마 6편입니다.


PC버전이 1990년에 출시되었으니 무려 23년 전에 출시된 게임이군요.

전 이 게임을 1992년에 처음 접했는데요,

당시 이 게임을 즐기기엔 제 영어 실력이 많이 모자란 나이였죠.

20여년의 세월일 지나 이제야 다시 게임을 즐겨봤습니다.


명작은 시간이 지나도 명작인가 봅니다.

지금의 게임처럼 화려한 그래픽은 없지만, 충분히 재미있었습니다.


게임을 즐기면서 이리저리 매뉴얼을 찾아 보았습니다만,

딱 마음에 드는 매뉴얼을 찾을 수가 없어서 직접 작성해 보자고 마음먹고 쓰기 매뉴얼을 쓰기 시작했습니다.

이 기본정보편을 시작으로 유용한 정보, 스토리 공략으로 나눠서 글을 써 볼까 합니다.


이미 온라인상에 수 많은 울티마 6편에 대한 정보가 있지만,

유용한 정보들을 한 군데 정리했다는데 의의를 두면서 시작해 보겠습니다.

내용이나 번역이 이상하거나 오류가 있다면 알려주세요.

웹으로 보기 불편하다면 글 마지막의 PDF 파일을 이용하세요.

참고로 GOG 버전도 구입하여 실행해 봤습니다만,

두기님의 블로그에서 구할 수 있는것이 Dosbox 세팅이 더 잘되어 있네요.

둘 다 게임 버전은 4.5 버전입니다.




Ultima VI


기본 정보

새로운 게임 만들기

사용키

매뉴얼 프로텍션

마법

룬 문자

지도

게임을 시작하자





=== 새로운 게임 만들기 ===

기존에 만들어진 캐릭터가 있다면 새로운 캐릭터를 만들 수 없다.

새로운 캐릭터를 만들기 위해서는 INSTALL.EXE를 새로 실행하면 된다.

새로운 캐릭터를 만들게 되면 기존의 캐릭터와 세이브는 사라지니 주의해야 한다.


그래픽카드 및 사운드카드 설정도 INSTALL.EXE에서 한다.

사운드 선택 시 MT32 를 선택하면 된다.

만약 배경음악이 나오지 않는다면 Adlib 으로 설정하자.


INSTALL.EXE로 필요한 설정이 끝나면 ULTIMA6.COM을 실행하면 된다.




=== 사용키 ===

(A)ttack

몬스터를 공격하거나 물건을 부술 때 사용한다.

(C)ast

마법을 사용한다. , 마법책을 장비하고 있어야 한다.

(T)alk

대화한다. Shrine 이나 Statue 와도 대화를 할 수 있다.

모든 단어는 처음 4개의 문자만 입력해도 된다.

대화의 기본은 name, job, bye 이다.

(L)ook

본다. , 표지판이나 비석을 읽을 수도 있고, 그림을 감상할 수도 있다.

무기나 방어구의 효과를 볼 수도 있다.

열린 Chest, Bag 등의 바로 옆에서 보면 내용물을 확인한다.

그리고 숨겨진 물건이나 비밀문을 찾을 수도 있다.

(G)et

물건을 가진다.

(D)rop

물건을 버린다.

(M)ove

아이템을 이동시키거나 캐릭터간 아이템을 옮기거나

Bag 등에 넣고 빼는데 사용한다.

아이템을 열린 Chest, Bag 등으로 옮기면 아이템을 안으로 넣는다.

SpellSpellbook에 합칠때도 사용한다.

(U)se

기능을 가진 물체를 작동시킨다.

문을 열고 닫거나, 배를 타고 내리거나, 사다리를 오르내리거나,

소의 젖을 짜거나, 말을 타거나, 불을 켜고 끄거나,

망원경이나 크리스탈 구슬을 살펴보거나, 벨을 울리거나,

음식을 먹거나, 마실것을 마시거나, 음악을 연주한다

음악을 연주할 때는 숫자 0 - 9를 입력하고 <enter> 를 누르면 된다.

(R)est

잠을 잔다. 보초를 세울 수도 있으며, 음식이 있다면 체력과 MP가 회복된다.

음식이 없거나 보초를 서면 체력이 회복되지 않는다.

몬스터의 공격을 받게되면 잠에서 깬다.

바다에서는 이 명령으로 배를 수리한다.

(B)egin Combat

(B)reak Off Combat

전투를 시작하거나 중지한다.

방향키

캐릭터의 이동 혹은 커서의 이동.

1 ~ 8

솔로 모드. 특정 파티원을 조종을 할 때 사용한다.

0

파티 모드.

F1 ~ F8

인벤토리 화면.

F10

파티의 체력상태 화면. 독에 중독된 상태는 녹색으로 표시됨.

`

인벤토리 화면에서 파티원의 전투모드 변경.

+/-

체력화면에서 파티원 목록을 위/아래로 이동.

인벤토리 화면/스탯 화면에서 다음/이전 파티원으로 이동.

*

인벤토리 화면에서 입력시 스탯 화면으로 이동.

Tab

인벤토리 화면 <-> 맵 화면 간 커서 이동.

Enter

선택.

Spacebar

턴 넘김.

ESC

주로 취소키로 사용. Rest 시 보초 안 세우거나, 행동을 취소하는 등.

Ctrl + E

게임 종료.

Ctrl + S

게임 저장.

Ctrl + R

게임 로드.

Ctrl + Z

배경음 On/Off

Ctrl + H

Help On/Off

Ctrl + V

게임 버전 표시.




=== 매뉴얼 프로텍션 ===

(정품 매뉴얼을 잘 읽어보면 답할 수 있는 문제들입니다.)


- Load British의 질문

Hydra

Nightshade

Rotworm

Torch

Tangle vine

Pod

Wisp

Firefly

Sea Serpant

Fire

Silver Serpant

Tomb

Troll

Endurance

Headress

Wizard

Giant squid

Beak

Reaper

Enchanted


- Mariah의 질문

Hur

Wind

Jux

Danger/Trap/Harm

Quas

Illusion

Zu

Sleep

Ort

Magic


- Selganor (Artisan 길드장) 의 질문

Mandrake Roots

Silver

Nightshade Mushroom

Cap

Sulfurous Ash

Volcanic

Black Pearls

Kinetic





=== 마법 ===

1~8 Circle의 마법이 있으며, 캐릭터 레벨 이하 서클의 마법 사용할 수 있다.

또한, 마법 사용시 해당 서클만큼의 MP가 소요된다.

기본적으로 주인공은 INT*2MP를 가지고 있으며,

나머지 동료들은 직업에 따라 INT*1 혹은 INT*0.5 만큼의 MP를 가진다.

MP는 시간이 지남에 따라 자동으로 회복된다.

범위 공격 마법의 경우 아군이 피해를 입을 수도 있기 때문에 주의가 필요하다.


아래는 마법 목록. 설명이 필요없는 경우는 영문 그대로 둔다.

1st Circle

Create Food

A fine bounty of food will be added to your pack.

시약: Garlic, Ginseng, Mandrake Root

Detect Magic

마법 아이템 여부와 현재 마법 차지 상태를 알려준다.

시약: Nightshade, Sulfurous Ash

Detect Trap

Discovers concealed traps in suspicious chests and doors

시약: Nightshade, Sulfurous Ash

Dispel Magic

Charmed, Posion, 마법에 의한 Sleep을 회복한다.

시약: Garlic, Ginseng

Douse

Extinguishes flames

시약: Garlic, Black Pearl

Harm

적에게 데미지를 준다. 그냥 무기로 치는게 낫다고 한다.

시약: Nightshade, Spider's Silk

Heal

HP를 회복한다.

시약: Ginseng, Spider's Silk

Help

파티가 전멸하거나 아바타가 사망하면 자동으로 시전된다.

Load British 앞으로 자동으로 이동되며, 체력이 모두 회복된다.

사망한 경우 경험치가 떨어진 상태로 부활된다. 시약은 필요 없음.

Ignite

Ignites a lifeless torch, fireplace or brazier

시약: Sulfurous Ash, Black Pearl

Light

Illuminates a darkened area

시약: Sulfurous Ash

2nd Circle

Infravision

Detects the presence of living, warm-blooded beings in the dark.

시약: Nightshade, Sulfurous Ash

Magic Arrow

Fires a moderately damaging missile at your opponent

시약: Sulfurous Ash, Black Pearl

Poison

Poisons your opponent with toxic venom

시약: Nightshade, Blood Moss, Black Pearl

Reappear

Vanish 마법으로 사라진 물건을 다시 나타나게 한다.

시약: Spider's Silk, Blood Moss, Black Pearl

Sleep

Induces unconsciousness in the chosen victim

시약: Nightshade, Spider's Silk, Black Pearl

Telekinesis

멀리 있는 물체를 이동시키거나 작동시킨다.

시약: Blood Moss, Mandrake Root, Black Pearl

Trap

Places a concealed trap on a chest or door

시약: Spider's Silk, Nightshade

Unlock Magic

마법으로 잠긴 상자나 문을 연다. 필수 마법 중 하나.

시약: Sulfurous Ash, Blood Moss

Untrap

상자나 문의 함정을 제거한다.

시약: Sulfurous Ash, Blood Moss

Vanish

물건을 사라지게 한다. Reappear 마법으로 다시 나타나게 할 수 있다.

시약: Garlic, Blood Moss, Black Pearl

3rd Circle

Curse

타겟의 방어력을 낮춘다.

시약: Sulfurous Ash, Nightshade, Garlic

Dispel Field

Fire, Poison, Sleep 필드 제거.

시약: Black Pearl, Sulfurous Ash

Fireball

Hurls a mighty flaming missile at your opponent

시약: Sulfurous Ash, Black Pearl

Great Light

Light 보다 시간이 오래 지속된다.

시약: Sulfurous Ash, Mandrake Root

Magic Lock

Applies a magical lock to a chest or door

시약: Sulfurous Ash, Blood Moss, Garlic

Mass Awaken

잠든 사람을 깨운다. 퀘스트 진행 시 유용함. ;)

시약: Ginseng, Garlic

Mass Sleep

Induces sleep in all beings in the area targeted by the caster

시약: Ginseng, Nightshade, Spider's Silk

Peer

자신이 있는 위치를 확인한다. Gem을 사용한 것과 같은 효과.

시약: Nightshade, Mandrake Root

Protection

대상의 방어력과 용기(?)와 지능을 증가시킨다.

용암지역이나 Fire/Poison/Sleep 지역을 피해없이 지나갈 수 있게 됨.

시약: Sulfurous Ash, Ginseng, Garlic

Repel Undead

시야에 보이는 언데드를 도망가게 만든다.

시약: Garlic, Sulfurous Ash

4th Circle

Animate

물건에 생명을 부여하여 움직이게 만든다. 하지만 시전자가 컨트롤 할 수는 없다.

시약: Sulfurous Ash, Mandrake Root, Blood Moss

Conjure

전투를 도와주는 야수를 소환한다.

시약: Spider's Silk, Mandrake Root

Disable

대상에 거의 죽음에 이르는 데미지를 준다.

날개 달린 가고일, 드래곤, 데몬에게는 통하지 않는다고 한다.

시약: Nightshade, Spider's Silk, Mandrake Root

Fire Field

Creates a searing wall of fire

시약: Black Pearl, Sulfurous Ash, Spider's Silk

Great Heal

한 명의 HP 완전 회복.

시약: Ginseng, Spider's Silk, Mandrake Root

Locate

자신의 위치를 파악한다. 육분의(sextant)와 같은 역할.

시약: Nightshade

Mass Dispel

광역 Dispel Magic.

시약: Garlic, Ginseng

Poison Field

Creates a wall of noxious gases

시약: Nightshade, Spider's Silk, Black Pearl

Sleep Field

Creates a wall of sleep-inducing energy

시약: Ginseng, Spider's Silk, Black Pearl

Wild Change

시전자가 원하는대로 바람의 방향을 바꾼다.

시약: Sulfurous Ash, Blood Moss

5th Circle

Energy Field

Creates an impassable wall of energy

시약: Mandrake Root, Spider's Silk, Black Pearl

Explosion

폭발을 일으킨다. 주위에 파티원이 있다면 파티원도 피해를 입는다.

시약: Mandrake Root, Sulfurous Ash, Black Pearl

Insect Swarm

Conjures up a swarm of insects to aid you in combat

시약: Blood Moss, Spider's Silk, Sulfurous Ash

Invisibility

대상을 투명 상태로 만든다.

시약: Nightshade, Blood Moss

Lightning

Hulrs a powerful bolt of lightning at your opponent

시약: Black Pearl, Mandrake Root, Sulfurous Ash

Paralyze

적을 마비시킨다.

시약: Spider's Silk, Sulfurous Ash, Nightshade, Black Pearl

Pickpocket

물건을 훔친다. 카르마 5 감소.

시약: Blood Moss, Spider's Silk, Nightshade

Reveal

투명한 적을 찾아낸다.

시약: Spider's Silk, Nightshade, Mandrake Root

Seance

죽은 자와 대화할 수 있도록 한다.

시약: Blood Moss, Mandrake Root, Nightshade, Spider's Silk, Sulfurous Ash

X-ray

맵의 안보이는 부분을 투시로 볼 수 있게 한다.

시약: Mandrake Root, Sufurous Ash

6th Circle

Charm

적을 유혹하여 우리편으로 만든다.

시약: Black Pearl, Nightshade, Spider's Silk

Clone

생물체를 복제한다. 역시 직접 컨트롤은 불가능하다.

시약: Sulfurous Ash, Spider's Silk, Blood Moss, Ginseng, Nightshade, Mandrake Root

Confuse

적들을 혼란시켜 자기들끼리 싸우게 만든다.

시약: Mandrake Root, Nightshade

Flame Wind

원하는 방향으로 불의 바람을 날린다.

시약: Sulfurous Ash, Blood Moss, Mandrake Root

Hail Storm

Brings down a storm of hailstones upon the caster's enemy and the surrounding area

시약: Blood Moss, Black Pearl, Mandrake Root

Mass Protect

광역 Protection.

시약: Sulfurous Ash, Ginseng, Garlic, Mandrake Root

Negate Magic

일정 시간동안 아군/적군 가리지 않고 마법을 사용하지 못하게 함.

시약: Garlic, Mandrake Root, Sulfurous Ash

Poison Wind

Sends a gale of noxious wind in the direction of your foes

시약: Nightshade, Sulfurous Ash, Blood Moss

Replicate

마법력이 없는 물건을 복제한다.

시약: Sulfurous Ash, Spider's Silk, Blood Moss, Ginseng, Nightshade

Web

Lay's a fine, sticky web upon the ground to hinder a foe's progress

시약: Spider's Silk

7th Circle

Chain Bolt

라이트닝 볼트가 적들 사이를 왔다갔다하며 데미지를 준다.

적들이 모여있다면 좋은 마법.

시약: Black Pearl, Mandrake Root, Sulfurous Ash, Blood Moss

Enchant

Staff에 마법을 저장하는 마법.

시약: Spider's Silk, Mandrake Root, Sulfurous Ash

Energy Wind

Sends a gale of wind in the direction of foes

시약: Mandrake Root, Nightsahde, Sulfurous Ash, Blood Moss

Fear

Causes all evil foes in the area to flee in terror

시약: Nightshade, Mandrake Root, Garlic

Gate Travel

Teleports the caster's party to a moonstone location determined by the moonphase

시약: Sulfurous Ash, Black Pearl, Mandrake Root

Kill

적을 일격에 죽인다. 날개 달린 가고일, 드래곤, 데몬에게는 통하지 않는다고 한다.

시약: Black Pearl, Nightshade, Sulfurous Ash

Mass Curse

광역 Curse. 범위에 포함되는 아군도 영향을 받는다.

시약: Sulfurous Ash, Nightshade, Garlic, Mandrake Root

Mass Invisibility

광역 Invisibility 마법.

시약: Mandrake Root, Nightshade, Blood Moss, Black Pearl

Wing Strike

Sends a powerful dragon's wing against your opponents

시약: Blood Moss, Spider's Silk, Mandrake Root, Sulfurous Ash

Wizard Eye

천리안. Crystal Ball과 같은 효과이다.

시약: Blood Moss, Nightshade, Mandrake Root, Sulfurous Ash, Black Pearl, Spider's Silk

8th Circle

Death Wind

죽음의 바람. Kill 의 발전형.

시약: Mandrake Root, Nightshade, Sulfurous Ash, Blood Moss

Eclipse

잠시동안 일식이 일어나도록 한다. (어디에 쓰는 마법일까?)

시약: Mandrake Root, Sulfurous Ash, Nightshade, Garlic, Blood Moss

Mass Charm

광역 Charm.

시약: Black Pearl, Nightshade, Spider's Silk, Mandrake Root

Mass Kill

광역 Kill.

시약: Black Pearl, Nightshade, Mandrake Root, Sulfurous Ash

Resurrect

죽은 사람을 부활시킨다.

시약: Garlic, Ginseng, Spider's Silk, Sulfurous Ash, Blood Moss, Mandrake Root,

Slime

시전자의 모든 적들을 슬라임으로 바꾼다.

시약: Blood Moss, Nightshade, Mandrake Root

Summon

전투를 돕는 데몬을 소환한다.

시약: Mandrake Root, Garlic, Blood Moss, Spider's Silk

Time Stop

시전자와 시전자의 파티원을 제외한 세계의 시간을 멈춘다.

시약: Mandrake Root, Garlic, Blood Moss

Tremor

Causes the ground to shake, injuring all beings in the affected area

시약: Blood Moss, Sulfurous Ash, Mandrake Root

Armageddon

시전자를 제외한 전 세계의 모든 생명체를 없앤다.

시약: 8가지 재료 모두.




=== 룬 문자 ===

(출처: http://en.wikipedia.org/wiki/File:Britannian_runes.png)




=== 지도 ===

http://wiki.ultimacodex.com/wiki/File:U6map.jpg

: 정품 패키지에 포함된 헝겊 지도





=== 게임을 시작하자 ===

(Create Character)

오프닝이 끝나고 처음 시작화면에서

'C'키를 입력하면 캐릭터 생성화면으로 넘어간다.

집시의 질문에 따라, 미덕(virtue)를 선택하자.

선택하는 미덕에 따라 주인공의 능력치가 달라진다.


(Introduction)

TV를 보던 아바타는 밖에서 이상한 돌을 발견하고,

갑자기 열린 문게이트를 통해 울티마 세계로 가게 된다.

울티마 세계로 가게 된 아바타는 가고일들에게 붙잡혀 제물이 될 위기에 처한다.

이 때, 문게이트를 통해 등장한 Dupre, Shamino, Iolo에 의해 구출된다.

그리고 가고일이 들고 있던 책을 챙기고 문게이트를 통해 도망친다.


(Journey Onward)

게임은 주인공이 도망친 문게이트를 통해 쫓아온 가고일과의 전투로 시작한다.

가고일을 모두 처치하고 ‘B’키를 눌러 전투를 끝내자.

전투가 끝나면 시체를 ‘L’로 살펴보고 쓸만한 아이템을 가지자.


먼저 왼쪽의 마법사 Nystul에게 말을 걸면 다음과 같은 대화가 이어진다.


(Nystul)

당신(Avatar)이 위험한 것을 감지하고 당신을 돕기 위해 사람들을 보냈소.

Iolo, 가고일에게서 가지고 온 책을 내가 살펴봐도 되겠나?”

(Iolo)

물론입니다. 저보다는 이 책에 대해서 더 잘 아실 것 같군요.”

(Nystul)

이상해... 이 책의 표지는 가고일이 쓰러진 사람의 가슴에 발을 올리고 서 있군. 흥미로워.

이 책은 내가 모르는 언어로 써져 있소.

이것을 Lycaeum에 있는 Mariah에게 가지고 가 보시오.

Mariah는 마법평의회에서 가장 유능한 학자라오

그녀는 많은 언어들을 연구해 왔으니 아마도 이 책을 해석 할 수 있을것이오.

그런데 당신이 붉은 게이트웨이를 통해 이곳으로 온 것을 알고 있다오.

그 게이트를 연 돌을 가지고 있소?

그것은 어디로부터 온 것인지... 아마도 가고일이겠지요?

Lord Biritish에게 돌(stone)에 대해서 물어보는 게 좋겠소.

그는 그러한 물건에 대해 알고 있을 것이라 생각되오.”


이제 Lord British에게 말을 걸자.


(Lord British)

다시 보게 되어 반갑네.

자네가 이 세계를 떠난 후 많은 일이 있었다네.

하지만 먼저 진짜 자네가 맞는지 확인해야겠네.

진짜 Avatar라면 내가 보낸 전서에 쓰여진 것을 알겠지.”

(매뉴얼 프로텍션을 확인하여 질문에 대답을 하자)

, 정말 자네가 맞군. 이 열쇠(key)를 가져가게.

이것으로 성 남쪽 입구 옆에 있는 건물을 열 수 있지.

건물 내부에 있는 손잡이를 이용하면 격자 문을 올릴 수 있고,

크랭크로 도개교를 내릴 수 있다네.

그 열쇠로 성 지하의 하수구로 들어가는 문도 열 수 있을걸세.

이제 자네가 마지막으로 온 이후로 무슨 일들이 있어났는지 알려주겠네.


자네가 날 구출해냈던 거대한 지하세계는 붕괴되었네.

하지막 악의 세력들은 여전히 세상에 널려 있네.

브리타니아는 자네가 싸웠던 것들과 비슷한 가고일들로부터 공격받고 있네.

그것들은 던전을 통해 올라오고 있네.

지금까지 그들은 8개 미덕(virtue)의 성소(shrine)를 주로 공격하고 있네.

동정(Compassion)의 성소가 함락되자 Geoffrey 경이 성소를

탈환하고자 일개 부대를 파견했네. 그 임무에 대해서는 그에게 물어보게.

아마 자네에게 도움이 될 걸세.


여기에 머무는 동안, 자네를 위한 방을 마련해 두었네.

성의 서쪽 방향에 있네. 내 방의 바로 남쪽이지.

하인들을 시켜 거기 장비를 좀 모아 두었네.

자네에게 필요할 것 같아서 말이야.

성에서 필요한 것이 있다면 자유롭게 빌려가도 좋네.


마지막으로 치료(healing)가 필요하다면 언제든지 내게 부탁하게.

이 모든 이야기를 다시(repeat) 듣고 싶다면 이야기 하게.”


이제 Lord British에게 'stone'에 대해 물어보자.

(당신은 검은 돌을 Lord British에게 보여준다.)

(Lord British)

... 자네도 기억하겠지만 나도 이런 돌을 가지고 있네.

이런 구슬이 또 있을 줄은 몰랐군.

자네가 구슬의 힘을 익히게 되면 여행이 수월해질 걸세.

문을 열기 위해서는 돌을 사용하고 자네로부터 몇 걸음 떨어진 곳에

조심스럽게 내려놓게. 놓은 위치가 중요하다는 걸 알게 될 걸세.

올바른 위치라면, 돌이 만드는 문을 통해 여러 장소로 이동할 수 있다네.”


이제 orb of the stone을 사용할 수 있게 된다.

마지막으로 Geoffrey에게 말을 걸자.


(Geoffrey)

"나는 Compassion of Shrine을 탈환하기 위해 열 명의 병사를 보냈네.

, 그들은 참담하게도 실패했어. 생존자들은 Cove 마을에서 회복 중이지.

우선 그들을 만나 이야기 해 보는게 좋을 것 같네.

아마 그들이 당신을 도울만한 것을 알게 되었을 수도 있겠지.

내가 최악의 경우를 두려워한다는 것을 고백할 수 밖에 없겠군.

가고일은 정말 강력한 적이고, 너무 빠르게 퍼져나가고 있어.

아마 이 세계의 끝이 가까워 오는 건지도 모르겠군.

행운을 비네. 당신을 위해 기도하겠네.”


대화가 모두 끝나면, 브리튼 성에서 필요한 물건들을 챙기고

가고일들로부터 세상을 구하기 위해서 모험을 떠나자.




(문서버전: 1.2)

1.2 – (2013.6.22) 폰트 변경

1.1 – (2013.6.21) 문서 스타일 수정 및 ‘게임을 시작하자’ 부분 수정 .

1.0 – (2013.6.20) 최초 문서 작성


(작성자: 아자 - http://azza.tistory.com)

(참고: Ultima VI Compendium)

(License: CC-BY-SA)




PDF 파일: Ultima VI Basic.pdf 

반응형

설정

트랙백

댓글

Bash 에는 History 기능이 있어서 Up/Down 키로 이전 명령들을 찾을 수 있다.


이것을 좀 더 편하게 사용하는 방법 중 하나는,

특정 문자로 시작하는 이전 명령만 찾는 것인데,

이렇게 사용하기 위해서는


~/.inputrc 파일에

"\e[A":history-search-backward

"\e[B":history-search-forward

위와 같은 내용을 추가시켜 두면 사용가능 하다.


예를 들면


./build 라고 입력 후, Up/Down 키로 이전에 입력했던 명령 중

./build 시작하는 History 만 검색이 가능하다.


반응형

설정

트랙백

댓글

Blogger로 이동합니다. T* 타입 (포인터의 vector 정렬에 대해 궁금하시다면 아래로...)


https://ommokazza.blogspot.com/2020/10/stl-vector-object-pointer.html



반응형

설정

트랙백

댓글

Head First Design Patterns 1장 디자인 패턴 소개.


스트래티지 패턴(strategy pattern)

: 객체의 Action 의 내용을 캡슐화 하여 교환해서 사용할 수 있도록 만든다.


책에서 처음 설명하는 Duck 클래스는,

quack() 메소드와 fly() 메소드를 별도의 인터페이스로 분리하고

이 인터페이스를 구현하는 클래스를 만들어 사용하는 것이다.


그리고 Duck 을 상속받은 클래스는,

생성자에서 해당 클래스에 맞는 quack() 와 fly() 인터페이스를 구현한 클래스를 

사용하도록 한다.


수많은 Sub class 가 몇 가지 중복된 행동에서 한 가지를 선택해야 하는 경우라면,

코드 재사용 및 유지 보수를 한꺼번에 해결 할 수 있는 좋은 패턴이다.


하지만 스트래티지 패턴의 더욱 큰 장점은

실행시간에 Action의 내용 (알고리즘, 즉 메소드의 내용)을 바꿀 수 있다는 것이다.


예를들면, 액션 게임의 케릭터가 무기가 바뀌었을 때,

스트래티지 패턴을 사용하였다면, 단순히 attack() interface 를 구현한 클래스만 교체해 주면 해결된다.


과연, 책의 1장에서 소개해 줄 만한 쉽고도 강력한 패턴이다.


예제코드 (원문: http://en.wikipedia.org/wiki/Strategy_pattern#Example)


반응형

설정

트랙백

댓글

NES용 파판3 수련도 GG 코드입니다.

OXVLXIIV 


다른 GG 코드를 원하시면, 500원.... (이제 한 물 갔지요?)


아래 사이트에서 Final Fantasy 3j 로 검색해 보시길...

http://www.angelfire.com/games2/codehut/NES.htm

반응형

설정

트랙백

댓글

월요일은 참 일하기 싫은 날입니다.


저도 계속 방황하다가 전부터 생각하고 있던,

NES 용 파판3의 수련도 Game Genie 를 찾아보기로 했습니다.

하지만 어느 사이트에도 수련도 관련 정보는 없기에,

결국 직접 찾기로 결정하였지요.


아래는 그 간단한 방법을 소개합니다.

음.. 설명이 간단하다는 말이고요,

실제로는 디버거를 다룰 수 있는 분이어야 가능하겠네요.


원하는 GG 코드를 찾아보려고 생각해 보신 분이 있다면, 도전해 보시길....


NES Game Genie 코드 찾기 및 만들기.

1. 필요한 툴

   FCEUXD SP (FCEUXD 에 디버깅 기능을 추가한 브랜치.)
   다운로드 - http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP

2. 기타 필요한 정보
   6502 Instruction Set - http://www.masswerk.at/6502/6502_instruction_set.html

   ( NES 에 사용된 CPU 의 코어 )

3. 초간략한 방법
   a) FCEUXD SP 로 게임을 실행 한 후, Cheats 로 원하는 메모리 주소(Data 영역)를 찾는다.
   b) DEBUG 로 해당 메모리 주소에 Read/Write Break Point 를 걸어 해당 값을 참조하는 Code 영역을
      찾는다.
   c) 해당 코드 전후로 디버거의 어셈블 코드를 확인하여 적절한 수정위치를 찾은 뒤,
      Game Gene Encode/Decoder Tool 로, (Address, 원래값, 수정할값)을 넣어,
      생성된 GG 코드를 확인한다.     


반응형

설정

트랙백

댓글

오늘 아침 구글 리더에 접속했다가,

7월 1일부로 구글 리더 서비스가 종료된다는 팝업이 뜨는걸 보고 "뜨악~" 했습니다.


라디오 키즈님의 글에서 우려하 듯

http://www.neoearly.net/2466183?_new_tistory=new_title

저도 블로그 + RSS 서비스의 위축이 제일 걱정됩니다.


아무리 트윗/페북/구글+ 같은 SNS 가 대세라지만,

블로그는 블로그만의 영역이 있는데 말이죠.


물론 다른 RSS 서비스 업체를 찾으면 되지만,

아쉬운 건 어쩔 수 없네요.


여러 사람들이 구글 리더 서비스 중단에 우려를 나타내고 있던데,

구글이 사용자들의 의견을 존중하여 계속 서비스를 이어갔으면 좋겠습니다.


반응형

설정

트랙백

댓글

Google Open Source Blog 글

zopfli 프로젝트 홈


구글에서 몇 일 전에 zopfli (좁플라이)라는 새로운 압축 알고리즘을 공개했는데,

다들 오해하고 있는 부분이 있는듯 해서, 글 한번 남겨봅니다.


일단 중요한 부분, 실제 압축 효율이 다른 압축 알고리즘에 비해 좋은가?

==> 아닙니다. 실제 압축률은 rar 이라던가 7zip 이 더 좋습니다.


그럼 이게 무슨 의미가 있는가?

==> zlib 호환 압축 알고리즘이라는 것입니다.

     즉, 기존에 zlib 기술을 사용하던 분야에서 압축 해제 프로그램의 업데이트 없이 적용이 가능하다는 것이지요.

     위 블로그에 적힌 것 처럼 gzip, Zip, PNG, HTTP requests 등의 비트 스트림 압축부분에 적용한다면,

     인터넷 트래픽을 획기적으로 줄일 수도 있을 것입니다.


100배나 느리다는데?

==> zopfli 프로젝트 홈에 표시되어 있기로는 ~100x slower 라고 표시되어 있습니다만,

      블로그 글에 따르면 cpu 소요시간으로 따지면 zlib 최대 압축으로 했을 때 보다

      2-3 배 정도 차이난다고 되어 있습니다.

      사람들이 이것을 두고 누가 쓰겠냐? 라고 하는데...

      구글이 그 정도 테스트도 안하고 오픈했을까 싶네요.

      보통 압축은 한 번만 하면 되는 것이고 실제 트래픽의 5%만 줄일수 있다고 해도

      그 비용은 상당히 클테니깐요.


특별히 클라이언트가 해야 할 것이 없으니 알게 모르게 어느 순간 우리에게 다가와 있을것 같네요.

보이지 않는 영역에 까지 세상을 바꾸려는 노력을 하고,

그 노력을 공개한 구글에게 박수를 보내며 이만~

반응형

설정

트랙백

댓글

원래 Windows 환경에서 사용할 만한 컴파일러와 IDE 에 대한 이야기를 쓰려다가,

msys 에서 아래와 같은 에러가 발생하여, 여기에 대한 내용부터 기록에 남긴다.


*** Couldn't reserve space for cygwin's heap (0xXXXXXXXX <0xXXXXXXX>) in child, Win32 error 0


집에서는 잘 되는데, 회사에선 항상 저런 메시지를 내면서 msys 의 대부분의 실행 파일들이 동작하지 않는다.


간단하게 결론부터 말하면 child process 가 fork() 될 때,

dll 파일이 로드되는 메모리 주소가 서로 다르게 되어 fork() 가 실패하기 때문이다.

( 이게 무슨 말이냐 라고 묻는다면, 납득할 만하게 설명할 자신은 없다. -_-;;

  좀 더 자세한 설명을 원한다면 아래 포스트를 읽어보라.

  http://old.nabble.com/Re%3A-fork-problem-on-Windows-XP-64-bit-p31154393.html )

( 예전에는 cygwin 에서도 이러한 에러 메시지를 본 기억이 있는데,

  최근에는 cygwin setup 시에 dll 파일들의 base address 를 재설정 한다고 하는 듯하다. )


이리저리 구글링 좀 해 본 결과, 아직까지 근본적인 해결방법은 없는듯 한데,

실제로 msys 의 릴리즈 노트를 봐도 저 문제를 해결하지는 못하고

다만 rebase 되는 상황을 최소화 하기 위해 msys-1.0.dll 파일의 base address 를 바꾸었다고 되어있다.

( 분명 Windows 는 dll 파일을 로드할 때, 주소 충돌이 생기면 base address 를 알아서 조정한다고 했던거 같은데, 

 왜 msys 에서는 안되는지 잘 모르겠다. dll 파일 자체에 해당 기능을 enable 하는 플래그가 있다고 본 거 같다.

 하지만 더 구체적인 근거를 찾기엔 시간도 부족하고... 해서 패스 )


어쨌든 저러한 문제가 생기면 msys 에 포함된 dll 파일들의 base address 를 바꾸어 주어야 하는데,

이 때 사용하는 프로그램이 rebase 프로그램이다.

문제는 msys 에 포함된 rebase 를 실행하기 위해서는 msys-1.0.dll 이 필요하다는 거.

그래서 msys-1.0.dll 이 의존적이지 않는, Win32 native binary 가 필요한데,

직접 빌드하려 소스를 열어보니 익숙치 않은 autoconf, automake 조합으로 빌드되도록 되어있다.

하지만 나와 같은 (그리고 이런 문제를 만난 다른 많은 사람들과 같은) 생각을 가진 분이

이미 빌드해 놓은 파일이 있었다.


소스: http://repo.or.cz/w/msysgit.git/tree/322c42c780833a52bd7cd0358a562ab243ecfbce:/src/rebase

바이너리: http://repo.or.cz/w/msysgit.git/history/76920dc49da361257cbccb02ea63b3e5357fe353:/bin/rebase.exe


위 툴을 받아, msys 의 bin 디렉토리에 복사를 한다. (보통 C:\MinGW\msys\1.0\bin 일 것이다.)

그리고 해당 디렉토리에서 cmd 창을 열고 아래와 같이 입력한다.

C:\MinGW\msys\1.0\bin>rebase -b 0x30000000 msys-1.0.dll

새로운 Base 주소는 각자 적당히 찾아서 적으면 될듯 하다.

그리고 이제 다른 dll 파일들에 대하여 rebase 작업을 한다.

이제 MinGW Shell 을 열어도 에러가 뜨지 않으니, MinGW Shell 을 열고,

$ mingw-get install msys-rebase

를 실행한다. 위 명령을 성공적으로 실행되면, MinGW Shell 을 닫고,

탐색기에서 msys 의 bin 디렉토리로 이동하여 dash 를 실행한다.

그리고 아래와 같이 입력한다.

/bin/rebaseall

만약 에러 메시지가 출력된다면, (예를 들면 read-only 속성이 걸려 있다던가...)

에러 메시지를 보고 적절한 조치를 취해 준 뒤 다시 실행한다.


마지막으로

/bin/peflagsall

을 해주면,

(위에서 이야기 했던) dll 파일에 dynamicbase flag 를 set 한다고 되어 있다.

dash 에서는 현재 환경을 MinGW32 로 인식하고 있어서 별 다른 작업을 하지는 않는데,

실제 문제가 되는 건 msys 기 때문에 스크립트 파일의 Platform 환경변수를

강제로 바꾸어 주어야 되는지는 잘 모르겠다.

써 보다가 문제가 생긴다면 고려해 봐야할 듯.


P.S

아무래도 생각해도 이 에러가 발생한 건,

회사의 보안 프로그램이 해당 영역을 이미 차지하고 있기 때문이라는 생각이 든다.


반응형

설정

트랙백

댓글

In Code::Blocks can set programs arguments in IDE ("Project > Set programs' arguments...")

But in windows version, the redirection is not working.


How to make it enable?


The problem is the 'cb_console_runner.exe'.

That use CreateProcess() function to start the child process.

Unfortunately, CreateProcess() CAN'T handle redirections.

Why does 'cb_console_runner.exe' use this function?


It is written in source code.

    //Windows's system() seems to not be able to handle parentheses in
    //the path, so we have to launch the program a different way.

( See this svn log. )


So I complied the 'cb_console_runner.exe' using system() instead of CreateProcess().

In my windows7, It works well and it seems that there is no problem about parentheses.

( That was modified in 2006. Now does it fixed?. I don't know. )


Anyway I replaced the 'cb_console_runner.exe' with my own build.

If anyone having a redirection problem in windows version of Code::Blocks, try this one.

cb_console_runner.exe

(Just copy to where Code::Blocks installs and replace original file with this)


Or you can build it easely with just a few modification. (That's why I didn't attach soruce code.)

I modified and built this in Code::Block. ;)


P.S

영어로 쓰고 나니 진에 빠져서, 한글로 내용을 다시 쓰는건 패스.

도대체 구글링 해도 시원하게 답해주는 사람이 없어서,

직접 원인을 찾아서 수정한 버전을 사용하기로 함.

반응형

설정

트랙백

댓글