Pokémon Script Project Index du Forum

S’enregistrer | Rechercher | Connexion
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

[Script] Ombre dynamique (complet)

 
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts
Sujet précédent :: Sujet suivant   
Auteur Message
Master of Dragons
Membre


Inscrit le: 26 Nov 2010
Messages: 45
Localisation: Sur ma chaise, à mon bureau

MessagePosté le: Mer 29 Déc - 12:28 (2010)    Sujet du message: [Script] Ombre dynamique (complet)

Bon, je sais qu'un script de ce genre a déjà été posté, cependant, j'ai remarqué qu'il posait des problèmes à certains...
Alors j'ai cherché, et quand je cherche, je trouve  Clin d'œil foireux

3 scripts :
           

Donc, pour commencer, remplacez Sprite_Character par :

#==============================================================================
# ¦ Sprite_Character modifié (See Sprite_Shadow and Sprite_Sun)
#==============================================================================

class Sprite_Character < RPG::Sprite

attr_accessor :character

def initialize(viewport, character = nil)
super(viewport)
@character = character
#------Sun edit----------
@sunlist=[]
if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["sun"])
if (character.list[1]!=nil and character.list[1].code == 108)
@self_angle=character.list[1].parameters[0]
else
@self_angle=45
end
if (character.list[2]!=nil and character.list[2].code == 108)
@self_opacity=character.list[2].parameters[0]
else
@self_opacity=128
end
for i in $game_map.events.keys.sort
if ($game_map.events.is_a?(Game_Event) and $game_map.events.list!=nil and $game_map.events.list[0].code == 108 and $game_map.events.list[0].parameters == ["o"])
@sunlist = Sprite_Sun.new(viewport, $game_map.events,@self_angle,@self_opacity)
end
end
@sunlist[1] = Sprite_Sun.new(viewport, $game_player,@self_angle,@self_opacity)
end
#------/Sun edit----------
#------Shadows edit---------
@ombrelist=[]
if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"])
if (character.list[1]!=nil and character.list[1].code == 108)
@anglemin=character.list[1].parameters[0]
end
if (character.list[2]!=nil and character.list[2].code == 108)
@anglemax=character.list[2].parameters[0]
end
if (character.list[3]!=nil and character.list[3].code == 108)
@distancemax=character.list[3].parameters[0]
end
for i in $game_map.events.keys.sort
if ($game_map.events.is_a?(Game_Event) and $game_map.events.list!=nil and $game_map.events.list[0].code == 108 and $game_map.events.list[0].parameters == ["o"])
@ombrelist = Sprite_Shadow.new(viewport, $game_map.events,self,@anglemin,@anglemax,@distancemax)
end
end
@ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax)
end
#------/Shadows edit----------
update
end

def update
super
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
self.visible = (not @character.transparent)
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
#------Shadows edit----------
if @ombrelist!=[]
for i in 1..@ombrelist.size
if @ombrelist!=nil
@ombrelist.update
end
end
end
#------/Shadows edit----------
#------Shadows edit----------
if @sunlist!=[]
for i in 1..@sunlist.size
if @sunlist!=nil
@sunlist.update
end
end
end
#------/Shadows edit----------
end
end


Ensuite créez un script Sprite_Shadow ou Sprite_Ombre (comme vous voulez) et placez-le au-dessus de Main :

#==============================================================================
# ¦ Sprit_Ombre (Sprite_Ombre )
# Based on Genzai Kawakami's shadows, dynamisme by Rataime, extra features Boushy
#==============================================================================

class Sprite_Shadow < RPG::Sprite

attr_accessor :character # ??????

def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0)
super(viewport)
@anglemin=anglemin.to_f
@anglemax=anglemax.to_f
@distancemax=distancemax.to_f
@character = character
@source = source
update
end

def update
super

if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
self.visible = (not @character.transparent)
if @tile_id == 0
sx = @character.pattern * @cw
@direct=@character.direction

if self.angle>90 or angle<-90

