효과 무효, 효과 수정, 공격증감 반대로, 폴포지션, 반복횟수가 몇번이상이면 강제 효과종료, 파괴하는 효과 무효 혹은 다른 효과로 교체, 스텐바이 페이즈, 데미지 스탭계산, 지속효과, 공격했는지 어떤방식으로 소환했는지 검사 등등
이런걸 코드로 구현해보려고 옵저버 패턴을 구상했는데도, 이렇게 구현하면 효과 수정이나 그런곳에서 막히고, 후크 방식으로 구상하면 효과의 결과를 예측해야하는 효과에서 막히는데, 좋은 방법없을까요?
- dc official App
이벤트화 - dc App
그게 참 어떻게 짜야할지...간단한 공격반응이나 몬마함카드 종류따라 효과체크하는건 쉬운데, 몇몇장은 효과자체가 트릭키하다보니 그렇게 짜면 효과를 쓸수 없게되더군요. 예를들어 심술꾸러기의 저주같은경우 효과자체를 뒤집어 버리는 카든데, 이건 이벤트화로 구현한 게임에선 구현이 답이 없고, 암흑계처럼 상대 효과를 아예 다른 효과로 교체해버리는(패를 버리는 효과로 바꾼다) 카드는 이벤트로 구현 못하니까요(이벤트로 구현시 다음의 효과를 없애고 자기 효과로 바꿔야하는데 다음 코드를 통째로 원하는 부분에서 교체하는 부분에서 막히더군요. 결국 모든 처리마다 계속 if문으로 무효가 됐는지 확인 시키는 방식이면, 다른 트릭키한 카드가 계속 추가될때마다 기존카드의 소스코드들을 다 수정해야하고) - dc App
@ㅇㅇ 다른 카드게임도 해봄? - dc App
@Indie1(221.160) 다른 카드게임의 알고리즘은 비교적 쉽더라고요. 예를들어 뱅가드는 효과처리를 막는 계통의 카드가 없으니 순차적으로 실행하고, 트리거 체크 후 공격 변동에서 승패확인하면되니 시퀸스가 직렬적이라 걍 구현하면 끝이었고. 하스스톤도 상대 행동을 막는 수준의 카드는 얼방이나 그런 비밀카드라서 체크하기 편하고, 효과자체도 유희왕 만큼이나 트릭키한 편이 아니라서 추후 복잡한 메커니즘의 카드가 나올까 걱정할 필요 없어서 각 행동마다 후크잡아서 체크하면되는데, 유희왕은 효과들자체가 특정 효과가 포함되면 무효, 필드를 벗어나면 무효(그런데 뒤집는건 오케이), 특수소환된 카드면 무효(혹은 일반소환된 카드면 유지) 같은 카드자체의 과거역사까지 기록해서 체크하고, 효과가 아직 일어나지 않았는데, 그 예상결과까지 - dc App
@Indie1(221.160) 예측해야 되는 카드도 존재하는지라 어떻게 효과를 구현해야할지 - dc App
@ㅇㅇ 매직 더 개더링 해보고오셈. - dc App
@Indie1(221.160) 매더게도 골치아프긴하죠. 카드 떨궈서 맞은카드를 버리는 카드라던가, 몇턴전을 참조하는카드까지 있으니...그래서 그런 효과처리는 어떻게 구현해야할까요? - dc App
@ㅇㅇ 하스스톤 유희왕 등등 모든 트리거 다 매직 더 개더링에 있다고 생각하면되고 게임성은 좀 ㅂㅅ같아도 프로그래머입장에서보면 처리순서 다 보임 - dc App
@Indie1(221.160) 카드게임류는 대부분해보거나 연구했다고 자부하는데 코드로 짜려니 - dc App
@ㅇㅇ 효과 반대는 대상이 반대가 되는것도 아니고 데미지를 준다를 회복하거나 하는식이잖음. 데미지를 주거나 회복하는 효과발동 if 필드에 "특정카드"가 존재하는지 확인 존재하면 데미지or회복×-1 리턴 아니면 그냥 리턴 이런식이잖음 - dc App
@Indie1(221.160) 하지만 그렇게 구현하려면 모든 장착마법과 지속마법등에서, 공격력 증감수치를 변수로 등록해 심술꾸러기의 저주만을 위해 체크하는 부분을 추가해야하는데, 이게 초기카드라서 앞으로 나올 모든 카드에 그런 체크를 넣을수 있는거지, 후반에 나오는 카드였다면 기존의 장착마법 지속마법, 기타등등 증감계 효과들 코드를 다 일일이 수정해야할텐데, 이런걸 디커플링하는 방법은 없을까요? - dc App
@Indie1(221.160) 그나마 생각했던 방법이 과거기록 매니저로 매 효과처리 페이즈처리 기록해두고, 효과텍스트를 하스스톤처럼 키워드 방식으로 만들어서 효과가 이 카드 발동조건에 해당하는지 매 행동마다 체크하는건데, 이 방식을 쓰면 성능이 개판나더라구요 흑... - dc App
그럼 이렇게 해야되겠네대충 효과if체크부분 체크옵션스크립트 리턴아닐시리턴체크옵션 스크립트여기에 체크할거 다 나열해서 하나씩 체크할거 적어두셈.- dc App
왜 체크할걸 하나하나 박고 체크할생각함. 체크할걸 묶어서 하나로 만들고 그걸 체크하면되는데 - dc App
@Indie1(221.160) 그...혹시 카드 예제로 알려주실수 있나요? 제 이해력이 딸려서 죄송합니다 - dc App
쉽게 말해줌. 종이 2장을 줌. 한장에는 너가 재를 때려라고 적혀있음. 그래서 때리려고 가니깐 다음줄에 다른 종이 확인해봐 이럼 다음종이 확인하니 그애 티셔츠가 파란색이야? 안경썼어? 전부다 해당하면 이전 종이로 돌아가 아니면 때리지마. 이런식임 - dc App
@Indie1(221.160) if(체크리스트 모두 오케이) 실행 else 무효 이건알겠는데, 여전히 암흑계같이 효과자체를 다른 효과로 바꿔버리거나 심술꾸러기 저주같이 액수를 뒤집거나, 이 카드가 특수소환됐는지 의식소환됐는지 소생제한 룰을 만족했는지, 머티리얼 드래곤 시모치 부작용처럼 효과의 일부분(대미지<->회복 변경), 효과의 일부분이 트리거(화염의 프린세스: 회복시 상대에게 데미지)같은건 여전히 이걸로 체크하거나 효과를 변경 못시키지 않나요? - dc App
못할건 없는데 그전에 물어볼게 있음 유희왕을 만들거임? 아니면 님만의 게임을 만들거임? - dc App
@Indie1(221.160) 매더게 같은 자유도 높은 카드겜을 만들고 싶어요. 그리고 카드겜이 아니더라도 로그라이크류를 만들때도 결국 매커니즘이 비슷할테니 연구해두면 좋을거 같아서요. - dc App
일단 둘다 10년 이상 데이터가 쌓인 기업게임임. 뭐 대비하는건 좋은데. 그것도 생각하셈. 효과가 길면 진입장벽임. 알지도 못하는 게임이.설명조차 소설이면 어떨거같음? 일부터 키워드화하는게 괜히하는게 아님 - dc App
@Indie1(221.160) 키워드화가 아무래도 중복처리나 이벤트처리시 좋죠... 음... 레고블럭처럼 효과=키워드1(변수)+키워드2(변수)+...+키워드3(변수) 이렇게 조립하는 식으로 하고, 각 키워드마다, function 키워드(변수): if(체크) 효과 사용전 트리거 호출 효과발동 효과 사용 후 트리거 호출 방식으로 가야할까봐요 - dc App
@ㅇㅇ 하려는 예시있음? 내가 생각하는거랑 전혀 다른데 - dc App
@Indie1(221.160) 예를들어 "화염의 프린세스(빅뱅걸)"의 경우 계속 특정 현상이 일어났는지 확인하는 지속 효과니까.function 지속효과(변수):효과대미지(500)function 효과대미지(변수):for i in 전역eventlist: 이벤트(변수)//효과대미지에 간섭하는 이벤트가 있으면 그 이벤트의 효과처리. 머티리얼드래곤 등이 있으면 변수에 -1을 곱하는 후크, 거기에 시모치가 또 있으면 -1을 또 곱하는 후크. 상대에게 변수만큼 대미지로 작성하고,다른 체력 회복 카드들(예 다이안캣)은function 기동효과(변수):회복(변수)function 회복(변수):for i in 전역eventlist: 이벤트(변수)//효과회복에 간섭하는 이벤트가 있으면 실행/ - dc App
@Indie1(221.160) 이런 느낌으로 가려는데, ...쓰고나서 보니 띄어쓰기가 날아갔네요... - dc App
@Indie1(221.160) 좀더 고민해보겠습니다. 상담하다보니 어느정도 윤곽이 잡혀가고 있어요 - dc App
@Indie1(221.160) 감사합니다 - dc App
@ㅇㅇ 유희왕처럼 만들고싶은거임? 하스스톤처럼 만들고싶은거임? - dc App
@Indie1(221.160) 시스템적으로 따지면 유희왕에 듀에마하고 카드리버 시스템을 섞은 느낌이에요 - dc App
@ㅇㅇ 1인 개발이면 한마디 해도돔? - dc App
@Indie1(221.160) 넵, 잔소리는 언제나 감사히 받겠습니다 - dc App
@ㅇㅇ 그러면 하지마셈. 복잡하게 하려고 하지말고 최대한 단순하게 표현하려하셈. 복잡해져봤자 밸런스잡기 어렵고, 오류생기면 혼자 오류 엄청 잡으려다가 해결못하면 그대로 펑임. - dc App
@Indie1(221.160) 그럴까요...확실히 코나미는 프로그래머 십수명이 코드를 짜니 이런 복잡한 시스템도 분산 구현가능하겠지만, 1인개발로는 그렇게 복잡하게 문제없이 패치는 못하겠죠...흑...감사합니다 - dc App
@ㅇㅇ 더군다나 한번 팩 내고 끝 할거아니면 지속적으로 내야하는데. 복잡한걸 혼자 감당하겠음? 유희왕도 초창기에 카드나올따는 효과 간단했음. 그리고 간단한 효과가 가장 쌔잖음. - dc App
@Indie1(221.160) 유희왕식 말고 하스스톤식으로 반사의 반사같은건 없애야겠네요. 퍼미션 계통만 쳐내면 직관적이게 될테니까요. 체인룰 시스템에서 나오는 복잡성이니 체인룰자체를 없애고 걍 순차처리 방식으로 가면 직관적이겠어요 - dc App
@Indie1(221.160) 그렇죠...지금도 고민중인 카드들도 초창기때 컴퓨터 게임으로 만들 생각도 안한 카드들이니 지금 저같은 고민을 하게 된거니까요. 인간이 처리하면 직관적인데 코드가 처리하면 복잡한 카드는 애초에 안내면 그만인거니까 - dc App
@ㅇㅇ 그래서 유희왕 닌텐도 게임보면 ai가 혼자 5분동안 고민패서 카드효과씀. 그래서 개인적인 생각으로는 다른 효과에 효과를 주지않는 효과들과 카드의 효과 1개 이게 적당해보임. ~~~때 ~~한다는 1개정도만 간단하면 2개. 이카드는~~~입니다는 여러개도 괜찮다고 생각해요. - dc App
@Indie1(221.160) 확실히 그러면 순차처리가 간결해지고 효과조건부와 효과실행부가 나눠지니 코드짜기에도 이해하기에도 좋겠네요. 조건부를 못막으면 실행부는 다른 효과가 있어도 실행될테니 뭐가 있던간에 실행시키면되니까요. 알고리즘이 정리가 됐어요. 몇번 디버깅하면서 머리박으면서 시도하면 풀릴수준까지 왔네요. 도와주셔서 감사합니다 + - dc App
@ㅇㅇ ~~~를 막습니다.가 카드의 효과로는 좋지만 만드는 사람 입장에서는 ~~사용할수 없습니다. 아에 시작부터 틀어막는게 버그도 안나고 편함. 다음턴 몬스터카드를 막습니다.<<효과나 이런거 처리순서 및 예외로 버그날수있음. 다음턴 상대는 몬스터 카드를 사용할수없습니다.<<그냥 못사용하는거라 근본부터 막힘. - dc App
@Indie1(221.160) 그래도 복잡한 조건 만족하면 상대 "응 무효~"이러는 반전은 버리기 아까울정도로 재밌긴 해요...음...카운터함정같이 위에 추가체인을 못만들고 종결시키게 만드는 수준이라면...음... - dc App
@ㅇㅇ 그거 잘 생각해야되는데 무효라는게 플랜을 망치는거라서 재미있다? 라고 하기에는 어려움 모든 퍼미션 다 틀어막고 응 안돼~ 하는게 당하는 입장에서 재미있다?라는건 좀 생각해야함. 수싸움을 하는거랑 틀어막히는건 다른거니 - dc App
@Indie1(221.160) 그래서 퍼미션 계통은 코스트가 무효하는 카드보다 높게(신심 같이)만들생각이에요. 유희왕은 요즘 벽이 되고 있으니까, 하스스톤이나 듀에마 식으로 코스트를 제한해두면 무효하는데도 코스트를 써야하니, 밸런싱도 될거고요. 체력 절반 까버리는는 수준의 카드거나 엄청 협소한조건을 내걸생각이에요 - dc App
@ㅇㅇ 뭐... 할말은 더 있지만... 여기까지만 하겠음 이제는 님 게임이니깐 - dc App
ygopro lua 파일이랑 슬더스 디컴파일해서 보셈
하스스톤 만들어봤는데 일단 카드가 엉청많다보니 카드효과를 만드는 에디터부터 만들어야되더라