일련번호: SCP-2655-JP
등급: 유클리드(Euclid)
특수 격리 절차: 해석학부에서 온라인상의 SCP-2655-JP의 추적을 실행하여, 새로 시장에 출현한 SCP-2655-JP 및 그 아종이 확인되면 이용금지・효과억제를 실시한다. SCP-2655-JP가 설치된 단말기 1대를 항시 제81jh구역에 비활성 상태로 확보해 두고, 연구용 예비로서 작성된 디지털 백업과 함께 보관한다.
설명: SCP-2655-JP는 GoI-8102 (광역지정폭력단 토에이회 직계 "아리무라조")가 과거에 판매했던 기본플레이 무료 스마트폰 앱게임 "유비무스메 프리티 케지메"다. SCP-2655-JP는 iOS・안드로이드 환경에서 작동되도록 개발하여, 불분명한 방법을 통해 애플리케이션 스토어의 심사를 뚫고 배포된 것으로 보이고 있다.
아래 내용은 스토어에 전시되어 있던 SCP-2655-JP의 소개 페이지를 재단에서 박제한 것이다.
유비무스메 프리티 케지메
【★★★☆☆[3.2]】 |
|
<html ng-app="carousel" ng-controller="CarouselController">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular.min.js"></script>
<script src="https://dog-punch.wikidot.com/local--code/tes%3A10157/3"></script>
<link href="https://d3g0gp89917ko0.cloudfront.net/v--edac79f846ba/common--theme/base/css/style.css" rel="stylesheet">
<link href="https://www.scp-wiki.net/component:theme/code/1" rel="stylesheet">
<link href="https://dog-punch.wikidot.com/local--code/tes%3A10157/2" rel="stylesheet">
</head>
<body>
<div class="wrapper" id="background">
<div class="carousel">
<div class="horsie" ng-repeat="image in images track by $index"
ng-class="[index > $index ? 'past' : null,
index === $index ? 'present' : null,
index < $index ? 'future' : null]">
<img ng-src="{{image}}">
</div>
</div>
<div class="arrow decrementor"
ng-class="index === 0 ? 'inactive' : 'active'"
ng-click="increment(-1)">
<div class="image"></div>
</div>
<div class="arrow incrementor"
ng-class="index === images.length-1 ? 'inactive' : 'active'"
ng-click="increment(1)">
<div class="image"></div>
</div>
<div class="bubble-holder" ng-class="[options === 'yes' ? null : 'invisible']">
<div class="bubble" ng-repeat="image in images track by $index"
ng-class="[index === $index ? 'present' : null]"
ng-click="selectImage($index)">
</div>
</div>
<div class="control play" ng-click="control('play')"
ng-class="[state === 'play' ? 'active' : null,
options === 'yes' ? null : 'invisible']"></div>
<div class="control pause" ng-click="control('pause')"
ng-class="[state === 'pause' ? 'active' : null,
options === 'yes' ? null : 'invisible']"></div>
</div>
</body>
</html>
html {
width: calc(100% - 32px);
height: calc(100% - 4px);
margin: 0;
padding: 0;
}
body {
width: 100%;
height: 100%;
margin: 0;
padding: 2px 16px;
background: transparent
}
.wrapper {
position: relative;
width: 100%;
height: 100%;
}
.carousel {
position: relative;
width: calc(100% - 2px);
height: calc(100% - 10px);
overflow-x: hidden;
box-sizing: content-box;
}
.horsie {
position: absolute;
height: 100%;
width: 100%;
top: 0;
left: 0;
transform: translate(0, 0);
transition: transform 0.3s ease-in-out;
}
.horsie img {
object-fit: contain;
width: 100%;
height: 100%;
}
.horsie.past {
transform: translate(-100%, 0);
}
.horsie.future {
transform: translate(100%, 0);
}
.arrow {
position: absolute;
top: 0;
bottom: 0;
height: 200%;
width: 100%;
right: 0;
transition: .3s ease-in-out;
}
.arrow:hover {
background: #00000021;
}
.arrow .image {
display: none;
}
.arrow.inactive {
display: none;
}
.arrow.inactive .image {
opacity: 0;
}
.decrementor {
left: 0;
transform: translate(-50%, -50%);
right: inherit;
}
.decrementor .image {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAAAdElEQVR4AezQJwKAMBQD0DCOjAfD9j1BXVUdR0OxkWzCJvHvD/x5aVxEDMZBWVfAIDB1JQwOY96IUSzGYjCaxdgMJuMwOQJ4c51jlnc0HgsCUs5pPbX82csozaQsFqVuSpksSjIpg0OJBdACqlorw7AEowAAblWUrl8sD5AAAAAASUVORK5CYII=');
}
.incrementor {
right: 0;
transform: translate(50%, -50%);
}
.incrementor .image {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAAAcUlEQVR4Ae3QpwJAUACF4WM+sU6xV9M0TdI8mmR389j+07878PfSHOjYnYAETTdtP5Sh4VAik8pZlMSkChYlM6mSRalLKWN2FqolVLNqGgsyOE/zOZ+9i5FZTMFgJBaT34gRWUzGYAABKYMZizvm75W1TreU8DMmtioAAAAASUVORK5CYII=');
}
.bubble-holder {
display: flex;
position: absolute;
width: 100%;
justify-content: space-around;
align-items: flex-end;
flex-wrap: wrap;
align-content: flex-end;
bottom: 1px;
left: 0;
padding-right: 3px;
box-sizing: border-box;
}
.bubble {
transition: all 0.2s ease-in-out;
background-color: white;
width: 8px;
height: 8px;
flex-grow: 1;
border: 1px solid #bfbfbf;
}
.bubble:hover {
opacity: .3;
}
.bubble.present {
background-color: #181818;
border: 1px solid #181818;
}
.bubble-holder:hover .bubble {
cursor: pointer;
width: 11px;
height: 11px;
}
.control {
position: absolute;
height: 10px;
width: 10px;
left: 5px;
bottom: 5px;
background-size: contain;
opacity: 0.3;
cursor: pointer;
}
.control.active {
opacity: 1;
}
.control.play {
display: none;
}
.control.pause {
display: none;
}
function getQueryVariable(variable) {
var query = document.location.href.match(/\?.*$/g)[0].substring(1);
var vars = query.split("&");
for(var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if(pair[0] === variable) return pair[1];
}
return false;
}
(function(){
var carousel = angular
.module('carousel',[])
.controller('CarouselController',CarouselController);
CarouselController.$inject = ['$scope','$timeout'];
function CarouselController($scope,$timeout){
$scope.images = getQueryVariable("images").split(",").map(v=>v.split('@'));
for(var i = 0; i < $scope.images.length; i++) {
$scope.images[i] = `http:
}
$scope.index = 0;
$scope.increment = function(amount) {
if(amount > 0 && $scope.index < $scope.images.length-1) {
$scope.index += amount;
}
if(amount < 0 && $scope.index > 0) {
$scope.index += amount;
}
$scope.state = "pause";
}
var interval = getQueryVariable("interval") || 0;
if(interval === "{$interval}") interval = 0;
$scope.state = "play";
if(interval === 0) $scope.state = "pause";
function oscillate() {
$timeout(function() {
if(!mouseover && $scope.state === "play") {
if($scope.index < $scope.images.length-1) {
$scope.index++;
} else {
$scope.index = 0;
}
}
if($scope.state === "play") {
oscillate();
}
}, interval*1000, true);
}
var mouseover = false;
document.documentElement.onmouseover = function () {
mouseover = true;
}
document.documentElement.onmouseout = function () {
mouseover = false;
}
if($scope.state === "play") {
oscillate();
}
document.getElementById('background').style.background = getQueryVariable("background");
$scope.selectImage = function(index) {
$scope.index = index;
$scope.state = "pause";
}
$scope.control = function(direction) {
switch(direction) {
case "play":
$scope.state = "play";
oscillate();
break;
case "pause":
$scope.state = "pause";
break;
}
}
$scope.options = getQueryVariable("options");
if($scope.options === "{$options}") $scope.options = "yes";
}
})();
(※ 개발중이기 떄문에 위 화상과 실제 게임 화면은 차이가 있을 수 있습니다)
게임 정보
버전: 1.0.2
제공원: 조석소프트
발매일: 20██년 ██월 ██일
평가 (21건)
설명:
|
 |
밝아오지 않는 밤, 나아갈 길을 가리켜라 어번판타지가 뒤섞인 변칙세계에서 항쟁을 승리하고, 귀여운 극도소녀와 함께 피비린내 나는 암흑사회에서 출세하라. 일본의 야쿠자를 소재로 본격적이고 대중적인 대볼륨 시나리오, 터치만으로 사박사박 진행되는 심플하고 경쾌한 배틀. 개성 충만한 여자아이들과의 교류를, 스토리에 깊이 몰입되는 신기술 연출로써 전달.
자, 당신도 "계약"의 피분수를 운명의 붉은 실로 삼아, 괴기에 가득찬 소녀들과 인의를 맺어라. 시대의 흐름은 여기에 있다.
SCP-2655-JP의 게임 장르는 현대 초상사회를 모델로 한 무대에서 전개되는 세미오토배틀 RPG이며, 등장 캐릭터의 육성과 전투에의해 해금되는 스토리를 주요 게임 내용으로 삼고 있다. 이 등장 캐릭터들은 대체로 인간 여성과 같은 조형을 가지고 있으며, SCP-2655-JP 내에서는 일관되게 “극極도道소少녀女”라고 총칭되고 있다.
SCP-2655-JP의 스토리는 이 "극도소녀"들과 게이머의 교류를 메인으로 하고 있다. 작중 설정에서 게이머는 가공의 폭력단 조직의 신참 조직원이며, 우연히 떨어지게 된 이공간에서 만난 인간형 변칙존재인 극도소녀들을 부하로 삼아 무력충돌과 내부행장에서 승리하면서, 소속 조직 내에서 “벼락출세”를 달성하는 것을 이야기상의 목표로 하고 있다.
이 스토리에서 중요한 아이템으로 설정된 것이 주인공 캐릭터의 손가락이다. 이야기상에서 손가락은 사람이 될 존재인 “극도소녀”에게 바치는 최고위의 공물로 묘사되어 있고, 극도소녀와의 계약・전투보조・주술적 강화나 회복・호감을 얻기 위한 선물 등, 극도소녀에 관련된 사항에서 거의 만능의 매개물로 다루어지고 있다.
그래서, SCP-2655-JP의 게이머는 「주인공이 느닷없이 단도를 꺼내서 자신의 손가락을 자른다」는 취지의 서술・장면을 빈번히 조우하게 된다. 그 의미는 크게 다르지만, 형태적 유사성을 보아 이 손가락 어쩌구 하는 설정은 일본 야쿠자의 관습인 “유비指츠詰메め”를 바탕으로 창출한 것으로 추측되며, 작중에서의 발언이나 묘사도 그것을 현저하게 암시하고 있다.
실제 게임 시스템 면에서는 이렇게 잘린 손가락은 “유ユ비ビ”라는 명칭의 과금 아이템으로 취급된다. 유비는 데포르메된 다섯째손가락(소지) 아이콘으로 시각화되며, 상술한 이야기상에서의 위치와 마찬가지로 다양한 용도로 사용되지만, 게이머는 오로지 「계契약約의の 인仁의儀」라는 명칭의, 새로운 “극도소녀”를 취득하기 위한 랜덤형 아이템 제공방식의 캐릭터콜렉션 기능에만 이 유비를 소비한다.
SCP-2655-JP의 변칙성은 이 가챠 기능을 사용했을 때 활성화된다. 지정된 절차에 따라 가챠 화면으로 진행하면 화면 중앙에는 삼三방方의 상부를 묘사한 것으로 보이는 그래픽이 떠오른다. 게이머가 이 삼방을 탭할 경우, 화면 위쪽에서 단도의 날이 떨어지는 애니메이션이 나오고, 날이 화면 중앙을 통과하는 순간 무딘 절단음의 음향효과와 함께 화면이 암전되었다가, 가챠 결과 화면으로 이행한다. 이 과정에서, 게이머는 화면을 탭할 때 자신의 손가락 제3관절(손가락 뿌리)에 날카로운 고통을 보고한다.
이 고통은 순간적이고 아주 경미한 것이다. 후술할 제2의 변칙성 또한 게이머가 대개 가챠 결과에만 정신이 팔려 있기 떄문에 위화감을 눈치채는 일이 매우 드물다. 그러나 이 과정을 고속도 사진기로 촬영해보니, 애니메이션 연출과 동시에 게이머의 해당 부위에 절단・상처의 아묾・다른 지점으로의 전송 같은 복합적인 변칙현상이 순식간에 발생하는 것이 판명되었다.
SCP-2655-JP 플레이 직후 촬영된 D-85461의 손바닥(인식재해 방지 보정필). 소지의 절단과 전송에 의한 근소한 공간왜곡을 확인할 수 있다.
SCP-2655-JP의 변칙성으로 인해 손가락이 없어진 부위에는 대략 3-4시간에 걸쳐 실리콘 수지로 구성된 매우 조잡한 대체기관이 새로 생성되어 게이머의 일상생활 및 SCP-2655-JP 플레이를 보조한다. 게이머 자신을 포함하여 적절한 대항조치를 받지 않은 인물은 해당 부위의 결손과 이에 부수하는 여러 현상에 대해 위화감을 느끼지 못한다. 또한, 이 대체기관으로 SCP-2655-JP의 가챠 기능을 사용했을 경우, 게이머의 남아있는 손가락들 가운데 하나가 랜덤하게 변칙성의 대상이 되는 것으로 밝혀졌다.
보유: SCP-2655-JP의 변칙성이 발각된 뒤 실행된 추적실험에 의하여, 손가락들의 전송지가 일본국 효고현의 산간지역에 소재하는 폐기시설임이 특정되었고, 신속하게 재단의 급습적전이 실시되었다.
시설에는 전송된 손가락을 격납・보존하기 위한 설비가 갖추어져 있었으며, 시설에 남아있던 자료 및 확보한 GoI-8102 구성원의 증언으로부터 해당 부위들이 아래의 용도로 이용되었고/이용될 예정임이 드러났다.
- 지문정보의 부정이용
- DNA 정보의 수집・매각
- "우듬지"로서 출하
- 각종 초상조직의 주술적 수요에 대한 공급
또한 「용도 미정」이라고 표시된 일부 격납용기에서는 혀・유두・남성기・두부 등, 가챠를 통상과는 다른 방법으로 조작한 결과로 유래되었으리라 추측되는, 손가락 이외의 신체부위들이 발견되고 있다. 이것들의 주인들을 특정하기 위한 조사가 진행 중이다.