if @direct== 6
sy = ( 4- 2) / 2 * @ch
end
if @direct== 4
sy = ( 6- 2) / 2 * @ch
end
if @direct != 4 and @direct !=6
sy = (@character.direction - 2) / 2 * @ch
end
else
sy = (@character.direction - 2) / 2 * @ch
end
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y-5
self.z = @character.screen_z(@ch)-1
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
@deltax=@source.x-self.x
@deltay= @source.y-self.y
self.angle = 57.3*Math.atan2(@deltax, @deltay )
@angle_trigo=self.angle+90
if @angle_trigo<0
@angle_trigo=360+@angle_trigo
end
self.color = Color.new(0, 0, 0)
@distance = ((@deltax ** 2) + (@deltay ** 2))
self.opacity = 1200000/(@distance+6000)
@distance = @distance ** 0.5
if @distancemax !=0 and @distance>=@distancemax
self.opacity=0
end
if @anglemin !=0 or @anglemax !=0
if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax
self.opacity=0
end
if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax
self.opacity=0
end
end
end
end



Enfin, créez un troisième script que vous nommerez Sprite_Sun ou Sprite_Soleil (encore une fois, vous choisissez) au dessus de Main :

#==============================================================================
# ¦ Sprite_Sun
# # Based on Sprite_Shadow, modified by Rataime
#==============================================================================

class Sprite_Sun < RPG::Sprite
attr_accessor :character

def initialize(viewport, character = nil, self_angle = 45,self_opacity = 128)
super(viewport)
@character = character
@self_angle=self_angle
@self_opacity=self_opacity
update
end

def update
super
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end

self.visible = (not @character.transparent)

if @tile_id == 0
sx = @character.pattern * @cw
@direct=@character.direction

if self.angle>90 or angle<-90

if @direct== 6
sy = ( 4- 2) / 2 * @ch#@character.direction
end
if @direct== 4
sy = ( 6- 2) / 2 * @ch
end
if @direct != 4 and @direct !=6
sy = (@character.direction - 2) / 2 * @ch
end
else
sy = (@character.direction - 2) / 2 * @ch
end
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y-5
self.z = @character.screen_z(@ch)-1
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
self.angle = @self_angle-90
self.color = Color.new(0, 0, 0)
self.opacity = @self_opacity
end
end



Pour le fonctionnement :
           

-Créer une source lumineuse :

La source lumineuse sera un évènement parallèle avec, au début, un commentaire : s

-Créer une ombre pour un évènement (autre que le héros) :

L'évènement devra avoir, au début, le commentaire : o
(Par défaut, la source lumineuse projettera le faisceau lumineux à 360 degrés.)

-Petits effets :

Pour l'imiter la source, ajoutez-y deux autres commentaires avec chacun un chiffre qui définie un angle. C'est l'angle de la lumière projetée. Par exemple une lumière qui donne de la lumière seulement vers la droite et non vers la gauche.
Le premier commentaire sera pour définir l'angle de départ, le second, pour l'angle de fin.

Un quatrième commentaire servira à définir la longueur en pixel pour l'ombre. Ce commentaire comportera un chiffre entre 500 et 1000 (nombre de pixels)


Pour l'extérieur, il suffit de mettre, sur un évènement parallèle, un commentaire : sun. Pour limiter le soleil, vous pouvez définir la puissance de luminosité du soleil avec un commentaire comprenant un nombre entre 30 er 200 pour foncé ou pâle (200, c'est très pâle).


NOTE : Le héros a déjà son ombre.
           



Générique :
Scripts de
Rataime et Genzai Kawakami.



REMARQUES(personnelles ^^) :

Ces scripts sont incompatibles avec le "script de reflet sur l'eau" pour deux bonnes raisons :

-Tout d'abord, l'ombre sera décalée par rapport au reflet (très moche)
-Un évènement (sauf le héros) ne peut avoir ET le commentaire pour le reflet ET le commentaire pour l'ombre.

COMPATIBLE AVEC LES SYSTEMES PSP !
         
  

Voilà ^^
J'ai refait entièrement les explications et corrigé les fautes pour une meilleure compréhension.

Merci de me dire si ça vous a servi (que je sache si je peux en mettre d'autres Clin d'œil foireux )


Revenir en haut
Yahoo Messenger
Publicité






MessagePosté le: Mer 29 Déc - 12:28 (2010)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Arc-Arceus
Modérateur
Modérateur


