이번에 고칠 내용은...간만에 주문 관련...
사실 주문 고치는 것이 제일 재미있고, 효과도 확실하지.
다만 AI쪽이 전혀...;; 그래서 거의 플레이어 전용으로 작동하지. 따로 막지 않아도 사용 패턴이 없다보니 AI는 안쓰니까.
곧...먼치킨화 하기 쉽다는 뜻이지--;

뭐 그래도, 공부도 된다는 점이 좋다구. XML에 python의 조합...동시에 공부된다!
또한, 자동으로 뭔가를 처리해야 한다거나 해서 조건을 매턴 검색하는...그러니까 턴랙하고도 무관하기 때문에,
어떤 효과를 보는데 있어서는 부작용도 참으로 적은 방법이지. 그래서 애용하고 있고...

다만, 역으로 반감도 만만치 않더구만--;
확실히, 밸런싱에는 위화감이 덜 들어도...완전히 새로운 주문을 만들어 넣는 것은, 예의 먼치킨화와 더불어 좀 위험하긴 하다.
게임 불감증~ 으로 가는 길이라서 그런가봐. 다들 본능적으로 아는 듯.

그러니까, 기존 주문을 건드려 보겠다. 사실 마개조판에 들어간 새 주문은...그냥 알아서 안쓰면 밸런싱 되는거야^^; 자기가 좀 잘하는 사람이면 그거 안쓰면 된다구.

전에도 얘기했지만...주문중에 필수다! 라고 손꼽히는 주문 중 첫손 꼽히는 것은 역시...활력 주문이지.
드워프들이 아니면 생각보다 용이하게 얻을 수 있는데...드워프 중에도 카자드는--; 종교 영웅이라도 얻지 않으면 쓰기가 불가능--; 그나마 러취프는 대마법사 나오면 되니까...
살기 험악한 지형을 보다 나은 지형으로 바꾸어, 생산력과 효율을 높이는데 지대한 도움을 주는 이 주문을 무시하기는 힘들다.(난 그래서 카자드는 안해;;)

그런데...이 주문에는 심각한 버그가 있단 말씀이야?

자원이 뒤집어 진다던가, 불이 난다던가 하는 사태가 일어나기는 해도, 지옥의 지형 자체는 원래의 지형에 비해 떨어지는 것은 없어.
원래 식량+2였던 지형이면 지옥의 지형으로 바뀐다 하더라도 식량+2는 유지된다. 줄어들지도, 늘어나지도 않아.
다만...자원이 뒤집어 지는 것이 영...노리고 쓰기는 힘들거든. 뭐 높은 아마게돈 카운터에 익숙한 사람이라면 잘 할지 모르겠다.
이런 지옥의 지형을 멀쩡한 지형으로 바꿔주는 주문은 쉽게 얻지. 라이프 계열의 정화 주문...
부가 효과도 있으니 안써본 사람은 없을 거 같은데...
상당히 많은 지형을 바꾸기는 하지만, 전적으로 토지의 산출은 건드리지를 않는다. 그건 다른 주문들 몫이지. 샘이니 말리기니 활력이니...

그중에서도 특히 활력! 네이쳐 3레벨...
산출에 변화를 주는...그러니까 아무것도 안주던 땅이(설원)→식량을 하나 주다가(툰드라)→망치도 추가로 하나 주고(평원)→궁극으로는 식량 둘을 주는(초원) 식으로 변하게 하는 것은...활력 주문만의 역할이지. 지력을 높이는 건가?
헌데...버그가 있다 이거야. 자칫 턴만 날리는 수가 있는데...왜 그런지 보자.
XML쪽은 볼 거 없고, python쪽만 보면 된다. CvSpellInterface.py파일을 열어보자.

def reqVitalize(caster):
pPlot = caster.plot()
if pPlot.getOwner() != caster.getOwner():
return False
if pPlot.isWater():
return false
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_GRASS'):
return False
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_BURNING_SANDS'):
return False
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_BROKEN_LANDS'):
return False
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_FIELDS_OF_PERDITION'):
return False
return True

