프로그래밍 강의/GML (7)
문자열을 어떤 문자열을 기준으로 자르는 스크립트입니다. 예를 들어 "2014.02.27" 라는 문자열이 있을 때, scr_string_strip_at("2014.02.27", ".", 1) 을 하게 되면, "02" 라는 문자열이 반환되는 구조입니다. 간단하면서도 필수적인 함수인데, 겜스에는 아직 없더라고요. ㅎㅎ ///scr_string_strip_at(string, substring, real) repeat(argument2){argument0=string_delete(argument0, 1, string_pos(argument1, argument0))} argument0=string_delete(argument0, string_pos(argument1, argument0), string_length(..
문자열로부터 CRC-32 해시값을 구해주는 스크립트입니다. 스크립트가 많아서 GML 파일로 첨부하였으며, scr_crc32_init, scr_crc32_final, scr_crc32_get 으로 구성되어있습니다. * 주의사항 게임메이커: 스튜디오(GameMaker: Studio)의 실수는 8바이트이지만, scr_crc32_get 에서 CRC-32 의 해시값은 4바이트로 반환됩니다. 이러한 둘의 바이트 차 때문에 마지막 NOT 연산 후 값이 음수가 나올 수도 있으므로, 음수가 나오는 것이 싫다면, "return (crc ^ $ffffffff)"을 붙여주세요. 사용하실 때에 init 와 final 스크립트는 게임을 시작했을 때와 끝냈을 때 각각 한 번만 사용하면 됩니다. 이 스크립트는 김게맛(sodium03..
체크섬을 생성하는 스크립트 ///scr_checksum_get(buffer, size) var pos = buffer_tell(argument0), sum = 0; buffer_seek(argument0, buffer_seek_start, 0) while(buffer_tell(argument0)> 16) + (sum & $ffff) sum += (sum >> 16) sum = ((~sum) & $ffff) return sum 체크섬을 검증하는 스크립트 ///scr_checksum_verify(buffer, size, checksum) var pos = buffer_tell(argument0), sum = argument2; buffer_seek(argument0, buffer_seek_start, 0) ..
이 스크립트는 인스턴스가 룸 밖으로 나가지 못하게 하며, 좌표의 기준을 스프라이트의 충돌 박스(bbox)로 잡기 때문에 보다 자연스럽습니다. 사용하실 때에 이 스크립트를 End Step 이벤트에 넣어주세요. ///scr_room_block() if(0>=bbox_left){x=x-bbox_left} if(0>=bbox_top){y=y-bbox_top} if(bbox_right>=room_width){x=room_width+(x-bbox_right)} if(bbox_bottom>=room_height){y=room_height+(y-bbox_bottom)} +) 간략화 버전 x = max(x-bbox_left, min(x, room_width+(x-bbox_right))) y = max(y-bbox_top..
이 스크립트는 16진수 문자열을 10진수 실수로 변환해줍니다. 소문자 16진수 문자열도 지원하기를 원하시면 //num1=string_upper(num1) 의 주석을 제거해주시면 됩니다. 어렸을 때 만든 거라 최적화 부분이 잘 되어있는지는 모르겠네요. 스크립트 사용방법은, 변수 = 스크립트("A") 이런 식으로 사용하시면 됩니다. ///HEX to DEC: Real var num1, length, total, va1, i, j; num1=argument0 //num1=string_upper(num1) while(string_copy(num1, 1, 1)="0"){num1=string_delete(num1, 1, 1)} length=string_length(num1) total=0 for(i=0; i!=le..
이 스크립트는 10진수를 16진수로 변환하여 문자열로 반환해줍니다. 변환의 원리는 숫자를 16으로 나눈 뒤 pos를 구해서 hexlist에 있는 문자로 치환하는 방식입니다. 스크립트 사용 방법은, 변수 = 스크립트(10) 이렇게 하시면 됩니다. ///DRC to HEX: String var num1, decimal, hexpos, hexlist, sRevReturn, sReturn, i; hexlist = "0123456789ABCDEF" sRevReturn = "" sReturn = "" num1 = argument0 while(num1>0) { decimal = (num1/16) num1 = floor(decimal) hexpos = (decimal-num1)*16 sRevReturn+=string_..
위 스크립트는 문자열 변수를 어떤 문자열을 기준으로 자르는 스크립트입니다. 예를 들어 문자열 변수가 "a,b,c,d" 일 때, 스크립트(문자열 변수, ",") 를 하게 되면 return_str 배열에 abcd 가 차곡차곡 들어가게 됩니다. 이 스크립트는 리턴 값으로 커트 기준 문자열의 개수를 반환합니다. ///문자열 변수를 문자열을 기준으로 자르는 스크립트 var str, pos, count, i; str = argument0 pos = 0 count = string_count(argument1, argument0) for(i=0; i