Simpleplanes/모딩

1 개요

Simpleplanes의 모딩은 다른 게임의 모딩과 조금 다른면이 있다. 일반게임의 모딩은 보통 새로운 부품을 만드는 반면 Jundroo가 제작한 부품을 개조하거나 마개조가 대부분이다 좀 한다하면 아예 부품을 제작한다.
모딩은 크게 부품모딩, 맵모딩으로 나뉜다.

부품 모딩은 게임의 파일을 외부에서 수정하거나, 게임에 따로 다른 사람이 제작한 파일을 집어넣어 새로운 부품을 추가한다. 사이트에 공유하는 비행기에는 모딩을 하더라도 원래 있던 부품만 붙여 공유한다. 따로 모드를 받은 비행기를 다운받으려면 그 사람이 쓴 모드를 받아야하는데, 아무래도 그게 귀찮다보니 사용한 모드가 표시됨에도 그런 비행기는 인기가 낮다.

맵 모딩은 위의 후자와 같이 다른 사람들이 만든 맵을 다운받는것이다. 무척이나 다양한 맵들이 있다.

모드를 추천하자면 Fine tuner가 1순위이다.
기본적으로 심플 자체에는 제약이 많지만, 이 모드는 블럭 크기/위치/각도조절을 마음대로 할 수가 있다. 이걸 깔면 과장 좀 섞어 심플이 3D 모델링 프로그램이 된다 해도 과언이 아니다.

유저들이 하도 모딩으로 별 개조를 다하니 개발자들이 제작 관련 기능에는 더이상 별 손을 안대고있다. 오히려 모딩하기 편하도록 파일 형식을 계속 수정해나가고 있다.

2 부품모딩

2.1 일반모딩

일반 모딩은 개요에서 설명하듯 Jundroo에서 제작한 부품을 사용하는 형식이다.

안드로이드 기준으로

내부 저장소/android/data/com.jundroo.simpleplanes/files/AircraftDesigns

위치에 비행기 파일이 있고,

내부 저장소/android/data/com.jundroo.simpleplanes/files/SubAssemblies

위치에 서브어셈블리로 저장한 부품이 있다. 서브어셈블리의 경우 파일 이름은 16진수로 이루어져있는 xml파일형식이다.
기본파일명은

1234abcd-1abc-2abc-3abc-123456abcdef.xml

8자리-4자리-4자리-4자리-12자리의 16진수코드로 이루어져있다.
(파일이름을 수정해도 큰문제는 없다.)
파일이름을 수정해놓지 않은채로 계속 등록을 하다보면 나중에 찾기가 어려워지니 미리 수정을 해놓자.
xml파일을 수정할수있는 프로그램으로 열면 그뒤는쉽다.

2.1.1 부품 코드

도움말
코드를 알아보기 쉽게, 줄임말을 썼다.

T : True/False를 적어서 켜짐/꺼짐을 설정한다.
N : 숫자.
S : 글씨. 대부분 정해진 단어를 쓴다.
C : 색. 16진수의 숫자를 사용하며, 6자리 또는 8자리[1]를 사용한다.

입력값
"입력값" 이 필요한 코드의 경우, 이 중에서 원하는 입력값을 쓰면 된다.

Throttle : 출력.
Brake : 브레이크.
Roll : 롤.
Pitch : 피치.
Yaw : 요잉.
Trim : Trim.
VTOL : VTOL.
LandingGear : 랜딩기어. 모딩이 아닌 이상 선택할 수 없다.
FireGuns : 기총 발사. 모딩이 아닌 이상 선택할 수 없다.


<비행기 파일>

비행기 파일에 들어있는 코드다.

Connection
두 파츠간의 연결에 관한 코드다.
attachPointsA(N,N,N…) : A파츠의 연결부위.
attachPointsB(N,N,N…) : B파츠의 연결부위.
partA(N) : A파츠의 ID.
partB(N) : B파츠의 ID.


Material
색에 관한 코드다.
맨 위의 색 ID가 0번, 그 밑으로 1번,2번,3번…n번이고,파츠의 색을 설정할땐 이 ID를 적는다.

color(C) : 색.
m(N) : 거울설정. 0~1의 값을 쓴다. 클 수록 거울재질에 더 가까워진다.
r(N) : 추가바람
s(N) : 거울 선명도. 0~1의 값을 쓴다. 클수록 더 선명하다.


<파츠>

Part
모든 파츠에 적용 가능한 코드다.

centerOfMass(N,N,N) : 무게중심. xml에 써져있지만 수정이 안된다. 그러면 왜 있는거야
disableAircraftCollisions(T) : 이 파츠 와 다른 모든 파츠와의 충돌을 끈다.
drag(N,N,N,N,N,N) : 공기저항. 이것 역시 xml에 써져있지만 수정이 안된다.
id(N) : 파츠의 ID.
initialRotationMirrored(N,N,N)
massScale(N) : 무게 배율. 이 값만큼 파츠무게를 곱한다.
materials(N,N,N…) : 파츠의 색.
partType(S) : 파츠의 타입.
position(N,N,N) : 파츠의 위치.
rotation(N,N,N) : 파츠의 각도.
scale(N,N,N) : 파츠의 크기. X/Y/Z좌표 방향으로 설정 값만큼 크기가 곱해진다.


