Creating a Payload Map
이 게임종류는 Boojum Snark의 팀 포트리스2 게임종류 라이브러리에 포함된것 입니다.
이 게임모드를 위해서 만들어야 하는 완전한 엔티티는 Boojum Snark의 팀 포트리스2 게임종류 라이브러리에 포함되어 있습니다, 다운로드 가능한 VMF에 모든 팀 포트리스2의 게임종류가 포함되어 있습니다 엔티티들은 VMF에서 당신의 맵으로 스스로 만들어야 하거나 혹은 디버깅해야 하는 번거로운 상황없이 쉽게 옮길 수 있습니다.
Boojum Snark의 팀 포트리스2 게임종류 라이브러리는 여기서 다운받으실수 있습니다 : TF2Maps.net
이 강의는 어느 형식으로 수레밀기를 만드는지 그리고 수레밀기의 기본요소들을 소개합니다. 표준적인 관습은 블루팀이 공격하고 레드 팀이 방어하는 것입니다. 이 강의는 어느 형식으로 수레 밀기의 맵 개요를 짜는지는 말해주지 않습니다. 이 강의에서는 당신은 수레밀기를 위한 수레를 만들것입니다 그리고 맵과 첫 라운드를 위한 각종 필요한 엔티티들을 소개받을것입니다. 한 라운드의 수레밀기 맵을 만든다면, 당신은 불필요한 엔티티들을 생략해도 됩니다.
라운드 세우기
게임 규칙과 논리
이 강의에서는 오로지 한 라운드만 있습니다 하지만 다른 라운드도 있다고 생각하겟습니다.
- tf_gamerules를 만드시고 이름을 GameRules로 지어주세요.
- logic_auto 엔티티를 만들어 주시고 output 탭에 아래 항목들을 적어주세요:
- team_control_point_master를 소환하고 이름을 CP_master 로 지어주세요, 그리고 설정을 알맞게 바꿔주세요 (보여지는 모두다 꼭 해야할 필요는 없음).
설정 이름 설명 값 Name 엔티티의 이름 CP_Master Start Disabled 자명 No Cap Layout 자명 Restrict team from winning 자명 Red Switch teams on map win? 자명 Yes Scoring Style 자명 Add team score for each captured point Play all rounds before changelevel 자명 Only changelevel after all mini-rounds have been played to completion Partial cap rate 점령 지점에 대한 세부적인 속도를 설정합니다. 0.1
라운드 엔티티
다음으로, 라운드-기반 수레밀기 맵에 필요한 각각의 엔티티들입니다.
- team_control_point_round 엔티티를 만들어 주시고, Round_A로 이름지어 주세요.
team_control_point_round 의 설정을 아래와 같이 해주세요:
설정 이름 설명 값 Name 엔티티의 이름 Round_A Start Disabled 자명 No Print Name 자명 Priority 첫번쨰로 플레이 하게되는 라운드 #TotalRounds Control points in this round 자명 CP_A_1 CP_A_2 Restrict team from winning 자명 Red
라운드 시간
이제 우리는 라운의 시간이 흘러가서 레드 팀이 이기게 하는 타이머를 설정해볼 시간입니다.
- game_round_win 엔티티를 만들어 주시고 이름을 Round_Win 으로 Team 은 Red 로 설정해주세요.
- team_round_timer 엔티티를 만들어 주시고 아래와 같이 설정해주세요:
설정 이름 설명 값 Name 엔티티의 이름 Round_Timer Start paused 자명 No Reset time on round restart 자명 Yes
output 탭으로 가서 새로운 output을 만든뒤 아래와 같이 설정해주세요:
이 설정들은 레드 팀이 시간이 다 흘러갔을 때 이기도록 설정하는 것이였습니다, 그리고 SetupGate 를 통해서 타이머가 만료되면 문이 열리게 합니다.
필터
우리는 이제 이 게임형식에 있어 중요한 부분인 필터를 만들것입니다.
- filter_activator_name 엔티티를 만들고 다음과 같이 설정해주세요:
설정 이름 설명 값e Name 엔티티의 이름 Filter_Cart Filter mode 자명 Allow entities that match criteria Filter Name 자명 Bomb_Train
이 엔티티는 수레가 마지막 점령 지점으로 갔을때 점령 과 폭발을 일으킵니다.
- filter_activator_class 엔티티를 만들고 다음과 같이 설정해주세요:
설정 이름 설명 값 Name 엔티티의 이름 Filter_Players Filter mode 자명 Disallow entities that match criteria Filter Classname 자명 player
이 엔티티는 수레에 플레이어가 데미지를 받지 않도록 합니다.
- filter_activator_tfteam 엔티티를 만들어주시고 다음과 같이 설정해주세요:
설정 이름 설명 값 Name 엔티티의 이름 filter_A_2 Filter mode 자명 Allow entities that match criteria Associated Control Point 자명 CP_A_2
이 필터는 첫번째 라운드 에서 두번째 점령 지점이 점령이 되었을떄 발동합니다. 이것은 스폰 문 트리거나, 재보급/재생성 트리거 등에도 사용됩니다.
- 다른 filter_activator_tfteam 엔티티를 생성하여 주시고 다음과 같이 설정해주세요:
설정 이름 설명 값 Name 엔티티의 이름 filter_B_2 Filter mode 자명 Allow entities that match criteria Associated Control Point 자명 CP_B_2
위 엔티티와 비슷하지만, 이 필터는 두번쨰 라운드에서 두번째 점령 지점이 점령 되었을때 발동합니다.
수레밀기의 제작
수레 밀기 준비
이 부분은 당신이 수레를 만드는 것과 이것이 제 기능을 하는 엔티티들을 소개해줄것입니다.
먼저 수레를 표현해줄 간단한 블럭 엔티티를 만들어보세요.
- 수레의 모델이랑 크기가 일정한 블럭을 하나만드세요, 하지만
tools/toolsclip
텍스쳐를 사용해 이것을 func_tracktrain(컨트롤+t)로 만들어주세요. 블럭의 이름은 Bomb_Train
- 참고:당신의 수레가 0도 로 배치되었는지 확인하세요: facing 옆/우측 Hammer 에서 옆/우측 시야로 볼때 0도 로 배치되어야 합니다. 이것은 이렇게 설정해둬야, 그 길로 제대로 갈수있기떄문입니다.
- func_tracktrain의 origin 을 수레의 위로 오게 설정하세요. 이것은 수레의 관전자 카메라의 시점이 수레 안이 아닌, 수레 위로 오게합니다.
이제 우리는 실질적인 수레의 모델을 만들것입니다.
- prop_physics_override 를 만드시고 다음과 같은 설정을 따라주세요:
설정 이름 설명 값 Name 엔티티의 이름 Bomb_Model Pitch Yaw Roll Y Z X 0 180 0 World Model 자명 models/props_trainyard/bomb_cart.mdl
Disable Shadows 자명 Yes Fade Scale 거리에 의한 강제적 사라짐 0
- 참고:Bomb_Train 블럭의 크기를 모델의 크기에 알맞게 조절하세요. 이것은 플레이어가 모델에 끼는것을 막아줍니다.
이제 우리는 Bomb_Train 에 수레의 모델을 부착해야합니다.
- phys_constraint을 만들어 주시고 다음과 같은 요소를 따라주세요:
설정 이름 값 Name Bomb_Const Entity 1 Bomb_Train Entity 2 Bomb_Model
이제 우리는 수레를 빠지게할 어느 블럭을 만들어야 합니다.
- 수레의 모델보다 조금 큰 블럭을 만들어주세요, 하지만 code>tools/tooltrigger 텍스쳐를 이용하고 이것을 trigger_hurt 으로 만들어주세요. 그리고 트리거가 다음의 설정을 따르게 해주세요:
설정 이름 설명 값 Parent 엔티티가 연결 될 다른 엔티 Bomb_Train Filter Name 해당되는 필터 Filter_Players Damage 자명 1000
- flags 수정 : 체크 해제 = Clients, 체크 = Everything (not including physics debris)
이제 우리는 수레 주변에 수레를 밀거나 점령을 할수있는 공간을 만들겟습니다.
tools/toolstrigger
텍스쳐를 이용해 수레 주변에 점령 공간 박스를 만들어 주세요. 이것을 trigger_capture_area 로 만들어 주시고 다음 설정을 따라주세요:
설정 이름 설명 값 Name 엔티티의 이름 Bomb_CapArea Parent 호환하는 엔티티 Bomb_Train
- 참고:이 블럭은 수레가 움직일때 플레이어들이 얼마나 멀리 있어도 움직일수 있는지 당신이 원하는 만큼 늘려주시기 바랍니다.
이제 수레 주변에 재보급 기능을 추가해봅시다.
tools/toolstrigger
텍스쳐로된 다른 블럭을 수레 주변에 만들어 주세요. 이 블럭은 Bomb_CapArea 만하게 만들어주세요. 이 새로운 트리거는 체력 회복과 탄약 보급을 담당합니다. 이것을 dispenser_touch_trigger 로 만들어 주시고 다음의 설정을 따라주세요.
설정 이름 설명 값 Name 엔티티의 이름 Bomb_Dispense Parent 호환하는 엔티티 Bomb_Train
수레밀기 활성화 시키기
이 부분에 대해서는 우리가 설정해야할 값들은, 수레가 작동하기위해 설정해야하는 input 과 output들 입니다. 첫째로 우리는 Bomb_CapArea 에 대한 추가적인 설정들을 할것입니다, 다음 설정으로 맞춰져 있는지 확인해주세요:
설정 이름 설명 값 Name 엔티티의 이름 Bomb_CapArea Start Disabled 자명 No Parent 자명 Bomb_Train Control Point 이 트리거에 할당될 지점 CP_A_1 Can RED cap? 자명 No Can BLUE cap? 자명 Yes Number of RED players to cap 자명 1 Number of BLUE players to cap 자명 1 RED spawn adjust H점령시 얼마나 스폰시간을 바꿀지 0 Blue spawn adjust 점령시 얼마나 스폰시간을 바꿀지 0 Time to cap 이곳에 서있는 것으로 점령하는것을 방지함 99999
다음으로, 우리는 Bomb_Train 을 작업할것입니다. 이 강의는 당신이 Goldrush 광산 카트의 소리를 원한다고 가정합니다. 당신의 이 변수들이 올바른지 확인하세요:
설정 이름 설명 값 Name 엔티티의 이름 Bomb_Train First Stop Target 자명 Track_A_01 Max Speed 자명 90 Change Velocity 가속도에 대한 조절 Linear blend Distance Between the Wheels 자명 20 Damage on Crush 자명 99999 Move Sound 자명 Cart.Roll Start Sound 자명 Cart.RollStart Stop Sound 자명 Cart.RollStop Manual Train Speed 자명 On Manual Accel Speed 자명 70 Manual Decel Speed 자명 150
- 추가적으로, Flags 탭에 들어가 No User Control 과 Is unblockable by player 를 체크해주세요.
선로 만들기
당신은 아마도 기차의 선로들을 만들고 싶어할것입니다.
당신은 이미 기차를 위해 작업을 하고 있지만, 먼저 기차가 지나다닐 길부터 만들어야 합니다.
- path_track 엔티티를 만들어 주시고 선로의 시작 지점에 배치해주세요, 이름은 Track_A_01 로 설정해주세요.
- 다른 path_track 을 만들어 주시고 다음으로 당신이 수레가 지나가길 원하는 길에 배치해주세요 이름은 Track_A_02 으로 설정해주세요.
- 다시 Track_A_01 로 돌아가
Next Stop Target
을 Track_A_02 로 지정해주세요.
- 이젠 계속적으로 path_track 을 생성하고 이름을 짓고 그들을 연결하는 작업을 당신이 원하는 만큼 하시길 바랍니다.
TF2 에 보이는 선로 모델들을 흉내내 봅시다, 먼저 몇몇의prop_static 엔티티들을 적절한 선로 모델로 골라서 path_track 엔티티들 아래에 배치해줍니다.
- 추천하는 선로의 모델은
props_mining/track*.mdl
입니다, 별표는 저런 타입의 모델의 모든 모델을 뜻합니다.
- 점령 지점의 중앙 선로를 위한 모델은 prop_dynamic 엔티티를 소환해 world model 을
props_trainyard/track_midcap.mdl
으로 설정하시고 당신의 첫째 점령 지점 모델의 이름을 CP_A_1_Model 으로 설정해주세요.
점령 지점 추가
기본적으로 라운드 마다 두 개의 점령 지점이 있습니다: 중앙 지점의 점령과 종착 지점의 점령으로 구성되 있습니다.
중앙 점령 지점
첫째로, 당신의 CP_A_1_Model 가 자리에 얌전히 있는지 확인해 주세요. 그 다음, 그 모델의 바로 위쪽에 있는 Path_Track 을 찾아주세요. 이 예제 에서는 Track_A_24 네요.
- 중앙 path_track 를 선택하신뒤 아래의 output 탭으로 가셔서 똑같이 해주세요:
이것은 수레가 이 지점에 닿았을때 발동하는 중요한 기능을 합니다. 이것은 점령 지점의 모델의 스킨도 바꾸고, 블루 팀에게 점령을 선사해주고, 뒤쪽으로 후진하는것도 사용가능하지 않게 하고, 소리를 재생하고 스파크 효과를 멈춥니다, 또한 Round_Timer를 통해 블루 팀의 공격 시간을 추가해줍니다.
이제 우리는 team_control_point 엔티티를 만들어 모델의 정 가운데에 새워놓아야 합니다.
- 당신이 만든 team_control_point에다가 아래와 같은 설정을 적용해주세요:
설정 이름 설명 값 Name 엔티티의 이름 CP_A_1 Start Disabled 자명 No Print Name HUD 에 출력될 이름 #Goldrush_cap_1_A Group Index 해당없음 0 Default Owner 팀 Red Index #ofCapPoint 가 0에서 시작합니다 0 Warning Type 아나운서 No Announcements BLUE Previous Required Point 자명 CP_A_1
- 아래의 output 설정도 따라주세요:
이것은 점령 지점을 효과적으로 만듭니다. 이것은 블루 팀이 점령 하기 전에 점령 지점에서 붉은 홀로그램이 나올것입니다, 따라서 블루팀이 점령하면 청색 홀로그램이 나옵니다. 추가적으로, output의 설정은 수레가 점령 할 다음 점령 지점을 설정합니다.
좀착 점령 지점
이 지점의 team_control_point 엔티티를 만들고 CP_A_1 과 같이 설정해주세요, 하지만 아래 변화를 따라주세요:
설정 이름 설명 값 Name 엔티티의 이름 CP_A_2 Print Name HUD에 출력되는 이름 #Goldrush_cap_1_B Index #ofCapPoint 가 0에서 시작합니다 1 BLUE Previous Required Point 자명 CP_A_1
- 잊지 마세요, 이 엔티티는 다음 output을 따라야합니다:
이 설정들은 다음 라운드 점령 지점을 위한 것이었습니다.
- 두번째 부터 마지막 까지의 path_track를 다음 output을 따라서 설정하세요. 이 맵에서는 Track_A_42 입니다.
Track_A_42 의 Output:
마지막 path_track 은 Goldrush 처럼 카트가 아래쪽으로 활강하는것을 만들기 위해 아래쪽에 있어야 합니다. 이 마지막 선로 지점은 Track_A_43 이네요, 이것은 다음 Output을 따라야합니다:
이것은 수레를 다음 라운드의 시작지점의 시작 선로로 순간이동 시킵니다, 그리고 이것의 미는것도 허용을 합니다.
Train Watcher
- team_train_watcher를 만들고 이름은 Watcher_A로 설정해주세요. 만약 당신이 다수-라운드 맵을 만든다면, 라운드 마다 이것을 만들어 주세요. 첫번쨰 라운드의 team_train_watcher 설정을 다음과 같이 해주세요:
설정 이름 설명 값 Name 엔티티의 이름 Watcher_A Start Disabled 자명 No Train to watch 자명 Bomb_Train Allow the train to recede 자명 Yes Train recede time (in seconds) 자명 0 Handle Train Movement 자명 Yes Default Speed Modifier 자명 1 Associated env_spark 자명 Bomb_Sparks Node that the path starts at 자명 Track_A_01 Node that the path ends at 자명 Track_A_43 Linked PathTrack 1 자명 Track_A_24 Linked CP 1 자명 CP_A_1 Linked PathTrack 2 자명 Track_A_42 Linked CP 2 자명 CP_A_2 Linked PathTrack 3 자명 Linked CP 3 자명 Min Speed for Speed level 1 자명 1 Min Speed for Speed level 2 자명 60 Min Speed for Speed level 3 자명 80
차후 이것은 각 라운드에 맞게 변수들이 수정될수 있습니다, 이름이라던가, 연결된 점령 지점 그리고 연결된 선로 등. 변수들은 변하지 않고 있을수도 있습니다.
추가 효과들
Gold Rush 나 Badwater 같은 경우, 수레에 추가적으로 효과가 붙어 있습니다, 디스펜서 빔이라던지, 빛나는 불빛 그리고 수레의 바퀴에 스파크 등. 모두다 몇 가지 간단한 엔티티와 몇가지 조건으로 만들수 있습니다.
디스펜서 빔
우리는 지금 디스펜서 빔 효과를 수레에 달것입니다.
- mapobj_cart_dispenser 를 만들어주시고 디스펜서 체력 회복 빔이 나오기를 원하는 지점에 배치해주세요. 그리고 다음의 설정들을 따라주세요:
설정 이름 설명 값 Name 엔티티의 이름 Bomb_DispenseBeam Parent 따라갈 엔티티 Bomb_Train Team 자명 Blue Custom Touch Trigger 트리거 지점 Bomb_Dispense
반짝이는 빛
- info_particle_system 을 만들어 주시고 이것은 당신의 수레의 불빛 부분에 놓아주세요 그리고 이름을 Bomb_Light로 해주세요.
설정 이름 설명 값 Name 엔티티의 이름 Bomb_Light Parent 자명 Bomb_Train Particle System Name 자명 cart_flashinglight Start Active? 자명 No
스파크
- env_spark 엔티티를 카트 아래의 바퀴 부분에 만들고 이름은 Bomb_Sparks 로 해주세요.
설정 이름 설명 값 Name 엔티티의 이름 Bomb_Sparks Parent 자명 Bomb_Train Spark Trail Length 자명 Medium
점령 종
Badwater 나 Gold Rush는, BLU 팀이 점령을 할때 "띵" 거리는 소리를 BLU 팀에게 들려줍니다. 이 소리들을 간단하게 만들어 보아요.
- ambient_generic 을 만드시고 이름은 cap_sound 로 정해주세요.
설정 이름 설명 값 Name 엔티티의 이름 cap_sound Sound Name 자명 Hud.EndRoundScored
종점
이제 우리는 수레밀기의 하이라이트인 폭발하는 종점 지역을 만들어 보겟습니다. 뿌우우우우우우우우움!
마지막 점령 지점
- 당신의 마지막 team_control_point 의 설정이 적절히 설정되었는지 확인하세요, 예를 들어 Index 의 값이 모든 점령 지점들 중제일 높은 값으로 설정되어 있는지 등.
- 또한, print name은 정확한 순서대로 나옵니다.
- 추가적으로, BLUE Previous Required Point 1 의 엔티티 이름 이전의 지점이여야 합니다.
- 마지막으로, Flags 탭의 아래의 항목이 그대로 되어있는지 확인하여주세요:
Flag 이름 설명 값 Start with model hidden 자명 True Disable Shadow 자명 True Disable Sounds 자명 True
폭발 하는 구덩이
구덩이 모델
- 먼저 당신은 마지막 폭발 장소에서 수레가 구덩이로 굴러 들어갈만한 알맞은 구덩이 모델을 만들어야 합니다. 당신이 화법을 완료했다면, 아래의 명시된 모델들로 구덩이들을 장식해주세요.
- models/hybridphysx/badwater_destruction_before.mdl 이 World Model 값인 prop_static 을 만들어주세요.
- 다른 하나는 World Model 이 models/props_farm/sewer_cap001a.mdl 인것으로 만들어주세요.
구덩이로 향하는 문
- 두개의 func_door 블럭 엔티티를 만들어 주시고, 이것의 윗면은 glass/glasswindow002a 의 텍스쳐로 발라주세요.
두개의 func_door에 대한 한도:
설정 이름 설명 값 Name 자명 cap_door Speed 자명 700 Move Direction (Pitch Yaw Roll) 자명 0 270 0
- Flags 탭에서 Touch Opens 항목을 체크 해제 해주시고 Toggle 을 체크 해주세요.
- 두 개의 문들중 하나의 output:
문이 완전하게 열릴때, 이것이 파괴될것입니다.
- 구덩이 안에 trigger_hurt 블럭 엔티티를 만들어 주시고 Damage 의 값을 1000으로 Damage Cap 의 값을 1000으로 설정해주세요.
- func_nobuild 블럭 엔티티를 문의 상단 부분에 놓아주시고 팀 설정을 Any 로 설정해주세요.
구덩이 속 드럼통
- models/props_badlands/barrel03.mdl 이 WorldModel 값인 prop_dynamic_override 를 10-15개 정도 만들어 주시고 이름은 - End_Barrels 으로 설정해주세요.
마지막 폭발
- 구덩이 근처에 ambient_generic를 만들어 주세요.
첫번째의 한도:
설정 이름 설명 값 Name 자명 Cart_tip SoundName 자명 Cart.Falling
두번째의 한도:
설정 이름 설명 값 Name 자명 pre_kaboom SoundName 자명 Cart.Trigger
세번째의 한도:
설정 이름 설명 값 Name 자명 kaboom SoundName 자명 Cart.Explode
추가적으로, env_shake 엔티티를 생성하여 다음 설정을 따라주세요:
설정 이름 설명 값 Name 자명 kaboom_shake Amplitude 자명 16 Effect Radius 자명 500 Duration In 초 1 Frequency 자명 150
- Flags 탭에서 다음 값들이 체크되있는 확인해주세요:
Flag 이름 값 Global Shake True In Air True
- 문 아래에 info_particle_system 를 만들어주시고 다음 한도들을 따라주세요:
설정 이름 설명 값 Name 자명 pit_effect Particle System Name 자명 cinefx_goldrush Pitch Yaw Roll (Y Z X) 자명 -90 0 0
- trigger_multiple 을 생성한 다음 아래 설정을 따라주세요:
설정 이름 설명 값 Name 자명 KaBoomZone Start Disabled 자명 Yes
- 다음 output을 따라주세요:
이제 우리는 마지막의 path_track 으로 output을 부를때가 왔습니다.
- output을 다음과 같이 해주세요:
마지막으로, trigger_once 블럭을 구덩이의 아래쪽에 당신이 폭발을 원하는 장소에 만들어주세요.
- 다음 설정을 따라주세요:
설정 이름 설명 값 Name 자명 Final_Trigger Start Disabled 자명 No Filter Name 호황되는 필터 Filter_Cart
- 다음 output 들을 추가해주세요:
- Flags 탭에서 오로지 Physics debris 만 체크해주세요, 다른 나머지는 다 체크 해제 해주시면됩니다.
연대표
일어나는 일을 천천히 봅시다:
0.0:
- 구덩이로 가는 문이 열립니다.
- Bomb_Train이 제거됩니다.
- 수레가 소리가 납니다.
- 수레의 효과들이 사용불가능 해집니다.
0.01:
- 수레의 모델이 떨어집니다.
0.5:
- "삡" 소리가 납니다.
트리거에 닿았을때:
- 폭발음 발생.
- 폭발 효과.
- 폭발로 인한 화면 흔들림.
- 드럼통들 폭파.
- 수레의 모델 삭제.
- 마지막 점령지점을 점령.
- 점령 지점 파괴.
- 사살 지점 활성화
접촉후 (.1 초):
- 사살 지점 비활성화
결론
당신은 이제 수레밀기의 모든 기능을 완전히 갖춘 하나의 라운드를 만든것입니다, 만약 당신이 이 강의를 다 듣고 라운드나 점령 지점의 수를 당신이 필요한 대로 바꿀수도 있습니다. 만약 당신이 질문이 있다면 질문 해주세요.