디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] 메이저 맵제작자 제외하면 다 병신이긴하네....

ㅇㅇ갤로그로 이동합니다. 2024.03.28 00:17:13
조회 310 추천 1 댓글 4
														

24b0d121e09c28a8699fe8b115ef046546a8fc

ㅋㅋㅋㅋㅋ 시발.. 체력바가 노가다란다 ㅠㅠㅠㅠㅠㅠ

얼마나 지능이 낮으면 저런말을할까??
한번 볼까?


from eudplib import *

CP = EPD(0x6509B0)
HPBAR_WIDTH = 4
HPBAR_HEIGHT = 4

unitsize_bottom = EUDVArray(228)()
br = EUDByteReader()


def zero_max_shields_and_hp():
"""
다양한 초기화 트리거...

실드 안 쓰는 유닛은 최대 실드를 0으로 설정한다.
절대무적이거나 최대체력이 2500(하이브)보다 높으면 1로 설정한다.
유닛의 아래 크기를 배열에 저장한다. 체력바가 유닛 중심보다 얼마나 아래로 내려와야할지 구하는 용도.
"""
HAS_SHIELDS = EPD(0x6647B0)
SHIELD_AMOUNT = 0x660E00
MAX_HP = EPD(0x662350)
SPECIAL_ABILITY_FLAGS = 0x664080
UNITSIZE_RIGHT_BOTTOM = EPD(0x6617CC)

unit_id = EUDLightVariable()
set_max_shields = Forward()
set_max_hp = [Forward() for _ in range(2)]
set_unitsize_bottom = [Forward() for _ in range(2)]

br.seekepd(HAS_SHIELDS)

if EUDWhile()(unit_id <= 227):
has_shields = br.readbyte()
RawTrigger(
conditions=has_shields.Exactly(0),
actions=[
set_max_shields << SetMemoryX(SHIELD_AMOUNT, SetTo, 0, 0xFFFF)
]
)
DoActions([set_max_hp[0] << SetMemoryEPD(CP, SetTo, MAX_HP)])
RawTrigger(
conditions=Deaths(CurrentPlayer, AtLeast, 0x9C401, 0), # > 2500
actions=SetDeaths(CurrentPlayer, SetTo, 1, 0),
)
RawTrigger(
conditions=[
set_max_hp[1] << MemoryX(SPECIAL_ABILITY_FLAGS, AtLeast, 1, 1 << 29)
],
actions=SetDeaths(CurrentPlayer, SetTo, 1, 0),
)
temp = EUDVariable()
DoActions([
set_unitsize_bottom[0] << SetMemoryEPD(CP, SetTo, UNITSIZE_RIGHT_BOTTOM),
temp.SetNumber(0)
])
for a in range(9):
b = a + 16
RawTrigger(
conditions=DeathsX(CurrentPlayer, AtLeast, 1, 0, 2**b),
actions=temp.AddNumber(2**a)
)

VProc(temp, [
set_unitsize_bottom[1] << SetMemory(temp._varact + 16, SetTo, EPD(unitsize_bottom) + 87),
unit_id.AddNumber(1),
SetMemory(set_max_shields, SetTo, 0xFFFF0000),
SetMemory(set_max_hp[0] + 20, Add, 1),
SetMemory(set_max_hp[1] + 4, Add, 1),
SetMemory(set_unitsize_bottom[0] + 20, Add, 2),
SetMemory(set_unitsize_bottom[1] + 20, Add, 18),
])
RawTrigger(
conditions=unit_id.ExactlyX(0, 1),
actions=[
SetMemory(set_max_shields, SetTo, 0xFFFF),
SetMemory(set_max_shields + 16, Add, 1),
]
)
EUDEndWhile()


def zero_current_shields(epd):
"""실드 안 쓰는 유닛은 현재 실드를 0으로 설정한다."""
current_shields = epd + 0x60 // 4
if EUDIf()(MemoryEPD(current_shields, Exactly, 0x6400)): # 100
f_dwwrite_epd(current_shields, 0)
EUDEndIf()


def zero_current_hp(epd):
"""현재 체력이 2500(하이브)보다 높으면 1로 설정한다."""
current_hp = epd + 0x8 // 4
if EUDIf()(MemoryEPD(current_hp, AtLeast, 0x9C401)): # > 2500
f_dwwrite_epd(current_hp, 1)
EUDEndIf()


