최근 수정 시각 : 2024-12-01 21:09:43

Simpleplanes/모딩

1. 개요2. 부품모딩
2.1. 일반모딩
2.1.1. 부품 코드
2.2. 부품제작
3. 맵모딩

1. 개요

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

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

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

모드를 추천하자면 Fine tuner와 Overload가 1순위이다. 기본적으로 심플 자체에는 제약이 많지만 Fine tuner로 블럭 크기/위치/각도조절을 마음대로 할 수가 있고, Overload는 게임 내에서 xml 에디팅을 바로 할 수 있다. 이걸 깔면 과장 좀 섞어 심플 플레인이 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) : 무게중심.
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) : 마력(HP).


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) : 탄의 구경. 변경해도 아무 효과가 없다. 그래픽상 보여지는 예광탄의 크기는 총기의 scale 값에 영향을 받는다.
bulletCaliberMeters(N)
bulletWeightKg(N) : 탄의 무게.
burstCount(N) : 점사설정. 설정한 값만큼 점사한다.
burretScale(N.N.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) : 킬캠. 켜져있으면 명중 직전에 슬로우모션으로 미사일을 보여준다.
firingDelay(N) : 미사일 발사 지연 길이. 숫자를 높이면 짧은 시간에 많은 미사일을 발사할 수 있다.
ignitionDelay(N) : 미사일 점화 지연 길이. 숫자를 높이면 분리후 점화되는 시간을 늦출 수 있다.
lockTime(N) : 락온에 걸리는 시간.
maxRange(N) : 최대사정거리
maxTargetingAngle(N) : 락온이 가능한 최대각도. 미사일의 끝부분으로터 밑 설정갚만큼의 각도+위 설정갚만큼의 각도까지 락온이 가능하다.
maxHeadingAngleAdjustmentRate(N)
maxVelocityAngleAdjustmentRate(N)
proximityDetonationRangeMin(N) : 미사일의 최소 폭발범위.
proximityDetonationRangeMax(n) : 미사일의 최대 폭발범위.
function(AirtoAir, AirtoSurface) : 미사일의 용도. 전자로 설정하면 airtoair 미사일이 된다.


Parachute.State
낙하산 전용코드.

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


Piston.State
피스톤 전용코드.

cycle(T) : 피스톤이 계속 왕복운동을 하게 만든다.
extend(T) : 피스톤의 초기 상태를 결정한다. True일 경우 늘어난 상태로, False의 경우 줄어든 상태로 시작한다. 에디터 상에서도 마찬가지.
preventBreaking(T) : True일 경우 연결 부위가 아무리 큰 힘을 받아도 파손되지 않는다. 오프로드 차량의 서스펜션을 만들 때 유용한 설정.
range(N) : 피스톤의 이동거리.
speed(N) : 피스톤의 속도.


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

chordScale(N) : 프로펠러 날개의 폭. 값이 작으면 헬기의 로터 같은 모양이, 값이 크면 선박의 스크류 같은 모양이 된다.
diameter(N) : 프로펠러의 지름.
maxRpm(N) : 프롭엔진의 최대RPM. 대형 프롭으로 급강하 시 한계속도를 넘거나, 프로펠러의 크기에 비해 엔진 마력이 높으면 회전속도 초과로 폭발하는데, 그 한계 회전수를 결정한다. 게임 상에서 들리는 엔진 소리는 한계 RPM에 대한 현재 RPM의 비율로 결정되므로 이 값을 높이면 쓰로틀 100% 상태에서도 웅웅거리는 저음이 들리고, 이 값을 낮추면 쓰로틀을 살짝만 높여도 앵앵거리는 소리가 나며 과회전 폭발하는 경우가 있다.
pitchControlType(S) : 프로펠러의 피치조종 타입. 자동(Auto), 고정피치(Fixed), 수동(Manual)의 3가지가 있다.
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) : 날개 단면의 형상. 실제 항공역학적으로 복잡하지는 않고, 대칭형(Symmetric), 반대칭(Semi-Symmetric), 아래쪽이 평평한(Flat Bottom) 세 종류만 간단하게 구현되어 있다. 대칭형의 경우 받음각이 없으면 양력이 발생하지 않는다. 아래쪽이 평평한 경우 받음각이 없어도 양력이 발생한다. 배면비행시엔 아래쪽으로 양력이 발생한다. 반대칭의 경우 중간 정도의 특성.
allowControlSurfaces(T) : 조종면 사용여부. 강도가 높은 대신 조종면을 추가할 수 없는 Structural Wing의 경우에도 True로 만들어 주면 게임 내 에디터에서도 조종면을 추가할 수 있게 된다.
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) : 좌우로 스티어링이 가능하게 한다.
<Sub .State>

ControlSurface
날개의 조종면에 쓰인다.

end(N) : 날개 뿌리 기준으로 어느정도 거리에서 조종면이 끝나는지.
inputId(S) : 입력값.
invert(T) : 반전여부.
maxDeflectionDegree(N) : 조종면의 가동 각도.
start(N) : 날개 뿌리 기준으로 어느정도 거리부터 조종면이 시작되는지.

2.2. 부품제작

[ 미작성 ]

3. 맵모딩

맵모딩의 경우에는 준드로 공식영상을 추천한다.
https://youtu.be/PIR6aEl-Q7s
공식개발자가 몰컴으로 설명하는거 같다면 정상이다


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