# How this scene is implemented:
nvl_narrator "Nighten added Eileen to the group"
n_nvl e2m2 "Hey! Welcome to the demo Eileen!"
e_nvl "who's this?"
n_nvl e2m1 "haha, silly you"
n_nvl e1m2 "We talked about showing off the phone the other day, remember?"
e_nvl "it's today? {image=emoji/fear.png}"

A simple messaging system, built on top of the NVL mode and therefore more intuitive to use :)

Instructions:

  • Add the images and PhoneTexting.rpy to your project folder
  • In this file, change the name of the main character to yours (MC_Name)
  • Edit the nvl screen in screen.rpy as follow:
screen nvl(dialogue, items=None):
 
    #### ADD THIS TO MAKE THE PHONE WORK!! :) ###
    if nvl_mode == "phone":
        use PhoneDialogue(dialogue, items)
    else:
    ####
        ## Indent the rest of the screen
        window:
            style "nvl_window"
            # ...
  • Change gui.nvl_list_length in gui.rpy to None, so that all the message are shown 
  • You'll then have to make a nvl character speak!
  • To use the regular nvl screen again, change the nvl_mode variable to something else, like "classic"
  • To include emojis and pictures, you can simply add use an image tag; make sure they are the right size for the phone screen.

Video tutorial by Matthew Vimislik, aka Vimi

Mirror download on my website

Source code on Github

Credits:

The background is made by Uncle Mugen. All the other art assets are done by me, Nighten, and free to use in your project if you want (the sources file are available).

And if you need more help for your project, you can hire me as a programmer! :) ✨

Have a nice day!

StatusReleased
CategoryAssets
Rating
Rated 4.9 out of 5 stars
(58 total ratings)
AuthorNighten
Made withRen'Py
Tagsasset, Ren'Py, sourcecode
Code licenseMIT License
Asset licenseCreative Commons Zero v1.0 Universal
Average sessionDays or more

Download

Download NowName your own price

Click download now to get access to the following files:

yetanotherphone-1.0-mac.zip 39 MB
yetanotherphone-1.0-pc.zip 74 MB

Comments

Log in with itch.io to leave a comment.

Viewing most recent comments 1 to 40 of 78 · Next page · Last page

nvl_narrator "12-10-2016"
I thought of using it but not showing in android port. Any fixes??
(-1)

I'm having trouble with the text icons as it only shows the received icon is there a way i can prevent this??

Hey there! This took me a little bit to learn how to fully work and adjust, but this phone system has been working great for my next title. I'll be sure to give credit when I release it. Thank you~