def onPluginStart():
DoActions([
# Scanner Sweep의 유닛기제 & 팔레트 설정
SetMemoryX(0x661558, SetTo, 1 << 17, 1 << 17),
])

zero_max_shields_and_hp()
for ptr, epd in EUDLoopUnit2():
zero_current_shields(epd)
zero_current_hp(epd)
f_setcurpl(Player1)


SCAN_VISION = 0x663259
SCANHIT_IMAGE = 0x666458
IMAGE425_ISCRIPT = 0x66F2EC # 이미지 [425] Unknown425
IMAGE232_ISCRIPT = 0x66EFE8 # 이미지 [232] Nuke Beam
IMAGECOORD_DIFF = 20


def set_scanhit_image(img):
"""Scanner Sweep Hit 스프라이트가 사용할 이미지를 설정한다."""
return SetMemoryX(SCANHIT_IMAGE, SetTo, img, 0xFFFF)


def prepare_hpbar():
"""스캔 시야 0으로 설정, 스캔이 쓸 이미지의 iscript를 250번으로 설정해 1 프레임 후 사라지게 한다."""
DoActions([
SetMemoryX(SCAN_VISION, SetTo, 0, 0xFF00),
set_scanhit_image(425), # 이미지 [425] Unknown425
SetMemory(IMAGE425_ISCRIPT, SetTo, 250),
SetMemory(IMAGE232_ISCRIPT, SetTo, 250),
])


def finish_hpbar():
"""스캔 시야, 이미지, iscript 원상복구"""
DoActions([
SetMemoryX(SCAN_VISION, SetTo, 0xA00, 0xFF00),
set_scanhit_image(546), # 이미지 [546] Scanner Sweep Hit
SetMemory(IMAGE425_ISCRIPT, SetTo, 277), # iscript [277] Unknown277
SetMemory(IMAGE232_ISCRIPT, SetTo, 73), # iscript [73] Nuke Beam
])


def draw_hpbar():
"""
체력바를 그린다.

현재 (체력 + 실드) 100마다 빨간 점 1개, 10마다 초록 점 1개를 그린다.
"""
LOC_L = EPD(0x58DC60) + 5 * GetLocationIndex("loc")
LOC_T = LOC_L + 1

