“이걸 DOOM으로 돌려봤다”류의 사람들은 정부의 우주 추진 시스템 부서에 고용되어야 한다고 생각함
그들은 손가락만 굴리기엔 너무 이색적인 과제가 필요한 사람들임
하지만 결국 그들이 만드는 추진 시스템조차 DOOM을 돌릴 수 있게 만들 것 같음
이건 “할 수 있으니까 해본다”식의 프로젝트 같음
CSS가 원래는 선언적 스타일링 언어였는데, 이제는 조건문, 수학 함수, 렌더링 트릭까지 생기면서 점점 프로그래밍 가능한 시스템으로 변하고 있음
중요한 건 “CSS로 DOOM을 돌릴 수 있나”가 아니라, 원래 그런 용도가 아니었던 레이어에 얼마나 많은 로직을 밀어넣고 있는가임
이건 전형적인 추상화 역전(abstraction inversion) 의 사례임
CSS는 프로그래밍 언어가 되려는 욕망을 숨기고 있지만, 결국 완전히 잘못된 추상화로 변해버렸음
핵심은 표현(CSS) 과 상호작용(JavaScript) 의 경계가 어디까지인가임
예전엔 드롭다운, 툴팁, 레이아웃을 위해 JS가 필요했지만, 이제는 CSS 속성으로 앵커 위치나 조건(if())까지 지정할 수 있음
애니메이션, 디테일 토글, 접근성 관련 효과까지 CSS로 처리 가능해짐
CSS로 3D 장면을 만드는 건 예전부터 가능했지만, 상호작용엔 JS가 필요했음
이제는 x86CSS 프로젝트처럼 JS 없이도 CPU를 CSS만으로 에뮬레이션할 수 있음
그래서 DOOM도 순수 CSS로 실시간 구현이 가능할지 궁금함
하지만 CSS x86 CPU는 너무 느려서 게임 루프를 처리할 수 없다고 함. 결국 JS가 필요함
이런 CSS의 진화는 예견된 결과였고, HTML 진영이 애초에 DSSSL을 채택했어야 했다고 생각함
이 사례는 사람들이 왜 TypeScript 기반 CSS를 원하게 되는지를 잘 보여줌
Chrome에서만 작동하는 if() 같은 기능 때문에, 개발자들은 이런 꼼수를 씀
예를 들어, animation-delay와 @keyframes를 이용해 가시성 토글을 흉내내는 트릭을 쓰는 식임
CSS if()가 표준화되면 이런 해킹 없이 깔끔하게 조건 처리가 가능해질 것임
DOOM 치트 코드인 IDDQD와 IDKFA는 아쉽게도 작동하지 않았음
예전에 div에 둥근 모서리를 만들려면 GIF 네 장이 필요했던 시절이 떠오름
div라니, 그 전엔 전부 table 레이아웃으로 하던 시절도 있었음
정말 인상적임! div 하나만 지워도 벽 통과(wall hack) 가 가능함
더 나아가 .wall에 opacity: 0.7만 주면, 예전식 투명 벽핵 느낌을 그대로 재현할 수 있음
Hacker News 의견들
“이걸 DOOM으로 돌려봤다”류의 사람들은 정부의 우주 추진 시스템 부서에 고용되어야 한다고 생각함
그들은 손가락만 굴리기엔 너무 이색적인 과제가 필요한 사람들임
이건 “할 수 있으니까 해본다”식의 프로젝트 같음
CSS가 원래는 선언적 스타일링 언어였는데, 이제는 조건문, 수학 함수, 렌더링 트릭까지 생기면서 점점 프로그래밍 가능한 시스템으로 변하고 있음
중요한 건 “CSS로 DOOM을 돌릴 수 있나”가 아니라, 원래 그런 용도가 아니었던 레이어에 얼마나 많은 로직을 밀어넣고 있는가임
CSS는 프로그래밍 언어가 되려는 욕망을 숨기고 있지만, 결국 완전히 잘못된 추상화로 변해버렸음
예전엔 드롭다운, 툴팁, 레이아웃을 위해 JS가 필요했지만, 이제는 CSS 속성으로 앵커 위치나 조건(if())까지 지정할 수 있음
애니메이션, 디테일 토글, 접근성 관련 효과까지 CSS로 처리 가능해짐
CSS로 3D 장면을 만드는 건 예전부터 가능했지만, 상호작용엔 JS가 필요했음
이제는 x86CSS 프로젝트처럼 JS 없이도 CPU를 CSS만으로 에뮬레이션할 수 있음
그래서 DOOM도 순수 CSS로 실시간 구현이 가능할지 궁금함
이 사례는 사람들이 왜 TypeScript 기반 CSS를 원하게 되는지를 잘 보여줌
Chrome에서만 작동하는 if() 같은 기능 때문에, 개발자들은 이런 꼼수를 씀
예를 들어,
animation-delay와@keyframes를 이용해 가시성 토글을 흉내내는 트릭을 쓰는 식임CSS if()가 표준화되면 이런 해킹 없이 깔끔하게 조건 처리가 가능해질 것임
DOOM 치트 코드인 IDDQD와 IDKFA는 아쉽게도 작동하지 않았음
예전에 div에 둥근 모서리를 만들려면 GIF 네 장이 필요했던 시절이 떠오름
정말 인상적임! div 하나만 지워도 벽 통과(wall hack) 가 가능함
.wall에opacity: 0.7만 주면, 예전식 투명 벽핵 느낌을 그대로 재현할 수 있음“이걸 어디서 직접 돌려볼 수 있나?” 싶었는데, cssdoom.wtf에서 가능함
Chromium에서는 오히려 더 버벅였고, strafing 키는 찾지 못했음
그래도 전반적으로 놀라운 구현임
CSS는 위원회 설계의 한계를 보여주는 대표적인 명세임
SVG와 함께 “가장 보기 흉한 스펙” 경쟁을 벌이고 있음
이 멋진 구현에 대해 한 가지 덧붙이자면,
실제로는 플레이어가 움직이는 게 아니라 세상이 움직이는 것임
카메라는 단지 시야각(frustrum)을 계산하기 위한 개념적 도구일 뿐임