Hello! When trying to use the phone thing it keeps sending same errors no matter what :(

```

I'm sorry, but an uncaught exception occurred.

While running game code:

  File "game/script.rpy", line 63, in script

    nvl_narrator "Nighten added Eileen to the group"

  File "renpy/common/00nvl_mode.rpy", line 354, in do_add

    if store._nvl_language != _preferences.language:

AttributeError: 'StoreModule' object has no attribute '_nvl_language'

-- Full Traceback ------------------------------------------------------------

Full traceback:

  File "game/script.rpy", line 63, in script

    nvl_narrator "Nighten added Eileen to the group"

  File "C:\Users\*****\Desktop\******\renpy-8.1.3-sdk\renpy\ast.py", line 2560, in execute

    Say.execute(self)

  File "C:\Users\*****\Desktop\****\renpy-8.1.3-sdk\renpy\ast.py", line 615, in execute

    renpy.exports.say(who, what, *args, **kwargs)

  File "C:\Users\*****\Desktop\*****\renpy-8.1.3-sdk\renpy\exports.py", line 1494, in say

    who(what, *args, **kwargs)

  File "C:\Users\****\Desktop\****\renpy-8.1.3-sdk\renpy\character.py", line 1387, in __call__

    self.do_add(who, what)

  File "renpy/common/00nvl_mode.rpy", line 354, in do_add

    if store._nvl_language != _preferences.language:

AttributeError: 'StoreModule' object has no attribute '_nvl_language'

okay nevermind i fixed it :)

whats the recommended size for an image tag? in 1920 1080 resolution?

Wondering if i it's possible to add a date and time function to it.

(1 edit) (+1)

sorry for disturbing but i have a problem with android port of game with this plugin.

when i ported my game on my phone and going to the moment of chatting, i see that the mc_name part just has only bubbles, without any text. but  another person's bubbles working great, everything is visible. i don't know how to solve these problem, please help. 
* on photo is native ren'py emulator, but its the same as real phone 

Deleted 138 days ago

What numbers do I need to change to make it work at 1280 by 720?

Later versions of Renpy 8 now support emoji use natively🎉👏 The image tag method is still nice for anyone wanting a customized emoji experience however.

https://www.renpy.org/doc/html/changelog.html#emoji-related-text-improvement

(+1)

Thank you so much Nighten for this system! If somebody has the last text do a weird animation before hiding the phone you need to put None in "config.nvl_adv_transition" on your main script.

I have one question, when I finish using the phone, I see that there isn't a disappearing animation, I tried making one but I don't know where to put it so it can be played. If somebody knows were to put it, or has a different solution it would help me a lot. Thank you :)

Hi! I know this is 4 months too late but first of all, thank you for the "config.nvl_adv_transition" tip, it saved me from a lot of frustration.

You probably found it, but towards the top of the PhoneTexting.rpy file there are these two transforms:

transform phone_transform(pXalign=0.5, pYalign=0.5):     
    xcenter pXalign     
    yalign pYalign
transform phone_appear(pXalign=0.5, pYalign=0.5): #Used only when the dialogue have one element
     xcenter pXalign
     yalign pYalign
     on show:
         yoffset 1080
         easein_back 1.0 yoffset 0

You can add the hide animation to the top one

transform phone_transform(pXalign=0.5, pYalign=0.5):
    xcenter pXalign
   yalign pYalign     #This is where you add the hide animation.
   on hide:
        yoffset 0
        easein_back 1.0 yoffset 1080 transform phone_appear(pXalign=0.5, pYalign=0.5): #Used only when the dialogue have one element
    xcenter pXalign
    yalign pYalign     on show:
        yoffset 1080
        easein_back 1.0 yoffset 0

I did a quick test and it seems to be working, I don't know if it would cause any problems but it would at least give a starting point.

Hiiii, thank you so much for your help!!!

I have tried it, and it seems that the hiddinganimation works, but it also plays every time a new message appears.

I will be trying to find a way to only play it when there is no more messages to send.

I'll keep you updated if I find the solution ;D

Hi TruitaDPatata, thank you so much for the nvl_adv_transition tip. Please let me know when you find out the solution to the hiding animation when closing phone too. Thank you!

Greetings!
I don't suppose anyone would know how to make each text box wrap around the text as opposed to being a set width? I've tried a few things from changing xfill/yfill to false or removing any xmaximum values but nothing seems to work. 💦

(+1)

I have a issue where if I try and use [povname] as the MC_Name the phone only sends receive messages and not send messages, anyone know a way to fix this?

(+2)

Mc won't show as send(yellow) in game

Whoever the sender is, it should be the MC_Name variable. For instance, if you want 'Zellous' to be the sender, then the MC_Name would have to be 'Zellous'. 

It's in PhoneTexting.rpy Line 4

Thank you so much for providing this! I used it for my NaNoRenO demo entry and I loved being able to add texting to my story. I don't think I would've been able to figure it out without this system. Thanks again :)

(1 edit)

Bonjour, merci pour ce super téléchargement :).
Je souhaite mettre le téléphone plusieurs fois dans mes chapitres, les messages reçus seront de personnes differentes.
Est ce que c'est possible? si oui comment dois-je procéder s'il vous plait?
S'utilise que pour une personne?

Merci :)

Bon courage.

(-1)

This is my first time coding the text massage to try it. I did watch the massage code no matter hard I really try with it but it just gotten failed and now i feeling pretty abit stress out. And I don't know what else can possibly do? 

(+2)

This is great! Way better than what I cooked up on my own. I replaced my system with this fairly easily. 

I've been able to modify just enough that I can have multiple characters texting from different phones. 

Eg. most texts are from husband's phone to other people however there are scenes where the wife is texting someone else. I was able to set it up with a little tinkering.

Inline photos also work great!

(Sorry if you got a ghost notification, I accidentally commented on the other phone template you have!! Also I've apparently commented before, so apologies for asking for your help once again LOL)

I was wondering, I really want to have text conversations with multiple characters, which I *can* do with the names, but for the sender (whoever's chatting on the left), their icons ALL change to whoever the most recent character chatting is. Is there a way to have multiple people in a chat while maintaining everyone's icons as separate from each other?

Hey, I was wondering if you can do ____ is Typing thing that disappears after a text has been sent?

I will try to port it to Godot using my Rakugo project: https://rakugoteam.github.io

i like it very much, but it would be great if you could send images in it

Hi! Thank you so much for the code! Is there a way to keep the phone screen up while still showing the textbox? Currently the phone disappears when I have the main character thinking to herself in the game textbox, and would like the phone screen to stay up while she thinks to herself. Thanks in advance!

Hello, I have been using this phone UI for my game for a little while now, but I was wondering if I could change something when the phone disappears. I was curious if either 1) The phone could reverse its appearance animation when the conversation is done (a downward easing animation), or 2) when the phone fades out, the last element of the text (the final message) still plays the message appear animation. Is it possible to have the message stay still when the phone disappears?

Thank you for your time, and I really appreciate this pack! Just that one little edit to the exit animation would make it perfect for me.

Hello, can someone tell me how I can have a zoom of the photo sent to the smartphone please? Thx

I just realized that I had rated the wrong messenger code, no matter now you get another 5 :)
Regards 

Tom

How do I remove text history? My VN has multiple perspectives, so it wouldn't really make sense for them to have the same text history as each other.

(+4)(-1)

nvl clear

(+1)

Hello, I was wondering if it's possible to add videos besides pictures.
I tried with a gif but it shows a static picture, do you know if there's a way? :)

(2 edits)

we figured out a way, but it is not inside the nvl dialog itself - you'll need to make some screens in your favorite graphics tool. This example produces a "full screen" video effect on the phone, then returns the player to the phone chat.

Basically, we use 2 screens:
A ('phone_frame') is an image of the MC's hand holding the phone over a background, with the phone screen transparent
B  ('phone_bg') is an identical image of the MC's hand holding the phone, but the phone is opaque and blank, and the background is transparent

A displays on top, then the nvl screen from nighten's code, then B displays behind both.
The video we want to show is a ren'py Image called vid_01  that uses Movie(play="file") in its declaration.

So the text chat happens in the nvl screen, then when we want the player to receive the video, we do:

nvl_narrator "Video Stream Starting..."
show vid_01 behind phone_frame
$ renpy.pause() # in our case, player watches video loop "on" the phone until click
hide vid_01
nvl_narrator "Video Stream Ended"
# text chat carries on


Hi! I'm having a bit of an issue with the Phone on Android builds, the protagonist's messages don't show up on the screen (only the background block color shows up). It works perfectly on the other builds (PC, Linux, and Mac). Could you help me with that? Let me know if you need more details or screenshots to better understand the issue. Thank you!

(11 edits) (+4)

Here is a little "hack" that worked for me:

Find these lines in PhoneTexting.rpy:

if d.who == MC_Name:
    color "#FFF"
    text_align 1.0
    xpos -580
else:
    color "#000"

Replace the xpos -580 with this:

if renpy.variant("small"):
    xpos -1067 # adjust this number as you see fit
else:
    xpos -580

Now the whole code should look like this:

if d.who == MC_Name :
    color "#FFF"
    text_align 1.0
    if renpy.variant("small"):
        xpos -1067
    else:
        xpos -580
else:
    color "#000"

Hi, I was wondering how to keep the phone animation when it pops on screen. The first time it shows the animation of it sliding in but the second and third time it skips the animation all together! Thank you so much!

Hi! The animation is tied to the length of the conversation; basically I made it so it slides in only when there is one message, so either when the game start or after a "novel clear".

In a previous version it was tied to a variable that you would turn on and off to play the slide animation once (or else it would play for every message). It was just way too many repetition since you would need to change the variable a lot throughout the game; but ping me again later and I will give you the instruction to edit the code, so that you can play the animation when you want to (I can't at the moment, but I would be happy to help later)

(-1)

Hey! If you have the time today, could you should me how to do it? I was also wondering if there was a way to clear the phone messages so when the phone pops up next it doesn't show the old texts? Thanks for getting back to me!

nvl clear # removes old texts

omg thank u

Hi, I was wondering if anyone else has issues with using speech bubbles in Ren'py 8.1.1 with the phone and if anyone has found a workaround. Here is the exception:

raise Exception("A speech bubble is being used, but bubble.properties has not been set."

(-1)

Hello! This code has been published long before Ren'py added the speech bubble feature. 

Games made before the release of Ren'Py 8.1 won't include the default screens and settings required for the speech bubble system. 

You can refer to the documentation here to add support to this project:

https://www.renpy.org/doc/html/bubble.html#adding-bubble-support-to-a-game

(+1)

Used it for https://azurecoffin.itch.io/magicalgirldndzoom! Thank you so much! We couldn't have completed our game without your help!!

In my game phone appears twice. First time for just a moment fixed on the spot, immediately after appears for the 2nd time from the bottom.

(+2)

Is there a way to make the text from the MC align to the left instead?

(+2)

Hi, while I can't give you the answer, I can give hope :) I have done exactly what you asked long ago while messing with the texting. Control f search "align" and it should be located wherever the Players chat box is ran

(+1)

Late. But hard-coding the mc_name worked for me.

Phone is not showed in my game. Am I doing something wrong?

(+2)

You have to add the "PhoneTexting.rpy" to your "game" folder. Then you have to replace the nvl screen in the screens.rpy with the nvl section from the asset pack. look for the comment

#### ADD THIS TO MAKE THE PHONE WORK!! :) ###


and then add the phone image files from the asset pack as well.

(3 edits) (+1)

Thank you! 

(+1)

if anyone knows how to change the font and icon sizes please let me know.

(+1)

Hello, thank you for the awesome work! It really helps me but i have a question.

is it possible to change the text size of the dialogue on the phone?

(2 edits)

if you go to the PhoneTexting.rpy file there is a screen called nvl_phonetext. look for vbox about 42 lines down. now find text d.who and simply add the size attribute, like this:

text d.who:
    size 30

this changes the characters name size displayed on the phone, if you liked the size before, simply don't add the code above.

for the text sizes in the messages it's basically the same except it's text d.what. you can find this a little further down. it already has attributes assigned, so just add the size underneath those.

text d.what:
    pos (0,0)
    xsize 350
    slow_cps False
    size 28

the sizes i put in there are just suggestions, you can put in whatever you like best.

hope this helped!

Hey! Awesome work! :)
May I ask how did you manage to create a "chat log"? I mean, how did you manage to make the messages stay on screen and scroll?
Thank you in advance!

(2 edits)

Hello, anyone know why i don't see my MC name  ? 

define nvl_mode = "phone"
define MC_Name = "Me"
init -1 python:
    phone_position_x = 0.3
    phone_position_y = 0.5
    def Phone_ReceiveSound(event, interact=True, **kwargs):
        if event == "show_done":
            renpy.sound.play("audio/sound/002_notifText.ogg")
    def Phone_SendSound(event, interact=True, **kwargs):
        if event == "show_done":
            renpy.sound.play("audio/sound/002_notifText.ogg")
    def print_bonjour():
        print("bonjour")
transform phone_transform(pXalign=0.5, pYalign=0.5):
    xcenter pXalign
    yalign pYalign
transform phone_appear(pXalign=0.5, pYalign=0.5): #Used only when the dialogue have one element
    xcenter pXalign
    yalign pYalign
    on show:
        yoffset 1080
        easein_back 1.0 yoffset 0
transform message_appear(pDirection):
    alpha 0.0
    xoffset 50 * pDirection
    parallel:
        ease 0.5 alpha 1.0
    parallel:
        easein_back 0.5 xoffset 0
transform message_appear_icon():
    zoom 0.0
    easein_back 0.5 zoom 1.0
transform message_narrator:
    alpha 0.0
    yoffset -50
    parallel:
        ease 0.5 alpha 1.0
    parallel:
        easein_back 0.5 yoffset 0
screen PhoneDialogue(dialogue, items=None):
    style_prefix "phoneFrame"
    frame at phone_transform(phone_position_x, phone_position_y):
        if len(dialogue) == 1:
            at phone_appear(phone_position_x, phone_position_y)
        viewport:
            draggable True
            mousewheel True
            # cols 1
            yinitial 1.0
            # scrollbars "vertical"
            vbox:
                null height 20
                use nvl_phonetext(dialogue)
                null height 100
screen nvl_phonetext(dialogue):
    style_prefix None
    $ previous_d_who = None
    for id_d, d in enumerate(dialogue):
        if d.who == None: # Narrator
            text d.what:
                xpos -335
                ypos 0.0
                xsize 330
                text_align 0.0
                #italic True
                size 20
                slow_cps False
                id d.what_id
                if d.current:
                at message_narrator
        else:
            if d.who == MC_Name:
                $ message_frame = "images/(sg)01nvl_phone/004_send_frame.png"
            else:
                $ message_frame = "images/(sg)01nvl_phone/003_received_frame.png"
            hbox:
                spacing 10
                if d.who == MC_Name:
                    box_reverse False
                if previous_d_who != d.who:
                    if d.who == MC_Name:
                        $ message_icon = "images/(sg)01nvl_phone/icon/phone_hero_icon.png"
                    else:
                        $ message_icon = "images/(sg)01nvl_phone/icon/phone_"+d.who+"_icon.png"
                    add message_icon:
                        if d.current:
                            at message_appear_icon()
                else:
                    null width 50
                vbox:
                    yalign 1.0
                    if d.who != MC_Name and previous_d_who != d.who:
                        text d.who :
                            size 25
                    frame:
                        padding (10,2)
                        background Frame(message_frame, 23,23,23,23)
                        xsize 330
                        if d.current:
                            if d.who == MC_Name:
                                at message_appear(1)
                            else:
                                at message_appear(-1)
                        text d.what:
                            pos (0,0)
                            xsize 330
                            slow_cps False
                            if d.who == MC_Name :
                                size 20
                                color "#d3d7da"
                                text_align 0.0
                            #    xpos -580
                            else:
                                size 20
                                color "#d3d7da"
                            id d.what_id
        $ previous_d_who = d.who
style phoneFrame is default
style phoneFrame_frame:
    background Transform("images/(sg)01nvl_phone/002_phone_bkg.png", xcenter=0.5,yalign=0.5)
    foreground Transform("images/(sg)01nvl_phone/001_phone_frg.png", xcenter=0.5,yalign=0.5)
    ysize 815
    xsize 495
style phoneFrame_viewport:
    yfill True
    xfill True
    yoffset 30
    xoffset 40
style phoneFrame_vbox:
    spacing 10
    xfill True
<img src="https://img.itch.zone/aW1nLzEyMjkzNTQzLnBuZw==/original/OphwF2.png" style="background-color: rgb(255, 255, 255); color: inherit; font-family: inherit; font-size: inherit; white-space: normal;">

You would see your Mc's name in the script file,  not in the phone file.
define the mc for the nvl mode
example:
define mc_nvl = Character("Mc_name", kind=nvl, image="me", callback=Phone_ReceiveSound)

something like that...

Viewing most recent comments 1 to 40 of 78 · Next page · Last page