배수 피처 슬롯의 스캐터 배수 적용 규칙과 총 당첨금 공식
배수 피처가 있는 슬롯에서 당첨금 계산이 레퍼런스 슬롯(5 Dragons Rapid)과 달랐다. 스캐터가 당첨되지 않은 일반 심볼 라인에도 배수가 붙었고, 스캐터가 여러 개 당첨되면 배수가 여러 번 곱해졌다.
예를 들어 “9-sct-9-sct-9”이고 스캐터 배수가 10배일 때, 우리 게임은 20배로 계산했지만 레퍼런스 슬롯은 10배로 계산한다.
레퍼런스 슬롯의 규칙
섹션 제목: “레퍼런스 슬롯의 규칙”레퍼런스 슬롯의 플레이 영상(https://www.youtube.com/watch?v=b6OvbhZrQ60, 5분 22초~5분 47초)과 페이 결정 방식을 보고 규칙을 정리했다.
- 스캐터에 당첨되지 않은 라인에는 배수를 적용하지 않는다.
- 스캐터가 여러 개 당첨되어도 배수는 한 번만 적용한다.
레퍼런스와 다른 부분은 위 두 규칙에 맞췄다. 다만 All-ways 라인 당첨 계산 방식은 다른 슬롯과 함께 쓰는 공용 로직이라 건드리지 않았다. 공용 로직을 바꾸지 않고 결과만 바로잡는 방향으로 공식을 세웠다.
총 당첨금 공식
섹션 제목: “총 당첨금 공식”- As-Is:
Linebet × 당첨 라인 수 × 라인 당첨금 × 배수 - To-Be:
As-Is − {Linebet × 일반 심볼 당첨 라인 수 × 일반 심볼 라인 당첨금 × (배수 − 1)}
문제는 스캐터 없이 일반 심볼만으로 당첨된 라인에도 배수가 붙는 것이었다. 그래서 일단 모든 당첨금에 배수를 곱한 뒤, 일반 심볼 라인에서 배수로 부풀려진 몫을 빼서 원래 받아야 할 일반 심볼 당첨금만 남긴다. × (배수 − 1)만큼 빼면 일반 심볼 라인은 배수 1배, 즉 원래 금액으로 돌아간다.
와일드가 낀 당첨에서, 각 릴의 일반 심볼 매치 수를 곱한 weight로 일반 심볼 조합 몫을 구하고 그만큼 배수를 덜어 낸다.
Legend* pRefLegend = win.second;
if (pRefLegend->pPayRule && 0 < pRefLegend->GetNumPrizes() && (pRefLegend->GetPrize(0)->type == PrizeType::Credit || pRefLegend->GetPrize(0)->type == PrizeType::LineBet || pRefLegend->GetPrize(0)->type == PrizeType::TotalBet)){ bool hasWild = false; int weight = 1; for (int32_t reel = 0; reel < pRefLegend->numMatches; reel++) { int numMatchInColumn = result->GetNumOriginSymbolInColumn(pRefLegend->pLegendSymbol->id, reel); int wdMatchInColumn = result->GetNumMatchInColumn(pSymbolWD->id, reel);
if (wdMatchInColumn > 0) hasWild = true;
weight *= numMatchInColumn;}
if (hasWild){ if (pRefLegend->GetWinMultiplier() > 1 && weight > 0) { int64_t mulitplier = result->wildMultiplier * pRefLegend->GetWinMultiplier() - (result->wildMultiplier - 1) * weight; win.second = result->CreateNewWinMultipliedAndSet(mulitplier, pRefLegend); } else { win.second = result->CreateNewWinMultiplied(result->wildMultiplier, pRefLegend); }}정리한 규칙과 공식은 서버 개발 쪽에 전달했다.