Inscrit le: 21 Fév 2010
Messages: 911
Deus Ex Machina
Localisation: 8e dimension à droite
Féminin

MessagePosté le: Sam 1 Jan - 18:31 (2011)    Sujet du message: [Script] Ombre dynamique (complet)

Oui, je me souviens que D-black en avait posté un qui ne marchait pas terrible avec psp...
Tu l'as essayé et il fonctionne ?
Revenir en haut
Master of Dragons
Membre


Inscrit le: 26 Nov 2010
Messages: 45
Localisation: Sur ma chaise, à mon bureau

MessagePosté le: Sam 1 Jan - 19:12 (2011)    Sujet du message: [Script] Ombre dynamique (complet)

Il marche très bien.
Aucun problème, sauf peut-être que j'arrive pas à définir l'angle du soleil, mais le reste, c'est au poil Clin d'œil foireux
Revenir en haut
Yahoo Messenger
Nabusius
Membre


Inscrit le: 25 Sep 2012
Messages: 16

MessagePosté le: Jeu 27 Sep - 18:27 (2012)    Sujet du message: [Script] Ombre dynamique (complet)

Bonjour désoler pour le necro-necro post mais je n'arrive pas a le faire fonctionner :

---------- Erreur de script : Sprite_Character ----------
----- Version du logiciel : PSP DS v0.4
----- Type
NoMethodError

----- Message
- ARGS - []
undefined method `update' for [nil, #<Sprite_Sun:0x827d870>]:Array

----- Position dans Sprite_Character
Ligne 109

----- Backtrace
Script : Sprite_Character | Ligne : 109 | Méthode : in `update'
Script : Sprite_Character | Ligne : 107 | Méthode : in `each'
Script : Sprite_Character | Ligne : 107 | Méthode : in `update'
Script : Sprite_Character | Ligne : 53 | Méthode : in `initialize'
Script : Spriteset_Map | Ligne : 37 | Méthode : in `new'
Script : Spriteset_Map | Ligne : 37 | Méthode : in `initialize'
Script : Spriteset_Map | Ligne : 36 | Méthode : in `each'
Script : Spriteset_Map | Ligne : 36 | Méthode : in `initialize'
Script : Scene_Map | Ligne : 13 | Méthode : in `new'
Script : Scene_Map | Ligne : 13 | Méthode : in `main'
Script : Main | Ligne : 58
Revenir en haut
Zohran
Support Technique
Support Technique


Inscrit le: 14 Mai 2011
Messages: 906
Localisation: France
Masculin

MessagePosté le: Dim 25 Nov - 18:03 (2012)    Sujet du message: [Script] Ombre dynamique (complet)

J'ai exactement le même problème, t'as pas vérifié le script, ça c'est sûr...
Revenir en haut
Master of Dragons
Membre


Inscrit le: 26 Nov 2010
Messages: 45
Localisation: Sur ma chaise, à mon bureau

MessagePosté le: Mar 9 Avr - 23:14 (2013)    Sujet du message: [Script] Ombre dynamique (complet)

Après un looong moment d'absence, je reviens sur mes sujets. J'ai réessayé le script, il marche pour moi.
Revenir en haut
Yahoo Messenger
Pαlвσlѕку
Administrateur
Administrateur


Inscrit le: 17 Aoû 2008
Messages: 5 982
Masculin

MessagePosté le: Mar 9 Avr - 23:31 (2013)    Sujet du message: [Script] Ombre dynamique (complet)

En effet ça fait un bon moment.
Re-bienvenue à toi sur le forum. Imbécile heureux
Revenir en haut
Skype
Master of Dragons
Membre


Inscrit le: 26 Nov 2010
Messages: 45
Localisation: Sur ma chaise, à mon bureau

MessagePosté le: Mar 9 Avr - 23:32 (2013)    Sujet du message: [Script] Ombre dynamique (complet)

Merci ^^ Je reviens avec quelques idées nouvelles en épérant qu'elles marcheront et que je pourrais avoir le temps de les finaliser.
Revenir en haut
Yahoo Messenger
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 07:48 (2017)    Sujet du message: [Script] Ombre dynamique (complet)

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)
Traduction par : phpBB-fr.com