실험용 블로그

취미로 이것저것 하는 블로그

이 블로그 검색

arrow_upward

실험용 블로그

취미로 이것저것 하는 블로그
TITLE
개조용#스타1 유즈맵

5. 1인용 유즈맵 개요 및 다운로드


update 2023/12/14
뭐든 일단 한번 만들어 보는게 많은 도움이 된다
랜덤요소를 중점으로하는 1인용 맵이다
기본맵, e3s파일, EUD맵의 다운로드 링크다
[DOWNLOAD: 기본맵]
[DOWNLOAD: E3S파일]
[DOWNLOAD: EUD적용맵]

아래는 이번 유즈맵의 대략적인 내용이다

맵에디터로 맵 모양부터 만들자
시작, 통로와 방, 끝으로 구성된 맵이다
주요 지점마다 로케이션과 건물을 배치했다


시작점 2개, 맵 설정, 세력 설정도 잊으면 안된다
맵 이름은 SingleRandom 으로 정했다

대략적인 브리핑 내용도 만들자
우주괴수가 점령한 연구소를 탈환한다는 뻔한 내용이다




맵에디터로 하는일은 대부분 완료다
이후로는 EUD툴을 사용해야 된다

주인공 특수유닛은 핵사용이 가능한 고스트를 기본으로 만들었다

주요건물을 파괴하면 특수유닛이 등장하는 경우가 있다
합류하는 특수유닛 이름은 블리자드 게임에서 하나씩 따왔다
나름 특징있게 스킬, 음성, 포트레이트 등등 데이터를 수정했다







이번맵은 파괴보상, 적군구성 등에 랜덤을 적용했다
게임시작시 랜덤사용을 설정하고 rand()함수로 랜덤값을 얻는다
주로 이벤트 관련 배열을 섞어서 랜덤한 결과를 얻어냈다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function shuffleArray(array, start, end){//배열을 랜덤하게 섞어준다
    const arrayEUD = EUDArray.cast(array);
    for(var i = start; i < end+1; i++){
        var seed = ( rand() %  (end+1-start) ) +start;
        var temp = arrayEUD[i]; 
        arrayEUD[i] = arrayEUD[seed];
        arrayEUD[seed] = temp;
    }
}
 
function random_test(start, end) {//범위 안의 랜덤한 값을 얻는다
    return ( rand() %  (end+1-start) ) +start;
}
 
function onPluginStart() {
    randomize();//랜덤사용 설정
}
cs
특정유닛에 로케이션을 이동하는 함수로 각종 이벤트에 유용하게 사용했다
1
2
3
4
5
6
7
8
9
10
function location_to_unit(location, unit){//어떤 유닛의 위치로 로케이션을 이동 
    const _x = dwread_epd(unit + 0x02C / 4/ 256;//epd halt X좌표
    const _y = dwread_epd(unit + 0x030 / 4/ 256;//epd halt Y좌표
    const locationEPD = EPD(0x58DC4C+ location * 5//dwread_epd(locationEPD)?;
 
    SetMemoryEPD(locationEPD, SetTo, _x-32); //left 
    SetMemoryEPD(locationEPD + 1, SetTo, _y-32); //top
    SetMemoryEPD(locationEPD + 2, SetTo, _x+32); //right /+32*width
    SetMemoryEPD(locationEPD + 3, SetTo, _y+32); //bottom /+32*height
}
cs
이번 유즈맵은 맵에디터에서 건물들을 미리 배치했다 이렇게 미리 배치한 유닛들은 인덱스를 통해서 EPD를 얻을 수 있다 EPD는 일종의 주소로 자세한 내용은 스타에디터아카데미를 참고하자
1
2
3
4
5
6
function getUnit(index){//유닛의 인덱스로 EPD 얻기
    var ptr = 0;
    if(index ==0) ptr = 0x59CCA8;
    else ptr = 0x628298 - 0x150 * (index-1);
    return EPD(ptr);
}
cs
데이터 수정과 스크립트를 하나하나 설명하기는 어렵다 그러나 파일을 참고하면 바로 이해할 정도로 대부분 간단한 내용이다 이후에는 생각나는 특이사항 위주로 두서없이 작성할 예정이다

COMMENT(0)