for ptr, epd in EUDLoopUnit2():
# 실드와 체력이 10 미만이면 생략한다.
current_hp, current_shields = EUDCreateVariables(2)
VProc(epd, [
epd.QueueAddTo(current_shields),
current_shields.SetNumber(0x60 // 4),
])
VProc(epd, [
epd.QueueAddTo(current_hp),
current_hp.SetNumber(0x8 // 4),
])
EUDContinueIf([
MemoryEPD(current_hp, AtMost, 0x9FF),
MemoryEPD(current_shields, AtMost, 0x9FF)
])
hp_pool = EUDLightVariable()
VProc(current_hp, [
hp_pool.SetNumber(0),
current_hp.QueueAssignTo(CP),
])
for a in range(12): # 2500(하이브) < 4095
b = a + 8
RawTrigger(
conditions=DeathsX(CurrentPlayer, AtLeast, 1, 0, 2**b),
actions=hp_pool.AddNumber(2**a)
)

# 실드가 1 미만이면 계산을 생략한다.
VProc(current_shields, current_shields.QueueAssignTo(CP))
skip_shields = Forward()
EUDJumpIf(Deaths(CurrentPlayer, AtMost, 0xFF, 0), skip_shields)
for a in range(10): # 750(넥서스) < 1023
b = a + 8
RawTrigger(
conditions=DeathsX(CurrentPlayer, AtLeast, 1, 0, 2**b),
actions=hp_pool.AddNumber(2**a)
)
skip_shields << NextTrigger()

hpbar_position = EUDVariable()
unit_id = epd + 0x64 // 4
get_unitsize_bottom, get_position = Forward(), Forward()
VProc(unit_id, [
unit_id.QueueAssignTo(CP),
SetNextPtr(get_unitsize_bottom, unitsize_bottom),
SetMemory(get_unitsize_bottom + 328 + 16, SetTo, EPD(unitsize_bottom) + 1),
SetMemory(get_unitsize_bottom + 360 + 16, SetTo, EPD(unitsize_bottom) + 86),
])
for a in range(8):
b = 2**a
RawTrigger(
conditions=DeathsX(CurrentPlayer, AtLeast, 1, 0, b),
actions=[
SetMemory(get_unitsize_bottom + 4, Add, 72 * b),
SetMemory(get_unitsize_bottom + 328 + 16, Add, 18 * b),
SetMemory(get_unitsize_bottom + 360 + 16, Add, 18 * b),
]
)
get_unitsize_bottom << RawTrigger(
nextptr=unitsize_bottom,
actions=[
SetNextPtr(unitsize_bottom, get_position),
SetMemory(unitsize_bottom + 328 + 16, SetTo, EPD(hpbar_position.getValueAddr()))
]
)
get_position << NextTrigger()

position = EUDVariable()
VProc(epd, [
SetMemoryEPD(CP, SetTo, EncodePlayer(Player1)), # CP 캐시랑 일치시킨다.
epd.QueueAddTo(position),
position.SetNumber(0x28 // 4),
])
pos_x, pos_y = f_posread_epd(position)

set_right_bottom, nptr = Forward(), Forward()
RawTrigger(
nextptr=pos_x.GetVTable(),
actions=[
pos_x.QueueAssignTo(LOC_L),
SetNextPtr(pos_x.GetVTable(), pos_y.GetVTable()),
pos_y.QueueAssignTo(LOC_T),
SetNextPtr(pos_y.GetVTable(), hpbar_position.GetVTable()),
hpbar_position.QueueAddTo(LOC_T),
SetNextPtr(hpbar_position.GetVTable(), set_right_bottom),
]
)
set_right_bottom << RawTrigger(
nextptr=pos_x.GetVTable(),
actions=[
SetMemory(pos_x._varact + 16, Add, 2), # 오른쪽
SetMemory(pos_y._varact + 16, Add, 2), # 아래
SetMemory(hpbar_position._varact + 16, Add, 2), # 아래
SetNextPtr(hpbar_position.GetVTable(), nptr),
]
)
nptr << NextTrigger()

counter = EUDLightVariable()
initial_offset = int(round(4.5 * HPBAR_WIDTH))
DoActions([
counter.SetNumber(0),
SetMemoryEPD(LOC_L, Subtract, initial_offset),
SetMemoryEPD(LOC_L + 2, Subtract, initial_offset),
])
MOVELOC_START, MOVELOC_END = Forward(), Forward()

cont_100, cont_10 = Forward(), Forward()
PushTriggerScope()
MOVELOC_START << RawTrigger(
actions=[
CreateUnit(1, "Scanner Sweep", "loc", Player1),
SetMemoryEPD(LOC_L, Add, HPBAR_WIDTH),
SetMemoryEPD(LOC_L + 2, Add, HPBAR_WIDTH),
counter.AddNumber(1),
RemoveUnit("Scanner Sweep", Player1),
]
)
MOVELOC_END << RawTrigger(
nextptr=cont_10,
conditions=counter.AtLeast(10),
actions=[
counter.SubtractNumber(10),
SetMemoryEPD(LOC_L, Subtract, 10 * HPBAR_WIDTH),
SetMemoryEPD(LOC_L + 2, Subtract, 10 * HPBAR_WIDTH),
SetMemoryEPD(LOC_T, Add, HPBAR_HEIGHT),
SetMemoryEPD(LOC_T + 2, Add, HPBAR_HEIGHT),
]
)
PopTriggerScope()

if EUDIf()(hp_pool >= 201): # 체력+실드가 200보다 크면 빨간점을 쓴다.
DoActions([
set_scanhit_image(232),
SetMemoryEPD(LOC_T, Add, IMAGECOORD_DIFF),
SetMemoryEPD(LOC_T + 2, Add, IMAGECOORD_DIFF),
SetNextPtr(MOVELOC_END, cont_100)
])
if EUDWhile()(hp_pool >= 100):
RawTrigger(
nextptr=MOVELOC_START,
actions=hp_pool.SubtractNumber(100)
)
cont_100 << NextTrigger()
EUDEndWhile()
DoActions([
set_scanhit_image(425),
SetMemoryEPD(LOC_T, Subtract, IMAGECOORD_DIFF),
SetMemoryEPD(LOC_T + 2, Subtract, IMAGECOORD_DIFF),
SetNextPtr(MOVELOC_END, cont_10)
])
EUDEndIf()

if EUDWhile()(hp_pool >= 10):
RawTrigger(
nextptr=MOVELOC_START,
actions=hp_pool.SubtractNumber(10)
)
cont_10 << NextTrigger()
EUDEndWhile()


def EUDTurbo():
DoActions(SetMemory(0x6509A0, SetTo, 0))

def afterTriggerExec():
f_setcurpl(Player1)

prepare_hpbar()
draw_hpbar()
finish_hpbar()

EUDTurbo()



이게 알타니스가 체력바 크래프트 오픈소스 올려논거다

딱봐도 주석처리 다해놔서 쉽지?


주석처리 해논거 복붙해가서 똑같이 쓰면 끝난다..

변수에 주석처리 다해놧지?

저기 부분 수정하면 끝이고


뭐가 어렵단거야

코딩은 원래 이런건데 ㅋㅋㅋㅋ

저런게 좆같아서 그런말하는거면

니넨 평생 웹개발 이딴거못함 ㅋㅋㅋㅋㅋㅋㅋㅋ


저거 오픈소스 올려준 알타니스가 불쌍하노 ㅋㅋㅋㅋㅋㅋㅋ

니네 지능이 낮아서 어려워보이는거임;;


스타가 다른분야에비하면 존나쉬운거 맞는데 인정을못하네 

웹개발, 앱개발 , 인공지능개발 다른곳 봐 ㅋㅋ


이딴건 그냥 ㅈ도 아니야.. 

추천 비추천

1

고정닉 1

4

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2860 설문 경제관념 부족해서 돈 막 쓸 것 같은 스타는? 운영자 24/05/13 - -
11937 공지 24.5.6) *유즈맵 갤러리 이용 수칙* [5] ㅇㅇ갤로그로 이동합니다. 23.01.27 2611 47
14481 공지 유즈맵 갤러리 자작맵 모음집 (2024-05-10 업데이트) [1] Ramel갤로그로 이동합니다. 23.12.16 1173 9
12587 공지 [FAQ] 스타크래프트 유즈맵 가이드, 정보글, 자주하는 질문 [6] Ramel갤로그로 이동합니다. 23.03.21 2417 13
14365 공지 신문고 및 건의 바람 [5] ㅇㅇ(223.33) 23.11.20 2243 1
16096 일반 메모키 그걸 유기라고 볼 수 있냐 [1] ㅇㅇ(223.38) 05.16 33 0
16095 일반 메모키 제작자 맵이 계속 유기되는 이유 (장문주의) [1] 유갤러(58.226) 05.16 78 1
16094 일반 스운디 잼냐 유갤러(203.234) 05.16 31 0
16093 일반 기억속으로 유즈맵 일시 언급 금지 [10] Ramel갤로그로 이동합니다. 05.16 229 5
16092 일반 기억속으로는 인류역사에 기록될 유즈맵임 ㅇㅇ [4] 유갤러(1.246) 05.16 232 10
16091 일반 기억속으로가 유즈맵 퀄 중 탑 맞음 ㅇㅇ [1] ㅇㅇ(42.35) 05.16 100 0
16090 일반 아니 아직도 컴까기 방 파고 어그로 끄는애 있네 ㅋㅋㅋ 유갤러(14.37) 05.16 45 1
16089 일반 테케테케귀신 이거 유물 클로킹인건 너무하지않나 봉하밀면갤로그로 이동합니다. 05.16 50 0
16088 일반 아니근데 바이럴 다떠나서 진짜 명작이긴 함ㅋㅋ [5] 유갤러(220.94) 05.16 178 1
16087 일반 전라도디펜스 존나 옛날 맵 아니냐? 왜이리 언급이 많아짐 [4] ㅇㅇ(39.119) 05.16 95 0
16086 일반 전라도디펜스에 발작하는 홍어들 개웃기네ㅋㅋㅋ ㅇㅇ(118.41) 05.16 49 0
16085 일반 헬포디 6.6.3 ver 솔플 클! 유갤러(61.106) 05.16 16 0
16084 일반 갠적으로 심연의지하철보다 기억속으로를 더 재밌게한듯 [4] 유갤러(118.235) 05.16 142 1
16083 일반 와 공포 유즈맵 기억속으로 scmscx에서도 탑먹었네 [1] 유갤러(118.235) 05.16 114 0
16082 일반 콩나몰찜인가 얘는 뭐하는 놈임? [2] 유갤러(220.94) 05.16 108 0
16081 일반 내가 왜 유즈맵을 하는가 [3] 유갤러(14.41) 05.16 107 0
16080 📁자료 오늘도 제작 마무리한 폭피맵투척함 [4] 유갤러(125.133) 05.16 122 2
16079 일반 최근 유즈맵들로 본 맵제작의 의미 [6] 유갤러(106.101) 05.15 306 7
16078 일반 ㅋㅋㅋㅋ메모키 현상황 [3] 유갤러(121.140) 05.15 206 6
16077 일반 민폐컨트롤 하드방<-믿고걸러라 [1] 유갤러(112.72) 05.15 78 0
16076 일반 제일 들어가기 싫은방 [3] 유갤러(222.97) 05.15 193 5
16075 일반 이니셜 그건 누가만든거임? [2] 유갤러(1.246) 05.15 98 0
16074 일반 k런쳐 쓰는애들이 대부분 병신인이유 ㅇㅇ(221.167) 05.15 119 8
16073 일반 팰운디 클리어(100단계) [1] 아르테스갤로그로 이동합니다. 05.14 146 0
16072 😎인증 4라에 트타 깸 [2] ㅇㅇ갤로그로 이동합니다. 05.14 107 5
16071 일반 전라도디펜스 유신의추억 조건이 머임? [3] 유갤러(118.220) 05.14 143 0
16070 일반 왜 몇몇 인간들은 전라도디펜스를 싫어하는거임? [2] ㅇㅇ(180.189) 05.14 174 0
16069 일반 팰운디 꺴다 시바꺼 유갤러(218.147) 05.14 84 0
16067 일반 뉴원랜디3 미션공략 [2] 유갤러(119.203) 05.14 71 2
16066 일반 캐보레(캐릭터보스레이드) 코드 공유좀 해주실부운 [13] 유갤러(106.101) 05.14 225 0
16065 일반 유즈맵에서 핵쓰는새끼는뭐냐 [3] ㅇㅇ(59.29) 05.14 193 0
16064 🧐질문 같은 종류의 유닛에 다른 이름붙일 방법 없나? [3] 유갤러(211.119) 05.14 130 0
16063 일반 메모키 어휴 ㅋㅋ [4] 유갤러(211.36) 05.13 374 9
16062 일반 sca 치트엔진 쓸려면 sca 키고 써야함? [3] ㅇㅇ(59.14) 05.13 186 0
16061 🧐질문 유즈맵 255업 [4] 유갤러(182.31) 05.13 144 0
16060 😎인증 캐릭터보스레이드 익스트림 난이도 깻다 [12] 봉하밀면갤로그로 이동합니다. 05.13 163 1
16059 일반 전라도 디펜스 scmscx에 올려주면 안대냐 [1] ㅇㅇ(59.26) 05.13 79 0
16058 일반 메모키2 결국죽겟네 [10] inyeon갤로그로 이동합니다. 05.13 385 0
16056 🧐질문 너네 게임하면서 아는사람 만나봄? [2] ㅇㅇ(1.218) 05.13 129 0
16055 일반 전쟁인물전쟁하는 방장새끼 벤쳐하노 ㅋㅋ [2] ㅇㅇ(1.218) 05.13 95 3
16053 일반 누가 벽짓고 저글링 막기3 공략좀 올려줘 [9] 유갤러(218.155) 05.13 142 0
16052 일반 힐링하려고 스타켰는데 어질어질하네 [1] 유갤러(118.235) 05.13 163 5
16051 일반 팰운디 쒸이이이부랄 유갤러(218.147) 05.13 113 0
16050 일반 미궁 기억속으로 홍보때문에 유갤러(121.140) 05.12 149 0
16049 일반 우주컴싸 the root 0.01 수정자인데 [6] ㅇㅇ(175.210) 05.12 193 0
16048 🧐질문 랜능크 싱글버젼 같은거 없나? [1] 유갤러(112.147) 05.12 61 0
16047 🧐질문 성큰디펜스 10웨이 미네랄 캐는 버전 가지고 있는 사람 있음?? [6] 유갤러(121.101) 05.12 103 0
16045 일반 미궁맵은 걍 스타인겜 기믹으로 푸는게 재밌음 [1] 유갤러(39.124) 05.12 158 0
16044 🧐질문 하씨1팔도저히못풀겟네 [5] 유갤러(121.140) 05.12 212 0
16043 🧐질문 삼국지<<이 맵 인기 좋음? [4] ㅇㅇ(221.144) 05.12 112 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2