- 전체
- 게임 일반 (make game basics)
- 모바일 기획 및 디자인
- GameMaker Studio
- Unity3D
- Cocos2D
- 3D Engine OGRE
- 3D Engine irrlicht
- copperCube
- corona SDK
- Windows Basic Game
- BaaS (Mobile Backend)
- phnegap & cordova
- ionic & anguler
- parse (backend)
- firebase (backend)
- Game Backend Server / Opt
- web assembly
- Smart Makers
- pyGame & Ren'Py
- 머드(MUD) 게임 만들기
- Xamarin(자마린)
- flutter (플루터 앱 개발)
- construct 2 / 3
- pocketbase
- RPG Maker 시리즈
- godot engine
- playmaker(unity)
- react native
pyGame & Ren'Py [Ren'py] 렌파이로 육성 시뮬레이션 게임 만들기 (3) DSE 를 이용해 이벤트 만들기 (1)
2025.02.18 00:24
[Ren'py] 렌파이로 육성 시뮬레이션 게임 만들기 (3) DSE 를 이용해 이벤트 만들기 (1)

이제 연습 게임에 이벤트를 채워봅시다. event_dispatcher.rpy 를 본격적으로 사용할 시간입니다. 그 전에 DSE 엔진의 events.rpy 파일을 확인해서, 이벤트는 어떤 식으로 스크립트를 써야 만들어지는지 살펴봅시다.
event() 해석
이벤트를 만드려면 파이썬 블록에 event(어쩌구) 라고 적어야 합니다. 어쩌구에 있는 내용을 간단히 해석하자면 다음과 같습니다.
event('레이블 이름', priority = 우선도, 나머지는 전부 이벤트 실행 조건)
- 레이블 이름
- 이벤트 실행 조건
어쨌든 이 실행 조건들 간에는 파이썬 표현식에서 사용할 수 있는 and 나 or, not 같은 연산자를 사용할 수 있습니다.
event('marry', event.depends('engage_1') or event.depends('engage_2')) 나,
event('sub_lesson', event.depends('get_Fail') and 'intelligence == 0') 처럼 쓸 수 있다는 얘기입니다.
- priority
* 아까 이벤트 실행 조건 설명할 때 넘어갔던 event.어쩌구 함수들..은 직접 이벤트를 만들면서 설명드리겠습니다.
이벤트 만들기
프로젝트/game 폴더에 event_dispatcher.rpy 들어있는 것 확인하시고, 이제 이벤트를 만들어보도록 합시다.
* 이벤트에는 여러가지 내용이 들어가니까 관리하기 쉽게 스크립트 파일을 새로 만듭시다. 전 events.rpy 라는 새 파일을 만들었습니다.
* 이제 어떤 이벤트가 필요할지 생각해봅시다.
* 일정 조건을 달성하면 뿅 하고 등장하는 그런 것 외에도, 일반적인 상황에서 발생하는 스케쥴 실행 화면도 이벤트로 칩시다. 여러 게임에서는 기본 스케쥴을 실행할 때도 특정 조건에 따라 성공/실패 여부가 갈려서 스탯을 획득하거나 하니까요(예제 게임에선 그런 식으로 만들지는 않을 겁니다만 참고하시라는 의미에서 적어둡니다).
* 기초 설정 잡았을 때, 스케쥴 종류가 휴식, 전략 구상, 마인드 컨트롤, 연습 이렇게 네 가지 있었습니다.
휴식: 스트레스 4 감소, 정신력 1 증가,
연습: 상황 판단력 1 증가, 반응 속도 3 증가, 스트레스 3 증가.
전략 구상: 상황 판단력 2 증가, 정신력 1 증가, 스트레스 2 증가
마인드 컨트롤: 정신력 2 증가
(스트레스는 stress, 정신력은 mental, 상황 판단력은 judge, 반응 속도는 react 라는 변수명을 정해주었죠)
* 일단 각 스케쥴이 실행되면, 발생할 이벤트의 내용이 적인 레이블을 만들어줍니다. 이벤트로 쓰이는 각 레이블은 호출(call)되는 형식이기 때문에 레이블마다 끝에 return 을 적어주어서 원래 진행 흐름으로 돌아갈 수 있도록 해야 합니다. 진행상황을 확인할 수 있도록 한마디도 써줍시다.
# 여기서 stress = max(stress -4, 0) 는
stress 에서 - 4 하되 만일 이 결과값이 0보다 작으면 0을 stress 변수에 배정한단 의미입니다. 스탯 수치가 0 이하로 내려가지 않도록 하기 위해 사용한 함수입니다.
* 그리고 event() 함수를 이용해서 각 레이블이 실행될 수 있도록 이벤트들을 만들어줍니다. 우선도는 적지 않았으니, 기본값인 100이 적용될 겁니다.
이제 실행 조건을 적을 차례입니다. 사용자가 정한 스케쥴만 제 때 실행되도록 조건을...
어떻게 적어야 할까여....-.-
지금 스케쥴이
$ morning = '휴식'
$ free = '마인드 컨트롤'
같은 식으로 저장되어 있고 스크립트는
label morning:
label free:
label afternoon:
이런 식으로 작성되어있죠.
그럼 변수를 하나 만들어서 그 변수에 morning, free, afternoon 에 저장된 값을 옮기고, 각 레이블 끝마다 이벤트를 불러오도록 하면 되겠네요.
급하게 act 라는 변수를 하나 만듭시다.
act = ''
그리고 각 레이블에마다 act 를 적고 해당 시기에 실행할 스케쥴의 정보를 또 저장하도록 해줍니다.
label morning:
$ act = morning
이제 이벤트를 호출할 수 있도록 명령어를 하나 더 적어줍니다.
call events_run_period 를 사용하면 event() 로 만들어진 이벤트들 중에서 현재 조건에 맞는 이벤트를 실행시킬겁니다.
이제 다시 events.rpy 로 돌아가서 event() 함수들을 마저 작성합시다.
여기까지 완성한 게임의 스크립트를 확인하시고, 게임을 테스트해보시면서 잘못된 부분이 있나 확인합시다.
저는 7일째를 판정하는 if 문이랑 day 변수를 잘못 써서 6일 째에 게임이 끝나게 되더군요.. 그 부분을 수정했습니다.
다음 글은 특별한 조건에서 실행되는 이벤트를 만드는 방법입니다.

출처: https://askance.tistory.com/44 [백안시의 공방 - 소설형 게임 제작실:티스토리]
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 3 |
[pocketbase] 포켓 베이스(Pocket Base) 빠르게 입문하기(CRUD)
| 졸리운_곰 | 2024.08.20 | 342 |
| 2 |
[pocketbase] Flutter 및 Dart용 PocketBase 백엔드 : A PocketBase backend for Flutter and Dart
| 졸리운_곰 | 2024.08.18 | 394 |
| 1 |
[pocketbase] A PocketBase backend for Flutter and Dart : Flutter 및 Dart용 PocketBase 백엔드
| 졸리운_곰 | 2024.06.19 | 285 |

