지금까지 주사위나 Query의 값에 따라서, template의 내용이 달라지는 매크로를 만들려면
거의 전적으로 각 행의 title을 다른 행으로 덮어써서,
불필요한 내용을 지워버리는 식으로 구현해야 했다.
사실 title을 CSS로 display: none; 처리해 버리면
이 오버라이팅한 흔적이야 지워버릴 수 있었다만.
그래도 template의 왼쪽에 빈칸이 휑하게 남는다거나,
원래 template의 구조를 좀 살리고 싶다던가,
덮어쓰는 행이 어떤 게 되어야 하는지 신경써야 하는 등, 아쉬운 점이없지는 않았지.
그래서 대안으로 쓸 만한 방법을 생각해보다가 고안해 낸 게,
이 가칭 'labeled template indexing'이다.
1d4 결과값에 따라서 다른 행을 불러내는 매크로의 예제.
예제 코드
원리는 inline roll의 index를 호출할 때 생기는 특성을 응용한 것이다.
inline roll을 $[[]] 형태로매크로의'더 앞부분'에서 호출하면
해당 위치에서 해당 inline roll은 더 이상 숫자처럼 작동하지 않고,
마치$[[.computed]] 형태로 불러낸 것처럼, 노란색 inline roll 결과물로만 작동한다.
따라서, 어떤 inline roll 내에 inline roll을 집어넣은 다음
내부의 inline roll을 앞에서 불러내면
외부의 inline roll 역시 '숫자가 아닌 것을 집어넣은 대괄호'가 되므로
inline roll이 깨지게 된다.
(이 원리를 사용한 것이 RainbowEncoder 님이 발견한 index manipulation 테크닉)
그렇다면 만약 이 외부의 inline roll에 주석이 달려 있었다면 어떻게 될까?
inline roll이 더 이상 계산되지 않게 되는 순간,
원래라면 주석 처리되어야 했을 구문들 역시 텍스트 그대로 출력되게 될 것이고...
따라서, 만약 주석 안에 넣은 구문이 template의 행을 이룬다면,
inline roll이 깨지면서, 해당 행이 정상적으로 template에 출력되게 되는 원리다.
달리 말하자면, 이 방법의 전제 중 하나는
'해당 template의 행이 inline roll의 주석으로 들어갈 수 있어야 한다'는 것이다.
inline roll에 주석으로 들어갈 수 없는 텍스트,
예컨대 또 다른 inline roll이나 그 호출값같은 것들은 해당 방식으로 불러내는 것이 불가능하다.
꽤 큰 제약이라서, 아무래도 template overwritting을 완전히 대체할 수는 없을 듯.
그리고 그것 말고도, 사실 이 index라는 게 앞에서 하나 불러내면
뒤의 것들까지 순서가 연이어 꼬이는 구조인지라,
결과적으로 여러 행을 불러내는 식으로 만들고자 하면,
순서를 맞추는 게 결코 쉽지 않다못해, 오히려overwritting보다 더 복잡해질 가능성이 커 보인다.
하지만 단순히 '주사위 결과에 따라서 랜덤 테이블 중 하나를 뽑아내는' 정도의 구조라면
이걸로 충분하지 않을까 하는 생각이 든다.
갠적으로 이걸 가장 유용하게 쓸 수 있어 보이는 분야는댄디 5판 와일드 매직 서지 테이블.
이걸 templateoverwritting이랑 index manipulation으로 구현한 예제가 Roll20 포럼에 있는데
그거 순 렉덩어리였거든?
근데 이거는 주사위 값을 여러 번 복사할 필요가 없어서 비교적 렉이 덜 할듯???
암튼 유용하게 사용되었으면 좋겠고,
자기가 영어 잘 한다 싶으면 이거 Roll20 포럼 같은 데 출처 붙여서 올려줘도 고맙겠음...
이게 비전학인가 뭔가 하는 그거냐