<.State>

파츠의 세부설정이다.

AdaptiveBlock.State
기본블럭에 있다.

state(N) : 블럭의 모양. 무슨 값을 넣어야 하는지 아무도 모른다


AdaptiveNoseCone.State
간단히 사용 가능한 빨간 노즈콘에 있다.

scale(N,N,N) : 노즈콘의 크기. 이 역시 X/Y/Z방향으로 다른 값을 넣을 수 있다.


BeaconLight.State
비콘라이트의 전용코드.

activationGroup(N) : 비콘이 켜지게 하는 활성화그룹.
blinkProgram(N,N,N…) : 비콘의 깜빡임 설정. 적은 시간만큼 비콘이 켜졌다 꺼짐을 반복한다.
designerBlinkProgram(S) : 수정화면에서 보이는 비콘 깜박임 설정의 이름. 이상한거 적으면 그냥 Error라고만 한다
input(S) : 입력값. 비콘에 이게 필요한가요
showHalo(T) : 비콘이 켜져있을때 발광효과를 준다.


Bomb.State
폭격용 폭탄 전용코드.

activationGroup(N) : 폭격을 가능하게 하는 활성화그룹.


CameraVantage.State
카메라에 관련된 코드다. 미사일 카메라 등에도 쓰인다.

autoCenterCamera(T) : ~
autoOrient(T) : ~
autoZoomOnCockpit(T) : ~
lookAtCockpit(T) : ~
viewMode(S) : 시야 모드.


CarEngine.State
자동차엔진 전용코드.

power(N) : 엔진힘.


Cockpit.State
조종석 전용코드.

primaryCockpit(T) : 이 조종석을 중심으로 한다.


Detacher.State
분리장치에 있는 코드.

detachForce(N) : 분리힘. 클수록 분리되는 파츠가 저 멀리(...) 날아간다.
detacherUiMaxForce(N) : 수정화면에서 보여주는 최대 분리힘.
enabled(T) : 분리장치 사용여부. 꺼져있으면 분리가 되지 않는다.
group(N) : 분리시키는 활성화그룹.


Engine.State
제트엔진에 쓰이는 코드다. 왜인진 몰라도 구버젼 프롭엔진도 이걸 쓴다(...)

exhaustScale(N,N,N) : 부스터이펙트의 크기.[2]
exhaustStartColorOverridePrimary(C) : 부스터이펙트의 주색.
exhaustStartColorOverrideSecondary(C) : 부스터이펙트의 보조색.
powerMultiplier(N) : 제트엔진의 힘 배율.


EngineThrustPort.State
VTOL노즐 전용코드.

exhaustScale(N,N,N) : 부스터이펙트의 크기.
exhaustStartColorOverridePrimary(C) : 부스터이펙트의 색.


FloatingPart.State
추가바람

enabled(T) : 켜져있으면 물에 뜬다.


FuelTank.State
연료통 종류에 쓰이는 코드.

capacity(N) : 연료 저장가능량. 연료량이랑 같게 하면 된다
fuel(N) : 연료량.


Fuselage.State
동체블럭에 쓰이는 코드.

buoyancy(N) : 부력.
cornerTypes(N,N,N,N,N,N,N,N) : 모서리의 모양.
deadWeight(N) : 추가무게.
frontScale(N,N) : 앞부분의 크기.
fuelPercentage(N) : 연료량.
inletSlant(N) : 동체 공기흡입구의 각도.
inletThicknessFront(N) : 동체 공기흡입구 앞부분의 두께.
inletThicknessRear(N) : 동체 공기흡입구 뒷부분의 두께.
inletTrimSize(N) : 동체 공기흡입구 줄무늬의 크기.
offset(N,N,N) : 동체블럭의 길이와 기울임설정.
rearScale(N,N) : 뒷부분의 크기.
version(N) : ~


Gun.State
총기에 쓰이는 코드.

activationGroup(N) : 총을 쏠수 있게 하는 활성화그룹.
ammoCount(N) : 탄창.
bulletCaliber(N) : 탄의 구경.
bulletCaliberMeters(N)
bulletWeightKg(N) : 탄의 무게.
burstCount(N) : 점사설정. 설정한 값만큼 점사한다.
muzzleVelocity(N) : 탄속.
roundsPerSecond(N) : 초당 발사량.
spread(N) : 탄퍼짐율.
timeBetweenBursts(N) : 점사 딜레이 시간.
tracerColor(C) : 탄알의 색.


InputController.State
키입력이 필요한 파츠라면 거의 다 이 코드를 쓴다.

activationGroup(N) : 활성화그룹.
input(S) : 입력값.
invert(T) : 반전여부.
max(N) : 최대값.
min(N) : 최소값.


JointRotator.State
로테이터 종류의 전용코드.

range(N) : 회전각.
speed(N) : 회전속도.


Missile.State
미사일 전용코드.

activationGroup(N) : 미사일을 발사할수 있게 하는 활성화그룹.
killCam(T) : 킬캠. 켜져있으면 명중 직전에 슬로우모션으로 미사일을 보여준다.


