아래는 그냥 일반 벽

위는 좀 특수한 처리를 한 벽


만드는 원리 설명


기본적으로 바닐라에는 3개의 세력(force)가 있음

player, neutral, enemy


player는 당연히 유저

neutral은 나무, 바위, 물고기, 절벽 등

enemy는 바이터, 스피터, 땅벌레, 둥지


세력간에는 3가지의 상태가 있을 수 있음. 친구, 휴전, 적대

기본적으로 모든 세력은 적대 상태임. 이때는 상대방의 구조물을 동작시킬 수 없고 상대방의 포탑에 얻어 맞는다

휴전을 맺으면 상대방의 포탑한테 얻어맞지는 않지만 구조물을 동작시킬 수는 없음

친구상태면 포탑에도 안맞을뿐더러 상대방의 구조물을 동작시킬 수 있음(레시피 설정, 상자 접근, 철거 등등등)


이 세력 간의 관계는 쌍방적인 관계가 아니라 일방적인 관계임

A세력이 B세력을 친구로 등록할 수는 있지만 그렇다고 B세력이 A세력을 친구로 등록한 것은 아닐 수도 있음

이럴 경우 B가 A기지에 가면 아무일도 일어나지 않겠지만 A가 B기지에 가면 포탑한테 뚜들겨 맞을 수도 있다


세력을 만들거나 우호관계를 설정하는건 lua 스크립트를 이용해서 하게 된다.


새로운 세력 만들기 : game.create_force('alien') // alien이란 이름의 세력을 만듬

휴전 상태 : game.forces['player'].set_cease_fire('enemy',true) //true일 경우 휴전, false일 경우 휴전해제

친구 상태 : game.forces['player'].set_friend('enemy',true) //true일 경우 친구, false일 경우 친구해제





이걸 응용하면 바이터가 때리지 않는 벽을 만들 수 있다


먼저 wall이라는 새로운 세력을 만듬

-> game.create_force('wall')


wall이라는 세력과 player라는 세력끼리 서로 친구로 맺어줌. 그래야 player가 설치한 벽을 정상적으로 철거할 수 있다

-> game.forces['player'].set_friend('wall',true)
-> game.forces['wall'].set_friend('player',true)


enemy세력에서 wall 세력을 친구로 등록함

-> game.forces['enemy'].set_friend('wall',true)

wall세력이 굳이 enemy세력을 친구로 등록할 필요는 없다. 별 의미가 없음

이제 바이터가 벽을 치지 않는다!




그럼 벽을 설치할 때 벽을 wall세력으로 어떻게 설치하느냐?

벽이 설치되는 걸 이벤트로 감지하고 설치되는 순간

-> entity.force="wall"

이 스크립트를 먹여주면 됨. 설치되자마자 세력이 호로록 바뀌어버린다




이제 이걸 모드로 만들기만 하면 끝




이거 해보고 나니까 좀 치명적인 단점이 있는데

바이터가 부수지 않는 의도로는 잘 동작하긴 하지만

벽의 세력이 나랑 다르기 때문에 청사진이나 해체계획기로 타겟팅이 안됨 엌ㅋㅋ