def spellVitalize(caster):
pPlot = caster.plot()
if(pPlot.getTerrainType()==gc.getInfoTypeForString('TERRAIN_SNOW')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_TUNDRA'),True,True)
elif(pPlot.getTerrainType()==gc.getInfoTypeForString('TERRAIN_TUNDRA')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_PLAINS'),True,True)
elif(pPlot.getTerrainType()==gc.getInfoTypeForString('TERRAIN_DESERT')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_PLAINS'),True,True)
if pPlot.getFeatureType() == gc.getInfoTypeForString('FEATURE_SCRUB'):
pPlot.setFeatureType(-1, -1)
elif(pPlot.getTerrainType()==gc.getInfoTypeForString('TERRAIN_PLAINS')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_GRASS'),True,True)

자...일단 주문 사용 조건에서,
 물에서는 못쓰고(수상 보행이 있으니까),
 초원에서도 못쓰며(FfH2는 식량이 장땡이니...)
 지옥의 지형 중 여울을 제외한 지형에서 사용할 수 없다.(참고로, 늪↔여울)
...어라? 그럼 여울에서는 쓸 수 있다는 얘기네?
그런데...그럼 주문 구현 부분에 그게 되어 있는가 봤더니...
 설원이면 툰드라로,
 툰드라면 평원으로,
 사막이면 평원으로,(잡목도 그 와중에 치우고...)
 평원이면 초원으로...
끝이네? 아니, 여울은 어디갔어?

즉 이대로 두면...여울 위에 있을 때는 주문이 사용 가능한 줄 알고 사용했더니, 아무 일도 안일어나고 주문 사용 기회만 날리겠지.
더구나, 늪은 왜 건드리지도 않아...?
그래서, 나는 이렇게 바꿔놨어. 그냥 다 붙인다고 생각하고 따로 색은 안넣겠다...
참고로, 이거 마개조 보완 어쩌구...에 들어있는 거야.

def reqVitalize(caster):
pPlot = caster.plot()
if pPlot.getOwner() != caster.getOwner():
return False
if pPlot.isWater():
return false
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_BURNING_SANDS'):
return False
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_BROKEN_LANDS'):
return False
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_FIELDS_OF_PERDITION'):
return False
if pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_SHALLOWS'):
return False
return True

def spellVitalize(caster):
pPlot = caster.plot()
if(pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_SNOW')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_TUNDRA'),True,True)
elif(pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_TUNDRA')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_PLAINS'),True,True)
elif(pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_DESERT')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_PLAINS'),True,True)
if pPlot.getFeatureType() == gc.getInfoTypeForString('FEATURE_SCRUB'):
pPlot.setFeatureType(-1, -1)
elif(pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_PLAINS')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_GRASS'),True,True)
elif(pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_MARSH')):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_GRASS'),True,True)
elif pPlot.getTerrainType() == gc.getInfoTypeForString('TERRAIN_GRASS'):
pPlot.setTerrainType(gc.getInfoTypeForString('TERRAIN_PLAINS'),True,True)

자...지옥의 지형에서는 예외없이 사용 불가능하고...
원래 하던 것에 추가로, 늪을 초원으로 바꾸는 효과와, 초원을 평원으로 바꾸는 효과가 추가되었지.
 전자는...어째서 늪을 바꾸는 주문이 없는가 싶지 않아? 그래서 당연하게도 활력 주문 효과로 추가한 것이고,
 후자는...식량이 필요 없는 인페르날을 위한 것이지. 초원은 걔들 입장에선 아무 산출이 없는 땅이나 마찬가지거든. 평원이면 망치라도 하나 줄테니...

밸런스가 깨졌다는 생각이 드나? 오히려 이쪽이 더 어울린다고 생각하지 않아?
내 생각에는, 이건 필수로 고쳐야 할 것이라고 보는데...아닌가?
자, 지금 당장 고치도록~
 
죠니 사사키가 작성한 글입니다.
,