[NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

  • View
    9.161

  • Download
    6

  • Category

    Software

Preview:

DESCRIPTION

 

Citation preview

최호영 왓 스튜디오 / 넥슨코리아

가죽 장화를 먹게 해달라니 <야생의 땅: 듀랑고>의 자유도 높은 아이템 시스템 구현

저작물 인용

저작권법 제 35조의 3 ‘공정이용’조항 에 따라

교육과 연구 목적으로 이용하고 있습니다.

강연에만 사용되며, 배포판에선 일부 제외될 수 있습니다.

아이템 게임 컨텐츠의 기본 블럭

흔한 아이템부터 시작해 볼까요

용도는 사용자가 결정한다

용도는 개발자가 결정한다 일반적인 게임에서는

의도에 벗어나는 정보는 독 복잡한 시스템과 정보는 게이머와 디자이너

프로그래머까지 혼란에 빠뜨린다.

일반적으로는 디자이너도 지나치게 복잡한 시스템은 만들어 달라고

하지 않는다.

가죽 장화를 먹게 해주세요 왜죠?

위 세션들에 따르자면 자유도와 창발성이 중요하답니다

그래서, 그게 가죽 장화 먹는 거랑 무슨 상관이 있는데요?

가죽 장화란?

대표적인 기호품

가죽: 동물의 껍질

장화: 목이 길게 올라오는 신. 가죽이나 고무로 만드는데 비가 올 때나 말을 탈 때에 신는다.

가죽 칼로리

장화 먹기 싫음 가죽 장화 가죽 장화 가죽탕

먹을 수 있음 자유도

창발성

가죽 장화를 먹게 해주세요 아이템 시스템의 자유도와 창발성을 상징

다시, 가죽 장화란? 가죽

장화

따뜻함 질김 칼로리

발에 신는 것 방어도

속성: Attribute

특성: Tag

아이템 = 특성의 조합

아이템의 생성

기존의 방식은 안 된다

재료의 특성을 유지

랜덤성도 있도록

같지만 다르다 같은 종류의 특성

비슷한 속성 값

하지만 다르다

돌연변이 예상치 못한 특성

진짜 돌연변이를 말하는 것은 아니다

계산된 돌연변이

채집 무에서 유를 창조하는 시스템

제작 속성을 변형, 조합 하는 것

아이템은 어떻게 생성될까?

소스

특성 1

특성 2 레시피

결과

특성 3

특성 4

채집 대상, 아이템

채집, 제작, 건설 아이템, 건축물

레시피를 어떻게 하지? 에이 몰라, 일단 스크립트로 해보자

근데 레시피가 너무 case by case 네…

프로토타입 Prototype Z5

태그 통나무 특성: 탈 수 있는 깎을 수 있는 속성: 건조 정도 두께 단단함 무게

탈 수 있는 관심 속성: 건조 정도 두께

깎을 수 있는 관심 속성: 두께 단단함

소나무 소나무 가지 소나무 뿌리 소나무 통나무 송진

function(bough, materials, tool){ var bough_origin = materials.wood[0]; bough.attributes.weight = bough_origin.attributes.weight+(Math.random()*0.2); bough.attributes.durationtime = bough_origin.attributes.durationtime; bough.attributes.elasticity = (Math.floor(Math.random()*4)+ bough_origin.attributes.elasticity)*0.9; bough.attributes.solidity = (Math.floor(Math.random()*2) + bough_origin.attributes.solidity *0.9); bough.attributes.thickness = bough_origin.attributes.thickness/2; bough.attributes.dryness = bough_origin.attributes.dryness; bough.attributes.length = Math.floor(Math.random()*3) + 2; bough.attributes.grip = bough_origin.attributes.grip; bough.attributes.sharpness = bough_origin.attributes.sharpness; bough.material = [bough_origin.material]; bough.label = '나뭇가지'; bough.tags = [ 'flammable', 'stick', 'blunt', 'carveable' ]

소나무 가지 생산기 채집 도구: 칼 레시피: 나뭇가지 재질: 소나무

소나무 가지 특성: 탈 수 있는, 둔기, 막대기, 깎을 수 있는 속성: 길이, 유연함 등 재질: 소나무

채집

제작 소나무 가지 특성: 탈 수 있는, 둔기, 막대기, 깎을 수 있는 속성: 길이, 유연함 등 재질: 소나무

돌날 특성: 날카로운, 날 속성: 날카로움, 단단함 재질: 돌

도끼 레시피 막대기 날 묶을 수 있는

도끼 특성: 도끼, 둔기, 막대기 속성: 유연성, 단단함, 길이, 날카로움, 손에 들 수 있음 재질: 돌, 소나무

제작 스크립트 function(axe, materials, tool){ var 도끼날 = materials.도끼날.속성 var 막대기 = materials.막대기.속성 axe.속성.날카로움 = 도끼날.날카로움 axe.속성.공격력 = (도끼날.날카로움 + 도끼날.무게) * 막대기.길이 axe.재질 = [materials.도끼날.재질, materials.막대기.재질] axe.tags = [도끼, 둔기, 막대기] }

그리고 3개월 뒤 프로토타입으로 사내 테스트

무게: 11.69kg 재료: 돌돌돌돌돌돌돌ㄷ롣롣로로

파워 돌도끼

무게: 1kg 에너지: 3071 / 100 특이사항: 지방을 지방으로 튀긴 것을 지방으로 튀긴 것을 지방으로 …

파워 튀김

그 외에도…

공격력이 1억이 넘는 칼

방어력이 너무 높아서 맞을 때 마다 피가 차는 방패

데이터 파편화 특성, 재질, 아이템 생성기, 레시피

디자이너가 직접 여러 개의 파일을 수정

스크립트 디자이너가 직접 코딩

사소한 오타부터 로직 오류까지

데이터 발산 데이터 컨트롤을 할 수 없음

엄격한 룰을 적용하면 해결할 수는 있지만..

이대로는 답이 없다

시스템 자체는 재미있다는 평을 많이 받음

고비용의 테스트

디자이너가 과로로 죽어간다

데이터 구조 변경

통나무 특성: 탈 수 있는 깎을 수 있는

탈 수 있는 속성: 건조 정도 두께

깎을 수 있는 속성: 두께 단단함

태그에 속성값을 묶음

데이터 입력 툴

웹페이지로 지원

지정된 형식으로 데이터를 작성

스크립트의 syntax오류 검증

데이터 validation

툴 타임에 데이터를 분석

파편화된 정보를 모아 서로간의 링크가 연결되지 않는 부분들을 확인

스크립트 validation

아이템 = 특성의 조합

아이템이 실체가 없다?!

변신 아이템 요구에 따라 내용이 바뀌는 아이템

유의미한 제작 결과를 뱉지는 못하지만 스크립트를 테스트해 볼 수는 있다

VALIDATOR

사내 테스트 랩터 빌드

데이터로 인한 오류의 감소

툴 타임에 데이터 오류 검증

테스트 비용의 대폭 감소

프로그래머의 로드도 대폭 감소

멘붕 감소

데이터 입력 툴은 실패

데이터를 하나씩 입력하는 방식은 실 작업에선 무리

열심히 만들었지만 실제로는 쓰이지 않음

엑셀과의 호환이나 단순 입력 이상의 기능이 필요

validation 실패 케이스 발생

스크립트의 자유도를 validator가 커버하지 못함

스크립트 안에서 분기점이 있다면?

스크립트 안에서 랜덤으로 분기를 한다면? 100번쯤 돌리면 되겠죠

자유도 및 창발적 요소의 감소

사실상 가장 큰 문제

데이터 검증을 위해서 채택한 엄격한 데이터가

재미의 근본을 해침

세번째 이터레이션 시작 언제나 즐거운 대격변 놀이

속성 개편

속성을 다시 아이템에 붙임

특성이 관심을 갖지 않는 속성들도 관리하게 함

창발적 제작을 유도하는데 필요

자동으로 붙는 특성(Tag)

속정 조건을 만족하면 자동으로 붙는 특성

비교적 간단한 규칙으로 유지

레시피와 별개의 시스템으로 창발적 플레이에 기여

스크립트 전용 인터페이스

item[‘weight’] = slots[‘stick’].avg_of(‘weight’) + slots[‘blade’].avg_of(‘weight’) item.weight = slots.stick.weight + slot.blade.weight

사용법을 최대한 단순하게

필요한 인터페이스만 노출 시키게

스크립트의 분기점 규격화

분기점을 사용하는 방식을 규격화

분석하여 테스트에 활용할 수 있도록

발산 검증 툴 (예정)

속성치를 범위로 가질 수 있는 가상의 아이템

채집, 제작의 결과물들을 누적

제작 히스토리에 있는 레시피를 다시 시도할 때 발산을 검증한다

마무리

아무리 강조해도 부족하지 않은 소통 작업자의 실수를 잡아주는 툴이 필수 빠른 이터레이션에 더 신경을 쓰자

Recommended