Parachute.State
낙하산 전용코드.

activationGroup(N) : 낙하산을 펼치는 활성화그룹.
size(N) : 낙하산의 크기.
style(S) : 낙하산의 무늬.


Piston.State
피스톤 전용코드.

cycle(T) : 피스톤이 계속 왕복운동을 하게 만든다.
extend(T) : ~
preventBreaking(T) : ~
range(N) : 피스톤의 이동거리.
speed(N) : 피스톤의 속도.


PropEngineAdvanced.State
프롭엔진 전용코드. 구버젼 프롭엔진은 이거대신 제트엔진 코드를 쓴다(...)

chordScale(N) : ~
diameter(N) : ~
maxRpm(N) : 프롭엔진의 최대RPM.
pitchControlType(S) : 프로펠러의 피치조종 타입.
power(N) : 프롭엔진의 힘.
propellerCount(N) : 프로펠러 날의 개수.
propellerPitch(N) : ~
propellerPitchScale(N) : ~
propellerType(S) : 프로펠러 타입.
reverse(T) : ~
reverseRotation(T) : ~
throttleControlType(S) : 출력 조종타입.


ReactionControlNozzle.State
VTOL RCN의 전용코드.

autoAssignType(T) : 자동으로 입력값을 바꾼다.
reverse(T) : 반전설정.
type(S) : 입력값.


ResizableWheel.State
자동차바퀴에 쓰이는 코드.

brakeTorque(N) : 브레이크의 힘.
damper(N) : ~
direction(S) : 바퀴의 방향.
enableAutoTraction(T) : 바퀴 마찰력을 자동으로 설정한다.
enableSuspension(T) : 바퀴 서스펜션을 켠다.
engineId(N) : 바퀴를 돌리는 엔진의 ID.
maxAngularVelocity(N) : 바퀴의 최대 회전속도.
size(N) : 바퀴의 크기.
slipForwardAsymptote(N) : ~
slipForwardExtremum(N) : ~
slipSidewaysAsymptote(N) : ~
slipSidewaysExtremum(N) : ~
spring(N) : ~
tire(S) : 타이어의 종류.
tractionForward(N) : 전후방향으로의 바퀴마찰력.
tractionSideways(N) 옆방향으로의 바퀴마찰력.
turningAngle(N) : 바퀴의 스티어링각도.
turningRate(N) : 바퀴의 스티어링속도.
width(N) : 바퀴의 넓이.


RetractableLandingGear.State
랜딩기어에 있다.

damper(N) : ~
flipped(T) : 좌우반전 여부.
sensitivity(N) : ~
spring(N) : ~
turningEnabled(T) : 좌우로 스티어링이 가능하게 한다.


RocketPod.State
로켓포드 전용코드.

activationGroup(N) : 로켓을 쏠수 있게 하는 활성화그룹.


Rotator.State
VTOL노즐에 있다.

enabled(T) : 이걸 끄면 VTOL노즐이 돌아가지 않는다.


Suspension.State
서스펜션 스프링 전용코드.

damper(N) : ~
spring(N) : ~


Wheel.State
내장 불가능한 랜딩기어 바퀴에 있다.

damper(N) : ~
flipped(T) : 좌우반전 여부.
sensitivity(N) : ~
turningEnabled(T) : 좌우로 스티어링이 가능하게 한다.


Wing.State
날개에 쓰이는 코드.

airfoil(S) : 추가바람
allowControlSurfaces(T) : 플랩 사용여부.
angleOfAttack(N) : ~
density(N)
fuelPercentage(N) : 연료량.
hingeDistance(N) : ~
inverted(T) : ~
rootLeadingOffset(N) : 날개 안쪽부분의 앞쪽 길이.
rootTrailingOffset(N) : 날개 안쪽부분의 뒷쪽 길이.
tipLeadingOffset(N) : 날개 바깥부분의 앞쪽 길이.
tipPosition(N,N,N) : 날개 끝부분의 위치.
tipTrailingOffset(N) : 날개 바깥부분의 뒷쪽 길이.
wingPhysicsEnabled(T) : 날개 물리 사용여부.


WingLandingGear.State
날개에 다는 랜딩기어에 쓰이는 코드.

damper(N) : ~
flipped(T) : 좌우반전 여부.
sensitivity(N) : ~
spring(N) : ~
turningEnabled(T) : 좌우로 스티어링이 가능하게 한다.


ControlSurface
날개의 플랩에 쓰인다.

end(N) : ~
inputId(S) : 입력값.
invert(T) : 반전여부.
maxDeflectionDegree(N) : ~
start(N) : ~

2.2 부품제작

[ 미작성 ]

3 맵모딩

맵모딩의 경우에는 준드로 공식영상을 추천한다.
[1]
공식개발자가 몰컴으로 설명하는거 같다면 정상이다

  1. 마지막 2자리가 투명도를 담당한다.
  2. 파츠의 XYZ방향이 아닌, 월드의 XYZ방향을 쓴다. 이 말인 즉슨 파츠를 돌려도 이 크기설정은 따로 논다는 것.